diff --git a/enterprise/app/services/captain/llm/embedding_service.rb b/enterprise/app/services/captain/llm/embedding_service.rb index 420ddb027..b20a0916d 100644 --- a/enterprise/app/services/captain/llm/embedding_service.rb +++ b/enterprise/app/services/captain/llm/embedding_service.rb @@ -40,11 +40,22 @@ class Captain::Llm::EmbeddingService api_base = settings[:api_base].present? ? "#{settings[:api_base]}/v1" : nil embed_options = embed_extra_options + # Quando há config dedicada de embedding (CAPTAIN_EMBEDDING_API_KEY etc), + # forçamos provider :openai pra que o RubyLLM trate como OpenAI-compatible + # mesmo com modelos cujo nome auto-detectaria outro provider (ex: + # `gemini-embedding-001` apontado pro endpoint Gemini OpenAI-compat). + embed_options[:provider] = :openai if dedicated_embedding_config? + embed_options[:assume_model_exists] = true if dedicated_embedding_config? + Llm::Config.with_api_key(settings[:api_key], api_base: api_base) do |ctx| ctx.embed(content, model: model, **embed_options).vectors end end + def dedicated_embedding_config? + installation_config_value('CAPTAIN_EMBEDDING_API_KEY').present? + end + def embedding_settings custom_key = installation_config_value('CAPTAIN_EMBEDDING_API_KEY') return Captain::Llm::ProviderConfig.legacy_openai_settings if custom_key.blank?