activeagent 1.0.0.rc1 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +102 -1
- data/lib/active_agent/providers/_base_provider.rb +94 -82
- data/lib/active_agent/providers/anthropic/_types.rb +2 -2
- data/lib/active_agent/providers/anthropic/options.rb +4 -6
- data/lib/active_agent/providers/anthropic/request.rb +157 -78
- data/lib/active_agent/providers/anthropic/transforms.rb +482 -0
- data/lib/active_agent/providers/anthropic_provider.rb +159 -59
- data/lib/active_agent/providers/common/messages/_types.rb +46 -3
- data/lib/active_agent/providers/common/messages/assistant.rb +20 -4
- data/lib/active_agent/providers/common/responses/base.rb +118 -70
- data/lib/active_agent/providers/common/usage.rb +385 -0
- data/lib/active_agent/providers/concerns/instrumentation.rb +263 -0
- data/lib/active_agent/providers/concerns/previewable.rb +39 -5
- data/lib/active_agent/providers/concerns/tool_choice_clearing.rb +62 -0
- data/lib/active_agent/providers/log_subscriber.rb +64 -246
- data/lib/active_agent/providers/mock_provider.rb +23 -23
- data/lib/active_agent/providers/ollama/chat/request.rb +214 -35
- data/lib/active_agent/providers/ollama/chat/transforms.rb +135 -0
- data/lib/active_agent/providers/ollama/embedding/request.rb +160 -47
- data/lib/active_agent/providers/ollama/embedding/transforms.rb +160 -0
- data/lib/active_agent/providers/ollama_provider.rb +0 -1
- data/lib/active_agent/providers/open_ai/_base.rb +3 -2
- data/lib/active_agent/providers/open_ai/chat/_types.rb +13 -1
- data/lib/active_agent/providers/open_ai/chat/request.rb +132 -186
- data/lib/active_agent/providers/open_ai/chat/transforms.rb +444 -0
- data/lib/active_agent/providers/open_ai/chat_provider.rb +95 -36
- data/lib/active_agent/providers/open_ai/embedding/_types.rb +13 -2
- data/lib/active_agent/providers/open_ai/embedding/request.rb +38 -70
- data/lib/active_agent/providers/open_ai/embedding/transforms.rb +88 -0
- data/lib/active_agent/providers/open_ai/responses/_types.rb +1 -7
- data/lib/active_agent/providers/open_ai/responses/request.rb +116 -135
- data/lib/active_agent/providers/open_ai/responses/transforms.rb +363 -0
- data/lib/active_agent/providers/open_ai/responses_provider.rb +115 -30
- data/lib/active_agent/providers/open_ai_provider.rb +0 -3
- data/lib/active_agent/providers/open_router/_types.rb +27 -1
- data/lib/active_agent/providers/open_router/options.rb +49 -1
- data/lib/active_agent/providers/open_router/request.rb +252 -66
- data/lib/active_agent/providers/open_router/requests/_types.rb +0 -1
- data/lib/active_agent/providers/open_router/requests/messages/_types.rb +37 -40
- data/lib/active_agent/providers/open_router/requests/messages/content/file.rb +19 -3
- data/lib/active_agent/providers/open_router/requests/messages/content/files/details.rb +15 -4
- data/lib/active_agent/providers/open_router/requests/plugin.rb +19 -3
- data/lib/active_agent/providers/open_router/requests/plugins/pdf_config.rb +30 -8
- data/lib/active_agent/providers/open_router/requests/prediction.rb +17 -0
- data/lib/active_agent/providers/open_router/requests/provider_preferences/max_price.rb +41 -7
- data/lib/active_agent/providers/open_router/requests/provider_preferences.rb +60 -19
- data/lib/active_agent/providers/open_router/requests/response_format.rb +30 -2
- data/lib/active_agent/providers/open_router/transforms.rb +164 -0
- data/lib/active_agent/providers/open_router_provider.rb +23 -0
- data/lib/active_agent/version.rb +1 -1
- metadata +17 -160
- data/lib/active_agent/generation_provider/open_router/types.rb +0 -505
- data/lib/active_agent/generation_provider/xai_provider.rb +0 -144
- data/lib/active_agent/providers/anthropic/requests/_types.rb +0 -190
- data/lib/active_agent/providers/anthropic/requests/container_params.rb +0 -19
- data/lib/active_agent/providers/anthropic/requests/content/base.rb +0 -21
- data/lib/active_agent/providers/anthropic/requests/content/sources/base.rb +0 -22
- data/lib/active_agent/providers/anthropic/requests/context_management_config.rb +0 -18
- data/lib/active_agent/providers/anthropic/requests/messages/_types.rb +0 -189
- data/lib/active_agent/providers/anthropic/requests/messages/assistant.rb +0 -23
- data/lib/active_agent/providers/anthropic/requests/messages/base.rb +0 -63
- data/lib/active_agent/providers/anthropic/requests/messages/content/_types.rb +0 -143
- data/lib/active_agent/providers/anthropic/requests/messages/content/base.rb +0 -21
- data/lib/active_agent/providers/anthropic/requests/messages/content/document.rb +0 -26
- data/lib/active_agent/providers/anthropic/requests/messages/content/image.rb +0 -23
- data/lib/active_agent/providers/anthropic/requests/messages/content/redacted_thinking.rb +0 -21
- data/lib/active_agent/providers/anthropic/requests/messages/content/search_result.rb +0 -27
- data/lib/active_agent/providers/anthropic/requests/messages/content/sources/_types.rb +0 -171
- data/lib/active_agent/providers/anthropic/requests/messages/content/sources/base.rb +0 -22
- data/lib/active_agent/providers/anthropic/requests/messages/content/sources/document_base64.rb +0 -25
- data/lib/active_agent/providers/anthropic/requests/messages/content/sources/document_file.rb +0 -23
- data/lib/active_agent/providers/anthropic/requests/messages/content/sources/document_text.rb +0 -25
- data/lib/active_agent/providers/anthropic/requests/messages/content/sources/document_url.rb +0 -23
- data/lib/active_agent/providers/anthropic/requests/messages/content/sources/image_base64.rb +0 -27
- data/lib/active_agent/providers/anthropic/requests/messages/content/sources/image_file.rb +0 -23
- data/lib/active_agent/providers/anthropic/requests/messages/content/sources/image_url.rb +0 -23
- data/lib/active_agent/providers/anthropic/requests/messages/content/text.rb +0 -22
- data/lib/active_agent/providers/anthropic/requests/messages/content/thinking.rb +0 -23
- data/lib/active_agent/providers/anthropic/requests/messages/content/tool_result.rb +0 -24
- data/lib/active_agent/providers/anthropic/requests/messages/content/tool_use.rb +0 -28
- data/lib/active_agent/providers/anthropic/requests/messages/user.rb +0 -21
- data/lib/active_agent/providers/anthropic/requests/metadata.rb +0 -18
- data/lib/active_agent/providers/anthropic/requests/response_format.rb +0 -22
- data/lib/active_agent/providers/anthropic/requests/thinking_config/_types.rb +0 -60
- data/lib/active_agent/providers/anthropic/requests/thinking_config/base.rb +0 -20
- data/lib/active_agent/providers/anthropic/requests/thinking_config/disabled.rb +0 -16
- data/lib/active_agent/providers/anthropic/requests/thinking_config/enabled.rb +0 -20
- data/lib/active_agent/providers/anthropic/requests/tool_choice/_types.rb +0 -78
- data/lib/active_agent/providers/anthropic/requests/tool_choice/any.rb +0 -17
- data/lib/active_agent/providers/anthropic/requests/tool_choice/auto.rb +0 -17
- data/lib/active_agent/providers/anthropic/requests/tool_choice/base.rb +0 -20
- data/lib/active_agent/providers/anthropic/requests/tool_choice/none.rb +0 -16
- data/lib/active_agent/providers/anthropic/requests/tool_choice/tool.rb +0 -20
- data/lib/active_agent/providers/ollama/chat/requests/_types.rb +0 -3
- data/lib/active_agent/providers/ollama/chat/requests/messages/_types.rb +0 -116
- data/lib/active_agent/providers/ollama/chat/requests/messages/assistant.rb +0 -19
- data/lib/active_agent/providers/ollama/chat/requests/messages/user.rb +0 -19
- data/lib/active_agent/providers/ollama/embedding/requests/_types.rb +0 -83
- data/lib/active_agent/providers/ollama/embedding/requests/options.rb +0 -104
- data/lib/active_agent/providers/open_ai/chat/requests/_types.rb +0 -229
- data/lib/active_agent/providers/open_ai/chat/requests/audio.rb +0 -24
- data/lib/active_agent/providers/open_ai/chat/requests/messages/_types.rb +0 -123
- data/lib/active_agent/providers/open_ai/chat/requests/messages/assistant.rb +0 -42
- data/lib/active_agent/providers/open_ai/chat/requests/messages/base.rb +0 -78
- data/lib/active_agent/providers/open_ai/chat/requests/messages/content/_types.rb +0 -133
- data/lib/active_agent/providers/open_ai/chat/requests/messages/content/audio.rb +0 -35
- data/lib/active_agent/providers/open_ai/chat/requests/messages/content/base.rb +0 -24
- data/lib/active_agent/providers/open_ai/chat/requests/messages/content/file.rb +0 -26
- data/lib/active_agent/providers/open_ai/chat/requests/messages/content/files/_types.rb +0 -60
- data/lib/active_agent/providers/open_ai/chat/requests/messages/content/files/details.rb +0 -41
- data/lib/active_agent/providers/open_ai/chat/requests/messages/content/image.rb +0 -37
- data/lib/active_agent/providers/open_ai/chat/requests/messages/content/refusal.rb +0 -25
- data/lib/active_agent/providers/open_ai/chat/requests/messages/content/text.rb +0 -25
- data/lib/active_agent/providers/open_ai/chat/requests/messages/developer.rb +0 -25
- data/lib/active_agent/providers/open_ai/chat/requests/messages/function.rb +0 -25
- data/lib/active_agent/providers/open_ai/chat/requests/messages/system.rb +0 -25
- data/lib/active_agent/providers/open_ai/chat/requests/messages/tool.rb +0 -26
- data/lib/active_agent/providers/open_ai/chat/requests/messages/user.rb +0 -32
- data/lib/active_agent/providers/open_ai/chat/requests/prediction.rb +0 -46
- data/lib/active_agent/providers/open_ai/chat/requests/response_format.rb +0 -53
- data/lib/active_agent/providers/open_ai/chat/requests/stream_options.rb +0 -24
- data/lib/active_agent/providers/open_ai/chat/requests/tool_choice.rb +0 -26
- data/lib/active_agent/providers/open_ai/chat/requests/tools/_types.rb +0 -5
- data/lib/active_agent/providers/open_ai/chat/requests/tools/base.rb +0 -22
- data/lib/active_agent/providers/open_ai/chat/requests/tools/custom_tool.rb +0 -41
- data/lib/active_agent/providers/open_ai/chat/requests/tools/function_tool.rb +0 -51
- data/lib/active_agent/providers/open_ai/chat/requests/web_search_options.rb +0 -45
- data/lib/active_agent/providers/open_ai/embedding/requests/_types.rb +0 -49
- data/lib/active_agent/providers/open_ai/responses/requests/_types.rb +0 -231
- data/lib/active_agent/providers/open_ai/responses/requests/conversation.rb +0 -23
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/_types.rb +0 -264
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/assistant_message.rb +0 -22
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/base.rb +0 -89
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/code_interpreter_tool_call.rb +0 -30
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/computer_tool_call.rb +0 -28
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/computer_tool_call_output.rb +0 -33
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/content/_types.rb +0 -207
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/content/base.rb +0 -22
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/content/input_audio.rb +0 -26
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/content/input_file.rb +0 -28
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/content/input_image.rb +0 -28
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/content/input_text.rb +0 -25
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/custom_tool_call.rb +0 -28
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/custom_tool_call_output.rb +0 -27
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/developer_message.rb +0 -20
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/file_search_tool_call.rb +0 -25
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/function_call_output.rb +0 -32
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/function_tool_call.rb +0 -28
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/image_gen_tool_call.rb +0 -27
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/input_message.rb +0 -31
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/item_reference.rb +0 -23
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/local_shell_tool_call.rb +0 -26
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/local_shell_tool_call_output.rb +0 -33
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/mcp_approval_request.rb +0 -30
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/mcp_approval_response.rb +0 -28
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/mcp_list_tools.rb +0 -29
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/mcp_tool_call.rb +0 -35
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/output_message.rb +0 -35
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/reasoning.rb +0 -33
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/system_message.rb +0 -20
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/tool_call_base.rb +0 -27
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/tool_message.rb +0 -23
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/user_message.rb +0 -20
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/web_search_tool_call.rb +0 -24
- data/lib/active_agent/providers/open_ai/responses/requests/prompt_reference.rb +0 -23
- data/lib/active_agent/providers/open_ai/responses/requests/reasoning.rb +0 -23
- data/lib/active_agent/providers/open_ai/responses/requests/stream_options.rb +0 -20
- data/lib/active_agent/providers/open_ai/responses/requests/text/_types.rb +0 -89
- data/lib/active_agent/providers/open_ai/responses/requests/text/base.rb +0 -22
- data/lib/active_agent/providers/open_ai/responses/requests/text/json_object.rb +0 -20
- data/lib/active_agent/providers/open_ai/responses/requests/text/json_schema.rb +0 -48
- data/lib/active_agent/providers/open_ai/responses/requests/text/plain.rb +0 -20
- data/lib/active_agent/providers/open_ai/responses/requests/text.rb +0 -41
- data/lib/active_agent/providers/open_ai/responses/requests/tool_choice.rb +0 -26
- data/lib/active_agent/providers/open_ai/responses/requests/tools/_types.rb +0 -112
- data/lib/active_agent/providers/open_ai/responses/requests/tools/base.rb +0 -25
- data/lib/active_agent/providers/open_ai/responses/requests/tools/code_interpreter_tool.rb +0 -23
- data/lib/active_agent/providers/open_ai/responses/requests/tools/computer_tool.rb +0 -27
- data/lib/active_agent/providers/open_ai/responses/requests/tools/custom_tool.rb +0 -28
- data/lib/active_agent/providers/open_ai/responses/requests/tools/file_search_tool.rb +0 -27
- data/lib/active_agent/providers/open_ai/responses/requests/tools/function_tool.rb +0 -29
- data/lib/active_agent/providers/open_ai/responses/requests/tools/image_generation_tool.rb +0 -37
- data/lib/active_agent/providers/open_ai/responses/requests/tools/local_shell_tool.rb +0 -21
- data/lib/active_agent/providers/open_ai/responses/requests/tools/mcp_tool.rb +0 -41
- data/lib/active_agent/providers/open_ai/responses/requests/tools/web_search_preview_tool.rb +0 -24
- data/lib/active_agent/providers/open_ai/responses/requests/tools/web_search_tool.rb +0 -25
- data/lib/active_agent/providers/open_ai/schema.yml +0 -65937
- data/lib/active_agent/providers/open_router/requests/message.rb +0 -1
- data/lib/active_agent/providers/open_router/requests/messages/assistant.rb +0 -20
- data/lib/active_agent/providers/open_router/requests/messages/user.rb +0 -30
|
@@ -1,107 +1,186 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require "
|
|
4
|
-
|
|
3
|
+
require "delegate"
|
|
4
|
+
require "json"
|
|
5
|
+
require_relative "transforms"
|
|
5
6
|
|
|
6
7
|
module ActiveAgent
|
|
7
8
|
module Providers
|
|
8
9
|
module Anthropic
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
10
|
+
# Request wrapper that delegates to Anthropic gem model.
|
|
11
|
+
#
|
|
12
|
+
# Uses SimpleDelegator to wrap ::Anthropic::Models::MessageCreateParams,
|
|
13
|
+
# eliminating the need to maintain duplicate attribute definitions while
|
|
14
|
+
# providing convenience transformations and custom fields.
|
|
15
|
+
#
|
|
16
|
+
# All standard Anthropic API fields are automatically available via delegation:
|
|
17
|
+
# - model, messages, max_tokens
|
|
18
|
+
# - system, temperature, top_k, top_p, stop_sequences
|
|
19
|
+
# - tools, tool_choice, thinking
|
|
20
|
+
# - stream, metadata, context_management, container, service_tier, mcp_servers
|
|
21
|
+
#
|
|
22
|
+
# Custom fields managed separately:
|
|
23
|
+
# - response_format (simulated JSON mode feature)
|
|
24
|
+
#
|
|
25
|
+
# @example Basic usage
|
|
26
|
+
# request = Request.new(
|
|
27
|
+
# model: "claude-3-5-haiku-latest",
|
|
28
|
+
# messages: [{role: "user", content: "Hello"}]
|
|
29
|
+
# )
|
|
30
|
+
# request.model #=> "claude-3-5-haiku-latest"
|
|
31
|
+
# request.max_tokens #=> 4096 (default)
|
|
32
|
+
#
|
|
33
|
+
# @example With transformations
|
|
34
|
+
# # String content is automatically normalized
|
|
35
|
+
# request = Request.new(
|
|
36
|
+
# model: "...",
|
|
37
|
+
# messages: [{role: "user", content: "Hi"}]
|
|
38
|
+
# )
|
|
39
|
+
# # Internally becomes: [{type: "text", text: "Hi"}]
|
|
40
|
+
#
|
|
41
|
+
# @example Custom field
|
|
42
|
+
# request = Request.new(
|
|
43
|
+
# model: "...",
|
|
44
|
+
# messages: [...],
|
|
45
|
+
# response_format: {type: "json_object"}
|
|
46
|
+
# )
|
|
47
|
+
# request.response_format #=> {type: "json_object"}
|
|
48
|
+
class Request < SimpleDelegator
|
|
49
|
+
# Default max_tokens value when not specified
|
|
50
|
+
DEFAULT_MAX_TOKENS = 4096
|
|
51
|
+
|
|
52
|
+
# Default values for optional parameters
|
|
53
|
+
DEFAULTS = {
|
|
54
|
+
max_tokens: DEFAULT_MAX_TOKENS,
|
|
55
|
+
stop_sequences: [],
|
|
56
|
+
mcp_servers: []
|
|
57
|
+
}.freeze
|
|
58
|
+
|
|
59
|
+
# @return [Hash, nil] simulated JSON response format configuration
|
|
60
|
+
attr_reader :response_format
|
|
61
|
+
|
|
62
|
+
# @return [Boolean, nil] whether to stream the response
|
|
63
|
+
attr_reader :stream
|
|
64
|
+
|
|
65
|
+
# @param params [Hash]
|
|
66
|
+
# @option params [String] :model required
|
|
67
|
+
# @option params [Array<Hash>] :messages required
|
|
68
|
+
# @option params [Integer] :max_tokens (4096)
|
|
69
|
+
# @option params [Hash] :response_format custom field for JSON mode simulation
|
|
70
|
+
# @option params [String] :anthropic_beta beta version for features like MCP
|
|
71
|
+
# @raise [ArgumentError] when gem model validation fails
|
|
72
|
+
def initialize(**params)
|
|
73
|
+
# Step 1: Extract custom fields that gem doesn't support
|
|
74
|
+
@response_format = params.delete(:response_format)
|
|
75
|
+
@stream = params.delete(:stream)
|
|
76
|
+
anthropic_beta = params.delete(:anthropic_beta)
|
|
77
|
+
|
|
78
|
+
# Step 2: Map common format 'instructions' to Anthropic's 'system'
|
|
79
|
+
if params.key?(:instructions)
|
|
80
|
+
params[:system] = params.delete(:instructions)
|
|
81
|
+
end
|
|
43
82
|
|
|
44
|
-
|
|
45
|
-
|
|
83
|
+
# Step 3: Apply defaults
|
|
84
|
+
params = apply_defaults(params)
|
|
46
85
|
|
|
47
|
-
|
|
48
|
-
|
|
86
|
+
# Step 4: Transform params for gem compatibility
|
|
87
|
+
transformed = Transforms.normalize_params(params)
|
|
49
88
|
|
|
50
|
-
|
|
51
|
-
|
|
89
|
+
# Step 5: Determine if we need beta params (for MCP or other beta features)
|
|
90
|
+
use_beta = anthropic_beta.present? || transformed[:mcp_servers]&.any?
|
|
52
91
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
92
|
+
# Step 6: Add betas parameter if using beta API
|
|
93
|
+
if use_beta
|
|
94
|
+
# Default to MCP beta version if not specified
|
|
95
|
+
beta_version = anthropic_beta || "mcp-client-2025-04-04"
|
|
96
|
+
transformed[:betas] = [ beta_version ]
|
|
97
|
+
end
|
|
58
98
|
|
|
59
|
-
|
|
60
|
-
|
|
99
|
+
# Step 7: Create gem model - use Beta version if needed
|
|
100
|
+
gem_model = if use_beta
|
|
101
|
+
::Anthropic::Models::Beta::MessageCreateParams.new(**transformed)
|
|
102
|
+
else
|
|
103
|
+
::Anthropic::Models::MessageCreateParams.new(**transformed)
|
|
104
|
+
end
|
|
61
105
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
106
|
+
# Step 8: Delegate all method calls to gem model
|
|
107
|
+
super(gem_model)
|
|
108
|
+
rescue ArgumentError => e
|
|
109
|
+
# Re-raise with more context
|
|
110
|
+
raise ArgumentError, "Invalid Anthropic request parameters: #{e.message}"
|
|
111
|
+
end
|
|
66
112
|
|
|
67
|
-
#
|
|
68
|
-
|
|
113
|
+
# Serializes request for API call.
|
|
114
|
+
#
|
|
115
|
+
# Uses gem's JSON serialization and delegates cleanup to Transforms module.
|
|
116
|
+
#
|
|
117
|
+
# @return [Hash]
|
|
118
|
+
def serialize
|
|
119
|
+
# Use gem's JSON serialization (handles all nested objects)
|
|
120
|
+
hash = Anthropic::Transforms.gem_to_hash(__getobj__)
|
|
121
|
+
|
|
122
|
+
# Delegate cleanup to transforms module
|
|
123
|
+
Transforms.cleanup_serialized_request(hash, DEFAULTS, __getobj__)
|
|
124
|
+
end
|
|
69
125
|
|
|
70
|
-
#
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
126
|
+
# Accessor for system instructions.
|
|
127
|
+
#
|
|
128
|
+
# Must override SimpleDelegator's method_missing because Ruby's Kernel.system
|
|
129
|
+
# conflicts with delegation. The gem stores data in @data instance variable.
|
|
130
|
+
#
|
|
131
|
+
# @return [String, Array, nil]
|
|
132
|
+
def system
|
|
133
|
+
__getobj__.instance_variable_get(:@data)[:system]
|
|
74
134
|
end
|
|
75
135
|
|
|
76
|
-
|
|
136
|
+
# @param value [String, Array]
|
|
137
|
+
def system=(value)
|
|
138
|
+
__getobj__.instance_variable_get(:@data)[:system] = value
|
|
139
|
+
end
|
|
77
140
|
|
|
78
|
-
|
|
79
|
-
|
|
141
|
+
# Alias for system (common format compatibility).
|
|
142
|
+
#
|
|
143
|
+
# @return [String, Array, nil]
|
|
144
|
+
def instructions
|
|
145
|
+
system
|
|
146
|
+
end
|
|
80
147
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
148
|
+
# @param value [String, Array]
|
|
149
|
+
def instructions=(value)
|
|
150
|
+
self.system = value
|
|
84
151
|
end
|
|
85
152
|
|
|
86
|
-
|
|
87
|
-
|
|
153
|
+
# Accessor for MCP servers.
|
|
154
|
+
#
|
|
155
|
+
# Safely returns MCP servers array, defaulting to empty array if not set.
|
|
156
|
+
#
|
|
157
|
+
# @return [Array]
|
|
158
|
+
def mcp_servers
|
|
159
|
+
__getobj__.instance_variable_get(:@data)[:mcp_servers] || []
|
|
160
|
+
end
|
|
88
161
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
162
|
+
# Removes the last message from the messages array.
|
|
163
|
+
#
|
|
164
|
+
# Used for JSON format simulation to remove the lead-in assistant message.
|
|
165
|
+
#
|
|
166
|
+
# @return [void]
|
|
167
|
+
def pop_message!
|
|
168
|
+
new_messages = messages.dup
|
|
169
|
+
new_messages.pop
|
|
170
|
+
self.messages = new_messages
|
|
92
171
|
end
|
|
93
172
|
|
|
94
|
-
|
|
95
|
-
return if mcp_servers.nil? || mcp_servers.empty?
|
|
173
|
+
private
|
|
96
174
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
175
|
+
# @param params [Hash]
|
|
176
|
+
# @return [Hash]
|
|
177
|
+
def apply_defaults(params)
|
|
178
|
+
# Only apply defaults for keys that aren't present
|
|
179
|
+
DEFAULTS.each do |key, value|
|
|
180
|
+
params[key] = value unless params.key?(key)
|
|
100
181
|
end
|
|
101
182
|
|
|
102
|
-
|
|
103
|
-
errors.add(:mcp_servers, "can have at most 20 servers")
|
|
104
|
-
end
|
|
183
|
+
params
|
|
105
184
|
end
|
|
106
185
|
end
|
|
107
186
|
end
|