language-operator 0.1.48 → 0.1.49

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e9abeed9980c39ca3748905b04a564cc331a31d51e2c7ea7cec64af9e706ebae
4
- data.tar.gz: d8a0fcb4f2091819e58cd5f15963ed06f2282af03ed739eeba98584bacc0dd38
3
+ metadata.gz: d89b743075960db9dd988ae5f887180b8516d195957926e51ab4b89d8a196d52
4
+ data.tar.gz: cc225f6a8b35c482b67f23089011cf54d52317773f6fbbfc4cd1b5c07bf4ccd2
5
5
  SHA512:
6
- metadata.gz: 4771c989514116d9ea6b9910e603a8c803ca0ff7fbc6df08989ce5074962bb91204aaab20040a8dba27eb317be2edbb4ffd7296e7f77d4375321faccedf56e94
7
- data.tar.gz: e12b6e974277518cae6a338920ece81506c9181d055462ccd97c56521e91a76130bdfec95e9ff0fe16ccaeef84cd9befbb95405019d749eb5874f659d2fdbce4
6
+ metadata.gz: 616074e08d5e3910920bebdcab8cc0896edc196561497864706c054ef5ffd7a3a304bdb37d163e47ce461a60f228257977e081c38de074c4a22a3ff5732d57a0
7
+ data.tar.gz: e24978393c2a38de8f0fecd130d3cad25507f6373a46a1e2d11db0af3d72f76e3a4d92f87c8337198cd5267c4f4fb5770f13d640019d4ac8905bceb6974e931f
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- language-operator (0.1.48)
4
+ language-operator (0.1.49)
5
5
  faraday (~> 2.0)
6
6
  k8s-ruby (~> 0.17)
7
7
  mcp (~> 0.4)
@@ -153,15 +153,23 @@ module LanguageOperator
153
153
  # Build prompt for LLM
154
154
  prompt = build_neural_prompt(task, validated_inputs)
155
155
 
156
+ logger.info('Sending prompt to LLM',
157
+ task: task.name,
158
+ prompt_length: prompt.length)
159
+
156
160
  # Execute LLM call within traced span
157
161
  outputs = tracer.in_span('gen_ai.chat', attributes: neural_task_attributes(task, prompt, validated_inputs)) do |span|
158
162
  # Call LLM with full tool access
159
163
  response = @agent.send_message(prompt)
164
+
165
+ logger.info('LLM response received, extracting content',
166
+ task: task.name)
167
+
160
168
  response_text = response.is_a?(String) ? response : response.content
161
169
 
162
- logger.debug('Neural task response received',
163
- task: task.name,
164
- response_length: response_text.length)
170
+ logger.info('Neural task response received',
171
+ task: task.name,
172
+ response_length: response_text.length)
165
173
 
166
174
  # Record token usage and response metadata
167
175
  record_token_usage(response, span)
@@ -169,18 +177,28 @@ module LanguageOperator
169
177
  # Record tool calls if available
170
178
  record_tool_calls(response, span)
171
179
 
180
+ logger.info('Parsing neural task response',
181
+ task: task.name)
182
+
172
183
  # Parse response within child span
173
184
  parsed_outputs = tracer.in_span('task_executor.parse_response') do |parse_span|
174
185
  record_parse_metadata(response_text, parse_span)
175
186
  parse_neural_response(response_text, task)
176
187
  end
177
188
 
189
+ logger.info('Response parsed successfully',
190
+ task: task.name,
191
+ output_keys: parsed_outputs.keys)
192
+
178
193
  # Record output metadata
179
194
  record_output_metadata(parsed_outputs, span)
180
195
 
181
196
  parsed_outputs
182
197
  end
183
198
 
199
+ logger.info('Validating task outputs',
200
+ task: task.name)
201
+
184
202
  # Validate outputs against schema
185
203
  task.validate_outputs(outputs)
186
204
  end
@@ -349,8 +367,8 @@ module LanguageOperator
349
367
  def default_config
350
368
  {
351
369
  timeout_symbolic: 30.0, # Default timeout for symbolic tasks (seconds)
352
- timeout_neural: 120.0, # Default timeout for neural tasks (seconds)
353
- timeout_hybrid: 120.0, # Default timeout for hybrid tasks (seconds)
370
+ timeout_neural: 240.0, # Default timeout for neural tasks (seconds)
371
+ timeout_hybrid: 240.0, # Default timeout for hybrid tasks (seconds)
354
372
  max_retries: 3, # Default max retry attempts
355
373
  retry_delay_base: 1.0, # Base delay for exponential backoff
356
374
  retry_delay_max: 10.0 # Maximum delay between retries
@@ -1078,6 +1078,11 @@ module LanguageOperator
1078
1078
  # Detect available models in the cluster
1079
1079
  model_env = detect_model_config
1080
1080
 
1081
+ if model_env.nil?
1082
+ Formatters::ProgressFormatter.warn('Could not detect model configuration from cluster')
1083
+ Formatters::ProgressFormatter.warn('Agent may fail without MODEL_ENDPOINTS configured')
1084
+ end
1085
+
1081
1086
  env_vars = [
1082
1087
  { 'name' => 'AGENT_NAME', 'value' => name },
1083
1088
  { 'name' => 'AGENT_MODE', 'value' => 'autonomous' },
@@ -1148,8 +1153,8 @@ module LanguageOperator
1148
1153
  { 'name' => 'LLM_MODEL', 'value' => model_id },
1149
1154
  { 'name' => 'OPENAI_API_KEY', 'value' => 'sk-dummy-key-for-local-proxy' }
1150
1155
  ]
1151
- rescue StandardError
1152
- # If we can't detect models, return nil and let the agent handle it
1156
+ rescue StandardError => e
1157
+ Formatters::ProgressFormatter.error("Failed to detect model configuration: #{e.message}")
1153
1158
  nil
1154
1159
  end
1155
1160
 
@@ -86,6 +86,8 @@ Study these examples to understand the task/main model with organic functions:
86
86
 
87
87
  ### Example 1: Simple Scheduled Agent (Fully Neural)
88
88
  ```ruby
89
+ require 'language_operator'
90
+
89
91
  agent "daily-report" do
90
92
  description "Generate daily sales report"
91
93
  mode :scheduled
@@ -115,6 +117,8 @@ end
115
117
 
116
118
  ### Example 2: Hybrid Neural-Symbolic Agent
117
119
  ```ruby
120
+ require 'language_operator'
121
+
118
122
  agent "code-reviewer" do
119
123
  description "Review pull requests"
120
124
 
@@ -148,6 +152,8 @@ end
148
152
 
149
153
  ### Example 3: Multi-Step Agent with Tools
150
154
  ```ruby
155
+ require 'language_operator'
156
+
151
157
  agent "data-pipeline" do
152
158
  description "ETL pipeline"
153
159
 
@@ -2,7 +2,7 @@
2
2
  :openapi: 3.0.3
3
3
  :info:
4
4
  :title: Language Operator Agent API
5
- :version: 0.1.48
5
+ :version: 0.1.49
6
6
  :description: HTTP API endpoints exposed by Language Operator reactive agents
7
7
  :contact:
8
8
  :name: Language Operator
@@ -3,7 +3,7 @@
3
3
  "$id": "https://github.com/language-operator/language-operator-gem/schema/agent-dsl.json",
4
4
  "title": "Language Operator Agent DSL",
5
5
  "description": "Schema for defining autonomous AI agents using the Language Operator DSL",
6
- "version": "0.1.48",
6
+ "version": "0.1.49",
7
7
  "type": "object",
8
8
  "properties": {
9
9
  "name": {
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module LanguageOperator
4
- VERSION = '0.1.48'
4
+ VERSION = '0.1.49'
5
5
  end
data/synth/002/agent.rb CHANGED
@@ -7,14 +7,13 @@ agent 'test-agent' do
7
7
  mode :scheduled
8
8
  schedule '*/10 * * * *'
9
9
 
10
- task :generate_fortune,
11
- instructions: 'Generate a random fortune for the user',
10
+ task :tell_fortune,
11
+ instructions: 'Generate a random fortune message',
12
12
  inputs: {},
13
13
  outputs: { fortune: 'string' }
14
14
 
15
15
  main do |_inputs|
16
- fortune_data = execute_task(:generate_fortune)
17
- { fortune: fortune_data[:fortune] }
16
+ execute_task(:tell_fortune)
18
17
  end
19
18
 
20
19
  output do |outputs|
data/synth/002/output.log CHANGED
@@ -5,16 +5,16 @@
5
5
  ⚬ Chat session initialized (with_tools=false)
6
6
  ⚬ Executing main block (agent=test-agent, task_count=1)
7
7
  ⚬ Executing main block (inputs_keys=[])
8
- ⚬ Executing task (task=generate_fortune, type=neural, timeout=120.0, max_retries=3)
9
- ⚠ Task execution timed out (task=generate_fortune, attempt=1, timeout=120.0, execution_time=120.001)
10
- ✗ Task execution failed (task=generate_fortune, error_category=TIMEOUT, error_class=LanguageOperator::Agent::TaskTimeoutError, error_message=Task 'generate_fortune' execution failed: timed out after 120.0s, execution_time=120.001, retry_count=0, retryable=false, backtrace=["/usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.46/lib/language_operator/agent/task_executor.rb:475:in 'LanguageOperator::Agent::TaskExecutor#execute_single_attempt'", "/usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.46/lib/language_operator/agent/task_executor.rb:408:in 'LanguageOperator::Agent::TaskExecutor#execute_with_retry'", "/usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.46/lib/language_operator/agent/task_executor.rb:126:in 'block in LanguageOperator::Agent::TaskExecutor#execute_task'", "/usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.46/lib/language_operator/agent/instrumentation.rb:45:in 'block in LanguageOperator::Agent::Instrumentation#with_span'", "/usr/lib/ruby/gems/3.4.0/gems/opentelemetry-api-1.7.0/lib/opentelemetry/trace/tracer.rb:37:in 'block in OpenTelemetry::Trace::Tracer#in_span'"])
11
- ✗ Task execution failed (task=generate_fortune, error_category=SYSTEM, error_class=LanguageOperator::Agent::TaskTimeoutError, error_message=Task 'generate_fortune' execution failed: timed out after 120.0s, execution_time=120.001, retry_count=0, retryable=false, backtrace=["/usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.46/lib/language_operator/agent/task_executor.rb:475:in 'LanguageOperator::Agent::TaskExecutor#execute_single_attempt'", "/usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.46/lib/language_operator/agent/task_executor.rb:408:in 'LanguageOperator::Agent::TaskExecutor#execute_with_retry'", "/usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.46/lib/language_operator/agent/task_executor.rb:126:in 'block in LanguageOperator::Agent::TaskExecutor#execute_task'", "/usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.46/lib/language_operator/agent/instrumentation.rb:45:in 'block in LanguageOperator::Agent::Instrumentation#with_span'", "/usr/lib/ruby/gems/3.4.0/gems/opentelemetry-api-1.7.0/lib/opentelemetry/trace/tracer.rb:37:in 'block in OpenTelemetry::Trace::Tracer#in_span'"])
12
- ✗ Main block execution failed (error=LanguageOperator::Agent::TaskTimeoutError, message=Task 'generate_fortune' execution failed: timed out after 120.0s, backtrace=["/usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.46/lib/language_operator/agent/task_executor.rb:475:in 'LanguageOperator::Agent::TaskExecutor#execute_single_attempt'", "/usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.46/lib/language_operator/agent/task_executor.rb:408:in 'LanguageOperator::Agent::TaskExecutor#execute_with_retry'", "/usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.46/lib/language_operator/agent/task_executor.rb:126:in 'block in LanguageOperator::Agent::TaskExecutor#execute_task'", "/usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.46/lib/language_operator/agent/instrumentation.rb:45:in 'block in LanguageOperator::Agent::Instrumentation#with_span'", "/usr/lib/ruby/gems/3.4.0/gems/opentelemetry-api-1.7.0/lib/opentelemetry/trace/tracer.rb:37:in 'block in OpenTelemetry::Trace::Tracer#in_span'"])
13
- Error loading agent code: Task 'generate_fortune' execution failed: timed out after 120.0s
14
- /usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.46/lib/language_operator/agent/task_executor.rb:475:in 'LanguageOperator::Agent::TaskExecutor#execute_single_attempt'
15
- /usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.46/lib/language_operator/agent/task_executor.rb:408:in 'LanguageOperator::Agent::TaskExecutor#execute_with_retry'
16
- /usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.46/lib/language_operator/agent/task_executor.rb:126:in 'block in LanguageOperator::Agent::TaskExecutor#execute_task'
17
- /usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.46/lib/language_operator/agent/instrumentation.rb:45:in 'block in LanguageOperator::Agent::Instrumentation#with_span'
8
+ ⚬ Executing task (task=tell_fortune, type=neural, timeout=120.0, max_retries=3)
9
+ ⚠ Task execution timed out (task=tell_fortune, attempt=1, timeout=120.0, execution_time=120.001)
10
+ ✗ Task execution failed (task=tell_fortune, error_category=TIMEOUT, error_class=LanguageOperator::Agent::TaskTimeoutError, error_message=Task 'tell_fortune' execution failed: timed out after 120.0s, execution_time=120.001, retry_count=0, retryable=false, backtrace=["/usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.48/lib/language_operator/agent/task_executor.rb:481:in 'LanguageOperator::Agent::TaskExecutor#execute_single_attempt'", "/usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.48/lib/language_operator/agent/task_executor.rb:414:in 'LanguageOperator::Agent::TaskExecutor#execute_with_retry'", "/usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.48/lib/language_operator/agent/task_executor.rb:126:in 'block in LanguageOperator::Agent::TaskExecutor#execute_task'", "/usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.48/lib/language_operator/agent/instrumentation.rb:45:in 'block in LanguageOperator::Agent::Instrumentation#with_span'", "/usr/lib/ruby/gems/3.4.0/gems/opentelemetry-api-1.7.0/lib/opentelemetry/trace/tracer.rb:37:in 'block in OpenTelemetry::Trace::Tracer#in_span'"])
11
+ ✗ Task execution failed (task=tell_fortune, error_category=SYSTEM, error_class=LanguageOperator::Agent::TaskTimeoutError, error_message=Task 'tell_fortune' execution failed: timed out after 120.0s, execution_time=120.001, retry_count=0, retryable=false, backtrace=["/usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.48/lib/language_operator/agent/task_executor.rb:481:in 'LanguageOperator::Agent::TaskExecutor#execute_single_attempt'", "/usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.48/lib/language_operator/agent/task_executor.rb:414:in 'LanguageOperator::Agent::TaskExecutor#execute_with_retry'", "/usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.48/lib/language_operator/agent/task_executor.rb:126:in 'block in LanguageOperator::Agent::TaskExecutor#execute_task'", "/usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.48/lib/language_operator/agent/instrumentation.rb:45:in 'block in LanguageOperator::Agent::Instrumentation#with_span'", "/usr/lib/ruby/gems/3.4.0/gems/opentelemetry-api-1.7.0/lib/opentelemetry/trace/tracer.rb:37:in 'block in OpenTelemetry::Trace::Tracer#in_span'"])
12
+ ✗ Main block execution failed (error=LanguageOperator::Agent::TaskTimeoutError, message=Task 'tell_fortune' execution failed: timed out after 120.0s, backtrace=["/usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.48/lib/language_operator/agent/task_executor.rb:481:in 'LanguageOperator::Agent::TaskExecutor#execute_single_attempt'", "/usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.48/lib/language_operator/agent/task_executor.rb:414:in 'LanguageOperator::Agent::TaskExecutor#execute_with_retry'", "/usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.48/lib/language_operator/agent/task_executor.rb:126:in 'block in LanguageOperator::Agent::TaskExecutor#execute_task'", "/usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.48/lib/language_operator/agent/instrumentation.rb:45:in 'block in LanguageOperator::Agent::Instrumentation#with_span'", "/usr/lib/ruby/gems/3.4.0/gems/opentelemetry-api-1.7.0/lib/opentelemetry/trace/tracer.rb:37:in 'block in OpenTelemetry::Trace::Tracer#in_span'"])
13
+ Error loading agent code: Task 'tell_fortune' execution failed: timed out after 120.0s
14
+ /usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.48/lib/language_operator/agent/task_executor.rb:481:in 'LanguageOperator::Agent::TaskExecutor#execute_single_attempt'
15
+ /usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.48/lib/language_operator/agent/task_executor.rb:414:in 'LanguageOperator::Agent::TaskExecutor#execute_with_retry'
16
+ /usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.48/lib/language_operator/agent/task_executor.rb:126:in 'block in LanguageOperator::Agent::TaskExecutor#execute_task'
17
+ /usr/lib/ruby/gems/3.4.0/gems/language-operator-0.1.48/lib/language_operator/agent/instrumentation.rb:45:in 'block in LanguageOperator::Agent::Instrumentation#with_span'
18
18
  /usr/lib/ruby/gems/3.4.0/gems/opentelemetry-api-1.7.0/lib/opentelemetry/trace/tracer.rb:37:in 'block in OpenTelemetry::Trace::Tracer#in_span'
19
19
  No fallback configured, exiting
20
20
  ✗ Agent failed with exit code: 1
data/synth/README.md ADDED
@@ -0,0 +1,5 @@
1
+ # Synthesis Tests
2
+
3
+ Canonical "hey this might actually work" synthesis suite.
4
+
5
+ Model: [Magistral-Small-2509](https://huggingface.co/mistralai/Magistral-Small-2509) 4bit MLX
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: language-operator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.48
4
+ version: 0.1.49
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Ryan
@@ -572,6 +572,7 @@ files:
572
572
  - synth/002/agent.rb
573
573
  - synth/002/agent.txt
574
574
  - synth/002/output.log
575
+ - synth/README.md
575
576
  homepage: https://github.com/language-operator/language-operator
576
577
  licenses:
577
578
  - FSL-1.1-Apache-2.0