ruby_llm-agents 0.5.0 → 1.0.0.beta.1
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 +189 -31
- data/app/controllers/ruby_llm/agents/agents_controller.rb +136 -16
- data/app/controllers/ruby_llm/agents/dashboard_controller.rb +29 -9
- data/app/controllers/ruby_llm/agents/workflows_controller.rb +355 -0
- data/app/helpers/ruby_llm/agents/application_helper.rb +25 -0
- data/app/models/ruby_llm/agents/execution.rb +3 -0
- data/app/models/ruby_llm/agents/tenant_budget.rb +58 -15
- data/app/services/ruby_llm/agents/agent_registry.rb +51 -12
- data/app/views/layouts/ruby_llm/agents/application.html.erb +2 -29
- data/app/views/ruby_llm/agents/agents/_agent.html.erb +13 -1
- data/app/views/ruby_llm/agents/agents/_config_agent.html.erb +235 -0
- data/app/views/ruby_llm/agents/agents/_config_embedder.html.erb +70 -0
- data/app/views/ruby_llm/agents/agents/_config_image_generator.html.erb +152 -0
- data/app/views/ruby_llm/agents/agents/_config_moderator.html.erb +63 -0
- data/app/views/ruby_llm/agents/agents/_config_speaker.html.erb +108 -0
- data/app/views/ruby_llm/agents/agents/_config_transcriber.html.erb +91 -0
- data/app/views/ruby_llm/agents/agents/_workflow.html.erb +1 -1
- data/app/views/ruby_llm/agents/agents/index.html.erb +74 -9
- data/app/views/ruby_llm/agents/agents/show.html.erb +18 -378
- data/app/views/ruby_llm/agents/dashboard/_agent_comparison.html.erb +269 -15
- data/app/views/ruby_llm/agents/executions/show.html.erb +16 -0
- data/app/views/ruby_llm/agents/shared/_agent_type_badge.html.erb +93 -0
- data/app/views/ruby_llm/agents/workflows/_step_performance.html.erb +236 -0
- data/app/views/ruby_llm/agents/workflows/_structure_parallel.html.erb +76 -0
- data/app/views/ruby_llm/agents/workflows/_structure_pipeline.html.erb +74 -0
- data/app/views/ruby_llm/agents/workflows/_structure_router.html.erb +108 -0
- data/app/views/ruby_llm/agents/workflows/show.html.erb +442 -0
- data/config/routes.rb +1 -0
- data/lib/generators/ruby_llm_agents/agent_generator.rb +56 -7
- data/lib/generators/ruby_llm_agents/background_remover_generator.rb +110 -0
- data/lib/generators/ruby_llm_agents/embedder_generator.rb +107 -0
- data/lib/generators/ruby_llm_agents/image_analyzer_generator.rb +115 -0
- data/lib/generators/ruby_llm_agents/image_editor_generator.rb +108 -0
- data/lib/generators/ruby_llm_agents/image_generator_generator.rb +116 -0
- data/lib/generators/ruby_llm_agents/image_pipeline_generator.rb +178 -0
- data/lib/generators/ruby_llm_agents/image_transformer_generator.rb +109 -0
- data/lib/generators/ruby_llm_agents/image_upscaler_generator.rb +103 -0
- data/lib/generators/ruby_llm_agents/image_variator_generator.rb +102 -0
- data/lib/generators/ruby_llm_agents/install_generator.rb +76 -4
- data/lib/generators/ruby_llm_agents/restructure_generator.rb +292 -0
- data/lib/generators/ruby_llm_agents/speaker_generator.rb +121 -0
- data/lib/generators/ruby_llm_agents/templates/add_execution_type_migration.rb.tt +8 -0
- data/lib/generators/ruby_llm_agents/templates/agent.rb.tt +99 -84
- data/lib/generators/ruby_llm_agents/templates/application_agent.rb.tt +42 -40
- data/lib/generators/ruby_llm_agents/templates/application_background_remover.rb.tt +26 -0
- data/lib/generators/ruby_llm_agents/templates/application_embedder.rb.tt +50 -0
- data/lib/generators/ruby_llm_agents/templates/application_image_analyzer.rb.tt +26 -0
- data/lib/generators/ruby_llm_agents/templates/application_image_editor.rb.tt +20 -0
- data/lib/generators/ruby_llm_agents/templates/application_image_generator.rb.tt +38 -0
- data/lib/generators/ruby_llm_agents/templates/application_image_pipeline.rb.tt +139 -0
- data/lib/generators/ruby_llm_agents/templates/application_image_transformer.rb.tt +21 -0
- data/lib/generators/ruby_llm_agents/templates/application_image_upscaler.rb.tt +20 -0
- data/lib/generators/ruby_llm_agents/templates/application_image_variator.rb.tt +20 -0
- data/lib/generators/ruby_llm_agents/templates/application_speaker.rb.tt +49 -0
- data/lib/generators/ruby_llm_agents/templates/application_transcriber.rb.tt +53 -0
- data/lib/generators/ruby_llm_agents/templates/background_remover.rb.tt +44 -0
- data/lib/generators/ruby_llm_agents/templates/embedder.rb.tt +41 -0
- data/lib/generators/ruby_llm_agents/templates/image_analyzer.rb.tt +45 -0
- data/lib/generators/ruby_llm_agents/templates/image_editor.rb.tt +35 -0
- data/lib/generators/ruby_llm_agents/templates/image_generator.rb.tt +47 -0
- data/lib/generators/ruby_llm_agents/templates/image_pipeline.rb.tt +50 -0
- data/lib/generators/ruby_llm_agents/templates/image_transformer.rb.tt +44 -0
- data/lib/generators/ruby_llm_agents/templates/image_upscaler.rb.tt +38 -0
- data/lib/generators/ruby_llm_agents/templates/image_variator.rb.tt +33 -0
- data/lib/generators/ruby_llm_agents/templates/skills/AGENTS.md.tt +228 -0
- data/lib/generators/ruby_llm_agents/templates/skills/BACKGROUND_REMOVERS.md.tt +131 -0
- data/lib/generators/ruby_llm_agents/templates/skills/EMBEDDERS.md.tt +255 -0
- data/lib/generators/ruby_llm_agents/templates/skills/IMAGE_ANALYZERS.md.tt +120 -0
- data/lib/generators/ruby_llm_agents/templates/skills/IMAGE_EDITORS.md.tt +102 -0
- data/lib/generators/ruby_llm_agents/templates/skills/IMAGE_GENERATORS.md.tt +282 -0
- data/lib/generators/ruby_llm_agents/templates/skills/IMAGE_PIPELINES.md.tt +228 -0
- data/lib/generators/ruby_llm_agents/templates/skills/IMAGE_TRANSFORMERS.md.tt +120 -0
- data/lib/generators/ruby_llm_agents/templates/skills/IMAGE_UPSCALERS.md.tt +110 -0
- data/lib/generators/ruby_llm_agents/templates/skills/IMAGE_VARIATORS.md.tt +120 -0
- data/lib/generators/ruby_llm_agents/templates/skills/SPEAKERS.md.tt +212 -0
- data/lib/generators/ruby_llm_agents/templates/skills/TOOLS.md.tt +227 -0
- data/lib/generators/ruby_llm_agents/templates/skills/TRANSCRIBERS.md.tt +251 -0
- data/lib/generators/ruby_llm_agents/templates/skills/WORKFLOWS.md.tt +300 -0
- data/lib/generators/ruby_llm_agents/templates/speaker.rb.tt +56 -0
- data/lib/generators/ruby_llm_agents/templates/transcriber.rb.tt +51 -0
- data/lib/generators/ruby_llm_agents/transcriber_generator.rb +107 -0
- data/lib/generators/ruby_llm_agents/upgrade_generator.rb +152 -1
- data/lib/ruby_llm/agents/audio/speaker.rb +553 -0
- data/lib/ruby_llm/agents/audio/transcriber.rb +669 -0
- data/lib/ruby_llm/agents/base_agent.rb +675 -0
- data/lib/ruby_llm/agents/core/base/moderation_dsl.rb +181 -0
- data/lib/ruby_llm/agents/core/base/moderation_execution.rb +274 -0
- data/lib/ruby_llm/agents/core/base.rb +135 -0
- data/lib/ruby_llm/agents/core/configuration.rb +981 -0
- data/lib/ruby_llm/agents/core/errors.rb +150 -0
- data/lib/ruby_llm/agents/{instrumentation.rb → core/instrumentation.rb} +22 -1
- data/lib/ruby_llm/agents/core/llm_tenant.rb +358 -0
- data/lib/ruby_llm/agents/{version.rb → core/version.rb} +1 -1
- data/lib/ruby_llm/agents/dsl/base.rb +110 -0
- data/lib/ruby_llm/agents/dsl/caching.rb +142 -0
- data/lib/ruby_llm/agents/dsl/reliability.rb +307 -0
- data/lib/ruby_llm/agents/dsl.rb +41 -0
- data/lib/ruby_llm/agents/image/analyzer/dsl.rb +130 -0
- data/lib/ruby_llm/agents/image/analyzer/execution.rb +402 -0
- data/lib/ruby_llm/agents/image/analyzer.rb +90 -0
- data/lib/ruby_llm/agents/image/background_remover/dsl.rb +154 -0
- data/lib/ruby_llm/agents/image/background_remover/execution.rb +240 -0
- data/lib/ruby_llm/agents/image/background_remover.rb +89 -0
- data/lib/ruby_llm/agents/image/concerns/image_operation_dsl.rb +91 -0
- data/lib/ruby_llm/agents/image/concerns/image_operation_execution.rb +165 -0
- data/lib/ruby_llm/agents/image/editor/dsl.rb +56 -0
- data/lib/ruby_llm/agents/image/editor/execution.rb +207 -0
- data/lib/ruby_llm/agents/image/editor.rb +92 -0
- data/lib/ruby_llm/agents/image/generator/active_storage_support.rb +127 -0
- data/lib/ruby_llm/agents/image/generator/content_policy.rb +95 -0
- data/lib/ruby_llm/agents/image/generator/pricing.rb +353 -0
- data/lib/ruby_llm/agents/image/generator/templates.rb +124 -0
- data/lib/ruby_llm/agents/image/generator.rb +455 -0
- data/lib/ruby_llm/agents/image/pipeline/dsl.rb +213 -0
- data/lib/ruby_llm/agents/image/pipeline/execution.rb +382 -0
- data/lib/ruby_llm/agents/image/pipeline.rb +97 -0
- data/lib/ruby_llm/agents/image/transformer/dsl.rb +148 -0
- data/lib/ruby_llm/agents/image/transformer/execution.rb +223 -0
- data/lib/ruby_llm/agents/image/transformer.rb +95 -0
- data/lib/ruby_llm/agents/image/upscaler/dsl.rb +83 -0
- data/lib/ruby_llm/agents/image/upscaler/execution.rb +219 -0
- data/lib/ruby_llm/agents/image/upscaler.rb +81 -0
- data/lib/ruby_llm/agents/image/variator/dsl.rb +62 -0
- data/lib/ruby_llm/agents/image/variator/execution.rb +189 -0
- data/lib/ruby_llm/agents/image/variator.rb +80 -0
- data/lib/ruby_llm/agents/{alert_manager.rb → infrastructure/alert_manager.rb} +17 -22
- data/lib/ruby_llm/agents/infrastructure/budget/budget_query.rb +145 -0
- data/lib/ruby_llm/agents/infrastructure/budget/config_resolver.rb +149 -0
- data/lib/ruby_llm/agents/infrastructure/budget/forecaster.rb +68 -0
- data/lib/ruby_llm/agents/infrastructure/budget/spend_recorder.rb +279 -0
- data/lib/ruby_llm/agents/infrastructure/budget_tracker.rb +275 -0
- data/lib/ruby_llm/agents/{execution_logger_job.rb → infrastructure/execution_logger_job.rb} +17 -1
- data/lib/ruby_llm/agents/{reliability → infrastructure/reliability}/executor.rb +2 -1
- data/lib/ruby_llm/agents/{reliability → infrastructure/reliability}/retry_strategy.rb +9 -3
- data/lib/ruby_llm/agents/{reliability.rb → infrastructure/reliability.rb} +11 -21
- data/lib/ruby_llm/agents/pipeline/builder.rb +215 -0
- data/lib/ruby_llm/agents/pipeline/context.rb +255 -0
- data/lib/ruby_llm/agents/pipeline/executor.rb +86 -0
- data/lib/ruby_llm/agents/pipeline/middleware/base.rb +124 -0
- data/lib/ruby_llm/agents/pipeline/middleware/budget.rb +95 -0
- data/lib/ruby_llm/agents/pipeline/middleware/cache.rb +171 -0
- data/lib/ruby_llm/agents/pipeline/middleware/instrumentation.rb +415 -0
- data/lib/ruby_llm/agents/pipeline/middleware/reliability.rb +276 -0
- data/lib/ruby_llm/agents/pipeline/middleware/tenant.rb +196 -0
- data/lib/ruby_llm/agents/pipeline.rb +68 -0
- data/lib/ruby_llm/agents/{engine.rb → rails/engine.rb} +79 -11
- data/lib/ruby_llm/agents/results/background_removal_result.rb +286 -0
- data/lib/ruby_llm/agents/{result.rb → results/base.rb} +73 -1
- data/lib/ruby_llm/agents/results/embedding_result.rb +243 -0
- data/lib/ruby_llm/agents/results/image_analysis_result.rb +314 -0
- data/lib/ruby_llm/agents/results/image_edit_result.rb +250 -0
- data/lib/ruby_llm/agents/results/image_generation_result.rb +346 -0
- data/lib/ruby_llm/agents/results/image_pipeline_result.rb +399 -0
- data/lib/ruby_llm/agents/results/image_transform_result.rb +251 -0
- data/lib/ruby_llm/agents/results/image_upscale_result.rb +255 -0
- data/lib/ruby_llm/agents/results/image_variation_result.rb +237 -0
- data/lib/ruby_llm/agents/results/moderation_result.rb +158 -0
- data/lib/ruby_llm/agents/results/speech_result.rb +338 -0
- data/lib/ruby_llm/agents/results/transcription_result.rb +408 -0
- data/lib/ruby_llm/agents/text/embedder.rb +444 -0
- data/lib/ruby_llm/agents/text/moderator.rb +237 -0
- data/lib/ruby_llm/agents/workflow/async.rb +220 -0
- data/lib/ruby_llm/agents/workflow/async_executor.rb +156 -0
- data/lib/ruby_llm/agents/{workflow.rb → workflow/orchestrator.rb} +6 -5
- data/lib/ruby_llm/agents/workflow/parallel.rb +34 -17
- data/lib/ruby_llm/agents/workflow/thread_pool.rb +185 -0
- data/lib/ruby_llm/agents.rb +86 -20
- metadata +172 -34
- data/lib/ruby_llm/agents/base/caching.rb +0 -40
- data/lib/ruby_llm/agents/base/cost_calculation.rb +0 -105
- data/lib/ruby_llm/agents/base/dsl.rb +0 -324
- data/lib/ruby_llm/agents/base/execution.rb +0 -366
- data/lib/ruby_llm/agents/base/reliability_dsl.rb +0 -82
- data/lib/ruby_llm/agents/base/reliability_execution.rb +0 -136
- data/lib/ruby_llm/agents/base/response_building.rb +0 -86
- data/lib/ruby_llm/agents/base/tool_tracking.rb +0 -57
- data/lib/ruby_llm/agents/base.rb +0 -210
- data/lib/ruby_llm/agents/budget_tracker.rb +0 -733
- data/lib/ruby_llm/agents/configuration.rb +0 -394
- /data/lib/ruby_llm/agents/{deprecations.rb → core/deprecations.rb} +0 -0
- /data/lib/ruby_llm/agents/{inflections.rb → core/inflections.rb} +0 -0
- /data/lib/ruby_llm/agents/{resolved_config.rb → core/resolved_config.rb} +0 -0
- /data/lib/ruby_llm/agents/{attempt_tracker.rb → infrastructure/attempt_tracker.rb} +0 -0
- /data/lib/ruby_llm/agents/{cache_helper.rb → infrastructure/cache_helper.rb} +0 -0
- /data/lib/ruby_llm/agents/{circuit_breaker.rb → infrastructure/circuit_breaker.rb} +0 -0
- /data/lib/ruby_llm/agents/{redactor.rb → infrastructure/redactor.rb} +0 -0
- /data/lib/ruby_llm/agents/{reliability → infrastructure/reliability}/breaker_manager.rb +0 -0
- /data/lib/ruby_llm/agents/{reliability → infrastructure/reliability}/execution_constraints.rb +0 -0
- /data/lib/ruby_llm/agents/{reliability → infrastructure/reliability}/fallback_routing.rb +0 -0
data/lib/ruby_llm/agents.rb
CHANGED
|
@@ -3,23 +3,92 @@
|
|
|
3
3
|
require "csv"
|
|
4
4
|
require "ruby_llm"
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
require_relative "agents/
|
|
8
|
-
require_relative "agents/
|
|
9
|
-
require_relative "agents/
|
|
10
|
-
require_relative "agents/
|
|
11
|
-
require_relative "agents/
|
|
12
|
-
require_relative "agents/
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
require_relative "agents/
|
|
16
|
-
require_relative "agents/
|
|
17
|
-
require_relative "agents/
|
|
18
|
-
require_relative "agents/
|
|
19
|
-
require_relative "agents/
|
|
20
|
-
require_relative "agents/
|
|
21
|
-
|
|
22
|
-
|
|
6
|
+
# Core
|
|
7
|
+
require_relative "agents/core/version"
|
|
8
|
+
require_relative "agents/core/configuration"
|
|
9
|
+
require_relative "agents/core/deprecations"
|
|
10
|
+
require_relative "agents/core/errors"
|
|
11
|
+
require_relative "agents/core/resolved_config"
|
|
12
|
+
require_relative "agents/core/llm_tenant"
|
|
13
|
+
|
|
14
|
+
# Infrastructure - Reliability
|
|
15
|
+
require_relative "agents/infrastructure/reliability"
|
|
16
|
+
require_relative "agents/infrastructure/reliability/retry_strategy"
|
|
17
|
+
require_relative "agents/infrastructure/reliability/fallback_routing"
|
|
18
|
+
require_relative "agents/infrastructure/reliability/breaker_manager"
|
|
19
|
+
require_relative "agents/infrastructure/reliability/execution_constraints"
|
|
20
|
+
require_relative "agents/infrastructure/reliability/executor"
|
|
21
|
+
|
|
22
|
+
# Pipeline infrastructure (middleware-based execution)
|
|
23
|
+
require_relative "agents/pipeline"
|
|
24
|
+
|
|
25
|
+
# DSL modules for agent configuration
|
|
26
|
+
require_relative "agents/dsl"
|
|
27
|
+
|
|
28
|
+
# BaseAgent - new middleware-based agent architecture
|
|
29
|
+
require_relative "agents/base_agent"
|
|
30
|
+
|
|
31
|
+
# Infrastructure - Budget & Utilities
|
|
32
|
+
require_relative "agents/infrastructure/redactor"
|
|
33
|
+
require_relative "agents/infrastructure/circuit_breaker"
|
|
34
|
+
require_relative "agents/infrastructure/budget_tracker"
|
|
35
|
+
require_relative "agents/infrastructure/alert_manager"
|
|
36
|
+
require_relative "agents/infrastructure/attempt_tracker"
|
|
37
|
+
require_relative "agents/infrastructure/cache_helper"
|
|
38
|
+
require_relative "agents/infrastructure/budget/budget_query"
|
|
39
|
+
require_relative "agents/infrastructure/budget/config_resolver"
|
|
40
|
+
require_relative "agents/infrastructure/budget/forecaster"
|
|
41
|
+
require_relative "agents/infrastructure/budget/spend_recorder"
|
|
42
|
+
|
|
43
|
+
# Results
|
|
44
|
+
require_relative "agents/results/base"
|
|
45
|
+
require_relative "agents/results/embedding_result"
|
|
46
|
+
require_relative "agents/results/moderation_result"
|
|
47
|
+
require_relative "agents/results/transcription_result"
|
|
48
|
+
require_relative "agents/results/speech_result"
|
|
49
|
+
require_relative "agents/results/image_generation_result"
|
|
50
|
+
require_relative "agents/results/image_variation_result"
|
|
51
|
+
require_relative "agents/results/image_edit_result"
|
|
52
|
+
require_relative "agents/results/image_transform_result"
|
|
53
|
+
require_relative "agents/results/image_upscale_result"
|
|
54
|
+
require_relative "agents/results/image_analysis_result"
|
|
55
|
+
require_relative "agents/results/background_removal_result"
|
|
56
|
+
require_relative "agents/results/image_pipeline_result"
|
|
57
|
+
|
|
58
|
+
# Image concerns (shared DSL/execution for image operations)
|
|
59
|
+
require_relative "agents/image/concerns/image_operation_dsl"
|
|
60
|
+
require_relative "agents/image/concerns/image_operation_execution"
|
|
61
|
+
|
|
62
|
+
# Text agents
|
|
63
|
+
require_relative "agents/text/embedder"
|
|
64
|
+
require_relative "agents/text/moderator"
|
|
65
|
+
|
|
66
|
+
# Audio agents
|
|
67
|
+
require_relative "agents/audio/transcriber"
|
|
68
|
+
require_relative "agents/audio/speaker"
|
|
69
|
+
|
|
70
|
+
# Image agents
|
|
71
|
+
require_relative "agents/image/generator"
|
|
72
|
+
require_relative "agents/image/variator"
|
|
73
|
+
require_relative "agents/image/editor"
|
|
74
|
+
require_relative "agents/image/transformer"
|
|
75
|
+
require_relative "agents/image/upscaler"
|
|
76
|
+
require_relative "agents/image/analyzer"
|
|
77
|
+
require_relative "agents/image/background_remover"
|
|
78
|
+
require_relative "agents/image/pipeline"
|
|
79
|
+
|
|
80
|
+
# Workflow
|
|
81
|
+
require_relative "agents/workflow/async"
|
|
82
|
+
require_relative "agents/workflow/orchestrator"
|
|
83
|
+
require_relative "agents/workflow/async_executor"
|
|
84
|
+
|
|
85
|
+
# Rails integration
|
|
86
|
+
if defined?(Rails)
|
|
87
|
+
require_relative "agents/core/inflections"
|
|
88
|
+
require_relative "agents/core/instrumentation"
|
|
89
|
+
require_relative "agents/infrastructure/execution_logger_job"
|
|
90
|
+
end
|
|
91
|
+
require_relative "agents/rails/engine" if defined?(Rails::Engine)
|
|
23
92
|
|
|
24
93
|
module RubyLLM
|
|
25
94
|
# Agent framework for building LLM-powered agents with observability
|
|
@@ -49,9 +118,6 @@ module RubyLLM
|
|
|
49
118
|
# @see RubyLLM::Agents::Base
|
|
50
119
|
# @see RubyLLM::Agents::Configuration
|
|
51
120
|
module Agents
|
|
52
|
-
# Base error class for agent-related exceptions
|
|
53
|
-
class Error < StandardError; end
|
|
54
|
-
|
|
55
121
|
class << self
|
|
56
122
|
# Returns the global configuration instance
|
|
57
123
|
#
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ruby_llm-agents
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 1.0.0.beta.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- adham90
|
|
@@ -29,14 +29,14 @@ dependencies:
|
|
|
29
29
|
requirements:
|
|
30
30
|
- - ">="
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
|
-
version:
|
|
32
|
+
version: 1.11.0
|
|
33
33
|
type: :runtime
|
|
34
34
|
prerelease: false
|
|
35
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
36
36
|
requirements:
|
|
37
37
|
- - ">="
|
|
38
38
|
- !ruby/object:Gem::Version
|
|
39
|
-
version:
|
|
39
|
+
version: 1.11.0
|
|
40
40
|
- !ruby/object:Gem::Dependency
|
|
41
41
|
name: csv
|
|
42
42
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -51,6 +51,20 @@ dependencies:
|
|
|
51
51
|
- - ">="
|
|
52
52
|
- !ruby/object:Gem::Version
|
|
53
53
|
version: '0'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: ostruct
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - ">="
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '0'
|
|
61
|
+
type: :runtime
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - ">="
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '0'
|
|
54
68
|
description: A Rails engine for creating, managing, and monitoring LLM-powered agents.
|
|
55
69
|
Includes a DSL for agent configuration, execution tracking, cost analytics, and
|
|
56
70
|
a mountable dashboard UI.
|
|
@@ -70,6 +84,7 @@ files:
|
|
|
70
84
|
- app/controllers/ruby_llm/agents/executions_controller.rb
|
|
71
85
|
- app/controllers/ruby_llm/agents/system_config_controller.rb
|
|
72
86
|
- app/controllers/ruby_llm/agents/tenants_controller.rb
|
|
87
|
+
- app/controllers/ruby_llm/agents/workflows_controller.rb
|
|
73
88
|
- app/helpers/ruby_llm/agents/application_helper.rb
|
|
74
89
|
- app/models/ruby_llm/agents/api_configuration.rb
|
|
75
90
|
- app/models/ruby_llm/agents/execution.rb
|
|
@@ -81,6 +96,12 @@ files:
|
|
|
81
96
|
- app/services/ruby_llm/agents/agent_registry.rb
|
|
82
97
|
- app/views/layouts/ruby_llm/agents/application.html.erb
|
|
83
98
|
- app/views/ruby_llm/agents/agents/_agent.html.erb
|
|
99
|
+
- app/views/ruby_llm/agents/agents/_config_agent.html.erb
|
|
100
|
+
- app/views/ruby_llm/agents/agents/_config_embedder.html.erb
|
|
101
|
+
- app/views/ruby_llm/agents/agents/_config_image_generator.html.erb
|
|
102
|
+
- app/views/ruby_llm/agents/agents/_config_moderator.html.erb
|
|
103
|
+
- app/views/ruby_llm/agents/agents/_config_speaker.html.erb
|
|
104
|
+
- app/views/ruby_llm/agents/agents/_config_transcriber.html.erb
|
|
84
105
|
- app/views/ruby_llm/agents/agents/_empty_state.html.erb
|
|
85
106
|
- app/views/ruby_llm/agents/agents/_version_comparison.html.erb
|
|
86
107
|
- app/views/ruby_llm/agents/agents/_workflow.html.erb
|
|
@@ -109,6 +130,7 @@ files:
|
|
|
109
130
|
- app/views/ruby_llm/agents/executions/dry_run.html.erb
|
|
110
131
|
- app/views/ruby_llm/agents/executions/index.html.erb
|
|
111
132
|
- app/views/ruby_llm/agents/executions/show.html.erb
|
|
133
|
+
- app/views/ruby_llm/agents/shared/_agent_type_badge.html.erb
|
|
112
134
|
- app/views/ruby_llm/agents/shared/_breadcrumbs.html.erb
|
|
113
135
|
- app/views/ruby_llm/agents/shared/_executions_table.html.erb
|
|
114
136
|
- app/views/ruby_llm/agents/shared/_filter_dropdown.html.erb
|
|
@@ -124,13 +146,30 @@ files:
|
|
|
124
146
|
- app/views/ruby_llm/agents/tenants/edit.html.erb
|
|
125
147
|
- app/views/ruby_llm/agents/tenants/index.html.erb
|
|
126
148
|
- app/views/ruby_llm/agents/tenants/show.html.erb
|
|
149
|
+
- app/views/ruby_llm/agents/workflows/_step_performance.html.erb
|
|
150
|
+
- app/views/ruby_llm/agents/workflows/_structure_parallel.html.erb
|
|
151
|
+
- app/views/ruby_llm/agents/workflows/_structure_pipeline.html.erb
|
|
152
|
+
- app/views/ruby_llm/agents/workflows/_structure_router.html.erb
|
|
153
|
+
- app/views/ruby_llm/agents/workflows/show.html.erb
|
|
127
154
|
- config/routes.rb
|
|
128
155
|
- lib/generators/ruby_llm_agents/agent_generator.rb
|
|
129
156
|
- lib/generators/ruby_llm_agents/api_configuration_generator.rb
|
|
157
|
+
- lib/generators/ruby_llm_agents/background_remover_generator.rb
|
|
158
|
+
- lib/generators/ruby_llm_agents/embedder_generator.rb
|
|
159
|
+
- lib/generators/ruby_llm_agents/image_analyzer_generator.rb
|
|
160
|
+
- lib/generators/ruby_llm_agents/image_editor_generator.rb
|
|
161
|
+
- lib/generators/ruby_llm_agents/image_generator_generator.rb
|
|
162
|
+
- lib/generators/ruby_llm_agents/image_pipeline_generator.rb
|
|
163
|
+
- lib/generators/ruby_llm_agents/image_transformer_generator.rb
|
|
164
|
+
- lib/generators/ruby_llm_agents/image_upscaler_generator.rb
|
|
165
|
+
- lib/generators/ruby_llm_agents/image_variator_generator.rb
|
|
130
166
|
- lib/generators/ruby_llm_agents/install_generator.rb
|
|
131
167
|
- lib/generators/ruby_llm_agents/multi_tenancy_generator.rb
|
|
168
|
+
- lib/generators/ruby_llm_agents/restructure_generator.rb
|
|
169
|
+
- lib/generators/ruby_llm_agents/speaker_generator.rb
|
|
132
170
|
- lib/generators/ruby_llm_agents/templates/add_attempts_migration.rb.tt
|
|
133
171
|
- lib/generators/ruby_llm_agents/templates/add_caching_migration.rb.tt
|
|
172
|
+
- lib/generators/ruby_llm_agents/templates/add_execution_type_migration.rb.tt
|
|
134
173
|
- lib/generators/ruby_llm_agents/templates/add_finish_reason_migration.rb.tt
|
|
135
174
|
- lib/generators/ruby_llm_agents/templates/add_prompts_migration.rb.tt
|
|
136
175
|
- lib/generators/ruby_llm_agents/templates/add_routing_migration.rb.tt
|
|
@@ -141,49 +180,148 @@ files:
|
|
|
141
180
|
- lib/generators/ruby_llm_agents/templates/add_workflow_migration.rb.tt
|
|
142
181
|
- lib/generators/ruby_llm_agents/templates/agent.rb.tt
|
|
143
182
|
- lib/generators/ruby_llm_agents/templates/application_agent.rb.tt
|
|
183
|
+
- lib/generators/ruby_llm_agents/templates/application_background_remover.rb.tt
|
|
184
|
+
- lib/generators/ruby_llm_agents/templates/application_embedder.rb.tt
|
|
185
|
+
- lib/generators/ruby_llm_agents/templates/application_image_analyzer.rb.tt
|
|
186
|
+
- lib/generators/ruby_llm_agents/templates/application_image_editor.rb.tt
|
|
187
|
+
- lib/generators/ruby_llm_agents/templates/application_image_generator.rb.tt
|
|
188
|
+
- lib/generators/ruby_llm_agents/templates/application_image_pipeline.rb.tt
|
|
189
|
+
- lib/generators/ruby_llm_agents/templates/application_image_transformer.rb.tt
|
|
190
|
+
- lib/generators/ruby_llm_agents/templates/application_image_upscaler.rb.tt
|
|
191
|
+
- lib/generators/ruby_llm_agents/templates/application_image_variator.rb.tt
|
|
192
|
+
- lib/generators/ruby_llm_agents/templates/application_speaker.rb.tt
|
|
193
|
+
- lib/generators/ruby_llm_agents/templates/application_transcriber.rb.tt
|
|
194
|
+
- lib/generators/ruby_llm_agents/templates/background_remover.rb.tt
|
|
144
195
|
- lib/generators/ruby_llm_agents/templates/create_api_configurations_migration.rb.tt
|
|
145
196
|
- lib/generators/ruby_llm_agents/templates/create_tenant_budgets_migration.rb.tt
|
|
197
|
+
- lib/generators/ruby_llm_agents/templates/embedder.rb.tt
|
|
198
|
+
- lib/generators/ruby_llm_agents/templates/image_analyzer.rb.tt
|
|
199
|
+
- lib/generators/ruby_llm_agents/templates/image_editor.rb.tt
|
|
200
|
+
- lib/generators/ruby_llm_agents/templates/image_generator.rb.tt
|
|
201
|
+
- lib/generators/ruby_llm_agents/templates/image_pipeline.rb.tt
|
|
202
|
+
- lib/generators/ruby_llm_agents/templates/image_transformer.rb.tt
|
|
203
|
+
- lib/generators/ruby_llm_agents/templates/image_upscaler.rb.tt
|
|
204
|
+
- lib/generators/ruby_llm_agents/templates/image_variator.rb.tt
|
|
146
205
|
- lib/generators/ruby_llm_agents/templates/initializer.rb.tt
|
|
147
206
|
- lib/generators/ruby_llm_agents/templates/migration.rb.tt
|
|
207
|
+
- lib/generators/ruby_llm_agents/templates/skills/AGENTS.md.tt
|
|
208
|
+
- lib/generators/ruby_llm_agents/templates/skills/BACKGROUND_REMOVERS.md.tt
|
|
209
|
+
- lib/generators/ruby_llm_agents/templates/skills/EMBEDDERS.md.tt
|
|
210
|
+
- lib/generators/ruby_llm_agents/templates/skills/IMAGE_ANALYZERS.md.tt
|
|
211
|
+
- lib/generators/ruby_llm_agents/templates/skills/IMAGE_EDITORS.md.tt
|
|
212
|
+
- lib/generators/ruby_llm_agents/templates/skills/IMAGE_GENERATORS.md.tt
|
|
213
|
+
- lib/generators/ruby_llm_agents/templates/skills/IMAGE_PIPELINES.md.tt
|
|
214
|
+
- lib/generators/ruby_llm_agents/templates/skills/IMAGE_TRANSFORMERS.md.tt
|
|
215
|
+
- lib/generators/ruby_llm_agents/templates/skills/IMAGE_UPSCALERS.md.tt
|
|
216
|
+
- lib/generators/ruby_llm_agents/templates/skills/IMAGE_VARIATORS.md.tt
|
|
217
|
+
- lib/generators/ruby_llm_agents/templates/skills/SPEAKERS.md.tt
|
|
218
|
+
- lib/generators/ruby_llm_agents/templates/skills/TOOLS.md.tt
|
|
219
|
+
- lib/generators/ruby_llm_agents/templates/skills/TRANSCRIBERS.md.tt
|
|
220
|
+
- lib/generators/ruby_llm_agents/templates/skills/WORKFLOWS.md.tt
|
|
221
|
+
- lib/generators/ruby_llm_agents/templates/speaker.rb.tt
|
|
222
|
+
- lib/generators/ruby_llm_agents/templates/transcriber.rb.tt
|
|
223
|
+
- lib/generators/ruby_llm_agents/transcriber_generator.rb
|
|
148
224
|
- lib/generators/ruby_llm_agents/upgrade_generator.rb
|
|
149
225
|
- lib/ruby_llm-agents.rb
|
|
150
226
|
- lib/ruby_llm/agents.rb
|
|
151
|
-
- lib/ruby_llm/agents/
|
|
152
|
-
- lib/ruby_llm/agents/
|
|
153
|
-
- lib/ruby_llm/agents/
|
|
154
|
-
- lib/ruby_llm/agents/base
|
|
155
|
-
- lib/ruby_llm/agents/base/
|
|
156
|
-
- lib/ruby_llm/agents/base/
|
|
157
|
-
- lib/ruby_llm/agents/
|
|
158
|
-
- lib/ruby_llm/agents/
|
|
159
|
-
- lib/ruby_llm/agents/
|
|
160
|
-
- lib/ruby_llm/agents/
|
|
161
|
-
- lib/ruby_llm/agents/
|
|
162
|
-
- lib/ruby_llm/agents/
|
|
163
|
-
- lib/ruby_llm/agents/
|
|
164
|
-
- lib/ruby_llm/agents/
|
|
165
|
-
- lib/ruby_llm/agents/
|
|
166
|
-
- lib/ruby_llm/agents/
|
|
167
|
-
- lib/ruby_llm/agents/
|
|
168
|
-
- lib/ruby_llm/agents/
|
|
169
|
-
- lib/ruby_llm/agents/
|
|
170
|
-
- lib/ruby_llm/agents/
|
|
171
|
-
- lib/ruby_llm/agents/
|
|
172
|
-
- lib/ruby_llm/agents/
|
|
173
|
-
- lib/ruby_llm/agents/
|
|
174
|
-
- lib/ruby_llm/agents/
|
|
175
|
-
- lib/ruby_llm/agents/
|
|
176
|
-
- lib/ruby_llm/agents/
|
|
177
|
-
- lib/ruby_llm/agents/
|
|
178
|
-
- lib/ruby_llm/agents/
|
|
179
|
-
- lib/ruby_llm/agents/
|
|
180
|
-
- lib/ruby_llm/agents/
|
|
181
|
-
- lib/ruby_llm/agents/
|
|
227
|
+
- lib/ruby_llm/agents/audio/speaker.rb
|
|
228
|
+
- lib/ruby_llm/agents/audio/transcriber.rb
|
|
229
|
+
- lib/ruby_llm/agents/base_agent.rb
|
|
230
|
+
- lib/ruby_llm/agents/core/base.rb
|
|
231
|
+
- lib/ruby_llm/agents/core/base/moderation_dsl.rb
|
|
232
|
+
- lib/ruby_llm/agents/core/base/moderation_execution.rb
|
|
233
|
+
- lib/ruby_llm/agents/core/configuration.rb
|
|
234
|
+
- lib/ruby_llm/agents/core/deprecations.rb
|
|
235
|
+
- lib/ruby_llm/agents/core/errors.rb
|
|
236
|
+
- lib/ruby_llm/agents/core/inflections.rb
|
|
237
|
+
- lib/ruby_llm/agents/core/instrumentation.rb
|
|
238
|
+
- lib/ruby_llm/agents/core/llm_tenant.rb
|
|
239
|
+
- lib/ruby_llm/agents/core/resolved_config.rb
|
|
240
|
+
- lib/ruby_llm/agents/core/version.rb
|
|
241
|
+
- lib/ruby_llm/agents/dsl.rb
|
|
242
|
+
- lib/ruby_llm/agents/dsl/base.rb
|
|
243
|
+
- lib/ruby_llm/agents/dsl/caching.rb
|
|
244
|
+
- lib/ruby_llm/agents/dsl/reliability.rb
|
|
245
|
+
- lib/ruby_llm/agents/image/analyzer.rb
|
|
246
|
+
- lib/ruby_llm/agents/image/analyzer/dsl.rb
|
|
247
|
+
- lib/ruby_llm/agents/image/analyzer/execution.rb
|
|
248
|
+
- lib/ruby_llm/agents/image/background_remover.rb
|
|
249
|
+
- lib/ruby_llm/agents/image/background_remover/dsl.rb
|
|
250
|
+
- lib/ruby_llm/agents/image/background_remover/execution.rb
|
|
251
|
+
- lib/ruby_llm/agents/image/concerns/image_operation_dsl.rb
|
|
252
|
+
- lib/ruby_llm/agents/image/concerns/image_operation_execution.rb
|
|
253
|
+
- lib/ruby_llm/agents/image/editor.rb
|
|
254
|
+
- lib/ruby_llm/agents/image/editor/dsl.rb
|
|
255
|
+
- lib/ruby_llm/agents/image/editor/execution.rb
|
|
256
|
+
- lib/ruby_llm/agents/image/generator.rb
|
|
257
|
+
- lib/ruby_llm/agents/image/generator/active_storage_support.rb
|
|
258
|
+
- lib/ruby_llm/agents/image/generator/content_policy.rb
|
|
259
|
+
- lib/ruby_llm/agents/image/generator/pricing.rb
|
|
260
|
+
- lib/ruby_llm/agents/image/generator/templates.rb
|
|
261
|
+
- lib/ruby_llm/agents/image/pipeline.rb
|
|
262
|
+
- lib/ruby_llm/agents/image/pipeline/dsl.rb
|
|
263
|
+
- lib/ruby_llm/agents/image/pipeline/execution.rb
|
|
264
|
+
- lib/ruby_llm/agents/image/transformer.rb
|
|
265
|
+
- lib/ruby_llm/agents/image/transformer/dsl.rb
|
|
266
|
+
- lib/ruby_llm/agents/image/transformer/execution.rb
|
|
267
|
+
- lib/ruby_llm/agents/image/upscaler.rb
|
|
268
|
+
- lib/ruby_llm/agents/image/upscaler/dsl.rb
|
|
269
|
+
- lib/ruby_llm/agents/image/upscaler/execution.rb
|
|
270
|
+
- lib/ruby_llm/agents/image/variator.rb
|
|
271
|
+
- lib/ruby_llm/agents/image/variator/dsl.rb
|
|
272
|
+
- lib/ruby_llm/agents/image/variator/execution.rb
|
|
273
|
+
- lib/ruby_llm/agents/infrastructure/alert_manager.rb
|
|
274
|
+
- lib/ruby_llm/agents/infrastructure/attempt_tracker.rb
|
|
275
|
+
- lib/ruby_llm/agents/infrastructure/budget/budget_query.rb
|
|
276
|
+
- lib/ruby_llm/agents/infrastructure/budget/config_resolver.rb
|
|
277
|
+
- lib/ruby_llm/agents/infrastructure/budget/forecaster.rb
|
|
278
|
+
- lib/ruby_llm/agents/infrastructure/budget/spend_recorder.rb
|
|
279
|
+
- lib/ruby_llm/agents/infrastructure/budget_tracker.rb
|
|
280
|
+
- lib/ruby_llm/agents/infrastructure/cache_helper.rb
|
|
281
|
+
- lib/ruby_llm/agents/infrastructure/circuit_breaker.rb
|
|
282
|
+
- lib/ruby_llm/agents/infrastructure/execution_logger_job.rb
|
|
283
|
+
- lib/ruby_llm/agents/infrastructure/redactor.rb
|
|
284
|
+
- lib/ruby_llm/agents/infrastructure/reliability.rb
|
|
285
|
+
- lib/ruby_llm/agents/infrastructure/reliability/breaker_manager.rb
|
|
286
|
+
- lib/ruby_llm/agents/infrastructure/reliability/execution_constraints.rb
|
|
287
|
+
- lib/ruby_llm/agents/infrastructure/reliability/executor.rb
|
|
288
|
+
- lib/ruby_llm/agents/infrastructure/reliability/fallback_routing.rb
|
|
289
|
+
- lib/ruby_llm/agents/infrastructure/reliability/retry_strategy.rb
|
|
290
|
+
- lib/ruby_llm/agents/pipeline.rb
|
|
291
|
+
- lib/ruby_llm/agents/pipeline/builder.rb
|
|
292
|
+
- lib/ruby_llm/agents/pipeline/context.rb
|
|
293
|
+
- lib/ruby_llm/agents/pipeline/executor.rb
|
|
294
|
+
- lib/ruby_llm/agents/pipeline/middleware/base.rb
|
|
295
|
+
- lib/ruby_llm/agents/pipeline/middleware/budget.rb
|
|
296
|
+
- lib/ruby_llm/agents/pipeline/middleware/cache.rb
|
|
297
|
+
- lib/ruby_llm/agents/pipeline/middleware/instrumentation.rb
|
|
298
|
+
- lib/ruby_llm/agents/pipeline/middleware/reliability.rb
|
|
299
|
+
- lib/ruby_llm/agents/pipeline/middleware/tenant.rb
|
|
300
|
+
- lib/ruby_llm/agents/rails/engine.rb
|
|
301
|
+
- lib/ruby_llm/agents/results/background_removal_result.rb
|
|
302
|
+
- lib/ruby_llm/agents/results/base.rb
|
|
303
|
+
- lib/ruby_llm/agents/results/embedding_result.rb
|
|
304
|
+
- lib/ruby_llm/agents/results/image_analysis_result.rb
|
|
305
|
+
- lib/ruby_llm/agents/results/image_edit_result.rb
|
|
306
|
+
- lib/ruby_llm/agents/results/image_generation_result.rb
|
|
307
|
+
- lib/ruby_llm/agents/results/image_pipeline_result.rb
|
|
308
|
+
- lib/ruby_llm/agents/results/image_transform_result.rb
|
|
309
|
+
- lib/ruby_llm/agents/results/image_upscale_result.rb
|
|
310
|
+
- lib/ruby_llm/agents/results/image_variation_result.rb
|
|
311
|
+
- lib/ruby_llm/agents/results/moderation_result.rb
|
|
312
|
+
- lib/ruby_llm/agents/results/speech_result.rb
|
|
313
|
+
- lib/ruby_llm/agents/results/transcription_result.rb
|
|
314
|
+
- lib/ruby_llm/agents/text/embedder.rb
|
|
315
|
+
- lib/ruby_llm/agents/text/moderator.rb
|
|
316
|
+
- lib/ruby_llm/agents/workflow/async.rb
|
|
317
|
+
- lib/ruby_llm/agents/workflow/async_executor.rb
|
|
182
318
|
- lib/ruby_llm/agents/workflow/instrumentation.rb
|
|
319
|
+
- lib/ruby_llm/agents/workflow/orchestrator.rb
|
|
183
320
|
- lib/ruby_llm/agents/workflow/parallel.rb
|
|
184
321
|
- lib/ruby_llm/agents/workflow/pipeline.rb
|
|
185
322
|
- lib/ruby_llm/agents/workflow/result.rb
|
|
186
323
|
- lib/ruby_llm/agents/workflow/router.rb
|
|
324
|
+
- lib/ruby_llm/agents/workflow/thread_pool.rb
|
|
187
325
|
homepage: https://github.com/adham90/ruby_llm-agents
|
|
188
326
|
licenses:
|
|
189
327
|
- MIT
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative "../cache_helper"
|
|
4
|
-
|
|
5
|
-
module RubyLLM
|
|
6
|
-
module Agents
|
|
7
|
-
class Base
|
|
8
|
-
# Cache management for agent responses
|
|
9
|
-
#
|
|
10
|
-
# Handles cache key generation and store access for
|
|
11
|
-
# caching agent execution results.
|
|
12
|
-
module Caching
|
|
13
|
-
include CacheHelper
|
|
14
|
-
|
|
15
|
-
# Generates the full cache key for this agent invocation
|
|
16
|
-
#
|
|
17
|
-
# @return [String] Cache key in format "ruby_llm_agent/ClassName/version/hash"
|
|
18
|
-
def agent_cache_key
|
|
19
|
-
["ruby_llm_agent", self.class.name, self.class.version, cache_key_hash].join("/")
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
# Generates a hash of the cache key data
|
|
23
|
-
#
|
|
24
|
-
# @return [String] SHA256 hex digest of the cache key data
|
|
25
|
-
def cache_key_hash
|
|
26
|
-
Digest::SHA256.hexdigest(cache_key_data.to_json)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# Returns data to include in cache key generation
|
|
30
|
-
#
|
|
31
|
-
# Override to customize what parameters affect cache invalidation.
|
|
32
|
-
#
|
|
33
|
-
# @return [Hash] Data to hash for cache key
|
|
34
|
-
def cache_key_data
|
|
35
|
-
@options.except(:skip_cache, :dry_run, :with)
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module RubyLLM
|
|
4
|
-
module Agents
|
|
5
|
-
class Base
|
|
6
|
-
# Cost calculation methods for token and pricing calculations
|
|
7
|
-
#
|
|
8
|
-
# Handles input/output cost calculations, model info resolution,
|
|
9
|
-
# and budget tracking for agent executions.
|
|
10
|
-
module CostCalculation
|
|
11
|
-
# Calculates input cost from tokens
|
|
12
|
-
#
|
|
13
|
-
# @param input_tokens [Integer, nil] Number of input tokens
|
|
14
|
-
# @param response_model_id [String, nil] Model that responded
|
|
15
|
-
# @return [Float, nil] Input cost in USD
|
|
16
|
-
def result_input_cost(input_tokens, response_model_id)
|
|
17
|
-
return nil unless input_tokens
|
|
18
|
-
model_info = result_model_info(response_model_id)
|
|
19
|
-
return nil unless model_info&.pricing
|
|
20
|
-
price = model_info.pricing.text_tokens&.input || 0
|
|
21
|
-
(input_tokens / 1_000_000.0 * price).round(6)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# Calculates output cost from tokens
|
|
25
|
-
#
|
|
26
|
-
# @param output_tokens [Integer, nil] Number of output tokens
|
|
27
|
-
# @param response_model_id [String, nil] Model that responded
|
|
28
|
-
# @return [Float, nil] Output cost in USD
|
|
29
|
-
def result_output_cost(output_tokens, response_model_id)
|
|
30
|
-
return nil unless output_tokens
|
|
31
|
-
model_info = result_model_info(response_model_id)
|
|
32
|
-
return nil unless model_info&.pricing
|
|
33
|
-
price = model_info.pricing.text_tokens&.output || 0
|
|
34
|
-
(output_tokens / 1_000_000.0 * price).round(6)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
# Calculates total cost from tokens
|
|
38
|
-
#
|
|
39
|
-
# @param input_tokens [Integer, nil] Number of input tokens
|
|
40
|
-
# @param output_tokens [Integer, nil] Number of output tokens
|
|
41
|
-
# @param response_model_id [String, nil] Model that responded
|
|
42
|
-
# @return [Float, nil] Total cost in USD
|
|
43
|
-
def result_total_cost(input_tokens, output_tokens, response_model_id)
|
|
44
|
-
input_cost = result_input_cost(input_tokens, response_model_id)
|
|
45
|
-
output_cost = result_output_cost(output_tokens, response_model_id)
|
|
46
|
-
return nil unless input_cost || output_cost
|
|
47
|
-
((input_cost || 0) + (output_cost || 0)).round(6)
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
# Resolves model info for cost calculation
|
|
51
|
-
#
|
|
52
|
-
# @param response_model_id [String, nil] Model ID from response
|
|
53
|
-
# @return [Object, nil] Model info or nil
|
|
54
|
-
def result_model_info(response_model_id)
|
|
55
|
-
lookup_id = response_model_id || model
|
|
56
|
-
return nil unless lookup_id
|
|
57
|
-
model_obj, _provider = RubyLLM::Models.resolve(lookup_id)
|
|
58
|
-
model_obj
|
|
59
|
-
rescue StandardError
|
|
60
|
-
nil
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
# Resolves model info for cost calculation (alternate method)
|
|
64
|
-
#
|
|
65
|
-
# @param model_id [String] The model identifier
|
|
66
|
-
# @return [Object, nil] Model info or nil
|
|
67
|
-
def resolve_model_info(model_id)
|
|
68
|
-
model_obj, _provider = RubyLLM::Models.resolve(model_id)
|
|
69
|
-
model_obj
|
|
70
|
-
rescue StandardError
|
|
71
|
-
nil
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
# Records cost from an attempt to the budget tracker
|
|
75
|
-
#
|
|
76
|
-
# @param attempt_tracker [AttemptTracker] The attempt tracker
|
|
77
|
-
# @param tenant_id [String, nil] Optional tenant identifier for multi-tenant tracking
|
|
78
|
-
# @return [void]
|
|
79
|
-
def record_attempt_cost(attempt_tracker, tenant_id: nil)
|
|
80
|
-
successful = attempt_tracker.successful_attempt
|
|
81
|
-
return unless successful
|
|
82
|
-
|
|
83
|
-
# Calculate cost for this execution
|
|
84
|
-
# Note: Full cost calculation happens in instrumentation, but we
|
|
85
|
-
# record the spend here for budget tracking
|
|
86
|
-
model_info = resolve_model_info(successful[:model_id])
|
|
87
|
-
return unless model_info&.pricing
|
|
88
|
-
|
|
89
|
-
input_tokens = successful[:input_tokens] || 0
|
|
90
|
-
output_tokens = successful[:output_tokens] || 0
|
|
91
|
-
|
|
92
|
-
input_price = model_info.pricing.text_tokens&.input || 0
|
|
93
|
-
output_price = model_info.pricing.text_tokens&.output || 0
|
|
94
|
-
|
|
95
|
-
total_cost = (input_tokens / 1_000_000.0 * input_price) +
|
|
96
|
-
(output_tokens / 1_000_000.0 * output_price)
|
|
97
|
-
|
|
98
|
-
BudgetTracker.record_spend!(self.class.name, total_cost, tenant_id: tenant_id)
|
|
99
|
-
rescue StandardError => e
|
|
100
|
-
Rails.logger.warn("[RubyLLM::Agents] Failed to record budget spend: #{e.message}")
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
end
|