riffer 0.47.2 → 0.49.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 (267) hide show
  1. checksums.yaml +4 -4
  2. data/.claude/rules/comments.md +2 -4
  3. data/.claude/rules/rbs-inline.md +2 -12
  4. data/.release-please-manifest.json +1 -1
  5. data/.rubocop.yml +5 -0
  6. data/CHANGELOG.md +42 -0
  7. data/docs/AGENTS.md +39 -7
  8. data/docs/AGENT_LIFECYCLE.md +14 -16
  9. data/docs/CONFIGURATION.md +23 -34
  10. data/docs/EVALS.md +2 -1
  11. data/docs/MCP.md +0 -4
  12. data/docs/MESSAGES.md +85 -17
  13. data/docs/STREAM_EVENTS.md +8 -4
  14. data/docs/TOOL_ADVANCED.md +1 -3
  15. data/docs/TRACING.md +2 -2
  16. data/docs/providers/AMAZON_BEDROCK.md +32 -1
  17. data/docs/providers/CUSTOM_PROVIDERS.md +56 -4
  18. data/docs/providers/GEMINI.md +1 -1
  19. data/docs/providers/MOCK_PROVIDER.md +17 -0
  20. data/docs/providers/OPENROUTER.md +18 -1
  21. data/docs-site/build.rb +0 -6
  22. data/docs-site/check.rb +1 -5
  23. data/lib/riffer/agent/config.rb +27 -44
  24. data/lib/riffer/agent/context.rb +2 -26
  25. data/lib/riffer/agent/outcome.rb +0 -20
  26. data/lib/riffer/agent/response.rb +4 -35
  27. data/lib/riffer/agent/run.rb +32 -48
  28. data/lib/riffer/agent/serializer.rb +10 -39
  29. data/lib/riffer/agent/session/repair.rb +3 -15
  30. data/lib/riffer/agent/session.rb +26 -38
  31. data/lib/riffer/agent/structured_output/result.rb +0 -8
  32. data/lib/riffer/agent/structured_output.rb +0 -7
  33. data/lib/riffer/agent.rb +31 -127
  34. data/lib/riffer/config/amazon_bedrock.rb +30 -0
  35. data/lib/riffer/config/anthropic.rb +21 -0
  36. data/lib/riffer/config/azure_open_ai.rb +30 -0
  37. data/lib/riffer/config/evals.rb +18 -0
  38. data/lib/riffer/config/files.rb +61 -0
  39. data/lib/riffer/config/gemini.rb +21 -0
  40. data/lib/riffer/config/mcp.rb +31 -0
  41. data/lib/riffer/config/open_ai.rb +30 -0
  42. data/lib/riffer/config/open_router.rb +21 -0
  43. data/lib/riffer/config/pricing/rates.rb +36 -0
  44. data/lib/riffer/config/pricing.rb +64 -0
  45. data/lib/riffer/config/skills.rb +38 -0
  46. data/lib/riffer/config/tracing.rb +43 -0
  47. data/lib/riffer/config.rb +3 -362
  48. data/lib/riffer/evals/evaluator.rb +22 -23
  49. data/lib/riffer/evals/evaluator_runner.rb +0 -15
  50. data/lib/riffer/evals/judge.rb +9 -11
  51. data/lib/riffer/evals/result.rb +1 -11
  52. data/lib/riffer/evals/run_result.rb +0 -12
  53. data/lib/riffer/evals/scenario_result.rb +0 -19
  54. data/lib/riffer/files/downloader.rb +2 -3
  55. data/lib/riffer/files/resolver.rb +5 -10
  56. data/lib/riffer/guardrail.rb +2 -22
  57. data/lib/riffer/guardrails/modification.rb +0 -8
  58. data/lib/riffer/guardrails/result.rb +0 -17
  59. data/lib/riffer/guardrails/runner.rb +2 -11
  60. data/lib/riffer/guardrails/tripwire.rb +0 -8
  61. data/lib/riffer/guardrails.rb +0 -2
  62. data/lib/riffer/helpers/boolean.rb +0 -4
  63. data/lib/riffer/helpers/call_or_value.rb +0 -3
  64. data/lib/riffer/helpers/deep_dup.rb +37 -0
  65. data/lib/riffer/helpers/dependencies.rb +0 -4
  66. data/lib/riffer/helpers/identifier.rb +3 -12
  67. data/lib/riffer/helpers/validate.rb +42 -0
  68. data/lib/riffer/mcp/authenticated_tool.rb +4 -12
  69. data/lib/riffer/mcp/client.rb +0 -7
  70. data/lib/riffer/mcp/manifest.rb +3 -7
  71. data/lib/riffer/mcp/registration.rb +0 -10
  72. data/lib/riffer/mcp/registry.rb +0 -9
  73. data/lib/riffer/mcp/search_tool.rb +0 -4
  74. data/lib/riffer/mcp/tool.rb +1 -4
  75. data/lib/riffer/mcp/tool_factory.rb +3 -6
  76. data/lib/riffer/mcp.rb +2 -23
  77. data/lib/riffer/messages/assistant/reasoning_part.rb +73 -0
  78. data/lib/riffer/messages/assistant/tool_call.rb +55 -0
  79. data/lib/riffer/messages/assistant.rb +43 -15
  80. data/lib/riffer/messages/base.rb +5 -33
  81. data/lib/riffer/messages/system.rb +8 -1
  82. data/lib/riffer/messages/tool.rb +15 -13
  83. data/lib/riffer/messages/{file_part.rb → user/file_part.rb} +16 -40
  84. data/lib/riffer/messages/user.rb +11 -4
  85. data/lib/riffer/params/boolean.rb +1 -5
  86. data/lib/riffer/params/param.rb +15 -31
  87. data/lib/riffer/params.rb +15 -39
  88. data/lib/riffer/providers/amazon_bedrock.rb +104 -44
  89. data/lib/riffer/providers/anthropic.rb +11 -26
  90. data/lib/riffer/providers/azure_open_ai.rb +3 -8
  91. data/lib/riffer/providers/base.rb +30 -32
  92. data/lib/riffer/providers/finish_reason.rb +0 -6
  93. data/lib/riffer/providers/gemini/client.rb +4 -17
  94. data/lib/riffer/providers/gemini.rb +6 -12
  95. data/lib/riffer/providers/mock.rb +18 -27
  96. data/lib/riffer/providers/open_ai.rb +12 -21
  97. data/lib/riffer/providers/open_router.rb +109 -33
  98. data/lib/riffer/providers/repository.rb +2 -14
  99. data/lib/riffer/providers/token_usage.rb +19 -12
  100. data/lib/riffer/registrable.rb +11 -45
  101. data/lib/riffer/runner/fibers.rb +1 -6
  102. data/lib/riffer/runner/sequential.rb +0 -1
  103. data/lib/riffer/runner/threaded.rb +0 -3
  104. data/lib/riffer/runner.rb +0 -3
  105. data/lib/riffer/skills/activate_tool.rb +0 -3
  106. data/lib/riffer/skills/adapter.rb +0 -8
  107. data/lib/riffer/skills/backend.rb +2 -7
  108. data/lib/riffer/skills/config.rb +13 -17
  109. data/lib/riffer/skills/context.rb +0 -29
  110. data/lib/riffer/skills/filesystem_backend.rb +0 -7
  111. data/lib/riffer/skills/frontmatter.rb +2 -16
  112. data/lib/riffer/skills/markdown_adapter.rb +3 -6
  113. data/lib/riffer/skills/xml_adapter.rb +0 -3
  114. data/lib/riffer/stream_events/base.rb +0 -3
  115. data/lib/riffer/stream_events/finish_reason_done.rb +1 -6
  116. data/lib/riffer/stream_events/guardrail_modification.rb +0 -10
  117. data/lib/riffer/stream_events/guardrail_tripwire.rb +0 -10
  118. data/lib/riffer/stream_events/interrupt.rb +2 -12
  119. data/lib/riffer/stream_events/reasoning_delta.rb +0 -3
  120. data/lib/riffer/stream_events/reasoning_done.rb +6 -8
  121. data/lib/riffer/stream_events/skill_activation.rb +0 -3
  122. data/lib/riffer/stream_events/text_delta.rb +0 -2
  123. data/lib/riffer/stream_events/text_done.rb +0 -2
  124. data/lib/riffer/stream_events/token_usage_done.rb +0 -2
  125. data/lib/riffer/stream_events/tool_call_delta.rb +1 -5
  126. data/lib/riffer/stream_events/tool_call_done.rb +0 -5
  127. data/lib/riffer/stream_events/web_search_done.rb +0 -3
  128. data/lib/riffer/stream_events/web_search_status.rb +1 -5
  129. data/lib/riffer/testing/minitest.rb +4 -5
  130. data/lib/riffer/testing.rb +5 -38
  131. data/lib/riffer/tool.rb +2 -28
  132. data/lib/riffer/tools/response.rb +3 -32
  133. data/lib/riffer/tools/runtime/fibers.rb +0 -6
  134. data/lib/riffer/tools/runtime/inline.rb +0 -1
  135. data/lib/riffer/tools/runtime/threaded.rb +0 -6
  136. data/lib/riffer/tools/runtime.rb +8 -30
  137. data/lib/riffer/tools/toolable.rb +0 -37
  138. data/lib/riffer/tracing/capture.rb +5 -9
  139. data/lib/riffer/tracing/no_op.rb +0 -7
  140. data/lib/riffer/tracing/otel.rb +7 -16
  141. data/lib/riffer/tracing/stream_recorder.rb +0 -7
  142. data/lib/riffer/tracing.rb +4 -27
  143. data/lib/riffer/version.rb +1 -1
  144. data/lib/riffer.rb +2 -30
  145. data/sig/generated/riffer/agent/config.rbs +24 -46
  146. data/sig/generated/riffer/agent/context.rbs +2 -26
  147. data/sig/generated/riffer/agent/outcome.rbs +0 -20
  148. data/sig/generated/riffer/agent/response.rbs +4 -27
  149. data/sig/generated/riffer/agent/run.rbs +12 -31
  150. data/sig/generated/riffer/agent/serializer.rbs +2 -27
  151. data/sig/generated/riffer/agent/session/repair.rbs +2 -10
  152. data/sig/generated/riffer/agent/session.rbs +10 -36
  153. data/sig/generated/riffer/agent/structured_output/result.rbs +0 -7
  154. data/sig/generated/riffer/agent/structured_output.rbs +0 -7
  155. data/sig/generated/riffer/agent.rbs +25 -125
  156. data/sig/generated/riffer/config/amazon_bedrock.rbs +21 -0
  157. data/sig/generated/riffer/config/anthropic.rbs +15 -0
  158. data/sig/generated/riffer/config/azure_open_ai.rbs +21 -0
  159. data/sig/generated/riffer/config/evals.rbs +13 -0
  160. data/sig/generated/riffer/config/files.rbs +43 -0
  161. data/sig/generated/riffer/config/gemini.rbs +15 -0
  162. data/sig/generated/riffer/config/mcp.rbs +19 -0
  163. data/sig/generated/riffer/config/open_ai.rbs +21 -0
  164. data/sig/generated/riffer/config/open_router.rbs +15 -0
  165. data/sig/generated/riffer/config/pricing/rates.rbs +19 -0
  166. data/sig/generated/riffer/config/pricing.rbs +31 -0
  167. data/sig/generated/riffer/config/skills.rbs +19 -0
  168. data/sig/generated/riffer/config/tracing.rbs +25 -0
  169. data/sig/generated/riffer/config.rbs +2 -307
  170. data/sig/generated/riffer/evals/evaluator.rbs +12 -21
  171. data/sig/generated/riffer/evals/evaluator_runner.rbs +0 -14
  172. data/sig/generated/riffer/evals/judge.rbs +4 -8
  173. data/sig/generated/riffer/evals/result.rbs +1 -11
  174. data/sig/generated/riffer/evals/run_result.rbs +0 -12
  175. data/sig/generated/riffer/evals/scenario_result.rbs +0 -14
  176. data/sig/generated/riffer/files/resolver.rbs +6 -13
  177. data/sig/generated/riffer/guardrail.rbs +2 -22
  178. data/sig/generated/riffer/guardrails/modification.rbs +0 -6
  179. data/sig/generated/riffer/guardrails/result.rbs +0 -15
  180. data/sig/generated/riffer/guardrails/runner.rbs +0 -11
  181. data/sig/generated/riffer/guardrails/tripwire.rbs +0 -8
  182. data/sig/generated/riffer/guardrails.rbs +0 -2
  183. data/sig/generated/riffer/helpers/boolean.rbs +0 -4
  184. data/sig/generated/riffer/helpers/call_or_value.rbs +0 -3
  185. data/sig/generated/riffer/helpers/deep_dup.rbs +13 -0
  186. data/sig/generated/riffer/helpers/dependencies.rbs +0 -4
  187. data/sig/generated/riffer/helpers/identifier.rbs +0 -12
  188. data/sig/generated/riffer/helpers/validate.rbs +21 -0
  189. data/sig/generated/riffer/mcp/authenticated_tool.rbs +0 -5
  190. data/sig/generated/riffer/mcp/client.rbs +0 -7
  191. data/sig/generated/riffer/mcp/manifest.rbs +3 -7
  192. data/sig/generated/riffer/mcp/registration.rbs +0 -10
  193. data/sig/generated/riffer/mcp/registry.rbs +0 -9
  194. data/sig/generated/riffer/mcp/search_tool.rbs +0 -4
  195. data/sig/generated/riffer/mcp/tool.rbs +0 -4
  196. data/sig/generated/riffer/mcp/tool_factory.rbs +0 -6
  197. data/sig/generated/riffer/mcp.rbs +2 -22
  198. data/sig/generated/riffer/messages/assistant/reasoning_part.rbs +45 -0
  199. data/sig/generated/riffer/messages/assistant/tool_call.rbs +34 -0
  200. data/sig/generated/riffer/messages/assistant.rbs +25 -31
  201. data/sig/generated/riffer/messages/base.rbs +0 -12
  202. data/sig/generated/riffer/messages/system.rbs +4 -1
  203. data/sig/generated/riffer/messages/tool.rbs +4 -10
  204. data/sig/generated/riffer/messages/user/file_part.rbs +76 -0
  205. data/sig/generated/riffer/messages/user.rbs +7 -5
  206. data/sig/generated/riffer/params/boolean.rbs +1 -4
  207. data/sig/generated/riffer/params/param.rbs +7 -31
  208. data/sig/generated/riffer/params.rbs +8 -38
  209. data/sig/generated/riffer/providers/amazon_bedrock.rbs +33 -29
  210. data/sig/generated/riffer/providers/anthropic.rbs +2 -12
  211. data/sig/generated/riffer/providers/azure_open_ai.rbs +0 -8
  212. data/sig/generated/riffer/providers/base.rbs +18 -34
  213. data/sig/generated/riffer/providers/finish_reason.rbs +0 -6
  214. data/sig/generated/riffer/providers/gemini/client.rbs +4 -17
  215. data/sig/generated/riffer/providers/gemini.rbs +4 -10
  216. data/sig/generated/riffer/providers/mock.rbs +6 -27
  217. data/sig/generated/riffer/providers/open_ai.rbs +6 -13
  218. data/sig/generated/riffer/providers/open_router.rbs +37 -18
  219. data/sig/generated/riffer/providers/repository.rbs +2 -14
  220. data/sig/generated/riffer/providers/token_usage.rbs +9 -12
  221. data/sig/generated/riffer/registrable.rbs +0 -45
  222. data/sig/generated/riffer/runner/fibers.rbs +0 -6
  223. data/sig/generated/riffer/runner/sequential.rbs +0 -1
  224. data/sig/generated/riffer/runner/threaded.rbs +0 -3
  225. data/sig/generated/riffer/runner.rbs +0 -3
  226. data/sig/generated/riffer/skills/activate_tool.rbs +0 -3
  227. data/sig/generated/riffer/skills/adapter.rbs +0 -8
  228. data/sig/generated/riffer/skills/backend.rbs +2 -7
  229. data/sig/generated/riffer/skills/config.rbs +6 -17
  230. data/sig/generated/riffer/skills/context.rbs +0 -29
  231. data/sig/generated/riffer/skills/filesystem_backend.rbs +0 -7
  232. data/sig/generated/riffer/skills/frontmatter.rbs +2 -16
  233. data/sig/generated/riffer/skills/markdown_adapter.rbs +0 -6
  234. data/sig/generated/riffer/skills/xml_adapter.rbs +0 -3
  235. data/sig/generated/riffer/stream_events/base.rbs +0 -3
  236. data/sig/generated/riffer/stream_events/finish_reason_done.rbs +1 -6
  237. data/sig/generated/riffer/stream_events/guardrail_modification.rbs +0 -10
  238. data/sig/generated/riffer/stream_events/guardrail_tripwire.rbs +0 -10
  239. data/sig/generated/riffer/stream_events/interrupt.rbs +2 -10
  240. data/sig/generated/riffer/stream_events/reasoning_delta.rbs +0 -3
  241. data/sig/generated/riffer/stream_events/reasoning_done.rbs +4 -6
  242. data/sig/generated/riffer/stream_events/skill_activation.rbs +0 -3
  243. data/sig/generated/riffer/stream_events/text_delta.rbs +0 -2
  244. data/sig/generated/riffer/stream_events/text_done.rbs +0 -2
  245. data/sig/generated/riffer/stream_events/token_usage_done.rbs +0 -2
  246. data/sig/generated/riffer/stream_events/tool_call_delta.rbs +1 -5
  247. data/sig/generated/riffer/stream_events/tool_call_done.rbs +0 -5
  248. data/sig/generated/riffer/stream_events/web_search_done.rbs +0 -3
  249. data/sig/generated/riffer/stream_events/web_search_status.rbs +1 -5
  250. data/sig/generated/riffer/testing.rbs +0 -38
  251. data/sig/generated/riffer/tool.rbs +0 -27
  252. data/sig/generated/riffer/tools/response.rbs +3 -29
  253. data/sig/generated/riffer/tools/runtime/fibers.rbs +0 -5
  254. data/sig/generated/riffer/tools/runtime/inline.rbs +0 -1
  255. data/sig/generated/riffer/tools/runtime/threaded.rbs +0 -5
  256. data/sig/generated/riffer/tools/runtime.rbs +4 -26
  257. data/sig/generated/riffer/tools/toolable.rbs +0 -37
  258. data/sig/generated/riffer/tracing/capture.rbs +6 -9
  259. data/sig/generated/riffer/tracing/no_op.rbs +0 -7
  260. data/sig/generated/riffer/tracing/otel.rbs +7 -16
  261. data/sig/generated/riffer/tracing/stream_recorder.rbs +0 -2
  262. data/sig/generated/riffer/tracing.rbs +4 -23
  263. data/sig/generated/riffer.rbs +2 -29
  264. data/sig/manual/riffer/helpers/deep_dup.rbs +5 -0
  265. data/sig/manual/riffer/helpers/validate.rbs +5 -0
  266. metadata +39 -3
  267. data/sig/generated/riffer/messages/file_part.rbs +0 -101
@@ -1,42 +1,30 @@
1
1
  # Generated from lib/riffer/messages/base.rb with RBS::Inline
2
2
 
3
- # Base class for all message types. Subclasses must implement +role+.
4
3
  class Riffer::Messages::Base
5
- # Builds the matching message subclass from a hash, or returns +msg+ unchanged
6
- # when it is already a message. Raises Riffer::ArgumentError on an invalid message.
7
4
  # --
8
5
  # : ((Hash[Symbol, untyped] | Riffer::Messages::Base)) -> Riffer::Messages::Base
9
6
  def self.from_hash: (Hash[Symbol, untyped] | Riffer::Messages::Base) -> Riffer::Messages::Base
10
7
 
11
- # The message content.
12
8
  attr_reader content: String
13
9
 
14
- # The message id, or nil when +Riffer.config.message_id_strategy+ is +:none+.
15
10
  attr_reader id: String?
16
11
 
17
12
  # --
18
13
  # : (String, ?id: String?) -> void
19
14
  def initialize: (String, ?id: String?) -> void
20
15
 
21
- # Converts the message to a hash.
22
- #
23
16
  # --
24
17
  # : () -> Hash[Symbol, untyped]
25
18
  def to_h: () -> Hash[Symbol, untyped]
26
19
 
27
- # Returns the message role.
28
20
  # --
29
21
  # : () -> Symbol
30
22
  def role: () -> Symbol
31
23
 
32
- # Whether this message carries pending tool calls (overridden by
33
- # +Riffer::Messages::Assistant+).
34
24
  # --
35
25
  # : () -> bool
36
26
  def has_tool_calls?: () -> bool
37
27
 
38
- # Merges another same-role message into this one. +Tool+ messages are never
39
- # merged.
40
28
  # --
41
29
  # : (untyped) -> Riffer::Messages::Base
42
30
  def +: (untyped) -> Riffer::Messages::Base
@@ -1,7 +1,10 @@
1
1
  # Generated from lib/riffer/messages/system.rb with RBS::Inline
2
2
 
3
- # Represents a system message (instructions) in a conversation.
4
3
  class Riffer::Messages::System < Riffer::Messages::Base
4
+ # --
5
+ # : ((Hash[Symbol, untyped] | Riffer::Messages::System)) -> Riffer::Messages::System
6
+ def self.from_hash: (Hash[Symbol, untyped] | Riffer::Messages::System) -> Riffer::Messages::System
7
+
5
8
  # --
6
9
  # : () -> Symbol
7
10
  def role: () -> Symbol
@@ -1,26 +1,22 @@
1
1
  # Generated from lib/riffer/messages/tool.rb with RBS::Inline
2
2
 
3
- # Represents a tool execution result in a conversation.
4
3
  class Riffer::Messages::Tool < Riffer::Messages::Base
5
- # The ID of the tool call this result responds to.
4
+ # --
5
+ # : ((Hash[Symbol, untyped] | Riffer::Messages::Tool)) -> Riffer::Messages::Tool
6
+ def self.from_hash: (Hash[Symbol, untyped] | Riffer::Messages::Tool) -> Riffer::Messages::Tool
7
+
6
8
  attr_reader tool_call_id: String
7
9
 
8
- # The name of the tool that was called.
9
10
  attr_reader name: String
10
11
 
11
- # The error message if the tool execution failed.
12
12
  attr_reader error: String?
13
13
 
14
- # The type of error (:unknown_tool, :validation_error, :execution_error,
15
- # :timeout_error, :unhandled_error).
16
14
  attr_reader error_type: Symbol?
17
15
 
18
16
  # --
19
17
  # : (String, tool_call_id: String, name: String, ?id: String?, ?error: String?, ?error_type: Symbol?) -> void
20
18
  def initialize: (String, tool_call_id: String, name: String, ?id: String?, ?error: String?, ?error_type: Symbol?) -> void
21
19
 
22
- # Returns true if the tool execution resulted in an error.
23
- #
24
20
  # --
25
21
  # : () -> bool
26
22
  def error?: () -> bool
@@ -29,8 +25,6 @@ class Riffer::Messages::Tool < Riffer::Messages::Base
29
25
  # : () -> Symbol
30
26
  def role: () -> Symbol
31
27
 
32
- # Converts the message to a hash.
33
- #
34
28
  # --
35
29
  # : () -> Hash[Symbol, untyped]
36
30
  def to_h: () -> Hash[Symbol, untyped]
@@ -0,0 +1,76 @@
1
+ # Generated from lib/riffer/messages/user/file_part.rb with RBS::Inline
2
+
3
+ class Riffer::Messages::User::FilePart
4
+ @data_bytes: String?
5
+
6
+ @downloaded_data: String?
7
+
8
+ @data: String?
9
+
10
+ @url_string: String?
11
+
12
+ MEDIA_TYPES: Hash[String, String]
13
+
14
+ SUPPORTED_MEDIA_TYPES: Array[String]
15
+
16
+ SHA256_PATTERN: Regexp
17
+
18
+ attr_reader media_type: String
19
+
20
+ attr_reader filename: String?
21
+
22
+ attr_reader sha256: String?
23
+
24
+ # --
25
+ # : (media_type: String, ?data: String?, ?filename: String?, ?url: String?, ?sha256: String?) -> void
26
+ def initialize: (media_type: String, ?data: String?, ?filename: String?, ?url: String?, ?sha256: String?) -> void
27
+
28
+ # --
29
+ # : (String, ?media_type: String?, ?filename: String?, ?sha256: String?) -> Riffer::Messages::User::FilePart
30
+ def self.from_url: (String, ?media_type: String?, ?filename: String?, ?sha256: String?) -> Riffer::Messages::User::FilePart
31
+
32
+ # --
33
+ # : ((Hash[Symbol, untyped] | Riffer::Messages::User::FilePart)) -> Riffer::Messages::User::FilePart
34
+ def self.from_hash: (Hash[Symbol, untyped] | Riffer::Messages::User::FilePart) -> Riffer::Messages::User::FilePart
35
+
36
+ # --
37
+ # : (String) -> String
38
+ def self.detect_media_type: (String) -> String
39
+
40
+ # --
41
+ # : () -> String?
42
+ def data: () -> String?
43
+
44
+ # : () -> String?
45
+ def data_bytes: () -> String?
46
+
47
+ # : (String) -> void
48
+ def cache_data_bytes: (String) -> void
49
+
50
+ # : () -> bool
51
+ def inline_data?: () -> bool
52
+
53
+ # --
54
+ # : (String) -> void
55
+ def cache_downloaded_data: (String) -> void
56
+
57
+ # --
58
+ # : () -> String?
59
+ def url: () -> String?
60
+
61
+ # --
62
+ # : () -> bool
63
+ def url?: () -> bool
64
+
65
+ # --
66
+ # : () -> bool
67
+ def image?: () -> bool
68
+
69
+ # --
70
+ # : () -> bool
71
+ def document?: () -> bool
72
+
73
+ # --
74
+ # : () -> Hash[Symbol, untyped]
75
+ def to_h: () -> Hash[Symbol, untyped]
76
+ end
@@ -1,13 +1,15 @@
1
1
  # Generated from lib/riffer/messages/user.rb with RBS::Inline
2
2
 
3
- # Represents a user message in a conversation.
4
3
  class Riffer::Messages::User < Riffer::Messages::Base
5
- # File attachments for this message.
6
- attr_reader files: Array[Riffer::Messages::FilePart]
4
+ # --
5
+ # : ((Hash[Symbol, untyped] | Riffer::Messages::User)) -> Riffer::Messages::User
6
+ def self.from_hash: (Hash[Symbol, untyped] | Riffer::Messages::User) -> Riffer::Messages::User
7
+
8
+ attr_reader files: Array[Riffer::Messages::User::FilePart]
7
9
 
8
10
  # --
9
- # : (String, ?id: String?, ?files: Array[Riffer::Messages::FilePart]) -> void
10
- def initialize: (String, ?id: String?, ?files: Array[Riffer::Messages::FilePart]) -> void
11
+ # : (String, ?id: String?, ?files: Array[Riffer::Messages::User::FilePart]) -> void
12
+ def initialize: (String, ?id: String?, ?files: Array[Riffer::Messages::User::FilePart]) -> void
11
13
 
12
14
  # --
13
15
  # : () -> Symbol
@@ -1,8 +1,5 @@
1
1
  # Generated from lib/riffer/params/boolean.rb with RBS::Inline
2
2
 
3
- # Sentinel type for declaring boolean parameters — Ruby has no +Boolean+ class
4
- # (+true+/+false+ are +TrueClass+/+FalseClass+).
5
- #
6
- # required :verbose, Riffer::Params::Boolean
3
+ # Ruby has no +Boolean+ class, so params declare booleans with this sentinel.
7
4
  module Riffer::Params::Boolean
8
5
  end
@@ -1,44 +1,28 @@
1
1
  # Generated from lib/riffer/params/param.rb with RBS::Inline
2
2
 
3
- # A single parameter definition, handling type validation and JSON Schema
4
- # generation.
5
3
  class Riffer::Params::Param
6
- # Maps Ruby types to JSON Schema type strings
7
4
  TYPE_MAPPINGS: Hash[Module, String]
8
5
 
9
- # Primitive types allowed for the <tt>of:</tt> keyword on Array params
10
6
  PRIMITIVE_TYPES: Array[Module]
11
7
 
12
- # Maps JSON Schema type strings back to Ruby types (inverse of TYPE_MAPPINGS),
13
- # collapsing the three boolean spellings onto Riffer::Params::Boolean.
14
8
  JSON_TYPE_MAPPINGS: Hash[String, Module]
15
9
 
16
- # The parameter name.
17
10
  attr_reader name: Symbol
18
11
 
19
- # The Ruby type.
20
12
  attr_reader type: Module
21
13
 
22
- # Whether the parameter is required.
23
14
  attr_reader required: bool
24
15
 
25
- # The parameter description, if any.
26
16
  attr_reader description: String?
27
17
 
28
- # Allowed values, if constrained.
29
18
  attr_reader enum: Array[untyped]?
30
19
 
31
- # The default value, if any.
32
20
  attr_reader default: untyped
33
21
 
34
- # Element type for a typed array (+of:+).
35
22
  attr_reader item_type: Module?
36
23
 
37
- # Nested Params for object / array-of-object types.
38
24
  attr_reader nested_params: Riffer::Params?
39
25
 
40
- # Reconstructs a Param from a single JSON Schema property. Raises
41
- # Riffer::ArgumentError on a type outside the Params-expressible subset.
42
26
  # --
43
27
  # : (Symbol, Hash[Symbol, untyped], required: bool) -> Riffer::Params::Param
44
28
  def self.from_json_schema: (Symbol, Hash[Symbol, untyped], required: bool) -> Riffer::Params::Param
@@ -47,9 +31,6 @@ class Riffer::Params::Param
47
31
  # : (Module, Hash[Symbol, untyped]) -> [Module?, Riffer::Params?]
48
32
  def self.resolve_nesting: (Module, Hash[Symbol, untyped]) -> [ Module?, Riffer::Params? ]
49
33
 
50
- # Resolves a JSON Schema +type+ (or a <tt>[type, "null"]</tt> union) to its
51
- # Ruby type. Returns a Module — Riffer::Params::Boolean is a Module, not a
52
- # Class. Raises Riffer::ArgumentError on an unsupported type.
53
34
  # --
54
35
  # : (untyped) -> Module
55
36
  def self.json_type_to_ruby: (untyped) -> Module
@@ -58,32 +39,27 @@ class Riffer::Params::Param
58
39
  # : (name: Symbol, type: Module, required: bool, ?description: String?, ?enum: Array[untyped]?, ?default: untyped, ?item_type: Module?, ?nested_params: Riffer::Params?) -> void
59
40
  def initialize: (name: Symbol, type: Module, required: bool, ?description: String?, ?enum: Array[untyped]?, ?default: untyped, ?item_type: Module?, ?nested_params: Riffer::Params?) -> void
60
41
 
61
- # Validates that a value matches the expected type.
62
- #
63
42
  # --
64
43
  # : (untyped) -> bool
65
44
  def valid_type?: (untyped) -> bool
66
45
 
67
- # Returns the JSON Schema type name for this parameter.
68
- #
69
46
  # --
70
47
  # : () -> String
71
48
  def type_name: () -> String
72
49
 
73
- # Converts this parameter to JSON Schema format. When +strict+, optional
74
- # params are made nullable (<tt>["type", "null"]</tt>) so strict providers
75
- # distinguish absent from present; optional params with an +enum+ use +anyOf+
76
- # instead, since providers like Anthropic reject
77
- # <tt>{"type": ["string", "null"], "enum": [...]}</tt>. Raises
78
- # Riffer::ArgumentError when +strict+ and a Hash param has no block or an
79
- # Array param has neither a block nor <tt>of:</tt>, since strict providers
80
- # reject objects without +properties+ and arrays without +items+.
81
50
  # --
82
51
  # : (?strict: bool) -> Hash[Symbol, untyped]
83
52
  def to_json_schema: (?strict: bool) -> Hash[Symbol, untyped]
84
53
 
85
54
  private
86
55
 
56
+ # +dup+ would leave the copy sharing this one's nested Params, enum list and
57
+ # default, so defining a parameter or editing either value on one would reach
58
+ # the other.
59
+ # --
60
+ # : (Riffer::Params::Param) -> void
61
+ def initialize_copy: (Riffer::Params::Param) -> void
62
+
87
63
  # --
88
64
  # : () -> void
89
65
  def validate_strict_shape!: () -> void
@@ -1,67 +1,42 @@
1
1
  # Generated from lib/riffer/params.rb with RBS::Inline
2
2
 
3
- # A DSL for defining tool parameters and structured-output schemas, used within
4
- # a Tool's +params+ block.
5
- #
6
- # params do
7
- # required :city, String, description: "The city name"
8
- # optional :units, String, default: "celsius", enum: ["celsius", "fahrenheit"]
9
- # end
10
3
  class Riffer::Params
11
- # The defined parameters.
12
4
  attr_reader parameters: Array[Riffer::Params::Param]
13
5
 
14
6
  # --
15
7
  # : () -> void
16
8
  def initialize: () -> void
17
9
 
18
- # Reconstructs a Params from a JSON Schema object — the inverse of
19
- # +to_json_schema(strict: false)+. Raises Riffer::ArgumentError on features
20
- # outside the Params-expressible subset of JSON Schema.
21
- #
22
- # schema = params.to_json_schema(strict: false)
23
- # Riffer::Params.from_json_schema(schema) # => equivalent Riffer::Params
24
- #
10
+ # The inverse of +to_json_schema(strict: false)+. Raises Riffer::ArgumentError
11
+ # on features outside the Params-expressible subset of JSON Schema.
25
12
  # --
26
13
  # : (Hash[Symbol, untyped]) -> Riffer::Params
27
14
  def self.from_json_schema: (Hash[Symbol, untyped]) -> Riffer::Params
28
15
 
29
- # Defines a required parameter.
30
- #
31
16
  # --
32
17
  # : (Symbol, Module, ?description: String?, ?enum: Array[untyped]?, ?of: Module?) ?{ (Riffer::Params) [self: Riffer::Params] -> void } -> void
33
18
  def required: (Symbol, Module, ?description: String?, ?enum: Array[untyped]?, ?of: Module?) ?{ (Riffer::Params) [self: Riffer::Params] -> void } -> void
34
19
 
35
- # Defines an optional parameter.
36
- #
37
20
  # --
38
21
  # : (Symbol, Module, ?description: String?, ?enum: Array[untyped]?, ?default: untyped, ?of: Module?) ?{ (Riffer::Params) [self: Riffer::Params] -> void } -> void
39
22
  def optional: (Symbol, Module, ?description: String?, ?enum: Array[untyped]?, ?default: untyped, ?of: Module?) ?{ (Riffer::Params) [self: Riffer::Params] -> void } -> void
40
23
 
41
- # Validates arguments against parameter definitions.
42
- #
43
- # A Float param accepts an Integer (JSON Schema <tt>"number"</tt> covers
44
- # integers) and its value is coerced with +to_f+, so callers always get a
45
- # Float. The same holds for the items of an <tt>of: Float</tt> array. No other
46
- # type is coerced.
47
- #
48
- # Raises Riffer::ValidationError if validation fails.
49
- #
50
24
  # --
51
25
  # : (Hash[Symbol, untyped]) -> Hash[Symbol, untyped]
52
26
  def validate: (Hash[Symbol, untyped]) -> Hash[Symbol, untyped]
53
27
 
54
- # Converts all parameters to JSON Schema format. When +strict+ is true, every
55
- # property is listed in +required+ and optional ones are made nullable
56
- # instead, satisfying providers that enforce strict structured output schemas.
57
- # Raises Riffer::ArgumentError when +strict+ and a Hash param (at any depth)
58
- # has no block or an Array param has neither a block nor <tt>of:</tt>.
59
28
  # --
60
29
  # : (?strict: bool) -> Hash[Symbol, untyped]
61
30
  def to_json_schema: (?strict: bool) -> Hash[Symbol, untyped]
62
31
 
63
32
  private
64
33
 
34
+ # Without this, +dup+ shares parameters, so defining one on either copy
35
+ # would reach the other.
36
+ # --
37
+ # : (Riffer::Params) -> void
38
+ def initialize_copy: (Riffer::Params) -> void
39
+
65
40
  # --
66
41
  # : (Module, Module?) ?{ (Riffer::Params) [self: Riffer::Params] -> void } -> Riffer::Params?
67
42
  def build_nested: (Module, Module?) ?{ (Riffer::Params) [self: Riffer::Params] -> void } -> Riffer::Params?
@@ -78,15 +53,10 @@ class Riffer::Params
78
53
  # : (Riffer::Params::Param, Array[untyped], Array[String]) -> Array[untyped]
79
54
  def validate_nested_array_of_objects: (Riffer::Params::Param, Array[untyped], Array[String]) -> Array[untyped]
80
55
 
81
- # Returns the array with its valid items coerced by +coerce_value+.
82
56
  # --
83
57
  # : (Riffer::Params::Param, Array[untyped], Array[String]) -> Array[untyped]
84
58
  def validate_typed_array: (Riffer::Params::Param, Array[untyped], Array[String]) -> Array[untyped]
85
59
 
86
- # Coerces an already-validated value to the Ruby type its param declares.
87
- # Only Float coerces today, because JSON Schema "number" accepts integers and
88
- # callers should not get a type that depends on whether the model wrote a
89
- # decimal point. Add a branch here rather than inline at a call site.
90
60
  # --
91
61
  # : (Module, untyped) -> untyped
92
62
  def coerce_value: (Module, untyped) -> untyped
@@ -1,21 +1,19 @@
1
1
  # Generated from lib/riffer/providers/amazon_bedrock.rb with RBS::Inline
2
2
 
3
- # Amazon Bedrock provider for Claude and other foundation models. Requires the
4
- # +aws-sdk-bedrockruntime+ gem.
5
3
  class Riffer::Providers::AmazonBedrock < Riffer::Providers::Base
6
- # Matches Anthropic models on Bedrock — bare (+anthropic.claude-...+) and
7
- # cross-region (+us.anthropic.claude-...+) ids.
4
+ # Bedrock ids are bare (+anthropic.claude-...+) or cross-region (+us.anthropic.claude-...+).
8
5
  ANTHROPIC_MODEL_PATTERN: Regexp
9
6
 
10
7
  FINISH_REASONS: Hash[String, Symbol]
11
8
 
12
- # Returns the skill adapter for the Bedrock model — XML for Anthropic models
13
- # (which Bedrock hosts alongside other vendors'), else Markdown.
9
+ # Only parts carrying this tag are replayed, so reasoning captured by another
10
+ # adapter, whose signatures Converse cannot verify, never reaches the request.
11
+ REASONING_FORMAT: String
12
+
14
13
  # --
15
14
  # : (?String?) -> singleton(Riffer::Skills::Adapter)
16
15
  def self.skills_adapter: (?String?) -> singleton(Riffer::Skills::Adapter)
17
16
 
18
- # The GenAI semconv well-known provider name.
19
17
  # --
20
18
  # : () -> String
21
19
  def self.semconv_provider_name: () -> String
@@ -25,8 +23,8 @@ class Riffer::Providers::AmazonBedrock < Riffer::Providers::Base
25
23
  def initialize: () -> void
26
24
 
27
25
  # --
28
- # : (Riffer::Messages::FilePart) -> Symbol
29
- def file_delivery: (Riffer::Messages::FilePart) -> Symbol
26
+ # : (Riffer::Messages::User::FilePart) -> Symbol
27
+ def file_delivery: (Riffer::Messages::User::FilePart) -> Symbol
30
28
 
31
29
  private
32
30
 
@@ -34,9 +32,6 @@ class Riffer::Providers::AmazonBedrock < Riffer::Providers::Base
34
32
  # : () -> untyped
35
33
  def global_client: () -> untyped
36
34
 
37
- # Compacted so an unset region stays absent: the AWS SDK resolves +AWS_REGION+
38
- # and the shared config only for a missing argument, and raises
39
- # +Aws::Errors::MissingRegionError+ on an explicit nil.
40
35
  # --
41
36
  # : () -> untyped
42
37
  def build_client: () -> untyped
@@ -45,10 +40,6 @@ class Riffer::Providers::AmazonBedrock < Riffer::Providers::Base
45
40
  # : (Array[Riffer::Messages::Base], String?, Hash[Symbol, untyped]) -> Hash[Symbol, untyped]
46
41
  def build_request_params: (Array[Riffer::Messages::Base], String?, Hash[Symbol, untyped]) -> Hash[Symbol, untyped]
47
42
 
48
- # Converse treats +tools -> system -> messages+ as one prefix and looks back
49
- # from a +cachePoint+ for the longest cached run, so the point on the final
50
- # message reuses the previous step's cache wherever that point sat. Mixed
51
- # ttls must be ordered 1h before 5m, so both points share one.
52
43
  # --
53
44
  # : (Hash[Symbol, untyped], untyped) -> void
54
45
  def apply_cache_point: (Hash[Symbol, untyped], untyped) -> void
@@ -65,8 +56,6 @@ class Riffer::Providers::AmazonBedrock < Riffer::Providers::Base
65
56
  # : (untyped) -> Riffer::Providers::TokenUsage?
66
57
  def extract_token_usage: (untyped) -> Riffer::Providers::TokenUsage?
67
58
 
68
- # Converse's +input_tokens+ excludes the cache buckets; TokenUsage's
69
- # input includes them.
70
59
  # --
71
60
  # : (untyped) -> Riffer::Providers::TokenUsage
72
61
  def build_token_usage: (untyped) -> Riffer::Providers::TokenUsage
@@ -87,23 +76,24 @@ class Riffer::Providers::AmazonBedrock < Riffer::Providers::Base
87
76
  # : (untyped) -> Array[Riffer::Messages::Assistant::ToolCall]
88
77
  def extract_tool_calls: (untyped) -> Array[Riffer::Messages::Assistant::ToolCall]
89
78
 
79
+ # --
80
+ # : (untyped) -> Array[Riffer::Messages::Assistant::ReasoningPart]
81
+ def extract_reasoning: (untyped) -> Array[Riffer::Messages::Assistant::ReasoningPart]
82
+
83
+ # +redacted_content+ is raw bytes; it is stored Base64-encoded so the part
84
+ # survives JSON persistence.
85
+ # --
86
+ # : (?text: String?, ?signature: String?, ?redacted_content: String?) -> Riffer::Messages::Assistant::ReasoningPart
87
+ def build_reasoning_part: (?text: String?, ?signature: String?, ?redacted_content: String?) -> Riffer::Messages::Assistant::ReasoningPart
88
+
90
89
  # --
91
90
  # : (Hash[Symbol, untyped], Riffer::Providers::_EventSink) -> void
92
91
  def execute_stream: (Hash[Symbol, untyped], Riffer::Providers::_EventSink) -> void
93
92
 
94
- # Re-raises an +Aws::Errors::EventError+ event with a message built from its
95
- # error code and message. The SDK's own +#message+ is just the class name,
96
- # so without this the failure would be unreadable.
97
93
  # --
98
94
  # : (untyped) -> void
99
95
  def raise_stream_event_error!: (untyped) -> void
100
96
 
101
- # Re-raises a Bedrock stream-exception event as the matching
102
- # +Aws::BedrockRuntime::Errors+ class. ConverseStream delivers API errors on
103
- # the same channel as content, so without this a mid-stream failure would
104
- # silently end the stream with no content. Non-exception events that we do
105
- # not consume (including the SDK's +:unknown_event+ struct) are ignored for
106
- # forward compatibility.
107
97
  # --
108
98
  # : (untyped) -> void
109
99
  def raise_if_stream_exception!: (untyped) -> void
@@ -120,6 +110,16 @@ class Riffer::Providers::AmazonBedrock < Riffer::Providers::Base
120
110
  # : (untyped, state: Hash[Symbol, untyped], yielder: Riffer::Providers::_EventSink) -> void
121
111
  def handle_content_block_delta_tool_use: (untyped, state: Hash[Symbol, untyped], yielder: Riffer::Providers::_EventSink) -> void
122
112
 
113
+ # A reasoning block streams its text in pieces, then its signature (or its
114
+ # redacted bytes) in a delta of its own.
115
+ # --
116
+ # : (untyped, state: Hash[Symbol, untyped], yielder: Riffer::Providers::_EventSink) -> void
117
+ def handle_reasoning_delta: (untyped, state: Hash[Symbol, untyped], yielder: Riffer::Providers::_EventSink) -> void
118
+
119
+ # --
120
+ # : (untyped, state: Hash[Symbol, untyped], yielder: Riffer::Providers::_EventSink) -> void
121
+ def handle_reasoning_stop: (untyped, state: Hash[Symbol, untyped], yielder: Riffer::Providers::_EventSink) -> void
122
+
123
123
  # --
124
124
  # : (untyped, state: Hash[Symbol, untyped], yielder: Riffer::Providers::_EventSink) -> void
125
125
  def handle_content_block_stop_text_delta: (untyped, state: Hash[Symbol, untyped], yielder: Riffer::Providers::_EventSink) -> void
@@ -140,13 +140,17 @@ class Riffer::Providers::AmazonBedrock < Riffer::Providers::Base
140
140
  # : (Riffer::Messages::Assistant) -> Hash[Symbol, untyped]
141
141
  def convert_assistant_to_bedrock_format: (Riffer::Messages::Assistant) -> Hash[Symbol, untyped]
142
142
 
143
+ # --
144
+ # : (Riffer::Messages::Assistant::ReasoningPart) -> Hash[Symbol, untyped]
145
+ def convert_reasoning_part_to_bedrock_format: (Riffer::Messages::Assistant::ReasoningPart) -> Hash[Symbol, untyped]
146
+
143
147
  # --
144
148
  # : (Array[Hash[Symbol, untyped]], Riffer::Messages::Tool) -> void
145
149
  def append_tool_result: (Array[Hash[Symbol, untyped]], Riffer::Messages::Tool) -> void
146
150
 
147
151
  # --
148
- # : (Riffer::Messages::FilePart) -> Hash[Symbol, untyped]
149
- def convert_file_part_to_bedrock_format: (Riffer::Messages::FilePart) -> Hash[Symbol, untyped]
152
+ # : (Riffer::Messages::User::FilePart) -> Hash[Symbol, untyped]
153
+ def convert_file_part_to_bedrock_format: (Riffer::Messages::User::FilePart) -> Hash[Symbol, untyped]
150
154
 
151
155
  BEDROCK_FORMAT_MAP: Hash[String, String]
152
156
 
@@ -1,19 +1,14 @@
1
1
  # Generated from lib/riffer/providers/anthropic.rb with RBS::Inline
2
2
 
3
- # Anthropic provider for Claude models via the Anthropic API. Requires the
4
- # +anthropic+ gem.
5
3
  class Riffer::Providers::Anthropic < Riffer::Providers::Base
6
4
  WEB_SEARCH_TOOL_TYPE: String
7
5
 
8
6
  FINISH_REASONS: Hash[String, Symbol]
9
7
 
10
- # Returns the XML skill adapter for Anthropic/Claude.
11
- #
12
8
  # --
13
9
  # : (?String?) -> singleton(Riffer::Skills::Adapter)
14
10
  def self.skills_adapter: (?String?) -> singleton(Riffer::Skills::Adapter)
15
11
 
16
- # The GenAI semconv well-known provider name.
17
12
  # --
18
13
  # : () -> String
19
14
  def self.semconv_provider_name: () -> String
@@ -28,9 +23,6 @@ class Riffer::Providers::Anthropic < Riffer::Providers::Base
28
23
  # : () -> untyped
29
24
  def global_client: () -> untyped
30
25
 
31
- # Compacted for the same reason as the other providers: never hand an SDK an
32
- # explicit nil credential, so its own +ANTHROPIC_API_KEY+ resolution stays
33
- # reachable regardless of how that SDK distinguishes nil from absent.
34
26
  # --
35
27
  # : () -> untyped
36
28
  def build_client: () -> untyped
@@ -55,8 +47,6 @@ class Riffer::Providers::Anthropic < Riffer::Providers::Base
55
47
  # : (untyped) -> Riffer::Providers::FinishReason?
56
48
  def build_finish_reason: (untyped) -> Riffer::Providers::FinishReason?
57
49
 
58
- # Anthropic's +input_tokens+ excludes the cache buckets; TokenUsage's
59
- # input includes them.
60
50
  # --
61
51
  # : (untyped) -> Riffer::Providers::TokenUsage
62
52
  def build_token_usage: (untyped) -> Riffer::Providers::TokenUsage
@@ -126,8 +116,8 @@ class Riffer::Providers::Anthropic < Riffer::Providers::Base
126
116
  def convert_assistant_to_anthropic_format: (Riffer::Messages::Assistant) -> Hash[Symbol, untyped]
127
117
 
128
118
  # --
129
- # : (Riffer::Messages::FilePart) -> Hash[Symbol, untyped]
130
- def convert_file_part_to_anthropic_format: (Riffer::Messages::FilePart) -> Hash[Symbol, untyped]
119
+ # : (Riffer::Messages::User::FilePart) -> Hash[Symbol, untyped]
120
+ def convert_file_part_to_anthropic_format: (Riffer::Messages::User::FilePart) -> Hash[Symbol, untyped]
131
121
 
132
122
  # --
133
123
  # : (singleton(Riffer::Tool)) -> Hash[Symbol, untyped]
@@ -1,10 +1,6 @@
1
1
  # Generated from lib/riffer/providers/azure_open_ai.rb with RBS::Inline
2
2
 
3
- # Azure OpenAI provider for GPT models hosted on Azure. Requires the +openai+
4
- # gem. Credentials resolve from config, then +AZURE_OPENAI_API_KEY+ /
5
- # +AZURE_OPENAI_ENDPOINT+.
6
3
  class Riffer::Providers::AzureOpenAI < Riffer::Providers::OpenAI
7
- # The GenAI semconv well-known provider name.
8
4
  # --
9
5
  # : () -> String
10
6
  def self.semconv_provider_name: () -> String
@@ -15,10 +11,6 @@ class Riffer::Providers::AzureOpenAI < Riffer::Providers::OpenAI
15
11
  # : () -> untyped
16
12
  def global_client: () -> untyped
17
13
 
18
- # Deliberately not compacted: this borrows the OpenAI SDK to talk to Azure, so
19
- # omitting an unset argument would let the SDK fall back to +OPENAI_API_KEY+
20
- # and +OPENAI_BASE_URL+ — sending Azure traffic, and an OpenAI credential, to
21
- # whatever those name. Passing nil raises in the SDK instead.
22
14
  # --
23
15
  # : () -> untyped
24
16
  def build_client: () -> untyped