feat(chat): add LLM-powered travel agent with multi-provider support

Implement a full chat-based travel agent using LiteLLM for multi-provider
LLM support (OpenAI, Anthropic, Gemini, Ollama, Groq, Mistral, etc.).

Backend:
- New 'chat' Django app with ChatConversation and ChatMessage models
- Streaming SSE endpoint via StreamingHttpResponse
- 5 agent tools: search_places, list_trips, get_trip_details,
  add_to_itinerary, get_weather
- LiteLLM client wrapper with per-user API key retrieval
- System prompt with user preference context injection

Frontend:
- New /chat route with full-page chat UI (DaisyUI + Tailwind)
- Collapsible conversation sidebar with CRUD
- SSE streaming response display with tool call visualization
- Provider selector dropdown
- SSE proxy fix to stream text/event-stream without buffering
- Navbar link and i18n keys
This commit is contained in:
2026-03-08 18:44:44 +00:00
parent d4e0ef14b8
commit 757140ec70
20 changed files with 1518 additions and 6 deletions

View File

@@ -1,6 +1,7 @@
{
"navbar": {
"collections": "Collections",
"chat": "Travel Agent",
"map": "Map",
"users": "Users",
"search": "Search",
@@ -31,6 +32,20 @@
},
"navigation": "Navigation"
},
"chat": {
"title": "Travel Agent",
"conversations": "Conversations",
"new_conversation": "New Conversation",
"untitled": "Untitled Conversation",
"no_conversations": "No conversations yet. Start chatting!",
"welcome_title": "Welcome to the Travel Agent",
"welcome_message": "I can help you discover amazing places, plan your trips, and organize your itineraries. What would you like to explore?",
"input_placeholder": "Ask me about travel destinations, plan a trip, or get recommendations...",
"send": "Send",
"delete_conversation": "Delete Conversation",
"connection_error": "Connection error. Please try again.",
"no_api_key": "No API key found. Please add one in Settings."
},
"about": {
"about": "About",
"license": "Licensed under the GPL-3.0 License.",