DBeaver Proxy to Mistral
Un pequeño proxy de FastAPI que permite que DBeaver CE (y otros clientes compatibles con OpenAI) funcione con la API de Mistral.

Sobre DBeaver Proxy to Mistral
DBeaver Proxy to Mistral es un pequeño proxy de FastAPI que permite que DBeaver CE (y otros clientes compatibles con OpenAI) funcionen con la API de Mistral.
El asistente de IA de DBeaver utiliza una API similar a la de OpenAI, pero espera campos JSON muy específicos y tipos de eventos SSE. Este proxy:
- Expone endpoints compatibles con OpenAI (
/responses,/models,/chat/completionsheredado) - Traduce
POST /responses(forma de la API de Respuestas de OpenAI utilizada por DBeaver) aPOST /chat/completionsde Mistral - Traduce las respuestas de Mistral a una carga útil que DBeaver puede analizar sin
NullPointerException - Admite transmisión por secuencias (Server-Sent Events) y sin secuencias
- Es configurable mediante variables de entorno y puede ejecutarse como un servicio systemd

Endpoints Admitidos
El proxy expone los siguientes endpoints (tanto raíz como alias /v1/* donde corresponda):
Endpoints de Modelos
GET /modelsGET /v1/models
Devuelve una lista de modelos anunciados (configurados mediante MISTRAL_MODELS).
Endpoints de Respuestas
POST /responsesPOST /v1/responses
Acepta una solicitud de la API de Respuestas de DBeaver/OpenAI y la reenvía a chat/completions de Mistral.
Endpoints Heredados
POST /chat/completionsPOST /v1/chat/completions
Paso directo heredado a chat/completions de Mistral (sin conversión de formato).
Configuración
La configuración se realiza mediante variables de entorno. Puedes usar un archivo .env local (cargado mediante python-dotenv) o establecer las variables en el entorno de tu shell/systemd.
Variables de Entorno
Obligatorias
MISTRAL_API_KEY
Opcionales
MISTRAL_BASE_URL- Valor predeterminado:https://api.mistral.ai/v1MISTRAL_MODEL- Valor predeterminado:mistral-large-latest(usado cuando la solicitud no especifica un modelo)MISTRAL_MODELS- Lista separada por comas de IDs de modelos que el proxy anunciará medianteGET /modelsHOST- Valor predeterminado:0.0.0.0PORT- Valor predeterminado:60916REQUEST_TIMEOUT_SECONDS- Valor predeterminado:60
Notas de Configuración
GET /modelsfunciona incluso siMISTRAL_API_KEYno está configurado.- Cualquier ruta que llame a la API de Mistral (
/responses,/chat/completions) devolverá 401 si faltaMISTRAL_API_KEY.
Desarrollo Local
Requisitos
- Python 3.12+
Configuración
Configurar
Ejecutar
El servidor escuchará en http://0.0.0.0:60916 de forma predeterminada.
Verificar y Probar
Uso con DBeaver
En DBeaver CE:
- Establece el endpoint/base URL de OpenAI en:
http://<tu-servidor>:60916/v1/ - Establece cualquier valor de token (DBeaver requiere uno), pero el proxy usa
MISTRAL_API_KEYdel entorno del servidor.
DBeaver utiliza:
GET /v1/modelsPOST /v1/responses
Servicio Systemd
Este repositorio incluye un archivo de unidad de ejemplo y una plantilla de archivo de entorno:
deploy/systemd/dbeaver-mistral-proxy.servicedeploy/systemd/dbeaver-mistral-proxy.env.example
Instalación
- Crea un virtualenv e instala las dependencias (ver Desarrollo local).
- Crea el archivo de entorno utilizado por el servicio:
- Instala el archivo de unidad:
Registros
Docker
Este proyecto puede ejecutarse como un contenedor ligero.
Construir
Ejecutar (Docker)
Docker Compose
Control de Versiones y Lanzamientos
Este proyecto utiliza Versionado Semántico (SemVer) y Commits Convencionales. Los lanzamientos se automatizan mediante python-semantic-release en GitHub Actions.
Funcionamiento- Un push a main activa el flujo de trabajo de lanzamiento (release workflow)
python-semantic-releaseanaliza los mensajes de confirmación (commit messages) y determina la siguiente versión- Si se crea un lanzamiento (release), este:
- Crea una etiqueta (tag) de Git en el formato
vX.Y.Z - Actualiza
project.versionenpyproject.toml - Genera
CHANGELOG.mda partir de plantillas - Publica imágenes de Docker etiquetadas con
latestyvX.Y.Z
- Crea una etiqueta (tag) de Git en el formato
Ejemplos de Conventional Commits
feat(proxy): add tool_choice forwarding→ incremento de versión minorfix(api): handle gzip bodies→ incremento de versión patchperf(proxy): reduce allocations→ incremento de versión patchdocs: update readme→ sin incremento de versión
Cambios Importantes (Breaking Changes)
Incluye BREAKING CHANGE: en el cuerpo del commit para activar un incremento de versión major.
Secretos de GitHub Actions
GITHUB_TOKEN— Proporcionado automáticamente por GitHubRELEASE_TOKEN(opcional) — PAT con permisos para subir commits y tagsDOCKERHUB_USERNAME(opcional)DOCKERHUB_TOKEN(opcional)
Notas sobre Publicación
- La publicación en GHCR usa
github.tokeny se ejecuta cuando se crea un lanzamiento (release) - La publicación en Docker Hub solo se ejecuta cuando están configurados
DOCKERHUB_USERNAMEyDOCKERHUB_TOKEN
Solución de Problemas
Error de DBeaver: "HTTP/1.1 header parser received no bytes" / "Connection reset"
Esto generalmente indica que el proxy falló antes de escribir una respuesta.
Mitigaciones implementadas:
- Análisis robusto de solicitudes para
/responsesy/chat/completions - Manejo de cuerpos vacíos y
Content-Encoding: gzip - Uvicorn forzado a usar la implementación HTTP
h11para mejor compatibilidad
Depuración:
"Unsupported upgrade request" en los registros (logs)
Esto puede ocurrir cuando un cliente intenta una actualización (por ejemplo, actualizaciones de estilo h2c/websocket). Es esperado e inofensivo para el uso normal de DBeaver.
Stack Tecnológico
- Python 3.12+ con FastAPI para el servidor proxy
- Integración con la API de Mistral AI para completados de IA
- Capa de compatibilidad con DBeaver CE
- Docker para despliegue en contenedores
- Systemd para la gestión de servicios en Linux
- Versionado Semántico con Conventional Commits para lanzamientos automatizados
DBeaver Proxy to Mistral proporciona un puente fluido entre las expectativas de la API compatible con OpenAI de DBeaver y la API de Mistral, permitiendo a los desarrolladores utilizar las capacidades de IA de Mistral directamente dentro de DBeaver CE.