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,23 +1,16 @@
1
1
  # Generated from lib/riffer/agent/structured_output.rb with RBS::Inline
2
2
 
3
- # Parses and validates structured JSON responses against a Riffer::Params
4
- # schema.
5
3
  class Riffer::Agent::StructuredOutput
6
- # The schema parameters.
7
4
  attr_reader params: Riffer::Params
8
5
 
9
6
  # --
10
7
  # : (Riffer::Params) -> void
11
8
  def initialize: (Riffer::Params) -> void
12
9
 
13
- # Returns the JSON Schema for this structured output.
14
- #
15
10
  # --
16
11
  # : (?strict: bool) -> Hash[Symbol, untyped]
17
12
  def json_schema: (?strict: bool) -> Hash[Symbol, untyped]
18
13
 
19
- # Parses a JSON string and validates it against the schema, returning a
20
- # Result carrying either the validated object or an error message.
21
14
  # --
22
15
  # : (String) -> Riffer::Agent::StructuredOutput::Result
23
16
  def parse_and_validate: (String) -> Riffer::Agent::StructuredOutput::Result
@@ -1,15 +1,5 @@
1
1
  # Generated from lib/riffer/agent.rb with RBS::Inline
2
2
 
3
- # Base class for all agents in the Riffer framework. Subclass it to define an
4
- # agent's model, instructions, tools, and guardrails.
5
- #
6
- # class MyAgent < Riffer::Agent
7
- # model 'openai/gpt-4o'
8
- # instructions 'You are a helpful assistant.'
9
- # end
10
- #
11
- # agent = MyAgent.new
12
- # agent.generate('Hello!')
13
3
  class Riffer::Agent
14
4
  extend Riffer::Registrable
15
5
 
@@ -17,221 +7,131 @@ class Riffer::Agent
17
7
 
18
8
  INTERRUPT_MAX_STEPS: Symbol
19
9
 
20
- # Returns the per-class Riffer::Agent::Config holding every DSL setting.
21
10
  # --
22
11
  # : () -> Riffer::Agent::Config
23
12
  def self.config: () -> Riffer::Agent::Config
24
13
 
25
- # Gets or sets the agent identifier.
26
- #
14
+ # --
15
+ # : (Class) -> void
16
+ def self.inherited: (Class) -> void
17
+
27
18
  # --
28
19
  # : (?String?) -> String
29
20
  def self.identifier: (?String?) -> String
30
21
 
31
- # Gets or sets the model string (e.g., "openai/gpt-4o").
32
- #
33
22
  # --
34
23
  # : (?(String | Proc)?) -> (String | Proc)?
35
24
  def self.model: (?(String | Proc)?) -> (String | Proc)?
36
25
 
37
- # Gets or sets the agent instructions. A Proc is called at generate time with
38
- # the +context+ hash (which may be +nil+).
39
- #
40
- # instructions "You are a helpful assistant."
41
- #
42
- # instructions -> (context) {
43
- # "You are assisting #{context[:name]}"
44
- # }
45
- #
46
26
  # --
47
27
  # : (?(String | Proc)?) -> (String | Proc)?
48
28
  def self.instructions: (?(String | Proc)?) -> (String | Proc)?
49
29
 
50
- # Gets or sets model options passed to generate_text/stream_text.
51
- #
52
30
  # --
53
31
  # : (?Hash[Symbol, untyped]?) -> Hash[Symbol, untyped]
54
32
  def self.model_options: (?Hash[Symbol, untyped]?) -> Hash[Symbol, untyped]
55
33
 
56
- # Gets or sets the structured output schema for this agent.
57
34
  # --
58
35
  # : (?Riffer::Params?) ?{ (Riffer::Params) [self: Riffer::Params] -> void } -> Riffer::Params?
59
36
  def self.structured_output: (?Riffer::Params?) ?{ (Riffer::Params) [self: Riffer::Params] -> void } -> Riffer::Params?
60
37
 
61
- # Gets or sets the maximum number of LLM call steps in the tool-use loop.
62
- # The splat distinguishes a getter (no argument) from setting the limit to
63
- # +nil+ (unlimited); it defaults to Riffer::Agent::Config::DEFAULT_MAX_STEPS.
64
- #
65
- # max_steps # reads the current limit
66
- # max_steps 8 # cap the loop at 8 steps
67
- # max_steps nil # unlimited
68
- #
69
38
  # --
70
39
  # : (*Numeric?) -> Numeric?
71
40
  def self.max_steps: (*Numeric?) -> Numeric?
72
41
 
73
- # Gets or sets the tools used by this agent.
74
- #
75
42
  # --
76
43
  # : (?(Array[singleton(Riffer::Tool)] | Proc)?) -> (Array[singleton(Riffer::Tool)] | Proc)?
77
44
  def self.uses_tools: (?(Array[singleton(Riffer::Tool)] | Proc)?) -> (Array[singleton(Riffer::Tool)] | Proc)?
78
45
 
79
- # Opts this agent into MCP tools from registrations matching the given tag.
80
- # Progressive registrations expose +mcp_search+ instead of every schema up front.
81
- #
46
+ # +progressive+ exposes +mcp_search+ instead of every tool schema up front.
47
+ # --
82
48
  # : (String | Symbol, ?progressive: bool) -> void
83
49
  def self.use_mcp: (String | Symbol, ?progressive: bool) -> void
84
50
 
85
- # Returns the accumulated +use_mcp+ configurations for this agent class.
86
- #
87
51
  # : () -> Array[Hash[Symbol, untyped]]
88
52
  def self.mcp_configs: () -> Array[Hash[Symbol, untyped]]
89
53
 
90
- # Gets or sets the tool runtime for this agent; defaults to
91
- # <tt>Riffer.config.tool_runtime</tt> when unset.
92
54
  # --
93
55
  # : (?(singleton(Riffer::Tools::Runtime) | Riffer::Tools::Runtime | Proc)?) -> (singleton(Riffer::Tools::Runtime) | Riffer::Tools::Runtime | Proc)
94
56
  def self.tool_runtime: (?(singleton(Riffer::Tools::Runtime) | Riffer::Tools::Runtime | Proc)?) -> (singleton(Riffer::Tools::Runtime) | Riffer::Tools::Runtime | Proc)
95
57
 
96
- # Configures skills for this agent via a block DSL, or returns the current
97
- # Riffer::Skills::Config when called without a block.
98
- #
99
- # skills do
100
- # backend Riffer::Skills::FilesystemBackend.new(".skills")
101
- # adapter Riffer::Skills::XmlAdapter
102
- # activate ["code-review"]
103
- # end
104
- #
105
58
  # --
106
59
  # : () ?{ (Riffer::Skills::Config) [self: Riffer::Skills::Config] -> void } -> Riffer::Skills::Config?
107
60
  def self.skills: () ?{ (Riffer::Skills::Config) [self: Riffer::Skills::Config] -> void } -> Riffer::Skills::Config?
108
61
 
109
- # Generates a response using a new agent instance.
110
62
  # --
111
- # : (?String?, ?files: Array[Hash[Symbol, untyped] | Riffer::Messages::FilePart]?, ?context: Hash[Symbol, untyped]?, ?tags: Hash[(String | Symbol), untyped]) -> Riffer::Agent::Response
112
- def self.generate: (?String?, ?files: Array[Hash[Symbol, untyped] | Riffer::Messages::FilePart]?, ?context: Hash[Symbol, untyped]?, ?tags: Hash[String | Symbol, untyped]) -> Riffer::Agent::Response
63
+ # : (?String?, ?files: Array[Hash[Symbol, untyped] | Riffer::Messages::User::FilePart]?, ?context: Hash[Symbol, untyped]?, ?tags: Hash[(String | Symbol), untyped]) -> Riffer::Agent::Response
64
+ def self.generate: (?String?, ?files: Array[Hash[Symbol, untyped] | Riffer::Messages::User::FilePart]?, ?context: Hash[Symbol, untyped]?, ?tags: Hash[String | Symbol, untyped]) -> Riffer::Agent::Response
113
65
 
114
- # Streams a response using a new agent instance.
115
66
  # --
116
- # : (?String?, ?files: Array[Hash[Symbol, untyped] | Riffer::Messages::FilePart]?, ?context: Hash[Symbol, untyped]?, ?tags: Hash[(String | Symbol), untyped]) -> Enumerator[Riffer::StreamEvents::Base, Riffer::Agent::Response]
117
- def self.stream: (?String?, ?files: Array[Hash[Symbol, untyped] | Riffer::Messages::FilePart]?, ?context: Hash[Symbol, untyped]?, ?tags: Hash[String | Symbol, untyped]) -> Enumerator[Riffer::StreamEvents::Base, Riffer::Agent::Response]
67
+ # : (?String?, ?files: Array[Hash[Symbol, untyped] | Riffer::Messages::User::FilePart]?, ?context: Hash[Symbol, untyped]?, ?tags: Hash[(String | Symbol), untyped]) -> Enumerator[Riffer::StreamEvents::Base, Riffer::Agent::Response]
68
+ def self.stream: (?String?, ?files: Array[Hash[Symbol, untyped] | Riffer::Messages::User::FilePart]?, ?context: Hash[Symbol, untyped]?, ?tags: Hash[String | Symbol, untyped]) -> Enumerator[Riffer::StreamEvents::Base, Riffer::Agent::Response]
118
69
 
119
- # Reconstructs a runnable agent from a wire hash produced by +#to_h+.
120
70
  # --
121
71
  # : (Hash[Symbol, untyped], ?context: Hash[Symbol, untyped]?, ?session: Riffer::Agent::Session?, ?tool_resolver: ^(Hash[Symbol, untyped]) -> singleton(Riffer::Tool), ?tool_runtime: (singleton(Riffer::Tools::Runtime) | Riffer::Tools::Runtime | Proc)?) -> Riffer::Agent
122
72
  def self.from_h: (Hash[Symbol, untyped], ?context: Hash[Symbol, untyped]?, ?session: Riffer::Agent::Session?, ?tool_resolver: ^(Hash[Symbol, untyped]) -> singleton(Riffer::Tool), ?tool_runtime: (singleton(Riffer::Tools::Runtime) | Riffer::Tools::Runtime | Proc)?) -> Riffer::Agent
123
73
 
124
- # Reconstructs a runnable agent from a JSON string produced by +#to_json+.
125
74
  # --
126
75
  # : (String, ?context: Hash[Symbol, untyped]?, ?session: Riffer::Agent::Session?, ?tool_resolver: ^(Hash[Symbol, untyped]) -> singleton(Riffer::Tool), ?tool_runtime: (singleton(Riffer::Tools::Runtime) | Riffer::Tools::Runtime | Proc)?) -> Riffer::Agent
127
76
  def self.from_json: (String, ?context: Hash[Symbol, untyped]?, ?session: Riffer::Agent::Session?, ?tool_resolver: ^(Hash[Symbol, untyped]) -> singleton(Riffer::Tool), ?tool_runtime: (singleton(Riffer::Tools::Runtime) | Riffer::Tools::Runtime | Proc)?) -> Riffer::Agent
128
77
 
129
- # Registers a guardrail for input, output, or both phases. Raises
130
- # Riffer::ArgumentError unless +phase+ is :before, :after, or :around.
131
78
  # --
132
79
  # : (Symbol, with: singleton(Riffer::Guardrail), **untyped) -> void
133
80
  def self.guardrail: (Symbol, with: singleton(Riffer::Guardrail), **untyped) -> void
134
81
 
135
- # Returns the registered guardrail configs for a given phase.
136
82
  # --
137
83
  # : (Symbol) -> Array[Hash[Symbol, untyped]]
138
84
  def self.guardrails_for: (Symbol) -> Array[Hash[Symbol, untyped]]
139
85
 
140
- # The conversation handle.
141
86
  attr_reader session: Riffer::Agent::Session
142
87
 
143
- # The per-instance Riffer::Agent::Config.
144
88
  attr_reader config: Riffer::Agent::Config
145
89
 
146
- # The system message built from the configured +instructions+, or +nil+ when
147
- # none are configured.
148
90
  attr_reader instruction_message: Riffer::Messages::System?
149
91
 
150
- # The system message describing the configured skills catalog, or +nil+ when
151
- # skills are unconfigured or the catalog is empty.
152
92
  attr_reader skills_message: Riffer::Messages::System?
153
93
 
154
- # The mutable runtime context shared with every +Riffer::Agent::Run+ this
155
- # agent executes and threaded through all Proc-based settings.
156
94
  attr_reader context: Riffer::Agent::Context
157
95
 
158
- # The resolved provider name (the part before "/" in the model string),
159
- # e.g. +"openai"+.
160
96
  attr_reader provider_name: String
161
97
 
162
- # The resolved model name (the part after "/" in the model string), used as
163
- # the model argument on every LLM call.
164
98
  attr_reader model_name: String
165
99
 
166
- # The provider client. Public so tests can pre-queue responses on
167
- # +Riffer::Providers::Mock+ before calling +#generate+.
100
+ # Public so tests can pre-queue responses on Riffer::Providers::Mock.
168
101
  attr_reader provider: Riffer::Providers::Base
169
102
 
170
- # The +Riffer::Agent::StructuredOutput+ wrapping the configured schema, or
171
- # +nil+ when not configured.
172
103
  attr_reader structured_output: Riffer::Agent::StructuredOutput?
173
104
 
174
- # The tool classes the LLM sees on every call this agent makes.
175
105
  attr_reader tools: Array[singleton(Riffer::Tool)]
176
106
 
177
- # The tool runtime instance used to execute tool calls.
178
107
  attr_reader tool_runtime: Riffer::Tools::Runtime
179
108
 
180
- # Initializes a new agent.
181
- #
182
- # A provided +session:+ is used as-is — the caller owns its contents (e.g.
183
- # cross-process resume from persisted history); an omitted one is seeded with
184
- # the instruction and skills messages.
185
- #
186
- # Raises Riffer::ArgumentError unless the configured model string is
187
- # "provider/model" format.
188
- #
189
109
  # --
190
110
  # : (?session: Riffer::Agent::Session?, ?context: Hash[Symbol, untyped]?, ?config: Riffer::Agent::Config?) -> void
191
111
  def initialize: (?session: Riffer::Agent::Session?, ?context: Hash[Symbol, untyped]?, ?config: Riffer::Agent::Config?) -> void
192
112
 
193
- # Generates a response from the agent.
194
- #
195
- # With +prompt+, a new user message is appended (silently — +on_message+ does
196
- # not fire for user inputs) before the loop runs. Without it, the loop runs
197
- # against the current session, resuming a persisted conversation or pending
198
- # tool calls. +files:+ requires +prompt+.
199
- #
200
- # +tags:+ is an optional flat hash of attribution tags applied to this single
201
- # call: they propagate to the provider's native request-metadata field, and
202
- # are stamped as +riffer.tag.*+ on every span the call emits. See
203
- # +docs/AGENTS.md+ for the per-provider mapping. The reserved key
204
- # +user_id+ also maps to the provider's native user identifier where one
205
- # exists.
206
- #
207
- # --
208
- # : (?String?, ?files: Array[Hash[Symbol, untyped] | Riffer::Messages::FilePart]?, ?tags: Hash[(String | Symbol), untyped]) -> Riffer::Agent::Response
209
- def generate: (?String?, ?files: Array[Hash[Symbol, untyped] | Riffer::Messages::FilePart]?, ?tags: Hash[String | Symbol, untyped]) -> Riffer::Agent::Response
210
-
211
- # Streams a response from the agent as an +Enumerator+ of
212
- # +Riffer::StreamEvents+ whose block-form +each+ returns the final
213
- # Riffer::Agent::Response. See +#generate+ for prompt/files/tags semantics.
214
- #
215
- # Raises Riffer::ArgumentError if structured output is configured.
216
- #
217
- # --
218
- # : (?String?, ?files: Array[Hash[Symbol, untyped] | Riffer::Messages::FilePart]?, ?tags: Hash[(String | Symbol), untyped]) -> Enumerator[Riffer::StreamEvents::Base, Riffer::Agent::Response]
219
- def stream: (?String?, ?files: Array[Hash[Symbol, untyped] | Riffer::Messages::FilePart]?, ?tags: Hash[String | Symbol, untyped]) -> Enumerator[Riffer::StreamEvents::Base, Riffer::Agent::Response]
220
-
221
- # Interrupts the agent loop from an +on_message+ callback. Equivalent to
222
- # <tt>throw :riffer_interrupt, reason</tt>.
113
+ # --
114
+ # : () -> String
115
+ def identifier: () -> String
116
+
117
+ # --
118
+ # : (?String?, ?files: Array[Hash[Symbol, untyped] | Riffer::Messages::User::FilePart]?, ?tags: Hash[(String | Symbol), untyped]) -> Riffer::Agent::Response
119
+ def generate: (?String?, ?files: Array[Hash[Symbol, untyped] | Riffer::Messages::User::FilePart]?, ?tags: Hash[String | Symbol, untyped]) -> Riffer::Agent::Response
120
+
121
+ # --
122
+ # : (?String?, ?files: Array[Hash[Symbol, untyped] | Riffer::Messages::User::FilePart]?, ?tags: Hash[(String | Symbol), untyped]) -> Enumerator[Riffer::StreamEvents::Base, Riffer::Agent::Response]
123
+ def stream: (?String?, ?files: Array[Hash[Symbol, untyped] | Riffer::Messages::User::FilePart]?, ?tags: Hash[String | Symbol, untyped]) -> Enumerator[Riffer::StreamEvents::Base, Riffer::Agent::Response]
124
+
223
125
  # --
224
126
  # : (?(String | Symbol)?) -> void
225
127
  def interrupt!: (?(String | Symbol)?) -> void
226
128
 
227
- # Snapshots this resolved agent into a self-contained, provider-neutral wire
228
- # hash.
229
129
  # --
230
130
  # : () -> Hash[Symbol, untyped]
231
131
  def to_h: () -> Hash[Symbol, untyped]
232
132
 
233
- # Snapshots this resolved agent into a wire JSON string. The +*+ absorbs the
234
- # JSON generator state argument so <tt>JSON.generate(agent)</tt> works too.
133
+ # The +*+ absorbs JSON's generator-state argument so
134
+ # <tt>JSON.generate(agent)</tt> works.
235
135
  # --
236
136
  # : (*untyped) -> String
237
137
  def to_json: (*untyped) -> String
@@ -0,0 +1,21 @@
1
+ # Generated from lib/riffer/config/amazon_bedrock.rb with RBS::Inline
2
+
3
+ class Riffer::Config::AmazonBedrock
4
+ attr_reader api_token: String?
5
+
6
+ attr_reader region: String?
7
+
8
+ attr_accessor client: untyped
9
+
10
+ # --
11
+ # : () -> void
12
+ def initialize: () -> void
13
+
14
+ # --
15
+ # : (untyped) -> void
16
+ def api_token=: (untyped) -> void
17
+
18
+ # --
19
+ # : (untyped) -> void
20
+ def region=: (untyped) -> void
21
+ end
@@ -0,0 +1,15 @@
1
+ # Generated from lib/riffer/config/anthropic.rb with RBS::Inline
2
+
3
+ class Riffer::Config::Anthropic
4
+ attr_reader api_key: String?
5
+
6
+ attr_accessor client: untyped
7
+
8
+ # --
9
+ # : () -> void
10
+ def initialize: () -> void
11
+
12
+ # --
13
+ # : (untyped) -> void
14
+ def api_key=: (untyped) -> void
15
+ end
@@ -0,0 +1,21 @@
1
+ # Generated from lib/riffer/config/azure_open_ai.rb with RBS::Inline
2
+
3
+ class Riffer::Config::AzureOpenAI
4
+ attr_reader api_key: String?
5
+
6
+ attr_reader endpoint: String?
7
+
8
+ attr_accessor client: untyped
9
+
10
+ # --
11
+ # : () -> void
12
+ def initialize: () -> void
13
+
14
+ # --
15
+ # : (untyped) -> void
16
+ def api_key=: (untyped) -> void
17
+
18
+ # --
19
+ # : (untyped) -> void
20
+ def endpoint=: (untyped) -> void
21
+ end
@@ -0,0 +1,13 @@
1
+ # Generated from lib/riffer/config/evals.rb with RBS::Inline
2
+
3
+ class Riffer::Config::Evals
4
+ attr_reader judge_model: String?
5
+
6
+ # --
7
+ # : () -> void
8
+ def initialize: () -> void
9
+
10
+ # --
11
+ # : (untyped) -> void
12
+ def judge_model=: (untyped) -> void
13
+ end
@@ -0,0 +1,43 @@
1
+ # Generated from lib/riffer/config/files.rb with RBS::Inline
2
+
3
+ class Riffer::Config::Files
4
+ attr_reader allow_downloads: bool
5
+
6
+ attr_reader max_bytes: Integer
7
+
8
+ attr_reader timeout: Integer
9
+
10
+ attr_reader max_per_message: Integer?
11
+
12
+ attr_reader runner: Riffer::Runner
13
+
14
+ attr_reader downloader: untyped
15
+
16
+ # --
17
+ # : () -> void
18
+ def initialize: () -> void
19
+
20
+ # --
21
+ # : (untyped) -> void
22
+ def allow_downloads=: (untyped) -> void
23
+
24
+ # --
25
+ # : (untyped) -> void
26
+ def max_bytes=: (untyped) -> void
27
+
28
+ # --
29
+ # : (untyped) -> void
30
+ def timeout=: (untyped) -> void
31
+
32
+ # --
33
+ # : (untyped) -> void
34
+ def max_per_message=: (untyped) -> void
35
+
36
+ # --
37
+ # : (untyped) -> void
38
+ def runner=: (untyped) -> void
39
+
40
+ # --
41
+ # : (untyped) -> void
42
+ def downloader=: (untyped) -> void
43
+ end
@@ -0,0 +1,15 @@
1
+ # Generated from lib/riffer/config/gemini.rb with RBS::Inline
2
+
3
+ class Riffer::Config::Gemini
4
+ attr_reader api_key: String?
5
+
6
+ attr_accessor client: untyped
7
+
8
+ # --
9
+ # : () -> void
10
+ def initialize: () -> void
11
+
12
+ # --
13
+ # : (untyped) -> void
14
+ def api_key=: (untyped) -> void
15
+ end
@@ -0,0 +1,19 @@
1
+ # Generated from lib/riffer/config/mcp.rb with RBS::Inline
2
+
3
+ class Riffer::Config::Mcp
4
+ attr_reader credentials: untyped
5
+
6
+ attr_reader discovery_runner: Riffer::Runner
7
+
8
+ # --
9
+ # : () -> void
10
+ def initialize: () -> void
11
+
12
+ # --
13
+ # : (untyped) -> void
14
+ def credentials=: (untyped) -> void
15
+
16
+ # --
17
+ # : (untyped) -> void
18
+ def discovery_runner=: (untyped) -> void
19
+ end
@@ -0,0 +1,21 @@
1
+ # Generated from lib/riffer/config/open_ai.rb with RBS::Inline
2
+
3
+ class Riffer::Config::OpenAI
4
+ attr_reader api_key: String?
5
+
6
+ attr_reader base_url: String?
7
+
8
+ attr_accessor client: untyped
9
+
10
+ # --
11
+ # : () -> void
12
+ def initialize: () -> void
13
+
14
+ # --
15
+ # : (untyped) -> void
16
+ def api_key=: (untyped) -> void
17
+
18
+ # --
19
+ # : (untyped) -> void
20
+ def base_url=: (untyped) -> void
21
+ end
@@ -0,0 +1,15 @@
1
+ # Generated from lib/riffer/config/open_router.rb with RBS::Inline
2
+
3
+ class Riffer::Config::OpenRouter
4
+ attr_reader api_key: String?
5
+
6
+ attr_accessor client: untyped
7
+
8
+ # --
9
+ # : () -> void
10
+ def initialize: () -> void
11
+
12
+ # --
13
+ # : (untyped) -> void
14
+ def api_key=: (untyped) -> void
15
+ end
@@ -0,0 +1,19 @@
1
+ # Generated from lib/riffer/config/pricing/rates.rb with RBS::Inline
2
+
3
+ class Riffer::Config::Pricing::Rates
4
+ attr_reader input: Float
5
+
6
+ attr_reader output: Float
7
+
8
+ attr_reader cache_read: Float?
9
+
10
+ attr_reader cache_write: Float?
11
+
12
+ # --
13
+ # : (input: Float, output: Float, ?cache_read: Float?, ?cache_write: Float?) -> void
14
+ def initialize: (input: Float, output: Float, ?cache_read: Float?, ?cache_write: Float?) -> void
15
+
16
+ # --
17
+ # : (input_tokens: Integer, output_tokens: Integer, ?cache_read_tokens: Integer?, ?cache_write_tokens: Integer?) -> Float
18
+ def cost_for: (input_tokens: Integer, output_tokens: Integer, ?cache_read_tokens: Integer?, ?cache_write_tokens: Integer?) -> Float
19
+ end
@@ -0,0 +1,31 @@
1
+ # Generated from lib/riffer/config/pricing.rb with RBS::Inline
2
+
3
+ class Riffer::Config::Pricing
4
+ @rates: Hash[String, Riffer::Config::Pricing::Rates]
5
+
6
+ # --
7
+ # : () -> void
8
+ def initialize: () -> void
9
+
10
+ # --
11
+ # : ((String | Array[String]), input: Numeric, output: Numeric, ?cache_read: Numeric?, ?cache_write: Numeric?) -> void
12
+ def set: (String | Array[String], input: Numeric, output: Numeric, ?cache_read: Numeric?, ?cache_write: Numeric?) -> void
13
+
14
+ # --
15
+ # : (String) -> Riffer::Config::Pricing::Rates?
16
+ def rates_for: (String) -> Riffer::Config::Pricing::Rates?
17
+
18
+ # --
19
+ # : () -> bool
20
+ def empty?: () -> bool
21
+
22
+ private
23
+
24
+ # --
25
+ # : (untyped, String) -> Float
26
+ def coerce_rate: (untyped, String) -> Float
27
+
28
+ # --
29
+ # : (untyped, String) -> Float?
30
+ def coerce_optional_rate: (untyped, String) -> Float?
31
+ end
@@ -0,0 +1,19 @@
1
+ # Generated from lib/riffer/config/skills.rb with RBS::Inline
2
+
3
+ class Riffer::Config::Skills
4
+ attr_reader default_activate_tool: singleton(Riffer::Tool)
5
+
6
+ attr_reader default_backend: (Riffer::Skills::Backend | Proc)?
7
+
8
+ # --
9
+ # : () -> void
10
+ def initialize: () -> void
11
+
12
+ # --
13
+ # : (singleton(Riffer::Tool)) -> void
14
+ def default_activate_tool=: (singleton(Riffer::Tool)) -> void
15
+
16
+ # --
17
+ # : ((Riffer::Skills::Backend | Proc)?) -> void
18
+ def default_backend=: ((Riffer::Skills::Backend | Proc)?) -> void
19
+ end
@@ -0,0 +1,25 @@
1
+ # Generated from lib/riffer/config/tracing.rb with RBS::Inline
2
+
3
+ class Riffer::Config::Tracing
4
+ attr_reader enabled: bool
5
+
6
+ attr_reader capture_messages: bool
7
+
8
+ attr_reader backend: untyped
9
+
10
+ # --
11
+ # : () -> void
12
+ def initialize: () -> void
13
+
14
+ # --
15
+ # : (untyped) -> void
16
+ def enabled=: (untyped) -> void
17
+
18
+ # --
19
+ # : (untyped) -> void
20
+ def capture_messages=: (untyped) -> void
21
+
22
+ # --
23
+ # : (untyped) -> void
24
+ def backend=: (untyped) -> void
25
+ end