Initial commit: PymesBot Demo with IA integration

- FastAPI backend with WebSocket chat
- SQLite database for products
- Z.AI (GLM-4.7) integration for AI responses
- Docker deployment ready
- Caddy proxy configuration
This commit is contained in:
Renato
2026-02-15 17:07:39 +01:00
commit 47264049e6
14 changed files with 4585 additions and 0 deletions

176
README.md Normal file
View File

@@ -0,0 +1,176 @@
# PymesBot Demo - Asistente de Ventas con IA
Demo funcional de asistente de ventas para librería con integración de IA.
## Características
- Chat en tiempo real con WebSocket
- Búsqueda de productos en base de datos SQLite
- Confirmación de ventas
- IA integrada con Z.AI (GLM-4.7)
- Interfaz web responsive
## Tech Stack
- **Backend**: FastAPI + Python 3.11
- **Base de datos**: SQLite
- **Frontend**: HTML/JS vanilla
- **IA**: Z.AI API (GLM-4.7)
- **Proxy**: Caddy
## Estructura
```
pymesbot/
├── backend/
│ ├── main.py # FastAPI app
│ ├── Dockerfile # Imagen Docker
│ ├── requirements.txt # Dependencias
│ └── templates/
│ └── chat.html # Interfaz
└── data/ # Base de datos SQLite
```
## Deployment
### Prerrequisitos
- Docker y Docker Compose
- Acceso a API de Z.AI (u otro provider)
- Servidor con Caddy (u otro proxy)
### Variables de Entorno
```bash
# API de Z.AI (requerido)
ZAI_API_KEY=tu_api_key_aqui
ANTHROPIC_MODEL=glm-4.7
```
### Paso 1: Clonar el repositorio
```bash
git clone https://gitea.cbcren.online/renato97/demo.git
cd demo
```
### Paso 2: Configurar variables de entorno
Crear archivo `.env`:
```bash
ZAI_API_KEY=tu_api_key
```
### Paso 3: Iniciar contenedores
```bash
docker compose up -d --build
```
### Paso 4: Configurar Caddy (proxy)
Agregar al Caddyfile:
```caddy
demo.tudominio.com {
reverse_proxy localhost:8201
}
```
Reiniciar Caddy:
```bash
docker exec caddy-ingress caddy reload
```
## API Endpoints
| Método | Endpoint | Descripción |
|--------|----------|-------------|
| GET | `/health` | Health check |
| GET | `/stock/search?q=producto` | Buscar productos |
| POST | `/venta/confirmar` | Confirmar venta |
| GET | `/stats/ventas?periodo=hoy` | Estadísticas |
| WS | `/chat/ws/{session_id}` | Chat en tiempo real |
### Ejemplo de búsqueda de productos
```bash
curl "http://localhost:8201/stock/search?q=birome"
```
### Ejemplo de confirmar venta
```bash
curl -X POST "http://localhost:8201/venta/confirmar" \
-H "Content-Type: application/json" \
-d '{
"producto_id": 1,
"cantidad": 2,
"precio_vendido": 850,
"vendedor": "test"
}'
```
## Credenciales
- **PIN vendedor**: 1234
- **Admin**: /admin (password: admin123)
## Configuración de IA
El sistema usa la API de Z.AI directamente. Para cambiar el modelo o API:
Editar `main.py` línea ~40:
```python
ZAI_API_KEY = "tu_api_key"
ZAI_API_URL = "https://api.z.ai/api/anthropic/v1"
MODEL = "glm-4.7"
```
## Known Issues / Bugs
### 1. Búsqueda limitada
- **Problema**: La búsqueda en DB solo soporta términos simples
- **Solución**: Usar la IA para búsquedas más complejas
### 2. Plurales no detectados
- **Problema**: "lápices" no encuentra "lápiz"
- **Workaround**: El sistema ahora tiene mapeo de plurales básico
### 3. Timeout en WebSocket
- **Problema**: La conexión puede cerrarse por inactividad
- **Solución**: El frontend reconecta automáticamente
### 4. Scope operator.write en OpenClaw
- **Problema**: OpenClaw Gateway requiere scopes específicos para usar el agente
- **Solución actual**: Se usa la API de Z.AI directamente en lugar de OpenClaw Gateway
- **Nota**: Para usar OpenClaw Gateway, configurar con `scopes: ["operator.read", "operator.write", "agent"]`
### 5. PicoClaw no conecta
- **Problema**: PicoClaw no reconoce modelos MiniMax
- **Solución**: Usar OpenClaw o API directa
## Mantenimiento
### Ver logs
```bash
docker logs pygmesbot_backend
```
### Reiniciar servicio
```bash
docker restart pygmesbot_backend
```
### Ver productos en DB
```bash
docker exec pygmesbot_backend python3 -c "
import sqlite3
conn = sqlite3.connect('/app/data/stock.db')
for row in conn.execute('SELECT nombre, stock FROM productos LIMIT 5'):
print(row)
"
```
##Licencia
MIT