mirror of
https://github.com/rowboatlabs/rowboat.git
synced 2026-06-12 19:55:19 +02:00
Bring back per-category model selection that 5c4aa772 dropped, plus add a
new track-block category. Each is a BYOK-only override on `LlmModelConfig`
(`knowledgeGraphModel`, `meetingNotesModel`, `trackBlockModel`); signed-in
users always get the curated gateway default and never hit the on-disk
config.
Three helpers in core/models/defaults.ts — `getKgModel`,
`getTrackBlockModel`, `getMeetingNotesModel` — each check `isSignedIn`
first (fast path) and fall through to `cfg.<field> ?? cfg.model` for BYOK.
The model is now picked at the invocation site rather than via runtime
agent-name branching: each top-level `createRun` for a polling KG agent
or a track-block update passes `model: await getXxxModel()`. The `model:`
declarations on the affected agent YAMLs are dropped — they were dead
code under the per-call override. Standalone (non-run) callers
`track/routing` and `summarize_meeting` use the helpers inline.
Settings dialog and the two onboarding flows surface the two new fields
("Meeting Notes Model", "Track Block Model") next to the existing
"Knowledge Graph Model"; `repo.setConfig` persists all three per-provider.
Note: the signed-in `RowboatModelSettings` panel still has its
now-defunct kg selector; that's a UI cleanup for a later pass.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
26 lines
1,005 B
TypeScript
26 lines
1,005 B
TypeScript
import { z } from "zod";
|
|
|
|
export const LlmProvider = z.object({
|
|
flavor: z.enum(["openai", "anthropic", "google", "openrouter", "aigateway", "ollama", "openai-compatible", "rowboat"]),
|
|
apiKey: z.string().optional(),
|
|
baseURL: z.string().optional(),
|
|
headers: z.record(z.string(), z.string()).optional(),
|
|
});
|
|
|
|
export const LlmModelConfig = z.object({
|
|
provider: LlmProvider,
|
|
model: z.string(),
|
|
models: z.array(z.string()).optional(),
|
|
providers: z.record(z.string(), z.object({
|
|
apiKey: z.string().optional(),
|
|
baseURL: z.string().optional(),
|
|
headers: z.record(z.string(), z.string()).optional(),
|
|
model: z.string().optional(),
|
|
models: z.array(z.string()).optional(),
|
|
})).optional(),
|
|
// Per-category model overrides (BYOK only — signed-in users always get
|
|
// the curated gateway defaults). Read by helpers in core/models/defaults.ts.
|
|
knowledgeGraphModel: z.string().optional(),
|
|
meetingNotesModel: z.string().optional(),
|
|
trackBlockModel: z.string().optional(),
|
|
});
|