Install
openclaw skills install @devcsde/oatda-compare-modelsCompare multiple LLM models (GPT-5, Claude Sonnet 4.5, Gemini 3, DeepSeek v4-pro, Grok 4, etc.) side-by-side in one parallel request via OATDA's unified AI gateway. Triggers when the user wants to benchmark models, evaluate quality differences, pick the best LLM for a task, run "gpt vs claude vs gemini" comparisons, do multi-model evaluation, or find the cheapest/best/fastest answer. Returns each model's output plus token usage and cost per model.
openclaw skills install @devcsde/oatda-compare-modelsSend one prompt to multiple LLM providers in parallel and get each model's response back. Benchmarking, model evaluation, and "which LLM is best for X" use cases.
All commands need the OATDA API key. Resolve it inline for each exec call:
export OATDA_API_KEY="${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}"
If the key is empty or null, tell the user to get one at https://oatda.com and configure it.
Security: Never print the full API key. Only verify existence or show first 8 chars.
| User says | Provider | Model ID |
|---|---|---|
| gpt-5 | openai | gpt-5 |
| gpt-4o | openai | gpt-4o |
| claude, sonnet | anthropic | claude-sonnet-4-5-20250929 |
| opus | anthropic | claude-opus-4-5-20251101 |
| gemini | gemini-3-pro-preview | |
| gemini-2.5 | gemini-2.5-pro | |
| deepseek | deepseek | deepseek-v4-pro |
| mistral | mistral | mistral-large-latest |
| grok | xai | grok-4-fast |
| qwen | alibaba | qwen3-max |
| kimi, moonshot | moonshot | kimi-k2.7-code |
| glm | zai | glm-5 |
Default comparison set if user doesn't specify:
openai/gpt-5, anthropic/claude-sonnet-4-5-20250929, google/gemini-3-pro-preview, deepseek/deepseek-v4-pro.
⚠️ Models update frequently. If a model ID fails, query
oatda-list-modelsfor the latest available models.
Wichtig: Feld heißt modelId (nicht model!), models ist Array-of-objects, max 8.
export OATDA_API_KEY="${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}" && \
curl -s -X POST "https://oatda.com/api/v1/compare" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OATDA_API_KEY" \
-d '{
"prompt": "<USER_PROMPT>",
"models": [
{"provider": "openai", "modelId": "gpt-5"},
{"provider": "anthropic", "modelId": "claude-sonnet-4-5-20250929"},
{"provider": "google", "modelId": "gemini-3-pro-preview"}
],
"temperature": 0.7,
"maxTokens": 1024,
"stream": false
}'
Replace <USER_PROMPT> with the user's prompt (JSON-escape special characters).
Optional parameters:
temperature: 0 (deterministic) to 2 (creative). Default: 0.7maxTokens: Max tokens per model responsestream: true for SSE stream (default), false for batch JSONmodels may include its own messages array and service_tier (standard | flex | priority)Non-stream JSON shape:
{
"results": [
{
"provider": "openai",
"modelId": "gpt-5",
"success": true,
"response": "GPT-5's answer...",
"tokenUsage": {"prompt_tokens": 30, "completion_tokens": 120, "total_tokens": 150, "cost": 0.0035}
},
{
"provider": "anthropic",
"modelId": "claude-sonnet-4-5-20250929",
"success": true,
"response": "Claude's answer...",
"tokenUsage": {"prompt_tokens": 30, "completion_tokens": 95, "total_tokens": 125, "cost": 0.0021}
}
]
}
Stream response: SSE events tagged with provider/modelId, one or more per model.
Present results side-by-side so the user can compare quality / cost / token-efficiency:
Comparison: "<prompt>"
─────────────────────────────────────────────────
[GPT-5] (cost: $0.0035, 150 tokens)
GPT-5's answer...
[Claude Sonnet 4.5] (cost: $0.0021, 125 tokens)
Claude's answer...
| HTTP | Meaning | Action |
|---|---|---|
| 400 | Invalid request (bad modelId, empty array) | Check field names (modelId not model) |
| 401 | Invalid API key | Get one at https://oatda.com/dashboard/api-keys |
| 402 | Insufficient credits | Top up at https://oatda.com/dashboard/credits (or run oatda-check-balance) |
| 422 | Too many models (max 8) | Reduce models array length |
| 429 | Rate limited | Wait 5s and retry once |
Individual model failures inside results[].success: false are NOT API errors — that specific model failed, the API call succeeded. Show the failure inline with the others.
User: "Compare how GPT-5, Claude Sonnet 4.5, and Gemini 3 Pro explain recursion in one sentence."
export OATDA_API_KEY="${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}" && \
curl -s -X POST "https://oatda.com/api/v1/compare" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OATDA_API_KEY" \
-d '{
"prompt": "Explain recursion in one sentence.",
"models": [
{"provider": "openai", "modelId": "gpt-5"},
{"provider": "anthropic", "modelId": "claude-sonnet-4-5-20250929"},
{"provider": "google", "modelId": "gemini-3-pro-preview"}
],
"temperature": 0.7,
"maxTokens": 256,
"stream": false
}'
modelId, not model (stricter schema than /api/v1/llm).max_compare_models).oatda-check-balance first if budget is tight.oatda-text-completion instead — simpler, returns direct cost.oatda-list-models first.