diff --git a/config/installation_config.yml b/config/installation_config.yml index 1a804b707..339c27160 100644 --- a/config/installation_config.yml +++ b/config/installation_config.yml @@ -138,6 +138,11 @@ display_title: 'OpenAI API Key' description: 'The API key used to authenticate requests to OpenAI services for Captain AI.' locked: false +- name: CAPTAIN_OPEN_AI_BASE_URL + display_title: 'API Base URL' + description: 'The base URL for the OpenAI API. Default: https://api.openai.com, this is useful when using other OpenAI compliant endpoints like Azure, Ollama or Groq.' + value: 'https://api.openai.com' + locked: false - name: CAPTAIN_OPEN_AI_MODEL display_title: 'OpenAI Model' description: 'The OpenAI model configured for use in Captain AI. Default: gpt-4o-mini' diff --git a/enterprise/app/controllers/enterprise/super_admin/app_configs_controller.rb b/enterprise/app/controllers/enterprise/super_admin/app_configs_controller.rb index 21617aa83..cf9246c6b 100644 --- a/enterprise/app/controllers/enterprise/super_admin/app_configs_controller.rb +++ b/enterprise/app/controllers/enterprise/super_admin/app_configs_controller.rb @@ -10,7 +10,7 @@ module Enterprise::SuperAdmin::AppConfigsController when 'internal' @allowed_configs = internal_config_options when 'captain' - @allowed_configs = %w[CAPTAIN_OPEN_AI_API_KEY CAPTAIN_OPEN_AI_MODEL CAPTAIN_FIRECRAWL_API_KEY] + @allowed_configs = %w[CAPTAIN_OPEN_AI_API_KEY CAPTAIN_OPEN_AI_MODEL CAPTAIN_OPEN_AI_BASE_URL CAPTAIN_FIRECRAWL_API_KEY] else super end diff --git a/enterprise/app/services/captain/llm/base_open_ai_service.rb b/enterprise/app/services/captain/llm/base_open_ai_service.rb index 7b542c0f2..802c52d96 100644 --- a/enterprise/app/services/captain/llm/base_open_ai_service.rb +++ b/enterprise/app/services/captain/llm/base_open_ai_service.rb @@ -1,8 +1,10 @@ class Captain::Llm::BaseOpenAiService DEFAULT_MODEL = 'gpt-4o-mini'.freeze + DEFAULT_BASE_URL = 'https://api.openai.com'.freeze def initialize @client = OpenAI::Client.new( + uri_base: InstallationConfig.find_by!(name: 'CAPTAIN_OPEN_AI_BASE_URL').value || OpenAI::Client::DEFAULT_BASE_URL, access_token: InstallationConfig.find_by!(name: 'CAPTAIN_OPEN_AI_API_KEY').value, log_errors: Rails.env.development? )