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
|
@@ -1,18 +1,23 @@
|
|
|
1
|
-
<
|
|
1
|
+
<div class="d-flex justify-content-between align-items-center my-4">
|
|
2
|
+
<h1 class="mb-0"><%= t("raif.admin.common.tasks") %></h1>
|
|
3
|
+
<%= link_to raif.admin_stats_tasks_path, class: "btn btn-outline-primary" do %>
|
|
4
|
+
<%= t("raif.admin.common.stats") %> »
|
|
5
|
+
<% end %>
|
|
6
|
+
</div>
|
|
2
7
|
|
|
3
8
|
<div class="row">
|
|
4
9
|
<div class="col-12">
|
|
5
10
|
<%= form_tag raif.admin_tasks_path, method: :get, class: "mb-4" do %>
|
|
6
11
|
<div class="row align-items-end">
|
|
7
|
-
<div class="col-md-
|
|
12
|
+
<div class="col-md-3">
|
|
8
13
|
<div class="form-group">
|
|
9
14
|
<label for="task_types"><%= t("raif.admin.common.type") %></label>
|
|
10
15
|
<%= select_tag :task_types,
|
|
11
|
-
options_for_select([["
|
|
12
|
-
{ class: "form-select" } %>
|
|
16
|
+
options_for_select([[t("raif.admin.common.all"), "all"]] + @task_types.map{|type| [type, type] }, @selected_type),
|
|
17
|
+
{ class: "form-select", data: { controller: "raif--tom-select" } } %>
|
|
13
18
|
</div>
|
|
14
19
|
</div>
|
|
15
|
-
<div class="col-md-
|
|
20
|
+
<div class="col-md-3">
|
|
16
21
|
<div class="form-group">
|
|
17
22
|
<label for="task_statuses"><%= t("raif.admin.common.status") %></label>
|
|
18
23
|
<%= select_tag :task_statuses,
|
|
@@ -26,7 +31,18 @@
|
|
|
26
31
|
],
|
|
27
32
|
@selected_statuses
|
|
28
33
|
),
|
|
29
|
-
{ class: "form-select" } %>
|
|
34
|
+
{ class: "form-select", data: { controller: "raif--tom-select" } } %>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
<div class="col-md-3">
|
|
38
|
+
<div class="form-group">
|
|
39
|
+
<label for="llm_model_key"><%= t("raif.admin.common.model") %></label>
|
|
40
|
+
<%= select_tag :llm_model_key,
|
|
41
|
+
options_for_select(
|
|
42
|
+
[[t("raif.admin.common.all"), ""]] + @llm_model_keys.map { |key| [key, key] },
|
|
43
|
+
@selected_llm_model_key
|
|
44
|
+
),
|
|
45
|
+
{ class: "form-select", data: { controller: "raif--tom-select" } } %>
|
|
30
46
|
</div>
|
|
31
47
|
</div>
|
|
32
48
|
<div class="col-md-2">
|
|
@@ -46,6 +62,7 @@
|
|
|
46
62
|
<th><%= t("raif.admin.common.creator") %></th>
|
|
47
63
|
<th><%= t("raif.admin.common.model") %></th>
|
|
48
64
|
<th><%= t("raif.admin.common.status") %></th>
|
|
65
|
+
<th><%= t("raif.admin.common.duration") %></th>
|
|
49
66
|
<th><%= t("raif.admin.common.prompt") %></th>
|
|
50
67
|
</tr>
|
|
51
68
|
</thead>
|
|
@@ -68,12 +68,24 @@
|
|
|
68
68
|
<% end %>
|
|
69
69
|
</div>
|
|
70
70
|
</div>
|
|
71
|
+
<div class="row mb-3">
|
|
72
|
+
<div class="col-md-3"><strong><%= t("raif.admin.common.duration") %>:</strong></div>
|
|
73
|
+
<div class="col-md-9"><%= @task.runtime_duration %></div>
|
|
74
|
+
</div>
|
|
71
75
|
<% if @task.requested_language_key.present? %>
|
|
72
76
|
<div class="row mb-3">
|
|
73
77
|
<div class="col-md-3"><strong><%= t("raif.admin.common.requested_language") %>:</strong></div>
|
|
74
78
|
<div class="col-md-9"><%= @task.requested_language_key %></div>
|
|
75
79
|
</div>
|
|
76
80
|
<% end %>
|
|
81
|
+
<% if @task.run_with.present? %>
|
|
82
|
+
<div class="row mb-3">
|
|
83
|
+
<div class="col-md-3"><strong><%= t("raif.admin.common.run_with") %>:</strong></div>
|
|
84
|
+
<div class="col-md-9">
|
|
85
|
+
<pre class="pre-wrap mb-0"><%= JSON.pretty_generate(@task.run_with) %></pre>
|
|
86
|
+
</div>
|
|
87
|
+
</div>
|
|
88
|
+
<% end %>
|
|
77
89
|
</div>
|
|
78
90
|
</div>
|
|
79
91
|
|
|
@@ -93,22 +105,63 @@
|
|
|
93
105
|
<div class="col-md-3"><strong><%= t("raif.admin.common.created_at") %>:</strong></div>
|
|
94
106
|
<div class="col-md-9"><%= @task.raif_model_completion.created_at.rfc822 %></div>
|
|
95
107
|
</div>
|
|
108
|
+
<div class="row mb-3">
|
|
109
|
+
<div class="col-md-3"><strong><%= t("raif.admin.common.retry_count") %>:</strong></div>
|
|
110
|
+
<div class="col-md-9"><%= @task.raif_model_completion.retry_count %></div>
|
|
111
|
+
</div>
|
|
96
112
|
<div class="row mb-3">
|
|
97
113
|
<div class="col-md-3"><strong><%= t("raif.admin.common.prompt_tokens") %>:</strong></div>
|
|
98
|
-
<div class="col-md-9"
|
|
114
|
+
<div class="col-md-9">
|
|
115
|
+
<% if @task.raif_model_completion.prompt_tokens %>
|
|
116
|
+
<%= number_with_delimiter(@task.raif_model_completion.prompt_tokens) %>
|
|
117
|
+
<% if @task.raif_model_completion.prompt_token_cost %>
|
|
118
|
+
<small>(<%= t("raif.admin.common.est_cost") %>: <%= "$" %><%= number_with_precision(@task.raif_model_completion.prompt_token_cost, precision: 6) %>)</small>
|
|
119
|
+
<% end %>
|
|
120
|
+
<% else %>
|
|
121
|
+
-
|
|
122
|
+
<% end %>
|
|
123
|
+
</div>
|
|
99
124
|
</div>
|
|
100
125
|
<div class="row mb-3">
|
|
101
126
|
<div class="col-md-3"><strong><%= t("raif.admin.common.completion_tokens") %>:</strong></div>
|
|
102
|
-
<div class="col-md-9"
|
|
127
|
+
<div class="col-md-9">
|
|
128
|
+
<% if @task.raif_model_completion.completion_tokens %>
|
|
129
|
+
<%= number_with_delimiter(@task.raif_model_completion.completion_tokens) %>
|
|
130
|
+
<% if @task.raif_model_completion.output_token_cost %>
|
|
131
|
+
<small>(<%= t("raif.admin.common.est_cost") %>: <%= "$" %><%= number_with_precision(@task.raif_model_completion.output_token_cost, precision: 6) %>)</small>
|
|
132
|
+
<% end %>
|
|
133
|
+
<% else %>
|
|
134
|
+
-
|
|
135
|
+
<% end %>
|
|
136
|
+
</div>
|
|
103
137
|
</div>
|
|
104
138
|
<div class="row mb-3">
|
|
105
139
|
<div class="col-md-3"><strong><%= t("raif.admin.common.total_tokens") %>:</strong></div>
|
|
106
|
-
<div class="col-md-9"
|
|
140
|
+
<div class="col-md-9">
|
|
141
|
+
<% if @task.raif_model_completion.total_tokens %>
|
|
142
|
+
<%= number_with_delimiter(@task.raif_model_completion.total_tokens) %>
|
|
143
|
+
<% if @task.raif_model_completion.total_cost %>
|
|
144
|
+
<small>(<%= t("raif.admin.common.est_cost") %>: <%= "$" %><%= number_with_precision(@task.raif_model_completion.total_cost, precision: 6) %>)</small>
|
|
145
|
+
<% end %>
|
|
146
|
+
<% else %>
|
|
147
|
+
-
|
|
148
|
+
<% end %>
|
|
149
|
+
</div>
|
|
150
|
+
</div>
|
|
151
|
+
<div class="row mb-3">
|
|
152
|
+
<div class="col-md-3"><strong><%= t("raif.admin.common.cache_read_input_tokens") %>:</strong></div>
|
|
153
|
+
<div class="col-md-9"><%= @task.raif_model_completion.cache_read_input_tokens ? number_with_delimiter(@task.raif_model_completion.cache_read_input_tokens) : "-" %></div>
|
|
154
|
+
</div>
|
|
155
|
+
<div class="row mb-3">
|
|
156
|
+
<div class="col-md-3"><strong><%= t("raif.admin.common.cache_creation_input_tokens") %>:</strong></div>
|
|
157
|
+
<div class="col-md-9"><%= @task.raif_model_completion.cache_creation_input_tokens ? number_with_delimiter(@task.raif_model_completion.cache_creation_input_tokens) : "-" %></div>
|
|
107
158
|
</div>
|
|
108
159
|
</div>
|
|
109
160
|
</div>
|
|
110
161
|
<% end %>
|
|
111
162
|
|
|
163
|
+
<%= render "raif/admin/model_tools/list", model_tools: @task.available_model_tools_map %>
|
|
164
|
+
|
|
112
165
|
<div class="card mb-4">
|
|
113
166
|
<div class="card-header">
|
|
114
167
|
<h5 class="mb-0"><%= t("raif.admin.common.system_prompt") %></h5>
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
<%# locals: (conversation:, conversation_entry:) %>
|
|
2
|
+
|
|
1
3
|
<%= form_with model: conversation_entry,
|
|
2
4
|
url: raif.conversation_entries_path(conversation),
|
|
5
|
+
id: dom_id(conversation, "entry_form"),
|
|
3
6
|
local: true do |f| %>
|
|
4
7
|
|
|
5
8
|
<% if conversation_entry.raif_user_tool_invocation %>
|
|
@@ -6,13 +6,17 @@
|
|
|
6
6
|
|
|
7
7
|
<% if content.present? %>
|
|
8
8
|
<div class="mb-1 rounded-2 p-3 <%= message_type == :user ? "bg-primary text-white" : "border" %>">
|
|
9
|
-
<%
|
|
10
|
-
|
|
11
|
-
<%= simple_format content %>
|
|
12
|
-
<% when "html" %>
|
|
13
|
-
<%= sanitize content %>
|
|
9
|
+
<% if message_type == :user %>
|
|
10
|
+
<%= simple_format h(content), {}, sanitize: false %>
|
|
14
11
|
<% else %>
|
|
15
|
-
|
|
12
|
+
<% case local_assigns[:conversation_entry]&.response_format %>
|
|
13
|
+
<% when "text" %>
|
|
14
|
+
<%= simple_format content %>
|
|
15
|
+
<% when "html" %>
|
|
16
|
+
<%= sanitize content %>
|
|
17
|
+
<% else %>
|
|
18
|
+
<%= content %>
|
|
19
|
+
<% end %>
|
|
16
20
|
<% end %>
|
|
17
21
|
|
|
18
22
|
<% if message_type == :model_response && local_assigns[:conversation_entry]&.citations.present? %>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<%# locals: (conversation:) %>
|
|
2
|
+
|
|
3
|
+
<tr>
|
|
4
|
+
<td class="ps-2"><%= conversation.created_at.strftime("%B %d, %Y") %></td>
|
|
5
|
+
<td>
|
|
6
|
+
<%= link_to t("raif.conversations.index.table.view"),
|
|
7
|
+
raif.conversation_path(conversation),
|
|
8
|
+
class: "btn btn-sm btn-primary" %>
|
|
9
|
+
</td>
|
|
10
|
+
</tr>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<%# locals: (conversation:, conversation_entry:) %>
|
|
2
|
+
|
|
3
|
+
<%# Update the conversation entry now that it's been processed & has a model response %>
|
|
4
|
+
<%= turbo_stream.replace conversation_entry do %>
|
|
5
|
+
<%= render conversation_entry %>
|
|
6
|
+
<% end %>
|
|
7
|
+
|
|
8
|
+
<%= turbo_stream.replace dom_id(conversation, "entry_form") do %>
|
|
9
|
+
<%= render "raif/conversation_entries/form", conversation: conversation, conversation_entry: Raif::ConversationEntry.new %>
|
|
10
|
+
<% end %>
|
|
11
|
+
|
|
12
|
+
<%= turbo_stream.action :raif_scroll_to_bottom, ActionView::RecordIdentifier.dom_id(conversation, :entries) %>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<div class="conversation-history p-4">
|
|
2
|
+
<h2><%= t("raif.conversations.index.title") %></h2>
|
|
3
|
+
|
|
4
|
+
<% if @conversations.any? %>
|
|
5
|
+
<div class="table-responsive">
|
|
6
|
+
<table class="table table-striped">
|
|
7
|
+
<thead>
|
|
8
|
+
<tr>
|
|
9
|
+
<th><%= t("raif.conversations.index.table.started") %></th>
|
|
10
|
+
<th><%= t("raif.conversations.index.table.actions") %></th>
|
|
11
|
+
</tr>
|
|
12
|
+
</thead>
|
|
13
|
+
<tbody>
|
|
14
|
+
<%= render collection: @conversations, partial: "raif/conversations/conversation" %>
|
|
15
|
+
</tbody>
|
|
16
|
+
</table>
|
|
17
|
+
</div>
|
|
18
|
+
<% else %>
|
|
19
|
+
<div class="text-center py-4">
|
|
20
|
+
<p class="text-muted"><%= t("raif.conversations.index.no_conversations") %></p>
|
|
21
|
+
</div>
|
|
22
|
+
<% end %>
|
|
23
|
+
</div>
|
data/config/importmap.rb
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
pin "raif", to: "raif.js"
|
|
4
|
+
pin "raif_admin", to: "raif_admin.js"
|
|
4
5
|
|
|
5
6
|
pin "raif/controllers/conversations_controller", to: "raif/controllers/conversations_controller.js"
|
|
7
|
+
pin "raif/admin/judge_config_controller", to: "raif/admin/judge_config_controller.js"
|
|
8
|
+
pin "raif/admin/select_all_checkboxes_controller", to: "raif/admin/select_all_checkboxes_controller.js"
|
|
9
|
+
pin "raif/admin/cost_estimate_controller", to: "raif/admin/cost_estimate_controller.js"
|
|
10
|
+
pin "raif/admin/tom_select_controller", to: "raif/admin/tom_select_controller.js"
|
|
11
|
+
pin "raif/admin/table_search_controller", to: "raif/admin/table_search_controller.js"
|
|
12
|
+
pin "raif/admin/sortable_table_controller", to: "raif/admin/sortable_table_controller.js"
|
|
13
|
+
pin "raif/admin/copy_to_clipboard_controller", to: "raif/admin/copy_to_clipboard_controller.js"
|
|
6
14
|
pin "raif/stream_actions/raif_scroll_to_bottom", to: "raif/stream_actions/raif_scroll_to_bottom.js"
|
data/config/locales/admin.en.yml
CHANGED
|
@@ -10,31 +10,46 @@ en:
|
|
|
10
10
|
agents: Agents
|
|
11
11
|
all: All
|
|
12
12
|
arguments: Arguments
|
|
13
|
+
arguments_schema: Arguments Schema
|
|
13
14
|
at: at
|
|
15
|
+
available_tools: Available Tools
|
|
16
|
+
cache_creation_input_tokens: Cache Creation Tokens
|
|
17
|
+
cache_read_input_tokens: Cache Read Tokens
|
|
14
18
|
citations: Citations
|
|
15
19
|
completed: Completed
|
|
16
20
|
completed_at: Completed At
|
|
17
21
|
completion_tokens: Completion Tokens
|
|
22
|
+
config: Config
|
|
18
23
|
conversation_entries: Conversation Entries
|
|
19
24
|
conversation_history: Conversation History
|
|
20
25
|
conversations: Conversations
|
|
21
26
|
count: Count
|
|
22
27
|
created_at: Created At
|
|
23
28
|
creator: Creator
|
|
29
|
+
default: default
|
|
30
|
+
description: Description
|
|
24
31
|
details: Details
|
|
32
|
+
duration: Duration
|
|
25
33
|
entries_count: Entries Count
|
|
26
34
|
entry: Entry
|
|
27
35
|
est_cost: est. cost
|
|
36
|
+
est_costs: est. costs
|
|
28
37
|
failed: Failed
|
|
29
38
|
failed_at: Failed At
|
|
39
|
+
failure_error: Failure Error
|
|
40
|
+
failure_reason: Failure Reason
|
|
30
41
|
filter: Filter
|
|
31
42
|
final_answer: Final Answer
|
|
32
43
|
id: ID
|
|
33
44
|
in_progress: In Progress
|
|
45
|
+
inferred_from_citations: Inferred from response citations.
|
|
34
46
|
initial_task: Initial Task
|
|
47
|
+
input: Input
|
|
48
|
+
input_token_cost: Input Token Cost
|
|
35
49
|
invalid_json: Invalid JSON
|
|
36
50
|
iterations: Iterations
|
|
37
51
|
language: Language
|
|
52
|
+
llms: LLMs
|
|
38
53
|
messages: Messages
|
|
39
54
|
model: Model
|
|
40
55
|
model_completion: Model Completion
|
|
@@ -48,6 +63,9 @@ en:
|
|
|
48
63
|
no_model_tool_invocations: No model tool invocations found.
|
|
49
64
|
no_tasks: No tasks found.
|
|
50
65
|
no_tool_calls: No tool calls
|
|
66
|
+
none: None
|
|
67
|
+
output: Output
|
|
68
|
+
output_token_cost: Output Token Cost
|
|
51
69
|
pending: Pending
|
|
52
70
|
period_all: All time
|
|
53
71
|
period_day: Past 24 hours
|
|
@@ -56,16 +74,21 @@ en:
|
|
|
56
74
|
prettified: Prettified
|
|
57
75
|
prompt: Prompt
|
|
58
76
|
prompt_tokens: Prompt Tokens
|
|
77
|
+
provider_managed_tool_calls: Provider-Managed Tool Calls
|
|
78
|
+
provider_tool_call_id: Provider Tool Call ID
|
|
59
79
|
raw: Raw
|
|
60
80
|
rendered: Rendered
|
|
61
81
|
requested_language: Requested Language
|
|
62
82
|
response: Response
|
|
83
|
+
response_array: Response Array
|
|
63
84
|
response_format: Response Format
|
|
64
|
-
response_format_parameter: Response Format Parameter
|
|
65
85
|
result: Result
|
|
86
|
+
retry_count: Retry Count
|
|
87
|
+
run_with: Run With
|
|
66
88
|
running: Running
|
|
67
89
|
since: Since
|
|
68
90
|
source: Source
|
|
91
|
+
sources: Sources
|
|
69
92
|
started_at: Started At
|
|
70
93
|
stats: Stats
|
|
71
94
|
status: Status
|
|
@@ -73,15 +96,31 @@ en:
|
|
|
73
96
|
task: Task
|
|
74
97
|
tasks: Tasks
|
|
75
98
|
tool_arguments: Tool Arguments
|
|
99
|
+
tool_call: Tool Call
|
|
76
100
|
tool_calls: Tool Calls
|
|
77
101
|
tool_invocations: Tool Invocations
|
|
78
102
|
tool_name: Tool Name
|
|
103
|
+
tool_result: Tool Result
|
|
79
104
|
tool_type: Tool Type
|
|
105
|
+
total: Total
|
|
80
106
|
total_cost: Total Cost
|
|
81
107
|
total_tokens: Total Tokens
|
|
82
108
|
type: Type
|
|
83
109
|
update: Update
|
|
84
110
|
user_message: User Message
|
|
111
|
+
config:
|
|
112
|
+
show:
|
|
113
|
+
configuration_settings: Configuration Settings
|
|
114
|
+
default: default
|
|
115
|
+
key: Key
|
|
116
|
+
no_embedding_models_registered: No embedding models registered
|
|
117
|
+
no_llms_registered: No LLMs registered
|
|
118
|
+
not_set: Not set
|
|
119
|
+
registered_embedding_models: Registered Embedding Models
|
|
120
|
+
registered_llms: Registered LLMs
|
|
121
|
+
setting: Setting
|
|
122
|
+
title: Raif Configuration
|
|
123
|
+
value: Value
|
|
85
124
|
conversations:
|
|
86
125
|
show:
|
|
87
126
|
back_to_conversations: Back to Conversations
|
|
@@ -89,6 +128,18 @@ en:
|
|
|
89
128
|
layouts:
|
|
90
129
|
admin:
|
|
91
130
|
title: Raif Admin
|
|
131
|
+
llms:
|
|
132
|
+
index:
|
|
133
|
+
api_name: API Name
|
|
134
|
+
cost_note: Costs shown are per 1,000,000 tokens.
|
|
135
|
+
default_badge: default
|
|
136
|
+
input_cost: Input Cost (per 1M tokens)
|
|
137
|
+
name: Name
|
|
138
|
+
no_llms: No LLMs are currently registered.
|
|
139
|
+
output_cost: Output Cost (per 1M tokens)
|
|
140
|
+
provider: Provider
|
|
141
|
+
search_placeholder: Search by name, provider, or API name...
|
|
142
|
+
title: Registered LLMs
|
|
92
143
|
model_completions:
|
|
93
144
|
show:
|
|
94
145
|
back_to_model_completions: Back to Model Completions
|
|
@@ -96,10 +147,119 @@ en:
|
|
|
96
147
|
model_tool_invocations:
|
|
97
148
|
show:
|
|
98
149
|
back_to_model_tool_invocations: Back to Model Tool Invocations
|
|
150
|
+
observation_disclaimer: This observation is regenerated from current data and code. It may differ from what was originally sent to the model.
|
|
151
|
+
observation_sent_to_model: Observation Sent to Model
|
|
152
|
+
observation_unavailable: 'Could not generate observation: %{error}'
|
|
99
153
|
title: 'Model Tool Invocation #%{id}'
|
|
154
|
+
prompt_studio:
|
|
155
|
+
agents:
|
|
156
|
+
show:
|
|
157
|
+
agent_details: Agent Details
|
|
158
|
+
page_title: 'Prompt Studio - Agent #%{id}'
|
|
159
|
+
batch_runs:
|
|
160
|
+
create:
|
|
161
|
+
confirm: This will create a batch run and send requests to the selected LLM. Continue?
|
|
162
|
+
error: 'Batch run failed: %{message}'
|
|
163
|
+
new_batch_run: New Batch Run
|
|
164
|
+
no_tasks_selected: Please select at least one task.
|
|
165
|
+
submit: Run Selected Batch
|
|
166
|
+
tasks_selected: tasks selected
|
|
167
|
+
title: Batch Run
|
|
168
|
+
judge:
|
|
169
|
+
new_response: New Response
|
|
170
|
+
original_response: Original Response
|
|
171
|
+
tie: Tie
|
|
172
|
+
winner: 'Winner: %{name}'
|
|
173
|
+
judge_config:
|
|
174
|
+
comparison_criteria_label: Comparison Criteria
|
|
175
|
+
comparison_criteria_placeholder: Which response better addresses the prompt
|
|
176
|
+
criteria_label: Criteria
|
|
177
|
+
criteria_placeholder: Response is accurate and complete
|
|
178
|
+
description: Optionally evaluate each result with an LLM judge.
|
|
179
|
+
include_original_prompt_as_context_description: Provides the original task prompt to the judge as additional context for evaluation.
|
|
180
|
+
include_original_prompt_as_context_label: Include original prompt as context
|
|
181
|
+
judge_model_label: Judge Model
|
|
182
|
+
rubric_accuracy: Accuracy
|
|
183
|
+
rubric_clarity: Clarity
|
|
184
|
+
rubric_helpfulness: Helpfulness
|
|
185
|
+
rubric_label: Scoring Rubric
|
|
186
|
+
strict_mode_label: Strict Mode
|
|
187
|
+
summarization_description: Uses the original task prompt as the source content and the new response as the summary to evaluate.
|
|
188
|
+
title: LLM Judge Configuration
|
|
189
|
+
type_binary: Binary (Pass/Fail)
|
|
190
|
+
type_comparative: Comparative (A vs B)
|
|
191
|
+
type_label: Judge Type
|
|
192
|
+
type_none: None
|
|
193
|
+
type_scored: Scored (Rubric)
|
|
194
|
+
type_summarization: Summarization
|
|
195
|
+
show:
|
|
196
|
+
average_score: Average Score
|
|
197
|
+
judge_reasoning: Judge Reasoning
|
|
198
|
+
judge_result: Judge Result
|
|
199
|
+
new_response: New Response
|
|
200
|
+
original_response: Original Response
|
|
201
|
+
page_title: 'Batch Run #%{id}'
|
|
202
|
+
pass_rate: Pass Rate
|
|
203
|
+
progress: Progress
|
|
204
|
+
results: Results
|
|
205
|
+
source_task: Source Task
|
|
206
|
+
summary: Summary
|
|
207
|
+
status:
|
|
208
|
+
completed: Completed
|
|
209
|
+
failed: Failed
|
|
210
|
+
in_progress: In Progress
|
|
211
|
+
judging: Judging
|
|
212
|
+
pending: Pending
|
|
213
|
+
running: Running
|
|
214
|
+
common:
|
|
215
|
+
back: Back
|
|
216
|
+
created_after: Created After
|
|
217
|
+
created_before: Created Before
|
|
218
|
+
current_prompt: Current Prompt
|
|
219
|
+
current_system_prompt: Current System Prompt
|
|
220
|
+
estimated_cost: "~%{cost} (estimate)"
|
|
221
|
+
estimated_tokens: "~%{count} tokens (estimate)"
|
|
222
|
+
no_instances: No instances found.
|
|
223
|
+
original_prompt: Original Prompt
|
|
224
|
+
original_system_prompt: Original System Prompt
|
|
225
|
+
prompt_changed: Prompt Changed
|
|
226
|
+
prompt_studio: Prompt Studio
|
|
227
|
+
prompt_tokens: "%{count} tokens"
|
|
228
|
+
prompt_unchanged: Prompt Unchanged
|
|
229
|
+
run_in_prompt_studio: Run in Prompt Studio
|
|
230
|
+
runs_disabled: Prompt Studio runs are not enabled in this environment.
|
|
231
|
+
select_type: Select a type to browse instances
|
|
232
|
+
system_prompt_changed: System Prompt Changed
|
|
233
|
+
system_prompt_unchanged: System Prompt Unchanged
|
|
234
|
+
type: Type
|
|
235
|
+
warning_stale_reference: 'Warning: Some run_with references could not be loaded. The current prompt may differ from what would be generated with the original data.'
|
|
236
|
+
conversations:
|
|
237
|
+
show:
|
|
238
|
+
conversation_details: Conversation Details
|
|
239
|
+
page_title: 'Prompt Studio - Conversation #%{id}'
|
|
240
|
+
tasks:
|
|
241
|
+
rerun:
|
|
242
|
+
confirm: This will create a new task and send a request to the selected LLM. Continue?
|
|
243
|
+
description: Re-run this task with the current prompt templates and a selected model. This will create a new task record.
|
|
244
|
+
error: 'Re-run failed: %{message}'
|
|
245
|
+
invalid_model: Please select a valid model.
|
|
246
|
+
running: Running...
|
|
247
|
+
submit: Re-run Task
|
|
248
|
+
title: Re-run with Current Prompts
|
|
249
|
+
show:
|
|
250
|
+
new_response: New Response
|
|
251
|
+
original_response: Original Response
|
|
252
|
+
page_title: 'Prompt Studio - Task #%{id}'
|
|
253
|
+
response_comparison: Response Comparison
|
|
254
|
+
task_details: Task Details
|
|
255
|
+
view_response: View Response
|
|
100
256
|
stats:
|
|
257
|
+
model_tool_invocations:
|
|
258
|
+
back_to_stats: Back to Stats
|
|
259
|
+
title: Model Tool Invocation Stats
|
|
101
260
|
tasks:
|
|
102
261
|
back_to_stats: Back to Stats
|
|
262
|
+
show_model_breakdown: Show model breakdown
|
|
103
263
|
title: Task Stats
|
|
104
264
|
tasks:
|
|
105
265
|
show:
|
data/config/locales/en.yml
CHANGED
|
@@ -6,10 +6,7 @@ en:
|
|
|
6
6
|
errors:
|
|
7
7
|
available_model_tools:
|
|
8
8
|
too_short: must have at least 1 tool in addition to the agent_final_answer tool
|
|
9
|
-
|
|
10
|
-
errors:
|
|
11
|
-
available_model_tools:
|
|
12
|
-
too_short: must have at least 1 tool
|
|
9
|
+
final_answer_warning: 'Warning: This is your final iteration. You must provide your final answer using the agent_final_answer tool.'
|
|
13
10
|
common:
|
|
14
11
|
send: Send
|
|
15
12
|
sources: Sources
|
|
@@ -18,8 +15,17 @@ en:
|
|
|
18
15
|
type_your_message: Type your message...
|
|
19
16
|
conversation:
|
|
20
17
|
initial_chat_message: Hello, how can I help you today?
|
|
18
|
+
conversations:
|
|
19
|
+
index:
|
|
20
|
+
no_conversations: No conversations found.
|
|
21
|
+
table:
|
|
22
|
+
actions: Actions
|
|
23
|
+
started: Started
|
|
24
|
+
view: View
|
|
25
|
+
title: Past Conversations
|
|
21
26
|
embedding_model_names:
|
|
22
27
|
bedrock_titan_embed_text_v2: AWS Bedrock Titan Text Embeddings v2
|
|
28
|
+
google_gemini_embedding_2: Google Gemini Embedding 2
|
|
23
29
|
open_ai_text_embedding_3_large: OpenAI Text Embedding 3 Large
|
|
24
30
|
open_ai_text_embedding_3_small: OpenAI Text Embedding 3 Small
|
|
25
31
|
open_ai_text_embedding_ada_002: OpenAI Text Embedding Ada 002
|
|
@@ -51,6 +57,13 @@ en:
|
|
|
51
57
|
anthropic_claude_3_5_sonnet: Anthropic Claude 3.5 Sonnet
|
|
52
58
|
anthropic_claude_3_7_sonnet: Anthropic Claude 3.7 Sonnet
|
|
53
59
|
anthropic_claude_3_opus: Anthropic Claude 3 Opus
|
|
60
|
+
anthropic_claude_4_1_opus: Anthropic Claude 4.1 Opus
|
|
61
|
+
anthropic_claude_4_5_haiku: Anthropic Claude 4.5 Haiku
|
|
62
|
+
anthropic_claude_4_5_opus: Anthropic Claude 4.5 Opus
|
|
63
|
+
anthropic_claude_4_5_sonnet: Anthropic Claude 4.5 Sonnet
|
|
64
|
+
anthropic_claude_4_6_opus: Anthropic Claude 4.6 Opus
|
|
65
|
+
anthropic_claude_4_6_sonnet: Anthropic Claude 4.6 Sonnet
|
|
66
|
+
anthropic_claude_4_7_opus: Anthropic Claude 4.7 Opus
|
|
54
67
|
anthropic_claude_4_opus: Anthropic Claude 4 Opus
|
|
55
68
|
anthropic_claude_4_sonnet: Anthropic Claude 4 Sonnet
|
|
56
69
|
bedrock_amazon_nova_lite: Amazon Nova Lite (via AWS Bedrock)
|
|
@@ -60,8 +73,25 @@ en:
|
|
|
60
73
|
bedrock_claude_3_5_sonnet: Anthropic Claude 3.5 Sonnet (via AWS Bedrock)
|
|
61
74
|
bedrock_claude_3_7_sonnet: Anthropic Claude 3.7 Sonnet (via AWS Bedrock)
|
|
62
75
|
bedrock_claude_3_opus: Anthropic Claude 3 Opus (via AWS Bedrock)
|
|
76
|
+
bedrock_claude_4_1_opus: Claude 4.1 Opus (via AWS Bedrock)
|
|
77
|
+
bedrock_claude_4_5_haiku: Anthropic Claude 4.5 Haiku (via AWS Bedrock)
|
|
78
|
+
bedrock_claude_4_5_opus: Anthropic Claude 4.5 Opus (via AWS Bedrock)
|
|
79
|
+
bedrock_claude_4_5_sonnet: Anthropic Claude 4.5 Sonnet (via AWS Bedrock)
|
|
80
|
+
bedrock_claude_4_6_opus: Anthropic Claude 4.6 Opus (via AWS Bedrock)
|
|
81
|
+
bedrock_claude_4_6_sonnet: Anthropic Claude 4.6 Sonnet (via AWS Bedrock)
|
|
82
|
+
bedrock_claude_4_7_opus: Anthropic Claude 4.7 Opus (via AWS Bedrock)
|
|
63
83
|
bedrock_claude_4_opus: Anthropic Claude 4 Opus (via AWS Bedrock)
|
|
64
84
|
bedrock_claude_4_sonnet: Anthropic Claude 4 Sonnet (via AWS Bedrock)
|
|
85
|
+
bedrock_deepseek_r1: DeepSeek R1 (via AWS Bedrock)
|
|
86
|
+
bedrock_deepseek_v3_2: DeepSeek v3.2 (via AWS Bedrock)
|
|
87
|
+
bedrock_gpt_oss_120b: OpenAI GPT-OSS 120B (via AWS Bedrock)
|
|
88
|
+
bedrock_gpt_oss_20b: OpenAI GPT-OSS 20B (via AWS Bedrock)
|
|
89
|
+
google_gemini_2_5_flash: Google Gemini 2.5 Flash
|
|
90
|
+
google_gemini_2_5_pro: Google Gemini 2.5 Pro
|
|
91
|
+
google_gemini_3_0_flash: Google Gemini 3 Flash
|
|
92
|
+
google_gemini_3_0_pro: Google Gemini 3 Pro
|
|
93
|
+
google_gemini_3_1_flash_lite: Google Gemini 3.1 Flash-Lite
|
|
94
|
+
google_gemini_3_1_pro: Google Gemini 3.1 Pro
|
|
65
95
|
open_ai_gpt_3_5_turbo: OpenAI GPT-3.5 Turbo
|
|
66
96
|
open_ai_gpt_4_1: OpenAI GPT-4.1
|
|
67
97
|
open_ai_gpt_4_1_mini: OpenAI GPT-4.1 Mini
|
|
@@ -69,6 +99,12 @@ en:
|
|
|
69
99
|
open_ai_gpt_4o: OpenAI GPT-4o
|
|
70
100
|
open_ai_gpt_4o_mini: OpenAI GPT-4o Mini
|
|
71
101
|
open_ai_gpt_5: OpenAI GPT-5
|
|
102
|
+
open_ai_gpt_5_1: OpenAI GPT-5.1
|
|
103
|
+
open_ai_gpt_5_2: OpenAI GPT-5.2
|
|
104
|
+
open_ai_gpt_5_3: OpenAI GPT-5.3
|
|
105
|
+
open_ai_gpt_5_4: OpenAI GPT-5.4
|
|
106
|
+
open_ai_gpt_5_4_mini: OpenAI GPT-5.4 Mini
|
|
107
|
+
open_ai_gpt_5_4_nano: OpenAI GPT-5.4 Nano
|
|
72
108
|
open_ai_gpt_5_mini: OpenAI GPT-5 Mini
|
|
73
109
|
open_ai_gpt_5_nano: OpenAI GPT-5 Nano
|
|
74
110
|
open_ai_o1: OpenAI o1
|
|
@@ -83,8 +119,17 @@ en:
|
|
|
83
119
|
open_ai_responses_gpt_4o: OpenAI GPT-4o (Responses API)
|
|
84
120
|
open_ai_responses_gpt_4o_mini: OpenAI GPT-4o Mini (Responses API)
|
|
85
121
|
open_ai_responses_gpt_5: OpenAI GPT-5 (Responses API)
|
|
122
|
+
open_ai_responses_gpt_5_1: OpenAI GPT-5.1 (Responses API)
|
|
123
|
+
open_ai_responses_gpt_5_2: OpenAI GPT-5.2 (Responses API)
|
|
124
|
+
open_ai_responses_gpt_5_2_pro: OpenAI GPT-5.2 Pro (Responses API)
|
|
125
|
+
open_ai_responses_gpt_5_3: OpenAI GPT-5.3 (Responses API)
|
|
126
|
+
open_ai_responses_gpt_5_4: OpenAI GPT-5.4 (Responses API)
|
|
127
|
+
open_ai_responses_gpt_5_4_mini: OpenAI GPT-5.4 Mini (Responses API)
|
|
128
|
+
open_ai_responses_gpt_5_4_nano: OpenAI GPT-5.4 Nano (Responses API)
|
|
129
|
+
open_ai_responses_gpt_5_4_pro: OpenAI GPT-5.4 Pro (Responses API)
|
|
86
130
|
open_ai_responses_gpt_5_mini: OpenAI GPT-5 Mini (Responses API)
|
|
87
131
|
open_ai_responses_gpt_5_nano: OpenAI GPT-5 Nano (Responses API)
|
|
132
|
+
open_ai_responses_gpt_5_pro: OpenAI GPT-5 Pro (Responses API)
|
|
88
133
|
open_ai_responses_o1: OpenAI o1 (Responses API)
|
|
89
134
|
open_ai_responses_o1_mini: OpenAI o1 Mini (Responses API)
|
|
90
135
|
open_ai_responses_o1_pro: OpenAI o1 Pro (Responses API)
|
|
@@ -94,11 +139,29 @@ en:
|
|
|
94
139
|
open_ai_responses_o4_mini: OpenAI o4 Mini (Responses API)
|
|
95
140
|
open_router_claude_3_7_sonnet: Anthropic Claude 3.7 Sonnet (via OpenRouter)
|
|
96
141
|
open_router_deepseek_chat_v3: DeepSeek Chat v3 (via OpenRouter)
|
|
142
|
+
open_router_deepseek_v3_1: DeepSeek v3.1 (via OpenRouter)
|
|
143
|
+
open_router_deepseek_v3_2: DeepSeek v3.2 (via OpenRouter)
|
|
97
144
|
open_router_gemini_2_0_flash: Google Gemini 2.0 Flash (via OpenRouter)
|
|
145
|
+
open_router_gemini_2_5_flash: Gemini 2.5 Flash (via OpenRouter)
|
|
146
|
+
open_router_gemini_2_5_pro: Gemini 2.5 Pro (via OpenRouter)
|
|
147
|
+
open_router_gemini_3_1_flash_lite_preview: Gemini 3.1 Flash-Lite Preview (via OpenRouter)
|
|
148
|
+
open_router_gemini_3_1_pro_preview: Gemini 3.1 Pro Preview (via OpenRouter)
|
|
149
|
+
open_router_gemini_3_pro_preview: Gemini 3 Pro Preview (via OpenRouter)
|
|
150
|
+
open_router_google_gemma_4_31b_it: Google Gemma 4 31B IT (via OpenRouter)
|
|
151
|
+
open_router_grok_4: Grok 4 (via OpenRouter)
|
|
152
|
+
open_router_grok_4_1_fast: Grok 4.1 Fast (via OpenRouter)
|
|
153
|
+
open_router_grok_4_20: Grok 4.20 (via OpenRouter)
|
|
154
|
+
open_router_kimi_k2_5: Kimi K2.5 (via OpenRouter)
|
|
155
|
+
open_router_kimi_k2_thinking: Kimi K2 Thinking (via OpenRouter)
|
|
98
156
|
open_router_llama_3_1_8b_instruct: Meta Llama 3.1 8B Instruct (via OpenRouter)
|
|
99
157
|
open_router_llama_3_3_70b_instruct: Meta Llama 3.3 70B Instruct (via OpenRouter)
|
|
100
158
|
open_router_llama_4_maverick: Meta Llama 4 Maverick (via OpenRouter)
|
|
101
159
|
open_router_llama_4_scout: Meta Llama 4 Scout (via OpenRouter)
|
|
160
|
+
open_router_minimax_m2: Minimax M2 (via OpenRouter)
|
|
161
|
+
open_router_minimax_m2_1: Minimax M2.1 (via OpenRouter)
|
|
162
|
+
open_router_minimax_m2_5: Minimax M2.5 (via OpenRouter)
|
|
163
|
+
open_router_mistral_large_3_2512: Mistral Large 3 (via OpenRouter)
|
|
164
|
+
open_router_mistral_small_3_2_24b: Mistral Small 3.2 24B (via OpenRouter)
|
|
102
165
|
open_router_open_ai_gpt_oss_120b: OpenAI GPT-OSS 120B (via OpenRouter)
|
|
103
166
|
open_router_open_ai_gpt_oss_20b: OpenAI GPT-OSS 20B (via OpenRouter)
|
|
104
167
|
raif_test_llm: Raif Test LLM
|
data/config/routes.rb
CHANGED
|
@@ -17,6 +17,7 @@ Raif::Engine.routes.draw do
|
|
|
17
17
|
|
|
18
18
|
namespace :stats do
|
|
19
19
|
resources :tasks, only: [:index]
|
|
20
|
+
resources :model_tool_invocations, only: [:index]
|
|
20
21
|
end
|
|
21
22
|
|
|
22
23
|
resources :tasks, only: [:index, :show]
|
|
@@ -24,5 +25,14 @@ Raif::Engine.routes.draw do
|
|
|
24
25
|
resources :model_completions, only: [:index, :show]
|
|
25
26
|
resources :agents, only: [:index, :show]
|
|
26
27
|
resources :model_tool_invocations, only: [:index, :show]
|
|
28
|
+
resources :llms, only: [:index]
|
|
29
|
+
resource :config, only: [:show]
|
|
30
|
+
|
|
31
|
+
namespace :prompt_studio do
|
|
32
|
+
resources :tasks, only: [:index, :show, :create]
|
|
33
|
+
resources :conversations, only: [:index, :show]
|
|
34
|
+
resources :agents, only: [:index, :show]
|
|
35
|
+
resources :batch_runs, only: [:create, :show]
|
|
36
|
+
end
|
|
27
37
|
end
|
|
28
38
|
end
|