opencode prices and Go limits, settings out of .env
- Fetch prices for opencode (Zen and Go) incl. limits, image input, reasoning,
long-context tiers and peak-hour/date factors; costs apply them per request
- Record the cost opencode reports per response; track Go allowance in 5h/7d/month
windows against a provider plan limit (budget table, status overlay)
- Settings → Config file: move values of ${NAME} references into the config
- Examples, presets and forms keep keys in the config instead of .env
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
70367211c1
commit
bfa1f641d7
23 files changed
+723
-69
No files matched your search
+15
-14
@@ -8,9 +8,10 @@
|
||||
#
|
||||
# Location: $CODECRAFT_CONFIG, otherwise <data_dir>/config.toml (Docker: /data/config.toml)
|
||||
#
|
||||
# Secrets: any string value may reference environment variables with ${NAME},
|
||||
# e.g. api_key = "${ANTHROPIC_API_KEY}". Prefer this over literal keys – keys
|
||||
# entered in the UI are stored here in plain text.
|
||||
# Keys and tokens are entered in the web UI (Settings) and stored here, readable
|
||||
# for admins and included in backups. Any string value may also reference an
|
||||
# environment variable as ${NAME}; Settings → Config file moves such values
|
||||
# into this file.
|
||||
# =============================================================================
|
||||
|
||||
[server]
|
||||
@@ -47,7 +48,7 @@ currency = "USD"
|
||||
# proxy's body limit (e.g. Nginx client_max_body_size) does not apply.
|
||||
max_upload_mb = 500
|
||||
# Bearer token for Prometheus at GET /metrics (empty = /metrics disabled).
|
||||
# metrics_token = "${CODECRAFT_METRICS_TOKEN}"
|
||||
# metrics_token = "a-long-random-string"
|
||||
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
@@ -81,7 +82,7 @@ max_upload_mb = 500
|
||||
[providers.anthropic]
|
||||
kind = "anthropic"
|
||||
base_url = "https://api.anthropic.com/v1"
|
||||
api_key = "${ANTHROPIC_API_KEY}"
|
||||
api_key = "" # set in Settings
|
||||
# Current Claude models think adaptively; "effort" controls depth and cost.
|
||||
# Prices: Anthropic list prices in USD per 1M tokens (Nov 2026) – adjust if needed.
|
||||
models = [
|
||||
@@ -97,25 +98,25 @@ models = [
|
||||
[providers.gemini]
|
||||
kind = "openai"
|
||||
base_url = "https://generativelanguage.googleapis.com/v1beta/openai"
|
||||
api_key = "${GEMINI_API_KEY}"
|
||||
api_key = "" # set in Settings
|
||||
models = [] # discovered automatically
|
||||
enabled = false # set to true once GEMINI_API_KEY is available
|
||||
enabled = false # enable once the key is set
|
||||
|
||||
# opencode Go subscription (OpenAI-compatible endpoint for most models).
|
||||
# Current model list: https://opencode.ai/inference/go/v1/models
|
||||
[providers.opencode-go]
|
||||
kind = "openai"
|
||||
base_url = "https://opencode.ai/inference/go/openai/v1"
|
||||
api_key = "${OPENCODE_API_KEY}"
|
||||
api_key = "" # set in Settings
|
||||
models = []
|
||||
enabled = false
|
||||
|
||||
# fal.ai – OpenRouter-backed LLM router. fal expects "Authorization: Key <FAL_KEY>".
|
||||
# fal.ai – OpenRouter-backed LLM router. fal expects "Authorization: Key <key>".
|
||||
# NOTE: verify base_url against the fal docs for your account.
|
||||
[providers.fal]
|
||||
kind = "openai"
|
||||
base_url = "https://fal.run/openrouter/router/openai/v1"
|
||||
api_key = "${FAL_KEY}"
|
||||
api_key = "" # set in Settings
|
||||
auth_prefix = "Key "
|
||||
models = [
|
||||
{ id = "google/gemini-2.5-flash", context = 1000000, max_output = 32000, vision = true },
|
||||
@@ -151,7 +152,7 @@ enabled = false
|
||||
# [mcp.trilium]
|
||||
# type = "http"
|
||||
# url = "https://notes.example.org/mcp"
|
||||
# headers = { Authorization = "Bearer ${TRILIUM_TOKEN}" }
|
||||
# headers = { Authorization = "Bearer <token>" }
|
||||
|
||||
# [mcp.filesystem]
|
||||
# type = "stdio"
|
||||
@@ -243,7 +244,7 @@ generate_image = "ask" # costs money per image
|
||||
[images]
|
||||
enabled = false
|
||||
base_url = "https://fal.run"
|
||||
api_key = "${FAL_KEY}"
|
||||
api_key = "" # set in Settings
|
||||
default_model = "fal-ai/flux/schnell"
|
||||
output_dir = "generated"
|
||||
# The agent drafts with a "preview" model, asks which draft to refine, then
|
||||
@@ -288,7 +289,7 @@ cookie_secure = "auto"
|
||||
enabled = false
|
||||
issuer = "https://auth.example.org/application/o/codecraft/"
|
||||
client_id = "codecraft"
|
||||
client_secret = "${OIDC_CLIENT_SECRET}"
|
||||
client_secret = "" # set in Settings
|
||||
scopes = ["openid", "profile", "email", "groups"]
|
||||
username_claim = "preferred_username"
|
||||
groups_claim = "groups"
|
||||
@@ -309,7 +310,7 @@ button_label = "Single sign-on"
|
||||
# -----------------------------------------------------------------------------
|
||||
[search]
|
||||
# "duckduckgo" (no key, may be rate-limited), "searxng" (self-hosted, set url),
|
||||
# "brave" or "tavily" (api_key, e.g. "${BRAVE_API_KEY}")
|
||||
# "brave" or "tavily" (set api_key in Settings)
|
||||
provider = "duckduckgo"
|
||||
url = ""
|
||||
api_key = ""
|
||||
|
||||
Reference in new issue
Block a user