activeagent 1.0.0.rc1 → 1.0.0

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.
Files changed (187) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +31 -1
  3. data/lib/active_agent/providers/_base_provider.rb +92 -82
  4. data/lib/active_agent/providers/anthropic/_types.rb +2 -2
  5. data/lib/active_agent/providers/anthropic/request.rb +135 -81
  6. data/lib/active_agent/providers/anthropic/transforms.rb +353 -0
  7. data/lib/active_agent/providers/anthropic_provider.rb +96 -53
  8. data/lib/active_agent/providers/common/messages/_types.rb +37 -1
  9. data/lib/active_agent/providers/common/responses/base.rb +118 -70
  10. data/lib/active_agent/providers/common/usage.rb +385 -0
  11. data/lib/active_agent/providers/concerns/instrumentation.rb +263 -0
  12. data/lib/active_agent/providers/log_subscriber.rb +64 -246
  13. data/lib/active_agent/providers/mock_provider.rb +23 -23
  14. data/lib/active_agent/providers/ollama/chat/request.rb +214 -35
  15. data/lib/active_agent/providers/ollama/chat/transforms.rb +135 -0
  16. data/lib/active_agent/providers/ollama/embedding/request.rb +160 -47
  17. data/lib/active_agent/providers/ollama/embedding/transforms.rb +160 -0
  18. data/lib/active_agent/providers/ollama_provider.rb +0 -1
  19. data/lib/active_agent/providers/open_ai/_base.rb +3 -2
  20. data/lib/active_agent/providers/open_ai/chat/_types.rb +13 -1
  21. data/lib/active_agent/providers/open_ai/chat/request.rb +132 -186
  22. data/lib/active_agent/providers/open_ai/chat/transforms.rb +364 -0
  23. data/lib/active_agent/providers/open_ai/chat_provider.rb +57 -36
  24. data/lib/active_agent/providers/open_ai/embedding/_types.rb +13 -2
  25. data/lib/active_agent/providers/open_ai/embedding/request.rb +38 -70
  26. data/lib/active_agent/providers/open_ai/embedding/transforms.rb +88 -0
  27. data/lib/active_agent/providers/open_ai/responses/_types.rb +1 -7
  28. data/lib/active_agent/providers/open_ai/responses/request.rb +100 -134
  29. data/lib/active_agent/providers/open_ai/responses/transforms.rb +228 -0
  30. data/lib/active_agent/providers/open_ai/responses_provider.rb +77 -30
  31. data/lib/active_agent/providers/open_ai_provider.rb +0 -3
  32. data/lib/active_agent/providers/open_router/_types.rb +27 -1
  33. data/lib/active_agent/providers/open_router/options.rb +49 -1
  34. data/lib/active_agent/providers/open_router/request.rb +232 -66
  35. data/lib/active_agent/providers/open_router/requests/_types.rb +0 -1
  36. data/lib/active_agent/providers/open_router/requests/messages/_types.rb +37 -40
  37. data/lib/active_agent/providers/open_router/requests/messages/content/file.rb +19 -3
  38. data/lib/active_agent/providers/open_router/requests/messages/content/files/details.rb +15 -4
  39. data/lib/active_agent/providers/open_router/requests/plugin.rb +19 -3
  40. data/lib/active_agent/providers/open_router/requests/plugins/pdf_config.rb +30 -8
  41. data/lib/active_agent/providers/open_router/requests/prediction.rb +17 -0
  42. data/lib/active_agent/providers/open_router/requests/provider_preferences/max_price.rb +41 -7
  43. data/lib/active_agent/providers/open_router/requests/provider_preferences.rb +60 -19
  44. data/lib/active_agent/providers/open_router/requests/response_format.rb +30 -2
  45. data/lib/active_agent/providers/open_router/transforms.rb +134 -0
  46. data/lib/active_agent/providers/open_router_provider.rb +9 -0
  47. data/lib/active_agent/version.rb +1 -1
  48. metadata +15 -159
  49. data/lib/active_agent/generation_provider/open_router/types.rb +0 -505
  50. data/lib/active_agent/generation_provider/xai_provider.rb +0 -144
  51. data/lib/active_agent/providers/anthropic/requests/_types.rb +0 -190
  52. data/lib/active_agent/providers/anthropic/requests/container_params.rb +0 -19
  53. data/lib/active_agent/providers/anthropic/requests/content/base.rb +0 -21
  54. data/lib/active_agent/providers/anthropic/requests/content/sources/base.rb +0 -22
  55. data/lib/active_agent/providers/anthropic/requests/context_management_config.rb +0 -18
  56. data/lib/active_agent/providers/anthropic/requests/messages/_types.rb +0 -189
  57. data/lib/active_agent/providers/anthropic/requests/messages/assistant.rb +0 -23
  58. data/lib/active_agent/providers/anthropic/requests/messages/base.rb +0 -63
  59. data/lib/active_agent/providers/anthropic/requests/messages/content/_types.rb +0 -143
  60. data/lib/active_agent/providers/anthropic/requests/messages/content/base.rb +0 -21
  61. data/lib/active_agent/providers/anthropic/requests/messages/content/document.rb +0 -26
  62. data/lib/active_agent/providers/anthropic/requests/messages/content/image.rb +0 -23
  63. data/lib/active_agent/providers/anthropic/requests/messages/content/redacted_thinking.rb +0 -21
  64. data/lib/active_agent/providers/anthropic/requests/messages/content/search_result.rb +0 -27
  65. data/lib/active_agent/providers/anthropic/requests/messages/content/sources/_types.rb +0 -171
  66. data/lib/active_agent/providers/anthropic/requests/messages/content/sources/base.rb +0 -22
  67. data/lib/active_agent/providers/anthropic/requests/messages/content/sources/document_base64.rb +0 -25
  68. data/lib/active_agent/providers/anthropic/requests/messages/content/sources/document_file.rb +0 -23
  69. data/lib/active_agent/providers/anthropic/requests/messages/content/sources/document_text.rb +0 -25
  70. data/lib/active_agent/providers/anthropic/requests/messages/content/sources/document_url.rb +0 -23
  71. data/lib/active_agent/providers/anthropic/requests/messages/content/sources/image_base64.rb +0 -27
  72. data/lib/active_agent/providers/anthropic/requests/messages/content/sources/image_file.rb +0 -23
  73. data/lib/active_agent/providers/anthropic/requests/messages/content/sources/image_url.rb +0 -23
  74. data/lib/active_agent/providers/anthropic/requests/messages/content/text.rb +0 -22
  75. data/lib/active_agent/providers/anthropic/requests/messages/content/thinking.rb +0 -23
  76. data/lib/active_agent/providers/anthropic/requests/messages/content/tool_result.rb +0 -24
  77. data/lib/active_agent/providers/anthropic/requests/messages/content/tool_use.rb +0 -28
  78. data/lib/active_agent/providers/anthropic/requests/messages/user.rb +0 -21
  79. data/lib/active_agent/providers/anthropic/requests/metadata.rb +0 -18
  80. data/lib/active_agent/providers/anthropic/requests/response_format.rb +0 -22
  81. data/lib/active_agent/providers/anthropic/requests/thinking_config/_types.rb +0 -60
  82. data/lib/active_agent/providers/anthropic/requests/thinking_config/base.rb +0 -20
  83. data/lib/active_agent/providers/anthropic/requests/thinking_config/disabled.rb +0 -16
  84. data/lib/active_agent/providers/anthropic/requests/thinking_config/enabled.rb +0 -20
  85. data/lib/active_agent/providers/anthropic/requests/tool_choice/_types.rb +0 -78
  86. data/lib/active_agent/providers/anthropic/requests/tool_choice/any.rb +0 -17
  87. data/lib/active_agent/providers/anthropic/requests/tool_choice/auto.rb +0 -17
  88. data/lib/active_agent/providers/anthropic/requests/tool_choice/base.rb +0 -20
  89. data/lib/active_agent/providers/anthropic/requests/tool_choice/none.rb +0 -16
  90. data/lib/active_agent/providers/anthropic/requests/tool_choice/tool.rb +0 -20
  91. data/lib/active_agent/providers/ollama/chat/requests/_types.rb +0 -3
  92. data/lib/active_agent/providers/ollama/chat/requests/messages/_types.rb +0 -116
  93. data/lib/active_agent/providers/ollama/chat/requests/messages/assistant.rb +0 -19
  94. data/lib/active_agent/providers/ollama/chat/requests/messages/user.rb +0 -19
  95. data/lib/active_agent/providers/ollama/embedding/requests/_types.rb +0 -83
  96. data/lib/active_agent/providers/ollama/embedding/requests/options.rb +0 -104
  97. data/lib/active_agent/providers/open_ai/chat/requests/_types.rb +0 -229
  98. data/lib/active_agent/providers/open_ai/chat/requests/audio.rb +0 -24
  99. data/lib/active_agent/providers/open_ai/chat/requests/messages/_types.rb +0 -123
  100. data/lib/active_agent/providers/open_ai/chat/requests/messages/assistant.rb +0 -42
  101. data/lib/active_agent/providers/open_ai/chat/requests/messages/base.rb +0 -78
  102. data/lib/active_agent/providers/open_ai/chat/requests/messages/content/_types.rb +0 -133
  103. data/lib/active_agent/providers/open_ai/chat/requests/messages/content/audio.rb +0 -35
  104. data/lib/active_agent/providers/open_ai/chat/requests/messages/content/base.rb +0 -24
  105. data/lib/active_agent/providers/open_ai/chat/requests/messages/content/file.rb +0 -26
  106. data/lib/active_agent/providers/open_ai/chat/requests/messages/content/files/_types.rb +0 -60
  107. data/lib/active_agent/providers/open_ai/chat/requests/messages/content/files/details.rb +0 -41
  108. data/lib/active_agent/providers/open_ai/chat/requests/messages/content/image.rb +0 -37
  109. data/lib/active_agent/providers/open_ai/chat/requests/messages/content/refusal.rb +0 -25
  110. data/lib/active_agent/providers/open_ai/chat/requests/messages/content/text.rb +0 -25
  111. data/lib/active_agent/providers/open_ai/chat/requests/messages/developer.rb +0 -25
  112. data/lib/active_agent/providers/open_ai/chat/requests/messages/function.rb +0 -25
  113. data/lib/active_agent/providers/open_ai/chat/requests/messages/system.rb +0 -25
  114. data/lib/active_agent/providers/open_ai/chat/requests/messages/tool.rb +0 -26
  115. data/lib/active_agent/providers/open_ai/chat/requests/messages/user.rb +0 -32
  116. data/lib/active_agent/providers/open_ai/chat/requests/prediction.rb +0 -46
  117. data/lib/active_agent/providers/open_ai/chat/requests/response_format.rb +0 -53
  118. data/lib/active_agent/providers/open_ai/chat/requests/stream_options.rb +0 -24
  119. data/lib/active_agent/providers/open_ai/chat/requests/tool_choice.rb +0 -26
  120. data/lib/active_agent/providers/open_ai/chat/requests/tools/_types.rb +0 -5
  121. data/lib/active_agent/providers/open_ai/chat/requests/tools/base.rb +0 -22
  122. data/lib/active_agent/providers/open_ai/chat/requests/tools/custom_tool.rb +0 -41
  123. data/lib/active_agent/providers/open_ai/chat/requests/tools/function_tool.rb +0 -51
  124. data/lib/active_agent/providers/open_ai/chat/requests/web_search_options.rb +0 -45
  125. data/lib/active_agent/providers/open_ai/embedding/requests/_types.rb +0 -49
  126. data/lib/active_agent/providers/open_ai/responses/requests/_types.rb +0 -231
  127. data/lib/active_agent/providers/open_ai/responses/requests/conversation.rb +0 -23
  128. data/lib/active_agent/providers/open_ai/responses/requests/inputs/_types.rb +0 -264
  129. data/lib/active_agent/providers/open_ai/responses/requests/inputs/assistant_message.rb +0 -22
  130. data/lib/active_agent/providers/open_ai/responses/requests/inputs/base.rb +0 -89
  131. data/lib/active_agent/providers/open_ai/responses/requests/inputs/code_interpreter_tool_call.rb +0 -30
  132. data/lib/active_agent/providers/open_ai/responses/requests/inputs/computer_tool_call.rb +0 -28
  133. data/lib/active_agent/providers/open_ai/responses/requests/inputs/computer_tool_call_output.rb +0 -33
  134. data/lib/active_agent/providers/open_ai/responses/requests/inputs/content/_types.rb +0 -207
  135. data/lib/active_agent/providers/open_ai/responses/requests/inputs/content/base.rb +0 -22
  136. data/lib/active_agent/providers/open_ai/responses/requests/inputs/content/input_audio.rb +0 -26
  137. data/lib/active_agent/providers/open_ai/responses/requests/inputs/content/input_file.rb +0 -28
  138. data/lib/active_agent/providers/open_ai/responses/requests/inputs/content/input_image.rb +0 -28
  139. data/lib/active_agent/providers/open_ai/responses/requests/inputs/content/input_text.rb +0 -25
  140. data/lib/active_agent/providers/open_ai/responses/requests/inputs/custom_tool_call.rb +0 -28
  141. data/lib/active_agent/providers/open_ai/responses/requests/inputs/custom_tool_call_output.rb +0 -27
  142. data/lib/active_agent/providers/open_ai/responses/requests/inputs/developer_message.rb +0 -20
  143. data/lib/active_agent/providers/open_ai/responses/requests/inputs/file_search_tool_call.rb +0 -25
  144. data/lib/active_agent/providers/open_ai/responses/requests/inputs/function_call_output.rb +0 -32
  145. data/lib/active_agent/providers/open_ai/responses/requests/inputs/function_tool_call.rb +0 -28
  146. data/lib/active_agent/providers/open_ai/responses/requests/inputs/image_gen_tool_call.rb +0 -27
  147. data/lib/active_agent/providers/open_ai/responses/requests/inputs/input_message.rb +0 -31
  148. data/lib/active_agent/providers/open_ai/responses/requests/inputs/item_reference.rb +0 -23
  149. data/lib/active_agent/providers/open_ai/responses/requests/inputs/local_shell_tool_call.rb +0 -26
  150. data/lib/active_agent/providers/open_ai/responses/requests/inputs/local_shell_tool_call_output.rb +0 -33
  151. data/lib/active_agent/providers/open_ai/responses/requests/inputs/mcp_approval_request.rb +0 -30
  152. data/lib/active_agent/providers/open_ai/responses/requests/inputs/mcp_approval_response.rb +0 -28
  153. data/lib/active_agent/providers/open_ai/responses/requests/inputs/mcp_list_tools.rb +0 -29
  154. data/lib/active_agent/providers/open_ai/responses/requests/inputs/mcp_tool_call.rb +0 -35
  155. data/lib/active_agent/providers/open_ai/responses/requests/inputs/output_message.rb +0 -35
  156. data/lib/active_agent/providers/open_ai/responses/requests/inputs/reasoning.rb +0 -33
  157. data/lib/active_agent/providers/open_ai/responses/requests/inputs/system_message.rb +0 -20
  158. data/lib/active_agent/providers/open_ai/responses/requests/inputs/tool_call_base.rb +0 -27
  159. data/lib/active_agent/providers/open_ai/responses/requests/inputs/tool_message.rb +0 -23
  160. data/lib/active_agent/providers/open_ai/responses/requests/inputs/user_message.rb +0 -20
  161. data/lib/active_agent/providers/open_ai/responses/requests/inputs/web_search_tool_call.rb +0 -24
  162. data/lib/active_agent/providers/open_ai/responses/requests/prompt_reference.rb +0 -23
  163. data/lib/active_agent/providers/open_ai/responses/requests/reasoning.rb +0 -23
  164. data/lib/active_agent/providers/open_ai/responses/requests/stream_options.rb +0 -20
  165. data/lib/active_agent/providers/open_ai/responses/requests/text/_types.rb +0 -89
  166. data/lib/active_agent/providers/open_ai/responses/requests/text/base.rb +0 -22
  167. data/lib/active_agent/providers/open_ai/responses/requests/text/json_object.rb +0 -20
  168. data/lib/active_agent/providers/open_ai/responses/requests/text/json_schema.rb +0 -48
  169. data/lib/active_agent/providers/open_ai/responses/requests/text/plain.rb +0 -20
  170. data/lib/active_agent/providers/open_ai/responses/requests/text.rb +0 -41
  171. data/lib/active_agent/providers/open_ai/responses/requests/tool_choice.rb +0 -26
  172. data/lib/active_agent/providers/open_ai/responses/requests/tools/_types.rb +0 -112
  173. data/lib/active_agent/providers/open_ai/responses/requests/tools/base.rb +0 -25
  174. data/lib/active_agent/providers/open_ai/responses/requests/tools/code_interpreter_tool.rb +0 -23
  175. data/lib/active_agent/providers/open_ai/responses/requests/tools/computer_tool.rb +0 -27
  176. data/lib/active_agent/providers/open_ai/responses/requests/tools/custom_tool.rb +0 -28
  177. data/lib/active_agent/providers/open_ai/responses/requests/tools/file_search_tool.rb +0 -27
  178. data/lib/active_agent/providers/open_ai/responses/requests/tools/function_tool.rb +0 -29
  179. data/lib/active_agent/providers/open_ai/responses/requests/tools/image_generation_tool.rb +0 -37
  180. data/lib/active_agent/providers/open_ai/responses/requests/tools/local_shell_tool.rb +0 -21
  181. data/lib/active_agent/providers/open_ai/responses/requests/tools/mcp_tool.rb +0 -41
  182. data/lib/active_agent/providers/open_ai/responses/requests/tools/web_search_preview_tool.rb +0 -24
  183. data/lib/active_agent/providers/open_ai/responses/requests/tools/web_search_tool.rb +0 -25
  184. data/lib/active_agent/providers/open_ai/schema.yml +0 -65937
  185. data/lib/active_agent/providers/open_router/requests/message.rb +0 -1
  186. data/lib/active_agent/providers/open_router/requests/messages/assistant.rb +0 -20
  187. data/lib/active_agent/providers/open_router/requests/messages/user.rb +0 -30
@@ -7,44 +7,85 @@ module ActiveAgent
7
7
  module OpenRouter
8
8
  module Requests
9
9
  # Provider preferences for routing requests to specific providers
10
- # See: https://openrouter.ai/docs/provider-routing
10
+ #
11
+ # Controls how OpenRouter selects and routes requests to underlying model
12
+ # providers. Enables filtering by parameters, cost constraints, privacy
13
+ # settings, and provider-specific preferences.
14
+ #
15
+ # @example Basic provider routing
16
+ # prefs = ProviderPreferences.new(
17
+ # require_parameters: true,
18
+ # allow_fallbacks: false
19
+ # )
20
+ #
21
+ # @example Privacy-focused routing
22
+ # prefs = ProviderPreferences.new(
23
+ # data_collection: 'deny',
24
+ # zdr: true
25
+ # )
26
+ #
27
+ # @example Cost-optimized routing
28
+ # prefs = ProviderPreferences.new(
29
+ # sort: 'price',
30
+ # max_price: { prompt: 0.01, completion: 0.03 }
31
+ # )
32
+ #
33
+ # @example Provider ordering
34
+ # prefs = ProviderPreferences.new(
35
+ # order: ['OpenAI', 'Anthropic'],
36
+ # ignore: ['Together']
37
+ # )
38
+ #
39
+ # @see https://openrouter.ai/docs/provider-routing OpenRouter Provider Routing
40
+ # @see MaxPrice
11
41
  class ProviderPreferences < Common::BaseModel
12
- # Whether to allow backup providers to serve requests
13
- # - true: (default) when primary provider is unavailable, use next best provider
14
- # - false: use only primary/custom provider, return upstream error if unavailable
42
+ # @!attribute allow_fallbacks
43
+ # @return [Boolean, nil] whether to allow backup providers when primary is unavailable
44
+ # - true: (default) use next best provider when primary unavailable
45
+ # - false: only use primary/custom provider, return error if unavailable
15
46
  attribute :allow_fallbacks, :boolean
16
47
 
17
- # Whether to filter providers to only those that support provided parameters
18
- # If false, providers receive only parameters they support and ignore the rest
48
+ # @!attribute require_parameters
49
+ # @return [Boolean, nil] whether to filter to providers supporting all parameters
50
+ # - true: only use providers that support all provided parameters
51
+ # - false: providers receive only the parameters they support
19
52
  attribute :require_parameters, :boolean
20
53
 
21
- # Data collection setting
22
- # - allow: (default) allow providers which store user data and may train on it
23
- # - deny: use only providers which do not collect user data
54
+ # @!attribute data_collection
55
+ # @return [String, nil] data collection preference
56
+ # - 'allow': (default) allow providers which store/train on user data
57
+ # - 'deny': only use providers that don't collect user data
24
58
  attribute :data_collection, :string
25
59
 
26
- # Zero Data Retention - stricter privacy mode
60
+ # @!attribute zdr
61
+ # @return [Boolean, nil] zero data retention mode (stricter privacy)
27
62
  attribute :zdr, :boolean
28
63
 
29
- # Ordered list of provider slugs to try in order
64
+ # @!attribute order
65
+ # @return [Array<String>] ordered list of provider slugs to try in sequence
30
66
  attribute :order, default: -> { [] }
31
67
 
32
- # List of provider slugs to allow (merged with account-wide settings)
68
+ # @!attribute only
69
+ # @return [Array<String>] allowlist of provider slugs (merged with account settings)
33
70
  attribute :only, default: -> { [] }
34
71
 
35
- # List of provider slugs to ignore (merged with account-wide settings)
72
+ # @!attribute ignore
73
+ # @return [Array<String>] blocklist of provider slugs (merged with account settings)
36
74
  attribute :ignore, default: -> { [] }
37
75
 
38
- # List of quantization levels to filter providers by
39
- # Options: int4, int8, fp4, fp6, fp8, fp16, bf16, fp32, unknown
76
+ # @!attribute quantizations
77
+ # @return [Array<String>] quantization levels to filter providers by
78
+ # Options: int4, int8, fp4, fp6, fp8, fp16, bf16, fp32, unknown
40
79
  attribute :quantizations, default: -> { [] }
41
80
 
42
- # Sorting strategy to use if "order" is not specified
43
- # Options: price, throughput, latency
44
- # When set, no load balancing is performed
81
+ # @!attribute sort
82
+ # @return [String, nil] sorting strategy when order not specified
83
+ # Options: price, throughput, latency
84
+ # Note: disables load balancing when set
45
85
  attribute :sort, :string
46
86
 
47
- # Maximum price constraints (USD per million tokens)
87
+ # @!attribute max_price
88
+ # @return [MaxPrice, nil] maximum price constraints per token/operation
48
89
  attribute :max_price, MaxPriceType.new
49
90
 
50
91
  # Validations matching the schema
@@ -4,11 +4,39 @@ module ActiveAgent
4
4
  module Providers
5
5
  module OpenRouter
6
6
  module Requests
7
+ # Response format configuration for structured output
8
+ #
9
+ # Enables JSON-formatted responses using OpenAI's structured output format.
10
+ # When using structured output, OpenRouter automatically sets
11
+ # provider.require_parameters=true to route to compatible models.
12
+ #
13
+ # @example JSON object format
14
+ # format = ResponseFormat.new(type: 'json_object')
15
+ #
16
+ # @example JSON schema format
17
+ # format = ResponseFormat.new(
18
+ # type: 'json_schema',
19
+ # json_schema: {
20
+ # name: 'user_profile',
21
+ # description: 'A user profile',
22
+ # schema: { type: 'object', properties: { name: { type: 'string' } } },
23
+ # strict: true
24
+ # }
25
+ # )
26
+ #
27
+ # @see https://openrouter.ai/docs/structured-outputs OpenRouter Structured Outputs
28
+ # @see https://platform.openai.com/docs/guides/structured-outputs OpenAI Structured Outputs
7
29
  class ResponseFormat < Common::BaseModel
8
- # Type of response format (json_object, json_schema)
30
+ # @!attribute type
31
+ # @return [String] response format type ('json_object' or 'json_schema')
9
32
  attribute :type, :string
10
33
 
11
- # JSON schema configuration (only for json_schema type)
34
+ # @!attribute json_schema
35
+ # @return [Hash, nil] JSON schema configuration (required when type is 'json_schema')
36
+ # @option json_schema [String] :name schema name (max 64 chars, alphanumeric/underscore/dash)
37
+ # @option json_schema [String] :description schema description
38
+ # @option json_schema [Hash] :schema JSON schema definition
39
+ # @option json_schema [Boolean] :strict whether to enforce strict schema adherence
12
40
  attribute :json_schema # Hash with name, description, schema, strict
13
41
 
14
42
  validates :type, inclusion: { in: %w[json_object json_schema] }, allow_nil: true
@@ -0,0 +1,134 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/core_ext/hash/keys"
4
+ require_relative "../open_ai/chat/transforms"
5
+
6
+ module ActiveAgent
7
+ module Providers
8
+ module OpenRouter
9
+ # Provides transformation methods for normalizing OpenRouter parameters
10
+ # to work with OpenAI gem's native format plus OpenRouter extensions
11
+ #
12
+ # Leverages OpenAI::Chat::Transforms for base message normalization while
13
+ # adding handling for OpenRouter-specific parameters like plugins, provider
14
+ # preferences, and model fallbacks.
15
+ module Transforms
16
+ class << self
17
+ # Converts gem model object to hash via JSON round-trip
18
+ #
19
+ # @param gem_object [Object]
20
+ # @return [Hash] with symbolized keys
21
+ def gem_to_hash(gem_object)
22
+ OpenAI::Chat::Transforms.gem_to_hash(gem_object)
23
+ end
24
+
25
+ # Normalizes all request parameters for OpenRouter API
26
+ #
27
+ # Handles both OpenAI-compatible parameters and OpenRouter-specific extensions.
28
+ # OpenRouter-specific params (plugins, provider, transforms, models, route) are
29
+ # extracted and returned separately for manual serialization.
30
+ #
31
+ # @param params [Hash]
32
+ # @return [Array<Hash, Hash>] tuple of [openai_params, openrouter_params]
33
+ def normalize_params(params)
34
+ params = params.dup
35
+
36
+ # Extract OpenRouter-specific parameters
37
+ openrouter_params = {}
38
+ openrouter_params[:plugins] = params.delete(:plugins) if params.key?(:plugins)
39
+ openrouter_params[:provider] = params.delete(:provider) if params.key?(:provider)
40
+ openrouter_params[:transforms] = params.delete(:transforms) if params.key?(:transforms)
41
+ openrouter_params[:models] = params.delete(:models) if params.key?(:models)
42
+ openrouter_params[:route] = params.delete(:route) if params.key?(:route)
43
+
44
+ # Extract OpenRouter-specific sampling parameters not in OpenAI
45
+ openrouter_params[:top_k] = params.delete(:top_k) if params.key?(:top_k)
46
+ openrouter_params[:min_p] = params.delete(:min_p) if params.key?(:min_p)
47
+ openrouter_params[:top_a] = params.delete(:top_a) if params.key?(:top_a)
48
+ openrouter_params[:repetition_penalty] = params.delete(:repetition_penalty) if params.key?(:repetition_penalty)
49
+
50
+ # Handle response_format special logic for OpenRouter
51
+ # OpenRouter requires provider.require_parameters=true for structured output
52
+ if params[:response_format]
53
+ response_format = params[:response_format]
54
+ response_format_hash = response_format.is_a?(Hash) ? response_format : { type: response_format }
55
+
56
+ if %i[json_object json_schema].include?(response_format_hash[:type].to_sym)
57
+ openrouter_params[:provider] ||= {}
58
+ openrouter_params[:provider][:require_parameters] = true
59
+ end
60
+ end
61
+
62
+ # Use OpenAI transforms for the base parameters
63
+ openai_params = OpenAI::Chat::Transforms.normalize_params(params)
64
+
65
+ [ openai_params, openrouter_params ]
66
+ end
67
+
68
+ # Normalizes messages using OpenAI transforms
69
+ #
70
+ # @param messages [Array, String, Hash, nil]
71
+ # @return [Array<OpenAI::Models::Chat::ChatCompletionMessageParam>, nil]
72
+ def normalize_messages(messages)
73
+ OpenAI::Chat::Transforms.normalize_messages(messages)
74
+ end
75
+
76
+ # Normalizes response_format for OpenRouter
77
+ #
78
+ # Delegates to OpenAI transforms. The special handling for structured output
79
+ # (setting provider.require_parameters=true) is handled in normalize_params.
80
+ #
81
+ # @param format [Hash, Symbol, String]
82
+ # @return [Hash]
83
+ def normalize_response_format(format)
84
+ OpenAI::Chat::Transforms.normalize_response_format(format)
85
+ end
86
+
87
+ # Cleans up serialized request for API submission
88
+ #
89
+ # Merges OpenAI-compatible params with OpenRouter-specific params.
90
+ #
91
+ # @param openai_hash [Hash] serialized OpenAI request
92
+ # @param openrouter_params [Hash] OpenRouter-specific parameters
93
+ # @param defaults [Hash] default values to remove
94
+ # @param gem_object [Object] original gem object
95
+ # @return [Hash] cleaned and merged request hash
96
+ def cleanup_serialized_request(openai_hash, openrouter_params, defaults, gem_object)
97
+ # Start with OpenAI cleanup
98
+ cleaned = OpenAI::Chat::Transforms.cleanup_serialized_request(openai_hash, defaults, gem_object)
99
+
100
+ # Merge OpenRouter-specific params, but skip default values
101
+ openrouter_params.each do |key, value|
102
+ # Skip if value is nil, empty, or matches the default
103
+ next if value.nil?
104
+ next if value.respond_to?(:empty?) && value.empty?
105
+ next if defaults.key?(key) && defaults[key] == value
106
+
107
+ cleaned[key] = serialize_openrouter_param(key, value)
108
+ end
109
+
110
+ cleaned
111
+ end
112
+
113
+ # Serializes OpenRouter-specific parameters
114
+ #
115
+ # @param key [Symbol]
116
+ # @param value [Object]
117
+ # @return [Object] serialized value
118
+ def serialize_openrouter_param(key, value)
119
+ case key
120
+ when :provider
121
+ # Serialize provider preferences object
122
+ value.respond_to?(:serialize) ? value.serialize : value
123
+ when :plugins
124
+ # Serialize plugins array
125
+ value.respond_to?(:map) ? value.map { |p| p.respond_to?(:serialize) ? p.serialize : p } : value
126
+ else
127
+ value
128
+ end
129
+ end
130
+ end
131
+ end
132
+ end
133
+ end
134
+ end
@@ -48,6 +48,15 @@ module ActiveAgent
48
48
 
49
49
  hash_merge_delta(message, delta)
50
50
  end
51
+
52
+ # @see BaseProvider#api_response_normalize
53
+ # @param api_response [OpenAI::Models::ChatCompletion]
54
+ # @return [Hash] normalized response hash
55
+ def api_response_normalize(api_response)
56
+ return api_response unless api_response
57
+
58
+ OpenAI::Chat::Transforms.gem_to_hash(api_response)
59
+ end
51
60
  end
52
61
  end
53
62
  end
@@ -1,3 +1,3 @@
1
1
  module ActiveAgent
2
- VERSION = "1.0.0.rc1"
2
+ VERSION = "1.0.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activeagent
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.rc1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Bowen
@@ -127,16 +127,16 @@ dependencies:
127
127
  name: rails
128
128
  requirement: !ruby/object:Gem::Requirement
129
129
  requirements:
130
- - - ">="
130
+ - - "~>"
131
131
  - !ruby/object:Gem::Version
132
- version: '0'
132
+ version: 8.0.0
133
133
  type: :development
134
134
  prerelease: false
135
135
  version_requirements: !ruby/object:Gem::Requirement
136
136
  requirements:
137
- - - ">="
137
+ - - "~>"
138
138
  - !ruby/object:Gem::Version
139
- version: '0'
139
+ version: 8.0.0
140
140
  - !ruby/object:Gem::Dependency
141
141
  name: anthropic
142
142
  requirement: !ruby/object:Gem::Requirement
@@ -165,20 +165,6 @@ dependencies:
165
165
  - - "~>"
166
166
  - !ruby/object:Gem::Version
167
167
  version: '0.34'
168
- - !ruby/object:Gem::Dependency
169
- name: standard
170
- requirement: !ruby/object:Gem::Requirement
171
- requirements:
172
- - - ">="
173
- - !ruby/object:Gem::Version
174
- version: '0'
175
- type: :development
176
- prerelease: false
177
- version_requirements: !ruby/object:Gem::Requirement
178
- requirements:
179
- - - ">="
180
- - !ruby/object:Gem::Version
181
- version: '0'
182
168
  - !ruby/object:Gem::Dependency
183
169
  name: rubocop-rails-omakase
184
170
  requirement: !ruby/object:Gem::Requirement
@@ -375,53 +361,12 @@ files:
375
361
  - lib/active_agent/deprecator.rb
376
362
  - lib/active_agent/generation.rb
377
363
  - lib/active_agent/generation_job.rb
378
- - lib/active_agent/generation_provider/open_router/types.rb
379
- - lib/active_agent/generation_provider/xai_provider.rb
380
364
  - lib/active_agent/inline_preview_interceptor.rb
381
365
  - lib/active_agent/providers/_base_provider.rb
382
366
  - lib/active_agent/providers/anthropic/_types.rb
383
367
  - lib/active_agent/providers/anthropic/options.rb
384
368
  - lib/active_agent/providers/anthropic/request.rb
385
- - lib/active_agent/providers/anthropic/requests/_types.rb
386
- - lib/active_agent/providers/anthropic/requests/container_params.rb
387
- - lib/active_agent/providers/anthropic/requests/content/base.rb
388
- - lib/active_agent/providers/anthropic/requests/content/sources/base.rb
389
- - lib/active_agent/providers/anthropic/requests/context_management_config.rb
390
- - lib/active_agent/providers/anthropic/requests/messages/_types.rb
391
- - lib/active_agent/providers/anthropic/requests/messages/assistant.rb
392
- - lib/active_agent/providers/anthropic/requests/messages/base.rb
393
- - lib/active_agent/providers/anthropic/requests/messages/content/_types.rb
394
- - lib/active_agent/providers/anthropic/requests/messages/content/base.rb
395
- - lib/active_agent/providers/anthropic/requests/messages/content/document.rb
396
- - lib/active_agent/providers/anthropic/requests/messages/content/image.rb
397
- - lib/active_agent/providers/anthropic/requests/messages/content/redacted_thinking.rb
398
- - lib/active_agent/providers/anthropic/requests/messages/content/search_result.rb
399
- - lib/active_agent/providers/anthropic/requests/messages/content/sources/_types.rb
400
- - lib/active_agent/providers/anthropic/requests/messages/content/sources/base.rb
401
- - lib/active_agent/providers/anthropic/requests/messages/content/sources/document_base64.rb
402
- - lib/active_agent/providers/anthropic/requests/messages/content/sources/document_file.rb
403
- - lib/active_agent/providers/anthropic/requests/messages/content/sources/document_text.rb
404
- - lib/active_agent/providers/anthropic/requests/messages/content/sources/document_url.rb
405
- - lib/active_agent/providers/anthropic/requests/messages/content/sources/image_base64.rb
406
- - lib/active_agent/providers/anthropic/requests/messages/content/sources/image_file.rb
407
- - lib/active_agent/providers/anthropic/requests/messages/content/sources/image_url.rb
408
- - lib/active_agent/providers/anthropic/requests/messages/content/text.rb
409
- - lib/active_agent/providers/anthropic/requests/messages/content/thinking.rb
410
- - lib/active_agent/providers/anthropic/requests/messages/content/tool_result.rb
411
- - lib/active_agent/providers/anthropic/requests/messages/content/tool_use.rb
412
- - lib/active_agent/providers/anthropic/requests/messages/user.rb
413
- - lib/active_agent/providers/anthropic/requests/metadata.rb
414
- - lib/active_agent/providers/anthropic/requests/response_format.rb
415
- - lib/active_agent/providers/anthropic/requests/thinking_config/_types.rb
416
- - lib/active_agent/providers/anthropic/requests/thinking_config/base.rb
417
- - lib/active_agent/providers/anthropic/requests/thinking_config/disabled.rb
418
- - lib/active_agent/providers/anthropic/requests/thinking_config/enabled.rb
419
- - lib/active_agent/providers/anthropic/requests/tool_choice/_types.rb
420
- - lib/active_agent/providers/anthropic/requests/tool_choice/any.rb
421
- - lib/active_agent/providers/anthropic/requests/tool_choice/auto.rb
422
- - lib/active_agent/providers/anthropic/requests/tool_choice/base.rb
423
- - lib/active_agent/providers/anthropic/requests/tool_choice/none.rb
424
- - lib/active_agent/providers/anthropic/requests/tool_choice/tool.rb
369
+ - lib/active_agent/providers/anthropic/transforms.rb
425
370
  - lib/active_agent/providers/anthropic_provider.rb
426
371
  - lib/active_agent/providers/common/messages/_types.rb
427
372
  - lib/active_agent/providers/common/messages/assistant.rb
@@ -437,7 +382,9 @@ files:
437
382
  - lib/active_agent/providers/common/responses/format.rb
438
383
  - lib/active_agent/providers/common/responses/message.rb
439
384
  - lib/active_agent/providers/common/responses/prompt.rb
385
+ - lib/active_agent/providers/common/usage.rb
440
386
  - lib/active_agent/providers/concerns/exception_handler.rb
387
+ - lib/active_agent/providers/concerns/instrumentation.rb
441
388
  - lib/active_agent/providers/concerns/previewable.rb
442
389
  - lib/active_agent/providers/log_subscriber.rb
443
390
  - lib/active_agent/providers/mock/_types.rb
@@ -452,128 +399,36 @@ files:
452
399
  - lib/active_agent/providers/ollama/_types.rb
453
400
  - lib/active_agent/providers/ollama/chat/_types.rb
454
401
  - lib/active_agent/providers/ollama/chat/request.rb
455
- - lib/active_agent/providers/ollama/chat/requests/_types.rb
456
- - lib/active_agent/providers/ollama/chat/requests/messages/_types.rb
457
- - lib/active_agent/providers/ollama/chat/requests/messages/assistant.rb
458
- - lib/active_agent/providers/ollama/chat/requests/messages/user.rb
402
+ - lib/active_agent/providers/ollama/chat/transforms.rb
459
403
  - lib/active_agent/providers/ollama/embedding/_types.rb
460
404
  - lib/active_agent/providers/ollama/embedding/request.rb
461
- - lib/active_agent/providers/ollama/embedding/requests/_types.rb
462
- - lib/active_agent/providers/ollama/embedding/requests/options.rb
405
+ - lib/active_agent/providers/ollama/embedding/transforms.rb
463
406
  - lib/active_agent/providers/ollama/options.rb
464
407
  - lib/active_agent/providers/ollama_provider.rb
465
408
  - lib/active_agent/providers/open_ai/_base.rb
466
409
  - lib/active_agent/providers/open_ai/_types.rb
467
410
  - lib/active_agent/providers/open_ai/chat/_types.rb
468
411
  - lib/active_agent/providers/open_ai/chat/request.rb
469
- - lib/active_agent/providers/open_ai/chat/requests/_types.rb
470
- - lib/active_agent/providers/open_ai/chat/requests/audio.rb
471
- - lib/active_agent/providers/open_ai/chat/requests/messages/_types.rb
472
- - lib/active_agent/providers/open_ai/chat/requests/messages/assistant.rb
473
- - lib/active_agent/providers/open_ai/chat/requests/messages/base.rb
474
- - lib/active_agent/providers/open_ai/chat/requests/messages/content/_types.rb
475
- - lib/active_agent/providers/open_ai/chat/requests/messages/content/audio.rb
476
- - lib/active_agent/providers/open_ai/chat/requests/messages/content/base.rb
477
- - lib/active_agent/providers/open_ai/chat/requests/messages/content/file.rb
478
- - lib/active_agent/providers/open_ai/chat/requests/messages/content/files/_types.rb
479
- - lib/active_agent/providers/open_ai/chat/requests/messages/content/files/details.rb
480
- - lib/active_agent/providers/open_ai/chat/requests/messages/content/image.rb
481
- - lib/active_agent/providers/open_ai/chat/requests/messages/content/refusal.rb
482
- - lib/active_agent/providers/open_ai/chat/requests/messages/content/text.rb
483
- - lib/active_agent/providers/open_ai/chat/requests/messages/developer.rb
484
- - lib/active_agent/providers/open_ai/chat/requests/messages/function.rb
485
- - lib/active_agent/providers/open_ai/chat/requests/messages/system.rb
486
- - lib/active_agent/providers/open_ai/chat/requests/messages/tool.rb
487
- - lib/active_agent/providers/open_ai/chat/requests/messages/user.rb
488
- - lib/active_agent/providers/open_ai/chat/requests/prediction.rb
489
- - lib/active_agent/providers/open_ai/chat/requests/response_format.rb
490
- - lib/active_agent/providers/open_ai/chat/requests/stream_options.rb
491
- - lib/active_agent/providers/open_ai/chat/requests/tool_choice.rb
492
- - lib/active_agent/providers/open_ai/chat/requests/tools/_types.rb
493
- - lib/active_agent/providers/open_ai/chat/requests/tools/base.rb
494
- - lib/active_agent/providers/open_ai/chat/requests/tools/custom_tool.rb
495
- - lib/active_agent/providers/open_ai/chat/requests/tools/function_tool.rb
496
- - lib/active_agent/providers/open_ai/chat/requests/web_search_options.rb
412
+ - lib/active_agent/providers/open_ai/chat/transforms.rb
497
413
  - lib/active_agent/providers/open_ai/chat_provider.rb
498
414
  - lib/active_agent/providers/open_ai/embedding/_types.rb
499
415
  - lib/active_agent/providers/open_ai/embedding/request.rb
500
- - lib/active_agent/providers/open_ai/embedding/requests/_types.rb
416
+ - lib/active_agent/providers/open_ai/embedding/transforms.rb
501
417
  - lib/active_agent/providers/open_ai/options.rb
502
418
  - lib/active_agent/providers/open_ai/responses/_types.rb
503
419
  - lib/active_agent/providers/open_ai/responses/request.rb
504
- - lib/active_agent/providers/open_ai/responses/requests/_types.rb
505
- - lib/active_agent/providers/open_ai/responses/requests/conversation.rb
506
- - lib/active_agent/providers/open_ai/responses/requests/inputs/_types.rb
507
- - lib/active_agent/providers/open_ai/responses/requests/inputs/assistant_message.rb
508
- - lib/active_agent/providers/open_ai/responses/requests/inputs/base.rb
509
- - lib/active_agent/providers/open_ai/responses/requests/inputs/code_interpreter_tool_call.rb
510
- - lib/active_agent/providers/open_ai/responses/requests/inputs/computer_tool_call.rb
511
- - lib/active_agent/providers/open_ai/responses/requests/inputs/computer_tool_call_output.rb
512
- - lib/active_agent/providers/open_ai/responses/requests/inputs/content/_types.rb
513
- - lib/active_agent/providers/open_ai/responses/requests/inputs/content/base.rb
514
- - lib/active_agent/providers/open_ai/responses/requests/inputs/content/input_audio.rb
515
- - lib/active_agent/providers/open_ai/responses/requests/inputs/content/input_file.rb
516
- - lib/active_agent/providers/open_ai/responses/requests/inputs/content/input_image.rb
517
- - lib/active_agent/providers/open_ai/responses/requests/inputs/content/input_text.rb
518
- - lib/active_agent/providers/open_ai/responses/requests/inputs/custom_tool_call.rb
519
- - lib/active_agent/providers/open_ai/responses/requests/inputs/custom_tool_call_output.rb
520
- - lib/active_agent/providers/open_ai/responses/requests/inputs/developer_message.rb
521
- - lib/active_agent/providers/open_ai/responses/requests/inputs/file_search_tool_call.rb
522
- - lib/active_agent/providers/open_ai/responses/requests/inputs/function_call_output.rb
523
- - lib/active_agent/providers/open_ai/responses/requests/inputs/function_tool_call.rb
524
- - lib/active_agent/providers/open_ai/responses/requests/inputs/image_gen_tool_call.rb
525
- - lib/active_agent/providers/open_ai/responses/requests/inputs/input_message.rb
526
- - lib/active_agent/providers/open_ai/responses/requests/inputs/item_reference.rb
527
- - lib/active_agent/providers/open_ai/responses/requests/inputs/local_shell_tool_call.rb
528
- - lib/active_agent/providers/open_ai/responses/requests/inputs/local_shell_tool_call_output.rb
529
- - lib/active_agent/providers/open_ai/responses/requests/inputs/mcp_approval_request.rb
530
- - lib/active_agent/providers/open_ai/responses/requests/inputs/mcp_approval_response.rb
531
- - lib/active_agent/providers/open_ai/responses/requests/inputs/mcp_list_tools.rb
532
- - lib/active_agent/providers/open_ai/responses/requests/inputs/mcp_tool_call.rb
533
- - lib/active_agent/providers/open_ai/responses/requests/inputs/output_message.rb
534
- - lib/active_agent/providers/open_ai/responses/requests/inputs/reasoning.rb
535
- - lib/active_agent/providers/open_ai/responses/requests/inputs/system_message.rb
536
- - lib/active_agent/providers/open_ai/responses/requests/inputs/tool_call_base.rb
537
- - lib/active_agent/providers/open_ai/responses/requests/inputs/tool_message.rb
538
- - lib/active_agent/providers/open_ai/responses/requests/inputs/user_message.rb
539
- - lib/active_agent/providers/open_ai/responses/requests/inputs/web_search_tool_call.rb
540
- - lib/active_agent/providers/open_ai/responses/requests/prompt_reference.rb
541
- - lib/active_agent/providers/open_ai/responses/requests/reasoning.rb
542
- - lib/active_agent/providers/open_ai/responses/requests/stream_options.rb
543
- - lib/active_agent/providers/open_ai/responses/requests/text.rb
544
- - lib/active_agent/providers/open_ai/responses/requests/text/_types.rb
545
- - lib/active_agent/providers/open_ai/responses/requests/text/base.rb
546
- - lib/active_agent/providers/open_ai/responses/requests/text/json_object.rb
547
- - lib/active_agent/providers/open_ai/responses/requests/text/json_schema.rb
548
- - lib/active_agent/providers/open_ai/responses/requests/text/plain.rb
549
- - lib/active_agent/providers/open_ai/responses/requests/tool_choice.rb
550
- - lib/active_agent/providers/open_ai/responses/requests/tools/_types.rb
551
- - lib/active_agent/providers/open_ai/responses/requests/tools/base.rb
552
- - lib/active_agent/providers/open_ai/responses/requests/tools/code_interpreter_tool.rb
553
- - lib/active_agent/providers/open_ai/responses/requests/tools/computer_tool.rb
554
- - lib/active_agent/providers/open_ai/responses/requests/tools/custom_tool.rb
555
- - lib/active_agent/providers/open_ai/responses/requests/tools/file_search_tool.rb
556
- - lib/active_agent/providers/open_ai/responses/requests/tools/function_tool.rb
557
- - lib/active_agent/providers/open_ai/responses/requests/tools/image_generation_tool.rb
558
- - lib/active_agent/providers/open_ai/responses/requests/tools/local_shell_tool.rb
559
- - lib/active_agent/providers/open_ai/responses/requests/tools/mcp_tool.rb
560
- - lib/active_agent/providers/open_ai/responses/requests/tools/web_search_preview_tool.rb
561
- - lib/active_agent/providers/open_ai/responses/requests/tools/web_search_tool.rb
420
+ - lib/active_agent/providers/open_ai/responses/transforms.rb
562
421
  - lib/active_agent/providers/open_ai/responses_provider.rb
563
- - lib/active_agent/providers/open_ai/schema.yml
564
422
  - lib/active_agent/providers/open_ai_provider.rb
565
423
  - lib/active_agent/providers/open_router/_types.rb
566
424
  - lib/active_agent/providers/open_router/options.rb
567
425
  - lib/active_agent/providers/open_router/request.rb
568
426
  - lib/active_agent/providers/open_router/requests/_types.rb
569
- - lib/active_agent/providers/open_router/requests/message.rb
570
427
  - lib/active_agent/providers/open_router/requests/messages/_types.rb
571
- - lib/active_agent/providers/open_router/requests/messages/assistant.rb
572
428
  - lib/active_agent/providers/open_router/requests/messages/content/_types.rb
573
429
  - lib/active_agent/providers/open_router/requests/messages/content/file.rb
574
430
  - lib/active_agent/providers/open_router/requests/messages/content/files/_types.rb
575
431
  - lib/active_agent/providers/open_router/requests/messages/content/files/details.rb
576
- - lib/active_agent/providers/open_router/requests/messages/user.rb
577
432
  - lib/active_agent/providers/open_router/requests/plugin.rb
578
433
  - lib/active_agent/providers/open_router/requests/plugins/_types.rb
579
434
  - lib/active_agent/providers/open_router/requests/plugins/pdf_config.rb
@@ -582,6 +437,7 @@ files:
582
437
  - lib/active_agent/providers/open_router/requests/provider_preferences/_types.rb
583
438
  - lib/active_agent/providers/open_router/requests/provider_preferences/max_price.rb
584
439
  - lib/active_agent/providers/open_router/requests/response_format.rb
440
+ - lib/active_agent/providers/open_router/transforms.rb
585
441
  - lib/active_agent/providers/open_router_provider.rb
586
442
  - lib/active_agent/providers/openai_provider.rb
587
443
  - lib/active_agent/providers/openrouter_provider.rb
@@ -633,7 +489,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
633
489
  - !ruby/object:Gem::Version
634
490
  version: '0'
635
491
  requirements: []
636
- rubygems_version: 3.7.2
492
+ rubygems_version: 4.0.0.dev
637
493
  specification_version: 4
638
494
  summary: Rails AI Agents Framework
639
495
  test_files: []