Skip to content
This repository was archived by the owner on Jul 22, 2025. It is now read-only.

Commit d78379a

Browse files
committed
FIX: Gemini inference client was missing #instance
1 parent 700e9de commit d78379a

File tree

4 files changed

+34
-2
lines changed

4 files changed

+34
-2
lines changed

lib/embeddings/vector_representations/gemini.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ def pg_index_type
4343
end
4444

4545
def vector_from(text, asymetric: false)
46-
inference_client.perform!(text).dig(:embedding, :values)
46+
inference_client.perform!(text)
4747
end
4848

4949
# There is no public tokenizer for Gemini, and from the ones we already ship in the plugin

lib/inference/gemini_embeddings.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
module ::DiscourseAi
44
module Inference
55
class GeminiEmbeddings
6+
def self.instance
7+
new(SiteSetting.ai_gemini_api_key)
8+
end
9+
610
def initialize(api_key, referer = Discourse.base_url)
711
@api_key = api_key
812
@referer = referer
@@ -21,7 +25,7 @@ def perform!(content)
2125

2226
case response.status
2327
when 200
24-
JSON.parse(response.body, symbolize_names: true)
28+
JSON.parse(response.body, symbolize_names: true).dig(:embedding, :values)
2529
when 429
2630
# TODO add a AdminDashboard Problem?
2731
else
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# frozen_string_literal: true
2+
3+
require_relative "vector_rep_shared_examples"
4+
5+
RSpec.describe DiscourseAi::Embeddings::VectorRepresentations::Gemini do
6+
subject(:vector_rep) { described_class.new(truncation) }
7+
8+
let(:truncation) { DiscourseAi::Embeddings::Strategies::Truncation.new }
9+
let!(:api_key) { "test-123" }
10+
11+
before { SiteSetting.ai_gemini_api_key = api_key }
12+
13+
def stub_vector_mapping(text, expected_embedding)
14+
EmbeddingsGenerationStubs.gemini_service(api_key, text, expected_embedding)
15+
end
16+
17+
it_behaves_like "generates and store embedding using with vector representation"
18+
end

spec/support/embeddings_generation_stubs.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,15 @@ def openai_service(model, string, embedding, extra_args: {})
1919
.with(body: JSON.dump({ model: model, input: string }.merge(extra_args)))
2020
.to_return(status: 200, body: JSON.dump({ data: [{ embedding: embedding }] }))
2121
end
22+
23+
def gemini_service(api_key, string, embedding)
24+
WebMock
25+
.stub_request(
26+
:post,
27+
"https://generativelanguage.googleapis.com/v1beta/models/embedding-001:embedContent\?key\=#{api_key}",
28+
)
29+
.with(body: JSON.dump({ content: { parts: [{ text: string }] } }))
30+
.to_return(status: 200, body: JSON.dump({ embedding: { values: embedding } }))
31+
end
2232
end
2333
end

0 commit comments

Comments
 (0)