e03fd2956d
CI / benchmark-publish (pull_request) Has been skipped
CI / build (pull_request) Successful in 18s
CI / lint (pull_request) Failing after 18s
CI / helm (pull_request) Successful in 24s
CI / typecheck (pull_request) Failing after 52s
CI / security (pull_request) Failing after 53s
CI / coverage (pull_request) Has been skipped
CI / benchmark-regression (pull_request) Has been skipped
CI / unit_tests (pull_request) Failing after 1m48s
CI / docker (pull_request) Has been skipped
CI / quality (pull_request) Successful in 3m42s
CI / e2e_tests (pull_request) Failing after 13m56s
CI / integration_tests (pull_request) Failing after 21m12s
CI / status-check (pull_request) Failing after 2s
Add missing provider: field to all actor examples in examples/actors/. Fix llm_with_tools.yaml actor name from assistants/file_analyzer to local/assistants-file_analyzer (custom actors must use local/ namespace and cannot contain two slashes). Add validate-all command to helper_actor_examples.py that uses ActorLoader to validate all examples via business logic checks. Add integration test Validate All Actor Examples Import Without Errors to actor_examples.robot that confirms every example in examples/actors/ can be imported without errors. ISSUES CLOSED: #1504
216 lines
5.7 KiB
YAML
216 lines
5.7 KiB
YAML
# Graph Actor - Test-Driven Development Workflow
|
|
# Demonstrates a multi-node graph with conditional routing and subgraphs
|
|
|
|
name: workflows/test_driven_dev
|
|
type: graph
|
|
description: Test-driven development workflow with automated testing and feedback loops
|
|
version: "1.0"
|
|
|
|
# LLM model for agent nodes
|
|
provider: openai
|
|
model: gpt-4
|
|
|
|
# Graph topology
|
|
route:
|
|
# Define all nodes in the workflow
|
|
nodes:
|
|
# Entry point: planning agent
|
|
- id: planner
|
|
type: agent
|
|
name: Test Planner
|
|
description: Plans test cases based on requirements
|
|
config:
|
|
model: gpt-4
|
|
prompt: |
|
|
You are a test planning expert. Analyze the requirements and create
|
|
a comprehensive test plan covering:
|
|
- Unit tests for individual functions
|
|
- Integration tests for component interactions
|
|
- Edge cases and error conditions
|
|
tools:
|
|
- files/read_file
|
|
- files/list_directory
|
|
|
|
# Write tests first
|
|
- id: test_writer
|
|
type: agent
|
|
name: Test Writer
|
|
description: Writes test cases based on the plan
|
|
config:
|
|
model: gpt-4
|
|
prompt: |
|
|
You are a test writing expert. Write pytest tests based on the plan.
|
|
Follow best practices:
|
|
- Use descriptive test names
|
|
- Include docstrings
|
|
- Use fixtures appropriately
|
|
- Test one thing per test
|
|
tools:
|
|
- files/write_file
|
|
- files/read_file
|
|
|
|
# Run the tests (should fail initially)
|
|
- id: run_tests
|
|
type: tool
|
|
name: Test Runner
|
|
description: Executes pytest test suite
|
|
config:
|
|
tool_name: testing/run_pytest
|
|
parameters:
|
|
verbose: true
|
|
coverage: true
|
|
|
|
# Check test results
|
|
- id: check_results
|
|
type: conditional
|
|
name: Test Result Checker
|
|
description: Routes based on test pass/fail status
|
|
config:
|
|
conditions:
|
|
- check: "state.get('tests_passed') == True"
|
|
route_to: code_review
|
|
- check: "state.get('tests_passed') == False"
|
|
route_to: implementation_writer
|
|
|
|
# Write implementation to make tests pass
|
|
- id: implementation_writer
|
|
type: agent
|
|
name: Implementation Writer
|
|
description: Writes code to make the tests pass
|
|
config:
|
|
model: gpt-4
|
|
prompt: |
|
|
You are an implementation expert. Write clean, well-documented code
|
|
that makes the failing tests pass. Follow SOLID principles and
|
|
write maintainable code.
|
|
tools:
|
|
- files/write_file
|
|
- files/read_file
|
|
|
|
# Run tests again after implementation
|
|
- id: rerun_tests
|
|
type: tool
|
|
name: Test Rerunner
|
|
description: Re-executes tests after implementation
|
|
config:
|
|
tool_name: testing/run_pytest
|
|
parameters:
|
|
verbose: true
|
|
coverage: true
|
|
|
|
# Check if tests pass now
|
|
- id: verify_tests
|
|
type: conditional
|
|
name: Test Verification
|
|
description: Verify tests pass after implementation
|
|
config:
|
|
conditions:
|
|
- check: "state.get('tests_passed') == True"
|
|
route_to: code_review
|
|
- check: "state.get('tests_passed') == False and state.get('retry_count', 0) < 3"
|
|
route_to: debug_failures
|
|
- check: "state.get('tests_passed') == False and state.get('retry_count', 0) >= 3"
|
|
route_to: escalate
|
|
|
|
# Debug test failures
|
|
- id: debug_failures
|
|
type: agent
|
|
name: Debugger
|
|
description: Analyzes and fixes test failures
|
|
config:
|
|
model: gpt-4
|
|
prompt: |
|
|
You are a debugging expert. Analyze the test failures and fix the
|
|
implementation. Look for:
|
|
- Logic errors
|
|
- Edge cases
|
|
- Type mismatches
|
|
- Missing error handling
|
|
tools:
|
|
- files/read_file
|
|
- files/write_file
|
|
|
|
# Code review (subgraph)
|
|
- id: code_review
|
|
type: subgraph
|
|
name: Code Reviewer
|
|
description: Runs code review workflow
|
|
actor_ref: local/code-reviewer
|
|
|
|
# Escalate if tests keep failing
|
|
- id: escalate
|
|
type: tool
|
|
name: Escalation Handler
|
|
description: Escalates persistent failures to human
|
|
config:
|
|
tool_name: notifications/send_alert
|
|
parameters:
|
|
channel: engineering
|
|
priority: high
|
|
|
|
# Define edges (workflow transitions)
|
|
edges:
|
|
# Linear flow from planner to test writer
|
|
- from_node: planner
|
|
to_node: test_writer
|
|
|
|
# Run tests after writing them
|
|
- from_node: test_writer
|
|
to_node: run_tests
|
|
|
|
# Check results after running tests
|
|
- from_node: run_tests
|
|
to_node: check_results
|
|
|
|
# Conditional routing from check_results
|
|
# (handled by the conditional node itself)
|
|
|
|
# Write implementation if tests fail
|
|
- from_node: implementation_writer
|
|
to_node: rerun_tests
|
|
|
|
# Verify tests after rerunning
|
|
- from_node: rerun_tests
|
|
to_node: verify_tests
|
|
|
|
# Debug if tests still fail
|
|
- from_node: debug_failures
|
|
to_node: rerun_tests
|
|
|
|
# All paths eventually lead to code review or escalation
|
|
# (handled by conditional nodes)
|
|
|
|
# Entry and exit points
|
|
entry_node: planner
|
|
exit_nodes:
|
|
- code_review
|
|
- escalate
|
|
|
|
# Context settings
|
|
context_view: strategist
|
|
memory:
|
|
enabled: true
|
|
max_messages: 100
|
|
max_tokens: 16000
|
|
summarize_old: true
|
|
|
|
context:
|
|
include_files:
|
|
- "README.md"
|
|
- "requirements.txt"
|
|
- "pyproject.toml"
|
|
include_dirs:
|
|
- "src/"
|
|
- "tests/"
|
|
exclude_patterns:
|
|
- "**/__pycache__/**"
|
|
- "*.pyc"
|
|
- "**/.pytest_cache/**"
|
|
- "**/htmlcov/**"
|
|
max_context_tokens: 32000
|
|
|
|
# Environment variables
|
|
env_vars:
|
|
PYTEST_ARGS: --verbose --cov --cov-report=html
|
|
MAX_RETRIES: "3"
|