class LittleGhost::Model
Model is the resolved connection between an agent selection and a provider. It keeps provider behavior behind one executable interface whether an agent selected a role, canonical target, or inline configuration.
It merges profile settings into every ModelRequest, validates attachment modalities declared in metadata, lets providers prepare capability-sensitive requests, and delegates the normalized stream to the provider.
Attributes
Provider object, canonical target, default settings, normalized model details, and logical application role.
Provider object, canonical target, default settings, normalized model details, and logical application role.
Provider object, canonical target, default settings, normalized model details, and logical application role.
Provider object, canonical target, default settings, normalized model details, and logical application role.
Provider object, canonical target, default settings, normalized model details, and logical application role.
Public Class Methods
# File lib/little_ghost/model.rb, line 34 def initialize(provider:, target:, settings: {}, details: nil, role: nil) raise ArgumentError, "provider must be a LittleGhost::Providers::Base" unless provider.is_a?(Providers::Base) @provider = provider @target = Models::Target.parse(target) @settings = settings.to_h.transform_keys(&:to_sym).freeze @role = role&.to_s @details = details || Models::Details.new(target: @target) end
Connects a provider adapter to its canonical target, profile settings, optional model details, and logical role.
Public Instance Methods
Source
# File lib/little_ghost/model.rb, line 100 def capabilities @capabilities ||= provider.capabilities(metadata: details.attributes) end
Uses advertised provider capabilities.
Source
# File lib/little_ghost/model.rb, line 83 def embed(request) configured = Embeddings::Request.new( inputs: request.inputs, settings: settings.merge(request.settings), limits: request.limits, cancellation_token: request.cancellation_token, deadline: request.deadline ) response = provider.embed(configured) unless response.is_a?(Embeddings::Response) && response.vectors.length == configured.inputs.length raise ProtocolError, "Embedding provider returned an unexpected vector count" end response end
Applies profile settings and executes an Embeddings::Request.
Returns an Embeddings::Response with one vector per input. A provider that returns another shape raises ProtocolError.
Source
# File lib/little_ghost/model.rb, line 45 def model_id = target.model_id
Provider-owned identifier from the canonical target.
Source
# File lib/little_ghost/model.rb, line 50 def stream(request, &block) validate_input_modalities!(request) configured_settings = settings.merge(request.settings) configured_max_tokens = if request.settings.key?(:max_tokens) request.settings[:max_tokens] elsif request.settings.key?("max_tokens") request.settings["max_tokens"] else settings[:max_tokens] || settings["max_tokens"] end if configured_max_tokens && details.max_output_tokens configured_settings.delete(:max_tokens) configured_settings.delete("max_tokens") configured_settings[:max_tokens] = [configured_max_tokens, details.max_output_tokens].min end configured_request = ModelRequest.new( messages: request.messages, tools: request.tools, settings: configured_settings, output_schema: request.output_schema, tool_choice: request.tool_choice, required_capabilities: request.required_capabilities, cancellation_token: request.cancellation_token, deadline: request.deadline ) configured_request = provider.prepare_request(configured_request, capabilities:) provider.stream(configured_request, &block) end
Streams request through the configured provider.
Profile settings are defaults; settings on request take precedence.