mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-09-05 08:10:39 +00:00
## Summary This lays the groundwork for settings-driven LLM providers and models without switching production routing yet. The new schemas and shared vocabulary let later catalog construction treat provider/model identity as data while keeping adapter behavior and control values Rust-owned. ## What changed - Added `[llm.providers]` and `[llm.models]` settings layers with sparse per-entry merging, whole-array replacement for credential/alias/control lists, TOML date support for `knowledge_cutoff`, and typed `credential:` / `env:` references that reject literal secrets. - Added `ProviderId`, `ModelId`, and a shared `ReasoningEffort` enum in `fabro-model`, plus adapter metadata for `anthropic`, `openai`, `gemini`, and `openai_compatible`. - Added a matching `fabro-llm` adapter factory registry with parity tests to keep metadata keys and factory keys in sync. - Added `[run.model.controls]` defaults through config resolution and runtime settings types. - Added a workspace policy test to prevent future `bootstrap_catalog` use outside install/test-support paths. ### Plan Summary - This is the foundation slice of the settings-driven catalog plan. - Production still uses the existing `Provider` enum and `Catalog::builtin()` call paths. - ProviderId routing, OpenAPI regeneration, auth resolver changes, resolved `Arc<Catalog>` injection, typed request speed, and per-speed billing are deferred follow-ups. ⚒️ Generated with [Fabro](https://fabro.sh) --------- Co-authored-by: Fabro <noreply@fabro.sh> Co-authored-by: fabro-bot <fabro-bot@fabro.sh> Co-authored-by: Bryan Helmkamp <bryan@brynary.com> |
||
|---|---|---|
| .. | ||
| brainstorms | ||
| ideation | ||
| internal | ||
| plans | ||
| public | ||
| superpowers | ||