Module: Legion::Extensions::Llm::AzureFoundry::ProviderDispatchMethods

Included in:
Provider
Defined in:
lib/legion/extensions/llm/azure_foundry/provider.rb

Overview

Public dispatch methods — chat, stream, embed, count_tokens.

Instance Method Summary collapse

Instance Method Details

#chat(messages:, model:, **options) ⇒ Object



102
103
104
105
106
107
# File 'lib/legion/extensions/llm/azure_foundry/provider.rb', line 102

def chat(messages:, model:, **options)
  log.info { "chat request model=#{model} messages=#{messages.size}" }
  complete(messages, tools: options.fetch(:tools, {}), temperature: options[:temperature],
                     model: model_info(model, max_tokens: options[:max_tokens]),
                     params: options.fetch(:params, {}), tool_prefs: options[:tool_prefs])
end

#count_tokens(messages:, model:) ⇒ Object



127
128
129
130
131
132
133
# File 'lib/legion/extensions/llm/azure_foundry/provider.rb', line 127

def count_tokens(messages:, model:, **)
  {
    provider_family: :azure_foundry, model: model_id(model), supported: false,
    reason: 'Azure AI Foundry REST docs do not define a portable token-counting endpoint.',
    estimated_input_characters: messages.sum { |m| m.content.to_s.length }
  }
end

#embed(text:, model:, **options) ⇒ Object



116
117
118
119
120
121
122
123
124
125
# File 'lib/legion/extensions/llm/azure_foundry/provider.rb', line 116

def embed(text:, model:, **options)
  log.info { "embed request model=#{model}" }
  payload = Utils.deep_merge(
    render_embedding_payload(text, model: model_id(model), dimensions: options[:dimensions]),
    options.fetch(:params, {})
  )
  payload[:input_type] = options[:input_type] if options[:input_type]
  response = connection.post(embedding_url(model:), payload)
  parse_embedding_response(response, model: model_id(model), text:)
end

#stream(messages:, model:, **options) ⇒ Object



109
110
111
112
113
114
# File 'lib/legion/extensions/llm/azure_foundry/provider.rb', line 109

def stream(messages:, model:, **options, &)
  log.info { "stream request model=#{model} messages=#{messages.size}" }
  complete(messages, tools: options.fetch(:tools, {}), temperature: options[:temperature],
                     model: model_info(model, max_tokens: options[:max_tokens]),
                     params: options.fetch(:params, {}), tool_prefs: options[:tool_prefs], &)
end