riffer 0.17.0 → 0.20.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.
- checksums.yaml +4 -4
- data/.agents/architecture.md +64 -2
- data/.agents/rdoc.md +16 -4
- data/.release-please-manifest.json +1 -1
- data/.ruby-version +1 -1
- data/CHANGELOG.md +29 -0
- data/README.md +1 -1
- data/Rakefile +1 -2
- data/docs/01_OVERVIEW.md +2 -2
- data/docs/02_GETTING_STARTED.md +2 -2
- data/docs/03_AGENTS.md +98 -81
- data/docs/04_TOOLS.md +38 -8
- data/docs/06_STREAM_EVENTS.md +2 -2
- data/docs/07_CONFIGURATION.md +16 -16
- data/docs/08_EVALS.md +4 -3
- data/docs/10_SKILLS.md +166 -0
- data/docs_providers/01_PROVIDERS.md +19 -13
- data/docs_providers/02_AMAZON_BEDROCK.md +7 -7
- data/docs_providers/03_ANTHROPIC.md +7 -7
- data/docs_providers/04_OPENAI.md +7 -9
- data/docs_providers/05_AZURE_OPENAI.md +165 -0
- data/lib/riffer/agent/response.rb +18 -9
- data/lib/riffer/agent.rb +203 -82
- data/lib/riffer/config.rb +8 -1
- data/lib/riffer/core.rb +2 -0
- data/lib/riffer/evals/evaluator.rb +13 -5
- data/lib/riffer/evals/evaluator_runner.rb +12 -6
- data/lib/riffer/evals/judge.rb +13 -4
- data/lib/riffer/evals/result.rb +3 -0
- data/lib/riffer/evals/run_result.rb +3 -0
- data/lib/riffer/evals/scenario_result.rb +11 -3
- data/lib/riffer/file_part.rb +7 -0
- data/lib/riffer/guardrail.rb +14 -9
- data/lib/riffer/guardrails/modification.rb +5 -3
- data/lib/riffer/guardrails/result.rb +15 -7
- data/lib/riffer/guardrails/runner.rb +10 -5
- data/lib/riffer/guardrails/tripwire.rb +6 -4
- data/lib/riffer/helpers/class_name_converter.rb +1 -0
- data/lib/riffer/helpers/dependencies.rb +1 -0
- data/lib/riffer/helpers/validations.rb +1 -0
- data/lib/riffer/messages/assistant.rb +4 -0
- data/lib/riffer/messages/base.rb +3 -0
- data/lib/riffer/messages/converter.rb +5 -2
- data/lib/riffer/messages/system.rb +1 -0
- data/lib/riffer/messages/tool.rb +4 -0
- data/lib/riffer/messages/user.rb +3 -0
- data/lib/riffer/param.rb +7 -3
- data/lib/riffer/params.rb +10 -0
- data/lib/riffer/providers/amazon_bedrock.rb +19 -0
- data/lib/riffer/providers/anthropic.rb +30 -0
- data/lib/riffer/providers/azure_open_ai.rb +41 -0
- data/lib/riffer/providers/base.rb +29 -6
- data/lib/riffer/providers/mock.rb +10 -0
- data/lib/riffer/providers/open_ai.rb +21 -0
- data/lib/riffer/providers/repository.rb +2 -0
- data/lib/riffer/providers.rb +1 -0
- data/lib/riffer/runner/fibers.rb +62 -0
- data/lib/riffer/runner/sequential.rb +3 -2
- data/lib/riffer/runner/threaded.rb +5 -3
- data/lib/riffer/runner.rb +6 -4
- data/lib/riffer/skills/activate_tool.rb +35 -0
- data/lib/riffer/skills/adapter.rb +37 -0
- data/lib/riffer/skills/backend.rb +39 -0
- data/lib/riffer/skills/config.rb +62 -0
- data/lib/riffer/skills/context.rb +81 -0
- data/lib/riffer/skills/filesystem_backend.rb +83 -0
- data/lib/riffer/skills/frontmatter.rb +105 -0
- data/lib/riffer/skills/markdown_adapter.rb +28 -0
- data/lib/riffer/skills/xml_adapter.rb +32 -0
- data/lib/riffer/skills.rb +5 -0
- data/lib/riffer/stream_events/base.rb +2 -0
- data/lib/riffer/stream_events/guardrail_modification.rb +7 -2
- data/lib/riffer/stream_events/guardrail_tripwire.rb +7 -2
- data/lib/riffer/stream_events/interrupt.rb +2 -0
- data/lib/riffer/stream_events/reasoning_delta.rb +2 -0
- data/lib/riffer/stream_events/reasoning_done.rb +2 -0
- data/lib/riffer/stream_events/skill_activation.rb +24 -0
- data/lib/riffer/stream_events/text_delta.rb +2 -0
- data/lib/riffer/stream_events/text_done.rb +2 -0
- data/lib/riffer/stream_events/token_usage_done.rb +2 -0
- data/lib/riffer/stream_events/tool_call_delta.rb +2 -0
- data/lib/riffer/stream_events/tool_call_done.rb +2 -0
- data/lib/riffer/stream_events/web_search_done.rb +2 -0
- data/lib/riffer/stream_events/web_search_status.rb +2 -0
- data/lib/riffer/stream_events.rb +1 -0
- data/lib/riffer/structured_output/result.rb +3 -0
- data/lib/riffer/structured_output.rb +3 -0
- data/lib/riffer/token_usage.rb +5 -0
- data/lib/riffer/tool.rb +11 -0
- data/lib/riffer/tool_runtime/fibers.rb +19 -0
- data/lib/riffer/tool_runtime/inline.rb +1 -0
- data/lib/riffer/tool_runtime/threaded.rb +2 -1
- data/lib/riffer/tool_runtime.rb +14 -9
- data/lib/riffer/tools/response.rb +8 -0
- data/lib/riffer/version.rb +1 -1
- data/lib/riffer.rb +5 -1
- data/sig/generated/riffer/agent/response.rbs +17 -9
- data/sig/generated/riffer/agent.rbs +115 -32
- data/sig/generated/riffer/config.rbs +15 -1
- data/sig/generated/riffer/core.rbs +2 -0
- data/sig/generated/riffer/evals/evaluator.rbs +13 -5
- data/sig/generated/riffer/evals/evaluator_runner.rbs +8 -4
- data/sig/generated/riffer/evals/judge.rbs +13 -4
- data/sig/generated/riffer/evals/result.rbs +3 -0
- data/sig/generated/riffer/evals/run_result.rbs +3 -0
- data/sig/generated/riffer/evals/scenario_result.rbs +8 -2
- data/sig/generated/riffer/file_part.rbs +7 -0
- data/sig/generated/riffer/guardrail.rbs +14 -9
- data/sig/generated/riffer/guardrails/modification.rbs +5 -3
- data/sig/generated/riffer/guardrails/result.rbs +15 -7
- data/sig/generated/riffer/guardrails/runner.rbs +10 -5
- data/sig/generated/riffer/guardrails/tripwire.rbs +6 -4
- data/sig/generated/riffer/helpers/class_name_converter.rbs +1 -0
- data/sig/generated/riffer/helpers/dependencies.rbs +1 -0
- data/sig/generated/riffer/helpers/validations.rbs +1 -0
- data/sig/generated/riffer/messages/assistant.rbs +4 -0
- data/sig/generated/riffer/messages/base.rbs +3 -0
- data/sig/generated/riffer/messages/converter.rbs +5 -2
- data/sig/generated/riffer/messages/system.rbs +1 -0
- data/sig/generated/riffer/messages/tool.rbs +4 -0
- data/sig/generated/riffer/messages/user.rbs +3 -0
- data/sig/generated/riffer/param.rbs +7 -3
- data/sig/generated/riffer/params.rbs +10 -0
- data/sig/generated/riffer/providers/amazon_bedrock.rbs +19 -0
- data/sig/generated/riffer/providers/anthropic.rbs +28 -0
- data/sig/generated/riffer/providers/azure_open_ai.rbs +25 -0
- data/sig/generated/riffer/providers/base.rbs +27 -6
- data/sig/generated/riffer/providers/mock.rbs +10 -0
- data/sig/generated/riffer/providers/open_ai.rbs +21 -0
- data/sig/generated/riffer/providers/repository.rbs +1 -0
- data/sig/generated/riffer/providers.rbs +1 -0
- data/sig/generated/riffer/runner/fibers.rbs +27 -0
- data/sig/generated/riffer/runner/sequential.rbs +3 -2
- data/sig/generated/riffer/runner/threaded.rbs +5 -3
- data/sig/generated/riffer/runner.rbs +6 -4
- data/sig/generated/riffer/skills/activate_tool.rbs +18 -0
- data/sig/generated/riffer/skills/adapter.rbs +32 -0
- data/sig/generated/riffer/skills/backend.rbs +34 -0
- data/sig/generated/riffer/skills/config.rbs +48 -0
- data/sig/generated/riffer/skills/context.rbs +59 -0
- data/sig/generated/riffer/skills/filesystem_backend.rbs +45 -0
- data/sig/generated/riffer/skills/frontmatter.rbs +71 -0
- data/sig/generated/riffer/skills/markdown_adapter.rbs +17 -0
- data/sig/generated/riffer/skills/xml_adapter.rbs +16 -0
- data/sig/generated/riffer/skills.rbs +4 -0
- data/sig/generated/riffer/stream_events/base.rbs +2 -0
- data/sig/generated/riffer/stream_events/guardrail_modification.rbs +7 -2
- data/sig/generated/riffer/stream_events/guardrail_tripwire.rbs +7 -2
- data/sig/generated/riffer/stream_events/interrupt.rbs +2 -0
- data/sig/generated/riffer/stream_events/reasoning_delta.rbs +2 -0
- data/sig/generated/riffer/stream_events/reasoning_done.rbs +2 -0
- data/sig/generated/riffer/stream_events/skill_activation.rbs +18 -0
- data/sig/generated/riffer/stream_events/text_delta.rbs +2 -0
- data/sig/generated/riffer/stream_events/text_done.rbs +2 -0
- data/sig/generated/riffer/stream_events/token_usage_done.rbs +2 -0
- data/sig/generated/riffer/stream_events/tool_call_delta.rbs +2 -0
- data/sig/generated/riffer/stream_events/tool_call_done.rbs +2 -0
- data/sig/generated/riffer/stream_events/web_search_done.rbs +2 -0
- data/sig/generated/riffer/stream_events/web_search_status.rbs +2 -0
- data/sig/generated/riffer/stream_events.rbs +1 -0
- data/sig/generated/riffer/structured_output/result.rbs +3 -0
- data/sig/generated/riffer/structured_output.rbs +3 -0
- data/sig/generated/riffer/token_usage.rbs +5 -0
- data/sig/generated/riffer/tool.rbs +11 -0
- data/sig/generated/riffer/tool_runtime/fibers.rbs +15 -0
- data/sig/generated/riffer/tool_runtime/inline.rbs +1 -0
- data/sig/generated/riffer/tool_runtime/threaded.rbs +2 -1
- data/sig/generated/riffer/tool_runtime.rbs +13 -8
- data/sig/generated/riffer/tools/response.rbs +8 -0
- data/sig/generated/riffer.rbs +3 -0
- metadata +71 -7
- /data/docs_providers/{05_MOCK_PROVIDER.md → 06_MOCK_PROVIDER.md} +0 -0
- /data/docs_providers/{06_CUSTOM_PROVIDERS.md → 07_CUSTOM_PROVIDERS.md} +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: '09506e8a2dfa346e49231fa598f1e899066a5597ddd5b6738758ca49594ca7c2'
|
|
4
|
+
data.tar.gz: 684dc3caf2f6a59d052adb51a5c33bdf0a5542a2a375f188a1bc0a600a7df5ef
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2b1c4119f8afac1367aac6a7d9caddd656a598dab1ad44c921802864e73815d19c3a4f96e554483d9062c9e87864bd870e8af260b9d7f5922331bdcc714ccb52
|
|
7
|
+
data.tar.gz: 5f8387e02a6b2638550e59265980c8de6ce9422b77f905dcc019360e039d59ffb5b8d76310ba90819f7f7b51a5af34588b0de40782255c57215d4bf32ca862c8
|
data/.agents/architecture.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
### Agent (`lib/riffer/agent.rb`)
|
|
6
6
|
|
|
7
|
-
Base class for AI agents. Subclass and use DSL methods `model`, `instructions`, and `
|
|
7
|
+
Base class for AI agents. Subclass and use DSL methods `model`, `instructions`, `structured_output`, and `skills` to configure. Orchestrates message flow, LLM calls, tool execution, structured output parsing, and skill activation via a generate/stream loop.
|
|
8
8
|
|
|
9
9
|
```ruby
|
|
10
10
|
class EchoAgent < Riffer::Agent
|
|
@@ -40,6 +40,22 @@ Adapters for LLM APIs. The base class uses a template-method pattern — `genera
|
|
|
40
40
|
|
|
41
41
|
Providers are registered in `Riffer::Providers::Repository::REPO` with identifiers (e.g., `openai`, `amazon_bedrock`).
|
|
42
42
|
|
|
43
|
+
Each provider declares a preferred skill adapter via `self.skills_adapter` (Markdown for most, XML for Anthropic).
|
|
44
|
+
|
|
45
|
+
### Skills (`lib/riffer/skills/`)
|
|
46
|
+
|
|
47
|
+
Support for the [Agent Skills spec](https://agentskills.io/). Skills are packaged as directories containing `SKILL.md` files with YAML frontmatter. The framework discovers skills through a pluggable backend, injects metadata into the system prompt, and provides a tool (`skill_activate`) for the LLM to load full skill instructions on demand.
|
|
48
|
+
|
|
49
|
+
- `Config` - DSL configuration object (`backend`, `adapter`, `activate`)
|
|
50
|
+
- `Backend` - base class interface (`list_skills`, `read_skill`)
|
|
51
|
+
- `FilesystemBackend` - built-in filesystem scanner
|
|
52
|
+
- `Frontmatter` - parsed YAML frontmatter value object with `.parse(raw)` class method
|
|
53
|
+
- `Context` - coordinates discovery, activation, caching, and prompt rendering for a generation cycle
|
|
54
|
+
- `Adapter` - base class for skill adapters (`render_catalog`, `activate_tool`)
|
|
55
|
+
- `MarkdownAdapter` - default Markdown skill adapter
|
|
56
|
+
- `XmlAdapter` - XML skill adapter for Anthropic/Claude
|
|
57
|
+
- `ActivateTool` - default tool the LLM calls to activate a skill
|
|
58
|
+
|
|
43
59
|
### Messages (`lib/riffer/messages/`)
|
|
44
60
|
|
|
45
61
|
Typed message objects that extend `Riffer::Messages::Base`:
|
|
@@ -65,6 +81,10 @@ Structured events for streaming responses:
|
|
|
65
81
|
- `WebSearchDone` - web search completion with query and sources
|
|
66
82
|
- `Interrupt` - callback interrupted the agent loop
|
|
67
83
|
|
|
84
|
+
### Per-Call State Reset
|
|
85
|
+
|
|
86
|
+
Each call to `generate` or `stream` resets `context`, tools, tool runtime, model, skills state, and the interrupted flag via `prepare_run`. Only the message history and cumulative `token_usage` persist across calls. This means `context:` must be passed on every call.
|
|
87
|
+
|
|
68
88
|
### Stopping the Loop Early
|
|
69
89
|
|
|
70
90
|
Two mechanisms can stop the agent loop before the LLM finishes naturally:
|
|
@@ -75,10 +95,41 @@ Two mechanisms can stop the agent loop before the LLM finishes naturally:
|
|
|
75
95
|
|
|
76
96
|
### Resuming After an Interrupt
|
|
77
97
|
|
|
78
|
-
|
|
98
|
+
Two resume paths:
|
|
99
|
+
|
|
100
|
+
- **In-memory** — call `generate` or `stream` again with a string on the same agent instance. The message history is preserved and the new user message is appended.
|
|
101
|
+
- **Cross-process** — pass persisted messages as an array to a new agent instance. Array input uses messages as-is (no system message prepend). Passing an array to an agent that already has messages raises `Riffer::ArgumentError`.
|
|
102
|
+
|
|
103
|
+
```ruby
|
|
104
|
+
agent.generate('Continue') # in-memory resume
|
|
105
|
+
MyAgent.new.stream(persisted_messages) # cross-process resume
|
|
106
|
+
```
|
|
79
107
|
|
|
80
108
|
On resume, `execute_pending_tool_calls` detects tool calls from the last assistant message that lack corresponding tool result messages and executes them before entering the LLM loop. This handles the case where an interrupt fired mid-way through tool execution.
|
|
81
109
|
|
|
110
|
+
### Runner (`lib/riffer/runner.rb`)
|
|
111
|
+
|
|
112
|
+
Concurrency primitive for batch execution. Subclasses implement `#map(items, context: nil, &block)` to control how items are processed. The `context` keyword carries the agent's context hash, enabling runners that need it for job serialization or routing.
|
|
113
|
+
|
|
114
|
+
Built-in runners:
|
|
115
|
+
- `Sequential` — processes items in the current thread via `Array#map`
|
|
116
|
+
- `Threaded` — processes items concurrently using a thread pool with configurable `max_concurrency`
|
|
117
|
+
|
|
118
|
+
```ruby
|
|
119
|
+
runner = Riffer::Runner::Threaded.new(max_concurrency: 3)
|
|
120
|
+
runner.map(items, context: ctx) { |item| process(item) }
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### ToolRuntime (`lib/riffer/tool_runtime.rb`)
|
|
124
|
+
|
|
125
|
+
Composes with a Runner to execute tool calls. Provides `#execute` as the public entry point and `#around_tool_call` as a hook for instrumentation. Passes the agent context through to the runner.
|
|
126
|
+
|
|
127
|
+
Built-in runtimes:
|
|
128
|
+
- `Inline` — uses `Runner::Sequential` (default)
|
|
129
|
+
- `Threaded` — uses `Runner::Threaded`
|
|
130
|
+
|
|
131
|
+
Context flow: `Agent#execute_tool_calls` → `ToolRuntime#execute(tool_calls, tools:, context:)` → `Runner#map(tool_calls, context:) { dispatch }` → `Tool#call(context:, **args)`
|
|
132
|
+
|
|
82
133
|
## Key Patterns
|
|
83
134
|
|
|
84
135
|
- Model config accepts a `provider/model` string (e.g., `openai/gpt-4`) or a Proc/lambda that returns one
|
|
@@ -105,6 +156,17 @@ lib/
|
|
|
105
156
|
params.rb # Parameter collection with DSL and validation
|
|
106
157
|
structured_output.rb # Structured output schema wrapper
|
|
107
158
|
stream_events.rb # Stream events namespace/module
|
|
159
|
+
skills.rb # Skills namespace/module
|
|
160
|
+
skills/
|
|
161
|
+
config.rb # DSL configuration object
|
|
162
|
+
adapter.rb # Adapter base class (render_catalog, activate_tool)
|
|
163
|
+
markdown_adapter.rb # Default Markdown skill adapter
|
|
164
|
+
xml_adapter.rb # XML skill adapter for Anthropic/Claude
|
|
165
|
+
backend.rb # Backend base class (interface)
|
|
166
|
+
filesystem_backend.rb # Built-in filesystem backend
|
|
167
|
+
frontmatter.rb # Parsed YAML frontmatter value object with .parse
|
|
168
|
+
context.rb # Skills context for a generation cycle
|
|
169
|
+
activate_tool.rb # Default skill_activate tool
|
|
108
170
|
structured_output/
|
|
109
171
|
result.rb # Parse/validation result object
|
|
110
172
|
helpers/
|
data/.agents/rdoc.md
CHANGED
|
@@ -4,18 +4,30 @@ Use RDoc prose comments for public API descriptions and RBS inline annotations f
|
|
|
4
4
|
|
|
5
5
|
## Parameters and Return Types
|
|
6
6
|
|
|
7
|
-
Describe parameters
|
|
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
8
|
|
|
9
9
|
```ruby
|
|
10
10
|
# Creates a new agent.
|
|
11
11
|
#
|
|
12
|
-
#
|
|
13
|
-
#
|
|
12
|
+
# [name] the agent name.
|
|
13
|
+
# [options] optional configuration.
|
|
14
14
|
#
|
|
15
|
+
#--
|
|
15
16
|
#: (String, ?options: Hash[Symbol, untyped]) -> void
|
|
16
17
|
def initialize(name, options: {})
|
|
17
18
|
```
|
|
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
|
+
|
|
19
31
|
## Attributes and Constants
|
|
20
32
|
|
|
21
33
|
Use `#:` inline syntax (on the same line) for attribute and constant types:
|
|
@@ -37,7 +49,7 @@ Document with prose:
|
|
|
37
49
|
|
|
38
50
|
## Examples
|
|
39
51
|
|
|
40
|
-
Include usage examples as indented code blocks:
|
|
52
|
+
Include usage examples as indented code blocks (2 extra spaces of indent):
|
|
41
53
|
|
|
42
54
|
```ruby
|
|
43
55
|
# Creates a new agent.
|
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.4.8
|
|
1
|
+
3.4.8
|
data/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,35 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.20.0](https://github.com/janeapp/riffer/compare/riffer/v0.19.0...riffer/v0.20.0) (2026-03-26)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* add fibers tool runtime using async gem ([#178](https://github.com/janeapp/riffer/issues/178)) ([67fd344](https://github.com/janeapp/riffer/commit/67fd34493126559b99a00cc3402a6adabefc14ea))
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Bug Fixes
|
|
17
|
+
|
|
18
|
+
* correct RDoc formatting for docs.riffer.ai ([#182](https://github.com/janeapp/riffer/issues/182)) ([2f2fbc9](https://github.com/janeapp/riffer/commit/2f2fbc997281ef4a546a58e44233e325a25c41d5))
|
|
19
|
+
|
|
20
|
+
## [0.19.0](https://github.com/janeapp/riffer/compare/riffer/v0.18.0...riffer/v0.19.0) (2026-03-25)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### Features
|
|
24
|
+
|
|
25
|
+
* Add Azure OpenAI provider ([#167](https://github.com/janeapp/riffer/issues/167)) ([5d34fcd](https://github.com/janeapp/riffer/commit/5d34fcd4a98a6bcfa768c50fea7c25959eca5f1d))
|
|
26
|
+
* expose message history in eval results ([#171](https://github.com/janeapp/riffer/issues/171)) ([c8b1aec](https://github.com/janeapp/riffer/commit/c8b1aeceb40a173c70d4be445fb82bba10113b87))
|
|
27
|
+
* provide agent context to runners ([#181](https://github.com/janeapp/riffer/issues/181)) ([23c9282](https://github.com/janeapp/riffer/commit/23c9282d4f2076d1ff6185f99bcf855f158ccb0d))
|
|
28
|
+
|
|
29
|
+
## [0.18.0](https://github.com/janeapp/riffer/compare/riffer/v0.17.0...riffer/v0.18.0) (2026-03-13)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
### Features
|
|
33
|
+
|
|
34
|
+
* add support for agent skills ([#151](https://github.com/janeapp/riffer/issues/151)) ([8847d54](https://github.com/janeapp/riffer/commit/8847d54dede875f207d0e0b28bb64039d3c2e69f))
|
|
35
|
+
* Unify generate/stream API with multi-turn support, remove resume methods ([#165](https://github.com/janeapp/riffer/issues/165)) ([58826df](https://github.com/janeapp/riffer/commit/58826df27806bb10afe1c7ad94322cc643d049f9))
|
|
36
|
+
|
|
8
37
|
## [0.17.0](https://github.com/janeapp/riffer/compare/riffer/v0.16.1...riffer/v0.17.0) (2026-03-06)
|
|
9
38
|
|
|
10
39
|
|
data/README.md
CHANGED
data/Rakefile
CHANGED
|
@@ -17,8 +17,7 @@ RDoc::Task.new do |rdoc|
|
|
|
17
17
|
rdoc.rdoc_files.include("README.md", "CHANGELOG.md", "LICENSE.txt", "docs/**/*.md", "docs_providers/**/*.md")
|
|
18
18
|
rdoc.rdoc_files.include("lib/**/*.rb")
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
rdoc.options << "--charset" << "utf-8" << "--markup" << "markdown"
|
|
20
|
+
rdoc.options << "--charset" << "utf-8"
|
|
22
21
|
end
|
|
23
22
|
|
|
24
23
|
task docs: :rdoc
|
data/docs/01_OVERVIEW.md
CHANGED
|
@@ -10,7 +10,7 @@ The Agent is the central orchestrator for AI interactions. It manages messages,
|
|
|
10
10
|
|
|
11
11
|
```ruby
|
|
12
12
|
class MyAgent < Riffer::Agent
|
|
13
|
-
model 'openai/gpt-
|
|
13
|
+
model 'openai/gpt-5-mini'
|
|
14
14
|
instructions 'You are a helpful assistant.'
|
|
15
15
|
end
|
|
16
16
|
```
|
|
@@ -43,7 +43,7 @@ Agents can return structured JSON responses that conform to a schema. The respon
|
|
|
43
43
|
|
|
44
44
|
```ruby
|
|
45
45
|
class SentimentAgent < Riffer::Agent
|
|
46
|
-
model 'openai/gpt-
|
|
46
|
+
model 'openai/gpt-5-mini'
|
|
47
47
|
structured_output do
|
|
48
48
|
required :sentiment, String
|
|
49
49
|
required :score, Float
|
data/docs/02_GETTING_STARTED.md
CHANGED
|
@@ -68,7 +68,7 @@ Riffer.configure do |config|
|
|
|
68
68
|
end
|
|
69
69
|
|
|
70
70
|
class GreetingAgent < Riffer::Agent
|
|
71
|
-
model 'openai/gpt-
|
|
71
|
+
model 'openai/gpt-5-mini'
|
|
72
72
|
instructions 'You are a friendly assistant. Greet the user warmly.'
|
|
73
73
|
end
|
|
74
74
|
|
|
@@ -109,7 +109,7 @@ class TimeTool < Riffer::Tool
|
|
|
109
109
|
end
|
|
110
110
|
|
|
111
111
|
class TimeAgent < Riffer::Agent
|
|
112
|
-
model 'openai/gpt-
|
|
112
|
+
model 'openai/gpt-5-mini'
|
|
113
113
|
instructions 'You can tell the user the current time.'
|
|
114
114
|
uses_tools [TimeTool]
|
|
115
115
|
end
|