Class: OmniAI::Google::Embed
- Inherits:
-
Embed
- Object
- Embed
- OmniAI::Google::Embed
- Defined in:
- lib/omniai/google/embed.rb
Overview
A Google embed implementation.
Usage:
input = "..."
response = OmniAI::Google::Embed.process!(input, client: client)
response.embedding [0.0, ...]
Defined Under Namespace
Modules: Model
Constant Summary collapse
- DEFAULT_MODEL =
Model::EMBEDDING
- BATCH_EMBED_CONTENTS_DESERIALIZER =
proc do |data, *| data["embeddings"].map { || ["values"] } end
- PREDICT_EMBEDDINGS_DESERIALIZER =
proc do |data, *| data["predictions"].map { |prediction| prediction["embeddings"]["values"] } end
- PREDICT_USAGE_DESERIALIZER =
proc do |data, *| tokens = data["predictions"].sum { |prediction| prediction["embeddings"]["statistics"]["token_count"] } Usage.new(prompt_tokens: tokens, total_tokens: tokens) end
- EMBED_CONTENT_DESERIALIZER =
proc do |data, *| [data["embedding"]["values"]] end
- USAGE_METADATA_DESERIALIZER =
Always returns a Usage, never nil — callers rely on
response.usagebeing present here without a nil check.This deliberately differs from the chat-side
UsageSerializer, which returns nil when the payload carries no token counts at all (a truncated Gemini stream still sends ausageMetadatacontaining onlytrafficType). Embeddings have no streaming path and so no equivalent partial payload, so there is nothing to distinguish. Do not make this nil-safe "for consistency" with chat: it would turn an unguardedresponse.usage.total_tokensin a consumer into a NoMethodError. proc do |data, *| prompt_tokens = data.dig("usageMetadata", "promptTokenCount") total_tokens = data.dig("usageMetadata", "totalTokenCount") Usage.new(prompt_tokens:, total_tokens:) end
- BATCH_EMBED_CONTENTS_CONTEXT =
Context.build do |context| context.deserializers[:embeddings] = BATCH_EMBED_CONTENTS_DESERIALIZER context.deserializers[:usage] = USAGE_METADATA_DESERIALIZER end
- PREDICT_CONTEXT =
Context.build do |context| context.deserializers[:embeddings] = PREDICT_EMBEDDINGS_DESERIALIZER context.deserializers[:usage] = PREDICT_USAGE_DESERIALIZER end
- EMBED_CONTENT_CONTEXT =
Context.build do |context| context.deserializers[:embeddings] = EMBED_CONTENT_DESERIALIZER context.deserializers[:usage] = USAGE_METADATA_DESERIALIZER end