mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-22 00:02:12 +02:00
feat(llm): add BYOK tier + 4 provider adapters (OpenAI, Anthropic, Gemini, Mistral)
Phase 1-3 of BYOK support. Introduces a 5th LLM tier 'byok' that routes to user-provided API keys via direct browser fetches. shared-llm additions: - LlmTier extended with 'byok' (rank 3, between mana-server and cloud) - ByokBackend: LlmBackend implementation that delegates key lookup to an app-provided resolver callback, then dispatches to the right provider adapter - 4 provider adapters: - OpenAI (gpt-5, gpt-4o, o1 family) - Anthropic (Claude Opus/Sonnet/Haiku 4.6) with CORS header - Gemini (2.5 Pro/Flash) — REST API with different message format - Mistral — OpenAI-compatible, reuses shared openai-compat adapter - Pricing table for 20+ models with USD per 1M tokens - estimateCost() + formatCost() helpers Keys stay device-local (IndexedDB in next phase). Browser-direct fetches mean keys never touch Mana's server. Updates two existing tier maps (memoro DetailView, SourceBadge) to include the new tier. Planning doc at docs/architecture/BYOK_PLAN.md. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
3817111f80
commit
a33857fa39
15 changed files with 1026 additions and 11 deletions
|
|
@ -70,6 +70,18 @@ export class LlmOrchestrator {
|
|||
this.settings = settings;
|
||||
}
|
||||
|
||||
/** Register (or replace) a backend at runtime — used by the app
|
||||
* to wire up the BYOK backend after initial orchestrator construction,
|
||||
* since BYOK needs access to app-side IndexedDB keys. */
|
||||
registerBackend(backend: LlmBackend): void {
|
||||
this.backendsByTier.set(backend.tier, backend);
|
||||
}
|
||||
|
||||
/** Remove a backend (e.g. when the user disables BYOK). */
|
||||
unregisterBackend(tier: LlmTier): void {
|
||||
this.backendsByTier.delete(tier);
|
||||
}
|
||||
|
||||
/** Public read-only view for UI components that want to react to
|
||||
* the current settings (e.g. the tier selector). */
|
||||
getSettings(): Readonly<LlmSettings> {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue