ruby_llm-agents 1.0.0.beta.1 → 1.1.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/app/controllers/concerns/ruby_llm/agents/paginatable.rb +9 -3
- data/app/controllers/concerns/ruby_llm/agents/sortable.rb +58 -0
- data/app/controllers/ruby_llm/agents/agents_controller.rb +59 -16
- data/app/controllers/ruby_llm/agents/dashboard_controller.rb +144 -20
- data/app/controllers/ruby_llm/agents/executions_controller.rb +13 -16
- data/app/controllers/ruby_llm/agents/workflows_controller.rb +279 -90
- data/app/helpers/ruby_llm/agents/application_helper.rb +100 -0
- data/app/mailers/ruby_llm/agents/alert_mailer.rb +84 -0
- data/app/mailers/ruby_llm/agents/application_mailer.rb +28 -0
- data/app/models/ruby_llm/agents/execution/analytics.rb +170 -20
- data/app/models/ruby_llm/agents/execution/scopes.rb +0 -31
- data/app/models/ruby_llm/agents/execution/workflow.rb +0 -129
- data/app/models/ruby_llm/agents/execution.rb +50 -14
- data/app/services/ruby_llm/agents/agent_registry.rb +18 -12
- data/app/views/layouts/ruby_llm/agents/application.html.erb +72 -76
- data/app/views/ruby_llm/agents/agents/_agent.html.erb +0 -12
- data/app/views/ruby_llm/agents/agents/_sortable_header.html.erb +56 -0
- data/app/views/ruby_llm/agents/agents/_workflow.html.erb +5 -15
- data/app/views/ruby_llm/agents/agents/index.html.erb +271 -100
- data/app/views/ruby_llm/agents/agents/show.html.erb +1 -0
- data/app/views/ruby_llm/agents/alert_mailer/alert_notification.html.erb +107 -0
- data/app/views/ruby_llm/agents/alert_mailer/alert_notification.text.erb +18 -0
- data/app/views/ruby_llm/agents/api_configurations/show.html.erb +4 -1
- data/app/views/ruby_llm/agents/dashboard/_agent_comparison.html.erb +66 -359
- data/app/views/ruby_llm/agents/dashboard/_model_comparison.html.erb +56 -0
- data/app/views/ruby_llm/agents/dashboard/_model_cost_breakdown.html.erb +115 -0
- data/app/views/ruby_llm/agents/dashboard/_now_strip.html.erb +35 -60
- data/app/views/ruby_llm/agents/dashboard/_top_errors.html.erb +17 -6
- data/app/views/ruby_llm/agents/dashboard/index.html.erb +373 -72
- data/app/views/ruby_llm/agents/executions/_execution.html.erb +0 -1
- data/app/views/ruby_llm/agents/executions/_filters.html.erb +51 -39
- data/app/views/ruby_llm/agents/executions/_list.html.erb +53 -195
- data/app/views/ruby_llm/agents/executions/_workflow_summary.html.erb +5 -20
- data/app/views/ruby_llm/agents/executions/index.html.erb +7 -83
- data/app/views/ruby_llm/agents/executions/show.html.erb +10 -20
- data/app/views/ruby_llm/agents/shared/_agent_type_badge.html.erb +2 -1
- data/app/views/ruby_llm/agents/shared/_doc_link.html.erb +12 -0
- data/app/views/ruby_llm/agents/shared/_executions_table.html.erb +3 -15
- data/app/views/ruby_llm/agents/shared/_filter_dropdown.html.erb +1 -1
- data/app/views/ruby_llm/agents/shared/_select_dropdown.html.erb +1 -1
- data/app/views/ruby_llm/agents/shared/_sortable_header.html.erb +53 -0
- data/app/views/ruby_llm/agents/shared/_status_badge.html.erb +7 -0
- data/app/views/ruby_llm/agents/shared/_status_dot.html.erb +1 -1
- data/app/views/ruby_llm/agents/shared/_workflow_type_badge.html.erb +9 -35
- data/app/views/ruby_llm/agents/system_config/show.html.erb +4 -1
- data/app/views/ruby_llm/agents/tenants/index.html.erb +4 -1
- data/app/views/ruby_llm/agents/workflows/_step_performance.html.erb +7 -15
- data/app/views/ruby_llm/agents/workflows/_structure_dsl.html.erb +539 -0
- data/app/views/ruby_llm/agents/workflows/_workflow_diagram.html.erb +920 -0
- data/app/views/ruby_llm/agents/workflows/index.html.erb +179 -0
- data/app/views/ruby_llm/agents/workflows/show.html.erb +164 -139
- data/config/routes.rb +1 -1
- data/lib/generators/ruby_llm_agents/agent_generator.rb +6 -36
- data/lib/generators/ruby_llm_agents/background_remover_generator.rb +7 -37
- data/lib/generators/ruby_llm_agents/embedder_generator.rb +5 -38
- data/lib/generators/ruby_llm_agents/image_analyzer_generator.rb +7 -37
- data/lib/generators/ruby_llm_agents/image_editor_generator.rb +7 -37
- data/lib/generators/ruby_llm_agents/image_generator_generator.rb +8 -41
- data/lib/generators/ruby_llm_agents/image_pipeline_generator.rb +18 -46
- data/lib/generators/ruby_llm_agents/image_transformer_generator.rb +7 -37
- data/lib/generators/ruby_llm_agents/image_upscaler_generator.rb +7 -37
- data/lib/generators/ruby_llm_agents/image_variator_generator.rb +7 -37
- data/lib/generators/ruby_llm_agents/install_generator.rb +33 -56
- data/lib/generators/ruby_llm_agents/migrate_structure_generator.rb +480 -0
- data/lib/generators/ruby_llm_agents/restructure_generator.rb +2 -2
- data/lib/generators/ruby_llm_agents/speaker_generator.rb +8 -39
- data/lib/generators/ruby_llm_agents/templates/agent.rb.tt +5 -8
- data/lib/generators/ruby_llm_agents/templates/application_agent.rb.tt +40 -42
- data/lib/generators/ruby_llm_agents/templates/application_background_remover.rb.tt +20 -22
- data/lib/generators/ruby_llm_agents/templates/application_embedder.rb.tt +24 -26
- data/lib/generators/ruby_llm_agents/templates/application_image_analyzer.rb.tt +20 -22
- data/lib/generators/ruby_llm_agents/templates/application_image_editor.rb.tt +19 -17
- data/lib/generators/ruby_llm_agents/templates/application_image_generator.rb.tt +31 -33
- data/lib/generators/ruby_llm_agents/templates/application_image_pipeline.rb.tt +125 -127
- data/lib/generators/ruby_llm_agents/templates/application_image_transformer.rb.tt +20 -18
- data/lib/generators/ruby_llm_agents/templates/application_image_upscaler.rb.tt +19 -17
- data/lib/generators/ruby_llm_agents/templates/application_image_variator.rb.tt +19 -17
- data/lib/generators/ruby_llm_agents/templates/application_speaker.rb.tt +38 -40
- data/lib/generators/ruby_llm_agents/templates/application_transcriber.rb.tt +42 -44
- data/lib/generators/ruby_llm_agents/templates/application_workflow.rb.tt +48 -0
- data/lib/generators/ruby_llm_agents/templates/background_remover.rb.tt +19 -21
- data/lib/generators/ruby_llm_agents/templates/embedder.rb.tt +19 -21
- data/lib/generators/ruby_llm_agents/templates/image_analyzer.rb.tt +20 -22
- data/lib/generators/ruby_llm_agents/templates/image_editor.rb.tt +15 -17
- data/lib/generators/ruby_llm_agents/templates/image_generator.rb.tt +25 -27
- data/lib/generators/ruby_llm_agents/templates/image_pipeline.rb.tt +19 -21
- data/lib/generators/ruby_llm_agents/templates/image_transformer.rb.tt +20 -22
- data/lib/generators/ruby_llm_agents/templates/image_upscaler.rb.tt +17 -19
- data/lib/generators/ruby_llm_agents/templates/image_variator.rb.tt +15 -17
- data/lib/generators/ruby_llm_agents/templates/skills/AGENTS.md.tt +87 -24
- data/lib/generators/ruby_llm_agents/templates/skills/BACKGROUND_REMOVERS.md.tt +21 -27
- data/lib/generators/ruby_llm_agents/templates/skills/EMBEDDERS.md.tt +46 -54
- data/lib/generators/ruby_llm_agents/templates/skills/IMAGE_ANALYZERS.md.tt +31 -39
- data/lib/generators/ruby_llm_agents/templates/skills/IMAGE_EDITORS.md.tt +22 -28
- data/lib/generators/ruby_llm_agents/templates/skills/IMAGE_GENERATORS.md.tt +53 -63
- data/lib/generators/ruby_llm_agents/templates/skills/IMAGE_PIPELINES.md.tt +46 -56
- data/lib/generators/ruby_llm_agents/templates/skills/IMAGE_TRANSFORMERS.md.tt +23 -31
- data/lib/generators/ruby_llm_agents/templates/skills/IMAGE_UPSCALERS.md.tt +22 -30
- data/lib/generators/ruby_llm_agents/templates/skills/IMAGE_VARIATORS.md.tt +23 -31
- data/lib/generators/ruby_llm_agents/templates/skills/SPEAKERS.md.tt +38 -46
- data/lib/generators/ruby_llm_agents/templates/skills/TOOLS.md.tt +7 -7
- data/lib/generators/ruby_llm_agents/templates/skills/TRANSCRIBERS.md.tt +59 -71
- data/lib/generators/ruby_llm_agents/templates/skills/WORKFLOWS.md.tt +274 -23
- data/lib/generators/ruby_llm_agents/templates/speaker.rb.tt +29 -31
- data/lib/generators/ruby_llm_agents/templates/transcriber.rb.tt +28 -30
- data/lib/generators/ruby_llm_agents/transcriber_generator.rb +10 -43
- data/lib/ruby_llm/agents/core/configuration.rb +55 -43
- data/lib/ruby_llm/agents/core/version.rb +1 -1
- data/lib/ruby_llm/agents/infrastructure/alert_manager.rb +26 -0
- data/lib/ruby_llm/agents/pipeline.rb +69 -0
- data/lib/ruby_llm/agents/workflow/approval.rb +205 -0
- data/lib/ruby_llm/agents/workflow/approval_store.rb +179 -0
- data/lib/ruby_llm/agents/workflow/dsl/executor.rb +467 -0
- data/lib/ruby_llm/agents/workflow/dsl/input_schema.rb +244 -0
- data/lib/ruby_llm/agents/workflow/dsl/iteration_executor.rb +289 -0
- data/lib/ruby_llm/agents/workflow/dsl/parallel_group.rb +107 -0
- data/lib/ruby_llm/agents/workflow/dsl/route_builder.rb +150 -0
- data/lib/ruby_llm/agents/workflow/dsl/schedule_helpers.rb +187 -0
- data/lib/ruby_llm/agents/workflow/dsl/step_config.rb +352 -0
- data/lib/ruby_llm/agents/workflow/dsl/step_executor.rb +415 -0
- data/lib/ruby_llm/agents/workflow/dsl/wait_config.rb +257 -0
- data/lib/ruby_llm/agents/workflow/dsl/wait_executor.rb +317 -0
- data/lib/ruby_llm/agents/workflow/dsl.rb +576 -0
- data/lib/ruby_llm/agents/workflow/instrumentation.rb +2 -7
- data/lib/ruby_llm/agents/workflow/notifiers/base.rb +117 -0
- data/lib/ruby_llm/agents/workflow/notifiers/email.rb +117 -0
- data/lib/ruby_llm/agents/workflow/notifiers/slack.rb +180 -0
- data/lib/ruby_llm/agents/workflow/notifiers/webhook.rb +121 -0
- data/lib/ruby_llm/agents/workflow/notifiers.rb +70 -0
- data/lib/ruby_llm/agents/workflow/orchestrator.rb +190 -23
- data/lib/ruby_llm/agents/workflow/result.rb +202 -0
- data/lib/ruby_llm/agents/workflow/throttle_manager.rb +206 -0
- data/lib/ruby_llm/agents/workflow/wait_result.rb +213 -0
- metadata +37 -6
- data/app/views/ruby_llm/agents/dashboard/_execution_item.html.erb +0 -66
- data/lib/ruby_llm/agents/workflow/parallel.rb +0 -299
- data/lib/ruby_llm/agents/workflow/pipeline.rb +0 -306
- data/lib/ruby_llm/agents/workflow/router.rb +0 -429
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<div class="mb-6">
|
|
2
|
-
<div class="flex items-center justify-end mb-
|
|
2
|
+
<div class="flex items-center justify-end mb-4">
|
|
3
3
|
<div class="flex space-x-1 bg-gray-100 dark:bg-gray-700 rounded-lg p-1">
|
|
4
4
|
<%= link_to "Today", ruby_llm_agents.root_path(range: "today"),
|
|
5
5
|
class: "px-3 py-1 text-xs font-medium rounded-md transition-colors #{@selected_range == 'today' ? 'bg-white dark:bg-gray-600 text-gray-900 dark:text-white shadow-sm' : 'text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white'}" %>
|
|
@@ -10,75 +10,50 @@
|
|
|
10
10
|
</div>
|
|
11
11
|
</div>
|
|
12
12
|
|
|
13
|
-
<div class="grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-
|
|
14
|
-
<!-- Running -->
|
|
15
|
-
<div class="flex items-center bg-white dark:bg-gray-800 rounded-lg px-4 py-3 shadow-sm border border-gray-100 dark:border-gray-700">
|
|
16
|
-
<div class="flex-shrink-0 w-8 h-8 bg-blue-100 dark:bg-blue-900 rounded-full flex items-center justify-center mr-3">
|
|
17
|
-
<span class="w-2.5 h-2.5 bg-blue-500 rounded-full animate-pulse"></span>
|
|
18
|
-
</div>
|
|
19
|
-
<div>
|
|
20
|
-
<p class="text-lg font-bold text-gray-900 dark:text-gray-100"><%= now_strip[:running] %></p>
|
|
21
|
-
<p class="text-xs text-gray-500 dark:text-gray-400">Running</p>
|
|
22
|
-
</div>
|
|
23
|
-
</div>
|
|
24
|
-
|
|
13
|
+
<div class="grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-5 gap-4">
|
|
25
14
|
<!-- Success -->
|
|
26
|
-
<div class="
|
|
27
|
-
<
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
<p class="text-xs text-gray-500 dark:text-gray-400">Success</p>
|
|
33
|
-
</div>
|
|
15
|
+
<div class="bg-white dark:bg-gray-800 rounded-lg p-5 shadow-sm border-t-2 border-green-500">
|
|
16
|
+
<p class="text-2xl font-bold text-gray-900 dark:text-gray-100">
|
|
17
|
+
<%= now_strip[:success_today] %>
|
|
18
|
+
<%= comparison_indicator(now_strip.dig(:comparisons, :success_change), metric_type: :success) %>
|
|
19
|
+
</p>
|
|
20
|
+
<p class="text-sm text-gray-500 dark:text-gray-400 mt-1">Success</p>
|
|
34
21
|
</div>
|
|
35
22
|
|
|
36
23
|
<!-- Errors -->
|
|
37
|
-
<div class="
|
|
38
|
-
<
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
<p class="text-xs text-gray-500 dark:text-gray-400">Errors</p>
|
|
44
|
-
</div>
|
|
24
|
+
<div class="bg-white dark:bg-gray-800 rounded-lg p-5 shadow-sm border-t-2 border-red-500">
|
|
25
|
+
<p class="text-2xl font-bold <%= now_strip[:errors_today] > 0 ? 'text-red-600 dark:text-red-400' : 'text-gray-900 dark:text-gray-100' %>">
|
|
26
|
+
<%= now_strip[:errors_today] %>
|
|
27
|
+
<%= comparison_indicator(now_strip.dig(:comparisons, :errors_change), metric_type: :errors) %>
|
|
28
|
+
</p>
|
|
29
|
+
<p class="text-sm text-gray-500 dark:text-gray-400 mt-1">Errors</p>
|
|
45
30
|
</div>
|
|
46
31
|
|
|
47
|
-
<!--
|
|
48
|
-
<div class="
|
|
49
|
-
<
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
<p class="text-xs text-gray-500 dark:text-gray-400">Timeouts</p>
|
|
55
|
-
</div>
|
|
32
|
+
<!-- Cost -->
|
|
33
|
+
<div class="bg-white dark:bg-gray-800 rounded-lg p-5 shadow-sm border-t-2 border-amber-500">
|
|
34
|
+
<p class="text-2xl font-bold text-gray-900 dark:text-gray-100">
|
|
35
|
+
$<%= number_with_precision(now_strip[:cost_today], precision: 4) %>
|
|
36
|
+
<%= comparison_indicator(now_strip.dig(:comparisons, :cost_change), metric_type: :cost) %>
|
|
37
|
+
</p>
|
|
38
|
+
<p class="text-sm text-gray-500 dark:text-gray-400 mt-1">Cost</p>
|
|
56
39
|
</div>
|
|
57
40
|
|
|
58
|
-
<!--
|
|
59
|
-
<div class="
|
|
60
|
-
<
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
</
|
|
65
|
-
<div>
|
|
66
|
-
<p class="text-lg font-bold text-gray-900 dark:text-gray-100">$<%= number_with_precision(now_strip[:cost_today], precision: 4) %></p>
|
|
67
|
-
<p class="text-xs text-gray-500 dark:text-gray-400">Cost</p>
|
|
68
|
-
</div>
|
|
41
|
+
<!-- Avg Duration -->
|
|
42
|
+
<div class="bg-white dark:bg-gray-800 rounded-lg p-5 shadow-sm border-t-2 border-purple-500">
|
|
43
|
+
<p class="text-2xl font-bold text-gray-900 dark:text-gray-100">
|
|
44
|
+
<%= format_duration_ms(now_strip[:avg_duration_ms]) %>
|
|
45
|
+
<%= comparison_indicator(now_strip.dig(:comparisons, :duration_change), metric_type: :duration) %>
|
|
46
|
+
</p>
|
|
47
|
+
<p class="text-sm text-gray-500 dark:text-gray-400 mt-1">Avg Duration</p>
|
|
69
48
|
</div>
|
|
70
49
|
|
|
71
|
-
<!--
|
|
72
|
-
<div class="
|
|
73
|
-
<
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
</
|
|
78
|
-
<div>
|
|
79
|
-
<p class="text-lg font-bold text-gray-900 dark:text-gray-100"><%= now_strip[:success_rate] %>%</p>
|
|
80
|
-
<p class="text-xs text-gray-500 dark:text-gray-400">Success Rate</p>
|
|
81
|
-
</div>
|
|
50
|
+
<!-- Tokens -->
|
|
51
|
+
<div class="bg-white dark:bg-gray-800 rounded-lg p-5 shadow-sm border-t-2 border-indigo-500">
|
|
52
|
+
<p class="text-2xl font-bold text-gray-900 dark:text-gray-100">
|
|
53
|
+
<%= number_to_human_short(now_strip[:total_tokens]) %>
|
|
54
|
+
<%= comparison_indicator(now_strip.dig(:comparisons, :tokens_change), metric_type: :tokens) %>
|
|
55
|
+
</p>
|
|
56
|
+
<p class="text-sm text-gray-500 dark:text-gray-400 mt-1">Tokens</p>
|
|
82
57
|
</div>
|
|
83
58
|
</div>
|
|
84
59
|
</div>
|
|
@@ -17,14 +17,25 @@
|
|
|
17
17
|
<% top_errors.first(5).each do |error| %>
|
|
18
18
|
<tr class="hover:bg-gray-50 dark:hover:bg-gray-700/50">
|
|
19
19
|
<td class="px-4 py-2">
|
|
20
|
-
<
|
|
21
|
-
<%= error[:error_class]
|
|
22
|
-
|
|
20
|
+
<div>
|
|
21
|
+
<span class="text-sm font-medium text-gray-900 dark:text-gray-100 truncate block max-w-[180px]" title="<%= error[:error_class] %>">
|
|
22
|
+
<%= error[:error_class].to_s.split("::").last %>
|
|
23
|
+
</span>
|
|
24
|
+
<!-- Progress bar showing error distribution -->
|
|
25
|
+
<div class="mt-1 w-full h-1.5 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden">
|
|
26
|
+
<div class="h-full bg-red-500 rounded-full transition-all duration-300" style="width: <%= error[:percentage] %>%"></div>
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
23
29
|
</td>
|
|
24
30
|
<td class="px-4 py-2 text-right">
|
|
25
|
-
<
|
|
26
|
-
|
|
27
|
-
|
|
31
|
+
<div class="flex items-center justify-end gap-1">
|
|
32
|
+
<span class="inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium bg-red-100 dark:bg-red-900 text-red-700 dark:text-red-300">
|
|
33
|
+
<%= number_with_delimiter(error[:count]) %>
|
|
34
|
+
</span>
|
|
35
|
+
<span class="text-xs text-gray-500 dark:text-gray-400">
|
|
36
|
+
(<%= error[:percentage] %>%)
|
|
37
|
+
</span>
|
|
38
|
+
</div>
|
|
28
39
|
</td>
|
|
29
40
|
<td class="px-4 py-2 text-right text-xs text-gray-500 dark:text-gray-400">
|
|
30
41
|
<% if error[:last_seen] %>
|