1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
"""Starlette application factory for ollama-web."""
from __future__ import annotations
from pathlib import Path
from starlette.applications import Starlette
from starlette.middleware import Middleware
from starlette.middleware.cors import CORSMiddleware
from starlette.routing import Mount, Route
from starlette.staticfiles import StaticFiles
from .config import settings
from .routes import chat as chat_route
from .routes import models as models_route
from .routes import pages as pages_route
_STATIC_DIR = Path(__file__).resolve().parent / "static"
def create_app() -> Starlette:
"""Build and return the configured Starlette application."""
routes = [
Route("/", pages_route.index, name="index"),
Route("/api/chat", chat_route.chat, methods=["POST"], name="chat"),
Route("/api/models", models_route.get_models, methods=["GET"], name="models"),
Route("/api/health", models_route.health, methods=["GET"], name="health"),
Mount("/static", app=StaticFiles(directory=str(_STATIC_DIR)), name="static"),
]
middleware = [
Middleware(
CORSMiddleware,
allow_origins=["*"],
allow_methods=["*"],
allow_headers=["*"],
)
]
app = Starlette(routes=routes, middleware=middleware)
app.state.settings = settings
app.state.tool_names = ["web_search", "scrape_url"]
return app
app = create_app()
|