AI — Model Gateway
Nuvem AI provee un gateway unificado para LLMs (OpenAI, Anthropic, Mistral, Gemini), una base de datos vectorial y memoria persistente para agentes.
Model Gateway
Chat completions
POST /v1/ai/chatAuthorization: Bearer <api_key>{ "provider": "anthropic", "model": "claude-sonnet-4-5", "messages": [ { "role": "user", "content": "Hola, ¿cómo estás?" } ], "stream": false}Streaming
POST /v1/ai/chat{ "provider": "openai", "model": "gpt-4o", "messages": [{ "role": "user", "content": "Escribí un haiku" }], "stream": true}La respuesta es un stream de eventos SSE (Server-Sent Events).
Proveedores soportados
| Provider | Modelos |
|---|---|
openai | gpt-4o, gpt-4o-mini, gpt-4-turbo |
anthropic | claude-opus-4, claude-sonnet-4-5, claude-haiku-4 |
mistral | mistral-large, mistral-small |
gemini | gemini-1.5-pro, gemini-1.5-flash |
BYOK (Bring Your Own Key)
Podés usar tus propias API keys de cada proveedor:
POST /v1/ai/providersAuthorization: Bearer <api_key>{ "provider": "openai", "apiKey": "sk-...", "enabled": true}Vector Database
# Insertar vectoresPOST /v1/db/vectors/upsert{ "namespace": "productos", "vectors": [ { "id": "prod_001", "values": [0.1, 0.2, ...], "metadata": { "name": "Yerba Mate", "price": 1500 } } ]}
# Búsqueda semánticaPOST /v1/db/vectors/query{ "namespace": "productos", "vector": [0.1, 0.2, ...], "topK": 5, "filter": { "price": { "$lt": 2000 } }}Agent Memory
# Guardar memoriaPOST /v1/ai/memory{ "agentId": "agent_abc", "sessionId": "sess_xyz", "content": "El usuario prefiere respuestas en español"}
# Buscar memorias semánticasPOST /v1/ai/memory/search{ "agentId": "agent_abc", "query": "preferencias del usuario", "topK": 3}SDK
import { createClient } from '@nuvem/js';
const nuvem = createClient({ apiKey: process.env.NUVEM_API_KEY! });
// Chatconst response = await nuvem.ai.chat({ provider: 'anthropic', model: 'claude-sonnet-4-5', messages: [{ role: 'user', content: '¿Cuál es la capital de Argentina?' }],});console.log(response.content);
// Vector searchconst results = await nuvem.ai.vectors.query({ namespace: 'productos', vector: embedding, topK: 5,});Errores comunes
| Código | Mensaje | Causa |
|---|---|---|
provider_not_configured | Proveedor no configurado | Falta API key del proveedor |
model_not_found | Modelo inválido | Nombre de modelo incorrecto |
rate_limit_exceeded | Límite de requests del proveedor | Esperá un momento y reintentá |
context_too_long | Contexto excede el límite del modelo | Reducí el historial de mensajes |