diff options
| author | Adam Malczewski <[email protected]> | 2026-04-28 14:10:04 +0900 |
|---|---|---|
| committer | Adam Malczewski <[email protected]> | 2026-04-28 14:10:04 +0900 |
| commit | 1ec2afaa21b8c3ef336982e80259b9bb79e3fb32 (patch) | |
| tree | 7cf43fbd4efc6d6834744d800822255fd3d44d05 /spec/dispatch/adapter/structs_spec.rb | |
| parent | e6c2f23b58a1e87088ee75632c74fee4f15f6a94 (diff) | |
| download | dispatch-adapter-copilot-1ec2afaa21b8c3ef336982e80259b9bb79e3fb32.tar.gz dispatch-adapter-copilot-1ec2afaa21b8c3ef336982e80259b9bb79e3fb32.zip | |
updatesdev
Diffstat (limited to 'spec/dispatch/adapter/structs_spec.rb')
| -rw-r--r-- | spec/dispatch/adapter/structs_spec.rb | 211 |
1 files changed, 0 insertions, 211 deletions
diff --git a/spec/dispatch/adapter/structs_spec.rb b/spec/dispatch/adapter/structs_spec.rb deleted file mode 100644 index ef8ec73..0000000 --- a/spec/dispatch/adapter/structs_spec.rb +++ /dev/null @@ -1,211 +0,0 @@ -# frozen_string_literal: true - -RSpec.describe Dispatch::Adapter do - describe "Message" do - it "creates with keyword args" do - msg = Dispatch::Adapter::Message.new(role: "user", content: "Hello") - expect(msg.role).to eq("user") - expect(msg.content).to eq("Hello") - end - - it "accepts array content" do - blocks = [Dispatch::Adapter::TextBlock.new(text: "hi")] - msg = Dispatch::Adapter::Message.new(role: "user", content: blocks) - expect(msg.content).to be_an(Array) - expect(msg.content.first.text).to eq("hi") - end - end - - describe "TextBlock" do - it "defaults type to 'text'" do - block = Dispatch::Adapter::TextBlock.new(text: "hello") - expect(block.type).to eq("text") - expect(block.text).to eq("hello") - end - end - - describe "ImageBlock" do - it "defaults type to 'image'" do - block = Dispatch::Adapter::ImageBlock.new(source: "data:image/png;base64,abc", media_type: "image/png") - expect(block.type).to eq("image") - expect(block.source).to eq("data:image/png;base64,abc") - expect(block.media_type).to eq("image/png") - end - end - - describe "ToolUseBlock" do - it "defaults type to 'tool_use'" do - block = Dispatch::Adapter::ToolUseBlock.new(id: "call_1", name: "get_weather", arguments: { "city" => "NYC" }) - expect(block.type).to eq("tool_use") - expect(block.id).to eq("call_1") - expect(block.name).to eq("get_weather") - expect(block.arguments).to eq({ "city" => "NYC" }) - end - end - - describe "ToolResultBlock" do - it "defaults type to 'tool_result' and is_error to false" do - block = Dispatch::Adapter::ToolResultBlock.new(tool_use_id: "call_1", content: "72F") - expect(block.type).to eq("tool_result") - expect(block.tool_use_id).to eq("call_1") - expect(block.content).to eq("72F") - expect(block.is_error).to be(false) - end - - it "accepts is_error flag" do - block = Dispatch::Adapter::ToolResultBlock.new(tool_use_id: "call_1", content: "Error", is_error: true) - expect(block.is_error).to be(true) - end - end - - describe "ToolDefinition" do - it "creates with keyword args" do - td = Dispatch::Adapter::ToolDefinition.new( - name: "search", - description: "Search the web", - parameters: { "type" => "object", "properties" => {} } - ) - expect(td.name).to eq("search") - expect(td.description).to eq("Search the web") - expect(td.parameters).to be_a(Hash) - end - end - - describe "Response" do - it "creates with defaults" do - usage = Dispatch::Adapter::Usage.new(input_tokens: 10, output_tokens: 20) - resp = Dispatch::Adapter::Response.new(model: "gpt-4", stop_reason: :end_turn, usage: usage) - expect(resp.content).to be_nil - expect(resp.tool_calls).to eq([]) - expect(resp.model).to eq("gpt-4") - expect(resp.stop_reason).to eq(:end_turn) - expect(resp.usage).to eq(usage) - end - - it "creates with all fields" do - usage = Dispatch::Adapter::Usage.new(input_tokens: 10, output_tokens: 20) - tool_call = Dispatch::Adapter::ToolUseBlock.new(id: "1", name: "test", arguments: {}) - resp = Dispatch::Adapter::Response.new( - content: "Hello", - tool_calls: [tool_call], - model: "gpt-4", - stop_reason: :tool_use, - usage: usage - ) - expect(resp.content).to eq("Hello") - expect(resp.tool_calls.size).to eq(1) - end - end - - describe "Usage" do - it "defaults cache tokens to 0" do - usage = Dispatch::Adapter::Usage.new(input_tokens: 100, output_tokens: 50) - expect(usage.cache_read_tokens).to eq(0) - expect(usage.cache_creation_tokens).to eq(0) - end - - it "accepts cache tokens" do - usage = Dispatch::Adapter::Usage.new( - input_tokens: 100, - output_tokens: 50, - cache_read_tokens: 10, - cache_creation_tokens: 5 - ) - expect(usage.cache_read_tokens).to eq(10) - expect(usage.cache_creation_tokens).to eq(5) - end - end - - describe "StreamDelta" do - it "creates a text_delta" do - delta = Dispatch::Adapter::StreamDelta.new(type: :text_delta, text: "Hello") - expect(delta.type).to eq(:text_delta) - expect(delta.text).to eq("Hello") - expect(delta.tool_call_id).to be_nil - end - - it "creates a tool_use_start" do - delta = Dispatch::Adapter::StreamDelta.new(type: :tool_use_start, tool_call_id: "1", tool_name: "search") - expect(delta.type).to eq(:tool_use_start) - expect(delta.tool_call_id).to eq("1") - expect(delta.tool_name).to eq("search") - end - - it "creates a tool_use_delta" do - delta = Dispatch::Adapter::StreamDelta.new(type: :tool_use_delta, tool_call_id: "1", argument_delta: '{"q":') - expect(delta.type).to eq(:tool_use_delta) - expect(delta.argument_delta).to eq('{"q":') - end - end - - describe "ModelInfo" do - it "creates with all fields" do - info = Dispatch::Adapter::ModelInfo.new( - id: "gpt-4", - name: "GPT-4", - max_context_tokens: 8192, - supports_vision: false, - supports_tool_use: true, - supports_streaming: true - ) - expect(info.id).to eq("gpt-4") - expect(info.name).to eq("GPT-4") - expect(info.max_context_tokens).to eq(8192) - expect(info.supports_vision).to be(false) - expect(info.supports_tool_use).to be(true) - expect(info.supports_streaming).to be(true) - expect(info.premium_request_multiplier).to be_nil - end - - it "accepts premium_request_multiplier" do - info = Dispatch::Adapter::ModelInfo.new( - id: "o3", - name: "o3", - max_context_tokens: 200_000, - supports_vision: false, - supports_tool_use: true, - supports_streaming: true, - premium_request_multiplier: 30.0 - ) - expect(info.premium_request_multiplier).to eq(30.0) - end - - it "defaults premium_request_multiplier to nil" do - info = Dispatch::Adapter::ModelInfo.new( - id: "gpt-4.1-nano", - name: "GPT 4.1 Nano", - max_context_tokens: 1_047_576, - supports_vision: false, - supports_tool_use: true, - supports_streaming: true - ) - expect(info.premium_request_multiplier).to be_nil - end - end - - describe "Struct equality" do - it "considers structs with same values equal" do - a = Dispatch::Adapter::Message.new(role: "user", content: "hello") - b = Dispatch::Adapter::Message.new(role: "user", content: "hello") - expect(a).to eq(b) - end - - it "considers structs with different values not equal" do - a = Dispatch::Adapter::Message.new(role: "user", content: "hello") - b = Dispatch::Adapter::Message.new(role: "user", content: "goodbye") - expect(a).not_to eq(b) - end - - it "Usage structs are equal with same tokens" do - a = Dispatch::Adapter::Usage.new(input_tokens: 10, output_tokens: 20) - b = Dispatch::Adapter::Usage.new(input_tokens: 10, output_tokens: 20) - expect(a).to eq(b) - end - - it "ToolUseBlock structs are equal with same fields" do - a = Dispatch::Adapter::ToolUseBlock.new(id: "1", name: "test", arguments: { "k" => "v" }) - b = Dispatch::Adapter::ToolUseBlock.new(id: "1", name: "test", arguments: { "k" => "v" }) - expect(a).to eq(b) - end - end -end |
