Skip to content

Commit 934f660

Browse files
committed
Add embedding support for Gemini provider
Enables text embedding functionality using Gemini's OpenAI-compatible embeddings endpoint. Implementation: - Add embed_request_type class method returning OpenAI::Embedding::RequestType (Gemini uses same request format as OpenAI) - Add api_embed_execute with connection error handling and instrumentation - Add Gemini::Embedding::RequestType alias in _types.rb Test coverage (1 test, 1 assertion): - embed_request_type returns OpenAI::Embedding::RequestType instance
1 parent aaafbdf commit 934f660

File tree

3 files changed

+30
-0
lines changed

3 files changed

+30
-0
lines changed

lib/active_agent/providers/gemini/_types.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,18 @@
22

33
require_relative "options"
44
require_relative "../open_ai/chat/_types"
5+
require_relative "../open_ai/embedding/_types"
56

67
module ActiveAgent
78
module Providers
89
module Gemini
910
# Reuse OpenAI Chat request type (same API format)
1011
RequestType = OpenAI::Chat::RequestType
12+
13+
# Reuse OpenAI Embedding types (same API format)
14+
module Embedding
15+
RequestType = OpenAI::Embedding::RequestType
16+
end
1117
end
1218
end
1319
end

lib/active_agent/providers/gemini_provider.rb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ def self.prompt_request_type
3030
namespace::RequestType.new
3131
end
3232

33+
# @return [ActiveModel::Type::Value]
34+
def self.embed_request_type
35+
namespace::Embedding::RequestType.new
36+
end
37+
3338
protected
3439

3540
# Executes chat completion request with Gemini-specific error handling.
@@ -46,6 +51,18 @@ def api_prompt_execute(parameters)
4651
raise exception
4752
end
4853

54+
# Executes embedding request with Gemini-specific error handling.
55+
#
56+
# @param parameters [Hash]
57+
# @return [Hash] symbolized API response
58+
# @raise [OpenAI::Errors::APIConnectionError] when Gemini API unreachable
59+
def api_embed_execute(parameters)
60+
client.embeddings.create(**parameters).as_json.deep_symbolize_keys
61+
rescue ::OpenAI::Errors::APIConnectionError => exception
62+
log_connection_error(exception)
63+
raise exception
64+
end
65+
4966
# Merges streaming delta into the message with role cleanup.
5067
#
5168
# Overrides parent to handle Gemini's role copying behavior which duplicates

test/providers/gemini/gemini_provider_test.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,13 @@ class GeminiProviderTest < ActiveSupport::TestCase
3838
assert_instance_of ActiveAgent::Providers::OpenAI::Chat::RequestType, request_type
3939
end
4040

41+
test "embed_request_type returns OpenAI::Embedding::RequestType" do
42+
request_type = ActiveAgent::Providers::GeminiProvider.embed_request_type
43+
44+
# Gemini::Embedding::RequestType is aliased to OpenAI::Embedding::RequestType
45+
assert_instance_of ActiveAgent::Providers::OpenAI::Embedding::RequestType, request_type
46+
end
47+
4148
test "initializes provider with valid configuration" do
4249
provider = ActiveAgent::Providers::GeminiProvider.new(@valid_config)
4350

0 commit comments

Comments
 (0)