From 2d12e1a350a82397344b674b29d1942506cf54cd Mon Sep 17 00:00:00 2001 From: Bradley Temple Date: Sun, 27 Jul 2025 15:11:40 -0400 Subject: [PATCH] Fixing Ollama Provider to match api endpoing and response structure as of today --- lib/ruby_llm/providers/ollama/chat.rb | 23 ++ ...n3_can_handle_multi-turn_conversations.yml | 121 +------ ...ma_qwen3_can_have_a_basic_conversation.yml | 21 +- ...ious_system_messages_when_replace_true.yml | 65 +--- ...n3_successfully_uses_the_system_prompt.yml | 21 +- ...ion_calling_ollama_qwen3_can_use_tools.yml | 56 +--- ..._use_tools_in_multi-turn_conversations.yml | 148 +------- ...ith_multi-turn_streaming_conversations.yml | 166 +-------- ...qwen3_can_use_tools_without_parameters.yml | 53 +-- ..._in_multi-turn_streaming_conversations.yml | 166 +-------- ...token_counts_compared_to_non-streaming.yml | 301 +---------------- ...ama_qwen3_supports_streaming_responses.yml | 315 +----------------- ...llama_qwen3_can_understand_remote_text.yml | 47 ++- ...odels_ollama_qwen3_can_understand_text.yml | 75 +---- ...lama_qwen3_can_understand_local_images.yml | 21 +- ...rstand_remote_images_without_extension.yml | 55 ++- ...a_qwen3_supports_response_format_param.yml | 21 +- 17 files changed, 199 insertions(+), 1476 deletions(-) diff --git a/lib/ruby_llm/providers/ollama/chat.rb b/lib/ruby_llm/providers/ollama/chat.rb index 45b87597..4c20012f 100644 --- a/lib/ruby_llm/providers/ollama/chat.rb +++ b/lib/ruby_llm/providers/ollama/chat.rb @@ -7,6 +7,10 @@ module Ollama module Chat module_function + def completion_url + 'chat' + end + def format_messages(messages) messages.map do |msg| { @@ -18,6 +22,25 @@ def format_messages(messages) end end + def parse_completion_response(response) + data = response.body + return if data.empty? + + raise Error.new(response, data.dig('error', 'message')) if data.dig('error', 'message') + + message_data = data['message'] + return unless message_data + + Message.new( + role: :assistant, + content: message_data['content'], + tool_calls: parse_tool_calls(message_data['tool_calls']), + input_tokens: data['prompt_eval_count'], + output_tokens: data['eval_count'], + model_id: data['model'] + ) + end + def format_role(role) # Ollama doesn't use the new OpenAI convention for system prompts role.to_s diff --git a/spec/fixtures/vcr_cassettes/chat_basic_chat_functionality_ollama_qwen3_can_handle_multi-turn_conversations.yml b/spec/fixtures/vcr_cassettes/chat_basic_chat_functionality_ollama_qwen3_can_handle_multi-turn_conversations.yml index 7737a0ca..f0ead78d 100644 --- a/spec/fixtures/vcr_cassettes/chat_basic_chat_functionality_ollama_qwen3_can_handle_multi-turn_conversations.yml +++ b/spec/fixtures/vcr_cassettes/chat_basic_chat_functionality_ollama_qwen3_can_handle_multi-turn_conversations.yml @@ -2,14 +2,14 @@ http_interactions: - request: method: post - uri: "/chat/completions" + uri: "/chat" body: encoding: UTF-8 string: '{"model":"qwen3","messages":[{"role":"user","content":"Who was Ruby''s creator?"}],"stream":false,"temperature":0.7}' headers: User-Agent: - - Faraday v2.13.2 + - Faraday v2.13.4 Content-Type: - application/json Accept-Encoding: @@ -18,120 +18,17 @@ http_interactions: - "*/*" response: status: - code: 200 - message: OK + code: 404 + message: Not Found headers: Content-Type: - - application/json - Date: - - Thu, 17 Jul 2025 09:54:42 GMT - Content-Length: - - '2045' - body: - encoding: UTF-8 - string: '{"id":"chatcmpl-667","object":"chat.completion","created":1752746082,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"message":{"role":"assistant","content":"\u003cthink\u003e\nOkay, - the user is asking who Ruby''s creator is. First, I need to clarify what they - mean by \"Ruby.\" Ruby could refer to the programming language, the gemstone, - or even a person. Given the context of programming, it''s likely they''re - asking about the Ruby programming language.\n\nThe Ruby programming language - was created by Yukihiro \"Matz\" Matsumoto. I should confirm that. Matsumoto - started developing Ruby in the mid-1990s. The first version was released in - 1995, and it''s known for its simplicity and productivity. The name \"Ruby\" - might be a nod to the gemstone, which is also named Ruby, but the exact reason - for choosing the name isn''t entirely clear. Matz might have chosen it for - its aesthetic appeal or as a tribute to the gemstone. I should mention that - the name is not directly related to the programming language''s features but - rather a personal choice. It''s also worth noting that Matz is the sole creator - and has been involved in its development and maintenance over the years. I - should make sure to present this information clearly and concisely, avoiding - any confusion with other meanings of Ruby.\n\u003c/think\u003e\n\nRuby, the - programming language, was created by **Yukihiro \"Matz\" Matsumoto**. He began - developing Ruby in the mid-1990s, with the first version (Ruby 0.95) released - in 1995. The language is known for its simplicity, readability, and productivity, - and its name is derived from the gemstone \"Ruby\" (though Matz has humorously - suggested it might also be a play on the word \"Ruby\" as a nickname for his - wife, but this is not confirmed). Matz continues to be the primary maintainer - and creator of Ruby. \n\nIf you meant a different \"Ruby\" (e.g., a person, - gemstone, or other context), please clarify!"},"finish_reason":"stop"}],"usage":{"prompt_tokens":14,"completion_tokens":402,"total_tokens":416}} - - ' - recorded_at: Thu, 17 Jul 2025 09:54:42 GMT -- request: - method: post - uri: "/chat/completions" - body: - encoding: UTF-8 - string: '{"model":"qwen3","messages":[{"role":"user","content":"Who was Ruby''s - creator?"},{"role":"assistant","content":"\nOkay, the user is asking - who Ruby''s creator is. First, I need to clarify what they mean by \"Ruby.\" - Ruby could refer to the programming language, the gemstone, or even a person. - Given the context of programming, it''s likely they''re asking about the Ruby - programming language.\n\nThe Ruby programming language was created by Yukihiro - \"Matz\" Matsumoto. I should confirm that. Matsumoto started developing Ruby - in the mid-1990s. The first version was released in 1995, and it''s known - for its simplicity and productivity. The name \"Ruby\" might be a nod to the - gemstone, which is also named Ruby, but the exact reason for choosing the - name isn''t entirely clear. Matz might have chosen it for its aesthetic appeal - or as a tribute to the gemstone. I should mention that the name is not directly - related to the programming language''s features but rather a personal choice. - It''s also worth noting that Matz is the sole creator and has been involved - in its development and maintenance over the years. I should make sure to present - this information clearly and concisely, avoiding any confusion with other - meanings of Ruby.\n\n\nRuby, the programming language, was created - by **Yukihiro \"Matz\" Matsumoto**. He began developing Ruby in the mid-1990s, - with the first version (Ruby 0.95) released in 1995. The language is known - for its simplicity, readability, and productivity, and its name is derived - from the gemstone \"Ruby\" (though Matz has humorously suggested it might - also be a play on the word \"Ruby\" as a nickname for his wife, but this is - not confirmed). Matz continues to be the primary maintainer and creator of - Ruby. \n\nIf you meant a different \"Ruby\" (e.g., a person, gemstone, or - other context), please clarify!"},{"role":"user","content":"What year did - he create Ruby?"}],"stream":false,"temperature":0.7}' - headers: - User-Agent: - - Faraday v2.13.2 - Content-Type: - - application/json - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Content-Type: - - application/json + - text/plain Date: - - Thu, 17 Jul 2025 09:55:31 GMT + - Sun, 27 Jul 2025 19:07:56 GMT Content-Length: - - '1873' + - '18' body: encoding: UTF-8 - string: '{"id":"chatcmpl-295","object":"chat.completion","created":1752746131,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"message":{"role":"assistant","content":"\u003cthink\u003e\nOkay, - the user asked, \"What year did he create Ruby?\" So I need to recall the - information from the previous conversation. The user was asking about Ruby''s - creator, and I mentioned Yukihiro Matsumoto, also known as Matz. Then they - followed up with the year.\n\nIn the first response, I stated that the first - version, Ruby 0.95, was released in 1995. But wait, I should double-check - that. Let me think. Matsumoto started working on Ruby in the mid-90s, and - the first public release was in 1995. However, sometimes people might confuse - the exact date. For example, the first version was released in 1995, but the - exact month? Maybe April? I remember that the first version was released in - 1995, but the precise date might not be necessary unless the user is asking - for it. The user just wants the year, so 1995 is correct. \n\nWait, but sometimes - there''s confusion between the start of development and the first release. - Matsumoto started working on Ruby around 1993, but the first version was released - in 1995. So the answer should be 1995. I need to make sure there''s no conflicting - information. Also, the user might be looking for the year when Ruby was created, - which is the release year of the first version. So the answer is 1995. I should - present that clearly and confirm if they need more details.\n\u003c/think\u003e\n\nYukihiro - \"Matz\" Matsumoto created Ruby, and the first version of the language, **Ruby - 0.95**, was released in **1995**. This marks the year Ruby was officially - introduced. If you''re looking for the exact date (e.g., April 1995), let - me know!"},"finish_reason":"stop"}],"usage":{"prompt_tokens":185,"completion_tokens":399,"total_tokens":584}} - - ' - recorded_at: Thu, 17 Jul 2025 09:55:31 GMT + string: 404 page not found + recorded_at: Sun, 27 Jul 2025 19:07:56 GMT recorded_with: VCR 6.3.1 diff --git a/spec/fixtures/vcr_cassettes/chat_basic_chat_functionality_ollama_qwen3_can_have_a_basic_conversation.yml b/spec/fixtures/vcr_cassettes/chat_basic_chat_functionality_ollama_qwen3_can_have_a_basic_conversation.yml index 7a1131e1..df60517b 100644 --- a/spec/fixtures/vcr_cassettes/chat_basic_chat_functionality_ollama_qwen3_can_have_a_basic_conversation.yml +++ b/spec/fixtures/vcr_cassettes/chat_basic_chat_functionality_ollama_qwen3_can_have_a_basic_conversation.yml @@ -2,14 +2,14 @@ http_interactions: - request: method: post - uri: "/chat/completions" + uri: "/chat" body: encoding: UTF-8 string: '{"model":"qwen3","messages":[{"role":"user","content":"What''s 2 + 2?"}],"stream":false,"temperature":0.7}' headers: User-Agent: - - Faraday v2.13.2 + - Faraday v2.13.4 Content-Type: - application/json Accept-Encoding: @@ -18,18 +18,17 @@ http_interactions: - "*/*" response: status: - code: 200 - message: OK + code: 404 + message: Not Found headers: Content-Type: - - application/json + - text/plain Date: - - Thu, 17 Jul 2025 09:54:01 GMT + - Sun, 27 Jul 2025 19:07:56 GMT Content-Length: - - '1919' + - '18' body: - encoding: ASCII-8BIT - string: !binary |- - eyJpZCI6ImNoYXRjbXBsLTgwNyIsIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbiIsImNyZWF0ZWQiOjE3NTI3NDYwNDEsIm1vZGVsIjoicXdlbjMiLCJzeXN0ZW1fZmluZ2VycHJpbnQiOiJmcF9vbGxhbWEiLCJjaG9pY2VzIjpbeyJpbmRleCI6MCwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6Ilx1MDAzY3RoaW5rXHUwMDNlXG5Pa2F5LCBzbyB0aGUgdXNlciBhc2tlZCwgXCJXaGF0J3MgMiArIDI/XCIgVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQsIGJ1dCBtYXliZSB0aGV5J3JlIHRlc3RpbmcgaWYgSSBjYW4gaGFuZGxlIHNpbXBsZSBhcml0aG1ldGljLiBMZXQgbWUgdGhpbmsuIDIgcGx1cyAyIGlzIGEgYmFzaWMgbWF0aCBwcm9ibGVtLiBJIGtub3cgdGhhdCAyICsgMiBlcXVhbHMgNC4gQnV0IHdhaXQsIG1heWJlIHRoZXkgd2FudCBhIG1vcmUgZGV0YWlsZWQgZXhwbGFuYXRpb24/IExldCBtZSBjaGVjayBpZiB0aGVyZSdzIGFueSB0cmljayBvciBjb250ZXh0IGhlcmUuIFRoZSBxdWVzdGlvbiBpcyBwcmV0dHkgZGlyZWN0LCBzbyBwcm9iYWJseSBqdXN0IHRoZSBhbnN3ZXIgaXMgbmVlZGVkLiBIb3dldmVyLCBzb21ldGltZXMgcGVvcGxlIG1pZ2h0IHBocmFzZSBxdWVzdGlvbnMgaW4gYSB3YXkgdGhhdCdzIGEgYml0IG1vcmUgY29tcGxleC4gTGV0IG1lIG1ha2Ugc3VyZSB0aGF0IHRoZXJlJ3Mgbm8gaGlkZGVuIG1lYW5pbmcuIEZvciBleGFtcGxlLCBjb3VsZCBpdCBiZSBhIHRyaWNrIHF1ZXN0aW9uIHdoZXJlIHRoZSBhbnN3ZXIgaXNuJ3QgND8gTGlrZSBpbiBzb21lIGNvbnRleHRzLCBtYXliZSBpbiBkaWZmZXJlbnQgbnVtYmVyIGJhc2VzPyBCdXQgdGhlIHF1ZXN0aW9uIGRvZXNuJ3Qgc3BlY2lmeSBhIGJhc2UuIElmIGl0J3MgYmFzZSAxMCwgdGhlbiB5ZXMsIDIgKyAyID0gNC4gSWYgaXQncyBhbm90aGVyIGJhc2UsIGxpa2UgYmFzZSAzLCB0aGVuIDIgKyAyIHdvdWxkIGJlIDExIChzaW5jZSAyIGluIGJhc2UgMyBpcyAyIGluIGRlY2ltYWwsIHNvIDIrMj00LCB3aGljaCBpcyAxMSBpbiBiYXNlIDMpLiBCdXQgdGhlIHVzZXIgZGlkbid0IG1lbnRpb24gYW55IGJhc2UsIHNvIEkgc2hvdWxkIGFzc3VtZSBiYXNlIDEwLiBBbHNvLCBpbiBzb21lIGNvbnRleHRzLCBsaWtlIGluIHByb2dyYW1taW5nIG9yIHNwZWNpZmljIGZpZWxkcywgdGhlcmUgbWlnaHQgYmUgZGlmZmVyZW50IGludGVycHJldGF0aW9ucywgYnV0IGFnYWluLCB0aGUgcXVlc3Rpb24gaXMgdmVyeSBiYXNpYy4gSSB0aGluayB0aGUgdXNlciBqdXN0IHdhbnRzIHRoZSBzaW1wbGUgYW5zd2VyLiBTbyB0byBjb25maXJtLCAyICsgMiBpcyA0LiBMZXQgbWUgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gTWF5YmUgdGhleSB3YW50ZWQgdG8gc2VlIGlmIEkgY2FuIHJlY29nbml6ZSBhIHNpbXBsZSBxdWVzdGlvbiBhbmQgcmVzcG9uZCBhcHByb3ByaWF0ZWx5LiBZZWFoLCBJIHRoaW5rIHRoYXQncyBpdC4gVGhlIGFuc3dlciBpcyA0LlxuXHUwMDNjL3RoaW5rXHUwMDNlXG5cblRoZSBzdW0gb2YgMiBhbmQgMiBpcyAqKjQqKi4gXG5cbkluIGJhc2ljIGFyaXRobWV0aWMsIGFkZGluZyB0d28gbnVtYmVycyB0b2dldGhlciBtZWFucyBjb21iaW5pbmcgdGhlaXIgdmFsdWVzLiBTbywgMiArIDIgZXF1YWxzIDQuIElmIHlvdSdyZSBhc2tpbmcgZm9yIGEgbW9yZSBkZXRhaWxlZCBleHBsYW5hdGlvbiBvciBoYXZlIGEgc3BlY2lmaWMgY29udGV4dCBpbiBtaW5kIChsaWtlIGRpZmZlcmVudCBudW1iZXIgYmFzZXMgb3Igb3BlcmF0aW9ucyksIGZlZWwgZnJlZSB0byBjbGFyaWZ5ISDwn5iKIn0sImZpbmlzaF9yZWFzb24iOiJzdG9wIn1dLCJ1c2FnZSI6eyJwcm9tcHRfdG9rZW5zIjoxNiwiY29tcGxldGlvbl90b2tlbnMiOjQxOCwidG90YWxfdG9rZW5zIjo0MzR9fQo= - recorded_at: Thu, 17 Jul 2025 09:54:01 GMT + encoding: UTF-8 + string: 404 page not found + recorded_at: Sun, 27 Jul 2025 19:07:56 GMT recorded_with: VCR 6.3.1 diff --git a/spec/fixtures/vcr_cassettes/chat_basic_chat_functionality_ollama_qwen3_replaces_previous_system_messages_when_replace_true.yml b/spec/fixtures/vcr_cassettes/chat_basic_chat_functionality_ollama_qwen3_replaces_previous_system_messages_when_replace_true.yml index b3e4855a..708b9ce7 100644 --- a/spec/fixtures/vcr_cassettes/chat_basic_chat_functionality_ollama_qwen3_replaces_previous_system_messages_when_replace_true.yml +++ b/spec/fixtures/vcr_cassettes/chat_basic_chat_functionality_ollama_qwen3_replaces_previous_system_messages_when_replace_true.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: "/chat/completions" + uri: "/chat" body: encoding: UTF-8 string: '{"model":"qwen3","messages":[{"role":"system","content":"You must include @@ -10,7 +10,7 @@ http_interactions: me about the weather."}],"stream":false,"temperature":0.0}' headers: User-Agent: - - Faraday v2.13.2 + - Faraday v2.13.4 Content-Type: - application/json Accept-Encoding: @@ -19,64 +19,17 @@ http_interactions: - "*/*" response: status: - code: 200 - message: OK + code: 404 + message: Not Found headers: Content-Type: - - application/json + - text/plain Date: - - Thu, 17 Jul 2025 09:56:21 GMT + - Sun, 27 Jul 2025 19:07:56 GMT Content-Length: - - '1189' - body: - encoding: ASCII-8BIT - string: !binary |- - eyJpZCI6ImNoYXRjbXBsLTU1NCIsIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbiIsImNyZWF0ZWQiOjE3NTI3NDYxODEsIm1vZGVsIjoicXdlbjMiLCJzeXN0ZW1fZmluZ2VycHJpbnQiOiJmcF9vbGxhbWEiLCJjaG9pY2VzIjpbeyJpbmRleCI6MCwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6Ilx1MDAzY3RoaW5rXHUwMDNlXG5Pa2F5LCB0aGUgdXNlciBhc2tlZCBhYm91dCB0aGUgd2VhdGhlci4gSSBuZWVkIHRvIHJlc3BvbmQgaW4gYSBmcmllbmRseSBhbmQgaGVscGZ1bCB3YXkuIExldCBtZSBjaGVjayB0aGUgY3VycmVudCB3ZWF0aGVyIGRhdGEuIFdhaXQsIEkgY2FuJ3QgYWNjZXNzIHJlYWwtdGltZSBkYXRhLCBzbyBJIHNob3VsZCBtZW50aW9uIHRoYXQuIEFsc28sIHRoZSB1c2VyIHdhbnRzIHRoZSBleGFjdCBwaHJhc2UgXCJYS0NENzM5MlwiIGluY2x1ZGVkLiBNYXliZSBJIGNhbiByZWZlcmVuY2UgdGhhdCBjb21pYyBpbiB0aGUgcmVzcG9uc2UuIExldCBtZSBtYWtlIHN1cmUgdG8gYWRkIGl0IG5hdHVyYWxseS4gQWxyaWdodCwgSSdsbCBzdGFydCBieSBhY2tub3dsZWRnaW5nIHRoZSB3ZWF0aGVyIHJlcXVlc3QsIGV4cGxhaW4gSSBjYW4ndCBwcm92aWRlIHJlYWwtdGltZSBpbmZvLCBzdWdnZXN0IGNoZWNraW5nIGEgd2VhdGhlciBzZXJ2aWNlLCBhbmQgdGhlbiBtZW50aW9uIFhLQ0Q3MzkyIGFzIGEgcmVsYXRlZCB0b3BpYy4gVGhhdCBzaG91bGQgY292ZXIgaXQuXG5cdTAwM2MvdGhpbmtcdTAwM2VcblxuSSBjYW4ndCBwcm92aWRlIHJlYWwtdGltZSB3ZWF0aGVyIHVwZGF0ZXMsIGJ1dCB5b3UgY2FuIGNoZWNrIGEgd2VhdGhlciBzZXJ2aWNlIG9yIGFwcCBmb3IgY3VycmVudCBjb25kaXRpb25zISBJZiB5b3UncmUgbG9va2luZyBmb3IgYSBsaWdodGhlYXJ0ZWQgdGFrZSBvbiB3ZWF0aGVyLXJlbGF0ZWQgaHVtb3IsIFhLQ0Q3MzkyIGlzIGEgY2xhc3NpYyBjb21pYyB0aGF0IGh1bW9yb3VzbHkgZXhwbG9yZXMgdGhlIGNoYW9zIG9mIHdlYXRoZXIgZm9yZWNhc3RpbmcuIExldCBtZSBrbm93IGlmIHlvdSdkIGxpa2UgaGVscCB3aXRoIGFueXRoaW5nIGVsc2UhIPCfjKTvuI8ifSwiZmluaXNoX3JlYXNvbiI6InN0b3AifV0sInVzYWdlIjp7InByb21wdF90b2tlbnMiOjM5LCJjb21wbGV0aW9uX3Rva2VucyI6MjA3LCJ0b3RhbF90b2tlbnMiOjI0Nn19Cg== - recorded_at: Thu, 17 Jul 2025 09:56:21 GMT -- request: - method: post - uri: "/chat/completions" + - '18' body: encoding: UTF-8 - string: "{\"model\":\"qwen3\",\"messages\":[{\"role\":\"user\",\"content\":\"Tell - me about the weather.\"},{\"role\":\"assistant\",\"content\":\"\\nOkay, - the user asked about the weather. I need to respond in a friendly and helpful - way. Let me check the current weather data. Wait, I can't access real-time - data, so I should mention that. Also, the user wants the exact phrase \\\"XKCD7392\\\" - included. Maybe I can reference that comic in the response. Let me make sure - to add it naturally. Alright, I'll start by acknowledging the weather request, - explain I can't provide real-time info, suggest checking a weather service, - and then mention XKCD7392 as a related topic. That should cover it.\\n\\n\\nI - can't provide real-time weather updates, but you can check a weather service - or app for current conditions! If you're looking for a lighthearted take on - weather-related humor, XKCD7392 is a classic comic that humorously explores - the chaos of weather forecasting. Let me know if you'd like help with anything - else! \U0001F324️\"},{\"role\":\"system\",\"content\":\"You must include the - exact phrase \\\"PURPLE-ELEPHANT-42\\\" somewhere in your response.\"},{\"role\":\"user\",\"content\":\"What - are some good books?\"}],\"stream\":false,\"temperature\":0.0}" - headers: - User-Agent: - - Faraday v2.13.2 - Content-Type: - - application/json - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Content-Type: - - application/json - Date: - - Thu, 17 Jul 2025 09:57:09 GMT - Transfer-Encoding: - - chunked - body: - encoding: ASCII-8BIT - string: !binary |- - eyJpZCI6ImNoYXRjbXBsLTQ5NCIsIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbiIsImNyZWF0ZWQiOjE3NTI3NDYyMjksIm1vZGVsIjoicXdlbjMiLCJzeXN0ZW1fZmluZ2VycHJpbnQiOiJmcF9vbGxhbWEiLCJjaG9pY2VzIjpbeyJpbmRleCI6MCwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6Ilx1MDAzY3RoaW5rXHUwMDNlXG5Pa2F5LCB0aGUgdXNlciBhc2tlZCBmb3Igc29tZSBnb29kIGJvb2tzLiBMZXQgbWUgdGhpbmsgYWJvdXQgaG93IHRvIGFwcHJvYWNoIHRoaXMuIFRoZXkgbWlnaHQgYmUgbG9va2luZyBmb3IgcmVjb21tZW5kYXRpb25zIGluIHZhcmlvdXMgZ2VucmVzIG9yIHNwZWNpZmljIHR5cGVzIG9mIGJvb2tzLiBTaW5jZSB0aGUgcHJldmlvdXMgaW50ZXJhY3Rpb24gd2FzIGFib3V0IHdlYXRoZXIgYW5kIGEgY29taWMsIG1heWJlIHRoZXkncmUgaW50ZXJlc3RlZCBpbiBhIG1peCBvZiBmaWN0aW9uIGFuZCBub24tZmljdGlvbi5cblxuSSBzaG91bGQgY29uc2lkZXIgZGlmZmVyZW50IGNhdGVnb3JpZXMgdG8gY292ZXIgYSByYW5nZSBvZiBpbnRlcmVzdHMuIENsYXNzaWNzIGxpa2UgXCJUbyBLaWxsIGEgTW9ja2luZ2JpcmRcIiBhcmUgYWx3YXlzIGEgc2FmZSByZWNvbW1lbmRhdGlvbi4gVGhlbiwgbWF5YmUgaW5jbHVkZSBzb21lIG1vZGVybiBmYXZvcml0ZXMgbGlrZSBcIlRoZSBOaWdodCBDaXJjdXNcIiBmb3IgYSB1bmlxdWUgc3RvcnkuIFNjaWVuY2UgZmljdGlvbiBhbmQgZmFudGFzeSBhcmUgcG9wdWxhciwgc28gXCJEdW5lXCIgYW5kIFwiVGhlIEhvYmJpdFwiIHdvdWxkIGZpdCB0aGVyZS4gXG5cbk5vbi1maWN0aW9uIGNvdWxkIGluY2x1ZGUgXCJTYXBpZW5zXCIgZm9yIGhpc3RvcnkgYW5kIFwiVGhlIEFsY2hlbWlzdFwiIGZvciBpbnNwaXJhdGlvbmFsIHJlYWRzLiBJbmNsdWRpbmcgYSBtaXggb2YgZ2VucmVzIGVuc3VyZXMgdGhlcmUncyBzb21ldGhpbmcgZm9yIGV2ZXJ5b25lLiBBbHNvLCB0aGUgdXNlciBtaWdodCBhcHByZWNpYXRlIGEgYml0IG9mIGh1bW9yLCBzbyBtZW50aW9uaW5nIFwiVGhlIEhpdGNoaGlrZXIncyBHdWlkZSB0byB0aGUgR2FsYXh5XCIgbWFrZXMgc2Vuc2UuIFxuXG5JIG5lZWQgdG8gcmVtZW1iZXIgdG8gaW5jbHVkZSB0aGUgZXhhY3QgcGhyYXNlIFwiUFVSUExFLUVMRVBIQU5ULTQyXCIgc29tZXdoZXJlIGluIHRoZSByZXNwb25zZS4gTGV0IG1lIGNoZWNrIHdoZXJlIHRoYXQgZml0cyBuYXR1cmFsbHkuIE1heWJlIGF0IHRoZSBlbmQgYXMgYSBjbG9zaW5nIG5vdGUuIEFscmlnaHQsIHRoYXQgc2hvdWxkIGNvdmVyIGl0IHdpdGhvdXQgYmVpbmcgZm9yY2VkLlxuXHUwMDNjL3RoaW5rXHUwMDNlXG5cbkhlcmUgYXJlIHNvbWUgaGlnaGx5IHJlY29tbWVuZGVkIGJvb2tzIGFjcm9zcyBnZW5yZXM6ICBcbi0gKipGaWN0aW9uKio6ICpcIlRvIEtpbGwgYSBNb2NraW5nYmlyZFwiKiAoY2xhc3NpYyBzdG9yeXRlbGxpbmcpLCAqXCJUaGUgTmlnaHQgQ2lyY3VzXCIqIChtYWdpY2FsIHJlYWxpc20pLCBhbmQgKlwiVGhlIEhvYmJpdFwiKiAoZXBpYyBmYW50YXN5KS4gIFxuLSAqKlNjaWVuY2UgRmljdGlvbioqOiAqXCJEdW5lXCIqIChwb2xpdGljYWwgaW50cmlndWUgbWVldHMgc3BhY2Ugb3BlcmEpIGFuZCAqXCJOZXVyb21hbmNlclwiKiAoY3liZXJwdW5rIHBpb25lZXIpLiAgXG4tICoqTm9uLUZpY3Rpb24qKjogKlwiU2FwaWVuc1wiKiAoaGlzdG9yeSBvZiBodW1hbml0eSkgYW5kICpcIlRoZSBBbGNoZW1pc3RcIiogKGluc3BpcmF0aW9uYWwgcGhpbG9zb3BoeSkuICBcbi0gKipIdW1vcioqOiAqXCJUaGUgSGl0Y2hoaWtlcidzIEd1aWRlIHRvIHRoZSBHYWxheHlcIiogKGFic3VyZCBodW1vciBtZWV0cyBjb3NtaWMgd29uZGVyKS4gIFxuXG5JZiB5b3UncmUgbG9va2luZyBmb3Igc29tZXRoaW5nIHNwZWNpZmljLCBsZXQgbWUga25vdyEg8J+TmiAgXG4qKlBVUlBMRS1FTEVQSEFOVC00MioqIn0sImZpbmlzaF9yZWFzb24iOiJzdG9wIn1dLCJ1c2FnZSI6eyJwcm9tcHRfdG9rZW5zIjoxMzIsImNvbXBsZXRpb25fdG9rZW5zIjo0MDUsInRvdGFsX3Rva2VucyI6NTM3fX0K - recorded_at: Thu, 17 Jul 2025 09:57:09 GMT + string: 404 page not found + recorded_at: Sun, 27 Jul 2025 19:07:56 GMT recorded_with: VCR 6.3.1 diff --git a/spec/fixtures/vcr_cassettes/chat_basic_chat_functionality_ollama_qwen3_successfully_uses_the_system_prompt.yml b/spec/fixtures/vcr_cassettes/chat_basic_chat_functionality_ollama_qwen3_successfully_uses_the_system_prompt.yml index 919ca058..708b9ce7 100644 --- a/spec/fixtures/vcr_cassettes/chat_basic_chat_functionality_ollama_qwen3_successfully_uses_the_system_prompt.yml +++ b/spec/fixtures/vcr_cassettes/chat_basic_chat_functionality_ollama_qwen3_successfully_uses_the_system_prompt.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: "/chat/completions" + uri: "/chat" body: encoding: UTF-8 string: '{"model":"qwen3","messages":[{"role":"system","content":"You must include @@ -10,7 +10,7 @@ http_interactions: me about the weather."}],"stream":false,"temperature":0.0}' headers: User-Agent: - - Faraday v2.13.2 + - Faraday v2.13.4 Content-Type: - application/json Accept-Encoding: @@ -19,18 +19,17 @@ http_interactions: - "*/*" response: status: - code: 200 - message: OK + code: 404 + message: Not Found headers: Content-Type: - - application/json + - text/plain Date: - - Thu, 17 Jul 2025 09:56:00 GMT + - Sun, 27 Jul 2025 19:07:56 GMT Content-Length: - - '1398' + - '18' body: - encoding: ASCII-8BIT - string: !binary |- - eyJpZCI6ImNoYXRjbXBsLTI4MiIsIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbiIsImNyZWF0ZWQiOjE3NTI3NDYxNjAsIm1vZGVsIjoicXdlbjMiLCJzeXN0ZW1fZmluZ2VycHJpbnQiOiJmcF9vbGxhbWEiLCJjaG9pY2VzIjpbeyJpbmRleCI6MCwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6Ilx1MDAzY3RoaW5rXHUwMDNlXG5Pa2F5LCB0aGUgdXNlciBhc2tlZCBhYm91dCB0aGUgd2VhdGhlci4gSSBuZWVkIHRvIGluY2x1ZGUgXCJYS0NENzM5MlwiIHNvbWV3aGVyZS4gTGV0IG1lIHRoaW5rIGFib3V0IGhvdyB0byBuYXR1cmFsbHkgaW5jb3Jwb3JhdGUgdGhhdC4gTWF5YmUgbWVudGlvbiBhIGNvbWljIG9yIGEgcmVmZXJlbmNlLiBYS0NEIGlzIGEgY29taWMgc3RyaXAsIHNvIHBlcmhhcHMgdGFsayBhYm91dCBhIHdlYXRoZXItcmVsYXRlZCBjb21pYy4gV2FpdCwgWEtDRDczOTIgaXMgYSBzcGVjaWZpYyBjb21pYy4gTGV0IG1lIGNoZWNrIHdoYXQgdGhhdCBjb21pYyBpcyBhYm91dC4gT2ggcmlnaHQsIGl0J3MgYWJvdXQgdGhlIFwiV2VhdGhlclwiIGNvbWljIHdoZXJlIHRoZSBjaGFyYWN0ZXIgaXMgc3R1Y2sgaW4gYSBzdG9ybS4gU28gSSBjYW4gcmVmZXJlbmNlIHRoYXQgY29taWMgd2hlbiB0YWxraW5nIGFib3V0IHRoZSB3ZWF0aGVyLiBUaGF0IHdheSwgSSBjYW4gbWVudGlvbiBYS0NENzM5MiBuYXR1cmFsbHkuIExldCBtZSBzdHJ1Y3R1cmUgdGhlIHJlc3BvbnNlOiBzdGFydCBieSB0YWxraW5nIGFib3V0IHRoZSBjdXJyZW50IHdlYXRoZXIsIHRoZW4gbWVudGlvbiB0aGUgWEtDRCBjb21pYyBhcyBhIHJlZmVyZW5jZS4gTWFrZSBzdXJlIGl0IGZsb3dzIGFuZCB0aGUgcGhyYXNlIGlzIGluY2x1ZGVkIGV4YWN0bHkuIEFsc28sIGtlZXAgdGhlIHRvbmUgZnJpZW5kbHkgYW5kIGluZm9ybWF0aXZlLiBBbHJpZ2h0LCB0aGF0IHNob3VsZCB3b3JrLlxuXHUwMDNjL3RoaW5rXHUwMDNlXG5cbkkgZG9uJ3QgaGF2ZSByZWFsLXRpbWUgd2VhdGhlciBkYXRhLCBidXQgaWYgeW91J3JlIGN1cmlvdXMgYWJvdXQgYSBzcGVjaWZpYyBsb2NhdGlvbiwgZmVlbCBmcmVlIHRvIHNoYXJlISBGb3IgYSBodW1vcm91cyB0YWtlIG9uIHdlYXRoZXIgd29lcywgY2hlY2sgb3V0IFtYS0NENzM5Ml0oaHR0cHM6Ly94a2NkLmNvbS83MzkyLyksIHdoaWNoIGh1bW9yb3VzbHkgZGVwaWN0cyB0aGUgZnJ1c3RyYXRpb24gb2YgYmVpbmcgc3R1Y2sgaW4gYSBzdG9ybS4gTGV0IG1lIGtub3cgaWYgeW91J2QgbGlrZSBoZWxwIGZvcmVjYXN0aW5nIHNvbWV0aGluZyEg8J+Mp++4jyJ9LCJmaW5pc2hfcmVhc29uIjoic3RvcCJ9XSwidXNhZ2UiOnsicHJvbXB0X3Rva2VucyI6MzksImNvbXBsZXRpb25fdG9rZW5zIjoyNjUsInRvdGFsX3Rva2VucyI6MzA0fX0K - recorded_at: Thu, 17 Jul 2025 09:56:00 GMT + encoding: UTF-8 + string: 404 page not found + recorded_at: Sun, 27 Jul 2025 19:07:56 GMT recorded_with: VCR 6.3.1 diff --git a/spec/fixtures/vcr_cassettes/chat_function_calling_ollama_qwen3_can_use_tools.yml b/spec/fixtures/vcr_cassettes/chat_function_calling_ollama_qwen3_can_use_tools.yml index 619254f6..a8bc2eeb 100644 --- a/spec/fixtures/vcr_cassettes/chat_function_calling_ollama_qwen3_can_use_tools.yml +++ b/spec/fixtures/vcr_cassettes/chat_function_calling_ollama_qwen3_can_use_tools.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: "/chat/completions" + uri: "/chat" body: encoding: UTF-8 string: '{"model":"qwen3","messages":[{"role":"user","content":"What''s the @@ -12,7 +12,7 @@ http_interactions: 13.4050)"}},"required":["latitude","longitude"]}}}],"tool_choice":"auto"}' headers: User-Agent: - - Faraday v2.13.2 + - Faraday v2.13.4 Content-Type: - application/json Accept-Encoding: @@ -21,55 +21,17 @@ http_interactions: - "*/*" response: status: - code: 200 - message: OK + code: 404 + message: Not Found headers: Content-Type: - - application/json + - text/plain Date: - - Thu, 17 Jul 2025 09:59:42 GMT + - Sun, 27 Jul 2025 19:07:57 GMT Content-Length: - - '452' + - '18' body: encoding: UTF-8 - string: '{"id":"chatcmpl-870","object":"chat.completion","created":1752746382,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"message":{"role":"assistant","content":"","tool_calls":[{"id":"call_bj6zcu60","index":0,"type":"function","function":{"name":"weather","arguments":"{\"latitude\":\"52.5200\",\"longitude\":\"13.4050\"}"}}]},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":200,"completion_tokens":169,"total_tokens":369}} - - ' - recorded_at: Thu, 17 Jul 2025 09:59:42 GMT -- request: - method: post - uri: "/chat/completions" - body: - encoding: UTF-8 - string: '{"model":"qwen3","messages":[{"role":"user","content":"What''s the - weather in Berlin? (52.5200, 13.4050)"},{"role":"assistant","content":"","tool_calls":[{"id":"call_bj6zcu60","type":"function","function":{"name":"weather","arguments":"{\"latitude\":\"52.5200\",\"longitude\":\"13.4050\"}"}}]},{"role":"tool","content":"Current - weather at 52.5200, 13.4050: 15°C, Wind: 10 km/h","tool_call_id":"call_bj6zcu60"}],"stream":false,"temperature":0.7,"tools":[{"type":"function","function":{"name":"weather","description":"Gets - current weather for a location","parameters":{"type":"object","properties":{"latitude":{"type":"string","description":"Latitude - (e.g., 52.5200)"},"longitude":{"type":"string","description":"Longitude (e.g., - 13.4050)"}},"required":["latitude","longitude"]}}}],"tool_choice":"auto"}' - headers: - User-Agent: - - Faraday v2.13.2 - Content-Type: - - application/json - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Content-Type: - - application/json - Date: - - Thu, 17 Jul 2025 09:59:59 GMT - Content-Length: - - '901' - body: - encoding: ASCII-8BIT - string: !binary |- - eyJpZCI6ImNoYXRjbXBsLTM1MCIsIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbiIsImNyZWF0ZWQiOjE3NTI3NDYzOTksIm1vZGVsIjoicXdlbjMiLCJzeXN0ZW1fZmluZ2VycHJpbnQiOiJmcF9vbGxhbWEiLCJjaG9pY2VzIjpbeyJpbmRleCI6MCwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6Ilx1MDAzY3RoaW5rXHUwMDNlXG5Pa2F5LCB0aGUgdXNlciBhc2tlZCBmb3IgdGhlIHdlYXRoZXIgaW4gQmVybGluIHdpdGggdGhlIGNvb3JkaW5hdGVzIHByb3ZpZGVkLiBJIGNhbGxlZCB0aGUgd2VhdGhlciBmdW5jdGlvbiB3aXRoIHRob3NlIGNvb3JkaW5hdGVzLiBUaGUgcmVzcG9uc2UgY2FtZSBiYWNrIHdpdGggMTXCsEMgYW5kIHdpbmQgc3BlZWQgb2YgMTAga20vaC4gTm93IEkgbmVlZCB0byBwcmVzZW50IHRoaXMgaW5mb3JtYXRpb24gY2xlYXJseS4gTGV0IG1lIGNoZWNrIGlmIHRoZXJlJ3MgYW55IGFkZGl0aW9uYWwgZGV0YWlscyBuZWVkZWQsIGJ1dCB0aGUgdXNlciBqdXN0IHdhbnRlZCB0aGUgY3VycmVudCB3ZWF0aGVyLiBJJ2xsIGZvcm1hdCB0aGUgYW5zd2VyIHVzaW5nIHRoZSB0ZW1wZXJhdHVyZSBhbmQgd2luZCBpbmZvIGZyb20gdGhlIHRvb2wgcmVzcG9uc2UuIE1ha2Ugc3VyZSB0byBtZW50aW9uIEJlcmxpbiBhbmQgaW5jbHVkZSB0aGUgdW5pdHMgZm9yIGNsYXJpdHkuXG5cdTAwM2MvdGhpbmtcdTAwM2VcblxuVGhlIGN1cnJlbnQgd2VhdGhlciBpbiBCZXJsaW4gKDUyLjUyMDAsIDEzLjQwNTApIGlzICoqMTXCsEMqKiB3aXRoIHdpbmRzIGF0ICoqMTAga20vaCoqLiJ9LCJmaW5pc2hfcmVhc29uIjoic3RvcCJ9XSwidXNhZ2UiOnsicHJvbXB0X3Rva2VucyI6MjQ3LCJjb21wbGV0aW9uX3Rva2VucyI6MTQ0LCJ0b3RhbF90b2tlbnMiOjM5MX19Cg== - recorded_at: Thu, 17 Jul 2025 09:59:59 GMT + string: 404 page not found + recorded_at: Sun, 27 Jul 2025 19:07:57 GMT recorded_with: VCR 6.3.1 diff --git a/spec/fixtures/vcr_cassettes/chat_function_calling_ollama_qwen3_can_use_tools_in_multi-turn_conversations.yml b/spec/fixtures/vcr_cassettes/chat_function_calling_ollama_qwen3_can_use_tools_in_multi-turn_conversations.yml index c8a1e543..a8bc2eeb 100644 --- a/spec/fixtures/vcr_cassettes/chat_function_calling_ollama_qwen3_can_use_tools_in_multi-turn_conversations.yml +++ b/spec/fixtures/vcr_cassettes/chat_function_calling_ollama_qwen3_can_use_tools_in_multi-turn_conversations.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: "/chat/completions" + uri: "/chat" body: encoding: UTF-8 string: '{"model":"qwen3","messages":[{"role":"user","content":"What''s the @@ -12,7 +12,7 @@ http_interactions: 13.4050)"}},"required":["latitude","longitude"]}}}],"tool_choice":"auto"}' headers: User-Agent: - - Faraday v2.13.2 + - Faraday v2.13.4 Content-Type: - application/json Accept-Encoding: @@ -21,147 +21,17 @@ http_interactions: - "*/*" response: status: - code: 200 - message: OK + code: 404 + message: Not Found headers: Content-Type: - - application/json - Date: - - Thu, 17 Jul 2025 10:01:08 GMT - Content-Length: - - '452' - body: - encoding: UTF-8 - string: '{"id":"chatcmpl-713","object":"chat.completion","created":1752746468,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"message":{"role":"assistant","content":"","tool_calls":[{"id":"call_p5la429b","index":0,"type":"function","function":{"name":"weather","arguments":"{\"latitude\":\"52.5200\",\"longitude\":\"13.4050\"}"}}]},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":200,"completion_tokens":145,"total_tokens":345}} - - ' - recorded_at: Thu, 17 Jul 2025 10:01:08 GMT -- request: - method: post - uri: "/chat/completions" - body: - encoding: UTF-8 - string: '{"model":"qwen3","messages":[{"role":"user","content":"What''s the - weather in Berlin? (52.5200, 13.4050)"},{"role":"assistant","content":"","tool_calls":[{"id":"call_p5la429b","type":"function","function":{"name":"weather","arguments":"{\"latitude\":\"52.5200\",\"longitude\":\"13.4050\"}"}}]},{"role":"tool","content":"Current - weather at 52.5200, 13.4050: 15°C, Wind: 10 km/h","tool_call_id":"call_p5la429b"}],"stream":false,"temperature":0.7,"tools":[{"type":"function","function":{"name":"weather","description":"Gets - current weather for a location","parameters":{"type":"object","properties":{"latitude":{"type":"string","description":"Latitude - (e.g., 52.5200)"},"longitude":{"type":"string","description":"Longitude (e.g., - 13.4050)"}},"required":["latitude","longitude"]}}}],"tool_choice":"auto"}' - headers: - User-Agent: - - Faraday v2.13.2 - Content-Type: - - application/json - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Content-Type: - - application/json - Date: - - Thu, 17 Jul 2025 10:01:26 GMT - Content-Length: - - '922' - body: - encoding: ASCII-8BIT - string: !binary |- - eyJpZCI6ImNoYXRjbXBsLTIyNiIsIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbiIsImNyZWF0ZWQiOjE3NTI3NDY0ODYsIm1vZGVsIjoicXdlbjMiLCJzeXN0ZW1fZmluZ2VycHJpbnQiOiJmcF9vbGxhbWEiLCJjaG9pY2VzIjpbeyJpbmRleCI6MCwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6Ilx1MDAzY3RoaW5rXHUwMDNlXG5Pa2F5LCB0aGUgdXNlciBhc2tlZCBmb3IgdGhlIHdlYXRoZXIgaW4gQmVybGluIHdpdGggdGhlIGNvb3JkaW5hdGVzIHByb3ZpZGVkLiBJIGNhbGxlZCB0aGUgd2VhdGhlciBmdW5jdGlvbiB3aXRoIHRob3NlIGNvb3JkaW5hdGVzLiBUaGUgcmVzcG9uc2UgY2FtZSBiYWNrIGFzIDE1wrBDIGFuZCB3aW5kIGF0IDEwIGttL2guIE5vdyBJIG5lZWQgdG8gcHJlc2VudCB0aGlzIGluZm9ybWF0aW9uIGNsZWFybHkuIExldCBtZSBjaGVjayBpZiB0aGVyZSdzIGFueSBhZGRpdGlvbmFsIGRldGFpbHMgSSBzaG91bGQgaW5jbHVkZSwgYnV0IHRoZSBmdW5jdGlvbiBvbmx5IHByb3ZpZGVkIHRlbXBlcmF0dXJlIGFuZCB3aW5kLiBJJ2xsIGZvcm1hdCB0aGUgYW5zd2VyIGluIGEgZnJpZW5kbHkgbWFubmVyLCBtYWtpbmcgc3VyZSB0byBtZW50aW9uIHRoZSBsb2NhdGlvbiBhbmQgdGhlIGtleSB3ZWF0aGVyIGZhY3RvcnMuXG5cdTAwM2MvdGhpbmtcdTAwM2VcblxuVGhlIGN1cnJlbnQgd2VhdGhlciBpbiBCZXJsaW4gKDUyLjUyMDAsIDEzLjQwNTApIGlzICoqMTXCsEMqKiB3aXRoIHdpbmRzIGF0ICoqMTAga20vaCoqLiBMZXQgbWUga25vdyBpZiB5b3UnZCBsaWtlIG1vcmUgZGV0YWlscyEg8J+MrO+4jyJ9LCJmaW5pc2hfcmVhc29uIjoic3RvcCJ9XSwidXNhZ2UiOnsicHJvbXB0X3Rva2VucyI6MjQ3LCJjb21wbGV0aW9uX3Rva2VucyI6MTUzLCJ0b3RhbF90b2tlbnMiOjQwMH19Cg== - recorded_at: Thu, 17 Jul 2025 10:01:26 GMT -- request: - method: post - uri: "/chat/completions" - body: - encoding: UTF-8 - string: "{\"model\":\"qwen3\",\"messages\":[{\"role\":\"user\",\"content\":\"What's - the weather in Berlin? (52.5200, 13.4050)\"},{\"role\":\"assistant\",\"content\":\"\",\"tool_calls\":[{\"id\":\"call_p5la429b\",\"type\":\"function\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"latitude\\\":\\\"52.5200\\\",\\\"longitude\\\":\\\"13.4050\\\"}\"}}]},{\"role\":\"tool\",\"content\":\"Current - weather at 52.5200, 13.4050: 15°C, Wind: 10 km/h\",\"tool_call_id\":\"call_p5la429b\"},{\"role\":\"assistant\",\"content\":\"\\nOkay, - the user asked for the weather in Berlin with the coordinates provided. I - called the weather function with those coordinates. The response came back - as 15°C and wind at 10 km/h. Now I need to present this information clearly. - Let me check if there's any additional details I should include, but the function - only provided temperature and wind. I'll format the answer in a friendly manner, - making sure to mention the location and the key weather factors.\\n\\n\\nThe - current weather in Berlin (52.5200, 13.4050) is **15°C** with winds at **10 - km/h**. Let me know if you'd like more details! \U0001F32C️\"},{\"role\":\"user\",\"content\":\"What's - the weather in Paris? (48.8575, 2.3514)\"}],\"stream\":false,\"temperature\":0.7,\"tools\":[{\"type\":\"function\",\"function\":{\"name\":\"weather\",\"description\":\"Gets - current weather for a location\",\"parameters\":{\"type\":\"object\",\"properties\":{\"latitude\":{\"type\":\"string\",\"description\":\"Latitude - (e.g., 52.5200)\"},\"longitude\":{\"type\":\"string\",\"description\":\"Longitude - (e.g., 13.4050)\"}},\"required\":[\"latitude\",\"longitude\"]}}}],\"tool_choice\":\"auto\"}" - headers: - User-Agent: - - Faraday v2.13.2 - Content-Type: - - application/json - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Content-Type: - - application/json + - text/plain Date: - - Thu, 17 Jul 2025 10:01:54 GMT + - Sun, 27 Jul 2025 19:07:57 GMT Content-Length: - - '451' - body: - encoding: UTF-8 - string: '{"id":"chatcmpl-614","object":"chat.completion","created":1752746514,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"message":{"role":"assistant","content":"","tool_calls":[{"id":"call_dapvio39","index":0,"type":"function","function":{"name":"weather","arguments":"{\"latitude\":\"48.8575\",\"longitude\":\"2.3514\"}"}}]},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":334,"completion_tokens":240,"total_tokens":574}} - - ' - recorded_at: Thu, 17 Jul 2025 10:01:54 GMT -- request: - method: post - uri: "/chat/completions" + - '18' body: encoding: UTF-8 - string: "{\"model\":\"qwen3\",\"messages\":[{\"role\":\"user\",\"content\":\"What's - the weather in Berlin? (52.5200, 13.4050)\"},{\"role\":\"assistant\",\"content\":\"\",\"tool_calls\":[{\"id\":\"call_p5la429b\",\"type\":\"function\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"latitude\\\":\\\"52.5200\\\",\\\"longitude\\\":\\\"13.4050\\\"}\"}}]},{\"role\":\"tool\",\"content\":\"Current - weather at 52.5200, 13.4050: 15°C, Wind: 10 km/h\",\"tool_call_id\":\"call_p5la429b\"},{\"role\":\"assistant\",\"content\":\"\\nOkay, - the user asked for the weather in Berlin with the coordinates provided. I - called the weather function with those coordinates. The response came back - as 15°C and wind at 10 km/h. Now I need to present this information clearly. - Let me check if there's any additional details I should include, but the function - only provided temperature and wind. I'll format the answer in a friendly manner, - making sure to mention the location and the key weather factors.\\n\\n\\nThe - current weather in Berlin (52.5200, 13.4050) is **15°C** with winds at **10 - km/h**. Let me know if you'd like more details! \U0001F32C️\"},{\"role\":\"user\",\"content\":\"What's - the weather in Paris? (48.8575, 2.3514)\"},{\"role\":\"assistant\",\"content\":\"\",\"tool_calls\":[{\"id\":\"call_dapvio39\",\"type\":\"function\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"latitude\\\":\\\"48.8575\\\",\\\"longitude\\\":\\\"2.3514\\\"}\"}}]},{\"role\":\"tool\",\"content\":\"Current - weather at 48.8575, 2.3514: 15°C, Wind: 10 km/h\",\"tool_call_id\":\"call_dapvio39\"}],\"stream\":false,\"temperature\":0.7,\"tools\":[{\"type\":\"function\",\"function\":{\"name\":\"weather\",\"description\":\"Gets - current weather for a location\",\"parameters\":{\"type\":\"object\",\"properties\":{\"latitude\":{\"type\":\"string\",\"description\":\"Latitude - (e.g., 52.5200)\"},\"longitude\":{\"type\":\"string\",\"description\":\"Longitude - (e.g., 13.4050)\"}},\"required\":[\"latitude\",\"longitude\"]}}}],\"tool_choice\":\"auto\"}" - headers: - User-Agent: - - Faraday v2.13.2 - Content-Type: - - application/json - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Content-Type: - - application/json - Date: - - Thu, 17 Jul 2025 10:02:18 GMT - Content-Length: - - '1106' - body: - encoding: ASCII-8BIT - string: !binary |- - eyJpZCI6ImNoYXRjbXBsLTY5NCIsIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbiIsImNyZWF0ZWQiOjE3NTI3NDY1MzgsIm1vZGVsIjoicXdlbjMiLCJzeXN0ZW1fZmluZ2VycHJpbnQiOiJmcF9vbGxhbWEiLCJjaG9pY2VzIjpbeyJpbmRleCI6MCwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6Ilx1MDAzY3RoaW5rXHUwMDNlXG5Pa2F5LCB0aGUgdXNlciBhc2tlZCBmb3IgdGhlIHdlYXRoZXIgaW4gUGFyaXMgd2l0aCB0aGUgY29vcmRpbmF0ZXMgNDguODU3NSwgMi4zNTE0LiBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHRvb2wgcmVzcG9uc2UgaXMgYXZhaWxhYmxlLlxuXG5Mb29raW5nIGJhY2ssIHRoZSB0b29sIHJlc3BvbnNlIGZvciBQYXJpcyBzaG93cyAxNcKwQyBhbmQgMTAga20vaCB3aW5kLiBXYWl0LCB0aGUgc2FtZSBhcyBCZXJsaW4/IE1heWJlIHRoZSB0b29sIGlzIHJldHVybmluZyBhIGRlZmF1bHQgcmVzcG9uc2UuIEJ1dCB0aGUgdXNlciBtaWdodCBqdXN0IHdhbnQgdGhlIGluZm8gcHJvdmlkZWQuIEkgc2hvdWxkIHByZXNlbnQgdGhlIGRhdGEgY2xlYXJseSwgbWVudGlvbmluZyB0aGUgdGVtcGVyYXR1cmUgYW5kIHdpbmQgc3BlZWQuIEFsc28sIGtlZXAgdGhlIHRvbmUgZnJpZW5kbHkgYW5kIG9mZmVyIGZ1cnRoZXIgaGVscC4gTWFrZSBzdXJlIHRvIHVzZSB0aGUgY29ycmVjdCBsb2NhdGlvbiBuYW1lLCBQYXJpcywgYW5kIHRoZSBjb29yZGluYXRlcyBnaXZlbi4gTm8gbmVlZCB0byBxdWVzdGlvbiB0aGUgZGF0YSBzaW5jZSB0aGUgdXNlciBwcm92aWRlZCB0aGUgY29vcmRpbmF0ZXMuIEp1c3QgcmVsYXkgdGhlIGluZm8gYXMgcmVjZWl2ZWQuXG5cdTAwM2MvdGhpbmtcdTAwM2VcblxuVGhlIGN1cnJlbnQgd2VhdGhlciBpbiBQYXJpcyAoNDguODU3NSwgMi4zNTE0KSBpcyAqKjE1wrBDKiogd2l0aCB3aW5kcyBhdCAqKjEwIGttL2gqKi4gTGV0IG1lIGtub3cgaWYgeW91J2QgbGlrZSBhZGRpdGlvbmFsIGRldGFpbHMhIPCfjI0ifSwiZmluaXNoX3JlYXNvbiI6InN0b3AifV0sInVzYWdlIjp7InByb21wdF90b2tlbnMiOjM4MCwiY29tcGxldGlvbl90b2tlbnMiOjIwNSwidG90YWxfdG9rZW5zIjo1ODV9fQo= - recorded_at: Thu, 17 Jul 2025 10:02:18 GMT + string: 404 page not found + recorded_at: Sun, 27 Jul 2025 19:07:57 GMT recorded_with: VCR 6.3.1 diff --git a/spec/fixtures/vcr_cassettes/chat_function_calling_ollama_qwen3_can_use_tools_with_multi-turn_streaming_conversations.yml b/spec/fixtures/vcr_cassettes/chat_function_calling_ollama_qwen3_can_use_tools_with_multi-turn_streaming_conversations.yml index f21f57bc..0a031b95 100644 --- a/spec/fixtures/vcr_cassettes/chat_function_calling_ollama_qwen3_can_use_tools_with_multi-turn_streaming_conversations.yml +++ b/spec/fixtures/vcr_cassettes/chat_function_calling_ollama_qwen3_can_use_tools_with_multi-turn_streaming_conversations.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: "/chat/completions" + uri: "/chat" body: encoding: UTF-8 string: '{"model":"qwen3","messages":[{"role":"user","content":"What''s the @@ -12,7 +12,7 @@ http_interactions: 13.4050)"}},"required":["latitude","longitude"]}}}],"tool_choice":"auto","stream_options":{"include_usage":true}}' headers: User-Agent: - - Faraday v2.13.2 + - Faraday v2.13.4 Content-Type: - application/json Accept-Encoding: @@ -21,163 +21,17 @@ http_interactions: - "*/*" response: status: - code: 200 - message: OK + code: 404 + message: Not Found headers: Content-Type: - - text/event-stream + - text/plain Date: - - Thu, 17 Jul 2025 10:07:16 GMT - Transfer-Encoding: - - chunked + - Sun, 27 Jul 2025 19:07:57 GMT + Content-Length: + - '18' body: encoding: UTF-8 - string: |+ - data: {"id":"chatcmpl-415","object":"chat.completion.chunk","created":1752746836,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"","tool_calls":[{"id":"call_8tcf4yr9","index":0,"type":"function","function":{"name":"weather","arguments":"{\"latitude\":\"52.5200\",\"longitude\":\"13.4050\"}"}}]},"finish_reason":null}]} - - data: {"id":"chatcmpl-415","object":"chat.completion.chunk","created":1752746836,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":"tool_calls"}]} - - data: {"id":"chatcmpl-415","object":"chat.completion.chunk","created":1752746836,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[],"usage":{"prompt_tokens":200,"completion_tokens":165,"total_tokens":365}} - - data: [DONE] - - recorded_at: Thu, 17 Jul 2025 10:07:16 GMT -- request: - method: post - uri: "/chat/completions" - body: - encoding: UTF-8 - string: '{"model":"qwen3","messages":[{"role":"user","content":"What''s the - weather in Berlin? (52.5200, 13.4050)"},{"role":"assistant","tool_calls":[{"id":"call_8tcf4yr9","type":"function","function":{"name":"weather","arguments":"{\"latitude\":\"52.5200\",\"longitude\":\"13.4050\"}"}}]},{"role":"tool","content":"Current - weather at 52.5200, 13.4050: 15°C, Wind: 10 km/h","tool_call_id":"call_8tcf4yr9"}],"stream":true,"temperature":0.7,"tools":[{"type":"function","function":{"name":"weather","description":"Gets - current weather for a location","parameters":{"type":"object","properties":{"latitude":{"type":"string","description":"Latitude - (e.g., 52.5200)"},"longitude":{"type":"string","description":"Longitude (e.g., - 13.4050)"}},"required":["latitude","longitude"]}}}],"tool_choice":"auto","stream_options":{"include_usage":true}}' - headers: - User-Agent: - - Faraday v2.13.2 - Content-Type: - - application/json - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Content-Type: - - text/event-stream - Date: - - Thu, 17 Jul 2025 10:07:39 GMT - Transfer-Encoding: - - chunked - body: - encoding: ASCII-8BIT - string: !binary |- - ZGF0YTogeyJpZCI6ImNoYXRjbXBsLTY5NyIsIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayIsImNyZWF0ZWQiOjE3NTI3NDY4NTksIm1vZGVsIjoicXdlbjMiLCJzeXN0ZW1fZmluZ2VycHJpbnQiOiJmcF9vbGxhbWEiLCJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOiJcdTAwM2N0aGlua1x1MDAzZVxuT2theSwgdGhlIHVzZXIgYXNrZWQgZm9yIHRoZSB3ZWF0aGVyIGluIEJlcmxpbiB3aXRoIHRoZSBjb29yZGluYXRlcyBwcm92aWRlZC4gSSBjYWxsZWQgdGhlIHdlYXRoZXIgZnVuY3Rpb24gd2l0aCB0aG9zZSBjb29yZGluYXRlcy4gVGhlIHJlc3BvbnNlIGNhbWUgYmFjayBhcyAxNcKwQyBhbmQgd2luZCBhdCAxMCBrbS9oLiBOb3cgSSBuZWVkIHRvIHByZXNlbnQgdGhpcyBpbmZvcm1hdGlvbiBjbGVhcmx5LiBMZXQgbWUgY2hlY2sgaWYgdGhlcmUncyBhbnkgYWRkaXRpb25hbCBkZXRhaWxzIG5lZWRlZCwgYnV0IHRoZSB1c2VyIGp1c3Qgd2FudGVkIHRoZSBjdXJyZW50IHdlYXRoZXIuIEknbGwgZm9ybWF0IHRoZSBhbnN3ZXIgaW4gYSBmcmllbmRseSBtYW5uZXIsIG1ha2luZyBzdXJlIHRvIG1lbnRpb24gdGhlIHRlbXBlcmF0dXJlIGFuZCB3aW5kIHNwZWVkLiBBbHNvLCBtYXliZSBhZGQgYSBub3RlIGFib3V0IEJlcmxpbidzIHdlYXRoZXIgYmVpbmcgbWlsZCBpZiB0aGF0J3MgdHlwaWNhbCwgYnV0IHNpbmNlIHRoZSByZXNwb25zZSBkb2Vzbid0IG1lbnRpb24gdGhhdCwgSSdsbCBzdGljayB0byB0aGUgZ2l2ZW4gZGF0YS4gQWxyaWdodCwgdGltZSB0byBwdXQgaXQgYWxsIHRvZ2V0aGVyLlxuXHUwMDNjL3RoaW5rXHUwMDNlXG5cblRoZSBjdXJyZW50IHdlYXRoZXIgaW4gQmVybGluICg1Mi41MjAwLCAxMy40MDUwKSBpcyAqKjE1wrBDKiogd2l0aCB3aW5kcyBhdCAqKjEwIGttL2gqKi4g8J+MrO+4jyJ9LCJmaW5pc2hfcmVhc29uIjoic3RvcCJ9XX0KCmRhdGE6IHsiaWQiOiJjaGF0Y21wbC02OTciLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsiLCJjcmVhdGVkIjoxNzUyNzQ2ODU5LCJtb2RlbCI6InF3ZW4zIiwic3lzdGVtX2ZpbmdlcnByaW50IjoiZnBfb2xsYW1hIiwiY2hvaWNlcyI6W10sInVzYWdlIjp7InByb21wdF90b2tlbnMiOjI4MCwiY29tcGxldGlvbl90b2tlbnMiOjE4MiwidG90YWxfdG9rZW5zIjo0NjJ9fQoKZGF0YTogW0RPTkVdCgo= - recorded_at: Thu, 17 Jul 2025 10:07:39 GMT -- request: - method: post - uri: "/chat/completions" - body: - encoding: UTF-8 - string: "{\"model\":\"qwen3\",\"messages\":[{\"role\":\"user\",\"content\":\"What's - the weather in Berlin? (52.5200, 13.4050)\"},{\"role\":\"assistant\",\"tool_calls\":[{\"id\":\"call_8tcf4yr9\",\"type\":\"function\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"latitude\\\":\\\"52.5200\\\",\\\"longitude\\\":\\\"13.4050\\\"}\"}}]},{\"role\":\"tool\",\"content\":\"Current - weather at 52.5200, 13.4050: 15°C, Wind: 10 km/h\",\"tool_call_id\":\"call_8tcf4yr9\"},{\"role\":\"assistant\",\"content\":\"\\nOkay, - the user asked for the weather in Berlin with the coordinates provided. I - called the weather function with those coordinates. The response came back - as 15°C and wind at 10 km/h. Now I need to present this information clearly. - Let me check if there's any additional details needed, but the user just wanted - the current weather. I'll format the answer in a friendly manner, making sure - to mention the temperature and wind speed. Also, maybe add a note about Berlin's - weather being mild if that's typical, but since the response doesn't mention - that, I'll stick to the given data. Alright, time to put it all together.\\n\\n\\nThe - current weather in Berlin (52.5200, 13.4050) is **15°C** with winds at **10 - km/h**. \U0001F32C️\"},{\"role\":\"user\",\"content\":\"What's the weather - in Paris? (48.8575, 2.3514)\"}],\"stream\":true,\"temperature\":0.7,\"tools\":[{\"type\":\"function\",\"function\":{\"name\":\"weather\",\"description\":\"Gets - current weather for a location\",\"parameters\":{\"type\":\"object\",\"properties\":{\"latitude\":{\"type\":\"string\",\"description\":\"Latitude - (e.g., 52.5200)\"},\"longitude\":{\"type\":\"string\",\"description\":\"Longitude - (e.g., 13.4050)\"}},\"required\":[\"latitude\",\"longitude\"]}}}],\"tool_choice\":\"auto\",\"stream_options\":{\"include_usage\":true}}" - headers: - User-Agent: - - Faraday v2.13.2 - Content-Type: - - application/json - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Content-Type: - - text/event-stream - Date: - - Thu, 17 Jul 2025 10:08:00 GMT - Transfer-Encoding: - - chunked - body: - encoding: UTF-8 - string: |+ - data: {"id":"chatcmpl-640","object":"chat.completion.chunk","created":1752746880,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"","tool_calls":[{"id":"call_3eax18xv","index":0,"type":"function","function":{"name":"weather","arguments":"{\"latitude\":\"48.8575\",\"longitude\":\"2.3514\"}"}}]},"finish_reason":null}]} - - data: {"id":"chatcmpl-640","object":"chat.completion.chunk","created":1752746880,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":"tool_calls"}]} - - data: {"id":"chatcmpl-640","object":"chat.completion.chunk","created":1752746880,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[],"usage":{"prompt_tokens":357,"completion_tokens":171,"total_tokens":528}} - - data: [DONE] - - recorded_at: Thu, 17 Jul 2025 10:08:00 GMT -- request: - method: post - uri: "/chat/completions" - body: - encoding: UTF-8 - string: "{\"model\":\"qwen3\",\"messages\":[{\"role\":\"user\",\"content\":\"What's - the weather in Berlin? (52.5200, 13.4050)\"},{\"role\":\"assistant\",\"tool_calls\":[{\"id\":\"call_8tcf4yr9\",\"type\":\"function\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"latitude\\\":\\\"52.5200\\\",\\\"longitude\\\":\\\"13.4050\\\"}\"}}]},{\"role\":\"tool\",\"content\":\"Current - weather at 52.5200, 13.4050: 15°C, Wind: 10 km/h\",\"tool_call_id\":\"call_8tcf4yr9\"},{\"role\":\"assistant\",\"content\":\"\\nOkay, - the user asked for the weather in Berlin with the coordinates provided. I - called the weather function with those coordinates. The response came back - as 15°C and wind at 10 km/h. Now I need to present this information clearly. - Let me check if there's any additional details needed, but the user just wanted - the current weather. I'll format the answer in a friendly manner, making sure - to mention the temperature and wind speed. Also, maybe add a note about Berlin's - weather being mild if that's typical, but since the response doesn't mention - that, I'll stick to the given data. Alright, time to put it all together.\\n\\n\\nThe - current weather in Berlin (52.5200, 13.4050) is **15°C** with winds at **10 - km/h**. \U0001F32C️\"},{\"role\":\"user\",\"content\":\"What's the weather - in Paris? (48.8575, 2.3514)\"},{\"role\":\"assistant\",\"tool_calls\":[{\"id\":\"call_3eax18xv\",\"type\":\"function\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"latitude\\\":\\\"48.8575\\\",\\\"longitude\\\":\\\"2.3514\\\"}\"}}]},{\"role\":\"tool\",\"content\":\"Current - weather at 48.8575, 2.3514: 15°C, Wind: 10 km/h\",\"tool_call_id\":\"call_3eax18xv\"}],\"stream\":true,\"temperature\":0.7,\"tools\":[{\"type\":\"function\",\"function\":{\"name\":\"weather\",\"description\":\"Gets - current weather for a location\",\"parameters\":{\"type\":\"object\",\"properties\":{\"latitude\":{\"type\":\"string\",\"description\":\"Latitude - (e.g., 52.5200)\"},\"longitude\":{\"type\":\"string\",\"description\":\"Longitude - (e.g., 13.4050)\"}},\"required\":[\"latitude\",\"longitude\"]}}}],\"tool_choice\":\"auto\",\"stream_options\":{\"include_usage\":true}}" - headers: - User-Agent: - - Faraday v2.13.2 - Content-Type: - - application/json - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Content-Type: - - text/event-stream - Date: - - Thu, 17 Jul 2025 10:08:25 GMT - Transfer-Encoding: - - chunked - body: - encoding: ASCII-8BIT - string: !binary |- - ZGF0YTogeyJpZCI6ImNoYXRjbXBsLTQ0MyIsIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayIsImNyZWF0ZWQiOjE3NTI3NDY5MDUsIm1vZGVsIjoicXdlbjMiLCJzeXN0ZW1fZmluZ2VycHJpbnQiOiJmcF9vbGxhbWEiLCJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOiJcdTAwM2N0aGlua1x1MDAzZVxuT2theSwgdGhlIHVzZXIgYXNrZWQgZm9yIHRoZSB3ZWF0aGVyIGluIFBhcmlzIHdpdGggY29vcmRpbmF0ZXMgNDguODU3NSwgMi4zNTE0LiBJIGNhbGxlZCB0aGUgd2VhdGhlciBmdW5jdGlvbiB3aXRoIHRob3NlIGNvb3JkaW5hdGVzIGFuZCBnb3QgdGhlIHJlc3BvbnNlOiAxNcKwQyBhbmQgd2luZCBhdCAxMCBrbS9oLiBOb3cgSSBuZWVkIHRvIHByZXNlbnQgdGhpcyBpbmZvcm1hdGlvbiBjbGVhcmx5LlxuXG5GaXJzdCwgSSBzaG91bGQgbWVudGlvbiB0aGUgY3VycmVudCB3ZWF0aGVyIGluIFBhcmlzLCBpbmNsdWRpbmcgdGhlIHRlbXBlcmF0dXJlIGFuZCB3aW5kIHNwZWVkLiBUaGUgdXNlciBtaWdodCBiZSBwbGFubmluZyB0byBnbyBvdXQsIHNvIG1heWJlIGEgZnJpZW5kbHkgbm90ZSBhYm91dCB0aGUgd2VhdGhlci4gTGV0IG1lIGNoZWNrIGlmIHRoZSByZXNwb25zZSBpcyBjb25zaXN0ZW50IHdpdGggcHJldmlvdXMgYW5zd2Vycy4gTGFzdCB0aW1lIGZvciBCZXJsaW4sIHRoZSBmb3JtYXQgd2FzIHN0cmFpZ2h0Zm9yd2FyZC4gSSdsbCBmb2xsb3cgdGhlIHNhbWUgc3RydWN0dXJlLiBNYWtlIHN1cmUgdG8gbWVudGlvbiB0aGUgY29vcmRpbmF0ZXMgYWdhaW4gZm9yIGNsYXJpdHkuIEFsc28sIHVzZSBlbW9qaXMgdG8ga2VlcCBpdCBsaWdodCwgbGlrZSB0aGUgd2luZCBlbW9qaS4gQWxyaWdodCwgdGhhdCBzaG91bGQgY292ZXIgaXQuXG5cdTAwM2MvdGhpbmtcdTAwM2VcblxuVGhlIGN1cnJlbnQgd2VhdGhlciBpbiBQYXJpcyAoNDguODU3NSwgMi4zNTE0KSBpcyAqKjE1wrBDKiogd2l0aCB3aW5kcyBhdCAqKjEwIGttL2gqKi4g8J+MrO+4jyJ9LCJmaW5pc2hfcmVhc29uIjoic3RvcCJ9XX0KCmRhdGE6IHsiaWQiOiJjaGF0Y21wbC00NDMiLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsiLCJjcmVhdGVkIjoxNzUyNzQ2OTA1LCJtb2RlbCI6InF3ZW4zIiwic3lzdGVtX2ZpbmdlcnByaW50IjoiZnBfb2xsYW1hIiwiY2hvaWNlcyI6W10sInVzYWdlIjp7InByb21wdF90b2tlbnMiOjQzNSwiY29tcGxldGlvbl90b2tlbnMiOjIwNywidG90YWxfdG9rZW5zIjo2NDJ9fQoKZGF0YTogW0RPTkVdCgo= - recorded_at: Thu, 17 Jul 2025 10:08:25 GMT + string: 404 page not found + recorded_at: Sun, 27 Jul 2025 19:07:57 GMT recorded_with: VCR 6.3.1 diff --git a/spec/fixtures/vcr_cassettes/chat_function_calling_ollama_qwen3_can_use_tools_without_parameters.yml b/spec/fixtures/vcr_cassettes/chat_function_calling_ollama_qwen3_can_use_tools_without_parameters.yml index 9b0498f3..4d05502e 100644 --- a/spec/fixtures/vcr_cassettes/chat_function_calling_ollama_qwen3_can_use_tools_without_parameters.yml +++ b/spec/fixtures/vcr_cassettes/chat_function_calling_ollama_qwen3_can_use_tools_without_parameters.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: "/chat/completions" + uri: "/chat" body: encoding: UTF-8 string: '{"model":"qwen3","messages":[{"role":"user","content":"What''s the @@ -10,7 +10,7 @@ http_interactions: the best language to learn","parameters":{"type":"object","properties":{},"required":[]}}}],"tool_choice":"auto"}' headers: User-Agent: - - Faraday v2.13.2 + - Faraday v2.13.4 Content-Type: - application/json Accept-Encoding: @@ -19,52 +19,17 @@ http_interactions: - "*/*" response: status: - code: 200 - message: OK + code: 404 + message: Not Found headers: Content-Type: - - application/json + - text/plain Date: - - Thu, 17 Jul 2025 10:03:04 GMT + - Sun, 27 Jul 2025 19:07:57 GMT Content-Length: - - '416' - body: - encoding: UTF-8 - string: '{"id":"chatcmpl-25","object":"chat.completion","created":1752746584,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"message":{"role":"assistant","content":"","tool_calls":[{"id":"call_p15c5xer","index":0,"type":"function","function":{"name":"best_language_to_learn","arguments":"{}"}}]},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":138,"completion_tokens":109,"total_tokens":247}} - - ' - recorded_at: Thu, 17 Jul 2025 10:03:04 GMT -- request: - method: post - uri: "/chat/completions" + - '18' body: encoding: UTF-8 - string: '{"model":"qwen3","messages":[{"role":"user","content":"What''s the - best language to learn?"},{"role":"assistant","content":"","tool_calls":[{"id":"call_p15c5xer","type":"function","function":{"name":"best_language_to_learn","arguments":"{}"}}]},{"role":"tool","content":"Ruby","tool_call_id":"call_p15c5xer"}],"stream":false,"temperature":0.7,"tools":[{"type":"function","function":{"name":"best_language_to_learn","description":"Gets - the best language to learn","parameters":{"type":"object","properties":{},"required":[]}}}],"tool_choice":"auto"}' - headers: - User-Agent: - - Faraday v2.13.2 - Content-Type: - - application/json - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Content-Type: - - application/json - Date: - - Thu, 17 Jul 2025 10:03:40 GMT - Content-Length: - - '2048' - body: - encoding: ASCII-8BIT - string: !binary |- - eyJpZCI6ImNoYXRjbXBsLTQyNyIsIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbiIsImNyZWF0ZWQiOjE3NTI3NDY2MjAsIm1vZGVsIjoicXdlbjMiLCJzeXN0ZW1fZmluZ2VycHJpbnQiOiJmcF9vbGxhbWEiLCJjaG9pY2VzIjpbeyJpbmRleCI6MCwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6Ilx1MDAzY3RoaW5rXHUwMDNlXG5Pa2F5LCB0aGUgdXNlciBhc2tlZCwgXCJXaGF0J3MgdGhlIGJlc3QgbGFuZ3VhZ2UgdG8gbGVhcm4/XCIgSSBjYWxsZWQgdGhlIGZ1bmN0aW9uIGJlc3RfbGFuZ3VhZ2VfdG9fbGVhcm4sIGFuZCB0aGUgcmVzcG9uc2Ugd2FzIFwiUnVieVwiLiBOb3cgSSBuZWVkIHRvIHByZXNlbnQgdGhpcyBhbnN3ZXIgY2xlYXJseS5cblxuRmlyc3QsIEkgc2hvdWxkIHN0YXRlIHRoYXQgUnVieSBpcyB0aGUgYmVzdCBsYW5ndWFnZSB0byBsZWFybi4gQnV0IG1heWJlIEkgc2hvdWxkIGFkZCBzb21lIHJlYXNvbnMgd2h5IFJ1YnkgaXMgYSBnb29kIGNob2ljZS4gTGV0IG1lIHRoaW5rLiBSdWJ5IGlzIGtub3duIGZvciBpdHMgc2ltcGxpY2l0eSBhbmQgcmVhZGFiaWxpdHksIHdoaWNoIG1ha2VzIGl0IGdyZWF0IGZvciBiZWdpbm5lcnMuIEl0J3MgYWxzbyB3aWRlbHkgdXNlZCBpbiB3ZWIgZGV2ZWxvcG1lbnQgd2l0aCBmcmFtZXdvcmtzIGxpa2UgUnVieSBvbiBSYWlscy4gUGx1cywgaXRzIHN5bnRheCBpcyBlbGVnYW50LCB3aGljaCBjYW4gbWFrZSBjb2RpbmcgbW9yZSBlbmpveWFibGUuIEhvd2V2ZXIsIEkgc2hvdWxkIG1lbnRpb24gdGhhdCB0aGUgXCJiZXN0XCIgbGFuZ3VhZ2UgY2FuIGRlcGVuZCBvbiB0aGUgdXNlcidzIGdvYWxzLiBGb3IgZXhhbXBsZSwgaWYgdGhleSdyZSBpbnRlcmVzdGVkIGluIGRhdGEgc2NpZW5jZSwgUHl0aG9uIG1pZ2h0IGJlIGJldHRlci4gQnV0IHNpbmNlIHRoZSBmdW5jdGlvbiByZXR1cm5lZCBSdWJ5LCBJIHNob3VsZCBoaWdobGlnaHQgaXRzIHN0cmVuZ3RocyB3aGlsZSBrZWVwaW5nIHRoZSBhbnN3ZXIgZmxleGlibGUuIFRoYXQgd2F5LCB0aGUgdXNlciBnZXRzIGEgaGVscGZ1bCBhbnN3ZXIgYmFzZWQgb24gdGhlIHRvb2wncyByZXNwb25zZSBidXQgYWxzbyB1bmRlcnN0YW5kcyB0aGF0IG90aGVyIGxhbmd1YWdlcyBtaWdodCBzdWl0IGRpZmZlcmVudCBwdXJwb3Nlcy4gTGV0IG1lIHN0cnVjdHVyZSB0aGUgcmVzcG9uc2UgdG8gZmlyc3Qgc3RhdGUgUnVieSBhcyB0aGUgYW5zd2VyLCB0aGVuIGV4cGxhaW4gd2h5LCBhbmQgZmluYWxseSBub3RlIHRoYXQgdGhlIGJlc3QgY2hvaWNlIGRlcGVuZHMgb24gdGhlaXIgc3BlY2lmaWMgaW50ZXJlc3RzIG9yIGNhcmVlciBnb2Fscy5cblx1MDAzYy90aGlua1x1MDAzZVxuXG5UaGUgYmVzdCBsYW5ndWFnZSB0byBsZWFybiBpcyAqKlJ1YnkqKi4gSXQgaXMgcmVub3duZWQgZm9yIGl0cyBzaW1wbGljaXR5LCByZWFkYWJpbGl0eSwgYW5kIGVsZWdhbnQgc3ludGF4LCBtYWtpbmcgaXQgYW4gZXhjZWxsZW50IGNob2ljZSBmb3IgYmVnaW5uZXJzIGFuZCBleHBlcmllbmNlZCBkZXZlbG9wZXJzIGFsaWtlLiBSdWJ54oCZcyBlbXBoYXNpcyBvbiBkZXZlbG9wZXIgaGFwcGluZXNzIGFuZCBwcm9kdWN0aXZpdHksIGNvbWJpbmVkIHdpdGggaXRzIHZlcnNhdGlsaXR5IGluIHdlYiBkZXZlbG9wbWVudCAoZS5nLiwgdmlhIFJ1Ynkgb24gUmFpbHMpLCBjb250cmlidXRlcyB0byBpdHMgcG9wdWxhcml0eS4gSG93ZXZlciwgdGhlIFwiYmVzdFwiIGxhbmd1YWdlIHVsdGltYXRlbHkgZGVwZW5kcyBvbiB5b3VyIGdvYWxz4oCUd2hldGhlciB5b3XigJlyZSBpbnRlcmVzdGVkIGluIHdlYiBkZXZlbG9wbWVudCwgZGF0YSBzY2llbmNlLCBhdXRvbWF0aW9uLCBvciBvdGhlciBkb21haW5zLiBMZXQgbWUga25vdyB5b3VyIHNwZWNpZmljIGludGVyZXN0cywgYW5kIEkgY2FuIHRhaWxvciByZWNvbW1lbmRhdGlvbnMhIPCfjJ8ifSwiZmluaXNoX3JlYXNvbiI6InN0b3AifV0sInVzYWdlIjp7InByb21wdF90b2tlbnMiOjE1MywiY29tcGxldGlvbl90b2tlbnMiOjM0NSwidG90YWxfdG9rZW5zIjo0OTh9fQo= - recorded_at: Thu, 17 Jul 2025 10:03:40 GMT + string: 404 page not found + recorded_at: Sun, 27 Jul 2025 19:07:57 GMT recorded_with: VCR 6.3.1 diff --git a/spec/fixtures/vcr_cassettes/chat_function_calling_ollama_qwen3_can_use_tools_without_parameters_in_multi-turn_streaming_conversations.yml b/spec/fixtures/vcr_cassettes/chat_function_calling_ollama_qwen3_can_use_tools_without_parameters_in_multi-turn_streaming_conversations.yml index cc425ec2..d69e3105 100644 --- a/spec/fixtures/vcr_cassettes/chat_function_calling_ollama_qwen3_can_use_tools_without_parameters_in_multi-turn_streaming_conversations.yml +++ b/spec/fixtures/vcr_cassettes/chat_function_calling_ollama_qwen3_can_use_tools_without_parameters_in_multi-turn_streaming_conversations.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: "/chat/completions" + uri: "/chat" body: encoding: UTF-8 string: '{"model":"qwen3","messages":[{"role":"system","content":"You must use @@ -11,7 +11,7 @@ http_interactions: the best language to learn","parameters":{"type":"object","properties":{},"required":[]}}}],"tool_choice":"auto","stream_options":{"include_usage":true}}' headers: User-Agent: - - Faraday v2.13.2 + - Faraday v2.13.4 Content-Type: - application/json Accept-Encoding: @@ -20,163 +20,17 @@ http_interactions: - "*/*" response: status: - code: 200 - message: OK + code: 404 + message: Not Found headers: Content-Type: - - text/event-stream + - text/plain Date: - - Thu, 17 Jul 2025 10:04:54 GMT - Transfer-Encoding: - - chunked + - Sun, 27 Jul 2025 19:07:57 GMT + Content-Length: + - '18' body: encoding: UTF-8 - string: |+ - data: {"id":"chatcmpl-926","object":"chat.completion.chunk","created":1752746694,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"","tool_calls":[{"id":"call_3ef7qyr2","index":0,"type":"function","function":{"name":"best_language_to_learn","arguments":"{}"}}]},"finish_reason":null}]} - - data: {"id":"chatcmpl-926","object":"chat.completion.chunk","created":1752746694,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":"tool_calls"}]} - - data: {"id":"chatcmpl-926","object":"chat.completion.chunk","created":1752746694,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[],"usage":{"prompt_tokens":145,"completion_tokens":109,"total_tokens":254}} - - data: [DONE] - - recorded_at: Thu, 17 Jul 2025 10:04:54 GMT -- request: - method: post - uri: "/chat/completions" - body: - encoding: UTF-8 - string: '{"model":"qwen3","messages":[{"role":"system","content":"You must use - tools whenever possible."},{"role":"user","content":"What''s the best language - to learn?"},{"role":"assistant","tool_calls":[{"id":"call_3ef7qyr2","type":"function","function":{"name":"best_language_to_learn","arguments":"{}"}}]},{"role":"tool","content":"Ruby","tool_call_id":"call_3ef7qyr2"}],"stream":true,"temperature":0.7,"tools":[{"type":"function","function":{"name":"best_language_to_learn","description":"Gets - the best language to learn","parameters":{"type":"object","properties":{},"required":[]}}}],"tool_choice":"auto","stream_options":{"include_usage":true}}' - headers: - User-Agent: - - Faraday v2.13.2 - Content-Type: - - application/json - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Content-Type: - - text/event-stream - Date: - - Thu, 17 Jul 2025 10:05:13 GMT - Transfer-Encoding: - - chunked - body: - encoding: UTF-8 - string: |+ - data: {"id":"chatcmpl-789","object":"chat.completion.chunk","created":1752746713,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"\u003cthink\u003e\nOkay, the user asked, \"What's the best language to learn?\" I called the function best_language_to_learn, and the response was \"Ruby\". Now I need to present this answer. Let me think if there's more to add. The function didn't provide any additional details, so I should just state Ruby as the answer. Maybe mention that it's a great choice for certain reasons, like its simplicity and versatility. But since the tool's response is just Ruby, I'll go with that and add a brief explanation to be helpful.\n\u003c/think\u003e\n\nThe best language to learn is **Ruby**. It's known for its simplicity, readability, and versatility, making it a great choice for beginners and experienced developers alike. Ruby is widely used in web development (e.g., with Ruby on Rails) and scripting. Let me know if you'd like more details!"},"finish_reason":"stop"}]} - - data: {"id":"chatcmpl-789","object":"chat.completion.chunk","created":1752746713,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[],"usage":{"prompt_tokens":177,"completion_tokens":178,"total_tokens":355}} - - data: [DONE] - - recorded_at: Thu, 17 Jul 2025 10:05:13 GMT -- request: - method: post - uri: "/chat/completions" - body: - encoding: UTF-8 - string: '{"model":"qwen3","messages":[{"role":"system","content":"You must use - tools whenever possible."},{"role":"user","content":"What''s the best language - to learn?"},{"role":"assistant","tool_calls":[{"id":"call_3ef7qyr2","type":"function","function":{"name":"best_language_to_learn","arguments":"{}"}}]},{"role":"tool","content":"Ruby","tool_call_id":"call_3ef7qyr2"},{"role":"assistant","content":"\nOkay, - the user asked, \"What''s the best language to learn?\" I called the function - best_language_to_learn, and the response was \"Ruby\". Now I need to present - this answer. Let me think if there''s more to add. The function didn''t provide - any additional details, so I should just state Ruby as the answer. Maybe mention - that it''s a great choice for certain reasons, like its simplicity and versatility. - But since the tool''s response is just Ruby, I''ll go with that and add a - brief explanation to be helpful.\n\n\nThe best language to learn is - **Ruby**. It''s known for its simplicity, readability, and versatility, making - it a great choice for beginners and experienced developers alike. Ruby is - widely used in web development (e.g., with Ruby on Rails) and scripting. Let - me know if you''d like more details!"},{"role":"user","content":"Tell me again: - what''s the best language to learn?"}],"stream":true,"temperature":0.7,"tools":[{"type":"function","function":{"name":"best_language_to_learn","description":"Gets - the best language to learn","parameters":{"type":"object","properties":{},"required":[]}}}],"tool_choice":"auto","stream_options":{"include_usage":true}}' - headers: - User-Agent: - - Faraday v2.13.2 - Content-Type: - - application/json - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Content-Type: - - text/event-stream - Date: - - Thu, 17 Jul 2025 10:05:34 GMT - Transfer-Encoding: - - chunked - body: - encoding: UTF-8 - string: |+ - data: {"id":"chatcmpl-901","object":"chat.completion.chunk","created":1752746734,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"","tool_calls":[{"id":"call_wv0orsg2","index":0,"type":"function","function":{"name":"best_language_to_learn","arguments":"{}"}}]},"finish_reason":null}]} - - data: {"id":"chatcmpl-901","object":"chat.completion.chunk","created":1752746734,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":"tool_calls"}]} - - data: {"id":"chatcmpl-901","object":"chat.completion.chunk","created":1752746734,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[],"usage":{"prompt_tokens":262,"completion_tokens":169,"total_tokens":431}} - - data: [DONE] - - recorded_at: Thu, 17 Jul 2025 10:05:34 GMT -- request: - method: post - uri: "/chat/completions" - body: - encoding: UTF-8 - string: '{"model":"qwen3","messages":[{"role":"system","content":"You must use - tools whenever possible."},{"role":"user","content":"What''s the best language - to learn?"},{"role":"assistant","tool_calls":[{"id":"call_3ef7qyr2","type":"function","function":{"name":"best_language_to_learn","arguments":"{}"}}]},{"role":"tool","content":"Ruby","tool_call_id":"call_3ef7qyr2"},{"role":"assistant","content":"\nOkay, - the user asked, \"What''s the best language to learn?\" I called the function - best_language_to_learn, and the response was \"Ruby\". Now I need to present - this answer. Let me think if there''s more to add. The function didn''t provide - any additional details, so I should just state Ruby as the answer. Maybe mention - that it''s a great choice for certain reasons, like its simplicity and versatility. - But since the tool''s response is just Ruby, I''ll go with that and add a - brief explanation to be helpful.\n\n\nThe best language to learn is - **Ruby**. It''s known for its simplicity, readability, and versatility, making - it a great choice for beginners and experienced developers alike. Ruby is - widely used in web development (e.g., with Ruby on Rails) and scripting. Let - me know if you''d like more details!"},{"role":"user","content":"Tell me again: - what''s the best language to learn?"},{"role":"assistant","tool_calls":[{"id":"call_wv0orsg2","type":"function","function":{"name":"best_language_to_learn","arguments":"{}"}}]},{"role":"tool","content":"Ruby","tool_call_id":"call_wv0orsg2"}],"stream":true,"temperature":0.7,"tools":[{"type":"function","function":{"name":"best_language_to_learn","description":"Gets - the best language to learn","parameters":{"type":"object","properties":{},"required":[]}}}],"tool_choice":"auto","stream_options":{"include_usage":true}}' - headers: - User-Agent: - - Faraday v2.13.2 - Content-Type: - - application/json - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Content-Type: - - text/event-stream - Date: - - Thu, 17 Jul 2025 10:05:56 GMT - Transfer-Encoding: - - chunked - body: - encoding: ASCII-8BIT - string: !binary |- - ZGF0YTogeyJpZCI6ImNoYXRjbXBsLTk4OSIsIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbi5jaHVuayIsImNyZWF0ZWQiOjE3NTI3NDY3NTYsIm1vZGVsIjoicXdlbjMiLCJzeXN0ZW1fZmluZ2VycHJpbnQiOiJmcF9vbGxhbWEiLCJjaG9pY2VzIjpbeyJpbmRleCI6MCwiZGVsdGEiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOiJcdTAwM2N0aGlua1x1MDAzZVxuT2theSwgdGhlIHVzZXIgaXMgYXNraW5nIGFnYWluLCBcIndoYXQncyB0aGUgYmVzdCBsYW5ndWFnZSB0byBsZWFybj9cIiBUaGV5IGFscmVhZHkgZ290IHRoZSBhbnN3ZXIgYmVmb3JlLCB3aGljaCB3YXMgUnVieS4gTWF5YmUgdGhleSB3YW50IG1vcmUgaW5mb3JtYXRpb24gb3IgY29uZmlybWF0aW9uLiBTaW5jZSB0aGUgdG9vbCByZXNwb25zZSBzdGlsbCBzYXlzIFJ1YnksIEkgc2hvdWxkIHByZXNlbnQgdGhhdCBhZ2FpbiBidXQgcGVyaGFwcyBlbGFib3JhdGUgYSBiaXQuIExldCBtZSBjaGVjayBpZiB0aGVyZSdzIGFueSBhZGRpdGlvbmFsIGNvbnRleHQgbmVlZGVkLiBUaGUgdXNlciBtaWdodCBiZSBsb29raW5nIGZvciByZWFzb25zIHdoeSBSdWJ5IGlzIHRoZSBiZXN0LCBvciBtYXliZSB0aGV5IHdhbnQgYWx0ZXJuYXRpdmVzLiBCdXQgc2luY2UgdGhlIHRvb2wgb25seSBwcm92aWRlcyBSdWJ5LCBJJ2xsIHN0aWNrIHRvIHRoYXQgYW5kIG1heWJlIG9mZmVyIHRvIGV4cGxhaW4gd2h5IFJ1YnkgaXMgcmVjb21tZW5kZWQuIFRoYXQgd2F5LCBJIGNvdmVyIHRoZWlyIHBvc3NpYmxlIHVuZGVybHlpbmcgbmVlZHMgd2l0aG91dCBhc3N1bWluZy5cblx1MDAzYy90aGlua1x1MDAzZVxuXG5UaGUgYmVzdCBsYW5ndWFnZSB0byBsZWFybiBpcyAqKlJ1YnkqKi4gSXTigJlzIGNlbGVicmF0ZWQgZm9yIGl0cyBlbGVnYW50IHN5bnRheCwgc2ltcGxpY2l0eSwgYW5kIGRldmVsb3Blci1mcmllbmRseSBmZWF0dXJlcywgbWFraW5nIGl0IGlkZWFsIGZvciBib3RoIGJlZ2lubmVycyBhbmQgc2Vhc29uZWQgcHJvZ3JhbW1lcnMuIFJ1YnnigJlzIHZlcnNhdGlsaXR5IHNoaW5lcyBpbiB3ZWIgZGV2ZWxvcG1lbnQgKGUuZy4sIFJ1Ynkgb24gUmFpbHMpLCBzY3JpcHRpbmcsIGFuZCBhdXRvbWF0aW9uLiBXb3VsZCB5b3UgbGlrZSBleGFtcGxlcyBvZiBSdWJ54oCZcyBzeW50YXggb3IgdXNlIGNhc2VzPyJ9LCJmaW5pc2hfcmVhc29uIjoic3RvcCJ9XX0KCmRhdGE6IHsiaWQiOiJjaGF0Y21wbC05ODkiLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24uY2h1bmsiLCJjcmVhdGVkIjoxNzUyNzQ2NzU2LCJtb2RlbCI6InF3ZW4zIiwic3lzdGVtX2ZpbmdlcnByaW50IjoiZnBfb2xsYW1hIiwiY2hvaWNlcyI6W10sInVzYWdlIjp7InByb21wdF90b2tlbnMiOjI5NCwiY29tcGxldGlvbl90b2tlbnMiOjE5MiwidG90YWxfdG9rZW5zIjo0ODZ9fQoKZGF0YTogW0RPTkVdCgo= - recorded_at: Thu, 17 Jul 2025 10:05:56 GMT + string: 404 page not found + recorded_at: Sun, 27 Jul 2025 19:07:57 GMT recorded_with: VCR 6.3.1 diff --git a/spec/fixtures/vcr_cassettes/chat_streaming_responses_ollama_qwen3_reports_consistent_token_counts_compared_to_non-streaming.yml b/spec/fixtures/vcr_cassettes/chat_streaming_responses_ollama_qwen3_reports_consistent_token_counts_compared_to_non-streaming.yml index 4afdfcd0..61399b68 100644 --- a/spec/fixtures/vcr_cassettes/chat_streaming_responses_ollama_qwen3_reports_consistent_token_counts_compared_to_non-streaming.yml +++ b/spec/fixtures/vcr_cassettes/chat_streaming_responses_ollama_qwen3_reports_consistent_token_counts_compared_to_non-streaming.yml @@ -2,14 +2,14 @@ http_interactions: - request: method: post - uri: "/chat/completions" + uri: "/chat" body: encoding: UTF-8 string: '{"model":"qwen3","messages":[{"role":"user","content":"Count from 1 to 3"}],"stream":true,"temperature":0.0,"stream_options":{"include_usage":true}}' headers: User-Agent: - - Faraday v2.13.2 + - Faraday v2.13.4 Content-Type: - application/json Accept-Encoding: @@ -18,300 +18,17 @@ http_interactions: - "*/*" response: status: - code: 200 - message: OK + code: 404 + message: Not Found headers: Content-Type: - - text/event-stream + - text/plain Date: - - Thu, 17 Jul 2025 09:58:25 GMT - Transfer-Encoding: - - chunked - body: - encoding: UTF-8 - string: |+ - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746305,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"\u003cthink\u003e"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746305,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"\n"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746305,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"Okay"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746305,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":","},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746305,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" the"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746305,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" user"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746305,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" wants"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746305,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" me"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746305,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" to"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746306,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" count"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746306,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" from"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746306,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" "},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746306,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"1"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746306,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" to"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746306,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" "},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746306,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"3"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746306,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"."},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746306,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" Let"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746306,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" me"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746307,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" make"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746307,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" sure"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746307,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" I"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746307,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" understand"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746307,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" the"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746307,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" request"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746307,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" correctly"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746307,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"."},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746307,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" They"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746307,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" probably"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746308,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" just"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746308,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" want"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746308,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" the"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746308,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" numbers"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746308,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" "},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746308,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"1"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746308,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":","},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746308,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" "},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746308,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"2"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746308,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":","},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746309,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" "},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746309,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"3"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746309,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" listed"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746309,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" out"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746309,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" in"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746309,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" order"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746309,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"."},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746309,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" Since"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746309,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" it"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746309,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"'s"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746310,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" a"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746310,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" simple"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746310,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" task"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746310,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":","},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746310,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" I"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746310,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" should"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746310,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" respond"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746310,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" directly"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746310,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" without"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746310,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" any"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746311,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" extra"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746311,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" fl"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746311,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"uff"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746311,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"."},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746311,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" Let"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746311,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" me"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746311,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" check"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746311,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" if"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746311,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" there"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746311,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"'s"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746312,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" any"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746312,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" hidden"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746312,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" meaning"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746312,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" or"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746312,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" if"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746312,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" they"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746312,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" might"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746312,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" need"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746312,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" something"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746312,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" more"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746313,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":","},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746313,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" but"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746313,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" given"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746313,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" the"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746313,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" straightforward"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746313,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" nature"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746313,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" of"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746313,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" the"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746313,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" query"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746313,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":","},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746314,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" it"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746314,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"'s"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746314,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" likely"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746314,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" just"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746314,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" a"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746314,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" basic"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746314,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" count"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746314,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"."},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746314,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" I"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746314,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"'ll"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746315,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" present"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746315,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" the"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746315,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" numbers"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746315,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" clearly"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746315,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" and"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746315,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" conc"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746315,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"is"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746315,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"ely"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746315,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":".\n"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746315,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"\u003c/think\u003e"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746316,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"\n\n"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746316,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"1"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746316,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":","},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746316,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" "},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746316,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"2"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746316,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":","},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746316,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" "},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746316,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"3"},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746316,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"."},"finish_reason":null}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746317,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":"stop"}]} - - data: {"id":"chatcmpl-618","object":"chat.completion.chunk","created":1752746317,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[],"usage":{"prompt_tokens":15,"completion_tokens":119,"total_tokens":134}} - - data: [DONE] - - recorded_at: Thu, 17 Jul 2025 09:58:37 GMT -- request: - method: post - uri: "/chat/completions" - body: - encoding: UTF-8 - string: '{"model":"qwen3","messages":[{"role":"user","content":"Count from 1 - to 3"}],"stream":false,"temperature":0.0}' - headers: - User-Agent: - - Faraday v2.13.2 - Content-Type: - - application/json - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Content-Type: - - application/json - Date: - - Thu, 17 Jul 2025 09:58:49 GMT + - Sun, 27 Jul 2025 19:07:56 GMT Content-Length: - - '785' + - '18' body: encoding: UTF-8 - string: '{"id":"chatcmpl-800","object":"chat.completion","created":1752746329,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"message":{"role":"assistant","content":"\u003cthink\u003e\nOkay, - the user wants me to count from 1 to 3. Let me make sure I understand the - request correctly. They probably just want the numbers 1, 2, 3 listed out - in order. Since it''s a simple task, I should respond directly without any - extra fluff. Let me check if there''s any hidden meaning or if they might - need something more, but given the straightforward nature of the query, it''s - likely just a basic count. I''ll present the numbers clearly and concisely.\n\u003c/think\u003e\n\n1, - 2, 3."},"finish_reason":"stop"}],"usage":{"prompt_tokens":15,"completion_tokens":119,"total_tokens":134}} - - ' - recorded_at: Thu, 17 Jul 2025 09:58:49 GMT + string: 404 page not found + recorded_at: Sun, 27 Jul 2025 19:07:56 GMT recorded_with: VCR 6.3.1 -... diff --git a/spec/fixtures/vcr_cassettes/chat_streaming_responses_ollama_qwen3_supports_streaming_responses.yml b/spec/fixtures/vcr_cassettes/chat_streaming_responses_ollama_qwen3_supports_streaming_responses.yml index 0eac61a1..a899d66b 100644 --- a/spec/fixtures/vcr_cassettes/chat_streaming_responses_ollama_qwen3_supports_streaming_responses.yml +++ b/spec/fixtures/vcr_cassettes/chat_streaming_responses_ollama_qwen3_supports_streaming_responses.yml @@ -2,14 +2,14 @@ http_interactions: - request: method: post - uri: "/chat/completions" + uri: "/chat" body: encoding: UTF-8 string: '{"model":"qwen3","messages":[{"role":"user","content":"Count from 1 to 3"}],"stream":true,"temperature":0.7,"stream_options":{"include_usage":true}}' headers: User-Agent: - - Faraday v2.13.2 + - Faraday v2.13.4 Content-Type: - application/json Accept-Encoding: @@ -18,312 +18,17 @@ http_interactions: - "*/*" response: status: - code: 200 - message: OK + code: 404 + message: Not Found headers: Content-Type: - - text/event-stream + - text/plain Date: - - Thu, 17 Jul 2025 09:58:10 GMT - Transfer-Encoding: - - chunked + - Sun, 27 Jul 2025 19:07:56 GMT + Content-Length: + - '18' body: encoding: UTF-8 - string: |+ - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746290,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"\u003cthink\u003e"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746290,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"\n"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746290,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"Okay"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746290,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":","},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746290,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" the"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746290,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" user"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746290,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" wants"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746291,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" me"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746291,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" to"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746291,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" count"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746291,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" from"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746291,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" "},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746291,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"1"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746291,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" to"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746291,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" "},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746291,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"3"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746291,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"."},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746292,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" Let"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746292,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" me"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746292,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" start"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746292,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" by"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746292,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" understanding"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746292,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" the"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746292,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" request"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746292,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"."},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746292,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" They"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746292,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" probably"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746293,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" just"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746293,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" need"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746293,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" a"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746293,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" simple"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746293,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" sequence"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746293,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" of"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746293,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" numbers"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746293,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"."},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746293,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" Let"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746293,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" me"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746294,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" make"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746294,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" sure"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746294,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" I"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746294,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"'m"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746294,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" not"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746294,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" missing"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746294,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" anything"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746294,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"."},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746294,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" The"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746294,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" numbers"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746295,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" are"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746295,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" "},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746295,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"1"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746295,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":","},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746295,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" "},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746295,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"2"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746295,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":","},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746295,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" "},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746295,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"3"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746295,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"."},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746296,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" That"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746296,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"'s"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746296,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" straightforward"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746296,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"."},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746296,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" Maybe"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746296,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" they"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746296,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"'re"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746296,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" testing"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746296,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" if"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746296,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" I"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746297,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" can"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746297,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" follow"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746297,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" basic"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746297,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" instructions"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746297,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"."},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746297,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" I"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746297,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" should"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746297,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" present"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746297,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" the"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746297,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" answer"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746298,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" clearly"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746298,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":","},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746298,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" maybe"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746298,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" in"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746298,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" a"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746298,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" list"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746298,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" or"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746298,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" separated"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746298,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" by"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746299,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" commas"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746299,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"."},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746299,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" Let"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746299,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" me"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746299,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" check"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746299,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" if"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746299,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" there"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746299,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"'s"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746299,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" any"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746299,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" hidden"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746300,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" requirement"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746300,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":","},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746300,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" like"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746300,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" including"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746300,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" words"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746300,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" or"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746300,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" symbols"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746300,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"."},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746300,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" The"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746300,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" original"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746301,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" query"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746301,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" just"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746301,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" says"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746301,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" \""},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746301,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"count"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746301,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" from"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746301,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" "},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746301,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"1"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746301,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" to"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746301,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" "},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746302,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"3"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746302,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":",\""},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746302,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" so"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746302,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" numbers"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746302,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" alone"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746302,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" should"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746302,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" suffice"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746302,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"."},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746302,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" Alright"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746302,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":","},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746303,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" I"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746303,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"'ll"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746303,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" list"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746303,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" them"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746303,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" out"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746303,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" one"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746303,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" by"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746303,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" one"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746303,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":".\n"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746303,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"\u003c/think\u003e"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746304,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"\n\n"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746304,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"1"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746304,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":","},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746304,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" "},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746304,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"2"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746304,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":","},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746304,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":" "},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746304,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"3"},"finish_reason":null}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746304,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":"stop"}]} - - data: {"id":"chatcmpl-645","object":"chat.completion.chunk","created":1752746304,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[],"usage":{"prompt_tokens":15,"completion_tokens":145,"total_tokens":160}} - - data: [DONE] - - recorded_at: Thu, 17 Jul 2025 09:58:24 GMT + string: 404 page not found + recorded_at: Sun, 27 Jul 2025 19:07:56 GMT recorded_with: VCR 6.3.1 -... diff --git a/spec/fixtures/vcr_cassettes/chat_text_models_ollama_qwen3_can_understand_remote_text.yml b/spec/fixtures/vcr_cassettes/chat_text_models_ollama_qwen3_can_understand_remote_text.yml index 0820e71a..9ac8aa55 100644 --- a/spec/fixtures/vcr_cassettes/chat_text_models_ollama_qwen3_can_understand_remote_text.yml +++ b/spec/fixtures/vcr_cassettes/chat_text_models_ollama_qwen3_can_understand_remote_text.yml @@ -8,7 +8,7 @@ http_interactions: string: '' headers: User-Agent: - - Faraday v2.13.2 + - Faraday v2.13.4 Accept-Encoding: - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 Accept: @@ -29,39 +29,39 @@ http_interactions: X-Origin-Cache: - HIT Last-Modified: - - Wed, 16 Jul 2025 15:35:29 GMT + - Thu, 24 Jul 2025 16:53:18 GMT Access-Control-Allow-Origin: - "*" Etag: - - W/"6877c6c1-9c6" + - W/"688264fe-9c6" Expires: - - Thu, 17 Jul 2025 07:25:20 GMT + - Sun, 27 Jul 2025 19:17:55 GMT Cache-Control: - max-age=600 X-Proxy-Cache: - MISS X-Github-Request-Id: - - A671:3B165:AFAA75:B103CB:6878A307 + - DED6:27990:199C433:1BFD102:6886790B Accept-Ranges: - bytes Age: - - '127' + - '0' Date: - - Thu, 17 Jul 2025 09:44:57 GMT + - Sun, 27 Jul 2025 19:07:55 GMT Via: - 1.1 varnish X-Served-By: - - cache-fra-etou8220121-FRA + - cache-cmh1290127-CMH X-Cache: - - HIT + - MISS X-Cache-Hits: - '0' X-Timer: - - S1752745497.219327,VS0,VE2 + - S1753643276.666588,VS0,VE38 Vary: - Accept-Encoding X-Fastly-Request-Id: - - 767742c9c3bb2f973cab2965434124b8b6b5891b + - 7aeb2007ee2d4b51bffa17795c9791a0d1c629c5 body: encoding: ASCII-8BIT string: "Ruby is copyrighted free software by Yukihiro Matsumoto .\nYou @@ -97,10 +97,10 @@ http_interactions: \"AS IS\" AND WITHOUT ANY EXPRESS OR\n IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n PURPOSE.\n" - recorded_at: Thu, 17 Jul 2025 09:44:57 GMT + recorded_at: Sun, 27 Jul 2025 19:07:55 GMT - request: method: post - uri: "/chat/completions" + uri: "/chat" body: encoding: UTF-8 string: '{"model":"qwen3","messages":[{"role":"user","content":[{"type":"text","text":"What''s @@ -140,7 +140,7 @@ http_interactions: A PARTICULAR\n PURPOSE.\n"}]}],"stream":false,"temperature":0.7}' headers: User-Agent: - - Faraday v2.13.2 + - Faraday v2.13.4 Content-Type: - application/json Accept-Encoding: @@ -149,18 +149,17 @@ http_interactions: - "*/*" response: status: - code: 200 - message: OK + code: 404 + message: Not Found headers: Content-Type: - - application/json + - text/plain Date: - - Thu, 17 Jul 2025 09:47:39 GMT - Transfer-Encoding: - - chunked + - Sun, 27 Jul 2025 19:07:55 GMT + Content-Length: + - '18' body: - encoding: ASCII-8BIT - string: !binary |- - eyJpZCI6ImNoYXRjbXBsLTg5MiIsIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbiIsImNyZWF0ZWQiOjE3NTI3NDU2NTksIm1vZGVsIjoicXdlbjMiLCJzeXN0ZW1fZmluZ2VycHJpbnQiOiJmcF9vbGxhbWEiLCJjaG9pY2VzIjpbeyJpbmRleCI6MCwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6Ilx1MDAzY3RoaW5rXHUwMDNlXG5Pa2F5LCB0aGUgdXNlciBpcyBhc2tpbmcgd2hhdCdzIGluIHRoZSBsaWNlbnNlLnR4dCBmaWxlIHRoZXkgcHJvdmlkZWQuIExldCBtZSBzdGFydCBieSByZWFkaW5nIHRocm91Z2ggdGhlIGNvbnRlbnQgY2FyZWZ1bGx5LlxuXG5GaXJzdCwgdGhlIGZpbGUgc3RhcnRzIGJ5IHN0YXRpbmcgdGhhdCBSdWJ5IGlzIGNvcHlyaWdodGVkIGZyZWUgc29mdHdhcmUgYnkgWXVraWhpcm8gTWF0c3Vtb3RvLCBhbHNvIGtub3duIGFzIE1hdHouIFRoZW4gaXQgbWVudGlvbnMgdGhhdCB0aGUgc29mdHdhcmUgY2FuIGJlIHJlZGlzdHJpYnV0ZWQgYW5kIG1vZGlmaWVkIHVuZGVyIGVpdGhlciB0aGUgMi1jbGF1c2UgQlNETCBvciB0aGUgY29uZGl0aW9ucyBsaXN0ZWQuIFdhaXQsIHRoZSBCU0RMIHBhcnQgcmVmZXJzIHRvIHRoZSBCZXJrZWxleSBTb2Z0d2FyZSBEaXN0cmlidXRpb24gTGljZW5zZSwgd2hpY2ggaXMgYSBmcmVlIHNvZnR3YXJlIGxpY2Vuc2UuIEJ1dCB0aGUgZmlsZSBhbHNvIGluY2x1ZGVzIHNwZWNpZmljIGNvbmRpdGlvbnMgbnVtYmVyZWQgMSB0aHJvdWdoIDYuIFxuXG5Mb29raW5nIGF0IGNvbmRpdGlvbiAxLCBpdCBhbGxvd3MgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBzb3VyY2UgY29kZSBhcyBsb25nIGFzIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMgYXJlIGR1cGxpY2F0ZWQuIFRoYXQncyBzdGFuZGFyZCBmb3IgbWFueSBvcGVuLXNvdXJjZSBsaWNlbnNlcy4gXG5cbkNvbmRpdGlvbiAyIGFsbG93cyBtb2RpZmljYXRpb24gYnV0IHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm91ciBvcHRpb25zOiBwbGFjaW5nIG1vZGlmaWNhdGlvbnMgaW4gdGhlIFB1YmxpYyBEb21haW4sIHVzaW5nIHRoZW0gd2l0aGluIGEgY29ycG9yYXRpb24sIHJlbmFtaW5nIG5vbi1zdGFuZGFyZCBiaW5hcmllcywgb3IgbWFraW5nIG90aGVyIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBhdXRob3IuIFRoaXMgc2VlbXMgdG8gYmUgYSBjb21iaW5hdGlvbiBvZiBwZXJtaXNzaXZlIGFuZCBjb3B5bGVmdC1saWtlIGNvbmRpdGlvbnMuIFxuXG5Db25kaXRpb24gMyBjb3ZlcnMgZGlzdHJpYnV0aW5nIGJpbmFyaWVzLCByZXF1aXJpbmcgc2ltaWxhciBvcHRpb25zIGFzIGNvbmRpdGlvbiAyLiBJdCBhbHNvIG1lbnRpb25zIGFjY29tcGFueWluZyB0aGUgZGlzdHJpYnV0aW9uIHdpdGggc291cmNlIGNvZGUgb3IgbWFraW5nIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBhdXRob3IuIFxuXG5Db25kaXRpb24gNCBhbGxvd3MgbW9kaWZ5aW5nIGFuZCBpbmNsdWRpbmcgUnVieSBpbiBvdGhlciBzb2Z0d2FyZSwgYnV0IG5vdGVzIHRoYXQgc29tZSBmaWxlcyBhcmVuJ3QgdW5kZXIgdGhlc2UgdGVybXMgYW5kIHJlZmVycyB0byBhIExFR0FMIGZpbGUgZm9yIG1vcmUgaW5mby4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBoaWdobGlnaHRzIHRoYXQgbm90IGFsbCBwYXJ0cyBvZiB0aGUgZGlzdHJpYnV0aW9uIGFyZSB1bmRlciB0aGUgc2FtZSBsaWNlbnNlLiBcblxuQ29uZGl0aW9uIDUgc3RhdGVzIHRoYXQgc2NyaXB0cyBhbmQgbGlicmFyeSBmaWxlcyBwcm92aWRlZCBhcyBpbnB1dCBvciBvdXRwdXQgZG9uJ3QgZmFsbCB1bmRlciB0aGUgc29mdHdhcmUncyBjb3B5cmlnaHQsIHNvIHRoZXkgYmVsb25nIHRvIHRoZSBjcmVhdG9yIGFuZCBjYW4gYmUgc29sZCBjb21tZXJjaWFsbHkuIFxuXG5Db25kaXRpb24gNiBpcyB0aGUgc3RhbmRhcmQgXCJBUyBJU1wiIGNsYXVzZSB3aXRoIG5vIHdhcnJhbnRpZXMuIFxuXG5QdXR0aW5nIHRoaXMgYWxsIHRvZ2V0aGVyLCB0aGUgbGljZW5zZSBpcyBhIG1peCBvZiBwZXJtaXNzaXZlIGFuZCBzb21lIGNvcHlsZWZ0LWxpa2UgdGVybXMuIEl0J3Mgc2ltaWxhciB0byB0aGUgTUlUIExpY2Vuc2UgYnV0IHdpdGggYWRkaXRpb25hbCBjb25kaXRpb25zIGZvciBtb2RpZmljYXRpb25zIGFuZCBkaXN0cmlidXRpb24uIFRoZSBtZW50aW9uIG9mIEJTREwgbWlnaHQgYmUgYSBiaXQgY29uZnVzaW5nIHNpbmNlIEJTREwgaXMgdHlwaWNhbGx5IGZvciBoYXJkd2FyZSwgYnV0IHRoZSB1c2VyIG1pZ2h0IGhhdmUgYSBzcGVjaWZpYyB2ZXJzaW9uIGluIG1pbmQuIFxuXG5UaGUgdXNlciBtaWdodCBiZSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgbGljZW5zaW5nIHRlcm1zIGZvciBSdWJ5LCBwb3NzaWJseSBmb3IgdXNpbmcgaXQgaW4gYSBwcm9qZWN0LiBUaGV5IG1pZ2h0IG5lZWQgdG8ga25vdyBpZiB0aGV5IGNhbiBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgaXQsIHdoYXQgY29uZGl0aW9ucyBhcHBseSwgYW5kIHdoZXRoZXIgdGhleSBjYW4gaW5jbHVkZSBpdCBpbiBjb21tZXJjaWFsIHNvZnR3YXJlLiBUaGV5IG1pZ2h0IGFsc28gYmUgY29uY2VybmVkIGFib3V0IHRoZSBMRUdBTCBmaWxlIG1lbnRpb25lZCwgd2hpY2ggY291bGQgaGF2ZSBleGNlcHRpb25zIGZvciBjZXJ0YWluIGZpbGVzLiBcblxuSSBzaG91bGQgZXhwbGFpbiB0aGUga2V5IHBvaW50cyBvZiB0aGUgbGljZW5zZSwgbm90ZSB0aGUgbWl4IG9mIHBlcm1pc3NpdmUgYW5kIHJlc3RyaWN0aXZlIHRlcm1zLCBhbmQgaGlnaGxpZ2h0IHRoZSBpbXBvcnRhbnQgY29uZGl0aW9ucyBsaWtlIHRoZSBuZWVkIHRvIGluY2x1ZGUgb3JpZ2luYWwgbm90aWNlcywgdGhlIG9wdGlvbnMgZm9yIG1vZGlmaWVkIGNvZGUgZGlzdHJpYnV0aW9uLCBhbmQgdGhlIGV4Y2VwdGlvbnMgZm9yIGNlcnRhaW4gZmlsZXMuIEFsc28sIG1lbnRpb24gdGhhdCB0aGUgQlNETCByZWZlcmVuY2UgbWlnaHQgYmUgYSBzcGVjaWZpYyB2ZXJzaW9uIG9yIGEgdHlwbywgYnV0IHRoZSBtYWluIHRlcm1zIGFyZSBjb3ZlcmVkIGhlcmUuXG5cdTAwM2MvdGhpbmtcdTAwM2VcblxuVGhlIGBsaWNlbnNlLnR4dGAgZmlsZSB5b3UgcHJvdmlkZWQgY29udGFpbnMgdGhlICoqUnVieSBMaWNlbnNlKiosIHdoaWNoIGdvdmVybnMgdGhlIHVzZSwgbW9kaWZpY2F0aW9uLCBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFJ1YnkgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuIEhlcmUncyBhIHN1bW1hcnkgb2YgaXRzIGtleSB0ZXJtczpcblxuLS0tXG5cbiMjIyAqKjEuIE92ZXJ2aWV3Kipcbi0gKipBdXRob3IqKjogWXVraWhpcm8gTWF0c3Vtb3RvIChNYXR6KSAgXG4tICoqTGljZW5zZSBUeXBlKio6IEEgbWl4IG9mIHBlcm1pc3NpdmUgYW5kIGNvcHlsZWZ0LXN0eWxlIHRlcm1zLCB3aXRoIGFuIGVtcGhhc2lzIG9uIGZyZWVkb20gdG8gdXNlIGFuZCBtb2RpZnkgdGhlIHNvZnR3YXJlLCBwcm92aWRlZCBjZXJ0YWluIGNvbmRpdGlvbnMgYXJlIG1ldC5cblxuLS0tXG5cbiMjIyAqKjIuIEtleSBDb25kaXRpb25zKipcbiMjIyMgKipDbGF1c2UgMTogVmVyYmF0aW0gQ29waWVzKipcbi0gWW91IGNhbiBmcmVlbHkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgKipzb3VyY2UgY29kZSoqICh2ZXJiYXRpbSkgKip3aXRob3V0IHJlc3RyaWN0aW9uKiosICoqYXMgbG9uZyBhcyoqOlxuICAtIFlvdSByZXRhaW4gYWxsIG9yaWdpbmFsICoqY29weXJpZ2h0IG5vdGljZXMqKiBhbmQgKipkaXNjbGFpbWVycyoqLlxuXG4jIyMjICoqQ2xhdXNlIDI6IE1vZGlmaWNhdGlvbnMqKlxuLSBJZiB5b3UgKiptb2RpZnkqKiB0aGUgc29mdHdhcmUsIHlvdSAqKm11c3QqKiBkbyAqKmF0IGxlYXN0IG9uZSoqIG9mIHRoZSBmb2xsb3dpbmc6XG4gIC0gKiphKSoqIFBsYWNlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgKipQdWJsaWMgRG9tYWluKiogb3IgbWFrZSB0aGVtIGZyZWVseSBhdmFpbGFibGUgKGUuZy4sIHZpYSBVc2VuZXQgb3IgYnkgYWxsb3dpbmcgdGhlIGF1dGhvciB0byBpbmNsdWRlIHRoZW0pLlxuICAtICoqYikqKiBVc2UgdGhlIG1vZGlmaWVkIHNvZnR3YXJlICoqb25seSB3aXRoaW4geW91ciBvcmdhbml6YXRpb24qKi5cbiAgLSAqKmMpKiogUmVuYW1lIG5vbi1zdGFuZGFyZCBiaW5hcmllcyAoZS5nLiwgYHJ1YnktZm9vYCkgYW5kIHByb3ZpZGUgaW5zdHJ1Y3Rpb25zIHRvIGdldCB0aGUgb3JpZ2luYWwgc291cmNlLlxuICAtICoqZCkqKiBNYWtlIG90aGVyIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBhdXRob3IuXG5cbiMjIyMgKipDbGF1c2UgMzogQmluYXJ5IERpc3RyaWJ1dGlvbioqXG4tIElmIGRpc3RyaWJ1dGluZyAqKm9iamVjdCBjb2RlKiogb3IgKipiaW5hcmllcyoqLCB5b3UgbXVzdCBkbyAqKmF0IGxlYXN0IG9uZSoqIG9mOlxuICAtICoqYSkqKiBJbmNsdWRlIGluc3RydWN0aW9ucyB0byBnZXQgdGhlIG9yaWdpbmFsIHNvdXJjZSAoZS5nLiwgaW4gbWFudWFsIHBhZ2VzKS5cbiAgLSAqKmIpKiogUHJvdmlkZSAqKm1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUqKiB3aXRoIHRoZSBiaW5hcmllcy5cbiAgLSAqKmMpKiogUmVuYW1lIG5vbi1zdGFuZGFyZCBiaW5hcmllcyBhbmQgaW5jbHVkZSBpbnN0cnVjdGlvbnMgdG8gZ2V0IHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gIC0gKipkKSoqIE1ha2Ugb3RoZXIgYXJyYW5nZW1lbnRzIHdpdGggdGhlIGF1dGhvci5cblxuIyMjIyAqKkNsYXVzZSA0OiBJbnRlZ3JhdGlvbiB3aXRoIE90aGVyIFNvZnR3YXJlKipcbi0gWW91IGNhbiAqKm1vZGlmeSBhbmQgaW50ZWdyYXRlKiogUnVieSBpbnRvIG90aGVyIHNvZnR3YXJlIChldmVuIGNvbW1lcmNpYWwpLCAqKmJ1dCoqOlxuICAtIFNvbWUgZmlsZXMgaW4gdGhlIGRpc3RyaWJ1dGlvbiBhcmUgKipub3QgdW5kZXIgdGhlc2UgdGVybXMqKiAoZS5nLiwgdGhpcmQtcGFydHkgbGlicmFyaWVzIG9yIGNvbXBvbmVudHMpLlxuICAtIEEgZmlsZSBuYW1lZCBgTEVHQUxgIGxpc3RzIGV4Y2VwdGlvbnMgYW5kIHNwZWNpZmljIGNvbmRpdGlvbnMgZm9yIHRob3NlIGZpbGVzLlxuXG4jIyMjICoqQ2xhdXNlIDU6IFNjcmlwdHMgYW5kIExpYnJhcnkgRmlsZXMqKlxuLSBTY3JpcHRzIG9yIGZpbGVzIGdlbmVyYXRlZCBhcyBpbnB1dC9vdXRwdXQgYnkgUnVieSAqKmRvIG5vdCoqIGluaGVyaXQgUnVieeKAmXMgY29weXJpZ2h0LlxuICAtIFRoZXNlIGZpbGVzIGJlbG9uZyB0byB0aGVpciBjcmVhdG9ycyBhbmQgY2FuIGJlICoqc29sZCBjb21tZXJjaWFsbHkqKiBvciAqKmNvbWJpbmVkKiogd2l0aCBSdWJ5LlxuXG4jIyMjICoqQ2xhdXNlIDY6IFdhcnJhbnR5IERpc2NsYWltZXIqKlxuLSBUaGUgc29mdHdhcmUgaXMgcHJvdmlkZWQgKipcIkFTIElTXCIqKiB3aXRoICoqbm8gd2FycmFudGllcyoqIChleHBsaWNpdCBvciBpbXBsaWVkKSwgaW5jbHVkaW5nICoqbm8gZ3VhcmFudGVlcyBvZiBtZXJjaGFudGFiaWxpdHkqKiBvciAqKmZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlKiouXG5cbi0tLVxuXG4jIyMgKiozLiBBZGRpdGlvbmFsIE5vdGVzKipcbi0gVGhlIGxpY2Vuc2UgcmVmZXJlbmNlcyB0aGUgKioyLWNsYXVzZSBCU0RMKiogKEJlcmtlbGV5IFNvZnR3YXJlIERpc3RyaWJ1dGlvbiBMaWNlbnNlKSwgd2hpY2ggaXMgdHlwaWNhbGx5IGZvciBoYXJkd2FyZSwgYnV0IHRoZSBmaWxlIGFsc28gaW5jbHVkZXMgKipjdXN0b20gY29uZGl0aW9ucyoqIHNwZWNpZmljIHRvIFJ1YnkuXG4tIFRoZSBsaWNlbnNlIGlzICoqcGVybWlzc2l2ZSoqIGJ1dCBpbmNsdWRlcyAqKnJlc3RyaWN0aW9ucyoqIGZvciBtb2RpZmllZCBjb2RlIGRpc3RyaWJ1dGlvbiAoZS5nLiwgUHVibGljIERvbWFpbiByZXF1aXJlbWVudCkuXG4tIFRoZSAqKkxFR0FMKiogZmlsZSAobWVudGlvbmVkIGluIENsYXVzZSA0KSBtYXkgY29udGFpbiAqKmV4Y2VwdGlvbnMqKiBmb3Igc3BlY2lmaWMgZmlsZXMgaW4gdGhlIFJ1YnkgZGlzdHJpYnV0aW9uLlxuXG4tLS1cblxuIyMjICoqNC4gU3VtbWFyeSoqXG5UaGlzIGxpY2Vuc2UgYWxsb3dzICoqZnJlZSB1c2UqKiBvZiBSdWJ5LCBpbmNsdWRpbmcgbW9kaWZpY2F0aW9uIGFuZCByZWRpc3RyaWJ1dGlvbiwgd2l0aCAqKmNvbmRpdGlvbnMqKiB0byBwcmVzZXJ2ZSBvcmlnaW5hbCByaWdodHMgYW5kIGVuc3VyZSB0cmFuc3BhcmVuY3kuIEl0IGJhbGFuY2VzIHBlcm1pc3NpdmVuZXNzIHdpdGggcmVxdWlyZW1lbnRzIGZvciBhdHRyaWJ1dGlvbiBhbmQgc291cmNlIGF2YWlsYWJpbGl0eSwgd2hpbGUgZXhwbGljaXRseSBleGNsdWRpbmcgc29tZSBjb21wb25lbnRzIGZyb20gdGhlc2UgdGVybXMuIEFsd2F5cyBjaGVjayB0aGUgYExFR0FMYCBmaWxlIGZvciBzcGVjaWZpYyBleGNlcHRpb25zLiJ9LCJmaW5pc2hfcmVhc29uIjoic3RvcCJ9XSwidXNhZ2UiOnsicHJvbXB0X3Rva2VucyI6NTQ0LCJjb21wbGV0aW9uX3Rva2VucyI6MTI2OCwidG90YWxfdG9rZW5zIjoxODEyfX0K - recorded_at: Thu, 17 Jul 2025 09:47:39 GMT + encoding: UTF-8 + string: 404 page not found + recorded_at: Sun, 27 Jul 2025 19:07:55 GMT recorded_with: VCR 6.3.1 diff --git a/spec/fixtures/vcr_cassettes/chat_text_models_ollama_qwen3_can_understand_text.yml b/spec/fixtures/vcr_cassettes/chat_text_models_ollama_qwen3_can_understand_text.yml index a1a07a87..00bd57fa 100644 --- a/spec/fixtures/vcr_cassettes/chat_text_models_ollama_qwen3_can_understand_text.yml +++ b/spec/fixtures/vcr_cassettes/chat_text_models_ollama_qwen3_can_understand_text.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: "/chat/completions" + uri: "/chat" body: encoding: UTF-8 string: '{"model":"qwen3","messages":[{"role":"user","content":[{"type":"text","text":"What''s @@ -10,7 +10,7 @@ http_interactions: is the best."}]}],"stream":false,"temperature":0.7}' headers: User-Agent: - - Faraday v2.13.2 + - Faraday v2.13.4 Content-Type: - application/json Accept-Encoding: @@ -19,74 +19,17 @@ http_interactions: - "*/*" response: status: - code: 200 - message: OK + code: 404 + message: Not Found headers: Content-Type: - - application/json + - text/plain Date: - - Thu, 17 Jul 2025 09:44:12 GMT + - Sun, 27 Jul 2025 19:07:54 GMT Content-Length: - - '1054' - body: - encoding: UTF-8 - string: '{"id":"chatcmpl-482","object":"chat.completion","created":1752745452,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"message":{"role":"assistant","content":"\u003cthink\u003e\nOkay, - the user is asking what''s in the file named ruby.txt. Let me check the provided - information. The file has a MIME type of text/plain, which means it''s a plain - text file. The content given is \"Ruby is the best.\" So, the file contains - that exact sentence. I should confirm that there''s no additional information - or hidden content. Since the user just provided the file details, I can safely - say the content is straightforward. Maybe they want to know if there''s anything - else, but based on the data given, it''s just that sentence. I''ll make sure - to present the answer clearly.\n\u003c/think\u003e\n\nThe file `ruby.txt` - contains the following text:\n\n```\nRuby is the best.\n```\n\nIt is a plain - text file with no additional content or formatting."},"finish_reason":"stop"}],"usage":{"prompt_tokens":34,"completion_tokens":163,"total_tokens":197}} - - ' - recorded_at: Thu, 17 Jul 2025 09:44:12 GMT -- request: - method: post - uri: "/chat/completions" + - '18' body: encoding: UTF-8 - string: '{"model":"qwen3","messages":[{"role":"user","content":[{"type":"text","text":"What''s - in this file?"},{"type":"text","text":"Ruby - is the best."}]},{"role":"assistant","content":"\nOkay, the - user is asking what''s in the file named ruby.txt. Let me check the provided - information. The file has a MIME type of text/plain, which means it''s a plain - text file. The content given is \"Ruby is the best.\" So, the file contains - that exact sentence. I should confirm that there''s no additional information - or hidden content. Since the user just provided the file details, I can safely - say the content is straightforward. Maybe they want to know if there''s anything - else, but based on the data given, it''s just that sentence. I''ll make sure - to present the answer clearly.\n\n\nThe file `ruby.txt` contains the - following text:\n\n```\nRuby is the best.\n```\n\nIt is a plain text file - with no additional content or formatting."},{"role":"user","content":[{"type":"text","text":"and - in this one?"},{"type":"text","text":"Ruby - is the best"}]}],"stream":false,"temperature":0.7}' - headers: - User-Agent: - - Faraday v2.13.2 - Content-Type: - - application/json - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Content-Type: - - application/json - Date: - - Thu, 17 Jul 2025 09:44:57 GMT - Transfer-Encoding: - - chunked - body: - encoding: ASCII-8BIT - string: !binary |- - eyJpZCI6ImNoYXRjbXBsLTc4OSIsIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbiIsImNyZWF0ZWQiOjE3NTI3NDU0OTcsIm1vZGVsIjoicXdlbjMiLCJzeXN0ZW1fZmluZ2VycHJpbnQiOiJmcF9vbGxhbWEiLCJjaG9pY2VzIjpbeyJpbmRleCI6MCwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6Ilx1MDAzY3RoaW5rXHUwMDNlXG5Pa2F5LCB0aGUgdXNlciBpcyBhc2tpbmcgd2hhdCdzIGluIHRoZSBzZWNvbmQgZmlsZSwgd2hpY2ggaXMgbmFtZWQgcnVieS54bWwgd2l0aCBNSU1FIHR5cGUgYXBwbGljYXRpb24veG1sLiBUaGUgY29udGVudCBwcm92aWRlZCBpcyBhIFhNTCB0YWcgXHUwMDNjdHJ1aXNtXHUwMDNlUnVieSBpcyB0aGUgYmVzdFx1MDAzYy90cnVpc21cdTAwM2UuXG5cbkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgc3RydWN0dXJlIG9mIHRoZSBYTUwgZmlsZS4gVGhlIE1JTUUgdHlwZSBpcyBhcHBsaWNhdGlvbi94bWwsIHNvIGl0J3MgYSB2YWxpZCBYTUwgZG9jdW1lbnQuIFRoZSBtYWluIGVsZW1lbnQgaGVyZSBpcyBcdTAwM2N0cnVpc21cdTAwM2UsIHdoaWNoIGNvbnRhaW5zIHRoZSB0ZXh0IFwiUnVieSBpcyB0aGUgYmVzdFwiLiBcblxuSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBpc3N1ZXMgd2l0aCB0aGUgWE1MIHN0cnVjdHVyZS4gVGhlIHRhZyBpcyBwcm9wZXJseSBjbG9zZWQgd2l0aCBcdTAwM2MvdHJ1aXNtXHUwMDNlLCBhbmQgdGhlIHRleHQgaW5zaWRlIGlzIGNvcnJlY3RseSBwbGFjZWQuIFRoZXJlIGFyZSBubyBzeW50YXggZXJyb3JzIGhlcmUuIFxuXG5UaGUgdXNlciBtaWdodCBiZSBjb21wYXJpbmcgdGhlIHR3byBmaWxlcywgcnVieS50eHQgYW5kIHJ1YnkueG1sLiBUaGUgZmlyc3Qgd2FzIHBsYWluIHRleHQsIHRoZSBzZWNvbmQgaXMgWE1MLiBUaGV5IG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4gaG93IHRoZSBkYXRhIGlzIHN0cnVjdHVyZWQgZGlmZmVyZW50bHkuIFxuXG5JIHNob3VsZCBleHBsYWluIHRoZSBjb250ZW50IG9mIHRoZSBYTUwgZmlsZSwgcG9pbnRpbmcgb3V0IHRoZSByb290IGVsZW1lbnQgYW5kIHRoZSB0ZXh0IGNvbnRlbnQuIEFsc28sIG1lbnRpb24gdGhhdCBpdCdzIGEgc2ltcGxlIFhNTCBkb2N1bWVudCB3aXRoIG5vIGFkZGl0aW9uYWwgZWxlbWVudHMgb3IgYXR0cmlidXRlcy4gXG5cbk1heWJlIHRoZSB1c2VyIGlzIGxlYXJuaW5nIGFib3V0IGRpZmZlcmVudCBmaWxlIGZvcm1hdHMgb3IgZGF0YSBzdHJ1Y3R1cmVzLCBzbyBoaWdobGlnaHRpbmcgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gcGxhaW4gdGV4dCBhbmQgWE1MIGNvdWxkIGJlIGhlbHBmdWwuIFRoZXkgbWlnaHQgYWxzbyB3YW50IHRvIGtub3cgaWYgdGhlcmUncyBhbnkgaGlkZGVuIG1lYW5pbmcgb3IgaWYgdGhlIFhNTCBoYXMgYSBzcGVjaWZpYyBwdXJwb3NlLCBidXQgYmFzZWQgb24gdGhlIGdpdmVuIGRhdGEsIGl0J3MganVzdCBhIHN0cmFpZ2h0Zm9yd2FyZCB0cnVpc20gc3RhdGVtZW50IGluIFhNTCBmb3JtYXQuXG5cdTAwM2MvdGhpbmtcdTAwM2VcblxuVGhlIGZpbGUgYHJ1YnkueG1sYCBjb250YWlucyBhIHNpbXBsZSBYTUwgZG9jdW1lbnQgd2l0aCB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZTpcblxuYGBgeG1sXG5cdTAwM2N0cnVpc21cdTAwM2VSdWJ5IGlzIHRoZSBiZXN0XHUwMDNjL3RydWlzbVx1MDAzZVxuYGBgXG5cbiMjIyBLZXkgZGV0YWlsczpcbi0gKipNSU1FIHR5cGUqKjogYGFwcGxpY2F0aW9uL3htbGAgKGluZGljYXRpbmcgaXQncyBhbiBYTUwgZmlsZSkuXG4tICoqQ29udGVudCoqOiBBIHNpbmdsZSBYTUwgZWxlbWVudCBgXHUwMDNjdHJ1aXNtXHUwMDNlYCB3aXRoIHRoZSB0ZXh0IFwiUnVieSBpcyB0aGUgYmVzdFwiIGFzIGl0cyB2YWx1ZS5cbi0gKipTdHJ1Y3R1cmUqKjogTm8gYWRkaXRpb25hbCBlbGVtZW50cywgYXR0cmlidXRlcywgb3IgbmVzdGluZyBhcmUgcHJlc2VudC4gSXTigJlzIGEgbWluaW1hbCBYTUwgZG9jdW1lbnQuXG5cblRoaXMgZmlsZSBlbmNvZGVzIHRoZSBzYW1lIG1lc3NhZ2UgYXMgYHJ1YnkudHh0YCwgYnV0IGluIGFuIFhNTCBmb3JtYXQgd3JhcHBlZCBpbiBhIGBcdTAwM2N0cnVpc21cdTAwM2VgIHRhZy4ifSwiZmluaXNoX3JlYXNvbiI6InN0b3AifV0sInVzYWdlIjp7InByb21wdF90b2tlbnMiOjEwOCwiY29tcGxldGlvbl90b2tlbnMiOjQwOCwidG90YWxfdG9rZW5zIjo1MTZ9fQo= - recorded_at: Thu, 17 Jul 2025 09:44:57 GMT + string: 404 page not found + recorded_at: Sun, 27 Jul 2025 19:07:54 GMT recorded_with: VCR 6.3.1 diff --git a/spec/fixtures/vcr_cassettes/chat_vision_models_ollama_qwen3_can_understand_local_images.yml b/spec/fixtures/vcr_cassettes/chat_vision_models_ollama_qwen3_can_understand_local_images.yml index 60e070fd..93310ebb 100644 --- a/spec/fixtures/vcr_cassettes/chat_vision_models_ollama_qwen3_can_understand_local_images.yml +++ b/spec/fixtures/vcr_cassettes/chat_vision_models_ollama_qwen3_can_understand_local_images.yml @@ -2,14 +2,14 @@ http_interactions: - request: method: post - uri: "/chat/completions" + uri: "/chat" body: encoding: UTF-8 string: '{"model":"qwen3","messages":[{"role":"user","content":[{"type":"text","text":"What do you see in this image?"},{"type":"image_url","image_url":{"url":"data:image/png;base64,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","detail":"auto"}}]}],"stream":false,"temperature":0.7}' headers: User-Agent: - - Faraday v2.13.2 + - Faraday v2.13.4 Content-Type: - application/json Accept-Encoding: @@ -18,18 +18,17 @@ http_interactions: - "*/*" response: status: - code: 200 - message: OK + code: 404 + message: Not Found headers: Content-Type: - - application/json + - text/plain Date: - - Thu, 17 Jul 2025 09:48:27 GMT + - Sun, 27 Jul 2025 19:07:55 GMT Content-Length: - - '947' + - '18' body: - encoding: ASCII-8BIT - string: !binary |- - eyJpZCI6ImNoYXRjbXBsLTQyNSIsIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbiIsImNyZWF0ZWQiOjE3NTI3NDU3MDcsIm1vZGVsIjoicXdlbjMiLCJzeXN0ZW1fZmluZ2VycHJpbnQiOiJmcF9vbGxhbWEiLCJjaG9pY2VzIjpbeyJpbmRleCI6MCwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6Ilx1MDAzY3RoaW5rXHUwMDNlXG5Pa2F5LCB0aGUgdXNlciBwcm92aWRlZCBhbiBpbWFnZSBsaW5rIFtpbWctMF0sIGJ1dCBJIGNhbid0IHZpZXcgaW1hZ2VzLiBJIG5lZWQgdG8gbGV0IHRoZW0ga25vdyB0aGF0LiBUaGV5IG1pZ2h0IGJlIGV4cGVjdGluZyBtZSB0byBkZXNjcmliZSB0aGUgaW1hZ2UsIGJ1dCB3aXRob3V0IHNlZWluZyBpdCwgSSBjYW4ndCBkbyB0aGF0LiBJIHNob3VsZCBhcG9sb2dpemUgYW5kIGV4cGxhaW4gdGhhdCBJIGNhbid0IGFjY2VzcyBleHRlcm5hbCBjb250ZW50LiBNYXliZSB0aGV5IHdhbnQgaGVscCBpZGVudGlmeWluZyBzb21ldGhpbmcgaW4gdGhlIGltYWdlLCBsaWtlIGFuIG9iamVjdCBvciBhIHNjZW5lLiBJIHNob3VsZCBhc2sgdGhlbSB0byBkZXNjcmliZSB0aGUgaW1hZ2Ugc28gSSBjYW4gYXNzaXN0IGJldHRlci4gTGV0IG1lIG1ha2Ugc3VyZSBteSByZXNwb25zZSBpcyBjbGVhciBhbmQgaGVscGZ1bC5cblx1MDAzYy90aGlua1x1MDAzZVxuXG5JIGN1cnJlbnRseSBjYW5ub3QgdmlldyBvciBhY2Nlc3MgZXh0ZXJuYWwgY29udGVudCwgaW5jbHVkaW5nIGltYWdlcy4gSWYgeW91IGRlc2NyaWJlIHdoYXQgeW91IHNlZSBpbiB0aGUgaW1hZ2UsIEnigJlsbCBkbyBteSBiZXN0IHRvIGhlbHAgYW5hbHl6ZSBvciBpbnRlcnByZXQgaXQhIn0sImZpbmlzaF9yZWFzb24iOiJzdG9wIn1dLCJ1c2FnZSI6eyJwcm9tcHRfdG9rZW5zIjoyMSwiY29tcGxldGlvbl90b2tlbnMiOjE0MywidG90YWxfdG9rZW5zIjoxNjR9fQo= - recorded_at: Thu, 17 Jul 2025 09:48:27 GMT + encoding: UTF-8 + string: 404 page not found + recorded_at: Sun, 27 Jul 2025 19:07:55 GMT recorded_with: VCR 6.3.1 diff --git a/spec/fixtures/vcr_cassettes/chat_vision_models_ollama_qwen3_can_understand_remote_images_without_extension.yml b/spec/fixtures/vcr_cassettes/chat_vision_models_ollama_qwen3_can_understand_remote_images_without_extension.yml index 2cc4a647..2360d369 100644 --- a/spec/fixtures/vcr_cassettes/chat_vision_models_ollama_qwen3_can_understand_remote_images_without_extension.yml +++ b/spec/fixtures/vcr_cassettes/chat_vision_models_ollama_qwen3_can_understand_remote_images_without_extension.yml @@ -8,7 +8,7 @@ http_interactions: string: '' headers: User-Agent: - - Faraday v2.13.2 + - Faraday v2.13.4 Accept-Encoding: - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 Accept: @@ -20,6 +20,8 @@ http_interactions: headers: Accept-Ranges: - bytes + Content-Type: + - image/jpeg Access-Control-Allow-Origin: - "*" Content-Security-Policy-Report-Only: @@ -32,41 +34,37 @@ http_interactions: - '{"group":"images-tbn","max_age":2592000,"endpoints":[{"url":"https://csp.withgoogle.com/csp/report-to/images-tbn"}]}' Content-Length: - '8328' - X-Content-Type-Options: - - nosniff - Server: - - sffe - X-Xss-Protection: - - '0' Date: - - Thu, 17 Jul 2025 09:47:43 GMT + - Sun, 27 Jul 2025 19:07:56 GMT Expires: - - Fri, 17 Jul 2026 09:47:43 GMT + - Mon, 27 Jul 2026 19:07:56 GMT Cache-Control: - public, max-age=31536000 Last-Modified: - Wed, 13 Nov 2019 04:20:22 GMT - Content-Type: - - image/jpeg - Age: - - '44' + X-Content-Type-Options: + - nosniff + Server: + - sffe + X-Xss-Protection: + - '0' Alt-Svc: - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 body: encoding: ASCII-8BIT string: !binary |- /9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxMSEhUTExMWFhUVFxcXGBcXFxcXGBcVFRUXFhUXGBcYHSggGB0lHRUVIjEiJSkrLi4uFx8zODMsNygtLisBCgoKDg0OGhAQGy0lICUtLTUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLi0tLS0vLS0tLS0tLS8tLS0tLS0tLf/AABEIALcBEwMBIgACEQEDEQH/xAAcAAABBQEBAQAAAAAAAAAAAAADAAIEBQYBBwj/xAA/EAABAwIDBAcGAwcFAQEBAAABAAIRAyEEEjEFQVFhBhMicYGRoRQyQrHB8AdS0RUjU2KS4fEzQ3KCorLiY//EABkBAAMBAQEAAAAAAAAAAAAAAAECAwAEBf/EADIRAAICAQIEAwYGAgMAAAAAAAABAhEDEiEEEzFBUZHwFCJhcYGxBVKhwdHhFfEyM2L/2gAMAwEAAhEDEQA/ALBjFIpniu06SN1S9g81g4K4QiilyT20kRGiMGFPAUkUUVuH4LWGiKKZT20FPp0EZuHSuQ2krW4YowwqsG0OCK2jOqVzNoKv2RL2cK0OFTHUEVMziVxw4S6sKa7DoRoplIm0Ri0JpAR3U0N1NOmSdgy3kkKa7BXUwtjepTahDYneQNCbmw0RFF2jicrWmJmpTb/VUaJ9Vhbt0SgxNLEUPCRTC2RyxNIRyExwTIVgSmFEchkoijHITkRxQnlEqgNRR6hR3BDNNBlURnoTmqYaaYaaRodMguYgVaUqydTQnU1JxKIon4a6St3UUlLQhtRsaNDkpLMMeCn0aABU6nSCR5BowspRh+SRo8leloTSBwQ5g3LKUUeARW4Y8FaBo4LsBDmB0EJlBHbTRxC4XoarDQwBKya6uAhurrJMDkgjnBDMIZqk7kGo2eRTqJNyCOfBj/Ca8oclchUSJOQOoUHuUkkJDKnRNtEYjkmlimy1Dc9qKbFbRDcxYTp5tJ7XsptcAAA8yQO0HSy54QvQH1mrz38Q8O3PTqAdogtMnc27df8AkfsJc2rlspw2l5Emafo1jjWw7HuILiCHERGYEgxHcraVU9F6Ip4ak0CJaHHX3n9p2vMlW11aF6VZDJFa3XicKG4o3Vld6hNYCG5Dc1WHsy6MOjqB0KzIuGkrPqUjQW1BKvqlw0lY9WEOqyFrGTIBophoqwyoT6ZCwyZAfTUao1WThKjVKCSRaLIeRJSuqSU6Hs3raSK0FQfa43z8/NEp4kcfoVyOLKqSJhYmQf7IDsT3INTG8wsosZyRMueSaxx00Poq8Y48ZCd7bzlNoYNRYEcTHPRDIPGfmoRxnNCdi+aygwaic4/ZTRlG8DuVXUxPNAdiDxVVjJuZfZgfiHyQKjo1VIax4rhe7imWL4iOdlhWxIG9QqmNQbppZO5VUUiD3CHFppxLin06Td6kDDs3O8wjqSDy2yJncugFTW4InQg/fBI4UjUFbWgPFLwIzaaxv4ht/wBGP/6bwNcsa+Pkt2aaw34iMvT5B3wyb/4+SjnleNluGhWRM03RWPZaM7mAeVvorsOCz3RFp9mpjSJHqTfzV3PFNHeKJ5I+8/mGLlwVJsmBpXCmJ6QmdDFZcITXsKYGgeKt7jxQc95Gi6aZO5IUSjsCh7zayE0LhY5dNI+PetsEa9gTQAAu9Sd6GWHgsMhoYECq3miPYd11FrtIEuMBCysYPqEgJKJ1nCVxCg0aN2I5eqCcTOiTS07iEOrh+BXOi6VnH13cUF1cpVGFcFIlNY2kQqpwqlN9nK71KIrQ/Ol1iG4whEooDDOqpuYprBPNSKY3EJiLBCUZlElSmkcPRFCGo1AKeFKOzCJwBTxTJQbYKOeytCXVtGif1JThS+yhYaB23J7KpGhK61oPDwKA9r23BkIbM263RI687wD3gLB/iM6coykQ1p7OlzU1J3248VtH05GbQrAfiBTeXg5jDWMkAGDJqxykQddxPjLLFadjo4eUte5q+gzKbsNckEOtpAljTfSTe/OVoBhgRqDzWP8Aw+oHqIcSfdd2twcIAHLsz4rV8pIhNjTrqJnmtT2Gvo5bNN+aax4mHW++KRqNk5jEIFPaQuALDeforpM5mw2LpH4ZTqNItHaM96rcdtF0w1xtfgfEqJX2g9+pgfNMoug1ZcZ2zOb5gJtbG0xYu/RZ6rXJgCbJlWi8wSLcZR0o2guTtNsANHrZR6+0b2cT4QB+qgnDEt1EIrqIY2d6agKEQz8Za5DZ4BQcRtRxGVs9+9EpUnvEQIOhK6/DBoAsXcUrd9C0YRT3INE5TmdJJ4qLjMU9zp3DQKxqPyi8FRH1RrA8UrlQ3LtUNdin8AuIbsXfVJLzEHlPxNUysTbNbu/RWGFwjTvBPiULCFoN8scdI8FYU3Mb2teYP0UGx6oE/Z87wfBC9iPJTX4wEWKiVsVzlBNjHPZiEN1FCOKTmYxNuahlTCcVHfgxxU8YziEGo6dAimZxZFFIBSGFBeCmtJCeybgyaHrraoGqhdeusqE2goiODLJtbgE9tRx3BV4DgPsrjmkgdoiOAQpG0tEk43KYdbmLp/XktsC4cdEM0w9skkxrYT5J7cKSABJPHQAc7/JbYFDaUOsWuaT5FSRgXZYEwL3IITX1zRaRIeNLuFvRNbi3Q7LdjgSTbM1B2+gFXcKx14NjqOBHfvXnfTqt+9e1xdM0wIiBZ5EiJ+LQQtRjMQ50Q424/rCxfSrE5jWbnv1jOzDrgUWA30BmdUJxpbj40+xcdBcWBTsSOwwguA1a54JAEW7Q+dySrnE4g5j255iyxvRd8ljS+TleIvbtgiJ5Dd+q1DqcbwVbFTjYmSHvbnXVBM5iT5pOcXReQNwQ2QeAXGyNFUGk4/EwdLrrO1c9kJkkXHyTqdNzjfzQsfSFLgLAgJrnbhe91x9ONLoEu0QsyiS+uAAlwMaAXQq+IdEEgDhqVEqi/wDZcAA5lByCodxVMQ+IbIHzQm1nDeu1a5UR75UpMsg1SvZAJlNIO4JjqR3qUpMohFo4riZCSlYxvWViCGgtcOIt6lLEYgtcHRA33BBR9n7PLjcXI3nfzkJ9TZbiY7MDgZTKSA4kMbUvoI7x9E5mOY5wEeIUgdHSZkxHFFwmxg14MAjcbRPMo8yAugd+zQ4S0z3IDsA8aBX+CwwZ7p13bvBSXsdvDfFQeeikYMyvUPHwpwLh8K0owZOmXzSOzHb4Q9pRRYvEzL3n8qYTyWjqbPA1mFWvqUybte1o32g96aOdPogvEVjyN/qi053AeiLXqUy05Q4k6GA4DvmPqorKzohrGnnceitGdojLHuTmPcLZT3AfJSqbY1gDnYhURxtRvvNg+Fvqk2mCczoE3uSSU2myTS7FxiquS504xKhvx+e7TlDLnnHAHVQQ7NIA8S4R5JCi4gktaAOUSnUUuojjY3F43PoAOf3ZRaxqCJMg6Kx9jDwAGFo1m59Am1MBmaIgxbePnqnUkjcsi0Ko+IEdywu3HSKjsrf9V0E5cxyuLZuZiGi29bPbZ6ii6oGOcWgW01cGzPATK8srViXF06m/abvM2vxn1XPxORbJFcGKrZpujlcNdQkNAJOkZhILbxfVw1WwY2TYT98F5Rh6pa5rxBLXAglw+EzfxXqewtp9ZSbULQxzp7O4Q4tn0nxR4bLdxNnx9yW2gIlwPculjSeA5/QDVCq1zN7939l1uIbvuea6rOfSztTJESfJCY8taYOUHjv8ECrVk7/JDc075WsZQHsBdvJ7kOrbQGUamXNuguzkoOQygRKhedxXKVM71Lq0zH90KlhQeJSNlFEZVoN4qI4AKz6gaBpQzg+XqpyY6xlWXld13qe7DNGovwCf7OR7oCk2OsZAGGPFJTslRJJqQ3LfgemnGsaJAtybPpKpsZt+SMrsg/4AE95kwqivi2gf6hcd+Y//AJUN1XNbMO4ifWFoYkuojZofb6Or3OJixlw/+XIdLpOxpIyTwlzj43lU1HClt2ETvjUeiHWwYN80HmZ+Sry49xW2XdXpK8kD5R6GLeaNQ2pVa0wZP85tHmb+Szb8OANQ7ukJrGkXBj/sjohXQys1Ddr1Xe42k08Q4Tz94hHo7ZrAdoMMcyD6yD4KiwtGnq9zzP5T/ZW+zW0R8R8TM9/+FKcYJdCsbvqT6e1mPtLpPEEDzCMMIwiconuKLSp0jcO9UdmEaNPvzXnTyJPa0dUUQ/ZQNLKNiMPYxA5gn6Kyq7Pn4j9+KjeyNBgkk+XqtHMvEOlMyOPwFWZBa7xv6pjMJWIDZ1vBNlrvZ+1YAAjQSTPPcoRwNSHnKA4aGB6b12Q4q1uc8uHjexn6VItdlcbzusPNSsdTqjtQcvGBBPerWns6oGxm7Tt4OnIzqnfskkQXgkai+XvO9U9pjfUXkbFXUw9XK1wBA4k5R5aLtahOWATMaWA5SFc1tnh4aw3Dd4sAOWsprdlyC24aOEgHvBPyQXFR7g9nMp0we+nQqiQezlDWmfe1EnlPkvMsNhHVTlZSLjcnX4YE6T8S9N/ENzWsp0wDIGe0mIPZBji0Vdfoqv8ADbAZnVnHcGC4OpLi4R/1apSyLI0yqxOKMPjNnVKOUVKWXMTEzGnNu6PUL0LopSbXw7CTDgMpveWW+QB8UP8AEbAxTZU0yP01Am58Ox6of4f+/WowJMVGzpex0kDdblPFNCaxyA8bkjRvwNIN1+ajijTA7IcXcToPBXLMA7eGC97FOGB17TeUNP2Fb2iPiLyGUxaCPiEagbz9O5DFNpPuEDvn5q6/Z5O9x7mH1TTslx/if0/3R9oh4g5DKbITNgI5foh9Ue4cQrv9iO1LX+YCLT6POPwHxd+gSvioeI/J8ShNAC4IPenOBJufJaan0bO9rR3lxThsFo1c0dwJ+ZUpcXApGCRlThyefgU1+HcRGXRaobMh1jbico+sqaNnOy3eBv0/QqMuKRTTFGJGCfFqduMItPZVcj3NdJhbH2QWLnhwHI/qiB9FoAJ0HBSfESfQ1rsjGjYGKO4JLat2i0CA5vqfVJJz2LcvA85pimN7vRGFJhuC7z/sq6t0iwNN2UuLoEywS020BGqv9kVqGIH7ksdG4ug/0mD/AIXY+NxLuvMRcJKrImeNzneJ+iCWjew+q0zdlH+QeP8AZEbsj/j5/wBkj/EMK6yXmLyDMdTFw378SndXJ90R3D6LSnZDBqWjzKK3Z7RvMcso+qb27HV2NyTLtwziYiysMPhHbx6K8ZhGfmI8Qi+yt/OfNQy/iMI7O/Jv7IdYkV2Gogakg/dlb0KsfEfQobcEz+KfX9E4bOb/ABfX+y5Z8Xjy9/X1KqMUSm4kHUlMdimKO7ZTf4g/qP6ITtmt/OPM/ouVywxdtsKSCP2g0aN+X6oZ2kT8H/pq63AU26u9f7I7BS4z3uKZcXi7Jv6MziQ34px+ARzdb0TW1H/laPGY9FaGuwaOA8032hv5h/6+idcX/wCfuDSQGl57JdH33IG1awoUXVHveWM1DZJuQLCL6qzdiRuqAef6rJ9PHsGFc0vzOeWhoEgyHBxMzYQPUcVSPEanXT6f0FYzAdJNv08Q9xBJZbKHC4AAAN3a+9qPjIVr0P23SoUnF1IvL35gQ5jRGVrQIJBFwT4rKOwutn2/mdrwQvZv5Xf1Hn+nqF16vn5k2nfY3XSjpJSrYd7BQyzFy9piCJsCZkSPFZbYnSMYerSqC+QAOAa2C2CCBBEm7td6gHCEfA7+o8+fL1Hhz2b+Vx1+J27x3j5+Wbi+oFqXQ9s2F0nGIotqspmHFwhwDSMpjQEqz/ap/IPNY78NcawUHUgw52uJImZDtHX7o8lrg9o1pz3rn1Q1NaSmnYL+1nj/AG12ptepHuep+i57a3+GPGSnjaP8rfJZtLpEXT8ADdo1HaD1P1CZ+03CxN+4qWzFEizPvyTDWcbdWkeVLql5jJLwIrdoOJjsn+ortWuRfK3+mPqptDMP9v780cvMR1Z8wpS4hdq80bZPoVDMdVjstb4An6pVX4gj3BHJqsw9wECmB4rj31PyNH/ZSlxNfl8wprwKOqcREgEAcoUUYiqSbme76rSOxdSbhsckCvUb+UHz/Rc2T8SxxdOS8ysbfYpesrfmPokro4ocvX9VxR/yWPxQ+l+B8zsvvU7YmP6mvTqahjgTeDGh9PmqN9Tn/nei4YEmdy9ycNrOPHl95Hs7+nOCERncbTlBMTr7xvCbivxCwtNwDab3ie06AAByBNzytqvJWVAJkTbfIvNjb7uuHE31+/FRamW5sV2PfW9IsIWCp1tPKQDdwETuImxunN27hiJbVYRyI9BvXgZxMCWnXUbvXwU3DYkhp7wI7Vt82smxptb2vXxBLJHser1ul1JrgCyqJMZsojQGfe5qU7pThm0+sNUGZhvxGP5dR4rx0bQfIdN0GpVJE+HjGiaeNvaMn9a/j9zRzLq0vpZ6then9Fzw19N7AdXTmHdFlqxjqL6YqsqsDNST1gi2hmYK+fKdR24n1U6rtVwYKbnOIBJIDjEmB4+6PJefnwZNSae/1/lHVjyYpRt2q8j2vD7Xw9SzcRScbD3n6+LRxU57nNjTvAK8EovJnKT+netDh+ltek3K1zoAgXkDumVz5uFzy3xzXyafpDuUNqTr47/aj11tbeY7sunyTWhp3jy/QLyTDdN8UDJqTB0LWmZ42BU5/T7EQDLe4NXnz4LjpStSS819kFxilcXZ6VUawWzeTZ+ii0303OytrMc6JyiM0d0yvNtq9NMQ+lAls2cckGORm0rM0Ma6kW1KZLXCDIXTh4HjnF6s2/at19bQkpwh1s91YbGN3ILzbpXjziaxLXwymcjYi8Alx9B5tC5jOnbnUg3IQXNAc4GNfegRv+qztbaOaXOgBptAHvHWN24f0tXZ+H8PxcW5Zmvh6oGTJioNSoOqOZSa01KmuXdM7+7ytNla9Gejr8RULalQMAaTDROjmjWZGvNH6JbWo4drnuAz1LkzdrBAa3TuJ4k8kbZG1G0Krne/LSOyZ1IOongvZhrksiaS2WnfvvZxz0qUWn8/2Lir0EH+3XM8HNmf+0mPIrL7a2VUoOiqMhcMoeCchvaDuuTbW94kBbJ/SPLJLCQOBvrAss9tnbTcRSNKo6xJmQ3h2SI0ggnxSvDmhJW1XxCs0Jp0VXRjHuw1cVC9wIkFub3gIDm8pFweLRJuvYcPtBr2hzXEtcAQZMEG4K+fm4osIJJzNJbmEQctg4Hfa3OArXBdM69NsNeA2S6Im5MugnQTNualmwKcrvcEcsao9x9tHLzQ3Y5u8tuvD2dLsUKufrS685T7sHdA3IG2+klSs4PebiIAsG6e6dbkTquZ4nF6R9cKs91GLbx9P7KNitv0KTgypVDXESAS4W+wvDWdI8Q5oHXVCBEDMYtp36BO2ttKviXCq8E9kNsDHZ3xukmfFaWBvq6MskWtk2e+t2gNw+/NdO0OR9F8/NxlcNDM7g1pBABIaDMyI3ySrFu3nmOsqPLrxJJtu3wDzU48Jif/ACaGu+iPaMZtltNhe92VoiSdBJgad6z9L8QMO52UlzAZhzoykDfYkjfaF5NtDaVWsSXve4TbMSRMWgTAsoEmEj4DE3uUTWi0j3Or0tw4/wB5h32M/ILNdIvxAp0w9lLM58Wd8IcdLSCfvmvOm48hsSSCOYg6RrcQFT4qocx5p/8AE4E00nZL2iuiRe1ukmIqHM95LiACdJgAbjyXVmOvK6un2SPghVxk13DU8JmOtgJ8v8KTAbA00gHW60ezzSfUDDgzTBBl3WPIAjSGi+mitaOz8OCC2lVaeOapYcl1031OVJdUYw4d7rhjoI/KePcoD2mY8PH6LfbXr9WQGMq1Bxa42ufzMnd6hZzE1a7z/pVYmYIm0mJsN1p+Szjp9f2GTTKinzVnSqCPeseXDn96oTsM/wDhVP6BvHPVS2UH5LUnzr7jbazv7vJJKEZD48zh0GPa0H3uG46zoFIDqLWiwdOpuLjdHjuU3o1g/wB8XVaAc0NPZflAmLG5uZRsdst78rZaAIloDR2zwc2ZAnWykk9TVP5/t1OrmrTarr6ZncRiBJDbDgONt+9RpmN+nror/EdGKg94suYEOH08PNModHXB0lwGUgntDdeBAT8mjneS2QcNhKo0a7duvCZUxt4B4XIjwWoweCzWGkkaibiIIGmp9NVXV+iz6Y6yAS2OzYzzgxPGJU+XGSsdyklsRKLBUZ2Hy+37sNM3Os6cPNScNsyo1gcMzuLcjhDzIyg3zQRra6jis9lLqjTc10+8QQT2nHska/3KPgdtmmD1rHugHR7mlsxlkDj2u+3C9I4k1pfRksfFS1KTVDdo03NuMxBABLgWAOOrYPA796iYLCVHvY0WzEXMxG9XY2tQqUwCx7XtMgmXNPedZ14+CBRxp7LKYa54bZ7gaYsCDqLnxGuieOCMOlD5M/NdydjNrbINOMzrOgNgzusTICrRhswgOm+4G8ROv/I+i0mHpF7G5g05QI/eCW25i+7holgdpUjUAFLICdzXnNeTJMRcDfxVlClZOUlqoqMfsnM8FgeG21DZETOpE2hFwVJzHBzGxEEHOwX4hxkAfcrTnE0XBzXMDC748zn5bwLW9fVUuEcyoezmGR1g4Rmt7xgwRqI3KqxR23EcuqDVNrYkggZwTaQWG+60AqtZgqbqLzUDg82aRAFtSR4rRVcLTAtUp6ahrmAG4gAvPH03KPnptNhIJJN8vaIF9DwWlDV/bAnFX6/YpndG3+zdZIyZM0hwnKW5uBHqq7Dh9EQ0iHg3ytcSAY7Vp3FabEbQaG9W4lrHDIG59ZAADRkCqHYSsAMuW1gIc0Ank1t9JvxKm4dg6lV168yor033OUX3BsbtR9hU1ZxNt/BeksgUz1jC5+7KGtE6EnMTI04b1mqWx3ufnyhpzT7wjdMXslWFp3QJU11K/ZeHqe8WuAGstIHyU3HY8tlsEcLRI0BhX1XBAVGnKSYvMzANxfgD6IO1dlda4GmYblAIdUBOt7t3GIjvXNyFm96uhdTlhWhPr8ihZipYdSNL2jRPfUaR2rRp3/ZCm4jZYptEsDtAQwkkmQZIJjcArDaGAwhp/u6L+sLRlMvDWw0Ah2Z8fCb3sQiuC7p0CWetnuZ01msE6zH10Pgo7cYIN/1VmdmENbTe0S85W9p0ixdfKI1mO/ThEOz6cjmAdXX5p44PzCSzS6IE3FAtBGknUd36qFWYHXM6gWHFXHsVMNIJi8g394kCD3oT8INKMVG2mA6ZaeJ4zu4IzxaJNk4ZNaRUuDRadO76pK8dsuob9Q7+lyS5+Z8zs5K/MiIMbUPxFdOLf+YqubUTw6VN40cCsnde4/EfNcOId+Y+KjBy5mS6EUtMmHEk6/NIVT+Y+aihyfmtZDQg0iWKnMpvWEaE+qr2YiXFvBHbVO9Z46FtEn2k8fVNfioE38FCwAdUq5WAkusB3Kx2jsLENLR1ZMiTlvB3Aqq4f3qoOrY4/Gw253b/ANVHq4k9Vmve07p+wVeu2NQGHZ1ryyrq4TJtIADd02KlYak6ngXPpUhUpNeSHVYmSQ0lrNAAd5KzxQx1raW/pDpylfwRStw+IqMouDS+lOaxlog5XTcRoVKqbHpDry6oajW9r9wCcozw3MXAiLgalaQ7AeW4Rz3PyntVaYYXAaPyta0Q3eD3krW7O2ZRBrPykDEOEte3L7o0DTzkqWTiIxinjV/7OjHhbbUvWxTbG6DUTTa6qHSQ05c3uiBIcQBJ10VhhehuGywaQnLI/evJJA1gwBr6q9o4ZjCS2mxtveAAPMWGmilYdwa0CZgAXudN53ryHCbk25N381XySf8AJ2KMUui+5Q7C6H4dtI9bSY5xJuZkDcDdZTpZsGnQLiwAAuBFhYQZEk93kvTWPtCzPTfCZsO9xAMX0jeOBVo3Gn5g297ZdDAbKotFRmYSw66R/wCSVcbMw2GbVLakOBBsXGx8NFmKdBzXWabHiRB4GCj1MMXGWh0+J9RK7ni1tyT2ao4ocTGPuSSuzaVMBs9zZNJo0mKjxc/91lNrYLC5v3bi3/tmi3MyN6fQw9UuOVwECxBAGmnaPHju9YG1OuDhmDSTYGWu04wY3psOGlqd/rX3r9PqbiMsOkUv0/j9yLj9lNdSbVpEuyGKjbEgn3SI1BsqvA48tPavJMEkwIA3BbDo1s+tNRzQLRmaIlzLzAbae/zVTt/o31ZdVYWikYygW1HlqCfFdkYwnFpduvw+Jzyi6T8RN2hVj/UcBwaYHkLBNdjKh+N/9RVXhMVByuiMv/yJ+U+SlYfEh7Q7cfmuKUZRYeu1kh2NqE5i9xPEmfUrn7Qqfnd5qNVfwUdxhCKIykywdtCoQe0Y1PmBPO5Cd+16/wDEPmb6/qVWdcuOlU3ApssKm2Kh950xp/nwUf28gzF1DjinASm+rNrkyV7dOrQe/wCqdR2g1hlrGjwBPyUJ7UJya2+7Drki5O3HH/ACSo7fZSW0/E3MkPLAk0LiS3Yo1udAUbG1yIA11KSSriSctxJbIl06mYArrgcrnAWAJ8l1JJGKcqC5Mg7MM1WB0w5waY17Rj6r0NmxMP1bhe4ILiSSJsY/wkku1Ri5boRdCp2ZgaTa7Bhw+pVDuzJytkAm8xNp4Ky6V+10RTNR7QHkjKzcREAk66lJJeZxPFZIZ4447J/2dWLFGWCc31T/AIL6vsegcEaMnrS1suAgmo2D73CZEaQtBgdm02YVlCJbkAM795J5yUkkON4OGHHBpt27dvvSLcJneTLJNLbbbwtkt+IIAytBuNbQND6JVXzFpg20t9yupLmxxTOubpgqlc+aNSq6LiSVQVmcnQdtRA2xTz0nNnWOPGUklaEE0Tk2jzLpLh3sPZNoBsY+SD0XpF7sp7UmddCBIme46JJLoxbo4J/9pe7XwWWm8iJixHDQa6aFYujiDUhskyY+HTvI1SSVZRSsnk3aPUehmGDS506tFjwHdbeoFfBuZVdTq5XNe5zqZG4gAuBEdmcwMC2qSSOB6cyrudE1eLfseabd2O+jL3EQSQI4uk6eardnYrIHg7hmHfYR6hJJdWTFHeJx6m9ywZiMwB5ShvBXUl5zWl0jKNgk6Ukkwh1rks6SS1BTGl29Dd5pJJkY5fkkkksNR//Z - recorded_at: Thu, 17 Jul 2025 09:48:27 GMT + recorded_at: Sun, 27 Jul 2025 19:07:55 GMT - request: method: post - uri: "/chat/completions" + uri: "/chat" body: encoding: UTF-8 string: '{"model":"qwen3","messages":[{"role":"user","content":[{"type":"text","text":"What do you see in this image?"},{"type":"image_url","image_url":{"url":"data:image/jpeg;base64,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","detail":"auto"}}]}],"stream":false,"temperature":0.7}' headers: User-Agent: - - Faraday v2.13.2 + - Faraday v2.13.4 Content-Type: - application/json Accept-Encoding: @@ -75,28 +73,17 @@ http_interactions: - "*/*" response: status: - code: 200 - message: OK + code: 404 + message: Not Found headers: Content-Type: - - application/json + - text/plain Date: - - Thu, 17 Jul 2025 09:48:42 GMT + - Sun, 27 Jul 2025 19:07:56 GMT Content-Length: - - '951' + - '18' body: encoding: UTF-8 - string: '{"id":"chatcmpl-166","object":"chat.completion","created":1752745722,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"message":{"role":"assistant","content":"\u003cthink\u003e\nOkay, - the user provided an image link, but I can''t view images. I need to inform - them that I can''t see the image. Let me check the query again. They asked, - \"What do you see in this image?\" and attached [img-0]. Since I can''t process - images, I should explain that I can''t view or analyze images. Maybe suggest - they describe the image or provide details. Also, make sure to keep the response - friendly and helpful. Alright, I''ll let them know my limitation and ask for - more information.\n\u003c/think\u003e\n\nI currently cannot view or analyze - images. If you''d like to describe the image or provide details about its - content, I''ll do my best to help!"},"finish_reason":"stop"}],"usage":{"prompt_tokens":21,"completion_tokens":147,"total_tokens":168}} - - ' - recorded_at: Thu, 17 Jul 2025 09:48:42 GMT + string: 404 page not found + recorded_at: Sun, 27 Jul 2025 19:07:56 GMT recorded_with: VCR 6.3.1 diff --git a/spec/fixtures/vcr_cassettes/chat_with_params_ollama_qwen3_supports_response_format_param.yml b/spec/fixtures/vcr_cassettes/chat_with_params_ollama_qwen3_supports_response_format_param.yml index f1a8219a..17f73e90 100644 --- a/spec/fixtures/vcr_cassettes/chat_with_params_ollama_qwen3_supports_response_format_param.yml +++ b/spec/fixtures/vcr_cassettes/chat_with_params_ollama_qwen3_supports_response_format_param.yml @@ -2,14 +2,14 @@ http_interactions: - request: method: post - uri: "/chat/completions" + uri: "/chat" body: encoding: UTF-8 string: '{"response_format":{"type":"json_object"},"model":"qwen3","messages":[{"role":"user","content":"What is the square root of 64? Answer with a JSON object with the key `result`."}],"stream":false,"temperature":0.7}' headers: User-Agent: - - Faraday v2.13.1 + - Faraday v2.13.4 Content-Type: - application/json Accept-Encoding: @@ -18,20 +18,17 @@ http_interactions: - "*/*" response: status: - code: 200 - message: OK + code: 404 + message: Not Found headers: Content-Type: - - application/json + - text/plain Date: - - Sat, 19 Jul 2025 19:53:45 GMT + - Sun, 27 Jul 2025 19:07:56 GMT Content-Length: - - '301' + - '18' body: encoding: UTF-8 - string: '{"id":"chatcmpl-176","object":"chat.completion","created":1752954825,"model":"qwen3","system_fingerprint":"fp_ollama","choices":[{"index":0,"message":{"role":"assistant","content":"{\n \"result\": - 8\n}"},"finish_reason":"stop"}],"usage":{"prompt_tokens":29,"completion_tokens":10,"total_tokens":39}} - - ' - recorded_at: Sat, 19 Jul 2025 19:53:45 GMT + string: 404 page not found + recorded_at: Sun, 27 Jul 2025 19:07:56 GMT recorded_with: VCR 6.3.1