From c711ffb85af0554ee8689eaf340b7e4a0d24477b Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Tue, 23 Dec 2025 14:24:04 +0530 Subject: [PATCH] feat: add anthropic models --- .../dashboard/i18n/locale/en/settings.json | 1 + .../captain/components/ModelSelector.vue | 12 +++-- .../dashboard/store/captain/config.js | 11 ++++- config/llm.yml | 48 +++++++++++++++++-- lib/llm/config_service.rb | 1 + 5 files changed, 65 insertions(+), 8 deletions(-) diff --git a/app/javascript/dashboard/i18n/locale/en/settings.json b/app/javascript/dashboard/i18n/locale/en/settings.json index aee2644e6..9e61af545 100644 --- a/app/javascript/dashboard/i18n/locale/en/settings.json +++ b/app/javascript/dashboard/i18n/locale/en/settings.json @@ -392,6 +392,7 @@ "DESCRIPTION": "Select AI models for different features.", "SELECT_MODEL": "Select model", "CREDITS_PER_MESSAGE": "{credits} credit/message", + "COMING_SOON": "Coming Soon", "EDITOR": { "TITLE": "Editor Features", "DESCRIPTION": "Powers smart compose, grammar corrections, tone adjustments, and content enhancement in your message editor." diff --git a/app/javascript/dashboard/routes/dashboard/settings/captain/components/ModelSelector.vue b/app/javascript/dashboard/routes/dashboard/settings/captain/components/ModelSelector.vue index adc8bd0b1..a871adba4 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/captain/components/ModelSelector.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/captain/components/ModelSelector.vue @@ -26,7 +26,7 @@ const emit = defineEmits(['change']); const PROVIDER_ICONS = { openai: 'i-logos-openai-icon', - anthropic: 'i-logos-claude-icon', + anthropic: 'i-logos-anthropic-icon', mistral: 'i-logos-mistral-icon', gemini: 'i-logos-gemini-icon', }; @@ -135,7 +135,10 @@ const selectModel = model => { :key="model.id" :click="() => selectModel(model)" class="rounded-lg hover:bg-n-alpha-1" - :class="{ 'bg-n-alpha-2': selectedModelId === model.id }" + :class="{ + 'bg-n-alpha-2': selectedModelId === model.id, + 'pointer-events-none opacity-60': model.coming_soon, + }" >
{ {{ t('GENERAL.PREFERRED') }}
- + + {{ t('CAPTAIN_SETTINGS.MODEL_CONFIG.COMING_SOON') }} + + {{ getCreditLabel(model) }} diff --git a/app/javascript/dashboard/store/captain/config.js b/app/javascript/dashboard/store/captain/config.js index cb6396e9b..458925669 100644 --- a/app/javascript/dashboard/store/captain/config.js +++ b/app/javascript/dashboard/store/captain/config.js @@ -16,7 +16,16 @@ const getters = { getUIFlags: $state => $state.uiFlags, getModelsForFeature: $state => featureKey => { const feature = $state.features[featureKey]; - return feature?.models || []; + const models = feature?.models || []; + + return [...models].sort((a, b) => { + // Move coming_soon items to the end + if (a.coming_soon && !b.coming_soon) return 1; + if (!a.coming_soon && b.coming_soon) return -1; + + // Sort by credit_multiplier (highest first) + return (b.credit_multiplier || 0) - (a.credit_multiplier || 0); + }); }, getDefaultModelForFeature: $state => featureKey => { const feature = $state.features[featureKey]; diff --git a/config/llm.yml b/config/llm.yml index 62ae955f9..47f32442d 100644 --- a/config/llm.yml +++ b/config/llm.yml @@ -2,6 +2,9 @@ providers: openai: display_name: 'OpenAI' logo: openai.png + anthropic: + display_name: 'Anthropic' + logo: anthropic.png models: gpt-4.1: @@ -23,7 +26,7 @@ models: gpt-5.1: provider: openai display_name: 'GPT-5.1' - credit_multiplier: 1 + credit_multiplier: 1.2 gpt-5-mini: provider: openai display_name: 'GPT-5 Mini' @@ -35,7 +38,17 @@ models: gpt-5.2: provider: openai display_name: 'GPT-5.2' + credit_multiplier: 1.5 + claude-haiku-4.5: + provider: anthropic + display_name: 'Claude Haiku 4.5' + coming_soon: true credit_multiplier: 1 + claude-sonnet-4: + provider: anthropic + display_name: 'Claude Sonnet 4' + coming_soon: true + credit_multiplier: 2 whisper-1: provider: openai display_name: 'Whisper' @@ -48,13 +61,40 @@ models: features: editor: models: - [gpt-4.1-mini, gpt-4.1-nano, gpt-5-mini, gpt-4.1, gpt-5, gpt-5.1, gpt-5.2] + [ + gpt-4.1-mini, + gpt-4.1-nano, + gpt-5-mini, + gpt-4.1, + gpt-5, + gpt-5.1, + gpt-5.2, + claude-haiku-4.5, + ] default: gpt-4.1-mini assistant: - models: [gpt-5-mini, gpt-4.1, gpt-5, gpt-5.1, gpt-5.2] + models: + [ + gpt-5-mini, + gpt-4.1, + gpt-5, + gpt-5.1, + gpt-5.2, + claude-haiku-4.5, + claude-sonnet-4, + ] default: gpt-5.2 copilot: - models: [gpt-5-mini, gpt-4.1, gpt-5, gpt-5.1, gpt-5.2] + models: + [ + gpt-5-mini, + gpt-4.1, + gpt-5, + gpt-5.1, + gpt-5.2, + claude-haiku-4.5, + claude-sonnet-4, + ] default: gpt-5.2 label_suggestion: models: [gpt-4.1-nano, gpt-4.1-mini, gpt-5-mini] diff --git a/lib/llm/config_service.rb b/lib/llm/config_service.rb index 250637d61..73ee53370 100644 --- a/lib/llm/config_service.rb +++ b/lib/llm/config_service.rb @@ -56,6 +56,7 @@ module Llm::ConfigService id: model_name, display_name: model['display_name'], provider: model['provider'], + coming_soon: model['coming_soon'], credit_multiplier: model['credit_multiplier'] } end,