Spaces:
Sleeping
Sleeping
| # Conversation History Feature | |
| ## Overview | |
| The backend now supports **multi-turn conversations** with persistent history across requests. Each conversation is tracked using a unique `session_id`. | |
| ## Features | |
| - ✅ Session-based conversation tracking | |
| - ✅ Automatic session cleanup (1 hour timeout by default) | |
| - ✅ Message history trimming (max 20 messages per session) | |
| - ✅ Works with `/ask`, `/ask_stream`, and `/code_assist` endpoints | |
| - ✅ History management endpoints | |
| ## How to Use | |
| ### 1. Starting a Conversation (without session_id) | |
| The backend will automatically create a new session: | |
| ```bash | |
| curl -X POST http://127.0.0.1:7860/ask \ | |
| -H "Content-Type: application/json" \ | |
| -d '{ | |
| "query": "Hello, can you help me write a Python function?", | |
| "metadata": {"skill": "moderate_learner", "emotion": "neutral"} | |
| }' | |
| ``` | |
| Response includes `session_id`: | |
| ```json | |
| { | |
| "reply": "I'd be happy to help...", | |
| "session_id": "550e8400-e29b-41d4-a716-446655440000" | |
| } | |
| ``` | |
| ### 2. Continuing a Conversation (with session_id) | |
| Pass the `session_id` to continue the conversation: | |
| ```bash | |
| curl -X POST http://127.0.0.1:7860/ask \ | |
| -H "Content-Type: application/json" \ | |
| -d '{ | |
| "query": "Can you make it handle edge cases?", | |
| "session_id": "550e8400-e29b-41d4-a716-446655440000", | |
| "metadata": {"skill": "moderate_learner", "emotion": "neutral"} | |
| }' | |
| ``` | |
| The AI will remember the previous context (the function you were discussing). | |
| ### 3. Streaming Responses | |
| Works the same way with `/ask_stream`: | |
| ```bash | |
| curl -X POST http://127.0.0.1:7860/ask_stream \ | |
| -H "Content-Type: application/json" \ | |
| -d '{ | |
| "query": "Explain how this works", | |
| "session_id": "550e8400-e29b-41d4-a716-446655440000" | |
| }' | |
| ``` | |
| The session_id is sent as an SSE event: `event: session\ndata: <session_id>\n\n` | |
| ### 4. Code Assistance with History | |
| Use `/code_assist` with conversation history: | |
| ```bash | |
| curl -X POST http://127.0.0.1:7860/code_assist \ | |
| -H "Content-Type: application/json" \ | |
| -d '{ | |
| "query": "Write a function to calculate fibonacci", | |
| "session_id": "550e8400-e29b-41d4-a716-446655440000", | |
| "metadata": {"skill": "moderate_learner", "emotion": "curious"} | |
| }' | |
| ``` | |
| ## History Management Endpoints | |
| ### Get Conversation History | |
| ```bash | |
| curl -X POST http://127.0.0.1:7860/get_history \ | |
| -H "Content-Type: application/json" \ | |
| -d '{"session_id": "550e8400-e29b-41d4-a716-446655440000"}' | |
| ``` | |
| Response: | |
| ```json | |
| { | |
| "session_id": "550e8400-...", | |
| "messages": [ | |
| {"role": "system", "content": "You are CodeMate..."}, | |
| {"role": "user", "content": "Hello..."}, | |
| {"role": "assistant", "content": "I'd be happy..."} | |
| ], | |
| "message_count": 5, | |
| "last_active": 1699459200.123 | |
| } | |
| ``` | |
| ### Clear History for a Session | |
| ```bash | |
| curl -X POST http://127.0.0.1:7860/clear_history \ | |
| -H "Content-Type: application/json" \ | |
| -d '{"session_id": "550e8400-e29b-41d4-a716-446655440000"}' | |
| ``` | |
| ### Clear All Sessions | |
| ```bash | |
| curl -X POST http://127.0.0.1:7860/clear_history \ | |
| -H "Content-Type: application/json" \ | |
| -d '{}' | |
| ``` | |
| ### List All Active Sessions | |
| ```bash | |
| curl http://127.0.0.1:7860/list_sessions | |
| ``` | |
| Response: | |
| ```json | |
| { | |
| "sessions": [ | |
| { | |
| "session_id": "550e8400-...", | |
| "message_count": 5, | |
| "last_active": 1699459200.123 | |
| } | |
| ], | |
| "total_count": 1 | |
| } | |
| ``` | |
| ## Configuration (Environment Variables) | |
| ```bash | |
| # Session timeout in seconds (default: 3600 = 1 hour) | |
| HISTORY_TIMEOUT_SECONDS=3600 | |
| # Maximum messages per session (default: 20) | |
| MAX_HISTORY_LENGTH=20 | |
| ``` | |
| ## Architecture | |
| ### Message Format | |
| Messages follow the OpenAI chat format: | |
| ```python | |
| { | |
| "role": "system" | "user" | "assistant", | |
| "content": "message text" | |
| } | |
| ``` | |
| ### Storage | |
| - In-memory storage using `defaultdict` | |
| - Auto-cleanup of old sessions when > 100 sessions exist | |
| - Each session stores messages + last_active timestamp | |
| ### Trimming | |
| When a session exceeds `MAX_HISTORY_LENGTH`: | |
| - System message is preserved | |
| - Only recent messages are kept | |
| - Ensures token limits aren't exceeded | |
| ## Example Multi-Turn Conversation | |
| ```bash | |
| # Turn 1 | |
| curl -X POST http://127.0.0.1:7860/ask \ | |
| -H "Content-Type: application/json" \ | |
| -d '{"query": "Write a Python function to reverse a string"}' | |
| # Response: {"reply": "Here's a function...", "session_id": "abc-123"} | |
| # Turn 2 (AI remembers the function from Turn 1) | |
| curl -X POST http://127.0.0.1:7860/ask \ | |
| -H "Content-Type: application/json" \ | |
| -d '{"query": "Can you add error handling to it?", "session_id": "abc-123"}' | |
| # Turn 3 (AI remembers both previous turns) | |
| curl -X POST http://127.0.0.1:7860/ask \ | |
| -H "Content-Type: application/json" \ | |
| -d '{"query": "Now make it work with unicode", "session_id": "abc-123"}' | |
| ``` | |
| ## Notes | |
| - Sessions are stored in memory (cleared on server restart) | |
| - For production, consider using Redis or a database | |
| - The cache still works for identical first messages | |
| - Conversation history is NOT cached (each message with history is unique) | |