feat: wire cf-core env-var LLM config + coordinator auth (closes #13)
- .env.example: document ANTHROPIC_API_KEY, OPENAI_API_KEY, OLLAMA_HOST, OLLAMA_MODEL, CF_ORCH_URL, CF_LICENSE_KEY with usage comments - config.py: expose CF_LICENSE_KEY in Settings for startup visibility - pyproject.toml: pin circuitforge-core >= 0.6.0 (env-var auto-config + CFOrchClient bearer auth land in 0.6.0) Bare-metal self-hosters can now run Kiwi with only OLLAMA_HOST set and zero yaml config. Paid+ users set CF_ORCH_URL + CF_LICENSE_KEY for managed cloud GPU inference.
This commit is contained in:
parent
61c16af754
commit
504631763b
3 changed files with 27 additions and 1 deletions
22
.env.example
22
.env.example
|
|
@ -21,6 +21,23 @@ DATA_DIR=./data
|
||||||
# IP this machine advertises to the coordinator (must be reachable from coordinator host)
|
# IP this machine advertises to the coordinator (must be reachable from coordinator host)
|
||||||
# CF_ORCH_ADVERTISE_HOST=10.1.10.71
|
# CF_ORCH_ADVERTISE_HOST=10.1.10.71
|
||||||
|
|
||||||
|
# CF-core hosted coordinator (managed cloud GPU inference — Paid+ tier)
|
||||||
|
# Set CF_ORCH_URL to use a hosted cf-orch coordinator instead of self-hosting.
|
||||||
|
# CF_LICENSE_KEY is read automatically by CFOrchClient for bearer auth.
|
||||||
|
# CF_ORCH_URL=https://orch.circuitforge.tech
|
||||||
|
# CF_LICENSE_KEY=CFG-KIWI-xxxx-xxxx-xxxx
|
||||||
|
|
||||||
|
# LLM backend — env-var auto-config (no llm.yaml needed for bare-metal users)
|
||||||
|
# LLMRouter checks these in priority order:
|
||||||
|
# 1. Anthropic cloud — set ANTHROPIC_API_KEY
|
||||||
|
# 2. OpenAI cloud — set OPENAI_API_KEY
|
||||||
|
# 3. Local Ollama — set OLLAMA_HOST (+ optionally OLLAMA_MODEL)
|
||||||
|
# All three are optional; leave unset to rely on a local llm.yaml instead.
|
||||||
|
# ANTHROPIC_API_KEY=sk-ant-...
|
||||||
|
# OPENAI_API_KEY=sk-...
|
||||||
|
# OLLAMA_HOST=http://localhost:11434
|
||||||
|
# OLLAMA_MODEL=llama3.2
|
||||||
|
|
||||||
# Processing
|
# Processing
|
||||||
USE_GPU=true
|
USE_GPU=true
|
||||||
GPU_MEMORY_LIMIT=6144
|
GPU_MEMORY_LIMIT=6144
|
||||||
|
|
@ -53,3 +70,8 @@ DEMO_MODE=false
|
||||||
|
|
||||||
# Directus JWT (must match cf-directus SECRET env var)
|
# Directus JWT (must match cf-directus SECRET env var)
|
||||||
# DIRECTUS_JWT_SECRET=
|
# DIRECTUS_JWT_SECRET=
|
||||||
|
|
||||||
|
# In-app feedback → Forgejo issue creation
|
||||||
|
# FORGEJO_API_TOKEN=
|
||||||
|
# FORGEJO_REPO=Circuit-Forge/kiwi
|
||||||
|
# FORGEJO_API_URL=https://git.opensourcesolarpunk.com/api/v1
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,10 @@ class Settings:
|
||||||
# CF-core resource coordinator (VRAM lease management)
|
# CF-core resource coordinator (VRAM lease management)
|
||||||
COORDINATOR_URL: str = os.environ.get("COORDINATOR_URL", "http://localhost:7700")
|
COORDINATOR_URL: str = os.environ.get("COORDINATOR_URL", "http://localhost:7700")
|
||||||
|
|
||||||
|
# Hosted cf-orch coordinator — bearer token for managed cloud GPU inference (Paid+)
|
||||||
|
# CFOrchClient reads CF_LICENSE_KEY automatically; exposed here for startup validation.
|
||||||
|
CF_LICENSE_KEY: str | None = os.environ.get("CF_LICENSE_KEY")
|
||||||
|
|
||||||
# Feature flags
|
# Feature flags
|
||||||
ENABLE_OCR: bool = os.environ.get("ENABLE_OCR", "false").lower() in ("1", "true", "yes")
|
ENABLE_OCR: bool = os.environ.get("ENABLE_OCR", "false").lower() in ("1", "true", "yes")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ dependencies = [
|
||||||
# HTTP client
|
# HTTP client
|
||||||
"httpx>=0.27",
|
"httpx>=0.27",
|
||||||
# CircuitForge shared scaffold
|
# CircuitForge shared scaffold
|
||||||
"circuitforge-core",
|
"circuitforge-core>=0.6.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[tool.setuptools.packages.find]
|
[tool.setuptools.packages.find]
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue