Spaces:
Running
Running
| # AI Chatbot Integration Guide | |
| [From]: Phase III Integration Setup | |
| This guide explains how to integrate and test the AI chatbot feature. | |
| ## Prerequisites | |
| 1. **Python 3.13+** installed | |
| 2. **UV** package manager installed | |
| 3. **Gemini API key** from [Google AI Studio](https://aistudio.google.com) | |
| 4. **PostgreSQL database** (Neon or local) | |
| ## Setup Steps | |
| ### 1. Backend Configuration | |
| #### Environment Variables | |
| Add to your `backend/.env` file: | |
| ```bash | |
| # Database | |
| DATABASE_URL=postgresql://user:password@host/database | |
| # Gemini API (Required for AI chatbot) | |
| GEMINI_API_KEY=your-gemini-api-key-here | |
| GEMINI_MODEL=gemini-2.0-flash-exp | |
| # JWT | |
| JWT_SECRET=your-jwt-secret-here | |
| JWT_ALGORITHM=HS256 | |
| # CORS | |
| FRONTEND_URL=http://localhost:3000 | |
| # Environment | |
| ENVIRONMENT=development | |
| ``` | |
| #### Get Gemini API Key | |
| 1. Go to [Google AI Studio](https://aistudio.google.com) | |
| 2. Sign in with your Google account | |
| 3. Click "Get API Key" | |
| 4. Copy the API key | |
| 5. Add it to your `.env` file as `GEMINI_API_KEY` | |
| **Note**: Gemini API has a free tier that's sufficient for development and testing. | |
| ### 2. Database Migration | |
| The chatbot requires two additional tables: `conversation` and `message`. | |
| Run the migration: | |
| ```bash | |
| cd backend | |
| python migrations/run_migration.py | |
| ``` | |
| Expected output: | |
| ``` | |
| ✅ 2/2 migrations completed successfully | |
| 🎉 All migrations completed! | |
| ``` | |
| ### 3. Install Dependencies | |
| ```bash | |
| cd backend | |
| uv sync | |
| ``` | |
| This installs: | |
| - `openai>=1.0.0` - OpenAI SDK (for AsyncOpenAI adapter) | |
| - `agents` - OpenAI Agents SDK | |
| - All other dependencies | |
| ### 4. Validate Integration | |
| Run the integration validation script: | |
| ```bash | |
| cd backend | |
| python scripts/validate_chat_integration.py | |
| ``` | |
| This checks: | |
| - ✅ Dependencies installed | |
| - ✅ Environment variables configured | |
| - ✅ Database tables exist | |
| - ✅ MCP tools registered | |
| - ✅ AI agent initialized | |
| - ✅ Chat API routes registered | |
| ### 5. Start the Backend Server | |
| ```bash | |
| cd backend | |
| uv run python main.py | |
| ``` | |
| Expected output: | |
| ``` | |
| INFO: Started server process | |
| INFO: Waiting for application startup. | |
| INFO: Application startup complete. | |
| INFO: Uvicorn running on http://0.0.0.0:8000 | |
| ``` | |
| ### 6. Test the Chat API | |
| #### Option A: Interactive API Docs | |
| Open browser: `http://localhost:8000/docs` | |
| Find the `POST /api/{user_id}/chat` endpoint and test it: | |
| **Request:** | |
| ```json | |
| { | |
| "message": "Create a task to buy groceries" | |
| } | |
| ``` | |
| **Expected Response:** | |
| ```json | |
| { | |
| "response": "I'll create a task titled 'Buy groceries' for you.", | |
| "conversation_id": "uuid-here", | |
| "tasks": [] | |
| } | |
| ``` | |
| #### Option B: cURL | |
| ```bash | |
| curl -X POST "http://localhost:8000/api/{user_id}/chat" \ | |
| -H "Content-Type: application/json" \ | |
| -d '{ | |
| "message": "Create a task to buy groceries" | |
| }' | |
| ``` | |
| Replace `{user_id}` with a valid user UUID. | |
| #### Option C: Python Test Script | |
| ```python | |
| import requests | |
| import uuid | |
| # Replace with actual user ID from your database | |
| user_id = "your-user-uuid-here" | |
| response = requests.post( | |
| f"http://localhost:8000/api/{user_id}/chat", | |
| json={"message": "Create a task to buy groceries"} | |
| ) | |
| print(response.json()) | |
| ``` | |
| ### 7. Frontend Integration (Optional) | |
| If you have the frontend running: | |
| 1. Start the frontend: | |
| ```bash | |
| cd frontend | |
| pnpm dev | |
| ``` | |
| 2. Open browser: `http://localhost:3000/chat` | |
| 3. Test the chat interface with messages like: | |
| - "Create a task to buy groceries" | |
| - "What are my tasks?" | |
| - "Show me my pending tasks" | |
| - "Create a high priority task to finish the report by Friday" | |
| ## API Endpoints | |
| ### Chat Endpoint | |
| **POST** `/api/{user_id}/chat` | |
| **Request Body:** | |
| ```json | |
| { | |
| "message": "Create a task to buy groceries", | |
| "conversation_id": "optional-uuid-to-continue-conversation" | |
| } | |
| ``` | |
| **Response:** | |
| ```json | |
| { | |
| "response": "I'll create a task titled 'Buy groceries' for you.", | |
| "conversation_id": "uuid", | |
| "tasks": [] | |
| } | |
| ``` | |
| **Error Responses:** | |
| - **400 Bad Request**: Invalid message (empty or >10,000 characters) | |
| - **429 Too Many Requests**: Daily message limit exceeded (100/day) | |
| - **503 Service Unavailable**: AI service not configured or unreachable | |
| - **504 Gateway Timeout**: AI service timeout | |
| ## Troubleshooting | |
| ### "AI service not configured" | |
| **Cause**: `GEMINI_API_KEY` not set in `.env` | |
| **Fix**: | |
| 1. Get API key from https://aistudio.google.com | |
| 2. Add to `.env`: `GEMINI_API_KEY=your-key-here` | |
| 3. Restart server | |
| ### "Database error: relation 'conversation' does not exist" | |
| **Cause**: Migration not run | |
| **Fix**: | |
| ```bash | |
| cd backend | |
| python migrations/run_migration.py | |
| ``` | |
| ### "Daily message limit exceeded" | |
| **Cause**: User has sent 100+ messages today | |
| **Fix**: Wait until midnight UTC or use a different user ID for testing | |
| ### Import errors for `agents` or `openai` | |
| **Cause**: Dependencies not installed | |
| **Fix**: | |
| ```bash | |
| cd backend | |
| uv sync | |
| ``` | |
| ## Testing Checklist | |
| - [ ] Environment variables configured (especially `GEMINI_API_KEY`) | |
| - [ ] Database migrations run successfully | |
| - [ ] Validation script passes all checks | |
| - [ ] Backend server starts without errors | |
| - [ ] Can access API docs at http://localhost:8000/docs | |
| - [ ] Can send message via `/api/{user_id}/chat` endpoint | |
| - [ ] AI responds with task creation confirmation | |
| - [ ] Can list tasks via chat | |
| - [ ] Conversation persists across requests (using `conversation_id`) | |
| - [ ] Frontend chat page works (if applicable) | |
| ## Rate Limiting | |
| The chatbot enforces a limit of **100 messages per user per day** (NFR-011). | |
| This includes both user and assistant messages in conversations. | |
| The limit resets at midnight UTC. | |
| ## Architecture Overview | |
| ``` | |
| Frontend (React) | |
| ↓ | |
| ChatInterface.tsx → POST /api/{user_id}/chat | |
| ↓ | |
| Backend (FastAPI) | |
| ↓ | |
| chat.py endpoint | |
| ├→ Rate limiting check (T021) | |
| ├→ Get/create conversation (T016) | |
| ├→ Persist user message (T017) | |
| ├→ Load conversation history (T016) | |
| ├→ Run AI agent (T014) | |
| │ ↓ | |
| │ Agent → MCP Tools | |
| │ ├→ add_task (T013) | |
| │ └→ list_tasks (T024, T027) | |
| └→ Persist AI response (T018) | |
| ``` | |
| ## MCP Tools | |
| The AI agent has access to two MCP tools: | |
| ### add_task | |
| Creates a new task. | |
| **Parameters:** | |
| - `user_id` (required): User UUID | |
| - `title` (required): Task title | |
| - `description` (optional): Task description | |
| - `due_date` (optional): Due date (ISO 8601 or relative) | |
| - `priority` (optional): "low", "medium", or "high" | |
| ### list_tasks | |
| Lists and filters tasks. | |
| **Parameters:** | |
| - `user_id` (required): User UUID | |
| - `status` (optional): "all", "pending", or "completed" | |
| - `due_within_days` (optional): Filter by due date | |
| - `limit` (optional): Max tasks to return (1-100, default 50) | |
| ## Next Steps | |
| After successful integration: | |
| 1. **Test User Story 1**: Create tasks via natural language | |
| 2. **Test User Story 2**: List and filter tasks via natural language | |
| 3. **Monitor rate limiting**: Ensure 100/day limit works | |
| 4. **Test error handling**: Try without API key, with invalid user ID, etc. | |
| 5. **Proceed to User Story 3**: Task updates via natural language | |
| ## Support | |
| For issues or questions: | |
| - Check the validation script output: `python scripts/validate_chat_integration.py` | |
| - Review API docs: http://localhost:8000/docs | |
| - Check backend logs for detailed error messages | |