Commit e02dd127 authored by Kantz's avatar Kantz
Browse files

context API hinzugefügt

parent 90e48a24
from __future__ import annotations
from typing import List, Optional
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel, Field
from app.deterministic_services import context_store
from app.deterministic_services.vector_store import Retrieved
router = APIRouter()
class ChatMessage(BaseModel):
role: str = Field(..., pattern="^(user|assistant)$")
text: str = Field(..., min_length=1)
class ContextRequest(BaseModel):
messages: List[ChatMessage]
draft: Optional[str] = None
@router.post("/api/context/retrieval")
def get_retrieval_context(request: ContextRequest) -> dict:
if not request or not request.messages:
raise HTTPException(status_code=400, detail="messages required")
messages = [{"role": m.role, "content": m.text} for m in request.messages]
chat_id = context_store.get_chat_id(messages, draft=request.draft)
sheet = context_store.load_sheet(chat_id)
if not sheet:
raise HTTPException(status_code=404, detail="context sheet not found")
result = context_store.get_retrieval_context(sheet)
if not result or not result.get("query"):
return {
"chat_id": chat_id,
"query": "",
"children": [],
"children_direct": [],
"children_expanded": [],
"subsections": [],
"sections": [],
"neighbors": [],
}
def pack(items: list[Retrieved]) -> list[dict]:
return [item.to_dict() for item in items]
return {
"chat_id": chat_id,
"query": result["query"],
"children": pack(result["children"]),
"children_direct": pack(result["children_direct"]),
"children_expanded": pack(result["children_expanded"]),
"subsections": pack(result["subsections"]),
"sections": pack(result["sections"]),
"neighbors": pack(result["neighbors"]),
}
...@@ -2,7 +2,7 @@ from contextlib import asynccontextmanager ...@@ -2,7 +2,7 @@ from contextlib import asynccontextmanager
from fastapi import FastAPI from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
from app.api import canvas, chat, health, retrieval from app.api import canvas, chat, health, retrieval, context
from app.config import get_frontend_url from app.config import get_frontend_url
...@@ -25,4 +25,5 @@ app.add_middleware( ...@@ -25,4 +25,5 @@ app.add_middleware(
app.include_router(chat.router) app.include_router(chat.router)
app.include_router(canvas.router) app.include_router(canvas.router)
app.include_router(retrieval.router) app.include_router(retrieval.router)
app.include_router(context.router)
app.include_router(health.router) app.include_router(health.router)
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment