raif 1.2.2 → 1.4.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/README.md +6 -5
- data/app/assets/builds/raif.css +4 -1
- data/app/assets/builds/raif_admin.css +13 -1
- data/app/assets/javascript/raif/controllers/conversations_controller.js +1 -1
- data/app/assets/stylesheets/raif/admin/conversation.scss +16 -0
- data/app/assets/stylesheets/raif/conversations.scss +3 -0
- data/app/assets/stylesheets/raif.scss +2 -1
- data/app/controllers/raif/admin/application_controller.rb +16 -0
- data/app/controllers/raif/admin/configs_controller.rb +94 -0
- data/app/controllers/raif/admin/model_completions_controller.rb +18 -1
- data/app/controllers/raif/admin/model_tool_invocations_controller.rb +7 -1
- data/app/controllers/raif/admin/stats/model_tool_invocations_controller.rb +21 -0
- data/app/controllers/raif/admin/stats/tasks_controller.rb +15 -6
- data/app/controllers/raif/admin/stats_controller.rb +32 -3
- data/app/controllers/raif/conversation_entries_controller.rb +1 -0
- data/app/controllers/raif/conversations_controller.rb +10 -2
- data/app/jobs/raif/conversation_entry_job.rb +8 -6
- data/app/models/raif/admin/task_stat.rb +7 -0
- data/app/models/raif/agent.rb +63 -2
- data/app/models/raif/agents/native_tool_calling_agent.rb +101 -56
- data/app/models/raif/application_record.rb +18 -0
- data/app/models/raif/concerns/agent_inference_stats.rb +35 -0
- data/app/models/raif/concerns/has_llm.rb +1 -1
- data/app/models/raif/concerns/json_schema_definition.rb +40 -5
- data/app/models/raif/concerns/llms/anthropic/message_formatting.rb +28 -0
- data/app/models/raif/concerns/llms/anthropic/response_tool_calls.rb +24 -0
- data/app/models/raif/concerns/llms/anthropic/tool_formatting.rb +4 -0
- data/app/models/raif/concerns/llms/bedrock/message_formatting.rb +36 -0
- data/app/models/raif/concerns/llms/bedrock/response_tool_calls.rb +26 -0
- data/app/models/raif/concerns/llms/bedrock/tool_formatting.rb +4 -0
- data/app/models/raif/concerns/llms/google/message_formatting.rb +109 -0
- data/app/models/raif/concerns/llms/google/response_tool_calls.rb +32 -0
- data/app/models/raif/concerns/llms/google/tool_formatting.rb +72 -0
- data/app/models/raif/concerns/llms/message_formatting.rb +11 -5
- data/app/models/raif/concerns/llms/open_ai/json_schema_validation.rb +3 -3
- data/app/models/raif/concerns/llms/open_ai_completions/message_formatting.rb +22 -0
- data/app/models/raif/concerns/llms/open_ai_completions/response_tool_calls.rb +22 -0
- data/app/models/raif/concerns/llms/open_ai_completions/tool_formatting.rb +4 -0
- data/app/models/raif/concerns/llms/open_ai_responses/message_formatting.rb +17 -0
- data/app/models/raif/concerns/llms/open_ai_responses/response_tool_calls.rb +26 -0
- data/app/models/raif/concerns/llms/open_ai_responses/tool_formatting.rb +4 -0
- data/app/models/raif/concerns/run_with.rb +127 -0
- data/app/models/raif/conversation.rb +96 -9
- data/app/models/raif/conversation_entry.rb +37 -8
- data/app/models/raif/embedding_model.rb +2 -1
- data/app/models/raif/embedding_models/open_ai.rb +1 -1
- data/app/models/raif/llm.rb +28 -3
- data/app/models/raif/llms/anthropic.rb +7 -19
- data/app/models/raif/llms/bedrock.rb +6 -20
- data/app/models/raif/llms/google.rb +140 -0
- data/app/models/raif/llms/open_ai_base.rb +19 -5
- data/app/models/raif/llms/open_ai_completions.rb +6 -11
- data/app/models/raif/llms/open_ai_responses.rb +6 -16
- data/app/models/raif/llms/open_router.rb +10 -14
- data/app/models/raif/model_completion.rb +61 -0
- data/app/models/raif/model_tool.rb +10 -2
- data/app/models/raif/model_tool_invocation.rb +38 -6
- data/app/models/raif/model_tools/agent_final_answer.rb +2 -7
- data/app/models/raif/model_tools/provider_managed/code_execution.rb +4 -0
- data/app/models/raif/model_tools/provider_managed/image_generation.rb +4 -0
- data/app/models/raif/model_tools/provider_managed/web_search.rb +4 -0
- data/app/models/raif/streaming_responses/google.rb +71 -0
- data/app/models/raif/task.rb +74 -18
- data/app/models/raif/user_tool_invocation.rb +19 -0
- data/app/views/layouts/raif/admin.html.erb +12 -1
- data/app/views/raif/admin/agents/_agent.html.erb +8 -0
- data/app/views/raif/admin/agents/_conversation_message.html.erb +28 -6
- data/app/views/raif/admin/agents/index.html.erb +2 -0
- data/app/views/raif/admin/agents/show.html.erb +46 -1
- data/app/views/raif/admin/configs/show.html.erb +117 -0
- data/app/views/raif/admin/conversations/_conversation_entry.html.erb +29 -34
- data/app/views/raif/admin/conversations/show.html.erb +2 -0
- data/app/views/raif/admin/model_completions/_model_completion.html.erb +9 -0
- data/app/views/raif/admin/model_completions/index.html.erb +26 -0
- data/app/views/raif/admin/model_completions/show.html.erb +124 -61
- data/app/views/raif/admin/model_tool_invocations/index.html.erb +22 -1
- data/app/views/raif/admin/model_tools/_list.html.erb +16 -0
- data/app/views/raif/admin/model_tools/_model_tool.html.erb +36 -0
- data/app/views/raif/admin/stats/_stats_tile.html.erb +34 -0
- data/app/views/raif/admin/stats/index.html.erb +71 -88
- data/app/views/raif/admin/stats/model_tool_invocations/index.html.erb +43 -0
- data/app/views/raif/admin/stats/tasks/index.html.erb +20 -6
- data/app/views/raif/admin/tasks/index.html.erb +6 -1
- data/app/views/raif/admin/tasks/show.html.erb +36 -3
- data/app/views/raif/conversation_entries/_form.html.erb +4 -1
- data/app/views/raif/conversations/_conversation.html.erb +10 -0
- data/app/views/raif/conversations/_entry_processed.turbo_stream.erb +12 -0
- data/app/views/raif/conversations/_full_conversation.html.erb +3 -6
- data/app/views/raif/conversations/_initial_chat_message.html.erb +5 -0
- data/app/views/raif/conversations/index.html.erb +23 -0
- data/config/locales/admin.en.yml +33 -1
- data/config/locales/en.yml +41 -4
- data/config/routes.rb +2 -0
- data/db/migrate/20250804013843_add_task_run_args_to_raif_tasks.rb +13 -0
- data/db/migrate/20250811171150_make_raif_task_creator_optional.rb +8 -0
- data/db/migrate/20250904194456_add_generating_entry_response_to_raif_conversations.rb +7 -0
- data/db/migrate/20250911125234_add_source_to_raif_tasks.rb +7 -0
- data/db/migrate/20251020005853_add_source_to_raif_agents.rb +7 -0
- data/db/migrate/20251020011346_rename_task_run_args_to_run_with.rb +7 -0
- data/db/migrate/20251020011405_add_run_with_to_raif_agents.rb +13 -0
- data/db/migrate/20251024160119_add_llm_messages_max_length_to_raif_conversations.rb +14 -0
- data/db/migrate/20251124185033_add_provider_tool_call_id_to_raif_model_tool_invocations.rb +7 -0
- data/db/migrate/20251128202941_add_tool_choice_to_raif_model_completions.rb +7 -0
- data/db/migrate/20260118144846_add_source_to_raif_conversations.rb +7 -0
- data/db/migrate/20260119000000_add_failure_tracking_to_raif_model_completions.rb +10 -0
- data/db/migrate/20260119000001_add_completed_at_to_raif_model_completions.rb +8 -0
- data/db/migrate/20260119000002_add_started_at_to_raif_model_completions.rb +8 -0
- data/exe/raif +7 -0
- data/lib/generators/raif/agent/agent_generator.rb +22 -7
- data/lib/generators/raif/agent/templates/agent.rb.tt +20 -24
- data/lib/generators/raif/agent/templates/agent_eval_set.rb.tt +48 -0
- data/lib/generators/raif/agent/templates/application_agent.rb.tt +1 -3
- data/lib/generators/raif/base_generator.rb +19 -0
- data/lib/generators/raif/conversation/conversation_generator.rb +21 -2
- data/lib/generators/raif/conversation/templates/application_conversation.rb.tt +0 -2
- data/lib/generators/raif/conversation/templates/conversation.rb.tt +34 -32
- data/lib/generators/raif/conversation/templates/conversation_eval_set.rb.tt +70 -0
- data/lib/generators/raif/eval_set/eval_set_generator.rb +28 -0
- data/lib/generators/raif/eval_set/templates/eval_set.rb.tt +21 -0
- data/lib/generators/raif/evals/setup/setup_generator.rb +47 -0
- data/lib/generators/raif/install/install_generator.rb +15 -0
- data/lib/generators/raif/install/templates/initializer.rb +89 -10
- data/lib/generators/raif/model_tool/model_tool_generator.rb +5 -5
- data/lib/generators/raif/model_tool/templates/model_tool.rb.tt +78 -78
- data/lib/generators/raif/model_tool/templates/model_tool_invocation_partial.html.erb.tt +1 -1
- data/lib/generators/raif/task/task_generator.rb +22 -3
- data/lib/generators/raif/task/templates/application_task.rb.tt +0 -2
- data/lib/generators/raif/task/templates/task.rb.tt +55 -59
- data/lib/generators/raif/task/templates/task_eval_set.rb.tt +54 -0
- data/lib/raif/cli/base.rb +39 -0
- data/lib/raif/cli/evals.rb +47 -0
- data/lib/raif/cli/evals_setup.rb +27 -0
- data/lib/raif/cli.rb +67 -0
- data/lib/raif/configuration.rb +57 -8
- data/lib/raif/engine.rb +8 -0
- data/lib/raif/errors/instance_dependent_schema_error.rb +8 -0
- data/lib/raif/errors/streaming_error.rb +6 -3
- data/lib/raif/errors.rb +1 -0
- data/lib/raif/evals/eval.rb +30 -0
- data/lib/raif/evals/eval_set.rb +111 -0
- data/lib/raif/evals/eval_sets/expectations.rb +53 -0
- data/lib/raif/evals/eval_sets/llm_judge_expectations.rb +255 -0
- data/lib/raif/evals/expectation_result.rb +39 -0
- data/lib/raif/evals/llm_judge.rb +32 -0
- data/lib/raif/evals/llm_judges/binary.rb +94 -0
- data/lib/raif/evals/llm_judges/comparative.rb +89 -0
- data/lib/raif/evals/llm_judges/scored.rb +63 -0
- data/lib/raif/evals/llm_judges/summarization.rb +166 -0
- data/lib/raif/evals/run.rb +202 -0
- data/lib/raif/evals/scoring_rubric.rb +174 -0
- data/lib/raif/evals.rb +26 -0
- data/lib/raif/json_schema_builder.rb +14 -0
- data/lib/raif/llm_registry.rb +218 -15
- data/lib/raif/messages.rb +180 -0
- data/lib/raif/migration_checker.rb +3 -3
- data/lib/raif/utils/colors.rb +23 -0
- data/lib/raif/utils.rb +1 -0
- data/lib/raif/version.rb +1 -1
- data/lib/raif.rb +13 -0
- data/lib/tasks/annotate_rb.rake +10 -0
- data/spec/support/current_temperature_test_tool.rb +34 -0
- data/spec/support/rspec_helpers.rb +8 -8
- data/spec/support/test_conversation.rb +1 -1
- metadata +77 -10
- data/app/models/raif/agents/re_act_agent.rb +0 -127
- data/app/models/raif/agents/re_act_step.rb +0 -33
metadata
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: raif
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ben Roesch
|
|
8
8
|
- Brian Leslie
|
|
9
|
-
bindir:
|
|
9
|
+
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
11
|
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
@@ -84,16 +84,16 @@ dependencies:
|
|
|
84
84
|
name: pagy
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
86
86
|
requirements:
|
|
87
|
-
- - "
|
|
87
|
+
- - "<"
|
|
88
88
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: '0'
|
|
89
|
+
version: '10.0'
|
|
90
90
|
type: :runtime
|
|
91
91
|
prerelease: false
|
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
93
|
requirements:
|
|
94
|
-
- - "
|
|
94
|
+
- - "<"
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: '0'
|
|
96
|
+
version: '10.0'
|
|
97
97
|
- !ruby/object:Gem::Dependency
|
|
98
98
|
name: rails
|
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -142,7 +142,8 @@ description: Raif (Ruby AI Framework) is a Rails engine that helps you add AI-po
|
|
|
142
142
|
email:
|
|
143
143
|
- ben@cultivatelabs.com
|
|
144
144
|
- brian@cultivatelabs.com
|
|
145
|
-
executables:
|
|
145
|
+
executables:
|
|
146
|
+
- raif
|
|
146
147
|
extensions: []
|
|
147
148
|
extra_rdoc_files: []
|
|
148
149
|
files:
|
|
@@ -159,13 +160,16 @@ files:
|
|
|
159
160
|
- app/assets/stylesheets/raif.scss
|
|
160
161
|
- app/assets/stylesheets/raif/admin/conversation.scss
|
|
161
162
|
- app/assets/stylesheets/raif/admin/stats.scss
|
|
163
|
+
- app/assets/stylesheets/raif/conversations.scss
|
|
162
164
|
- app/assets/stylesheets/raif/loader.scss
|
|
163
165
|
- app/assets/stylesheets/raif_admin.scss
|
|
164
166
|
- app/controllers/raif/admin/agents_controller.rb
|
|
165
167
|
- app/controllers/raif/admin/application_controller.rb
|
|
168
|
+
- app/controllers/raif/admin/configs_controller.rb
|
|
166
169
|
- app/controllers/raif/admin/conversations_controller.rb
|
|
167
170
|
- app/controllers/raif/admin/model_completions_controller.rb
|
|
168
171
|
- app/controllers/raif/admin/model_tool_invocations_controller.rb
|
|
172
|
+
- app/controllers/raif/admin/stats/model_tool_invocations_controller.rb
|
|
169
173
|
- app/controllers/raif/admin/stats/tasks_controller.rb
|
|
170
174
|
- app/controllers/raif/admin/stats_controller.rb
|
|
171
175
|
- app/controllers/raif/admin/tasks_controller.rb
|
|
@@ -176,11 +180,11 @@ files:
|
|
|
176
180
|
- app/helpers/raif/shared/conversations_helper.rb
|
|
177
181
|
- app/jobs/raif/application_job.rb
|
|
178
182
|
- app/jobs/raif/conversation_entry_job.rb
|
|
183
|
+
- app/models/raif/admin/task_stat.rb
|
|
179
184
|
- app/models/raif/agent.rb
|
|
180
185
|
- app/models/raif/agents/native_tool_calling_agent.rb
|
|
181
|
-
- app/models/raif/agents/re_act_agent.rb
|
|
182
|
-
- app/models/raif/agents/re_act_step.rb
|
|
183
186
|
- app/models/raif/application_record.rb
|
|
187
|
+
- app/models/raif/concerns/agent_inference_stats.rb
|
|
184
188
|
- app/models/raif/concerns/boolean_timestamp.rb
|
|
185
189
|
- app/models/raif/concerns/has_available_model_tools.rb
|
|
186
190
|
- app/models/raif/concerns/has_llm.rb
|
|
@@ -190,15 +194,23 @@ files:
|
|
|
190
194
|
- app/models/raif/concerns/llm_response_parsing.rb
|
|
191
195
|
- app/models/raif/concerns/llm_temperature.rb
|
|
192
196
|
- app/models/raif/concerns/llms/anthropic/message_formatting.rb
|
|
197
|
+
- app/models/raif/concerns/llms/anthropic/response_tool_calls.rb
|
|
193
198
|
- app/models/raif/concerns/llms/anthropic/tool_formatting.rb
|
|
194
199
|
- app/models/raif/concerns/llms/bedrock/message_formatting.rb
|
|
200
|
+
- app/models/raif/concerns/llms/bedrock/response_tool_calls.rb
|
|
195
201
|
- app/models/raif/concerns/llms/bedrock/tool_formatting.rb
|
|
202
|
+
- app/models/raif/concerns/llms/google/message_formatting.rb
|
|
203
|
+
- app/models/raif/concerns/llms/google/response_tool_calls.rb
|
|
204
|
+
- app/models/raif/concerns/llms/google/tool_formatting.rb
|
|
196
205
|
- app/models/raif/concerns/llms/message_formatting.rb
|
|
197
206
|
- app/models/raif/concerns/llms/open_ai/json_schema_validation.rb
|
|
198
207
|
- app/models/raif/concerns/llms/open_ai_completions/message_formatting.rb
|
|
208
|
+
- app/models/raif/concerns/llms/open_ai_completions/response_tool_calls.rb
|
|
199
209
|
- app/models/raif/concerns/llms/open_ai_completions/tool_formatting.rb
|
|
200
210
|
- app/models/raif/concerns/llms/open_ai_responses/message_formatting.rb
|
|
211
|
+
- app/models/raif/concerns/llms/open_ai_responses/response_tool_calls.rb
|
|
201
212
|
- app/models/raif/concerns/llms/open_ai_responses/tool_formatting.rb
|
|
213
|
+
- app/models/raif/concerns/run_with.rb
|
|
202
214
|
- app/models/raif/conversation.rb
|
|
203
215
|
- app/models/raif/conversation_entry.rb
|
|
204
216
|
- app/models/raif/embedding_model.rb
|
|
@@ -207,6 +219,7 @@ files:
|
|
|
207
219
|
- app/models/raif/llm.rb
|
|
208
220
|
- app/models/raif/llms/anthropic.rb
|
|
209
221
|
- app/models/raif/llms/bedrock.rb
|
|
222
|
+
- app/models/raif/llms/google.rb
|
|
210
223
|
- app/models/raif/llms/open_ai_base.rb
|
|
211
224
|
- app/models/raif/llms/open_ai_completions.rb
|
|
212
225
|
- app/models/raif/llms/open_ai_responses.rb
|
|
@@ -225,6 +238,7 @@ files:
|
|
|
225
238
|
- app/models/raif/model_tools/wikipedia_search.rb
|
|
226
239
|
- app/models/raif/streaming_responses/anthropic.rb
|
|
227
240
|
- app/models/raif/streaming_responses/bedrock.rb
|
|
241
|
+
- app/models/raif/streaming_responses/google.rb
|
|
228
242
|
- app/models/raif/streaming_responses/open_ai_completions.rb
|
|
229
243
|
- app/models/raif/streaming_responses/open_ai_responses.rb
|
|
230
244
|
- app/models/raif/task.rb
|
|
@@ -234,6 +248,7 @@ files:
|
|
|
234
248
|
- app/views/raif/admin/agents/_conversation_message.html.erb
|
|
235
249
|
- app/views/raif/admin/agents/index.html.erb
|
|
236
250
|
- app/views/raif/admin/agents/show.html.erb
|
|
251
|
+
- app/views/raif/admin/configs/show.html.erb
|
|
237
252
|
- app/views/raif/admin/conversations/_conversation.html.erb
|
|
238
253
|
- app/views/raif/admin/conversations/_conversation_entry.html.erb
|
|
239
254
|
- app/views/raif/admin/conversations/index.html.erb
|
|
@@ -244,7 +259,11 @@ files:
|
|
|
244
259
|
- app/views/raif/admin/model_tool_invocations/_model_tool_invocation.html.erb
|
|
245
260
|
- app/views/raif/admin/model_tool_invocations/index.html.erb
|
|
246
261
|
- app/views/raif/admin/model_tool_invocations/show.html.erb
|
|
262
|
+
- app/views/raif/admin/model_tools/_list.html.erb
|
|
263
|
+
- app/views/raif/admin/model_tools/_model_tool.html.erb
|
|
264
|
+
- app/views/raif/admin/stats/_stats_tile.html.erb
|
|
247
265
|
- app/views/raif/admin/stats/index.html.erb
|
|
266
|
+
- app/views/raif/admin/stats/model_tool_invocations/index.html.erb
|
|
248
267
|
- app/views/raif/admin/stats/tasks/index.html.erb
|
|
249
268
|
- app/views/raif/admin/tasks/_task.html.erb
|
|
250
269
|
- app/views/raif/admin/tasks/index.html.erb
|
|
@@ -260,7 +279,11 @@ files:
|
|
|
260
279
|
- app/views/raif/conversation_entries/create.turbo_stream.erb
|
|
261
280
|
- app/views/raif/conversation_entries/new.turbo_stream.erb
|
|
262
281
|
- app/views/raif/conversations/_available_user_tools.html.erb
|
|
282
|
+
- app/views/raif/conversations/_conversation.html.erb
|
|
283
|
+
- app/views/raif/conversations/_entry_processed.turbo_stream.erb
|
|
263
284
|
- app/views/raif/conversations/_full_conversation.html.erb
|
|
285
|
+
- app/views/raif/conversations/_initial_chat_message.html.erb
|
|
286
|
+
- app/views/raif/conversations/index.html.erb
|
|
264
287
|
- app/views/raif/conversations/show.html.erb
|
|
265
288
|
- config/i18n-tasks.yml
|
|
266
289
|
- config/importmap.rb
|
|
@@ -277,12 +300,33 @@ files:
|
|
|
277
300
|
- db/migrate/20250527213016_add_response_id_and_response_array_to_model_completions.rb
|
|
278
301
|
- db/migrate/20250603140622_add_citations_to_raif_model_completions.rb
|
|
279
302
|
- db/migrate/20250603202013_add_stream_response_to_raif_model_completions.rb
|
|
303
|
+
- db/migrate/20250804013843_add_task_run_args_to_raif_tasks.rb
|
|
304
|
+
- db/migrate/20250811171150_make_raif_task_creator_optional.rb
|
|
305
|
+
- db/migrate/20250904194456_add_generating_entry_response_to_raif_conversations.rb
|
|
306
|
+
- db/migrate/20250911125234_add_source_to_raif_tasks.rb
|
|
307
|
+
- db/migrate/20251020005853_add_source_to_raif_agents.rb
|
|
308
|
+
- db/migrate/20251020011346_rename_task_run_args_to_run_with.rb
|
|
309
|
+
- db/migrate/20251020011405_add_run_with_to_raif_agents.rb
|
|
310
|
+
- db/migrate/20251024160119_add_llm_messages_max_length_to_raif_conversations.rb
|
|
311
|
+
- db/migrate/20251124185033_add_provider_tool_call_id_to_raif_model_tool_invocations.rb
|
|
312
|
+
- db/migrate/20251128202941_add_tool_choice_to_raif_model_completions.rb
|
|
313
|
+
- db/migrate/20260118144846_add_source_to_raif_conversations.rb
|
|
314
|
+
- db/migrate/20260119000000_add_failure_tracking_to_raif_model_completions.rb
|
|
315
|
+
- db/migrate/20260119000001_add_completed_at_to_raif_model_completions.rb
|
|
316
|
+
- db/migrate/20260119000002_add_started_at_to_raif_model_completions.rb
|
|
317
|
+
- exe/raif
|
|
280
318
|
- lib/generators/raif/agent/agent_generator.rb
|
|
281
319
|
- lib/generators/raif/agent/templates/agent.rb.tt
|
|
320
|
+
- lib/generators/raif/agent/templates/agent_eval_set.rb.tt
|
|
282
321
|
- lib/generators/raif/agent/templates/application_agent.rb.tt
|
|
322
|
+
- lib/generators/raif/base_generator.rb
|
|
283
323
|
- lib/generators/raif/conversation/conversation_generator.rb
|
|
284
324
|
- lib/generators/raif/conversation/templates/application_conversation.rb.tt
|
|
285
325
|
- lib/generators/raif/conversation/templates/conversation.rb.tt
|
|
326
|
+
- lib/generators/raif/conversation/templates/conversation_eval_set.rb.tt
|
|
327
|
+
- lib/generators/raif/eval_set/eval_set_generator.rb
|
|
328
|
+
- lib/generators/raif/eval_set/templates/eval_set.rb.tt
|
|
329
|
+
- lib/generators/raif/evals/setup/setup_generator.rb
|
|
286
330
|
- lib/generators/raif/install/install_generator.rb
|
|
287
331
|
- lib/generators/raif/install/templates/initializer.rb
|
|
288
332
|
- lib/generators/raif/model_tool/model_tool_generator.rb
|
|
@@ -291,13 +335,19 @@ files:
|
|
|
291
335
|
- lib/generators/raif/task/task_generator.rb
|
|
292
336
|
- lib/generators/raif/task/templates/application_task.rb.tt
|
|
293
337
|
- lib/generators/raif/task/templates/task.rb.tt
|
|
338
|
+
- lib/generators/raif/task/templates/task_eval_set.rb.tt
|
|
294
339
|
- lib/generators/raif/views_generator.rb
|
|
295
340
|
- lib/raif.rb
|
|
341
|
+
- lib/raif/cli.rb
|
|
342
|
+
- lib/raif/cli/base.rb
|
|
343
|
+
- lib/raif/cli/evals.rb
|
|
344
|
+
- lib/raif/cli/evals_setup.rb
|
|
296
345
|
- lib/raif/configuration.rb
|
|
297
346
|
- lib/raif/embedding_model_registry.rb
|
|
298
347
|
- lib/raif/engine.rb
|
|
299
348
|
- lib/raif/errors.rb
|
|
300
349
|
- lib/raif/errors/action_not_authorized_error.rb
|
|
350
|
+
- lib/raif/errors/instance_dependent_schema_error.rb
|
|
301
351
|
- lib/raif/errors/invalid_config_error.rb
|
|
302
352
|
- lib/raif/errors/invalid_conversation_type_error.rb
|
|
303
353
|
- lib/raif/errors/invalid_model_file_input_error.rb
|
|
@@ -306,18 +356,35 @@ files:
|
|
|
306
356
|
- lib/raif/errors/open_ai/json_schema_error.rb
|
|
307
357
|
- lib/raif/errors/streaming_error.rb
|
|
308
358
|
- lib/raif/errors/unsupported_feature_error.rb
|
|
359
|
+
- lib/raif/evals.rb
|
|
360
|
+
- lib/raif/evals/eval.rb
|
|
361
|
+
- lib/raif/evals/eval_set.rb
|
|
362
|
+
- lib/raif/evals/eval_sets/expectations.rb
|
|
363
|
+
- lib/raif/evals/eval_sets/llm_judge_expectations.rb
|
|
364
|
+
- lib/raif/evals/expectation_result.rb
|
|
365
|
+
- lib/raif/evals/llm_judge.rb
|
|
366
|
+
- lib/raif/evals/llm_judges/binary.rb
|
|
367
|
+
- lib/raif/evals/llm_judges/comparative.rb
|
|
368
|
+
- lib/raif/evals/llm_judges/scored.rb
|
|
369
|
+
- lib/raif/evals/llm_judges/summarization.rb
|
|
370
|
+
- lib/raif/evals/run.rb
|
|
371
|
+
- lib/raif/evals/scoring_rubric.rb
|
|
309
372
|
- lib/raif/json_schema_builder.rb
|
|
310
373
|
- lib/raif/languages.rb
|
|
311
374
|
- lib/raif/llm_registry.rb
|
|
375
|
+
- lib/raif/messages.rb
|
|
312
376
|
- lib/raif/migration_checker.rb
|
|
313
377
|
- lib/raif/rspec.rb
|
|
314
378
|
- lib/raif/utils.rb
|
|
379
|
+
- lib/raif/utils/colors.rb
|
|
315
380
|
- lib/raif/utils/html_fragment_processor.rb
|
|
316
381
|
- lib/raif/utils/html_to_markdown_converter.rb
|
|
317
382
|
- lib/raif/utils/readable_content_extractor.rb
|
|
318
383
|
- lib/raif/version.rb
|
|
384
|
+
- lib/tasks/annotate_rb.rake
|
|
319
385
|
- lib/tasks/raif_tasks.rake
|
|
320
386
|
- spec/support/complex_test_tool.rb
|
|
387
|
+
- spec/support/current_temperature_test_tool.rb
|
|
321
388
|
- spec/support/rspec_helpers.rb
|
|
322
389
|
- spec/support/test_conversation.rb
|
|
323
390
|
- spec/support/test_embedding_model.rb
|
|
@@ -346,7 +413,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
346
413
|
- !ruby/object:Gem::Version
|
|
347
414
|
version: '0'
|
|
348
415
|
requirements: []
|
|
349
|
-
rubygems_version: 3.6.
|
|
416
|
+
rubygems_version: 3.6.9
|
|
350
417
|
specification_version: 4
|
|
351
418
|
summary: Raif (Ruby AI Framework) is a Rails engine that helps you add AI-powered
|
|
352
419
|
features to your Rails apps, such as tasks, conversations, and agents.
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Raif
|
|
4
|
-
module Agents
|
|
5
|
-
class ReActAgent < Raif::Agent
|
|
6
|
-
validates :available_model_tools, length: {
|
|
7
|
-
minimum: 1,
|
|
8
|
-
message: ->(_object, _data) {
|
|
9
|
-
I18n.t("raif.agents.re_act_agent.errors.available_model_tools.too_short")
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
def build_system_prompt
|
|
14
|
-
<<~PROMPT.strip
|
|
15
|
-
You are an intelligent assistant that follows the ReAct (Reasoning + Acting) framework to complete tasks step by step using tool calls.
|
|
16
|
-
|
|
17
|
-
# Available Tools
|
|
18
|
-
You have access to the following tools:
|
|
19
|
-
#{available_model_tools_map.values.map(&:description_for_llm).join("\n---\n")}
|
|
20
|
-
# Your Responses
|
|
21
|
-
Your responses should follow this structure & format:
|
|
22
|
-
<thought>Your step-by-step reasoning about what to do</thought>
|
|
23
|
-
<action>JSON object with "tool" and "arguments" keys</action>
|
|
24
|
-
<observation>Results from the tool, which will be provided to you</observation>
|
|
25
|
-
... (repeat Thought/Action/Observation as needed until the task is complete)
|
|
26
|
-
<thought>Final reasoning based on all observations</thought>
|
|
27
|
-
<answer>Your final response to the user</answer>
|
|
28
|
-
|
|
29
|
-
# How to Use Tools
|
|
30
|
-
When you need to use a tool:
|
|
31
|
-
1. Identify which tool is appropriate for the task
|
|
32
|
-
2. Format your tool call using JSON with the required arguments and place it in the <action> tag
|
|
33
|
-
3. Here is an example: <action>{"tool": "tool_name", "arguments": {...}}</action>
|
|
34
|
-
|
|
35
|
-
# Guidelines
|
|
36
|
-
- Always think step by step
|
|
37
|
-
- Use tools when appropriate, but don't use tools for tasks you can handle directly
|
|
38
|
-
- Be concise in your reasoning but thorough in your analysis
|
|
39
|
-
- If a tool returns an error, try to understand why and adjust your approach
|
|
40
|
-
- If you're unsure about something, explain your uncertainty, but do not make things up
|
|
41
|
-
- After each thought, make sure to also include an <action> or <answer>
|
|
42
|
-
- Always provide a final answer that directly addresses the user's request
|
|
43
|
-
|
|
44
|
-
Remember: Your goal is to be helpful, accurate, and efficient in solving the user's request.#{system_prompt_language_preference}
|
|
45
|
-
PROMPT
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
private
|
|
49
|
-
|
|
50
|
-
def process_iteration_model_completion(model_completion)
|
|
51
|
-
agent_step = Raif::Agents::ReActStep.new(model_response_text: model_completion.raw_response)
|
|
52
|
-
|
|
53
|
-
# Add the thought to conversation history
|
|
54
|
-
if agent_step.thought
|
|
55
|
-
add_conversation_history_entry({ role: "assistant", content: "<thought>#{agent_step.thought}</thought>" })
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
# If there's an answer, we're done
|
|
59
|
-
if agent_step.answer
|
|
60
|
-
self.final_answer = agent_step.answer
|
|
61
|
-
add_conversation_history_entry({ role: "assistant", content: "<answer>#{agent_step.answer}</answer>" })
|
|
62
|
-
return
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
# If there's an action, execute it
|
|
66
|
-
process_action(agent_step.action) if agent_step.action
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def process_action(action)
|
|
70
|
-
add_conversation_history_entry({ role: "assistant", content: "<action>#{action}</action>" })
|
|
71
|
-
|
|
72
|
-
# The action should always be a JSON object with "tool" and "arguments" keys
|
|
73
|
-
parsed_action = begin
|
|
74
|
-
JSON.parse(action)
|
|
75
|
-
rescue JSON::ParserError => e
|
|
76
|
-
add_conversation_history_entry({
|
|
77
|
-
role: "assistant",
|
|
78
|
-
content: "<observation>Error parsing action JSON: #{e.message}</observation>"
|
|
79
|
-
})
|
|
80
|
-
|
|
81
|
-
nil
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
return if parsed_action.blank?
|
|
85
|
-
|
|
86
|
-
unless parsed_action["tool"] && parsed_action["arguments"]
|
|
87
|
-
add_conversation_history_entry({
|
|
88
|
-
role: "assistant",
|
|
89
|
-
content: "<observation>Error: Invalid action specified. Please provide a valid action, formatted as a JSON object with 'tool' and 'arguments' keys.</observation>" # rubocop:disable Layout/LineLength
|
|
90
|
-
})
|
|
91
|
-
return
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
tool_name = parsed_action["tool"]
|
|
95
|
-
tool_arguments = parsed_action["arguments"]
|
|
96
|
-
tool_klass = available_model_tools_map[tool_name]
|
|
97
|
-
|
|
98
|
-
# The model tried to use a tool that doesn't exist
|
|
99
|
-
unless tool_klass
|
|
100
|
-
add_conversation_history_entry({
|
|
101
|
-
role: "assistant",
|
|
102
|
-
content: "<observation>Error: Tool '#{tool_name}' not found. Available tools: #{available_model_tools_map.keys.join(", ")}</observation>"
|
|
103
|
-
})
|
|
104
|
-
return
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
unless JSON::Validator.validate(tool_klass.tool_arguments_schema, tool_arguments)
|
|
108
|
-
add_conversation_history_entry({
|
|
109
|
-
role: "assistant",
|
|
110
|
-
content: "<observation>Error: Invalid tool arguments. Please provide valid arguments for the tool '#{tool_name}'. Tool arguments schema: #{tool_klass.tool_arguments_schema.to_json}</observation>" # rubocop:disable Layout/LineLength
|
|
111
|
-
})
|
|
112
|
-
return
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
tool_invocation = tool_klass.invoke_tool(tool_arguments: tool_arguments, source: self)
|
|
116
|
-
observation = tool_klass.observation_for_invocation(tool_invocation)
|
|
117
|
-
|
|
118
|
-
# Add the tool invocation to conversation history
|
|
119
|
-
add_conversation_history_entry({
|
|
120
|
-
role: "assistant",
|
|
121
|
-
content: "<observation>#{observation}</observation>"
|
|
122
|
-
})
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
end
|
|
126
|
-
end
|
|
127
|
-
end
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Raif
|
|
4
|
-
module Agents
|
|
5
|
-
class ReActStep
|
|
6
|
-
attr_reader :model_response_text
|
|
7
|
-
|
|
8
|
-
def initialize(model_response_text:)
|
|
9
|
-
@model_response_text = model_response_text
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def thought
|
|
13
|
-
@thought ||= extract_tag_content("thought")
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def answer
|
|
17
|
-
@answer ||= extract_tag_content("answer")
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def action
|
|
21
|
-
@action ||= extract_tag_content("action")
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
private
|
|
25
|
-
|
|
26
|
-
def extract_tag_content(tag_name)
|
|
27
|
-
match = model_response_text.match(%r{<#{tag_name}>(.*?)</#{tag_name}>}m)
|
|
28
|
-
match ? match[1].strip : nil
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|