Fixes duplicate placeholder cover image on the 3 newest blog posts, broken aspect-ratio classes on the albums listing page, and a non-responsive fixed sidebar on the chat page.
113 lines
2.6 KiB
Markdown
113 lines
2.6 KiB
Markdown
# Chat API Server
|
|
|
|
This Flask-based API server provides a secure interface for the chat feature, connecting users to the Ollama model.
|
|
|
|
## Features
|
|
|
|
- **Secure**: Input sanitization, rate limiting, CORS protection
|
|
- **Rate Limited**: 10 requests per minute per IP address
|
|
- **Context Aware**: Maintains conversation history (last 5 messages)
|
|
- **Auto-restart**: Runs as systemd service with automatic restart
|
|
|
|
## Configuration
|
|
|
|
**Environment Variables:**
|
|
- `OLLAMA_HOST`: Ollama endpoint (default: `http://10.30.20.110:11434`)
|
|
- `OLLAMA_MODEL`: Model name (default: `drjones-posts-to-much`)
|
|
- `PORT`: API server port (default: `5000`)
|
|
- `CHAT_API_KEY`: Optional API key for additional security (not set by default)
|
|
|
|
## Service Management
|
|
|
|
```bash
|
|
# Start service
|
|
sudo systemctl start hugo-chat-api.service
|
|
|
|
# Stop service
|
|
sudo systemctl stop hugo-chat-api.service
|
|
|
|
# Enable at boot
|
|
sudo systemctl enable hugo-chat-api.service
|
|
|
|
# Check status
|
|
sudo systemctl status hugo-chat-api.service
|
|
|
|
# View logs
|
|
sudo journalctl -u hugo-chat-api.service -f
|
|
```
|
|
|
|
## API Endpoints
|
|
|
|
### POST `/api/chat`
|
|
|
|
Send a chat message and get AI response.
|
|
|
|
**Request:**
|
|
```json
|
|
{
|
|
"message": "How do I maintain sterile conditions?",
|
|
"history": [
|
|
{"role": "user", "content": "Previous message"},
|
|
{"role": "assistant", "content": "Previous response"}
|
|
]
|
|
}
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"response": "AI response text...",
|
|
"model": "drjones-posts-to-much"
|
|
}
|
|
```
|
|
|
|
### GET `/api/health`
|
|
|
|
Health check endpoint.
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"status": "healthy",
|
|
"model": "drjones-posts-to-much",
|
|
"ollama_host": "http://10.30.20.110:11434"
|
|
}
|
|
```
|
|
|
|
## Security Features
|
|
|
|
1. **Rate Limiting**: 10 requests per minute per IP address
|
|
2. **Input Sanitization**: Removes dangerous characters, limits length to 1000 chars
|
|
3. **CORS Protection**: Only allows requests from configured origins
|
|
4. **Error Handling**: Graceful error handling with user-friendly messages
|
|
|
|
## Installation
|
|
|
|
1. Install dependencies:
|
|
```bash
|
|
pip3 install flask flask-cors ollama
|
|
```
|
|
|
|
2. Enable and start service:
|
|
```bash
|
|
sudo systemctl daemon-reload
|
|
sudo systemctl enable hugo-chat-api.service
|
|
sudo systemctl start hugo-chat-api.service
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
**Service won't start:**
|
|
- Check logs: `sudo journalctl -u hugo-chat-api.service -n 50`
|
|
- Verify Ollama is accessible: `curl http://10.30.20.110:11434/api/tags`
|
|
- Check port 5000 is available: `sudo lsof -i :5000`
|
|
|
|
**Rate limit errors:**
|
|
- Normal behavior - users are limited to 10 requests per minute
|
|
- Rate limit resets after 1 minute
|
|
|
|
**Connection errors:**
|
|
- Verify Ollama endpoint is correct and accessible
|
|
- Check firewall rules allow connections to port 5000
|
|
|