module RubyLLM::Providers::Gemini::Chat
Public Instance Methods
# File lib/ruby_llm/providers/gemini/chat.rb, line 42 def build_thinking_config(_model, thinking) config = { includeThoughts: true } config[:thinkingLevel] = resolve_effort_level(thinking) if thinking&.effort config[:thinkingBudget] = resolve_budget(thinking) if thinking&.budget config end
rubocop:enable Metrics/ParameterLists,Lint/UnusedMethodArgument
Source
# File lib/ruby_llm/providers/gemini/chat.rb, line 13 def completion_url "models/#{@model}:generateContent" end
# File lib/ruby_llm/providers/gemini/chat.rb, line 18 def render_payload(messages, tools:, temperature:, model:, stream: false, schema: nil, thinking: nil, tool_prefs: nil) tool_prefs ||= {} @model = model.id payload = { contents: format_messages(messages), generationConfig: {} } payload[:generationConfig][:temperature] = temperature unless temperature.nil? payload[:generationConfig].merge!(structured_output_config(schema, model)) if schema payload[:generationConfig][:thinkingConfig] = build_thinking_config(model, thinking) if thinking&.enabled? if tools.any? payload[:tools] = format_tools(tools) # Gemini doesn't support controlling parallel tool calls payload[:toolConfig] = build_tool_config(tool_prefs[:choice]) unless tool_prefs[:choice].nil? end payload end
rubocop:disable Metrics/ParameterLists,Lint/UnusedMethodArgument
Source
# File lib/ruby_llm/providers/gemini/chat.rb, line 55 def resolve_budget(thinking) budget = thinking.respond_to?(:budget) ? thinking.budget : thinking budget.is_a?(Integer) ? budget : nil end
# File lib/ruby_llm/providers/gemini/chat.rb, line 51 def resolve_effort_level(thinking) thinking.respond_to?(:effort) ? thinking.effort : thinking end