mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 21:41:09 +02:00
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>
54 lines
1.9 KiB
TypeScript
54 lines
1.9 KiB
TypeScript
/**
|
|
* Tier definitions for the Mana LLM orchestrator.
|
|
*
|
|
* Five tiers, ordered from most-private to least-private:
|
|
*
|
|
* none — Deterministic parsers / heuristics. No LLM at all.
|
|
* Always available. Zero cost. Quality varies by task.
|
|
*
|
|
* browser — Gemma 4 E2B running in the user's browser via WebGPU
|
|
* (@mana/local-llm). 100% on-device. Requires the
|
|
* ~500 MB model to be downloaded once and ~2 GB VRAM.
|
|
*
|
|
* mana-server — services/mana-llm + Ollama on our own infrastructure
|
|
* (currently the Mac Mini, gemma3:4b by default).
|
|
* Data leaves the device but stays in our control.
|
|
*
|
|
* byok — User-provided API keys (OpenAI, Anthropic, Gemini,
|
|
* Mistral). Browser-direct fetches. Data goes to a
|
|
* third-party account the user manages. User controls
|
|
* the provider's privacy/retention policy directly.
|
|
*
|
|
* cloud — services/mana-llm proxied to a third-party provider
|
|
* (Google Gemini, configured via google_api_key in the
|
|
* mana-llm service env). Mana-managed, charges Mana
|
|
* credits. Data goes to the third party via Mana.
|
|
*/
|
|
|
|
export type LlmTier = 'none' | 'browser' | 'mana-server' | 'byok' | 'cloud';
|
|
|
|
export const TIER_RANK: Record<LlmTier, number> = {
|
|
none: 0,
|
|
browser: 1,
|
|
'mana-server': 2,
|
|
byok: 3,
|
|
cloud: 4,
|
|
};
|
|
|
|
export const ALL_TIERS: readonly LlmTier[] = ['none', 'browser', 'mana-server', 'byok', 'cloud'];
|
|
|
|
/** Human-readable label, kept here so backends/UI agree on naming. */
|
|
export function tierLabel(tier: LlmTier): string {
|
|
switch (tier) {
|
|
case 'none':
|
|
return 'Lokal (ohne KI)';
|
|
case 'browser':
|
|
return 'Auf deinem Gerät';
|
|
case 'mana-server':
|
|
return 'Mana-Server';
|
|
case 'byok':
|
|
return 'Dein API-Key';
|
|
case 'cloud':
|
|
return 'Google Gemini';
|
|
}
|
|
}
|