Provider-agnostic LLM registry, config check, migration runbook
[llm] assigns the bulk and editor roles by name over a [providers.*] registry (kind = openai | anthropic, per-provider model, effort, daily ceiling and price table); DeepseekBackend becomes OpenAiCompatibleBackend (reasoning_effort passthrough), AnthropicBackend builds from the same ProviderConfig, meters and provider_costs are keyed by provider name. Gemini 3.8 Flash is declared via Google's OpenAI-compatible endpoint so switching the editor is one line (or DAILY_EPUB_LLM__EDITOR=gemini for an A/B dry run). Stale [deepseek]/[anthropic] tables, the top-level max_daily_usd and the old key env vars fail loudly. daily-epub config check validates and prints the resolved roles, models, key presence and paths without opening the database. docs/runbooks/curation-v2-migration.md walks the server upgrade from v1. Registry implemented by a Claude agent from an orchestrator brief; verified fmt/clippy(-W dead_code)/test green. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A1rCLQeKBgnBo3oTgHuTMe
This commit is contained in:
@@ -500,8 +500,8 @@ pub async fn run(
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::config::DeepseekConfig;
|
||||
use crate::curate::llm::{MockBackend, UsageMeter};
|
||||
use crate::config::ProviderConfig;
|
||||
use crate::curate::llm::{MockBackend, PriceTable, UsageMeter};
|
||||
use crate::curate::prefilter::tests::article;
|
||||
use crate::curate::signals::{Neighbour, TopInterest};
|
||||
use crate::types::TokenUsage;
|
||||
@@ -584,11 +584,11 @@ mod tests {
|
||||
r#"{"articles":[{"id":42,"interest":8,"kind":"essay","why":"first answer"}]}"#,
|
||||
TokenUsage::default(),
|
||||
);
|
||||
let config = DeepseekConfig::default();
|
||||
let config = ProviderConfig::deepseek();
|
||||
let llm = LlmClient::with_backend(
|
||||
&config.model,
|
||||
"profile".into(),
|
||||
UsageMeter::new(&config, 10.0),
|
||||
UsageMeter::with_prices(PriceTable::from(&config), 10.0),
|
||||
backend.clone(),
|
||||
);
|
||||
let pool = HashSet::from([42]);
|
||||
|
||||
Reference in New Issue
Block a user