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}")