ruby_llm-agents 1.0.0 → 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.
Files changed (139) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/ruby_llm/agents/paginatable.rb +9 -3
  3. data/app/controllers/concerns/ruby_llm/agents/sortable.rb +58 -0
  4. data/app/controllers/ruby_llm/agents/agents_controller.rb +59 -16
  5. data/app/controllers/ruby_llm/agents/dashboard_controller.rb +144 -20
  6. data/app/controllers/ruby_llm/agents/executions_controller.rb +13 -16
  7. data/app/controllers/ruby_llm/agents/workflows_controller.rb +279 -90
  8. data/app/helpers/ruby_llm/agents/application_helper.rb +100 -0
  9. data/app/mailers/ruby_llm/agents/alert_mailer.rb +84 -0
  10. data/app/mailers/ruby_llm/agents/application_mailer.rb +28 -0
  11. data/app/models/ruby_llm/agents/execution/analytics.rb +170 -20
  12. data/app/models/ruby_llm/agents/execution/scopes.rb +0 -31
  13. data/app/models/ruby_llm/agents/execution/workflow.rb +0 -129
  14. data/app/models/ruby_llm/agents/execution.rb +50 -14
  15. data/app/services/ruby_llm/agents/agent_registry.rb +18 -12
  16. data/app/views/layouts/ruby_llm/agents/application.html.erb +72 -76
  17. data/app/views/ruby_llm/agents/agents/_agent.html.erb +0 -12
  18. data/app/views/ruby_llm/agents/agents/_sortable_header.html.erb +56 -0
  19. data/app/views/ruby_llm/agents/agents/_workflow.html.erb +5 -15
  20. data/app/views/ruby_llm/agents/agents/index.html.erb +271 -100
  21. data/app/views/ruby_llm/agents/agents/show.html.erb +1 -0
  22. data/app/views/ruby_llm/agents/alert_mailer/alert_notification.html.erb +107 -0
  23. data/app/views/ruby_llm/agents/alert_mailer/alert_notification.text.erb +18 -0
  24. data/app/views/ruby_llm/agents/api_configurations/show.html.erb +4 -1
  25. data/app/views/ruby_llm/agents/dashboard/_agent_comparison.html.erb +66 -359
  26. data/app/views/ruby_llm/agents/dashboard/_model_comparison.html.erb +56 -0
  27. data/app/views/ruby_llm/agents/dashboard/_model_cost_breakdown.html.erb +115 -0
  28. data/app/views/ruby_llm/agents/dashboard/_now_strip.html.erb +35 -60
  29. data/app/views/ruby_llm/agents/dashboard/_top_errors.html.erb +17 -6
  30. data/app/views/ruby_llm/agents/dashboard/index.html.erb +373 -72
  31. data/app/views/ruby_llm/agents/executions/_execution.html.erb +0 -1
  32. data/app/views/ruby_llm/agents/executions/_filters.html.erb +51 -39
  33. data/app/views/ruby_llm/agents/executions/_list.html.erb +53 -195
  34. data/app/views/ruby_llm/agents/executions/_workflow_summary.html.erb +5 -20
  35. data/app/views/ruby_llm/agents/executions/index.html.erb +7 -83
  36. data/app/views/ruby_llm/agents/executions/show.html.erb +10 -20
  37. data/app/views/ruby_llm/agents/shared/_agent_type_badge.html.erb +2 -1
  38. data/app/views/ruby_llm/agents/shared/_doc_link.html.erb +12 -0
  39. data/app/views/ruby_llm/agents/shared/_executions_table.html.erb +3 -15
  40. data/app/views/ruby_llm/agents/shared/_filter_dropdown.html.erb +1 -1
  41. data/app/views/ruby_llm/agents/shared/_select_dropdown.html.erb +1 -1
  42. data/app/views/ruby_llm/agents/shared/_sortable_header.html.erb +53 -0
  43. data/app/views/ruby_llm/agents/shared/_status_badge.html.erb +7 -0
  44. data/app/views/ruby_llm/agents/shared/_status_dot.html.erb +1 -1
  45. data/app/views/ruby_llm/agents/shared/_workflow_type_badge.html.erb +9 -35
  46. data/app/views/ruby_llm/agents/system_config/show.html.erb +4 -1
  47. data/app/views/ruby_llm/agents/tenants/index.html.erb +4 -1
  48. data/app/views/ruby_llm/agents/workflows/_step_performance.html.erb +7 -15
  49. data/app/views/ruby_llm/agents/workflows/_structure_dsl.html.erb +539 -0
  50. data/app/views/ruby_llm/agents/workflows/_workflow_diagram.html.erb +920 -0
  51. data/app/views/ruby_llm/agents/workflows/index.html.erb +179 -0
  52. data/app/views/ruby_llm/agents/workflows/show.html.erb +164 -139
  53. data/config/routes.rb +1 -1
  54. data/lib/generators/ruby_llm_agents/agent_generator.rb +6 -36
  55. data/lib/generators/ruby_llm_agents/background_remover_generator.rb +7 -37
  56. data/lib/generators/ruby_llm_agents/embedder_generator.rb +5 -38
  57. data/lib/generators/ruby_llm_agents/image_analyzer_generator.rb +7 -37
  58. data/lib/generators/ruby_llm_agents/image_editor_generator.rb +7 -37
  59. data/lib/generators/ruby_llm_agents/image_generator_generator.rb +8 -41
  60. data/lib/generators/ruby_llm_agents/image_pipeline_generator.rb +18 -46
  61. data/lib/generators/ruby_llm_agents/image_transformer_generator.rb +7 -37
  62. data/lib/generators/ruby_llm_agents/image_upscaler_generator.rb +7 -37
  63. data/lib/generators/ruby_llm_agents/image_variator_generator.rb +7 -37
  64. data/lib/generators/ruby_llm_agents/install_generator.rb +33 -56
  65. data/lib/generators/ruby_llm_agents/migrate_structure_generator.rb +480 -0
  66. data/lib/generators/ruby_llm_agents/restructure_generator.rb +2 -2
  67. data/lib/generators/ruby_llm_agents/speaker_generator.rb +8 -39
  68. data/lib/generators/ruby_llm_agents/templates/agent.rb.tt +5 -8
  69. data/lib/generators/ruby_llm_agents/templates/application_agent.rb.tt +40 -42
  70. data/lib/generators/ruby_llm_agents/templates/application_background_remover.rb.tt +20 -22
  71. data/lib/generators/ruby_llm_agents/templates/application_embedder.rb.tt +24 -26
  72. data/lib/generators/ruby_llm_agents/templates/application_image_analyzer.rb.tt +20 -22
  73. data/lib/generators/ruby_llm_agents/templates/application_image_editor.rb.tt +19 -17
  74. data/lib/generators/ruby_llm_agents/templates/application_image_generator.rb.tt +31 -33
  75. data/lib/generators/ruby_llm_agents/templates/application_image_pipeline.rb.tt +125 -127
  76. data/lib/generators/ruby_llm_agents/templates/application_image_transformer.rb.tt +20 -18
  77. data/lib/generators/ruby_llm_agents/templates/application_image_upscaler.rb.tt +19 -17
  78. data/lib/generators/ruby_llm_agents/templates/application_image_variator.rb.tt +19 -17
  79. data/lib/generators/ruby_llm_agents/templates/application_speaker.rb.tt +38 -40
  80. data/lib/generators/ruby_llm_agents/templates/application_transcriber.rb.tt +42 -44
  81. data/lib/generators/ruby_llm_agents/templates/application_workflow.rb.tt +48 -0
  82. data/lib/generators/ruby_llm_agents/templates/background_remover.rb.tt +19 -21
  83. data/lib/generators/ruby_llm_agents/templates/embedder.rb.tt +19 -21
  84. data/lib/generators/ruby_llm_agents/templates/image_analyzer.rb.tt +20 -22
  85. data/lib/generators/ruby_llm_agents/templates/image_editor.rb.tt +15 -17
  86. data/lib/generators/ruby_llm_agents/templates/image_generator.rb.tt +25 -27
  87. data/lib/generators/ruby_llm_agents/templates/image_pipeline.rb.tt +19 -21
  88. data/lib/generators/ruby_llm_agents/templates/image_transformer.rb.tt +20 -22
  89. data/lib/generators/ruby_llm_agents/templates/image_upscaler.rb.tt +17 -19
  90. data/lib/generators/ruby_llm_agents/templates/image_variator.rb.tt +15 -17
  91. data/lib/generators/ruby_llm_agents/templates/skills/AGENTS.md.tt +87 -24
  92. data/lib/generators/ruby_llm_agents/templates/skills/BACKGROUND_REMOVERS.md.tt +21 -27
  93. data/lib/generators/ruby_llm_agents/templates/skills/EMBEDDERS.md.tt +46 -54
  94. data/lib/generators/ruby_llm_agents/templates/skills/IMAGE_ANALYZERS.md.tt +31 -39
  95. data/lib/generators/ruby_llm_agents/templates/skills/IMAGE_EDITORS.md.tt +22 -28
  96. data/lib/generators/ruby_llm_agents/templates/skills/IMAGE_GENERATORS.md.tt +53 -63
  97. data/lib/generators/ruby_llm_agents/templates/skills/IMAGE_PIPELINES.md.tt +46 -56
  98. data/lib/generators/ruby_llm_agents/templates/skills/IMAGE_TRANSFORMERS.md.tt +23 -31
  99. data/lib/generators/ruby_llm_agents/templates/skills/IMAGE_UPSCALERS.md.tt +22 -30
  100. data/lib/generators/ruby_llm_agents/templates/skills/IMAGE_VARIATORS.md.tt +23 -31
  101. data/lib/generators/ruby_llm_agents/templates/skills/SPEAKERS.md.tt +38 -46
  102. data/lib/generators/ruby_llm_agents/templates/skills/TOOLS.md.tt +7 -7
  103. data/lib/generators/ruby_llm_agents/templates/skills/TRANSCRIBERS.md.tt +59 -71
  104. data/lib/generators/ruby_llm_agents/templates/skills/WORKFLOWS.md.tt +274 -23
  105. data/lib/generators/ruby_llm_agents/templates/speaker.rb.tt +29 -31
  106. data/lib/generators/ruby_llm_agents/templates/transcriber.rb.tt +28 -30
  107. data/lib/generators/ruby_llm_agents/transcriber_generator.rb +10 -43
  108. data/lib/ruby_llm/agents/core/configuration.rb +55 -43
  109. data/lib/ruby_llm/agents/core/version.rb +1 -1
  110. data/lib/ruby_llm/agents/infrastructure/alert_manager.rb +26 -0
  111. data/lib/ruby_llm/agents/pipeline.rb +69 -0
  112. data/lib/ruby_llm/agents/workflow/approval.rb +205 -0
  113. data/lib/ruby_llm/agents/workflow/approval_store.rb +179 -0
  114. data/lib/ruby_llm/agents/workflow/dsl/executor.rb +467 -0
  115. data/lib/ruby_llm/agents/workflow/dsl/input_schema.rb +244 -0
  116. data/lib/ruby_llm/agents/workflow/dsl/iteration_executor.rb +289 -0
  117. data/lib/ruby_llm/agents/workflow/dsl/parallel_group.rb +107 -0
  118. data/lib/ruby_llm/agents/workflow/dsl/route_builder.rb +150 -0
  119. data/lib/ruby_llm/agents/workflow/dsl/schedule_helpers.rb +187 -0
  120. data/lib/ruby_llm/agents/workflow/dsl/step_config.rb +352 -0
  121. data/lib/ruby_llm/agents/workflow/dsl/step_executor.rb +415 -0
  122. data/lib/ruby_llm/agents/workflow/dsl/wait_config.rb +257 -0
  123. data/lib/ruby_llm/agents/workflow/dsl/wait_executor.rb +317 -0
  124. data/lib/ruby_llm/agents/workflow/dsl.rb +576 -0
  125. data/lib/ruby_llm/agents/workflow/instrumentation.rb +2 -7
  126. data/lib/ruby_llm/agents/workflow/notifiers/base.rb +117 -0
  127. data/lib/ruby_llm/agents/workflow/notifiers/email.rb +117 -0
  128. data/lib/ruby_llm/agents/workflow/notifiers/slack.rb +180 -0
  129. data/lib/ruby_llm/agents/workflow/notifiers/webhook.rb +121 -0
  130. data/lib/ruby_llm/agents/workflow/notifiers.rb +70 -0
  131. data/lib/ruby_llm/agents/workflow/orchestrator.rb +190 -23
  132. data/lib/ruby_llm/agents/workflow/result.rb +202 -0
  133. data/lib/ruby_llm/agents/workflow/throttle_manager.rb +206 -0
  134. data/lib/ruby_llm/agents/workflow/wait_result.rb +213 -0
  135. metadata +37 -6
  136. data/app/views/ruby_llm/agents/dashboard/_execution_item.html.erb +0 -66
  137. data/lib/ruby_llm/agents/workflow/parallel.rb +0 -299
  138. data/lib/ruby_llm/agents/workflow/pipeline.rb +0 -306
  139. data/lib/ruby_llm/agents/workflow/router.rb +0 -429
@@ -1,44 +1,42 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module <%= @root_namespace %>
4
- module Image
3
+ module Images
5
4
  <%- if class_name.include?("::") -%>
6
5
  <%- class_name.split("::")[0..-2].each_with_index do |mod, i| -%>
7
- <%= " " * (i + 2) %>module <%= mod %>
6
+ <%= " " * (i + 1) %>module <%= mod %>
8
7
  <%- end -%>
9
- <%= " " * (class_name.split("::").length + 1) %>class <%= class_name.split("::").last %>BackgroundRemover < ApplicationBackgroundRemover
8
+ <%= " " * class_name.split("::").length %>class <%= class_name.split("::").last %>BackgroundRemover < ApplicationBackgroundRemover
10
9
  <%- else -%>
11
- class <%= class_name %>BackgroundRemover < ApplicationBackgroundRemover
10
+ class <%= class_name %>BackgroundRemover < ApplicationBackgroundRemover
12
11
  <%- end -%>
13
- # Model configuration
14
- model "<%= options[:model] %>"
15
- output_format :<%= options[:output_format] %>
12
+ # Model configuration
13
+ model "<%= options[:model] %>"
14
+ output_format :<%= options[:output_format] %>
16
15
  <% if options[:refine_edges] -%>
17
- refine_edges true
16
+ refine_edges true
18
17
  <% end -%>
19
18
  <% if options[:alpha_matting] -%>
20
- alpha_matting true
19
+ alpha_matting true
21
20
  <% end -%>
22
21
  <% if options[:return_mask] -%>
23
- return_mask true
22
+ return_mask true
24
23
  <% end -%>
25
24
  <% if options[:cache] -%>
26
25
 
27
- # Caching
28
- cache_for <%= options[:cache] %>
26
+ # Caching
27
+ cache_for <%= options[:cache] %>
29
28
  <% end -%>
30
29
 
31
- # Optional: Edge threshold
32
- # edge_threshold 0.5
30
+ # Optional: Edge threshold
31
+ # edge_threshold 0.5
33
32
 
34
- # Optional: Description
35
- # description "Removes backgrounds from <%= class_name.downcase %> images"
33
+ # Optional: Description
34
+ # description "Removes backgrounds from <%= class_name.downcase %> images"
36
35
  <%- if class_name.include?("::") -%>
37
- <%- (class_name.split("::").length + 1).times do |i| -%>
38
- <%= " " * (class_name.split("::").length + 1 - i) %>end
36
+ <%- class_name.split("::").length.times do |i| -%>
37
+ <%= " " * (class_name.split("::").length - i) %>end
39
38
  <%- end -%>
40
39
  <%- else -%>
41
- end
42
- <%- end -%>
43
40
  end
41
+ <%- end -%>
44
42
  end
@@ -1,41 +1,39 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module <%= @root_namespace %>
4
- module Text
3
+ module Embedders
5
4
  <%- if class_name.include?("::") -%>
6
5
  <%- class_name.split("::")[0..-2].each_with_index do |mod, i| -%>
7
- <%= " " * (i + 2) %>module <%= mod %>
6
+ <%= " " * (i + 1) %>module <%= mod %>
8
7
  <%- end -%>
9
- <%= " " * (class_name.split("::").length + 1) %>class <%= class_name.split("::").last %>Embedder < ApplicationEmbedder
8
+ <%= " " * class_name.split("::").length %>class <%= class_name.split("::").last %>Embedder < ApplicationEmbedder
10
9
  <%- else -%>
11
- class <%= class_name %>Embedder < ApplicationEmbedder
10
+ class <%= class_name %>Embedder < ApplicationEmbedder
12
11
  <%- end -%>
13
- # Model configuration
14
- model "<%= options[:model] %>"
12
+ # Model configuration
13
+ model "<%= options[:model] %>"
15
14
  <% if options[:dimensions] -%>
16
- dimensions <%= options[:dimensions] %>
15
+ dimensions <%= options[:dimensions] %>
17
16
  <% end -%>
18
17
  <% if options[:batch_size] != 100 -%>
19
- batch_size <%= options[:batch_size] %>
18
+ batch_size <%= options[:batch_size] %>
20
19
  <% end -%>
21
20
  <% if options[:cache] -%>
22
21
 
23
- # Caching
24
- cache_for <%= options[:cache] %>
22
+ # Caching
23
+ cache_for <%= options[:cache] %>
25
24
  <% end -%>
26
25
 
27
- # Optional: Custom preprocessing
28
- # Override this method to normalize/clean text before embedding
29
- #
30
- # def preprocess(text)
31
- # text.strip.downcase.gsub(/\s+/, ' ')
32
- # end
26
+ # Optional: Custom preprocessing
27
+ # Override this method to normalize/clean text before embedding
28
+ #
29
+ # def preprocess(text)
30
+ # text.strip.downcase.gsub(/\s+/, ' ')
31
+ # end
33
32
  <%- if class_name.include?("::") -%>
34
- <%- (class_name.split("::").length + 1).times do |i| -%>
35
- <%= " " * (class_name.split("::").length + 1 - i) %>end
33
+ <%- class_name.split("::").length.times do |i| -%>
34
+ <%= " " * (class_name.split("::").length - i) %>end
36
35
  <%- end -%>
37
36
  <%- else -%>
38
- end
39
- <%- end -%>
40
37
  end
38
+ <%- end -%>
41
39
  end
@@ -1,45 +1,43 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module <%= @root_namespace %>
4
- module Image
3
+ module Images
5
4
  <%- if class_name.include?("::") -%>
6
5
  <%- class_name.split("::")[0..-2].each_with_index do |mod, i| -%>
7
- <%= " " * (i + 2) %>module <%= mod %>
6
+ <%= " " * (i + 1) %>module <%= mod %>
8
7
  <%- end -%>
9
- <%= " " * (class_name.split("::").length + 1) %>class <%= class_name.split("::").last %>Analyzer < ApplicationImageAnalyzer
8
+ <%= " " * class_name.split("::").length %>class <%= class_name.split("::").last %>Analyzer < ApplicationImageAnalyzer
10
9
  <%- else -%>
11
- class <%= class_name %>Analyzer < ApplicationImageAnalyzer
10
+ class <%= class_name %>Analyzer < ApplicationImageAnalyzer
12
11
  <%- end -%>
13
- # Model configuration
14
- model "<%= options[:model] %>"
15
- analysis_type :<%= options[:analysis_type] %>
12
+ # Model configuration
13
+ model "<%= options[:model] %>"
14
+ analysis_type :<%= options[:analysis_type] %>
16
15
  <% if options[:extract_colors] -%>
17
- extract_colors true
16
+ extract_colors true
18
17
  <% end -%>
19
18
  <% if options[:detect_objects] -%>
20
- detect_objects true
19
+ detect_objects true
21
20
  <% end -%>
22
21
  <% if options[:extract_text] -%>
23
- extract_text true
22
+ extract_text true
24
23
  <% end -%>
25
- max_tags <%= options[:max_tags] %>
24
+ max_tags <%= options[:max_tags] %>
26
25
  <% if options[:cache] -%>
27
26
 
28
- # Caching
29
- cache_for <%= options[:cache] %>
27
+ # Caching
28
+ cache_for <%= options[:cache] %>
30
29
  <% end -%>
31
30
 
32
- # Optional: Custom analysis prompt
33
- # prompt "Analyze this image and describe..."
31
+ # Optional: Custom analysis prompt
32
+ # prompt "Analyze this image and describe..."
34
33
 
35
- # Optional: Description
36
- # description "Analyzes <%= class_name.downcase %> images"
34
+ # Optional: Description
35
+ # description "Analyzes <%= class_name.downcase %> images"
37
36
  <%- if class_name.include?("::") -%>
38
- <%- (class_name.split("::").length + 1).times do |i| -%>
39
- <%= " " * (class_name.split("::").length + 1 - i) %>end
37
+ <%- class_name.split("::").length.times do |i| -%>
38
+ <%= " " * (class_name.split("::").length - i) %>end
40
39
  <%- end -%>
41
40
  <%- else -%>
42
- end
43
- <%- end -%>
44
41
  end
42
+ <%- end -%>
45
43
  end
@@ -1,35 +1,33 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module <%= @root_namespace %>
4
- module Image
3
+ module Images
5
4
  <%- if class_name.include?("::") -%>
6
5
  <%- class_name.split("::")[0..-2].each_with_index do |mod, i| -%>
7
- <%= " " * (i + 2) %>module <%= mod %>
6
+ <%= " " * (i + 1) %>module <%= mod %>
8
7
  <%- end -%>
9
- <%= " " * (class_name.split("::").length + 1) %>class <%= class_name.split("::").last %>Editor < ApplicationImageEditor
8
+ <%= " " * class_name.split("::").length %>class <%= class_name.split("::").last %>Editor < ApplicationImageEditor
10
9
  <%- else -%>
11
- class <%= class_name %>Editor < ApplicationImageEditor
10
+ class <%= class_name %>Editor < ApplicationImageEditor
12
11
  <%- end -%>
13
- # Model configuration
14
- model "<%= options[:model] %>"
15
- size "<%= options[:size] %>"
12
+ # Model configuration
13
+ model "<%= options[:model] %>"
14
+ size "<%= options[:size] %>"
16
15
  <% if options[:content_policy] != "standard" -%>
17
- content_policy :<%= options[:content_policy] %>
16
+ content_policy :<%= options[:content_policy] %>
18
17
  <% end -%>
19
18
  <% if options[:cache] -%>
20
19
 
21
- # Caching
22
- cache_for <%= options[:cache] %>
20
+ # Caching
21
+ cache_for <%= options[:cache] %>
23
22
  <% end -%>
24
23
 
25
- # Optional: Description
26
- # description "Edits <%= class_name.downcase %> images"
24
+ # Optional: Description
25
+ # description "Edits <%= class_name.downcase %> images"
27
26
  <%- if class_name.include?("::") -%>
28
- <%- (class_name.split("::").length + 1).times do |i| -%>
29
- <%= " " * (class_name.split("::").length + 1 - i) %>end
27
+ <%- class_name.split("::").length.times do |i| -%>
28
+ <%= " " * (class_name.split("::").length - i) %>end
30
29
  <%- end -%>
31
30
  <%- else -%>
32
- end
33
- <%- end -%>
34
31
  end
32
+ <%- end -%>
35
33
  end
@@ -1,47 +1,45 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module <%= @root_namespace %>
4
- module Image
3
+ module Images
5
4
  <%- if class_name.include?("::") -%>
6
5
  <%- class_name.split("::")[0..-2].each_with_index do |mod, i| -%>
7
- <%= " " * (i + 2) %>module <%= mod %>
6
+ <%= " " * (i + 1) %>module <%= mod %>
8
7
  <%- end -%>
9
- <%= " " * (class_name.split("::").length + 1) %>class <%= class_name.split("::").last %>Generator < ApplicationImageGenerator
8
+ <%= " " * class_name.split("::").length %>class <%= class_name.split("::").last %>Generator < ApplicationImageGenerator
10
9
  <%- else -%>
11
- class <%= class_name %>Generator < ApplicationImageGenerator
10
+ class <%= class_name %>Generator < ApplicationImageGenerator
12
11
  <%- end -%>
13
- # Model configuration
14
- model "<%= options[:model] %>"
15
- size "<%= options[:size] %>"
16
- quality "<%= options[:quality] %>"
17
- style "<%= options[:style] %>"
12
+ # Model configuration
13
+ model "<%= options[:model] %>"
14
+ size "<%= options[:size] %>"
15
+ quality "<%= options[:quality] %>"
16
+ style "<%= options[:style] %>"
18
17
  <% if options[:content_policy] != "standard" -%>
19
- content_policy :<%= options[:content_policy] %>
18
+ content_policy :<%= options[:content_policy] %>
20
19
  <% end -%>
21
20
  <% if options[:cache] -%>
22
21
 
23
- # Caching
24
- cache_for <%= options[:cache] %>
22
+ # Caching
23
+ cache_for <%= options[:cache] %>
25
24
  <% end -%>
26
25
 
27
- # Optional: Add a prompt template
28
- # template "Professional {prompt}, high quality, detailed"
26
+ # Optional: Add a prompt template
27
+ # template "Professional {prompt}, high quality, detailed"
29
28
 
30
- # Optional: Add negative prompts (for models that support it)
31
- # negative_prompt "blurry, low quality, distorted"
29
+ # Optional: Add negative prompts (for models that support it)
30
+ # negative_prompt "blurry, low quality, distorted"
32
31
 
33
- # Optional: Custom preprocessing
34
- # Override this method to modify prompts before generation
35
- #
36
- # def preprocess_prompt(prompt)
37
- # "#{prompt}, professional quality"
38
- # end
32
+ # Optional: Custom preprocessing
33
+ # Override this method to modify prompts before generation
34
+ #
35
+ # def preprocess_prompt(prompt)
36
+ # "#{prompt}, professional quality"
37
+ # end
39
38
  <%- if class_name.include?("::") -%>
40
- <%- (class_name.split("::").length + 1).times do |i| -%>
41
- <%= " " * (class_name.split("::").length + 1 - i) %>end
39
+ <%- class_name.split("::").length.times do |i| -%>
40
+ <%= " " * (class_name.split("::").length - i) %>end
42
41
  <%- end -%>
43
42
  <%- else -%>
44
- end
45
- <%- end -%>
46
43
  end
44
+ <%- end -%>
47
45
  end
@@ -1,50 +1,48 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module <%= @root_namespace %>
4
- module Image
3
+ module Images
5
4
  <%- if class_name.include?("::") -%>
6
5
  <%- class_name.split("::")[0..-2].each_with_index do |mod, i| -%>
7
- <%= " " * (i + 2) %>module <%= mod %>
6
+ <%= " " * (i + 1) %>module <%= mod %>
8
7
  <%- end -%>
9
- <%= " " * (class_name.split("::").length + 1) %>class <%= class_name.split("::").last %>Pipeline < ApplicationImagePipeline
8
+ <%= " " * class_name.split("::").length %>class <%= class_name.split("::").last %>Pipeline < ApplicationImagePipeline
10
9
  <%- else -%>
11
- class <%= class_name %>Pipeline < ApplicationImagePipeline
10
+ class <%= class_name %>Pipeline < ApplicationImagePipeline
12
11
  <%- end -%>
13
- # Pipeline steps
12
+ # Pipeline steps
14
13
  <%- parsed_steps.each do |step| -%>
15
14
  <%- case step -%>
16
15
  <%- when :generate -%>
17
- step :<%= step %>, generator: <%= class_name %>Generator
16
+ step :<%= step %>, generator: <%= class_name %>Generator
18
17
  <%- when :upscale -%>
19
- step :<%= step %>, upscaler: <%= class_name %>Upscaler
18
+ step :<%= step %>, upscaler: <%= class_name %>Upscaler
20
19
  <%- when :transform -%>
21
- step :<%= step %>, transformer: <%= class_name %>Transformer
20
+ step :<%= step %>, transformer: <%= class_name %>Transformer
22
21
  <%- when :analyze -%>
23
- step :<%= step %>, analyzer: <%= class_name %>Analyzer
22
+ step :<%= step %>, analyzer: <%= class_name %>Analyzer
24
23
  <%- when :remove_background -%>
25
- step :<%= step %>, remover: <%= class_name %>BackgroundRemover
24
+ step :<%= step %>, remover: <%= class_name %>BackgroundRemover
26
25
  <%- else -%>
27
- # step :<%= step %>, ...: <%= class_name %><%= step.to_s.camelize %>
26
+ # step :<%= step %>, ...: <%= class_name %><%= step.to_s.camelize %>
28
27
  <%- end -%>
29
28
  <%- end -%>
30
29
  <%- if options[:stop_on_error] == false -%>
31
30
 
32
- stop_on_error false
31
+ stop_on_error false
33
32
  <%- end -%>
34
33
  <% if options[:cache] -%>
35
34
 
36
- # Caching
37
- cache_for <%= options[:cache] %>
35
+ # Caching
36
+ cache_for <%= options[:cache] %>
38
37
  <% end -%>
39
38
 
40
- description "<%= class_name %> image processing pipeline"
41
- version "1.0"
39
+ description "<%= class_name %> image processing pipeline"
40
+ version "1.0"
42
41
  <%- if class_name.include?("::") -%>
43
- <%- (class_name.split("::").length + 1).times do |i| -%>
44
- <%= " " * (class_name.split("::").length + 1 - i) %>end
42
+ <%- class_name.split("::").length.times do |i| -%>
43
+ <%= " " * (class_name.split("::").length - i) %>end
45
44
  <%- end -%>
46
45
  <%- else -%>
47
- end
48
- <%- end -%>
49
46
  end
47
+ <%- end -%>
50
48
  end
@@ -1,44 +1,42 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module <%= @root_namespace %>
4
- module Image
3
+ module Images
5
4
  <%- if class_name.include?("::") -%>
6
5
  <%- class_name.split("::")[0..-2].each_with_index do |mod, i| -%>
7
- <%= " " * (i + 2) %>module <%= mod %>
6
+ <%= " " * (i + 1) %>module <%= mod %>
8
7
  <%- end -%>
9
- <%= " " * (class_name.split("::").length + 1) %>class <%= class_name.split("::").last %>Transformer < ApplicationImageTransformer
8
+ <%= " " * class_name.split("::").length %>class <%= class_name.split("::").last %>Transformer < ApplicationImageTransformer
10
9
  <%- else -%>
11
- class <%= class_name %>Transformer < ApplicationImageTransformer
10
+ class <%= class_name %>Transformer < ApplicationImageTransformer
12
11
  <%- end -%>
13
- # Model configuration
14
- model "<%= options[:model] %>"
15
- size "<%= options[:size] %>"
16
- strength <%= options[:strength] %>
12
+ # Model configuration
13
+ model "<%= options[:model] %>"
14
+ size "<%= options[:size] %>"
15
+ strength <%= options[:strength] %>
17
16
  <% if options[:content_policy] != "standard" -%>
18
- content_policy :<%= options[:content_policy] %>
17
+ content_policy :<%= options[:content_policy] %>
19
18
  <% end -%>
20
19
  <% if options[:template] -%>
21
20
 
22
- # Prompt template
23
- template "<%= options[:template] %>"
21
+ # Prompt template
22
+ template "<%= options[:template] %>"
24
23
  <% end -%>
25
24
  <% if options[:cache] -%>
26
25
 
27
- # Caching
28
- cache_for <%= options[:cache] %>
26
+ # Caching
27
+ cache_for <%= options[:cache] %>
29
28
  <% end -%>
30
29
 
31
- # Optional: Negative prompts
32
- # negative_prompt "blurry, low quality, distorted"
30
+ # Optional: Negative prompts
31
+ # negative_prompt "blurry, low quality, distorted"
33
32
 
34
- # Optional: Description
35
- # description "Transforms images into <%= class_name.downcase %> style"
33
+ # Optional: Description
34
+ # description "Transforms images into <%= class_name.downcase %> style"
36
35
  <%- if class_name.include?("::") -%>
37
- <%- (class_name.split("::").length + 1).times do |i| -%>
38
- <%= " " * (class_name.split("::").length + 1 - i) %>end
36
+ <%- class_name.split("::").length.times do |i| -%>
37
+ <%= " " * (class_name.split("::").length - i) %>end
39
38
  <%- end -%>
40
39
  <%- else -%>
41
- end
42
- <%- end -%>
43
40
  end
41
+ <%- end -%>
44
42
  end
@@ -1,38 +1,36 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module <%= @root_namespace %>
4
- module Image
3
+ module Images
5
4
  <%- if class_name.include?("::") -%>
6
5
  <%- class_name.split("::")[0..-2].each_with_index do |mod, i| -%>
7
- <%= " " * (i + 2) %>module <%= mod %>
6
+ <%= " " * (i + 1) %>module <%= mod %>
8
7
  <%- end -%>
9
- <%= " " * (class_name.split("::").length + 1) %>class <%= class_name.split("::").last %>Upscaler < ApplicationImageUpscaler
8
+ <%= " " * class_name.split("::").length %>class <%= class_name.split("::").last %>Upscaler < ApplicationImageUpscaler
10
9
  <%- else -%>
11
- class <%= class_name %>Upscaler < ApplicationImageUpscaler
10
+ class <%= class_name %>Upscaler < ApplicationImageUpscaler
12
11
  <%- end -%>
13
- # Model configuration
14
- model "<%= options[:model] %>"
15
- scale <%= options[:scale] %>
12
+ # Model configuration
13
+ model "<%= options[:model] %>"
14
+ scale <%= options[:scale] %>
16
15
  <% if options[:face_enhance] -%>
17
- face_enhance true
16
+ face_enhance true
18
17
  <% end -%>
19
18
  <% if options[:cache] -%>
20
19
 
21
- # Caching
22
- cache_for <%= options[:cache] %>
20
+ # Caching
21
+ cache_for <%= options[:cache] %>
23
22
  <% end -%>
24
23
 
25
- # Optional: Denoise strength (0.0-1.0)
26
- # denoise_strength 0.5
24
+ # Optional: Denoise strength (0.0-1.0)
25
+ # denoise_strength 0.5
27
26
 
28
- # Optional: Description
29
- # description "Upscales <%= class_name.downcase %> images"
27
+ # Optional: Description
28
+ # description "Upscales <%= class_name.downcase %> images"
30
29
  <%- if class_name.include?("::") -%>
31
- <%- (class_name.split("::").length + 1).times do |i| -%>
32
- <%= " " * (class_name.split("::").length + 1 - i) %>end
30
+ <%- class_name.split("::").length.times do |i| -%>
31
+ <%= " " * (class_name.split("::").length - i) %>end
33
32
  <%- end -%>
34
33
  <%- else -%>
35
- end
36
- <%- end -%>
37
34
  end
35
+ <%- end -%>
38
36
  end
@@ -1,33 +1,31 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module <%= @root_namespace %>
4
- module Image
3
+ module Images
5
4
  <%- if class_name.include?("::") -%>
6
5
  <%- class_name.split("::")[0..-2].each_with_index do |mod, i| -%>
7
- <%= " " * (i + 2) %>module <%= mod %>
6
+ <%= " " * (i + 1) %>module <%= mod %>
8
7
  <%- end -%>
9
- <%= " " * (class_name.split("::").length + 1) %>class <%= class_name.split("::").last %>Variator < ApplicationImageVariator
8
+ <%= " " * class_name.split("::").length %>class <%= class_name.split("::").last %>Variator < ApplicationImageVariator
10
9
  <%- else -%>
11
- class <%= class_name %>Variator < ApplicationImageVariator
10
+ class <%= class_name %>Variator < ApplicationImageVariator
12
11
  <%- end -%>
13
- # Model configuration
14
- model "<%= options[:model] %>"
15
- size "<%= options[:size] %>"
16
- variation_strength <%= options[:variation_strength] %>
12
+ # Model configuration
13
+ model "<%= options[:model] %>"
14
+ size "<%= options[:size] %>"
15
+ variation_strength <%= options[:variation_strength] %>
17
16
  <% if options[:cache] -%>
18
17
 
19
- # Caching
20
- cache_for <%= options[:cache] %>
18
+ # Caching
19
+ cache_for <%= options[:cache] %>
21
20
  <% end -%>
22
21
 
23
- # Optional: Description
24
- # description "Creates variations of <%= class_name.downcase %> images"
22
+ # Optional: Description
23
+ # description "Creates variations of <%= class_name.downcase %> images"
25
24
  <%- if class_name.include?("::") -%>
26
- <%- (class_name.split("::").length + 1).times do |i| -%>
27
- <%= " " * (class_name.split("::").length + 1 - i) %>end
25
+ <%- class_name.split("::").length.times do |i| -%>
26
+ <%= " " * (class_name.split("::").length - i) %>end
28
27
  <%- end -%>
29
28
  <%- else -%>
30
- end
31
- <%- end -%>
32
29
  end
30
+ <%- end -%>
33
31
  end