File size: 1,331 Bytes
5420da2 11ba014 7b5f176 11ba014 7b5f176 11ba014 |
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 |
import json
from fastapi import APIRouter, HTTPException
from fastapi.responses import StreamingResponse
from core.llm import LLMClient
from core.memory import save_user_state, load_user_state
router = APIRouter()
llm_client = LLMClient(provider="ollama") # Default to Ollama
@router.post("/chat")
async def chat(user_id: str, message: str):
if not message:
raise HTTPException(status_code=400, detail="Message is required")
# Load user state from Redis
user_state = load_user_state(user_id)
conversation_history = json.loads(user_state.get("conversation", "[]")) if user_state else []
# Add user message to history
conversation_history.append({"role": "user", "content": message})
# Generate AI response
try:
full_response = ""
response_stream = llm_client.generate(prompt=message, stream=True)
# Collect streamed response
for chunk in response_stream:
full_response += chunk
# Save updated conversation
conversation_history.append({"role": "assistant", "content": full_response})
save_user_state(user_id, {"conversation": json.dumps(conversation_history)})
return {"response": full_response}
except Exception as e:
raise HTTPException(status_code=500, detail=f"LLM generation failed: {e}")
|