active_harness 0.2.42 → 0.3.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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/lib/active_harness/configuration.rb +3 -1
  3. data/lib/active_harness/core/errors.rb +2 -2
  4. data/lib/active_harness/core/hooks.rb +2 -2
  5. data/lib/active_harness/memory.rb +11 -11
  6. data/lib/active_harness/pipeline/README.md +15 -15
  7. data/lib/active_harness/pipeline/step.rb +1 -1
  8. data/lib/active_harness/pipeline.rb +18 -18
  9. data/lib/active_harness/providers/PROVIDER_CONTRACT.md +1 -1
  10. data/lib/active_harness/providers/azure.rb +1 -1
  11. data/lib/active_harness/providers/bedrock.rb +2 -2
  12. data/lib/active_harness/providers/custom.rb +1 -1
  13. data/lib/active_harness/providers/images/openrouter.rb +49 -1
  14. data/lib/active_harness/providers/vertexai.rb +2 -2
  15. data/lib/active_harness/railtie.rb +1 -1
  16. data/lib/active_harness/{agent → request}/cost.rb +1 -1
  17. data/lib/active_harness/{agent → request}/custom_llm_backend.rb +4 -4
  18. data/lib/active_harness/{agent → request}/hooks.rb +4 -4
  19. data/lib/active_harness/{agent → request}/image.rb +7 -7
  20. data/lib/active_harness/{agent → request}/models.rb +15 -15
  21. data/lib/active_harness/{agent → request}/output_parser.rb +1 -1
  22. data/lib/active_harness/{agent → request}/prompt.rb +7 -7
  23. data/lib/active_harness/{agent → request}/providers.rb +1 -1
  24. data/lib/active_harness/{agent → request}/transcription.rb +7 -7
  25. data/lib/active_harness/{agent.rb → request.rb} +19 -19
  26. data/lib/active_harness/result.rb +3 -3
  27. data/lib/active_harness/tribunal/dsl.rb +7 -7
  28. data/lib/active_harness/tribunal/hooks.rb +9 -9
  29. data/lib/active_harness/tribunal.rb +62 -62
  30. data/lib/active_harness.rb +2 -2
  31. data/lib/generators/active_harness/install/install_generator.rb +1 -1
  32. data/lib/generators/active_harness/install/templates/controllers/ai_controller.rb +3 -3
  33. data/lib/generators/active_harness/install/templates/initializers/active_harness.rb +2 -2
  34. data/lib/generators/active_harness/install/templates/pipelines/support_pipeline.rb +2 -2
  35. data/lib/generators/active_harness/install/templates/{agents/support_guard_agent.rb → requests/support_guard_request.rb} +1 -1
  36. data/lib/generators/active_harness/install/templates/{agents/support_agent.rb → requests/support_request.rb} +1 -1
  37. data/lib/generators/active_harness/install/templates/tribunals/support_guard_tribunal.rb +3 -3
  38. data/lib/generators/active_harness/pipeline/templates/pipeline.rb.tt +1 -1
  39. data/lib/generators/active_harness/request/request_generator.rb +16 -0
  40. data/lib/generators/active_harness/{agent/templates/agent.rb.tt → request/templates/request.rb.tt} +1 -1
  41. data/lib/generators/active_harness/tribunal/templates/tribunal.rb.tt +1 -1
  42. metadata +17 -17
  43. data/lib/generators/active_harness/agent/agent_generator.rb +0 -16
@@ -74,7 +74,7 @@ ActiveHarness.configure do |config|
74
74
 
75
75
  # ---------------------------------------------------------------------------
76
76
  # Azure OpenAI Service
77
- # The `model:` in your agent config is the deployment name, not the model name.
77
+ # The `model:` in your request config is the deployment name, not the model name.
78
78
  # ---------------------------------------------------------------------------
79
79
  # config.azure_api_base = ENV["AZURE_API_BASE"] # "https://my-resource.openai.azure.com"
80
80
  # config.azure_api_key = ENV["AZURE_API_KEY"] # resource API key (preferred)
@@ -92,7 +92,7 @@ ActiveHarness.configure do |config|
92
92
  # config.custom["VLLMServer"]["url"] = "http://gpu-server:8000/v1/chat/completions"
93
93
  # config.custom["VLLMServer"]["api_key"] = ENV["VLLM_API_KEY"]
94
94
  #
95
- # Use in an agent:
95
+ # Use in a request:
96
96
  # model do
97
97
  # use provider: :custom, name: "MyLocal", model: "llama3.2"
98
98
  # fallback provider: :custom, name: "VLLMServer", model: "mixtral"
@@ -1,5 +1,5 @@
1
1
  require_relative "../tribunals/support_guard_tribunal"
2
- require_relative "../agents/support_agent"
2
+ require_relative "../requests/support_request"
3
3
 
4
4
  # Two-step pipeline: spam guard → answer.
5
5
  # Add more steps between them as needed.
@@ -11,7 +11,7 @@ class SupportPipeline < ActiveHarness::Pipeline
11
11
  end
12
12
 
13
13
  # Step 2 — RESPOND: generate the actual answer
14
- step :respond, SupportAgent
14
+ step :respond, SupportRequest
15
15
 
16
16
  before :step do |step_name, _payload|
17
17
  puts "[pipeline] → :#{step_name}"
@@ -1,6 +1,6 @@
1
1
  require_relative "../prompts/support_guard_prompt"
2
2
 
3
- class SupportGuardAgent < ActiveHarness::Agent
3
+ class SupportGuardRequest < ActiveHarness::Request
4
4
  system_prompt SupportGuardPrompt
5
5
  format :json
6
6
 
@@ -1,6 +1,6 @@
1
1
  require_relative "../prompts/support_prompt"
2
2
 
3
- class SupportAgent < ActiveHarness::Agent
3
+ class SupportRequest < ActiveHarness::Request
4
4
  system_prompt SupportPrompt
5
5
 
6
6
  model do
@@ -1,9 +1,9 @@
1
- require_relative "../agents/support_guard_agent"
1
+ require_relative "../requests/support_guard_request"
2
2
 
3
- # Runs SupportGuardAgent in parallel (single agent here, extendable).
3
+ # Runs SupportGuardRequest in parallel (single request here, extendable).
4
4
  # Verdict is true (safe) when no spam is detected.
5
5
  class SupportGuardTribunal < ActiveHarness::Tribunal
6
- agents SupportGuardAgent
6
+ requests SupportGuardRequest
7
7
 
8
8
  process do |results|
9
9
  results.none? { |r| r.processed["spam"] == true }
@@ -1,5 +1,5 @@
1
1
  class <%= class_name %>Pipeline < ActiveHarness::Pipeline
2
- step :respond, <%= class_name %>Agent
2
+ step :respond, <%= class_name %>Request
3
3
 
4
4
  before :step do |step_name, _payload|
5
5
  puts "[pipeline] → :#{step_name}"
@@ -0,0 +1,16 @@
1
+ require "rails/generators"
2
+
3
+ module ActiveHarness
4
+ module Generators
5
+ class RequestGenerator < Rails::Generators::NamedBase
6
+ source_root File.expand_path("templates", __dir__)
7
+
8
+ desc "Creates an ActiveHarness request in app/ai/requests/"
9
+
10
+ def create_request
11
+ template "request.rb.tt",
12
+ "app/ai/requests/#{file_name}_request.rb"
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,4 +1,4 @@
1
- class <%= class_name %>Agent < ActiveHarness::Agent
1
+ class <%= class_name %>Request < ActiveHarness::Request
2
2
  system_prompt <%= class_name %>Prompt
3
3
 
4
4
  model do
@@ -1,5 +1,5 @@
1
1
  class <%= class_name %>Tribunal < ActiveHarness::Tribunal
2
- agents <%= class_name %>Agent
2
+ requests <%= class_name %>Request
3
3
 
4
4
  process do |results|
5
5
  results.all? { |r| r.processed["result"] == true }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_harness
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.42
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - the-teacher
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-07-20 00:00:00.000000000 Z
11
+ date: 2026-09-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -46,16 +46,6 @@ extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
48
  - lib/active_harness.rb
49
- - lib/active_harness/agent.rb
50
- - lib/active_harness/agent/cost.rb
51
- - lib/active_harness/agent/custom_llm_backend.rb
52
- - lib/active_harness/agent/hooks.rb
53
- - lib/active_harness/agent/image.rb
54
- - lib/active_harness/agent/models.rb
55
- - lib/active_harness/agent/output_parser.rb
56
- - lib/active_harness/agent/prompt.rb
57
- - lib/active_harness/agent/providers.rb
58
- - lib/active_harness/agent/transcription.rb
59
49
  - lib/active_harness/configuration.rb
60
50
  - lib/active_harness/core/errors.rb
61
51
  - lib/active_harness/core/hooks.rb
@@ -93,22 +83,30 @@ files:
93
83
  - lib/active_harness/providers/vertexai.rb
94
84
  - lib/active_harness/providers/xai.rb
95
85
  - lib/active_harness/railtie.rb
86
+ - lib/active_harness/request.rb
87
+ - lib/active_harness/request/cost.rb
88
+ - lib/active_harness/request/custom_llm_backend.rb
89
+ - lib/active_harness/request/hooks.rb
90
+ - lib/active_harness/request/image.rb
91
+ - lib/active_harness/request/models.rb
92
+ - lib/active_harness/request/output_parser.rb
93
+ - lib/active_harness/request/prompt.rb
94
+ - lib/active_harness/request/providers.rb
95
+ - lib/active_harness/request/transcription.rb
96
96
  - lib/active_harness/result.rb
97
97
  - lib/active_harness/tribunal.rb
98
98
  - lib/active_harness/tribunal/dsl.rb
99
99
  - lib/active_harness/tribunal/hooks.rb
100
100
  - lib/active_harness/tribunal/processing.rb
101
- - lib/generators/active_harness/agent/agent_generator.rb
102
- - lib/generators/active_harness/agent/templates/agent.rb.tt
103
101
  - lib/generators/active_harness/install/install_generator.rb
104
- - lib/generators/active_harness/install/templates/agents/support_agent.rb
105
- - lib/generators/active_harness/install/templates/agents/support_guard_agent.rb
106
102
  - lib/generators/active_harness/install/templates/controllers/ai_controller.rb
107
103
  - lib/generators/active_harness/install/templates/initializers/active_harness.rb
108
104
  - lib/generators/active_harness/install/templates/memory/app_memory.rb
109
105
  - lib/generators/active_harness/install/templates/pipelines/support_pipeline.rb
110
106
  - lib/generators/active_harness/install/templates/prompts/support_guard_prompt.rb
111
107
  - lib/generators/active_harness/install/templates/prompts/support_prompt.rb
108
+ - lib/generators/active_harness/install/templates/requests/support_guard_request.rb
109
+ - lib/generators/active_harness/install/templates/requests/support_request.rb
112
110
  - lib/generators/active_harness/install/templates/tribunals/support_guard_tribunal.rb
113
111
  - lib/generators/active_harness/memory/memory_generator.rb
114
112
  - lib/generators/active_harness/memory/templates/memory.rb.tt
@@ -120,6 +118,8 @@ files:
120
118
  - lib/generators/active_harness/pipeline/templates/pipeline.rb.tt
121
119
  - lib/generators/active_harness/prompt/prompt_generator.rb
122
120
  - lib/generators/active_harness/prompt/templates/prompt.rb.tt
121
+ - lib/generators/active_harness/request/request_generator.rb
122
+ - lib/generators/active_harness/request/templates/request.rb.tt
123
123
  - lib/generators/active_harness/tribunal/templates/tribunal.rb.tt
124
124
  - lib/generators/active_harness/tribunal/tribunal_generator.rb
125
125
  homepage: https://github.com/the-teacher/active_harness
@@ -144,5 +144,5 @@ requirements: []
144
144
  rubygems_version: 3.0.3.1
145
145
  signing_key:
146
146
  specification_version: 4
147
- summary: DSL for describing and running AI agents with safety layers
147
+ summary: DSL for describing and running resilient LLM requests with safety layers
148
148
  test_files: []
@@ -1,16 +0,0 @@
1
- require "rails/generators"
2
-
3
- module ActiveHarness
4
- module Generators
5
- class AgentGenerator < Rails::Generators::NamedBase
6
- source_root File.expand_path("templates", __dir__)
7
-
8
- desc "Creates an ActiveHarness agent in app/ai/agents/"
9
-
10
- def create_agent
11
- template "agent.rb.tt",
12
- "app/ai/agents/#{file_name}_agent.rb"
13
- end
14
- end
15
- end
16
- end