hermes-skills/ai-providers/sea-lion-api-models/SKILL.md
Correct model IDs for SEA-LION API (api.sea-lion.ai) — avoid 400/401 errors from wrong model names
npx skillsauth add ariffazil/openclaw-workspace sea-lion-api-modelsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
POST https://api.sea-lion.ai/v1/chat/completions
Authorization: Bearer sk-znzfOJH_Yc7LKewfrfsl2A
| Model ID | Status | Use Case |
|----------|--------|----------|
| aisingapore/Llama-SEA-LION-v3.5-70B-R | ✅ Works | Complex multi-step reasoning |
| aisingapore/Llama-SEA-LION-v3-70B-IT | ✅ Works | General reasoning |
| aisingapore/Gemma-SEA-LION-v4-27B-IT | ✅ Works | Fast lightweight tasks |
| aisingapore/Qwen-SEA-LION-v4-32B-IT | ✅ Works | ASEAN language, general |
| aisingapore/SEA-Guard | ✅ Works | Safety filter only — returns plain "safe" or "unsafe" |
10 requests/minute per user — hard constraint for automation. Design throttling around this.
The SEA-LION API key sk-znzfOJH_Yc7LKewfrfsl2A is VALID and LIVE.
Direct curl test 2026-05-07:
curl -s -X POST https://api.sea-lion.ai/v1/chat/completions \
-H "Authorization: Bearer sk-znzfOJH_Yc7LKewfrfsl2A" \
-H "Content-Type: application/json" \
-d '{"model": "aisingapore/Qwen-SEA-LION-v4-32B-IT",
"messages": [{"role": "user", "content": "Reply exactly: Hermes SEA-LION works"}],
"max_tokens": 30}'
→ 200: "Hermes SEA-LION works." ✅ exit_code=0
IMPORTANT — Hermes CLI routing note:
Hermes Agent's hermes chat -m "aisingapore/Qwen-SEA-LION-v4-32B-IT" routes through MiniMax provider (api.minimax.io) by default, which does NOT host SEA-LION models → HTTP 400 unknown model. Always use curl for direct SEA-LION verification, not Hermes CLI.
The git .env masks the key as *** but the live container key works — likely because the host environment or docker-compose injects the real value at runtime. If SEA-LION calls from arifOS still fail (all traffic going to Ollama fallback), check whether SEA_LION_API_KEY inside the container is the real value or ***.
arifOS MCP server (runtime/llm_client.py)
├── Tier 1: SEA-LION remote API [ACTIVE — key verified live 2026-05-07]
│ └── model: aisingapore/Qwen-SEA-LION-v4-32B-IT
│ └── base_url: https://api.sea-lion.ai/v1
├── Tier 2: Ollama local fallback [qwen2.5:7b @ http://127.0.0.1:11434]
└── Tier 3: LLMUnavailableError → deterministic fallback
Tools using call_llm():
├── arif_mind_reason (333 MIND — reasoning)
├── arif_heart_critique (666 HEART — ethical critique)
└── arif_reply_compose (444r REPLY — response composition)
Key is confirmed valid (2026-05-07). If arifOS calls still fail:
***):
docker exec arifosmcp env | grep SEA_LION_API_KEY
/root/compose/docker-compose.yml:
environment:
- SEA_LION_API_KEY=sk-znzfOJH_Yc7LKewfrfsl2A
cd /root/compose && docker compose restart arifosmcpWrong model name — 400:
"Invalid model name passed in model=standard"
"key not allowed to access model. This key can only access models=['standard']"
"invalid params, unknown model 'aisingapore/qwen-sea-lion-v4-32b-it'"
→ Do NOT use standard, sea-lion-8b, or bare model names. Must use the full aisingapore/... prefix.
→ Note: MiniMax provider (api.minimax.io) does not host SEA-LION models — use api.sea-lion.ai directly or curl.
Authentication error — 401 (key masked in .env):
"LiteLLM Virtual Key expected. Received=***, expected to start with 'sk-'."
→ .env has SEA_LION_API_KEY=*** — key is masked, not the real value. Fix via docker-compose environment override (see Fixing section above).
Rate limit death spiral — 429 + 401 cascade:
429: "rate limit exceeded"
→ subagents retry immediately
→ 401: "key not allowed to access model" (lowercase model name in retry)
→ retry again
→ all 10 req/min consumed in failed retries
→ Ollama fallback also rates limit under pile-up
→ This is NOT a key rotation problem. Key is likely fine. Root cause: no semaphore + no backoff in llm_client.py. Add asyncio.Semaphore(1) to serialize calls and exponential backoff on 429.
Authentication error — 401 (key genuinely invalid/rotated):
"Unable to find token in cache or `LiteLLM_VerificationTokenTable`"
"Authentication Error, Invalid proxy server token passed."
→ Key has been rotated. Get fresh key from AI Singapore (aisea-sg.smartsheet.com form or AI Singapore team).
import requests
key = 'sk-znzfOJH_Yc7LKewfrfsl2A'
models = [
'aisingapore/Llama-SEA-LION-v3.5-70B-R',
'aisingapore/Llama-SEA-LION-v3-70B-IT',
'aisingapore/Gemma-SEA-LION-v4-27B-IT',
'aisingapore/Qwen-SEA-LION-v4-32B-IT',
'aisingapore/SEA-Guard',
]
for model in models:
r = requests.post('https://api.sea-lion.ai/v1/chat/completions',
headers={'Authorization': f'Bearer {key}', 'Content-Type': 'application/json'},
json={'model': model, 'messages': [{'role': 'user', 'content': 'hi'}], 'max_tokens': 5},
timeout=10)
print(f'{model}: {r.status_code}')
SEA-Guard model returns plain text "safe" or "unsafe" — NOT JSON.
The response is just the word, no markdown, no code blocks.
# Parse SEA-Guard response
raw = r.json()['choices'][0]['message']['content'].strip().lower()
# raw == "safe" → passed
# raw == "unsafe" → blocked
Model IDs are CASE-SENSITIVE. The API will reject aisingapore/qwen-sea-lion-v4-32b-it (lowercase) but the error message echoes the model back in whatever case was sent, which can be misleading.
Correct: aisingapore/Qwen-SEA-LION-v4-32B-IT (mixed case, uppercase B)
Wrong: aisingapore/qwen-sea-lion-v4-32b-it (all lowercase — will 400)
The bad model is NOT always from config. When tracing a 400 bad model error:
llm_client.py uses the correct case — not the source~/.hermes/sessions/request_dump_*.json — subagent curl commands may have lowercased the modelDiagnostic:
# Find the bad model in session files
grep -rn "qwen-sea\|aisingapore.*qwen" ~/.hermes/sessions/ | grep -v "Qwen-SEA"
# Check if a subagent ran curl with the wrong case
grep -n "curl.*sea-lion\|POST.*sea-lion" ~/.hermes/sessions/session_*.json
https://playground.sea-lion.ai/)api.sea-lion.ai API during verificationarifOS MCP server (runtime/llm_client.py)
├── Tier 1: SEA-LION remote API [ACTIVE — key verified live 2026-05-07]
│ └── model: aisingapore/Qwen-SEA-LION-v4-32B-IT
│ └── base_url: https://api.sea-lion.ai/v1
├── Tier 2: Ollama local fallback [qwen2.5:7b @ http://127.0.0.1:11434]
└── Tier 3: LLMUnavailableError → deterministic fallback
Tools using call_llm():
├── arif_mind_reason (333 MIND — reasoning)
├── arif_heart_critique (666 HEART — ethical critique)
└── arif_reply_compose (444r REPLY — response composition)
When SEA-LION calls fail, check IN ORDER:
Step 1 — Key is valid? (Never assume it's rotated.)
# Direct curl test — bypasses all config/env/docker masks
curl -s -X POST https://api.sea-lion.ai/v1/chat/completions \
-H "Authorization: Bearer sk-znzfOJH_Yc7LKewfrfsl2A" \
-H "Content-Type: application/json" \
-d '{"model": "aisingapore/Qwen-SEA-LION-v4-32B-IT",
"messages": [{"role": "user", "content": "Reply exactly: OK"}],
"max_tokens": 10}'
# 200 + "OK" = key is LIVE
Step 2 — Container has real key (not ***)?
docker exec arifosmcp sh -c 'echo "KEY_START>>>$SEA_LION_API_KEY<<<KEY_END"'
# If truncated to sk-znz...sl2A = real key present (Docker truncates display, not empty)
# If shows literally "***" = key not injected, fix via compose env override
Step 3 — Check for wrong model case in subagent session dumps:
grep -rn "qwen-sea\|aisingapore.*qwen" ~/.hermes/sessions/ | grep -v "Qwen-SEA"
grep -rn "curl.*sea-lion\|POST.*sea-lion" ~/.hermes/sessions/session_*.json
Subagents using lowercase model name → HTTP 400 (echoed back in error) → retry → rate limit pile-up.
Step 4 — Rate limit death spiral?
llm_client.py has NO semaphore and NO exponential backoff. Multiple concurrent callers hitting 10 req/min cap → 429 → immediate retry → all subagents stack up. Fix: add asyncio.Semaphore(1) + exponential backoff on 429.
Step 5 — Ollama fallback is working?
curl -s http://127.0.0.1:11434/api/generate \
-d '{"model": "qwen2.5:7b", "prompt": "hi", "stream": false}'
# 200 = Ollama is live
sk-... LiteLLM key from AI Singapore (aisea-sg.smartsheet.com)/root/compose/docker-compose.yml under arifosmcp service:
environment:
- SEA_LION_API_KEY=sk-YOUR-NEW-KEY-HERE
cd /root/compose && docker compose restart arifosmcpdocker exec arifosmcp logs --since 30s | grep -i "sea-lion inference"# Check if bot username exists on Telegram
import requests
token = 'YOUR_BOT_TOKEN'
r = requests.get(f'https://api.telegram.org/bot{token}/getChat',
params={'chat_id': '@sealion_ai_bot'}, timeout=5)
# 200 + ok=True = bot exists; 400 = not found
@sealion_ai_bot is AI Singapore's own bot — cannot be added to arbitrary groups.
It is already in the AAA group. Cannot be governed by arifOS.
development
Federation-wide gold (XAUUSD) trading capability. Python stack, OANDA broker, backtesting, macro signals, RSI strategy. Every organ has a role.
development
Capital claim state management — tracks claim lifecycle across WEALTH organ.
development
Archived constitutional warga placeholder retained only for audit provenance. Do not use for active work; use the live arifOS governance and constitutional skills instead.
testing
Warga (citizen) agent skills for AAA federation members. See subdirectories for specialized warga skills.