Repository navigation
Expand file tree
/
Copy pathmain.py
More file actions
87 lines (69 loc) · 2.19 KB
/
Copy pathmain.py
File metadata and controls
87 lines (69 loc) · 2.19 KB
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import JSONResponse
from codeme_agent.config import settings
from codeme_agent.db import Base, engine
from codeme_agent.ollama import OllamaClient, OllamaError
from codeme_agent.routers import router
from codeme_agent.schemas import GenerateRequest, GenerateResponse
from codeme_agent.prompt_engine import build_prompt, generate_code
from codeme_agent.workspace import WorkspaceError
@asynccontextmanager
async def lifespan(app: FastAPI):
Base.metadata.create_all(bind=engine)
yield
app = FastAPI(
title=settings.app_name,
description=settings.description,
version=settings.version,
lifespan=lifespan,
)
app.add_middleware(
CORSMiddleware,
allow_origins=settings.cors_origins,
allow_methods=["*"],
allow_headers=["*"],
)
app.include_router(router)
@app.exception_handler(WorkspaceError)
def workspace_error_handler(request, exc: WorkspaceError):
return JSONResponse(status_code=400, content={"detail": str(exc)})
@app.get("/health")
def health():
return {"status": "ok"}
@app.get("/api/health")
def api_health():
try:
models = OllamaClient().list_models()
except OllamaError as exc:
return JSONResponse(
status_code=503,
content={"status": "error", "ollama": "unavailable", "detail": str(exc)},
)
if settings.default_model not in models:
return JSONResponse(
status_code=503,
content={
"status": "error",
"ollama": "ok",
"model": settings.default_model,
"models": models,
"detail": "Configured Ollama model is not installed",
},
)
return {
"status": "ok",
"ollama": "ok",
"model": settings.default_model,
"models": models,
}
@app.post("/generate", response_model=GenerateResponse)
def generate(request: GenerateRequest):
prompt = build_prompt(request)
code = generate_code(prompt)
return GenerateResponse(
language=request.language,
prompt=prompt,
code=code,
)