activeagent 0.6.3 → 1.0.0.rc1
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 +210 -2
- data/README.md +15 -24
- data/lib/active_agent/base.rb +389 -39
- data/lib/active_agent/concerns/callbacks.rb +251 -0
- data/lib/active_agent/concerns/observers.rb +147 -0
- data/lib/active_agent/concerns/parameterized.rb +292 -0
- data/lib/active_agent/concerns/provider.rb +120 -0
- data/lib/active_agent/concerns/queueing.rb +36 -0
- data/lib/active_agent/concerns/rescue.rb +64 -0
- data/lib/active_agent/concerns/streaming.rb +282 -0
- data/lib/active_agent/concerns/tooling.rb +23 -0
- data/lib/active_agent/concerns/view.rb +150 -0
- data/lib/active_agent/configuration.rb +442 -20
- data/lib/active_agent/generation.rb +141 -47
- data/lib/active_agent/generation_provider/open_router/types.rb +505 -0
- data/lib/active_agent/generation_provider/xai_provider.rb +144 -0
- data/lib/active_agent/providers/_base_provider.rb +410 -0
- data/lib/active_agent/providers/anthropic/_types.rb +63 -0
- data/lib/active_agent/providers/anthropic/options.rb +53 -0
- data/lib/active_agent/providers/anthropic/request.rb +109 -0
- data/lib/active_agent/providers/anthropic/requests/_types.rb +190 -0
- data/lib/active_agent/providers/anthropic/requests/container_params.rb +19 -0
- data/lib/active_agent/providers/anthropic/requests/content/base.rb +21 -0
- data/lib/active_agent/providers/anthropic/requests/content/sources/base.rb +22 -0
- data/lib/active_agent/providers/anthropic/requests/context_management_config.rb +18 -0
- data/lib/active_agent/providers/anthropic/requests/messages/_types.rb +189 -0
- data/lib/active_agent/providers/anthropic/requests/messages/assistant.rb +23 -0
- data/lib/active_agent/providers/anthropic/requests/messages/base.rb +63 -0
- data/lib/active_agent/providers/anthropic/requests/messages/content/_types.rb +143 -0
- data/lib/active_agent/providers/anthropic/requests/messages/content/base.rb +21 -0
- data/lib/active_agent/providers/anthropic/requests/messages/content/document.rb +26 -0
- data/lib/active_agent/providers/anthropic/requests/messages/content/image.rb +23 -0
- data/lib/active_agent/providers/anthropic/requests/messages/content/redacted_thinking.rb +21 -0
- data/lib/active_agent/providers/anthropic/requests/messages/content/search_result.rb +27 -0
- data/lib/active_agent/providers/anthropic/requests/messages/content/sources/_types.rb +171 -0
- data/lib/active_agent/providers/anthropic/requests/messages/content/sources/base.rb +22 -0
- data/lib/active_agent/providers/anthropic/requests/messages/content/sources/document_base64.rb +25 -0
- data/lib/active_agent/providers/anthropic/requests/messages/content/sources/document_file.rb +23 -0
- data/lib/active_agent/providers/anthropic/requests/messages/content/sources/document_text.rb +25 -0
- data/lib/active_agent/providers/anthropic/requests/messages/content/sources/document_url.rb +23 -0
- data/lib/active_agent/providers/anthropic/requests/messages/content/sources/image_base64.rb +27 -0
- data/lib/active_agent/providers/anthropic/requests/messages/content/sources/image_file.rb +23 -0
- data/lib/active_agent/providers/anthropic/requests/messages/content/sources/image_url.rb +23 -0
- data/lib/active_agent/providers/anthropic/requests/messages/content/text.rb +22 -0
- data/lib/active_agent/providers/anthropic/requests/messages/content/thinking.rb +23 -0
- data/lib/active_agent/providers/anthropic/requests/messages/content/tool_result.rb +24 -0
- data/lib/active_agent/providers/anthropic/requests/messages/content/tool_use.rb +28 -0
- data/lib/active_agent/providers/anthropic/requests/messages/user.rb +21 -0
- data/lib/active_agent/providers/anthropic/requests/metadata.rb +18 -0
- data/lib/active_agent/providers/anthropic/requests/response_format.rb +22 -0
- data/lib/active_agent/providers/anthropic/requests/thinking_config/_types.rb +60 -0
- data/lib/active_agent/providers/anthropic/requests/thinking_config/base.rb +20 -0
- data/lib/active_agent/providers/anthropic/requests/thinking_config/disabled.rb +16 -0
- data/lib/active_agent/providers/anthropic/requests/thinking_config/enabled.rb +20 -0
- data/lib/active_agent/providers/anthropic/requests/tool_choice/_types.rb +78 -0
- data/lib/active_agent/providers/anthropic/requests/tool_choice/any.rb +17 -0
- data/lib/active_agent/providers/anthropic/requests/tool_choice/auto.rb +17 -0
- data/lib/active_agent/providers/anthropic/requests/tool_choice/base.rb +20 -0
- data/lib/active_agent/providers/anthropic/requests/tool_choice/none.rb +16 -0
- data/lib/active_agent/providers/anthropic/requests/tool_choice/tool.rb +20 -0
- data/lib/active_agent/providers/anthropic_provider.rb +211 -0
- data/lib/active_agent/providers/common/messages/_types.rb +124 -0
- data/lib/active_agent/providers/common/messages/assistant.rb +57 -0
- data/lib/active_agent/providers/common/messages/base.rb +17 -0
- data/lib/active_agent/providers/common/messages/system.rb +20 -0
- data/lib/active_agent/providers/common/messages/tool.rb +21 -0
- data/lib/active_agent/providers/common/messages/user.rb +20 -0
- data/lib/active_agent/providers/common/model.rb +361 -0
- data/lib/active_agent/providers/common/response.rb +13 -0
- data/lib/active_agent/providers/common/responses/_types.rb +51 -0
- data/lib/active_agent/providers/common/responses/base.rb +151 -0
- data/lib/active_agent/providers/common/responses/embed.rb +33 -0
- data/lib/active_agent/providers/common/responses/format.rb +31 -0
- data/lib/active_agent/providers/common/responses/message.rb +3 -0
- data/lib/active_agent/providers/common/responses/prompt.rb +42 -0
- data/lib/active_agent/providers/concerns/exception_handler.rb +72 -0
- data/lib/active_agent/providers/concerns/previewable.rb +150 -0
- data/lib/active_agent/providers/log_subscriber.rb +360 -0
- data/lib/active_agent/providers/mock/_types.rb +77 -0
- data/lib/active_agent/providers/mock/embedding_request.rb +17 -0
- data/lib/active_agent/providers/mock/messages/_types.rb +103 -0
- data/lib/active_agent/providers/mock/messages/assistant.rb +26 -0
- data/lib/active_agent/providers/mock/messages/base.rb +63 -0
- data/lib/active_agent/providers/mock/messages/user.rb +18 -0
- data/lib/active_agent/providers/mock/options.rb +30 -0
- data/lib/active_agent/providers/mock/request.rb +38 -0
- data/lib/active_agent/providers/mock_provider.rb +311 -0
- data/lib/active_agent/providers/ollama/_types.rb +5 -0
- data/lib/active_agent/providers/ollama/chat/_types.rb +44 -0
- data/lib/active_agent/providers/ollama/chat/request.rb +70 -0
- data/lib/active_agent/providers/ollama/chat/requests/_types.rb +3 -0
- data/lib/active_agent/providers/ollama/chat/requests/messages/_types.rb +116 -0
- data/lib/active_agent/providers/ollama/chat/requests/messages/assistant.rb +19 -0
- data/lib/active_agent/providers/ollama/chat/requests/messages/user.rb +19 -0
- data/lib/active_agent/providers/ollama/embedding/_types.rb +44 -0
- data/lib/active_agent/providers/ollama/embedding/request.rb +77 -0
- data/lib/active_agent/providers/ollama/embedding/requests/_types.rb +83 -0
- data/lib/active_agent/providers/ollama/embedding/requests/options.rb +104 -0
- data/lib/active_agent/providers/ollama/options.rb +27 -0
- data/lib/active_agent/providers/ollama_provider.rb +95 -0
- data/lib/active_agent/providers/open_ai/_base.rb +58 -0
- data/lib/active_agent/providers/open_ai/_types.rb +5 -0
- data/lib/active_agent/providers/open_ai/chat/_types.rb +44 -0
- data/lib/active_agent/providers/open_ai/chat/request.rb +215 -0
- data/lib/active_agent/providers/open_ai/chat/requests/_types.rb +229 -0
- data/lib/active_agent/providers/open_ai/chat/requests/audio.rb +24 -0
- data/lib/active_agent/providers/open_ai/chat/requests/messages/_types.rb +123 -0
- data/lib/active_agent/providers/open_ai/chat/requests/messages/assistant.rb +42 -0
- data/lib/active_agent/providers/open_ai/chat/requests/messages/base.rb +78 -0
- data/lib/active_agent/providers/open_ai/chat/requests/messages/content/_types.rb +133 -0
- data/lib/active_agent/providers/open_ai/chat/requests/messages/content/audio.rb +35 -0
- data/lib/active_agent/providers/open_ai/chat/requests/messages/content/base.rb +24 -0
- data/lib/active_agent/providers/open_ai/chat/requests/messages/content/file.rb +26 -0
- data/lib/active_agent/providers/open_ai/chat/requests/messages/content/files/_types.rb +60 -0
- data/lib/active_agent/providers/open_ai/chat/requests/messages/content/files/details.rb +41 -0
- data/lib/active_agent/providers/open_ai/chat/requests/messages/content/image.rb +37 -0
- data/lib/active_agent/providers/open_ai/chat/requests/messages/content/refusal.rb +25 -0
- data/lib/active_agent/providers/open_ai/chat/requests/messages/content/text.rb +25 -0
- data/lib/active_agent/providers/open_ai/chat/requests/messages/developer.rb +25 -0
- data/lib/active_agent/providers/open_ai/chat/requests/messages/function.rb +25 -0
- data/lib/active_agent/providers/open_ai/chat/requests/messages/system.rb +25 -0
- data/lib/active_agent/providers/open_ai/chat/requests/messages/tool.rb +26 -0
- data/lib/active_agent/providers/open_ai/chat/requests/messages/user.rb +32 -0
- data/lib/active_agent/providers/open_ai/chat/requests/prediction.rb +46 -0
- data/lib/active_agent/providers/open_ai/chat/requests/response_format.rb +53 -0
- data/lib/active_agent/providers/open_ai/chat/requests/stream_options.rb +24 -0
- data/lib/active_agent/providers/open_ai/chat/requests/tool_choice.rb +26 -0
- data/lib/active_agent/providers/open_ai/chat/requests/tools/_types.rb +5 -0
- data/lib/active_agent/providers/open_ai/chat/requests/tools/base.rb +22 -0
- data/lib/active_agent/providers/open_ai/chat/requests/tools/custom_tool.rb +41 -0
- data/lib/active_agent/providers/open_ai/chat/requests/tools/function_tool.rb +51 -0
- data/lib/active_agent/providers/open_ai/chat/requests/web_search_options.rb +45 -0
- data/lib/active_agent/providers/open_ai/chat_provider.rb +198 -0
- data/lib/active_agent/providers/open_ai/embedding/_types.rb +45 -0
- data/lib/active_agent/providers/open_ai/embedding/request.rb +85 -0
- data/lib/active_agent/providers/open_ai/embedding/requests/_types.rb +49 -0
- data/lib/active_agent/providers/open_ai/options.rb +74 -0
- data/lib/active_agent/providers/open_ai/responses/_types.rb +50 -0
- data/lib/active_agent/providers/open_ai/responses/request.rb +163 -0
- data/lib/active_agent/providers/open_ai/responses/requests/_types.rb +231 -0
- data/lib/active_agent/providers/open_ai/responses/requests/conversation.rb +23 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/_types.rb +264 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/assistant_message.rb +22 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/base.rb +89 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/code_interpreter_tool_call.rb +30 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/computer_tool_call.rb +28 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/computer_tool_call_output.rb +33 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/content/_types.rb +207 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/content/base.rb +22 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/content/input_audio.rb +26 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/content/input_file.rb +28 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/content/input_image.rb +28 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/content/input_text.rb +25 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/custom_tool_call.rb +28 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/custom_tool_call_output.rb +27 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/developer_message.rb +20 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/file_search_tool_call.rb +25 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/function_call_output.rb +32 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/function_tool_call.rb +28 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/image_gen_tool_call.rb +27 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/input_message.rb +31 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/item_reference.rb +23 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/local_shell_tool_call.rb +26 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/local_shell_tool_call_output.rb +33 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/mcp_approval_request.rb +30 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/mcp_approval_response.rb +28 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/mcp_list_tools.rb +29 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/mcp_tool_call.rb +35 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/output_message.rb +35 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/reasoning.rb +33 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/system_message.rb +20 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/tool_call_base.rb +27 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/tool_message.rb +23 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/user_message.rb +20 -0
- data/lib/active_agent/providers/open_ai/responses/requests/inputs/web_search_tool_call.rb +24 -0
- data/lib/active_agent/providers/open_ai/responses/requests/prompt_reference.rb +23 -0
- data/lib/active_agent/providers/open_ai/responses/requests/reasoning.rb +23 -0
- data/lib/active_agent/providers/open_ai/responses/requests/stream_options.rb +20 -0
- data/lib/active_agent/providers/open_ai/responses/requests/text/_types.rb +89 -0
- data/lib/active_agent/providers/open_ai/responses/requests/text/base.rb +22 -0
- data/lib/active_agent/providers/open_ai/responses/requests/text/json_object.rb +20 -0
- data/lib/active_agent/providers/open_ai/responses/requests/text/json_schema.rb +48 -0
- data/lib/active_agent/providers/open_ai/responses/requests/text/plain.rb +20 -0
- data/lib/active_agent/providers/open_ai/responses/requests/text.rb +41 -0
- data/lib/active_agent/providers/open_ai/responses/requests/tool_choice.rb +26 -0
- data/lib/active_agent/providers/open_ai/responses/requests/tools/_types.rb +112 -0
- data/lib/active_agent/providers/open_ai/responses/requests/tools/base.rb +25 -0
- data/lib/active_agent/providers/open_ai/responses/requests/tools/code_interpreter_tool.rb +23 -0
- data/lib/active_agent/providers/open_ai/responses/requests/tools/computer_tool.rb +27 -0
- data/lib/active_agent/providers/open_ai/responses/requests/tools/custom_tool.rb +28 -0
- data/lib/active_agent/providers/open_ai/responses/requests/tools/file_search_tool.rb +27 -0
- data/lib/active_agent/providers/open_ai/responses/requests/tools/function_tool.rb +29 -0
- data/lib/active_agent/providers/open_ai/responses/requests/tools/image_generation_tool.rb +37 -0
- data/lib/active_agent/providers/open_ai/responses/requests/tools/local_shell_tool.rb +21 -0
- data/lib/active_agent/providers/open_ai/responses/requests/tools/mcp_tool.rb +41 -0
- data/lib/active_agent/providers/open_ai/responses/requests/tools/web_search_preview_tool.rb +24 -0
- data/lib/active_agent/providers/open_ai/responses/requests/tools/web_search_tool.rb +25 -0
- data/lib/active_agent/providers/open_ai/responses_provider.rb +153 -0
- data/lib/active_agent/providers/open_ai/schema.yml +65937 -0
- data/lib/active_agent/providers/open_ai_provider.rb +97 -0
- data/lib/active_agent/providers/open_router/_types.rb +45 -0
- data/lib/active_agent/providers/open_router/options.rb +93 -0
- data/lib/active_agent/providers/open_router/request.rb +83 -0
- data/lib/active_agent/providers/open_router/requests/_types.rb +198 -0
- data/lib/active_agent/providers/open_router/requests/message.rb +1 -0
- data/lib/active_agent/providers/open_router/requests/messages/_types.rb +59 -0
- data/lib/active_agent/providers/open_router/requests/messages/assistant.rb +20 -0
- data/lib/active_agent/providers/open_router/requests/messages/content/_types.rb +97 -0
- data/lib/active_agent/providers/open_router/requests/messages/content/file.rb +27 -0
- data/lib/active_agent/providers/open_router/requests/messages/content/files/_types.rb +61 -0
- data/lib/active_agent/providers/open_router/requests/messages/content/files/details.rb +26 -0
- data/lib/active_agent/providers/open_router/requests/messages/user.rb +30 -0
- data/lib/active_agent/providers/open_router/requests/plugin.rb +25 -0
- data/lib/active_agent/providers/open_router/requests/plugins/_types.rb +46 -0
- data/lib/active_agent/providers/open_router/requests/plugins/pdf_config.rb +29 -0
- data/lib/active_agent/providers/open_router/requests/prediction.rb +17 -0
- data/lib/active_agent/providers/open_router/requests/provider_preferences/_types.rb +44 -0
- data/lib/active_agent/providers/open_router/requests/provider_preferences/max_price.rb +30 -0
- data/lib/active_agent/providers/open_router/requests/provider_preferences.rb +64 -0
- data/lib/active_agent/providers/open_router/requests/response_format.rb +49 -0
- data/lib/active_agent/providers/open_router_provider.rb +53 -0
- data/lib/active_agent/providers/openai_provider.rb +2 -0
- data/lib/active_agent/providers/openrouter_provider.rb +2 -0
- data/lib/active_agent/railtie.rb +8 -6
- data/lib/active_agent/schema_generator.rb +333 -166
- data/lib/active_agent/version.rb +1 -1
- data/lib/active_agent.rb +112 -36
- data/lib/generators/active_agent/agent/USAGE +78 -0
- data/lib/generators/active_agent/{agent_generator.rb → agent/agent_generator.rb} +14 -4
- data/lib/generators/active_agent/install/USAGE +25 -0
- data/lib/generators/active_agent/{install_generator.rb → install/install_generator.rb} +1 -19
- data/lib/generators/active_agent/templates/agent.rb.tt +7 -3
- data/lib/generators/active_agent/templates/application_agent.rb.tt +0 -2
- data/lib/generators/erb/agent_generator.rb +31 -16
- data/lib/generators/erb/templates/instructions.md.erb.tt +3 -0
- data/lib/generators/erb/templates/instructions.md.tt +3 -0
- data/lib/generators/erb/templates/instructions.text.tt +1 -0
- data/lib/generators/erb/templates/message.md.erb.tt +5 -0
- data/lib/generators/erb/templates/schema.json.tt +10 -0
- data/lib/generators/test_unit/agent_generator.rb +1 -1
- data/lib/generators/test_unit/templates/functional_test.rb.tt +4 -2
- metadata +320 -65
- data/lib/active_agent/action_prompt/action.rb +0 -13
- data/lib/active_agent/action_prompt/base.rb +0 -623
- data/lib/active_agent/action_prompt/message.rb +0 -126
- data/lib/active_agent/action_prompt/prompt.rb +0 -136
- data/lib/active_agent/action_prompt.rb +0 -19
- data/lib/active_agent/callbacks.rb +0 -33
- data/lib/active_agent/generation_provider/anthropic_provider.rb +0 -163
- data/lib/active_agent/generation_provider/base.rb +0 -55
- data/lib/active_agent/generation_provider/base_adapter.rb +0 -19
- data/lib/active_agent/generation_provider/error_handling.rb +0 -167
- data/lib/active_agent/generation_provider/log_subscriber.rb +0 -92
- data/lib/active_agent/generation_provider/message_formatting.rb +0 -107
- data/lib/active_agent/generation_provider/ollama_provider.rb +0 -66
- data/lib/active_agent/generation_provider/open_ai_provider.rb +0 -279
- data/lib/active_agent/generation_provider/open_router_provider.rb +0 -385
- data/lib/active_agent/generation_provider/parameter_builder.rb +0 -119
- data/lib/active_agent/generation_provider/response.rb +0 -75
- data/lib/active_agent/generation_provider/responses_adapter.rb +0 -44
- data/lib/active_agent/generation_provider/stream_processing.rb +0 -58
- data/lib/active_agent/generation_provider/tool_management.rb +0 -142
- data/lib/active_agent/generation_provider.rb +0 -67
- data/lib/active_agent/log_subscriber.rb +0 -44
- data/lib/active_agent/parameterized.rb +0 -75
- data/lib/active_agent/prompt_helper.rb +0 -19
- data/lib/active_agent/queued_generation.rb +0 -12
- data/lib/active_agent/rescuable.rb +0 -34
- data/lib/active_agent/sanitizers.rb +0 -40
- data/lib/active_agent/streaming.rb +0 -34
- data/lib/active_agent/test_case.rb +0 -125
- data/lib/generators/USAGE +0 -47
- data/lib/generators/active_agent/USAGE +0 -56
- data/lib/generators/erb/install_generator.rb +0 -44
- data/lib/generators/erb/templates/layout.html.erb.tt +0 -1
- data/lib/generators/erb/templates/layout.json.erb.tt +0 -1
- data/lib/generators/erb/templates/layout.text.erb.tt +0 -1
- data/lib/generators/erb/templates/view.html.erb.tt +0 -5
- data/lib/generators/erb/templates/view.json.erb.tt +0 -16
- /data/lib/active_agent/{preview.rb → concerns/preview.rb} +0 -0
- /data/lib/generators/erb/templates/{view.text.erb.tt → message.text.erb.tt} +0 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
|
|
5
|
+
module ActiveAgent
|
|
6
|
+
module Providers
|
|
7
|
+
module OpenAI
|
|
8
|
+
module Responses
|
|
9
|
+
module Requests
|
|
10
|
+
module Inputs
|
|
11
|
+
# Tool message input
|
|
12
|
+
class ToolMessage < Base
|
|
13
|
+
attribute :role, :string, as: "tool"
|
|
14
|
+
attribute :tool_call_id, :string
|
|
15
|
+
|
|
16
|
+
validates :tool_call_id, presence: true
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "input_message"
|
|
4
|
+
|
|
5
|
+
module ActiveAgent
|
|
6
|
+
module Providers
|
|
7
|
+
module OpenAI
|
|
8
|
+
module Responses
|
|
9
|
+
module Requests
|
|
10
|
+
module Inputs
|
|
11
|
+
# User message input
|
|
12
|
+
class UserMessage < InputMessage
|
|
13
|
+
attribute :role, :string, as: "user"
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "tool_call_base"
|
|
4
|
+
|
|
5
|
+
module ActiveAgent
|
|
6
|
+
module Providers
|
|
7
|
+
module OpenAI
|
|
8
|
+
module Responses
|
|
9
|
+
module Requests
|
|
10
|
+
module Inputs
|
|
11
|
+
# Web search tool call - results from web search
|
|
12
|
+
class WebSearchToolCall < ToolCallBase
|
|
13
|
+
attribute :type, :string, as: "web_search_call"
|
|
14
|
+
attribute :action # WebSearchAction object (search, open_page, or find)
|
|
15
|
+
|
|
16
|
+
validates :type, inclusion: { in: %w[web_search_call], allow_nil: false }
|
|
17
|
+
validates :action, presence: true
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "active_agent/providers/common/model"
|
|
4
|
+
|
|
5
|
+
module ActiveAgent
|
|
6
|
+
module Providers
|
|
7
|
+
module OpenAI
|
|
8
|
+
module Responses
|
|
9
|
+
module Requests
|
|
10
|
+
class PromptReference < Common::BaseModel
|
|
11
|
+
# Prompt ID or name
|
|
12
|
+
attribute :id, :string
|
|
13
|
+
|
|
14
|
+
# Variables for the prompt template
|
|
15
|
+
attribute :variables # Hash of variables
|
|
16
|
+
|
|
17
|
+
validates :id, presence: true
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "active_agent/providers/common/model"
|
|
4
|
+
|
|
5
|
+
module ActiveAgent
|
|
6
|
+
module Providers
|
|
7
|
+
module OpenAI
|
|
8
|
+
module Responses
|
|
9
|
+
module Requests
|
|
10
|
+
class Reasoning < Common::BaseModel
|
|
11
|
+
# Effort level for reasoning (low, medium, high)
|
|
12
|
+
attribute :effort, :string
|
|
13
|
+
|
|
14
|
+
# Summary configuration
|
|
15
|
+
attribute :summary # Can be string or object with format/length
|
|
16
|
+
|
|
17
|
+
validates :effort, inclusion: { in: %w[low medium high] }, allow_nil: true
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "active_agent/providers/common/model"
|
|
4
|
+
|
|
5
|
+
module ActiveAgent
|
|
6
|
+
module Providers
|
|
7
|
+
module OpenAI
|
|
8
|
+
module Responses
|
|
9
|
+
module Requests
|
|
10
|
+
class StreamOptions < Common::BaseModel
|
|
11
|
+
# Include usage information in the stream
|
|
12
|
+
attribute :include_usage, :boolean
|
|
13
|
+
|
|
14
|
+
validates :include_usage, inclusion: { in: [ true, false ] }, allow_nil: true
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
require_relative "plain"
|
|
5
|
+
require_relative "json_object"
|
|
6
|
+
require_relative "json_schema"
|
|
7
|
+
|
|
8
|
+
module ActiveAgent
|
|
9
|
+
module Providers
|
|
10
|
+
module OpenAI
|
|
11
|
+
module Responses
|
|
12
|
+
module Requests
|
|
13
|
+
module TextFormats
|
|
14
|
+
# ActiveModel type for casting and serializing Text format objects
|
|
15
|
+
class FormatType < ActiveModel::Type::Value
|
|
16
|
+
def cast(value)
|
|
17
|
+
case value
|
|
18
|
+
when Plain, JsonObject, JsonSchema
|
|
19
|
+
value
|
|
20
|
+
when Hash
|
|
21
|
+
create_format_from_hash(value)
|
|
22
|
+
when String
|
|
23
|
+
create_format_from_string(value)
|
|
24
|
+
when nil
|
|
25
|
+
nil
|
|
26
|
+
else
|
|
27
|
+
raise ArgumentError, "Cannot cast #{value.class} to Format"
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def serialize(value)
|
|
32
|
+
case value
|
|
33
|
+
when Plain, JsonObject, JsonSchema
|
|
34
|
+
value.serialize
|
|
35
|
+
when Hash
|
|
36
|
+
value
|
|
37
|
+
when nil
|
|
38
|
+
nil
|
|
39
|
+
else
|
|
40
|
+
raise ArgumentError, "Cannot serialize #{value.class}"
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def deserialize(value)
|
|
45
|
+
cast(value)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
private
|
|
49
|
+
|
|
50
|
+
def create_format_from_hash(hash)
|
|
51
|
+
hash = hash.deep_symbolize_keys
|
|
52
|
+
type = hash[:type]
|
|
53
|
+
|
|
54
|
+
case type
|
|
55
|
+
when "text"
|
|
56
|
+
Plain.new
|
|
57
|
+
when "json_object"
|
|
58
|
+
JsonObject.new
|
|
59
|
+
when "json_schema"
|
|
60
|
+
JsonSchema.new(
|
|
61
|
+
name: hash[:name],
|
|
62
|
+
description: hash[:description],
|
|
63
|
+
schema: hash[:schema],
|
|
64
|
+
strict: hash[:strict]
|
|
65
|
+
)
|
|
66
|
+
else
|
|
67
|
+
nil
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def create_format_from_string(value)
|
|
72
|
+
case value
|
|
73
|
+
when "text"
|
|
74
|
+
Plain.new
|
|
75
|
+
when "json_object"
|
|
76
|
+
JsonObject.new
|
|
77
|
+
when "json_schema"
|
|
78
|
+
JsonSchema.new
|
|
79
|
+
else
|
|
80
|
+
nil
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "active_agent/providers/common/model"
|
|
4
|
+
|
|
5
|
+
module ActiveAgent
|
|
6
|
+
module Providers
|
|
7
|
+
module OpenAI
|
|
8
|
+
module Responses
|
|
9
|
+
module Requests
|
|
10
|
+
module TextFormats
|
|
11
|
+
# Base class for text format configurations
|
|
12
|
+
class Base < Common::BaseModel
|
|
13
|
+
attribute :type, :string
|
|
14
|
+
|
|
15
|
+
validates :type, inclusion: { in: %w[text json_object json_schema] }, allow_nil: false
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
|
|
5
|
+
module ActiveAgent
|
|
6
|
+
module Providers
|
|
7
|
+
module OpenAI
|
|
8
|
+
module Responses
|
|
9
|
+
module Requests
|
|
10
|
+
module TextFormats
|
|
11
|
+
# JSON object format (older method)
|
|
12
|
+
class JsonObject < Base
|
|
13
|
+
attribute :type, :string, as: "json_object"
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
|
|
5
|
+
module ActiveAgent
|
|
6
|
+
module Providers
|
|
7
|
+
module OpenAI
|
|
8
|
+
module Responses
|
|
9
|
+
module Requests
|
|
10
|
+
module TextFormats
|
|
11
|
+
# JSON schema format for structured outputs
|
|
12
|
+
class JsonSchema < Base
|
|
13
|
+
attribute :type, :string, as: "json_schema"
|
|
14
|
+
|
|
15
|
+
# Name of the response format
|
|
16
|
+
attribute :name, :string
|
|
17
|
+
|
|
18
|
+
# Description of what the response format is for
|
|
19
|
+
attribute :description, :string
|
|
20
|
+
|
|
21
|
+
# The JSON schema object
|
|
22
|
+
attribute :schema # Hash
|
|
23
|
+
|
|
24
|
+
# Whether to enable strict schema adherence
|
|
25
|
+
attribute :strict, :boolean, default: false
|
|
26
|
+
|
|
27
|
+
validates :name, presence: true
|
|
28
|
+
validates :schema, presence: true
|
|
29
|
+
|
|
30
|
+
validate :validate_schema_structure
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
def validate_schema_structure
|
|
35
|
+
return if schema.blank?
|
|
36
|
+
return unless schema.is_a?(Hash)
|
|
37
|
+
|
|
38
|
+
unless schema.key?("type") || schema.key?(:type)
|
|
39
|
+
errors.add(:schema, "must include a 'type' property")
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
|
|
5
|
+
module ActiveAgent
|
|
6
|
+
module Providers
|
|
7
|
+
module OpenAI
|
|
8
|
+
module Responses
|
|
9
|
+
module Requests
|
|
10
|
+
module TextFormats
|
|
11
|
+
# Plain text format
|
|
12
|
+
class Plain < Base
|
|
13
|
+
attribute :type, :string, as: "text"
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "active_agent/providers/common/model"
|
|
4
|
+
require_relative "text/_types"
|
|
5
|
+
|
|
6
|
+
module ActiveAgent
|
|
7
|
+
module Providers
|
|
8
|
+
module OpenAI
|
|
9
|
+
module Responses
|
|
10
|
+
module Requests
|
|
11
|
+
class Text < Common::BaseModel
|
|
12
|
+
# Format configuration for text output
|
|
13
|
+
attribute :format, TextFormats::FormatType.new
|
|
14
|
+
|
|
15
|
+
# Modalities for output
|
|
16
|
+
attribute :modalities, default: -> { [] } # Array of strings
|
|
17
|
+
|
|
18
|
+
# Verbosity setting
|
|
19
|
+
attribute :verbosity, :string
|
|
20
|
+
|
|
21
|
+
validates :verbosity, inclusion: { in: %w[concise default verbose] }, allow_nil: true
|
|
22
|
+
|
|
23
|
+
# Common Format compatibility - maps format.type to type
|
|
24
|
+
def type
|
|
25
|
+
format&.type
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def type=(value)
|
|
29
|
+
self.format = value
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# For Common Format
|
|
33
|
+
def json_schema=(value)
|
|
34
|
+
self.format = { type: "json_schema", **value }
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "active_agent/providers/common/model"
|
|
4
|
+
|
|
5
|
+
module ActiveAgent
|
|
6
|
+
module Providers
|
|
7
|
+
module OpenAI
|
|
8
|
+
module Responses
|
|
9
|
+
module Requests
|
|
10
|
+
# Tool choice configuration for Responses API
|
|
11
|
+
# Controls how the model should select which tool (or tools) to use when generating a response.
|
|
12
|
+
class ToolChoice < Common::BaseModel
|
|
13
|
+
# Can be string ("none", "auto", "required") or object with type and tool details
|
|
14
|
+
attribute :mode, :string
|
|
15
|
+
attribute :type, :string
|
|
16
|
+
attribute :function # Hash with name
|
|
17
|
+
attribute :custom # Hash with name
|
|
18
|
+
|
|
19
|
+
validates :mode, inclusion: { in: %w[none auto required] }, allow_nil: true
|
|
20
|
+
validates :type, inclusion: { in: %w[function custom] }, allow_nil: true
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
require_relative "code_interpreter_tool"
|
|
5
|
+
require_relative "computer_tool"
|
|
6
|
+
require_relative "custom_tool"
|
|
7
|
+
require_relative "file_search_tool"
|
|
8
|
+
require_relative "function_tool"
|
|
9
|
+
require_relative "image_generation_tool"
|
|
10
|
+
require_relative "local_shell_tool"
|
|
11
|
+
require_relative "mcp_tool"
|
|
12
|
+
require_relative "web_search_preview_tool"
|
|
13
|
+
require_relative "web_search_tool"
|
|
14
|
+
|
|
15
|
+
module ActiveAgent
|
|
16
|
+
module Providers
|
|
17
|
+
module OpenAI
|
|
18
|
+
module Responses
|
|
19
|
+
module Requests
|
|
20
|
+
module Tools
|
|
21
|
+
# Type for collection of tools
|
|
22
|
+
class ToolsType < ActiveModel::Type::Value
|
|
23
|
+
def initialize
|
|
24
|
+
super
|
|
25
|
+
@tool_type = ToolType.new
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def cast(value)
|
|
29
|
+
return nil if value.nil?
|
|
30
|
+
return [] if value == []
|
|
31
|
+
|
|
32
|
+
array = Array(value)
|
|
33
|
+
array.map { |tool| @tool_type.cast(tool) }
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def serialize(value)
|
|
37
|
+
return nil if value.nil?
|
|
38
|
+
return [] if value == []
|
|
39
|
+
|
|
40
|
+
array = Array(value)
|
|
41
|
+
array.map { |tool| @tool_type.serialize(tool) }
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def deserialize(value)
|
|
45
|
+
cast(value)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Type for individual tool
|
|
50
|
+
class ToolType < ActiveModel::Type::Value
|
|
51
|
+
def cast(value)
|
|
52
|
+
case value
|
|
53
|
+
when Base
|
|
54
|
+
value
|
|
55
|
+
when Hash
|
|
56
|
+
hash = value.deep_symbolize_keys
|
|
57
|
+
type = hash[:type]&.to_sym
|
|
58
|
+
|
|
59
|
+
case type
|
|
60
|
+
when :function
|
|
61
|
+
FunctionTool.new(**hash)
|
|
62
|
+
when :custom
|
|
63
|
+
CustomTool.new(**hash)
|
|
64
|
+
when :web_search, :web_search_2025_08_26
|
|
65
|
+
WebSearchTool.new(**hash)
|
|
66
|
+
when :web_search_preview, :web_search_preview_2025_03_11
|
|
67
|
+
WebSearchPreviewTool.new(**hash)
|
|
68
|
+
when :code_interpreter
|
|
69
|
+
CodeInterpreterTool.new(**hash)
|
|
70
|
+
when :file_search
|
|
71
|
+
FileSearchTool.new(**hash)
|
|
72
|
+
when :computer_use_preview
|
|
73
|
+
ComputerTool.new(**hash)
|
|
74
|
+
when :mcp
|
|
75
|
+
McpTool.new(**hash)
|
|
76
|
+
when :image_generation
|
|
77
|
+
ImageGenerationTool.new(**hash)
|
|
78
|
+
when :local_shell
|
|
79
|
+
LocalShellTool.new(**hash)
|
|
80
|
+
else
|
|
81
|
+
raise ArgumentError, "Unknown tool type: #{type.inspect}"
|
|
82
|
+
end
|
|
83
|
+
when nil
|
|
84
|
+
nil
|
|
85
|
+
else
|
|
86
|
+
raise ArgumentError, "Cannot cast #{value.class} to Tool (expected Base, Hash, or nil)"
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def serialize(value)
|
|
91
|
+
case value
|
|
92
|
+
when Base
|
|
93
|
+
value.serialize
|
|
94
|
+
when Hash
|
|
95
|
+
value
|
|
96
|
+
when nil
|
|
97
|
+
nil
|
|
98
|
+
else
|
|
99
|
+
raise ArgumentError, "Cannot serialize #{value.class} as Tool"
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def deserialize(value)
|
|
104
|
+
cast(value)
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "active_agent/providers/common/model"
|
|
4
|
+
|
|
5
|
+
module ActiveAgent
|
|
6
|
+
module Providers
|
|
7
|
+
module OpenAI
|
|
8
|
+
module Responses
|
|
9
|
+
module Requests
|
|
10
|
+
module Tools
|
|
11
|
+
# Base class for tools in Responses API
|
|
12
|
+
class Base < Common::BaseModel
|
|
13
|
+
attribute :type, :string
|
|
14
|
+
|
|
15
|
+
validates :type, inclusion: {
|
|
16
|
+
in: %w[function custom web_search web_search_2025_08_26 code_interpreter file_search computer_use_preview mcp image_generation local_shell web_search_preview web_search_preview_2025_03_11],
|
|
17
|
+
allow_nil: true
|
|
18
|
+
}
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
|
|
5
|
+
module ActiveAgent
|
|
6
|
+
module Providers
|
|
7
|
+
module OpenAI
|
|
8
|
+
module Responses
|
|
9
|
+
module Requests
|
|
10
|
+
module Tools
|
|
11
|
+
# Built-in code interpreter tool
|
|
12
|
+
class CodeInterpreterTool < Base
|
|
13
|
+
attribute :type, :string, as: "code_interpreter"
|
|
14
|
+
attribute :container # Required: can be string (container ID) or hash { type: "auto", file_ids: [] }
|
|
15
|
+
|
|
16
|
+
validates :container, presence: true
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
|
|
5
|
+
module ActiveAgent
|
|
6
|
+
module Providers
|
|
7
|
+
module OpenAI
|
|
8
|
+
module Responses
|
|
9
|
+
module Requests
|
|
10
|
+
module Tools
|
|
11
|
+
# Built-in computer tool (note: type should be "computer_use_preview" per schema)
|
|
12
|
+
class ComputerTool < Base
|
|
13
|
+
attribute :type, :string, as: "computer_use_preview"
|
|
14
|
+
attribute :display_height, :integer # Required: height of the computer display
|
|
15
|
+
attribute :display_width, :integer # Required: width of the computer display
|
|
16
|
+
attribute :environment, :string # Required: type of computer environment to control
|
|
17
|
+
|
|
18
|
+
validates :display_height, presence: true, numericality: { greater_than: 0 }
|
|
19
|
+
validates :display_width, presence: true, numericality: { greater_than: 0 }
|
|
20
|
+
validates :environment, presence: true
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
|
|
5
|
+
module ActiveAgent
|
|
6
|
+
module Providers
|
|
7
|
+
module OpenAI
|
|
8
|
+
module Responses
|
|
9
|
+
module Requests
|
|
10
|
+
module Tools
|
|
11
|
+
# Custom tool
|
|
12
|
+
class CustomTool < Base
|
|
13
|
+
attribute :type, :string, as: "custom"
|
|
14
|
+
attribute :name, :string # Required: name of the custom tool
|
|
15
|
+
attribute :description, :string # Optional: description
|
|
16
|
+
attribute :format # Optional: hash with input format
|
|
17
|
+
# Can be { type: "text" } for unconstrained text
|
|
18
|
+
# Or { type: "grammar", definition: string, syntax: "lark"|"regex" }
|
|
19
|
+
|
|
20
|
+
validates :name, presence: true, length: { maximum: 64 }
|
|
21
|
+
validates :name, format: { with: /\A[a-zA-Z0-9_-]+\z/, message: "must contain only a-z, A-Z, 0-9, underscores and dashes" }, if: -> { name.present? }
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
|
|
5
|
+
module ActiveAgent
|
|
6
|
+
module Providers
|
|
7
|
+
module OpenAI
|
|
8
|
+
module Responses
|
|
9
|
+
module Requests
|
|
10
|
+
module Tools
|
|
11
|
+
# Built-in file search tool
|
|
12
|
+
class FileSearchTool < Base
|
|
13
|
+
attribute :type, :string, as: "file_search"
|
|
14
|
+
attribute :vector_store_ids # Array - required: The IDs of the vector stores to search
|
|
15
|
+
attribute :filters # Hash - optional: A filter to apply
|
|
16
|
+
attribute :max_num_results, :integer # Optional: maximum number of results (1-50)
|
|
17
|
+
attribute :ranking_options # Hash - optional: { ranker: string, score_threshold: number }
|
|
18
|
+
|
|
19
|
+
validates :vector_store_ids, presence: true
|
|
20
|
+
validates :max_num_results, numericality: { greater_than_or_equal_to: 1, less_than_or_equal_to: 50 }, allow_nil: true
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
|
|
5
|
+
module ActiveAgent
|
|
6
|
+
module Providers
|
|
7
|
+
module OpenAI
|
|
8
|
+
module Responses
|
|
9
|
+
module Requests
|
|
10
|
+
module Tools
|
|
11
|
+
# Function tool for custom function calling
|
|
12
|
+
class FunctionTool < Base
|
|
13
|
+
attribute :type, :string, as: "function"
|
|
14
|
+
attribute :name, :string
|
|
15
|
+
attribute :parameters # Hash - JSON Schema object (required)
|
|
16
|
+
attribute :strict, :boolean # Required - whether to enforce strict parameter validation (default true)
|
|
17
|
+
attribute :description, :string # Optional description
|
|
18
|
+
|
|
19
|
+
validates :name, presence: true, length: { maximum: 64 }
|
|
20
|
+
validates :name, format: { with: /\A[a-zA-Z0-9_-]+\z/, message: "must contain only a-z, A-Z, 0-9, underscores and dashes" }, if: -> { name.present? }
|
|
21
|
+
validates :parameters, presence: true
|
|
22
|
+
validates :strict, inclusion: { in: [ true, false ] }, allow_nil: false
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|