Class: RubyLLM::Protocols::OpenRouter::Responses
- Inherits:
-
Protocols::Responses
- Object
- Protocols::Responses
- RubyLLM::Protocols::OpenRouter::Responses
- Defined in:
- lib/ruby_llm/protocols/openrouter/responses.rb
Overview
OpenRouter's opt-in Responses endpoint and hosted tools.
Constant Summary collapse
- SERVER_TOOL_ALIASES =
%i[web_search web_fetch datetime image_generation apply_patch shell].to_h do |name| [name, { tool: { type: "openrouter:#{name}" } }] end.merge( url_context: { tool: { type: 'openrouter:web_fetch' } }, code_execution: { tool: { type: 'openrouter:shell' } }, mcp: Protocols::Responses::SERVER_TOOL_ALIASES.fetch(:mcp) ).freeze
Instance Method Summary collapse
- #build_chunk(data) ⇒ Object
- #merge_server_tool_entries(payload, entries) ⇒ Object
- #parse_usage(usage) ⇒ Object
- #reported_cost(usage) ⇒ Object
- #server_tool_aliases ⇒ Object
Instance Method Details
#build_chunk(data) ⇒ Object
44 45 46 47 48 49 |
# File 'lib/ruby_llm/protocols/openrouter/responses.rb', line 44 def build_chunk(data) return super unless data['type'] == 'response.mcp_call_arguments.done' chunk server_tool_calls: [ServerToolCall.new(type: 'mcp_call', id: data['item_id'], input: data['arguments'], raw: data)] end |
#merge_server_tool_entries(payload, entries) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/ruby_llm/protocols/openrouter/responses.rb', line 20 def merge_server_tool_entries(payload, entries) entries.each do |entry| tool = Support::Utils.deep_symbolize_keys(entry) next unless tool[:type] == 'mcp' next if tool[:require_approval].to_s == 'never' raise ArgumentError, "OpenRouter MCP requires explicit require_approval: 'never'; approval events are not returned" end super end |
#parse_usage(usage) ⇒ Object
32 33 34 |
# File 'lib/ruby_llm/protocols/openrouter/responses.rb', line 32 def parse_usage(usage) super.merge(reported_cost: reported_cost(usage), server_tool_use: server_tool_use(usage)) end |
#reported_cost(usage) ⇒ Object
36 37 38 39 40 41 42 |
# File 'lib/ruby_llm/protocols/openrouter/responses.rb', line 36 def reported_cost(usage) cost = usage['cost'] return nil unless cost cost += usage.dig('cost_details', 'upstream_inference_cost').to_f if usage['is_byok'] cost end |
#server_tool_aliases ⇒ Object
16 17 18 |
# File 'lib/ruby_llm/protocols/openrouter/responses.rb', line 16 def server_tool_aliases SERVER_TOOL_ALIASES end |