API pública para integrar los modelos de Ciclope en tus propios proyectos.
https://ciclope.xstar.esIncluye tu API key en la cabecera Authorization:
Authorization: Bearer ck_TU_API_KEYEnvía mensajes a un modelo Ciclope y recibe la respuesta.
{
"model": "ciclope2",
"messages": [
{ "role": "user", "content": "Hola, ¿cómo estás?" }
],
"stream": false // opcional, true para streaming en tiempo real
}| Modelo | Parámetros | Uso recomendado |
|---|---|---|
ciclope1 | 1.2B | Respuestas rápidas y simples |
ciclope1.5 | 3.2B | Equilibrio velocidad/calidad |
ciclope2 | 8B | Tareas complejas |
ciclope2.5 | 8B Q4_K_M | Máxima calidad |
{
"id": "ciclope-1234567890",
"model": "ciclope1.5", // modelo que pediste
"model_used": "ciclope2", // modelo que respondió (puede ser superior si escaló)
"escalated": true, // true si el sistema escaló a un modelo más potente
"message": {
"role": "assistant",
"content": "¡Hola! Estoy bien, gracias por preguntar..."
},
"usage": {
"input_tokens": 12,
"output_tokens": 48,
"total_tokens": 60
}
}stream: true (SSE)Cuando stream: true, la respuesta es un flujo text/event-stream. Cada evento contiene un token:
data: {"id":"ciclope-123","model":"ciclope2","delta":{"role":"assistant","content":"¡"},"done":false}
data: {"id":"ciclope-123","model":"ciclope2","delta":{"role":"assistant","content":"Hola"},"done":false}
data: {"id":"ciclope-123","model":"ciclope2","delta":{"role":"assistant","content":"!"},"done":true}
data: [DONE]const response = await fetch("https://ciclope.xstar.es/api/v1/chat", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer ck_TU_API_KEY"
},
body: JSON.stringify({
model: "ciclope2",
messages: [{ role: "user", content: "Cuéntame un chiste" }],
stream: true
})
})
const reader = response.body.getReader()
const decoder = new TextDecoder()
while (true) {
const { done, value } = await reader.read()
if (done) break
const lines = decoder.decode(value).split("\n")
for (const line of lines) {
if (!line.startsWith("data: ")) continue
const raw = line.slice(6)
if (raw === "[DONE]") break
const chunk = JSON.parse(raw)
process.stdout.write(chunk.delta.content) // imprime token a token
}
}fetch("https://ciclope.xstar.es/api/v1/chat", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer ck_TU_API_KEY"
},
body: JSON.stringify({
model: "ciclope2",
messages: [
{ role: "user", content: "Explícame qué es la fotosíntesis" }
]
})
})
.then(res => res.json())
.then(data => console.log(data.message.content))| Código | Descripción |
|---|---|
401 | API key inválida, inactiva o cabecera ausente |
400 | Campos requeridos ausentes o modelo inválido |
429 | Límite diario de tokens alcanzado |
503 | Modelo no disponible (Ollama no responde) |
502 | Error de comunicación con el servidor de modelos |
Ciclope API — ciclope.xstar.es