Skip to content

feat: allow platform users to use external providers#232

Open
Saul-Gomez-J wants to merge 1 commit intolevante-hub:developfrom
Saul-Gomez-J:feat/use-other-providers-platform-mode
Open

feat: allow platform users to use external providers#232
Saul-Gomez-J wants to merge 1 commit intolevante-hub:developfrom
Saul-Gomez-J:feat/use-other-providers-platform-mode

Conversation

@Saul-Gomez-J
Copy link
Contributor

Summary

  • Qualified model references (providerId::modelId) disambiguate models that exist in multiple sources (e.g., levante-platform::gpt-4o vs openrouter::gpt-4o)
  • useOtherProviders toggle in AccountPage lets platform users enable external providers (OpenRouter, OpenAI, Anthropic, etc.) alongside their Levante Platform models
  • Unified catalog via loadSelectableModels() centralizes model loading for all app modes (standalone, platform pure, platform hybrid)
  • Model target resolver in main process determines correct routing (Platform API vs standalone provider) based on qualified refs
  • Extracted ProviderConfigPanel from ModelPage for reuse in both ModelPage and AccountPage
  • 27 unit tests covering modelRefs, selectableModels, and modelTargetResolver

Files changed

New files (8):

  • src/shared/modelRefs.ts — build/parse/validate qualified model references
  • src/renderer/lib/selectableModels.ts — unified catalog loader for all modes
  • src/main/services/ai/modelTargetResolver.ts — main-process routing resolver
  • src/renderer/components/providers/ProviderConfigPanel.tsx — extracted provider config UI
  • src/shared/modelRefs.test.ts — 9 tests
  • src/renderer/lib/selectableModels.test.ts — 10 tests
  • src/main/services/ai/__tests__/modelTargetResolver.test.ts — 8 tests
  • vitest.config.ts — path alias resolution for tests

Modified files (14):

  • src/types/preferences.ts — added useOtherProviders preference
  • src/main/services/preferencesService.ts — schema entry for new preference
  • src/renderer/pages/AccountPage.tsx — toggle + ProviderConfigPanel integration
  • src/renderer/pages/ModelPage.tsx — thin wrapper over ProviderConfigPanel
  • src/renderer/hooks/useModelSelection.ts — uses unified catalog
  • src/main/services/ai/providerResolver.ts — delegates to modelTargetResolver
  • src/main/services/aiService.ts — uses qualified refs for model info/provider lookup
  • src/renderer/App.tsx, ChatPage.tsx, ProjectPage.tsx, ChatListContent.tsx, SettingsPage.tsx — adapted to qualified refs
  • src/renderer/locales/{en,es}/account.json — i18n keys for toggle section

Test plan

  • pnpm test — 27 new tests pass (modelRefs, selectableModels, modelTargetResolver)
  • pnpm typecheck — clean
  • Manual: standalone mode works as before (no regressions)
  • Manual: platform mode without toggle — only platform models shown
  • Manual: platform mode with toggle ON — platform + external provider models shown, grouped by provider
  • Manual: selecting a platform model routes through Platform API
  • Manual: selecting an external model routes through its provider
  • Manual: legacy sessions (raw model IDs) resolve correctly

🤖 Generated with Claude Code

…rm models

Introduces hybrid mode where platform-authenticated users can toggle
"Use Other Providers" to access OpenRouter, OpenAI, Anthropic, etc.
alongside their Levante Platform models.

Key changes:
- Qualified model references (providerId::modelId) to disambiguate
  models across multiple sources
- useOtherProviders preference toggle in AccountPage
- Unified catalog loader (loadSelectableModels) for all app modes
- Model target resolver in main process for routing to correct backend
- Extracted ProviderConfigPanel for reuse in ModelPage and AccountPage
- 27 unit tests for modelRefs, selectableModels, and modelTargetResolver
- vitest.config.ts with path aliases for test resolution

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@kilo-code-bot
Copy link
Contributor

kilo-code-bot bot commented Mar 24, 2026

Kilo Code Review could not run — your account is out of credits.

Add credits at app.kilo.ai to enable reviews on this change.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant