📰 LLMBlog

🔌 LLM Debate Arena API

Запускайте дебаты между LLM-моделями из своих приложений. Базовый URL: https://llmda.xyz

💠 Каждый запуск дебатов списывает N Exp (Кристаллы Экспертизы — внутренняя валюта платформы), рассчитываемых из количества потраченных токенов, стоимости платных LLM и стоимости токенов Jina. Для пополнения Exp обратитесь к администратору или на api@llmda.xyz.

🔐 Аутентификация

Все API-запросы требуют заголовок:

Authorization: Bearer llmda_sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Создать ключ: Профиль → API доступ → Создать ключ

📋 Эндпоинты

POST/api/v1/debates — Запустить дебаты

Создаёт и запускает новые дебаты. Стоимость в Exp рассчитывается динамически.

curl -X POST https://llmda.xyz/api/v1/debates \
  -H "Authorization: Bearer llmda_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
    "topic": "Should AI replace human judges?",
    "max_rounds": 3,
    "lang": "en"
  }'

Параметры:

Доступные experts: philosopher, scientist, engineer, critic, creative, analyst, farmer, shop_owner, manufacturer, regulator, compliance, trader, doctor, philologist, clergyman, economist, military, athlete, observer

Ответ:

{
  "debate_id": 123,
  "status": "started",
  "topic": "...",
  "max_rounds": 3,
  "credits_remaining": 4
}

GET/api/v1/debates/{id}/stream — Real-time поток SSE

Server-Sent Events стрим событий дебатов в реальном времени. Если дебаты уже завершены — возвращает все сообщения сразу.

curl -N https://llmda.xyz/api/v1/debates/123/stream \
  -H "Authorization: Bearer llmda_sk_..."

Пример событий:

data: {"event_type":"system","content":"Debate started..."}

data: {"event_type":"message","speaker_role":"philosopher","speaker_name":"Philosopher","content":"...","round_number":1}

data: {"event_type":"message_token","content":"text fragment"}

data: {"event_type":"keepalive"}

data: {"event_type":"summary","content":"Final summary..."}

data: {"event_type":"stream_end"}

JavaScript пример:

const es = new EventSource('/api/v1/debates/123/stream', {
  headers: { 'Authorization': 'Bearer llmda_sk_...' }
});
// Note: EventSource does not support custom headers in the browser.
// Use fetch + ReadableStream or pass the token as a query parameter.

GET/api/v1/debates/{id} — Результат дебатов

Возвращает полные данные завершённых или текущих дебатов.

curl https://llmda.xyz/api/v1/debates/123 \
  -H "Authorization: Bearer llmda_sk_..."
{
  "debate_id": 123,
  "topic": "...",
  "status": "completed",
  "current_round": 3,
  "max_rounds": 3,
  "cost_usd": 0.0,
  "summary": "Final moderator summary...",
  "lang": "en",
  "created_at": "2026-03-29T12:00:00",
  "finished_at": "2026-03-29T12:15:00",
  "messages": [
    {
      "id": 1,
      "round": 1,
      "role": "moderator",
      "name": "Moderator",
      "model": "...",
      "content": "...",
      "prompt_tokens": 1200,
      "completion_tokens": 400,
      "cost_usd": 0.0,
      "timestamp": "2026-03-29T12:01:00"
    }
  ]
}

GET/api/v1/credits — Баланс кредитов

curl https://llmda.xyz/api/v1/credits \
  -H "Authorization: Bearer llmda_sk_..."
{"credits": 5, "key_name": "My App", "total_debates": 3}

⚡ Быстрый старт (Python)

import requests, time

API_KEY = "llmda_sk_..."
BASE = "https://llmda.xyz"

# 1. Start a debate
r = requests.post(f"{BASE}/api/v1/debates",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={"topic": "Should AI replace human judges?", "max_rounds": 3}
)
debate_id = r.json()["debate_id"]
print(f"Started debate #{debate_id}")

# 2. Poll for completion
while True:
    time.sleep(5)
    r = requests.get(f"{BASE}/api/v1/debates/{debate_id}",
        headers={"Authorization": f"Bearer {API_KEY}"}
    )
    d = r.json()
    print(f"Status: {d['status']}, round: {d['current_round']}/{d['max_rounds']}")
    if d["status"] in ("completed", "stopped", "error"):
        print("Summary:", d["summary"][:200])
        break

📦 Коды ответов

💌 Поддержка

По вопросам API, пополнения кредитов и интеграций: api@llmda.xyz

Важная информация перед использованием