Class: LittleGhost::Model
- Inherits:
-
Object
- Object
- LittleGhost::Model
- Includes:
- ModelInterface
- Defined in:
- lib/little_ghost/model.rb
Overview
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.
Instance Attribute Summary collapse
-
#details ⇒ Object
readonly
Provider object, canonical target, default settings, normalized model details, and logical application role.
-
#provider ⇒ Object
readonly
Provider object, canonical target, default settings, normalized model details, and logical application role.
-
#role ⇒ Object
readonly
Provider object, canonical target, default settings, normalized model details, and logical application role.
-
#settings ⇒ Object
readonly
Provider object, canonical target, default settings, normalized model details, and logical application role.
-
#target ⇒ Object
readonly
Provider object, canonical target, default settings, normalized model details, and logical application role.
Instance Method Summary collapse
-
#capabilities ⇒ Object
Uses advertised provider capabilities.
-
#initialize(provider:, target:, settings: {}, details: nil, role: nil) ⇒ Model
constructor
Connects a provider adapter to its canonical
target, profilesettings, optional modeldetails, and logicalrole. -
#model_id ⇒ Object
Provider-owned identifier from the canonical target.
-
#stream(request, &block) ⇒ Object
Streams
requestthrough the configured provider.
Constructor Details
#initialize(provider:, target:, settings: {}, details: nil, role: nil) ⇒ Model
Connects a provider adapter to its canonical target, profile settings,
optional model details, and logical role.
34 35 36 37 38 39 40 41 42 |
# 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 |
Instance Attribute Details
#details ⇒ Object (readonly)
Provider object, canonical target, default settings, normalized model details, and logical application role.
30 31 32 |
# File 'lib/little_ghost/model.rb', line 30 def details @details end |
#provider ⇒ Object (readonly)
Provider object, canonical target, default settings, normalized model details, and logical application role.
30 31 32 |
# File 'lib/little_ghost/model.rb', line 30 def provider @provider end |
#role ⇒ Object (readonly)
Provider object, canonical target, default settings, normalized model details, and logical application role.
30 31 32 |
# File 'lib/little_ghost/model.rb', line 30 def role @role end |
#settings ⇒ Object (readonly)
Provider object, canonical target, default settings, normalized model details, and logical application role.
30 31 32 |
# File 'lib/little_ghost/model.rb', line 30 def settings @settings end |
#target ⇒ Object (readonly)
Provider object, canonical target, default settings, normalized model details, and logical application role.
30 31 32 |
# File 'lib/little_ghost/model.rb', line 30 def target @target end |
Instance Method Details
#capabilities ⇒ Object
Uses advertised provider capabilities.
80 81 82 |
# File 'lib/little_ghost/model.rb', line 80 def capabilities @capabilities ||= provider.capabilities(metadata: details.attributes) end |
#model_id ⇒ Object
Provider-owned identifier from the canonical target.
45 |
# File 'lib/little_ghost/model.rb', line 45 def model_id = target.model_id |
#stream(request, &block) ⇒ Object
Streams request through the configured provider.
Profile settings are defaults; settings on request take precedence.
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# 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., 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 |