Files
Linux_post_install/config/ai.env
T
Your Name 9ef42c5fd1
gates / consistency-and-conventions (push) Successful in 27s
fix: pos ai — honor legacy AI_API_KEY as fallback (provider key stays primary)
Architect decision C on the API-key contract mismatch: docs claimed
AI_API_KEY was the required primary key, but resolve_key() only read
provider-specific keys (7ae2e77 removed shared-key priority to fix
cross-provider leakage; docs never updated).

- bin/pos-ai resolve_key(): provider key wins, legacy AI_API_KEY honored
  read-only when the provider's own key is empty, llamacpp unchanged;
  cmd_providers() configured check mirrors the same set
- require_key() error messages byte-stable (test-locked)
- AI_API_KEY NOT re-added to the # POS_CONFIG:/# PROVIDER_CONFIG: registry
- Docs reworded: POS.md rows 91/96/98 + precedence sentence, howto/ai.md
  first-run hints, HOWTO.md row, AGENT_Context prose (2 spots), config/ai.env
  legacy comment
- New regression tests/t-ai-key-resolution.sh: 24 checks / 10 cases
  (provider-key-only, AI_API_KEY-only, both -> provider wins, env-wins,
  llamacpp no-key, missing-key message, providers configured status)

Verified: suite 19 files / 440 checks / 0 fail / 0 skip; make gen
byte-idempotent; make check OK; make lint 0 FAIL, 0 WARN; bash -n clean;
git diff --check clean; Reviewer APPROVE_WITH_NOTES (mutation disproof:
inverted precedence -> C3/C6 fail)
2026-09-07 13:32:42 -04:00

28 lines
1.4 KiB
Bash

# ~/.config/linux_post_install/ai.env — AI provider config for 'pos ai'
# Copied to ~/.config/linux_post_install/ai.env on install (no clobber).
# Edit with: pos config ai
#
# Provider selection:
# AI_PROVIDER=gemini # provider: gemini|openrouter (default gemini)
#
# API keys (each provider needs its own):
# AI_GEMINI_API_KEY=<key> # Gemini API key from aistudio.google.com
# OPENROUTER_API_KEY=<key> # OpenRouter API key from openrouter.ai
# Legacy fallback: AI_API_KEY=<key> is honored when the provider's own key is unset
#
# Model overrides (optional, defaults per provider):
# AI_GEMINI_MODEL=<model> # Gemini model id (default: gemini-2.5-flash)
# OPENROUTER_MODEL=<model> # OpenRouter model id (default: openrouter/auto)
# AI_MODEL=<model> # Override for all providers (takes priority)
#
# System prompt:
# AI_SYSTEM_PROMPT=<prompt> # Custom system prompt (overrides built-in; empty to reset)
#
# llama.cpp local inference server (pos ai server):
# LLAMACPP_PORT=8088 # Server port (default 8088)
# LLAMACPP_HOST=127.0.0.1 # Bind address (default 127.0.0.1)
# LLAMACPP_MODEL=<path> # Default model path (GGUF file)
# LLAMACPP_CTX_SIZE=4096 # Context window size (default 4096)
# LLAMACPP_GPU_LAYERS=-1 # GPU layers: -1=auto, 0=CPU only (default -1)
# LLAMACPP_THREADS=<n> # CPU threads (default: nproc)