From f205774444e9f242d26efaac548e852568d30e5c Mon Sep 17 00:00:00 2001 From: hschne Date: Mon, 22 Jun 2026 11:23:39 +0200 Subject: [PATCH] Add bedrock model ID fallback --- lib/ruby_llm/protocols/converse/chat.rb | 2 +- spec/ruby_llm/protocols/converse/chat_spec.rb | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/ruby_llm/protocols/converse/chat.rb b/lib/ruby_llm/protocols/converse/chat.rb index 38a9c9b5c..71820188a 100644 --- a/lib/ruby_llm/protocols/converse/chat.rb +++ b/lib/ruby_llm/protocols/converse/chat.rb @@ -81,7 +81,7 @@ def parse_completion_body(data, raw:) cache_write_tokens: usage['cacheWriteInputTokens'], thinking_tokens: reasoning_tokens(usage), finish_reason: data['stopReason'], - model: data['modelId'], + model: data['modelId'] || @model&.id, raw: raw ) end diff --git a/spec/ruby_llm/protocols/converse/chat_spec.rb b/spec/ruby_llm/protocols/converse/chat_spec.rb index 555b7c052..c17c04951 100644 --- a/spec/ruby_llm/protocols/converse/chat_spec.rb +++ b/spec/ruby_llm/protocols/converse/chat_spec.rb @@ -73,6 +73,25 @@ expect(message.finish_reason).to eq('guardrail_intervened') end + it 'falls back to the request model when Bedrock omits modelId' do + response_body = { + 'output' => { + 'message' => { + 'content' => [{ 'text' => 'Hi!' }] + } + }, + 'usage' => {} + } + + provider = double(config: RubyLLM.config, connection: nil) + model = instance_double(RubyLLM::Model, id: 'openai.gpt-oss-120b-1:0') + protocol = RubyLLM::Protocols::Converse.new(provider, model) + response = instance_double(Faraday::Response, body: response_body) + message = protocol.send(:parse_completion_body, response_body, raw: response) + + expect(message.model).to eq('openai.gpt-oss-120b-1:0') + end + it 'extracts thinking tokens from top-level reasoningTokens' do response_body = { 'output' => {