diff --git a/config/installation_config.yml b/config/installation_config.yml index 01799e830..32cba36f5 100644 --- a/config/installation_config.yml +++ b/config/installation_config.yml @@ -175,6 +175,10 @@ display_title: 'OpenAI API Endpoint (optional)' description: 'The OpenAI endpoint configured for use in Captain AI. Default: https://api.openai.com/' locked: false +- name: CAPTAIN_EMBEDDING_MODEL + display_title: 'Embedding Model (optional)' + description: 'The embedding model configured for use in Captain AI. Default: text-embedding-3-small' + locked: false - name: CAPTAIN_FIRECRAWL_API_KEY display_title: 'FireCrawl API Key (optional)' description: 'The FireCrawl API key for the Captain AI service' diff --git a/enterprise/app/services/captain/llm/embedding_service.rb b/enterprise/app/services/captain/llm/embedding_service.rb index 74f3079bf..1dbb0ce5b 100644 --- a/enterprise/app/services/captain/llm/embedding_service.rb +++ b/enterprise/app/services/captain/llm/embedding_service.rb @@ -3,9 +3,11 @@ require 'openai' class Captain::Llm::EmbeddingService < Llm::BaseOpenAiService class EmbeddingsError < StandardError; end - DEFAULT_MODEL = 'text-embedding-3-small'.freeze + def self.embedding_model + @embedding_model = InstallationConfig.find_by(name: 'CAPTAIN_EMBEDDING_MODEL')&.value.presence || OpenAiConstants::DEFAULT_EMBEDDING_MODEL + end - def get_embedding(content, model: DEFAULT_MODEL) + def get_embedding(content, model: self.class.embedding_model) response = @client.embeddings( parameters: { model: model, diff --git a/lib/open_ai_constants.rb b/lib/open_ai_constants.rb index 2c87f3378..7b7a3ba5f 100644 --- a/lib/open_ai_constants.rb +++ b/lib/open_ai_constants.rb @@ -3,4 +3,5 @@ module OpenAiConstants DEFAULT_MODEL = 'gpt-4.1-mini' DEFAULT_ENDPOINT = 'https://api.openai.com' + DEFAULT_EMBEDDING_MODEL = 'text-embedding-3-small' end