OpenCode

Kör OpenCode mot staik via Anthropic-endpointen — svensk GPU-infrastruktur med prompt caching på återanvänd kontext.

Konfiguration

Lägg till staik som Anthropic-provider i ~/.config/opencode/opencode.json:

JSONopencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "staik": {
      "npm": "@ai-sdk/anthropic",
      "name": "staik",
      "options": {
        "baseURL": "https://api.staik.se/v1",
        "apiKey": "{env:STAIK_API_KEY}"
      },
      "models": {
        "qwen3.5:35b-a3b": {
          "name": "Qwen 35B (staik)",
          "limit": { "context": 262144, "output": 32768 }
        },
        "qwen3.5:9b": {
          "name": "Qwen 9B (staik)",
          "limit": { "context": 262144, "output": 8192 }
        },
        "gemma4:31b": {
          "name": "Gemma 4 31B (staik)",
          "limit": { "context": 98304, "output": 32768 }
        }
      }
    }
  }
}

Nyckeln läses från miljövariabeln STAIK_API_KEY och skickas som x-api-key. baseURL pekar på /v1 — OpenCode lägger själv på /messages. Inga andra ändringar behövs.

BashSätt nyckeln
export STAIK_API_KEY=sk-st-your-key

Prompt caching

Agent-loopar skickar tillbaka samma stora kontext (systemprompt, repo-filer, konversationshistorik) varje tur. Via Anthropic-endpointen märker OpenCode den stabila delen med cache_control, och staik billar den som cache_read med rabatt i stället för fullpris varje gång.

Du ser det i svaret: usage rapporterar cache_creation_input_tokens (första gången prefixen ses) och cache_read_input_tokens (efterföljande träffar).

usageAndra turen — cache-träff
"usage": {
  "input_tokens": 101,
  "output_tokens": 2,
  "cache_creation_input_tokens": 0,
  "cache_read_input_tokens": 560
}

Modeller

Sätt model-id i OpenCode till någon av staiks modeller. qwen3.5:35b-a3b (standard) kör på vLLM med 262k kontextfönster — räcker för stora repo-kontexter utan att falla tillbaka.

  • qwen3.5:35b-a3bstandard, 262k kontext, vLLM
  • qwen3.5:9bsnabb, 262k kontext
  • gemma4:31b96k kontext, vision

Att tänka på

Thinking-aliasen (…-thinking) strippas i Anthropic-översättningen på /v1/messages — de beter sig som basmodellen utan separat reasoning-output. Vill du ha thinking, använd den OpenAI-kompatibla endpointen för det specifika anropet.

Vill du köra Claude Code eller Anthropic SDK i stället? Se Claude Code-dokumentationen.