raif 1.3.0 → 1.5.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 +8 -7
- data/app/assets/builds/raif.css +4 -1
- data/app/assets/builds/raif_admin.css +52 -2
- data/app/assets/builds/raif_admin_sprockets.js +2709 -0
- data/app/assets/javascript/raif/admin/copy_to_clipboard_controller.js +132 -0
- data/app/assets/javascript/raif/admin/cost_estimate_controller.js +80 -0
- data/app/assets/javascript/raif/admin/judge_config_controller.js +23 -0
- data/app/assets/javascript/raif/admin/select_all_checkboxes_controller.js +33 -0
- data/app/assets/javascript/raif/admin/sortable_table_controller.js +51 -0
- data/app/assets/javascript/raif/admin/table_search_controller.js +15 -0
- data/app/assets/javascript/raif/admin/tom_select_controller.js +33 -0
- data/app/assets/javascript/raif/controllers/conversations_controller.js +1 -1
- data/app/assets/javascript/raif_admin.js +23 -0
- data/app/assets/javascript/raif_admin_sprockets.js +24 -0
- 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/assets/stylesheets/raif_admin.scss +50 -1
- data/app/controllers/raif/admin/agents_controller.rb +27 -1
- data/app/controllers/raif/admin/application_controller.rb +16 -0
- data/app/controllers/raif/admin/configs_controller.rb +95 -0
- data/app/controllers/raif/admin/llms_controller.rb +27 -0
- data/app/controllers/raif/admin/model_completions_controller.rb +24 -1
- data/app/controllers/raif/admin/model_tool_invocations_controller.rb +7 -1
- data/app/controllers/raif/admin/prompt_studio/agents_controller.rb +25 -0
- data/app/controllers/raif/admin/prompt_studio/base_controller.rb +32 -0
- data/app/controllers/raif/admin/prompt_studio/batch_runs_controller.rb +102 -0
- data/app/controllers/raif/admin/prompt_studio/conversations_controller.rb +25 -0
- data/app/controllers/raif/admin/prompt_studio/tasks_controller.rb +64 -0
- 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/admin/tasks_controller.rb +5 -0
- data/app/controllers/raif/conversation_entries_controller.rb +1 -0
- data/app/controllers/raif/conversations_controller.rb +10 -2
- data/app/helpers/raif/application_helper.rb +40 -0
- data/app/jobs/raif/conversation_entry_job.rb +8 -6
- data/app/jobs/raif/prompt_studio_batch_run_item_job.rb +11 -0
- data/app/jobs/raif/prompt_studio_batch_run_job.rb +15 -0
- data/app/jobs/raif/prompt_studio_task_run_job.rb +36 -0
- data/app/models/raif/admin/task_stat.rb +7 -0
- data/app/models/raif/agent.rb +98 -6
- data/app/models/raif/agents/native_tool_calling_agent.rb +179 -52
- 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_prompt_templates.rb +88 -0
- data/app/models/raif/concerns/has_runtime_duration.rb +41 -0
- data/app/models/raif/concerns/json_schema_definition.rb +54 -6
- data/app/models/raif/concerns/llm_prompt_caching.rb +20 -0
- data/app/models/raif/concerns/llms/anthropic/message_formatting.rb +34 -0
- data/app/models/raif/concerns/llms/anthropic/response_tool_calls.rb +24 -0
- data/app/models/raif/concerns/llms/anthropic/tool_formatting.rb +8 -0
- data/app/models/raif/concerns/llms/bedrock/message_formatting.rb +43 -0
- data/app/models/raif/concerns/llms/bedrock/response_tool_calls.rb +26 -0
- data/app/models/raif/concerns/llms/bedrock/tool_formatting.rb +8 -0
- data/app/models/raif/concerns/llms/google/message_formatting.rb +112 -0
- data/app/models/raif/concerns/llms/google/response_tool_calls.rb +32 -0
- data/app/models/raif/concerns/llms/google/tool_formatting.rb +76 -0
- data/app/models/raif/concerns/llms/message_formatting.rb +41 -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 +8 -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 +8 -0
- data/app/models/raif/concerns/provider_managed_tool_calls.rb +162 -0
- data/app/models/raif/concerns/run_with.rb +127 -0
- data/app/models/raif/conversation.rb +112 -8
- data/app/models/raif/conversation_entry.rb +38 -4
- data/app/models/raif/embedding_model.rb +2 -1
- data/app/models/raif/embedding_models/bedrock.rb +10 -1
- data/app/models/raif/embedding_models/google.rb +37 -0
- data/app/models/raif/embedding_models/open_ai.rb +1 -1
- data/app/models/raif/evals/llm_judge.rb +70 -0
- data/{lib → app/models}/raif/evals/llm_judges/binary.rb +41 -3
- data/{lib → app/models}/raif/evals/llm_judges/comparative.rb +41 -3
- data/{lib → app/models}/raif/evals/llm_judges/scored.rb +39 -1
- data/{lib → app/models}/raif/evals/llm_judges/summarization.rb +40 -2
- data/app/models/raif/llm.rb +104 -4
- data/app/models/raif/llms/anthropic.rb +32 -22
- data/app/models/raif/llms/bedrock.rb +64 -24
- data/app/models/raif/llms/google.rb +166 -0
- data/app/models/raif/llms/open_ai_base.rb +23 -5
- data/app/models/raif/llms/open_ai_completions.rb +14 -12
- data/app/models/raif/llms/open_ai_responses.rb +14 -17
- data/app/models/raif/llms/open_router.rb +16 -15
- data/app/models/raif/model_completion.rb +103 -1
- data/app/models/raif/model_tool.rb +55 -5
- data/app/models/raif/model_tool_invocation.rb +68 -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/prompt_studio_batch_run.rb +155 -0
- data/app/models/raif/prompt_studio_batch_run_item.rb +220 -0
- data/app/models/raif/streaming_responses/bedrock.rb +60 -1
- data/app/models/raif/streaming_responses/google.rb +71 -0
- data/app/models/raif/task.rb +85 -18
- data/app/models/raif/user_tool_invocation.rb +19 -0
- data/app/views/layouts/raif/admin.html.erb +43 -2
- data/app/views/raif/admin/agents/_agent.html.erb +9 -0
- data/app/views/raif/admin/agents/_conversation_message.html.erb +28 -6
- data/app/views/raif/admin/agents/index.html.erb +50 -0
- data/app/views/raif/admin/agents/show.html.erb +50 -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/llms/index.html.erb +110 -0
- data/app/views/raif/admin/model_completions/_model_completion.html.erb +10 -5
- data/app/views/raif/admin/model_completions/index.html.erb +40 -1
- data/app/views/raif/admin/model_completions/show.html.erb +256 -84
- data/app/views/raif/admin/model_tool_invocations/index.html.erb +22 -1
- data/app/views/raif/admin/model_tool_invocations/show.html.erb +18 -0
- 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/prompt_studio/agents/index.html.erb +56 -0
- data/app/views/raif/admin/prompt_studio/agents/show.html.erb +57 -0
- data/app/views/raif/admin/prompt_studio/batch_runs/_batch_run_item.html.erb +54 -0
- data/app/views/raif/admin/prompt_studio/batch_runs/_judge_config_fields.html.erb +76 -0
- data/app/views/raif/admin/prompt_studio/batch_runs/_judge_detail_modal.html.erb +27 -0
- data/app/views/raif/admin/prompt_studio/batch_runs/_modal.html.erb +35 -0
- data/app/views/raif/admin/prompt_studio/batch_runs/_progress.html.erb +78 -0
- data/app/views/raif/admin/prompt_studio/batch_runs/show.html.erb +49 -0
- data/app/views/raif/admin/prompt_studio/conversations/index.html.erb +48 -0
- data/app/views/raif/admin/prompt_studio/conversations/show.html.erb +36 -0
- data/app/views/raif/admin/prompt_studio/shared/_nav_tabs.html.erb +17 -0
- data/app/views/raif/admin/prompt_studio/shared/_prompt_comparison.html.erb +87 -0
- data/app/views/raif/admin/prompt_studio/shared/_type_filter.html.erb +54 -0
- data/app/views/raif/admin/prompt_studio/tasks/_task_result.html.erb +145 -0
- data/app/views/raif/admin/prompt_studio/tasks/_task_row.html.erb +12 -0
- data/app/views/raif/admin/prompt_studio/tasks/_task_type_filter.html.erb +58 -0
- data/app/views/raif/admin/prompt_studio/tasks/_tasks_table.html.erb +22 -0
- data/app/views/raif/admin/prompt_studio/tasks/index.html.erb +35 -0
- data/app/views/raif/admin/prompt_studio/tasks/show.html.erb +19 -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/_task.html.erb +1 -0
- data/app/views/raif/admin/tasks/index.html.erb +23 -6
- data/app/views/raif/admin/tasks/show.html.erb +56 -3
- data/app/views/raif/conversation_entries/_form.html.erb +3 -0
- data/app/views/raif/conversation_entries/_message.html.erb +10 -6
- 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/index.html.erb +23 -0
- data/config/importmap.rb +8 -0
- data/config/locales/admin.en.yml +161 -1
- data/config/locales/en.yml +67 -4
- data/config/routes.rb +10 -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/db/migrate/20260307000000_add_prompt_studio_run_to_raif_tasks.rb +7 -0
- data/db/migrate/20260308000000_create_raif_prompt_studio_batch_runs.rb +27 -0
- data/db/migrate/20260308000001_create_raif_prompt_studio_batch_run_items.rb +24 -0
- data/db/migrate/20260407000000_add_cache_token_columns_to_raif_model_completions.rb +8 -0
- data/lib/generators/raif/agent/agent_generator.rb +18 -0
- data/lib/generators/raif/agent/templates/agent.rb.tt +7 -5
- data/lib/generators/raif/agent/templates/application_agent.rb.tt +1 -1
- data/lib/generators/raif/agent/templates/system_prompt.erb.tt +3 -0
- data/lib/generators/raif/conversation/conversation_generator.rb +19 -1
- data/lib/generators/raif/conversation/templates/conversation.rb.tt +6 -0
- data/lib/generators/raif/conversation/templates/system_prompt.erb.tt +4 -0
- data/lib/generators/raif/install/templates/initializer.rb +117 -8
- data/lib/generators/raif/task/task_generator.rb +18 -0
- data/lib/generators/raif/task/templates/prompt.erb.tt +4 -0
- data/lib/generators/raif/task/templates/task.rb.tt +10 -9
- data/lib/raif/configuration.rb +47 -2
- data/lib/raif/embedding_model_registry.rb +8 -0
- data/lib/raif/engine.rb +24 -1
- data/lib/raif/errors/blank_response_error.rb +8 -0
- data/lib/raif/errors/instance_dependent_schema_error.rb +8 -0
- data/lib/raif/errors/prompt_template_error.rb +15 -0
- data/lib/raif/errors/streaming_error.rb +6 -3
- data/lib/raif/errors.rb +3 -0
- data/lib/raif/evals/run.rb +1 -0
- data/lib/raif/evals.rb +0 -6
- data/lib/raif/json_schema_builder.rb +14 -0
- data/lib/raif/llm_registry.rb +433 -42
- data/lib/raif/messages.rb +180 -0
- data/lib/raif/prompt_studio_comparison_builder.rb +138 -0
- data/lib/raif/token_estimator.rb +28 -0
- data/lib/raif/version.rb +1 -1
- data/lib/raif.rb +11 -0
- data/lib/tasks/annotate_rb.rake +10 -0
- data/spec/support/rspec_helpers.rb +15 -9
- data/spec/support/test_task.rb +9 -0
- data/spec/support/test_template_task.rb +41 -0
- metadata +108 -15
- data/app/models/raif/agents/re_act_agent.rb +0 -127
- data/app/models/raif/agents/re_act_step.rb +0 -32
- data/app/models/raif/concerns/task_run_args.rb +0 -62
- data/lib/raif/evals/llm_judge.rb +0 -32
- /data/{lib → app/models}/raif/evals/scoring_rubric.rb +0 -0
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: raif
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ben Roesch
|
|
@@ -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
|
|
@@ -152,21 +152,40 @@ files:
|
|
|
152
152
|
- Rakefile
|
|
153
153
|
- app/assets/builds/raif.css
|
|
154
154
|
- app/assets/builds/raif_admin.css
|
|
155
|
+
- app/assets/builds/raif_admin_sprockets.js
|
|
155
156
|
- app/assets/config/raif_manifest.js
|
|
156
157
|
- app/assets/images/raif-logo-white.svg
|
|
157
158
|
- app/assets/javascript/raif.js
|
|
159
|
+
- app/assets/javascript/raif/admin/copy_to_clipboard_controller.js
|
|
160
|
+
- app/assets/javascript/raif/admin/cost_estimate_controller.js
|
|
161
|
+
- app/assets/javascript/raif/admin/judge_config_controller.js
|
|
162
|
+
- app/assets/javascript/raif/admin/select_all_checkboxes_controller.js
|
|
163
|
+
- app/assets/javascript/raif/admin/sortable_table_controller.js
|
|
164
|
+
- app/assets/javascript/raif/admin/table_search_controller.js
|
|
165
|
+
- app/assets/javascript/raif/admin/tom_select_controller.js
|
|
158
166
|
- app/assets/javascript/raif/controllers/conversations_controller.js
|
|
159
167
|
- app/assets/javascript/raif/stream_actions/raif_scroll_to_bottom.js
|
|
168
|
+
- app/assets/javascript/raif_admin.js
|
|
169
|
+
- app/assets/javascript/raif_admin_sprockets.js
|
|
160
170
|
- app/assets/stylesheets/raif.scss
|
|
161
171
|
- app/assets/stylesheets/raif/admin/conversation.scss
|
|
162
172
|
- app/assets/stylesheets/raif/admin/stats.scss
|
|
173
|
+
- app/assets/stylesheets/raif/conversations.scss
|
|
163
174
|
- app/assets/stylesheets/raif/loader.scss
|
|
164
175
|
- app/assets/stylesheets/raif_admin.scss
|
|
165
176
|
- app/controllers/raif/admin/agents_controller.rb
|
|
166
177
|
- app/controllers/raif/admin/application_controller.rb
|
|
178
|
+
- app/controllers/raif/admin/configs_controller.rb
|
|
167
179
|
- app/controllers/raif/admin/conversations_controller.rb
|
|
180
|
+
- app/controllers/raif/admin/llms_controller.rb
|
|
168
181
|
- app/controllers/raif/admin/model_completions_controller.rb
|
|
169
182
|
- app/controllers/raif/admin/model_tool_invocations_controller.rb
|
|
183
|
+
- app/controllers/raif/admin/prompt_studio/agents_controller.rb
|
|
184
|
+
- app/controllers/raif/admin/prompt_studio/base_controller.rb
|
|
185
|
+
- app/controllers/raif/admin/prompt_studio/batch_runs_controller.rb
|
|
186
|
+
- app/controllers/raif/admin/prompt_studio/conversations_controller.rb
|
|
187
|
+
- app/controllers/raif/admin/prompt_studio/tasks_controller.rb
|
|
188
|
+
- app/controllers/raif/admin/stats/model_tool_invocations_controller.rb
|
|
170
189
|
- app/controllers/raif/admin/stats/tasks_controller.rb
|
|
171
190
|
- app/controllers/raif/admin/stats_controller.rb
|
|
172
191
|
- app/controllers/raif/admin/tasks_controller.rb
|
|
@@ -177,38 +196,60 @@ files:
|
|
|
177
196
|
- app/helpers/raif/shared/conversations_helper.rb
|
|
178
197
|
- app/jobs/raif/application_job.rb
|
|
179
198
|
- app/jobs/raif/conversation_entry_job.rb
|
|
199
|
+
- app/jobs/raif/prompt_studio_batch_run_item_job.rb
|
|
200
|
+
- app/jobs/raif/prompt_studio_batch_run_job.rb
|
|
201
|
+
- app/jobs/raif/prompt_studio_task_run_job.rb
|
|
202
|
+
- app/models/raif/admin/task_stat.rb
|
|
180
203
|
- app/models/raif/agent.rb
|
|
181
204
|
- app/models/raif/agents/native_tool_calling_agent.rb
|
|
182
|
-
- app/models/raif/agents/re_act_agent.rb
|
|
183
|
-
- app/models/raif/agents/re_act_step.rb
|
|
184
205
|
- app/models/raif/application_record.rb
|
|
206
|
+
- app/models/raif/concerns/agent_inference_stats.rb
|
|
185
207
|
- app/models/raif/concerns/boolean_timestamp.rb
|
|
186
208
|
- app/models/raif/concerns/has_available_model_tools.rb
|
|
187
209
|
- app/models/raif/concerns/has_llm.rb
|
|
210
|
+
- app/models/raif/concerns/has_prompt_templates.rb
|
|
188
211
|
- app/models/raif/concerns/has_requested_language.rb
|
|
212
|
+
- app/models/raif/concerns/has_runtime_duration.rb
|
|
189
213
|
- app/models/raif/concerns/invokes_model_tools.rb
|
|
190
214
|
- app/models/raif/concerns/json_schema_definition.rb
|
|
215
|
+
- app/models/raif/concerns/llm_prompt_caching.rb
|
|
191
216
|
- app/models/raif/concerns/llm_response_parsing.rb
|
|
192
217
|
- app/models/raif/concerns/llm_temperature.rb
|
|
193
218
|
- app/models/raif/concerns/llms/anthropic/message_formatting.rb
|
|
219
|
+
- app/models/raif/concerns/llms/anthropic/response_tool_calls.rb
|
|
194
220
|
- app/models/raif/concerns/llms/anthropic/tool_formatting.rb
|
|
195
221
|
- app/models/raif/concerns/llms/bedrock/message_formatting.rb
|
|
222
|
+
- app/models/raif/concerns/llms/bedrock/response_tool_calls.rb
|
|
196
223
|
- app/models/raif/concerns/llms/bedrock/tool_formatting.rb
|
|
224
|
+
- app/models/raif/concerns/llms/google/message_formatting.rb
|
|
225
|
+
- app/models/raif/concerns/llms/google/response_tool_calls.rb
|
|
226
|
+
- app/models/raif/concerns/llms/google/tool_formatting.rb
|
|
197
227
|
- app/models/raif/concerns/llms/message_formatting.rb
|
|
198
228
|
- app/models/raif/concerns/llms/open_ai/json_schema_validation.rb
|
|
199
229
|
- app/models/raif/concerns/llms/open_ai_completions/message_formatting.rb
|
|
230
|
+
- app/models/raif/concerns/llms/open_ai_completions/response_tool_calls.rb
|
|
200
231
|
- app/models/raif/concerns/llms/open_ai_completions/tool_formatting.rb
|
|
201
232
|
- app/models/raif/concerns/llms/open_ai_responses/message_formatting.rb
|
|
233
|
+
- app/models/raif/concerns/llms/open_ai_responses/response_tool_calls.rb
|
|
202
234
|
- app/models/raif/concerns/llms/open_ai_responses/tool_formatting.rb
|
|
203
|
-
- app/models/raif/concerns/
|
|
235
|
+
- app/models/raif/concerns/provider_managed_tool_calls.rb
|
|
236
|
+
- app/models/raif/concerns/run_with.rb
|
|
204
237
|
- app/models/raif/conversation.rb
|
|
205
238
|
- app/models/raif/conversation_entry.rb
|
|
206
239
|
- app/models/raif/embedding_model.rb
|
|
207
240
|
- app/models/raif/embedding_models/bedrock.rb
|
|
241
|
+
- app/models/raif/embedding_models/google.rb
|
|
208
242
|
- app/models/raif/embedding_models/open_ai.rb
|
|
243
|
+
- app/models/raif/evals/llm_judge.rb
|
|
244
|
+
- app/models/raif/evals/llm_judges/binary.rb
|
|
245
|
+
- app/models/raif/evals/llm_judges/comparative.rb
|
|
246
|
+
- app/models/raif/evals/llm_judges/scored.rb
|
|
247
|
+
- app/models/raif/evals/llm_judges/summarization.rb
|
|
248
|
+
- app/models/raif/evals/scoring_rubric.rb
|
|
209
249
|
- app/models/raif/llm.rb
|
|
210
250
|
- app/models/raif/llms/anthropic.rb
|
|
211
251
|
- app/models/raif/llms/bedrock.rb
|
|
252
|
+
- app/models/raif/llms/google.rb
|
|
212
253
|
- app/models/raif/llms/open_ai_base.rb
|
|
213
254
|
- app/models/raif/llms/open_ai_completions.rb
|
|
214
255
|
- app/models/raif/llms/open_ai_responses.rb
|
|
@@ -225,8 +266,11 @@ files:
|
|
|
225
266
|
- app/models/raif/model_tools/provider_managed/image_generation.rb
|
|
226
267
|
- app/models/raif/model_tools/provider_managed/web_search.rb
|
|
227
268
|
- app/models/raif/model_tools/wikipedia_search.rb
|
|
269
|
+
- app/models/raif/prompt_studio_batch_run.rb
|
|
270
|
+
- app/models/raif/prompt_studio_batch_run_item.rb
|
|
228
271
|
- app/models/raif/streaming_responses/anthropic.rb
|
|
229
272
|
- app/models/raif/streaming_responses/bedrock.rb
|
|
273
|
+
- app/models/raif/streaming_responses/google.rb
|
|
230
274
|
- app/models/raif/streaming_responses/open_ai_completions.rb
|
|
231
275
|
- app/models/raif/streaming_responses/open_ai_responses.rb
|
|
232
276
|
- app/models/raif/task.rb
|
|
@@ -236,17 +280,42 @@ files:
|
|
|
236
280
|
- app/views/raif/admin/agents/_conversation_message.html.erb
|
|
237
281
|
- app/views/raif/admin/agents/index.html.erb
|
|
238
282
|
- app/views/raif/admin/agents/show.html.erb
|
|
283
|
+
- app/views/raif/admin/configs/show.html.erb
|
|
239
284
|
- app/views/raif/admin/conversations/_conversation.html.erb
|
|
240
285
|
- app/views/raif/admin/conversations/_conversation_entry.html.erb
|
|
241
286
|
- app/views/raif/admin/conversations/index.html.erb
|
|
242
287
|
- app/views/raif/admin/conversations/show.html.erb
|
|
288
|
+
- app/views/raif/admin/llms/index.html.erb
|
|
243
289
|
- app/views/raif/admin/model_completions/_model_completion.html.erb
|
|
244
290
|
- app/views/raif/admin/model_completions/index.html.erb
|
|
245
291
|
- app/views/raif/admin/model_completions/show.html.erb
|
|
246
292
|
- app/views/raif/admin/model_tool_invocations/_model_tool_invocation.html.erb
|
|
247
293
|
- app/views/raif/admin/model_tool_invocations/index.html.erb
|
|
248
294
|
- app/views/raif/admin/model_tool_invocations/show.html.erb
|
|
295
|
+
- app/views/raif/admin/model_tools/_list.html.erb
|
|
296
|
+
- app/views/raif/admin/model_tools/_model_tool.html.erb
|
|
297
|
+
- app/views/raif/admin/prompt_studio/agents/index.html.erb
|
|
298
|
+
- app/views/raif/admin/prompt_studio/agents/show.html.erb
|
|
299
|
+
- app/views/raif/admin/prompt_studio/batch_runs/_batch_run_item.html.erb
|
|
300
|
+
- app/views/raif/admin/prompt_studio/batch_runs/_judge_config_fields.html.erb
|
|
301
|
+
- app/views/raif/admin/prompt_studio/batch_runs/_judge_detail_modal.html.erb
|
|
302
|
+
- app/views/raif/admin/prompt_studio/batch_runs/_modal.html.erb
|
|
303
|
+
- app/views/raif/admin/prompt_studio/batch_runs/_progress.html.erb
|
|
304
|
+
- app/views/raif/admin/prompt_studio/batch_runs/show.html.erb
|
|
305
|
+
- app/views/raif/admin/prompt_studio/conversations/index.html.erb
|
|
306
|
+
- app/views/raif/admin/prompt_studio/conversations/show.html.erb
|
|
307
|
+
- app/views/raif/admin/prompt_studio/shared/_nav_tabs.html.erb
|
|
308
|
+
- app/views/raif/admin/prompt_studio/shared/_prompt_comparison.html.erb
|
|
309
|
+
- app/views/raif/admin/prompt_studio/shared/_type_filter.html.erb
|
|
310
|
+
- app/views/raif/admin/prompt_studio/tasks/_task_result.html.erb
|
|
311
|
+
- app/views/raif/admin/prompt_studio/tasks/_task_row.html.erb
|
|
312
|
+
- app/views/raif/admin/prompt_studio/tasks/_task_type_filter.html.erb
|
|
313
|
+
- app/views/raif/admin/prompt_studio/tasks/_tasks_table.html.erb
|
|
314
|
+
- app/views/raif/admin/prompt_studio/tasks/index.html.erb
|
|
315
|
+
- app/views/raif/admin/prompt_studio/tasks/show.html.erb
|
|
316
|
+
- app/views/raif/admin/stats/_stats_tile.html.erb
|
|
249
317
|
- app/views/raif/admin/stats/index.html.erb
|
|
318
|
+
- app/views/raif/admin/stats/model_tool_invocations/index.html.erb
|
|
250
319
|
- app/views/raif/admin/stats/tasks/index.html.erb
|
|
251
320
|
- app/views/raif/admin/tasks/_task.html.erb
|
|
252
321
|
- app/views/raif/admin/tasks/index.html.erb
|
|
@@ -262,8 +331,11 @@ files:
|
|
|
262
331
|
- app/views/raif/conversation_entries/create.turbo_stream.erb
|
|
263
332
|
- app/views/raif/conversation_entries/new.turbo_stream.erb
|
|
264
333
|
- app/views/raif/conversations/_available_user_tools.html.erb
|
|
334
|
+
- app/views/raif/conversations/_conversation.html.erb
|
|
335
|
+
- app/views/raif/conversations/_entry_processed.turbo_stream.erb
|
|
265
336
|
- app/views/raif/conversations/_full_conversation.html.erb
|
|
266
337
|
- app/views/raif/conversations/_initial_chat_message.html.erb
|
|
338
|
+
- app/views/raif/conversations/index.html.erb
|
|
267
339
|
- app/views/raif/conversations/show.html.erb
|
|
268
340
|
- config/i18n-tasks.yml
|
|
269
341
|
- config/importmap.rb
|
|
@@ -282,16 +354,34 @@ files:
|
|
|
282
354
|
- db/migrate/20250603202013_add_stream_response_to_raif_model_completions.rb
|
|
283
355
|
- db/migrate/20250804013843_add_task_run_args_to_raif_tasks.rb
|
|
284
356
|
- db/migrate/20250811171150_make_raif_task_creator_optional.rb
|
|
357
|
+
- db/migrate/20250904194456_add_generating_entry_response_to_raif_conversations.rb
|
|
358
|
+
- db/migrate/20250911125234_add_source_to_raif_tasks.rb
|
|
359
|
+
- db/migrate/20251020005853_add_source_to_raif_agents.rb
|
|
360
|
+
- db/migrate/20251020011346_rename_task_run_args_to_run_with.rb
|
|
361
|
+
- db/migrate/20251020011405_add_run_with_to_raif_agents.rb
|
|
362
|
+
- db/migrate/20251024160119_add_llm_messages_max_length_to_raif_conversations.rb
|
|
363
|
+
- db/migrate/20251124185033_add_provider_tool_call_id_to_raif_model_tool_invocations.rb
|
|
364
|
+
- db/migrate/20251128202941_add_tool_choice_to_raif_model_completions.rb
|
|
365
|
+
- db/migrate/20260118144846_add_source_to_raif_conversations.rb
|
|
366
|
+
- db/migrate/20260119000000_add_failure_tracking_to_raif_model_completions.rb
|
|
367
|
+
- db/migrate/20260119000001_add_completed_at_to_raif_model_completions.rb
|
|
368
|
+
- db/migrate/20260119000002_add_started_at_to_raif_model_completions.rb
|
|
369
|
+
- db/migrate/20260307000000_add_prompt_studio_run_to_raif_tasks.rb
|
|
370
|
+
- db/migrate/20260308000000_create_raif_prompt_studio_batch_runs.rb
|
|
371
|
+
- db/migrate/20260308000001_create_raif_prompt_studio_batch_run_items.rb
|
|
372
|
+
- db/migrate/20260407000000_add_cache_token_columns_to_raif_model_completions.rb
|
|
285
373
|
- exe/raif
|
|
286
374
|
- lib/generators/raif/agent/agent_generator.rb
|
|
287
375
|
- lib/generators/raif/agent/templates/agent.rb.tt
|
|
288
376
|
- lib/generators/raif/agent/templates/agent_eval_set.rb.tt
|
|
289
377
|
- lib/generators/raif/agent/templates/application_agent.rb.tt
|
|
378
|
+
- lib/generators/raif/agent/templates/system_prompt.erb.tt
|
|
290
379
|
- lib/generators/raif/base_generator.rb
|
|
291
380
|
- lib/generators/raif/conversation/conversation_generator.rb
|
|
292
381
|
- lib/generators/raif/conversation/templates/application_conversation.rb.tt
|
|
293
382
|
- lib/generators/raif/conversation/templates/conversation.rb.tt
|
|
294
383
|
- lib/generators/raif/conversation/templates/conversation_eval_set.rb.tt
|
|
384
|
+
- lib/generators/raif/conversation/templates/system_prompt.erb.tt
|
|
295
385
|
- lib/generators/raif/eval_set/eval_set_generator.rb
|
|
296
386
|
- lib/generators/raif/eval_set/templates/eval_set.rb.tt
|
|
297
387
|
- lib/generators/raif/evals/setup/setup_generator.rb
|
|
@@ -302,6 +392,7 @@ files:
|
|
|
302
392
|
- lib/generators/raif/model_tool/templates/model_tool_invocation_partial.html.erb.tt
|
|
303
393
|
- lib/generators/raif/task/task_generator.rb
|
|
304
394
|
- lib/generators/raif/task/templates/application_task.rb.tt
|
|
395
|
+
- lib/generators/raif/task/templates/prompt.erb.tt
|
|
305
396
|
- lib/generators/raif/task/templates/task.rb.tt
|
|
306
397
|
- lib/generators/raif/task/templates/task_eval_set.rb.tt
|
|
307
398
|
- lib/generators/raif/views_generator.rb
|
|
@@ -315,12 +406,15 @@ files:
|
|
|
315
406
|
- lib/raif/engine.rb
|
|
316
407
|
- lib/raif/errors.rb
|
|
317
408
|
- lib/raif/errors/action_not_authorized_error.rb
|
|
409
|
+
- lib/raif/errors/blank_response_error.rb
|
|
410
|
+
- lib/raif/errors/instance_dependent_schema_error.rb
|
|
318
411
|
- lib/raif/errors/invalid_config_error.rb
|
|
319
412
|
- lib/raif/errors/invalid_conversation_type_error.rb
|
|
320
413
|
- lib/raif/errors/invalid_model_file_input_error.rb
|
|
321
414
|
- lib/raif/errors/invalid_model_image_input_error.rb
|
|
322
415
|
- lib/raif/errors/invalid_user_tool_type_error.rb
|
|
323
416
|
- lib/raif/errors/open_ai/json_schema_error.rb
|
|
417
|
+
- lib/raif/errors/prompt_template_error.rb
|
|
324
418
|
- lib/raif/errors/streaming_error.rb
|
|
325
419
|
- lib/raif/errors/unsupported_feature_error.rb
|
|
326
420
|
- lib/raif/evals.rb
|
|
@@ -329,24 +423,22 @@ files:
|
|
|
329
423
|
- lib/raif/evals/eval_sets/expectations.rb
|
|
330
424
|
- lib/raif/evals/eval_sets/llm_judge_expectations.rb
|
|
331
425
|
- lib/raif/evals/expectation_result.rb
|
|
332
|
-
- lib/raif/evals/llm_judge.rb
|
|
333
|
-
- lib/raif/evals/llm_judges/binary.rb
|
|
334
|
-
- lib/raif/evals/llm_judges/comparative.rb
|
|
335
|
-
- lib/raif/evals/llm_judges/scored.rb
|
|
336
|
-
- lib/raif/evals/llm_judges/summarization.rb
|
|
337
426
|
- lib/raif/evals/run.rb
|
|
338
|
-
- lib/raif/evals/scoring_rubric.rb
|
|
339
427
|
- lib/raif/json_schema_builder.rb
|
|
340
428
|
- lib/raif/languages.rb
|
|
341
429
|
- lib/raif/llm_registry.rb
|
|
430
|
+
- lib/raif/messages.rb
|
|
342
431
|
- lib/raif/migration_checker.rb
|
|
432
|
+
- lib/raif/prompt_studio_comparison_builder.rb
|
|
343
433
|
- lib/raif/rspec.rb
|
|
434
|
+
- lib/raif/token_estimator.rb
|
|
344
435
|
- lib/raif/utils.rb
|
|
345
436
|
- lib/raif/utils/colors.rb
|
|
346
437
|
- lib/raif/utils/html_fragment_processor.rb
|
|
347
438
|
- lib/raif/utils/html_to_markdown_converter.rb
|
|
348
439
|
- lib/raif/utils/readable_content_extractor.rb
|
|
349
440
|
- lib/raif/version.rb
|
|
441
|
+
- lib/tasks/annotate_rb.rake
|
|
350
442
|
- lib/tasks/raif_tasks.rake
|
|
351
443
|
- spec/support/complex_test_tool.rb
|
|
352
444
|
- spec/support/current_temperature_test_tool.rb
|
|
@@ -356,6 +448,7 @@ files:
|
|
|
356
448
|
- spec/support/test_llm.rb
|
|
357
449
|
- spec/support/test_model_tool.rb
|
|
358
450
|
- spec/support/test_task.rb
|
|
451
|
+
- spec/support/test_template_task.rb
|
|
359
452
|
homepage: https://github.com/cultivatelabs/raif
|
|
360
453
|
licenses:
|
|
361
454
|
- MIT
|
|
@@ -378,7 +471,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
378
471
|
- !ruby/object:Gem::Version
|
|
379
472
|
version: '0'
|
|
380
473
|
requirements: []
|
|
381
|
-
rubygems_version: 3.6.
|
|
474
|
+
rubygems_version: 3.6.9
|
|
382
475
|
specification_version: 4
|
|
383
476
|
summary: Raif (Ruby AI Framework) is a Rails engine that helps you add AI-powered
|
|
384
477
|
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,32 +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] ? match[1].strip : nil
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Raif::Concerns::TaskRunArgs
|
|
4
|
-
extend ActiveSupport::Concern
|
|
5
|
-
|
|
6
|
-
included do
|
|
7
|
-
class_attribute :_task_run_args, instance_writer: false, default: []
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
class_methods do
|
|
11
|
-
# DSL for declaring persistent task arguments that will be serialized to the database
|
|
12
|
-
# @param name [Symbol] The name of the argument
|
|
13
|
-
def task_run_arg(name)
|
|
14
|
-
# Ensure each class has its own array copy
|
|
15
|
-
self._task_run_args = _task_run_args.dup
|
|
16
|
-
_task_run_args << name.to_sym
|
|
17
|
-
|
|
18
|
-
# Define getter that pulls from task_run_args JSON
|
|
19
|
-
define_method(name) do
|
|
20
|
-
return instance_variable_get("@#{name}") if instance_variable_defined?("@#{name}")
|
|
21
|
-
|
|
22
|
-
value = task_run_args&.dig(name.to_s)
|
|
23
|
-
return unless value
|
|
24
|
-
|
|
25
|
-
# Deserialize GID if it's a string starting with gid://
|
|
26
|
-
deserialized = if value.is_a?(String) && value.start_with?("gid://")
|
|
27
|
-
begin
|
|
28
|
-
GlobalID::Locator.locate(value)
|
|
29
|
-
rescue ActiveRecord::RecordNotFound
|
|
30
|
-
nil
|
|
31
|
-
end
|
|
32
|
-
else
|
|
33
|
-
value
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
instance_variable_set("@#{name}", deserialized)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
# Define setter that stores in memory (for use during run)
|
|
40
|
-
define_method("#{name}=") do |value|
|
|
41
|
-
instance_variable_set("@#{name}", value)
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
# Transform run args into a hash that can be stored in the task_run_args database column
|
|
46
|
-
def serialize_task_run_args(args)
|
|
47
|
-
serialized_args = {}
|
|
48
|
-
_task_run_args.each do |arg_name|
|
|
49
|
-
next unless args.key?(arg_name)
|
|
50
|
-
|
|
51
|
-
value = args[arg_name]
|
|
52
|
-
serialized_args[arg_name.to_s] = if value.respond_to?(:to_global_id)
|
|
53
|
-
value.to_global_id.to_s
|
|
54
|
-
else
|
|
55
|
-
value
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
serialized_args
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
end
|
data/lib/raif/evals/llm_judge.rb
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Raif
|
|
4
|
-
module Evals
|
|
5
|
-
class LlmJudge < Raif::Task
|
|
6
|
-
# Set default temperature for consistent judging
|
|
7
|
-
llm_temperature 0.0
|
|
8
|
-
|
|
9
|
-
# Default to JSON response format for structured output
|
|
10
|
-
llm_response_format :json
|
|
11
|
-
|
|
12
|
-
task_run_arg :content_to_judge # the content to judge
|
|
13
|
-
task_run_arg :additional_context # additional context to be provided to the judge
|
|
14
|
-
|
|
15
|
-
def default_llm_model_key
|
|
16
|
-
Raif.config.evals_default_llm_judge_model_key || super
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def judgment_reasoning
|
|
20
|
-
parsed_response["reasoning"] if completed?
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def judgment_confidence
|
|
24
|
-
parsed_response["confidence"] if completed?
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def low_confidence?
|
|
28
|
-
judgment_confidence && judgment_confidence < 0.5
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
File without changes
|