riffer 0.30.0 → 0.32.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 (214) hide show
  1. checksums.yaml +4 -4
  2. data/.agents/code-style.md +63 -4
  3. data/.agents/rbs-inline.md +1 -6
  4. data/.release-please-manifest.json +1 -1
  5. data/AGENTS.md +1 -2
  6. data/CHANGELOG.md +25 -0
  7. data/docs/08_MESSAGES.md +1 -1
  8. data/docs/14_MCP.md +50 -5
  9. data/docs/15_SERIALIZATION.md +23 -12
  10. data/docs/providers/02_AMAZON_BEDROCK.md +14 -0
  11. data/lib/riffer/agent/config.rb +42 -47
  12. data/lib/riffer/agent/context.rb +70 -50
  13. data/lib/riffer/agent/response.rb +4 -20
  14. data/lib/riffer/agent/run.rb +28 -67
  15. data/lib/riffer/agent/serializer.rb +36 -85
  16. data/lib/riffer/agent/session/repair.rb +14 -40
  17. data/lib/riffer/agent/session.rb +25 -67
  18. data/lib/riffer/agent/structured_output/result.rb +3 -11
  19. data/lib/riffer/agent/structured_output.rb +5 -13
  20. data/lib/riffer/agent.rb +81 -199
  21. data/lib/riffer/config.rb +34 -101
  22. data/lib/riffer/evals/evaluator.rb +7 -27
  23. data/lib/riffer/evals/evaluator_runner.rb +11 -19
  24. data/lib/riffer/evals/judge.rb +4 -25
  25. data/lib/riffer/evals/result.rb +1 -18
  26. data/lib/riffer/evals/run_result.rb +0 -11
  27. data/lib/riffer/evals/scenario_result.rb +0 -14
  28. data/lib/riffer/evals.rb +0 -6
  29. data/lib/riffer/guardrail.rb +4 -27
  30. data/lib/riffer/guardrails/modification.rb +0 -10
  31. data/lib/riffer/guardrails/result.rb +3 -30
  32. data/lib/riffer/guardrails/runner.rb +5 -22
  33. data/lib/riffer/guardrails/tripwire.rb +1 -19
  34. data/lib/riffer/guardrails.rb +2 -4
  35. data/lib/riffer/helpers/call_or_value.rb +4 -3
  36. data/lib/riffer/helpers/class_name_converter.rb +3 -1
  37. data/lib/riffer/helpers/dependencies.rb +5 -7
  38. data/lib/riffer/helpers.rb +0 -5
  39. data/lib/riffer/mcp/authenticated_tool.rb +9 -9
  40. data/lib/riffer/mcp/client.rb +12 -17
  41. data/lib/riffer/mcp/manifest.rb +13 -10
  42. data/lib/riffer/mcp/registration.rb +2 -11
  43. data/lib/riffer/mcp/registry.rb +44 -52
  44. data/lib/riffer/mcp/search_tool.rb +53 -0
  45. data/lib/riffer/mcp/tool_factory.rb +13 -18
  46. data/lib/riffer/mcp.rb +12 -17
  47. data/lib/riffer/messages/assistant.rb +2 -9
  48. data/lib/riffer/messages/base.rb +46 -16
  49. data/lib/riffer/messages/file_part.rb +32 -24
  50. data/lib/riffer/messages/system.rb +0 -5
  51. data/lib/riffer/messages/tool.rb +0 -10
  52. data/lib/riffer/messages/user.rb +0 -10
  53. data/lib/riffer/messages.rb +0 -7
  54. data/lib/riffer/params/boolean.rb +2 -4
  55. data/lib/riffer/params/param.rb +28 -39
  56. data/lib/riffer/params.rb +9 -21
  57. data/lib/riffer/providers/amazon_bedrock.rb +42 -28
  58. data/lib/riffer/providers/anthropic.rb +4 -9
  59. data/lib/riffer/providers/azure_open_ai.rb +3 -19
  60. data/lib/riffer/providers/base.rb +13 -26
  61. data/lib/riffer/providers/gemini.rb +4 -4
  62. data/lib/riffer/providers/mock.rb +6 -26
  63. data/lib/riffer/providers/open_ai.rb +6 -8
  64. data/lib/riffer/providers/open_router.rb +4 -10
  65. data/lib/riffer/providers/repository.rb +4 -3
  66. data/lib/riffer/providers/token_usage.rb +9 -20
  67. data/lib/riffer/providers.rb +0 -8
  68. data/lib/riffer/runner/fibers.rb +10 -16
  69. data/lib/riffer/runner/sequential.rb +1 -4
  70. data/lib/riffer/runner/threaded.rb +3 -14
  71. data/lib/riffer/runner.rb +2 -15
  72. data/lib/riffer/skills/activate_tool.rb +2 -11
  73. data/lib/riffer/skills/adapter.rb +4 -22
  74. data/lib/riffer/skills/backend.rb +7 -21
  75. data/lib/riffer/skills/config.rb +10 -31
  76. data/lib/riffer/skills/context.rb +5 -20
  77. data/lib/riffer/skills/filesystem_backend.rb +7 -25
  78. data/lib/riffer/skills/frontmatter.rb +10 -28
  79. data/lib/riffer/skills/markdown_adapter.rb +2 -9
  80. data/lib/riffer/skills/xml_adapter.rb +2 -8
  81. data/lib/riffer/stream_events/base.rb +1 -6
  82. data/lib/riffer/stream_events/guardrail_modification.rb +1 -8
  83. data/lib/riffer/stream_events/guardrail_tripwire.rb +1 -8
  84. data/lib/riffer/stream_events/interrupt.rb +4 -7
  85. data/lib/riffer/stream_events/reasoning_delta.rb +2 -4
  86. data/lib/riffer/stream_events/reasoning_done.rb +2 -4
  87. data/lib/riffer/stream_events/skill_activation.rb +2 -4
  88. data/lib/riffer/stream_events/text_delta.rb +0 -2
  89. data/lib/riffer/stream_events/text_done.rb +1 -3
  90. data/lib/riffer/stream_events/token_usage_done.rb +1 -8
  91. data/lib/riffer/stream_events/tool_call_delta.rb +2 -3
  92. data/lib/riffer/stream_events/tool_call_done.rb +1 -3
  93. data/lib/riffer/stream_events/web_search_done.rb +1 -3
  94. data/lib/riffer/stream_events/web_search_status.rb +2 -3
  95. data/lib/riffer/stream_events.rb +0 -10
  96. data/lib/riffer/tool.rb +6 -13
  97. data/lib/riffer/tools/response.rb +8 -4
  98. data/lib/riffer/tools/runtime/fibers.rb +0 -3
  99. data/lib/riffer/tools/runtime/inline.rb +1 -4
  100. data/lib/riffer/tools/runtime/threaded.rb +0 -2
  101. data/lib/riffer/tools/runtime.rb +5 -38
  102. data/lib/riffer/tools/toolable.rb +5 -16
  103. data/lib/riffer/tools.rb +0 -4
  104. data/lib/riffer/version.rb +1 -1
  105. data/lib/riffer.rb +7 -8
  106. data/sig/generated/riffer/agent/config.rbs +29 -46
  107. data/sig/generated/riffer/agent/context.rbs +40 -48
  108. data/sig/generated/riffer/agent/response.rbs +4 -20
  109. data/sig/generated/riffer/agent/run.rbs +12 -61
  110. data/sig/generated/riffer/agent/serializer.rbs +28 -81
  111. data/sig/generated/riffer/agent/session/repair.rbs +12 -40
  112. data/sig/generated/riffer/agent/session.rbs +25 -67
  113. data/sig/generated/riffer/agent/structured_output/result.rbs +2 -10
  114. data/sig/generated/riffer/agent/structured_output.rbs +5 -12
  115. data/sig/generated/riffer/agent.rbs +62 -191
  116. data/sig/generated/riffer/config.rbs +34 -100
  117. data/sig/generated/riffer/evals/evaluator.rbs +7 -27
  118. data/sig/generated/riffer/evals/evaluator_runner.rbs +9 -19
  119. data/sig/generated/riffer/evals/judge.rbs +4 -24
  120. data/sig/generated/riffer/evals/result.rbs +1 -17
  121. data/sig/generated/riffer/evals/run_result.rbs +0 -10
  122. data/sig/generated/riffer/evals/scenario_result.rbs +0 -13
  123. data/sig/generated/riffer/evals.rbs +0 -6
  124. data/sig/generated/riffer/guardrail.rbs +4 -27
  125. data/sig/generated/riffer/guardrails/modification.rbs +0 -10
  126. data/sig/generated/riffer/guardrails/result.rbs +3 -30
  127. data/sig/generated/riffer/guardrails/runner.rbs +5 -22
  128. data/sig/generated/riffer/guardrails/tripwire.rbs +1 -19
  129. data/sig/generated/riffer/guardrails.rbs +2 -4
  130. data/sig/generated/riffer/helpers/call_or_value.rbs +4 -3
  131. data/sig/generated/riffer/helpers/class_name_converter.rbs +1 -1
  132. data/sig/generated/riffer/helpers/dependencies.rbs +3 -7
  133. data/sig/generated/riffer/helpers.rbs +0 -5
  134. data/sig/generated/riffer/mcp/authenticated_tool.rbs +5 -4
  135. data/sig/generated/riffer/mcp/client.rbs +10 -16
  136. data/sig/generated/riffer/mcp/manifest.rbs +9 -9
  137. data/sig/generated/riffer/mcp/registration.rbs +2 -10
  138. data/sig/generated/riffer/mcp/registry.rbs +11 -18
  139. data/sig/generated/riffer/mcp/search_tool.rbs +26 -0
  140. data/sig/generated/riffer/mcp/tool_factory.rbs +10 -15
  141. data/sig/generated/riffer/mcp.rbs +10 -17
  142. data/sig/generated/riffer/messages/assistant.rbs +2 -8
  143. data/sig/generated/riffer/messages/base.rbs +11 -16
  144. data/sig/generated/riffer/messages/file_part.rbs +13 -23
  145. data/sig/generated/riffer/messages/system.rbs +0 -4
  146. data/sig/generated/riffer/messages/tool.rbs +0 -9
  147. data/sig/generated/riffer/messages/user.rbs +0 -9
  148. data/sig/generated/riffer/messages.rbs +0 -7
  149. data/sig/generated/riffer/params/boolean.rbs +2 -4
  150. data/sig/generated/riffer/params/param.rbs +21 -39
  151. data/sig/generated/riffer/params.rbs +9 -21
  152. data/sig/generated/riffer/providers/amazon_bedrock.rbs +21 -25
  153. data/sig/generated/riffer/providers/anthropic.rbs +2 -7
  154. data/sig/generated/riffer/providers/azure_open_ai.rbs +3 -18
  155. data/sig/generated/riffer/providers/base.rbs +9 -25
  156. data/sig/generated/riffer/providers/gemini.rbs +0 -2
  157. data/sig/generated/riffer/providers/mock.rbs +6 -26
  158. data/sig/generated/riffer/providers/open_ai.rbs +1 -5
  159. data/sig/generated/riffer/providers/open_router.rbs +4 -10
  160. data/sig/generated/riffer/providers/repository.rbs +2 -3
  161. data/sig/generated/riffer/providers/token_usage.rbs +6 -16
  162. data/sig/generated/riffer/providers.rbs +0 -8
  163. data/sig/generated/riffer/runner/fibers.rbs +8 -15
  164. data/sig/generated/riffer/runner/sequential.rbs +1 -3
  165. data/sig/generated/riffer/runner/threaded.rbs +3 -13
  166. data/sig/generated/riffer/runner.rbs +2 -14
  167. data/sig/generated/riffer/skills/activate_tool.rbs +2 -11
  168. data/sig/generated/riffer/skills/adapter.rbs +4 -22
  169. data/sig/generated/riffer/skills/backend.rbs +7 -21
  170. data/sig/generated/riffer/skills/config.rbs +10 -31
  171. data/sig/generated/riffer/skills/context.rbs +5 -20
  172. data/sig/generated/riffer/skills/filesystem_backend.rbs +7 -24
  173. data/sig/generated/riffer/skills/frontmatter.rbs +10 -27
  174. data/sig/generated/riffer/skills/markdown_adapter.rbs +2 -9
  175. data/sig/generated/riffer/skills/xml_adapter.rbs +2 -8
  176. data/sig/generated/riffer/stream_events/base.rbs +1 -6
  177. data/sig/generated/riffer/stream_events/guardrail_modification.rbs +1 -8
  178. data/sig/generated/riffer/stream_events/guardrail_tripwire.rbs +1 -8
  179. data/sig/generated/riffer/stream_events/interrupt.rbs +4 -7
  180. data/sig/generated/riffer/stream_events/reasoning_delta.rbs +2 -4
  181. data/sig/generated/riffer/stream_events/reasoning_done.rbs +2 -4
  182. data/sig/generated/riffer/stream_events/skill_activation.rbs +2 -4
  183. data/sig/generated/riffer/stream_events/text_delta.rbs +0 -2
  184. data/sig/generated/riffer/stream_events/text_done.rbs +1 -3
  185. data/sig/generated/riffer/stream_events/token_usage_done.rbs +1 -7
  186. data/sig/generated/riffer/stream_events/tool_call_delta.rbs +2 -3
  187. data/sig/generated/riffer/stream_events/tool_call_done.rbs +1 -3
  188. data/sig/generated/riffer/stream_events/web_search_done.rbs +1 -3
  189. data/sig/generated/riffer/stream_events/web_search_status.rbs +2 -3
  190. data/sig/generated/riffer/stream_events.rbs +0 -10
  191. data/sig/generated/riffer/tool.rbs +5 -12
  192. data/sig/generated/riffer/tools/response.rbs +6 -4
  193. data/sig/generated/riffer/tools/runtime/fibers.rbs +0 -3
  194. data/sig/generated/riffer/tools/runtime/inline.rbs +1 -3
  195. data/sig/generated/riffer/tools/runtime/threaded.rbs +0 -2
  196. data/sig/generated/riffer/tools/runtime.rbs +5 -37
  197. data/sig/generated/riffer/tools/toolable.rbs +4 -14
  198. data/sig/generated/riffer/tools.rbs +0 -4
  199. data/sig/generated/riffer.rbs +5 -4
  200. data/sig/manual/riffer/agent/session/repair.rbs +5 -0
  201. data/sig/manual/riffer/evals/evaluator_runner.rbs +5 -0
  202. data/sig/manual/riffer/helpers/class_name_converter.rbs +5 -0
  203. data/sig/manual/riffer/helpers/dependencies.rbs +5 -0
  204. data/sig/manual/riffer/mcp/authenticated_tool.rbs +5 -0
  205. data/sig/manual/riffer/mcp/registry.rbs +5 -0
  206. data/sig/manual/riffer/mcp/tool_factory.rbs +5 -0
  207. data/sig/manual/riffer/mcp.rbs +5 -0
  208. data/sig/manual/riffer/providers/repository.rbs +5 -0
  209. data/sig/manual/riffer.rbs +5 -0
  210. metadata +17 -9
  211. data/.agents/rdoc.md +0 -69
  212. data/lib/riffer/messages/converter.rb +0 -90
  213. data/sig/generated/riffer/messages/converter.rbs +0 -33
  214. data/sig/manual/riffer/tools/toolable.rbs +0 -6
@@ -0,0 +1,5 @@
1
+ # `Riffer` uses `extend self`; rbs-inline doesn't emit that, so re-extend here to
2
+ # expose its instance methods as singleton methods.
3
+ module Riffer
4
+ extend ::Riffer
5
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: riffer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.30.0
4
+ version: 0.32.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jake Bottrall
@@ -35,14 +35,14 @@ dependencies:
35
35
  requirements:
36
36
  - - "~>"
37
37
  - !ruby/object:Gem::Version
38
- version: 1.43.0
38
+ version: 1.46.0
39
39
  type: :development
40
40
  prerelease: false
41
41
  version_requirements: !ruby/object:Gem::Requirement
42
42
  requirements:
43
43
  - - "~>"
44
44
  - !ruby/object:Gem::Version
45
- version: 1.43.0
45
+ version: 1.46.0
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: aws-sdk-bedrockruntime
48
48
  requirement: !ruby/object:Gem::Requirement
@@ -91,14 +91,14 @@ dependencies:
91
91
  requirements:
92
92
  - - "~>"
93
93
  - !ruby/object:Gem::Version
94
- version: 0.64.0
94
+ version: 0.66.1
95
95
  type: :development
96
96
  prerelease: false
97
97
  version_requirements: !ruby/object:Gem::Requirement
98
98
  requirements:
99
99
  - - "~>"
100
100
  - !ruby/object:Gem::Version
101
- version: 0.64.0
101
+ version: 0.66.1
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: async
104
104
  requirement: !ruby/object:Gem::Requirement
@@ -247,7 +247,6 @@ files:
247
247
  - ".agents/code-style.md"
248
248
  - ".agents/providers.md"
249
249
  - ".agents/rbs-inline.md"
250
- - ".agents/rdoc.md"
251
250
  - ".agents/testing.md"
252
251
  - ".bundle/config"
253
252
  - ".release-please-config.json"
@@ -322,11 +321,11 @@ files:
322
321
  - lib/riffer/mcp/manifest.rb
323
322
  - lib/riffer/mcp/registration.rb
324
323
  - lib/riffer/mcp/registry.rb
324
+ - lib/riffer/mcp/search_tool.rb
325
325
  - lib/riffer/mcp/tool_factory.rb
326
326
  - lib/riffer/messages.rb
327
327
  - lib/riffer/messages/assistant.rb
328
328
  - lib/riffer/messages/base.rb
329
- - lib/riffer/messages/converter.rb
330
329
  - lib/riffer/messages/file_part.rb
331
330
  - lib/riffer/messages/system.rb
332
331
  - lib/riffer/messages/tool.rb
@@ -429,11 +428,11 @@ files:
429
428
  - sig/generated/riffer/mcp/manifest.rbs
430
429
  - sig/generated/riffer/mcp/registration.rbs
431
430
  - sig/generated/riffer/mcp/registry.rbs
431
+ - sig/generated/riffer/mcp/search_tool.rbs
432
432
  - sig/generated/riffer/mcp/tool_factory.rbs
433
433
  - sig/generated/riffer/messages.rbs
434
434
  - sig/generated/riffer/messages/assistant.rbs
435
435
  - sig/generated/riffer/messages/base.rbs
436
- - sig/generated/riffer/messages/converter.rbs
437
436
  - sig/generated/riffer/messages/file_part.rbs
438
437
  - sig/generated/riffer/messages/system.rbs
439
438
  - sig/generated/riffer/messages/tool.rbs
@@ -491,10 +490,19 @@ files:
491
490
  - sig/generated/riffer/tools/toolable.rbs
492
491
  - sig/generated/riffer/version.rbs
493
492
  - sig/manifest.yaml
493
+ - sig/manual/riffer.rbs
494
494
  - sig/manual/riffer/agent/run.rbs
495
495
  - sig/manual/riffer/agent/serializer.rbs
496
+ - sig/manual/riffer/agent/session/repair.rbs
497
+ - sig/manual/riffer/evals/evaluator_runner.rbs
496
498
  - sig/manual/riffer/helpers/call_or_value.rbs
497
- - sig/manual/riffer/tools/toolable.rbs
499
+ - sig/manual/riffer/helpers/class_name_converter.rbs
500
+ - sig/manual/riffer/helpers/dependencies.rbs
501
+ - sig/manual/riffer/mcp.rbs
502
+ - sig/manual/riffer/mcp/authenticated_tool.rbs
503
+ - sig/manual/riffer/mcp/registry.rbs
504
+ - sig/manual/riffer/mcp/tool_factory.rbs
505
+ - sig/manual/riffer/providers/repository.rbs
498
506
  homepage: https://riffer.ai
499
507
  licenses:
500
508
  - MIT
data/.agents/rdoc.md DELETED
@@ -1,69 +0,0 @@
1
- # RDoc Documentation
2
-
3
- Use RDoc prose comments for public API descriptions and RBS inline annotations for types.
4
-
5
- ## Parameters and Return Types
6
-
7
- Describe parameters using RDoc labeled list syntax. Use a single `#:` line for the RBS method signature (see [rbs-inline.md](rbs-inline.md) for the full type annotation syntax):
8
-
9
- ```ruby
10
- # Creates a new agent.
11
- #
12
- # [name] the agent name.
13
- # [options] optional configuration.
14
- #
15
- #--
16
- #: (String, ?options: Hash[Symbol, untyped]) -> void
17
- def initialize(name, options: {})
18
- ```
19
-
20
- Always add `#--` (RDoc stop directive) on the line before a standalone `#:` type annotation. Without it, RDoc treats `#:` as a label-list marker and corrupts the preceding comment into a `<pre>` block. Inline `#:` on the same line as code (e.g., `attr_reader :name #: String`) does not need this.
21
-
22
- ## Inline Code
23
-
24
- Use `+word+` for single-word inline code. For multi-word expressions (containing spaces, colons, or brackets), use `<tt>multi word expression</tt>`:
25
-
26
- ```ruby
27
- # Returns +nil+ when no instructions are configured.
28
- # Equivalent to <tt>throw :riffer_interrupt, reason</tt>.
29
- ```
30
-
31
- ## Attributes and Constants
32
-
33
- Use `#:` inline syntax (on the same line) for attribute and constant types:
34
-
35
- ```ruby
36
- # The agent name.
37
- attr_reader :name #: String
38
-
39
- DEFAULT_TIMEOUT = 10 #: Integer
40
- ```
41
-
42
- ## Exceptions
43
-
44
- Document with prose:
45
-
46
- ```ruby
47
- # Raises Riffer::ArgumentError if the name is invalid.
48
- ```
49
-
50
- ## Examples
51
-
52
- Include usage examples as indented code blocks (2 extra spaces of indent):
53
-
54
- ```ruby
55
- # Creates a new agent.
56
- #
57
- # agent = MyAgent.new
58
- # agent.generate('Hello')
59
- #
60
- ```
61
-
62
- ## Internal APIs
63
-
64
- Mark internal APIs with `:nodoc:` to exclude from documentation:
65
-
66
- ```ruby
67
- def internal_method # :nodoc:
68
- end
69
- ```
@@ -1,90 +0,0 @@
1
- # frozen_string_literal: true
2
- # rbs_inline: enabled
3
-
4
- # Module for converting hashes to message objects.
5
- #
6
- # Included in Agent and Provider classes to handle message normalization.
7
- module Riffer::Messages::Converter
8
- # Converts a hash or message object to a Riffer::Messages::Base subclass.
9
- #
10
- # Raises Riffer::ArgumentError if the message format is invalid.
11
- #
12
- #--
13
- #: ((Hash[Symbol, untyped] | Riffer::Messages::Base)) -> Riffer::Messages::Base
14
- def convert_to_message_object(msg)
15
- return msg if msg.is_a?(Riffer::Messages::Base)
16
-
17
- unless msg.is_a?(Hash)
18
- raise Riffer::ArgumentError, "Message must be a Hash or Message object, got #{msg.class}"
19
- end
20
-
21
- convert_hash_to_message(msg)
22
- end
23
-
24
- # Converts a hash or FilePart object to a Riffer::Messages::FilePart.
25
- #
26
- # Accepts:
27
- # - +Riffer::Messages::FilePart+ objects (passed through)
28
- # - <tt>{url: "https://...", media_type: "..."}</tt> (URL source)
29
- # - <tt>{data: "...", media_type: "..."}</tt> (raw base64)
30
- #
31
- # Raises Riffer::ArgumentError if the hash format is invalid.
32
- #
33
- #--
34
- #: ((Hash[Symbol, untyped] | Riffer::Messages::FilePart)) -> Riffer::Messages::FilePart
35
- def convert_to_file_part(file)
36
- return file if file.is_a?(Riffer::Messages::FilePart)
37
-
38
- unless file.is_a?(Hash)
39
- raise Riffer::ArgumentError, "File must be a Hash or FilePart object, got #{file.class}"
40
- end
41
-
42
- url = file[:url]
43
- data = file[:data]
44
- media_type = file[:media_type]
45
- filename = file[:filename]
46
-
47
- if url
48
- Riffer::Messages::FilePart.from_url(url, media_type: media_type)
49
- elsif data && media_type
50
- Riffer::Messages::FilePart.new(data: data, media_type: media_type, filename: filename)
51
- else
52
- raise Riffer::ArgumentError, "File hash must include :url or :data with :media_type"
53
- end
54
- end
55
-
56
- private
57
-
58
- #--
59
- #: (Hash[Symbol, untyped]) -> Riffer::Messages::Base
60
- def convert_hash_to_message(hash)
61
- role = hash[:role]
62
- content = hash[:content]
63
-
64
- if role.nil? || role.empty?
65
- raise Riffer::ArgumentError, "Message hash must include a 'role' key"
66
- end
67
-
68
- id = hash[:id]
69
-
70
- case role.to_sym
71
- when :user
72
- files = (hash[:files] || []).map { |f| convert_to_file_part(f) }
73
- Riffer::Messages::User.new(content, id: id, files: files)
74
- when :assistant
75
- tool_calls = (hash[:tool_calls] || []).map { |tc|
76
- tc.is_a?(Riffer::Messages::Assistant::ToolCall) ? tc : Riffer::Messages::Assistant::ToolCall.new(**tc)
77
- }
78
- structured_output = hash[:structured_output]
79
- Riffer::Messages::Assistant.new(content, id: id, tool_calls: tool_calls, structured_output: structured_output)
80
- when :system
81
- Riffer::Messages::System.new(content, id: id)
82
- when :tool
83
- tool_call_id = hash[:tool_call_id]
84
- name = hash[:name]
85
- Riffer::Messages::Tool.new(content, id: id, tool_call_id: tool_call_id, name: name)
86
- else
87
- raise Riffer::ArgumentError, "Unknown message role: #{role}"
88
- end
89
- end
90
- end
@@ -1,33 +0,0 @@
1
- # Generated from lib/riffer/messages/converter.rb with RBS::Inline
2
-
3
- # Module for converting hashes to message objects.
4
- #
5
- # Included in Agent and Provider classes to handle message normalization.
6
- module Riffer::Messages::Converter
7
- # Converts a hash or message object to a Riffer::Messages::Base subclass.
8
- #
9
- # Raises Riffer::ArgumentError if the message format is invalid.
10
- #
11
- # --
12
- # : ((Hash[Symbol, untyped] | Riffer::Messages::Base)) -> Riffer::Messages::Base
13
- def convert_to_message_object: (Hash[Symbol, untyped] | Riffer::Messages::Base) -> Riffer::Messages::Base
14
-
15
- # Converts a hash or FilePart object to a Riffer::Messages::FilePart.
16
- #
17
- # Accepts:
18
- # - +Riffer::Messages::FilePart+ objects (passed through)
19
- # - <tt>{url: "https://...", media_type: "..."}</tt> (URL source)
20
- # - <tt>{data: "...", media_type: "..."}</tt> (raw base64)
21
- #
22
- # Raises Riffer::ArgumentError if the hash format is invalid.
23
- #
24
- # --
25
- # : ((Hash[Symbol, untyped] | Riffer::Messages::FilePart)) -> Riffer::Messages::FilePart
26
- def convert_to_file_part: (Hash[Symbol, untyped] | Riffer::Messages::FilePart) -> Riffer::Messages::FilePart
27
-
28
- private
29
-
30
- # --
31
- # : (Hash[Symbol, untyped]) -> Riffer::Messages::Base
32
- def convert_hash_to_message: (Hash[Symbol, untyped]) -> Riffer::Messages::Base
33
- end
@@ -1,6 +0,0 @@
1
- # Toolable is extended onto tool classes; its instance methods run as class
2
- # methods on the extender, which is also extended with ClassNameConverter
3
- # (see Toolable.extended). The include models that method availability for Steep.
4
- module Riffer::Tools::Toolable
5
- include Riffer::Helpers::ClassNameConverter
6
- end