forked from cleveragents/cleveragents-core
229 lines
7.1 KiB
Gherkin
229 lines
7.1 KiB
Gherkin
Feature: Actor-first port of v2 agent and LangGraph suites
|
|
As a developer migrating v2 agent flows
|
|
I want actor-only agent and LangGraph coverage
|
|
So that v3 matches the v2 behaviors without provider/model flags
|
|
|
|
Background:
|
|
Given the agent system is initialized with actor-first configuration
|
|
|
|
# From langgraph_state_management.feature
|
|
Scenario: LangGraph with actor-based state management
|
|
Given I have a stateful LangGraph configuration:
|
|
"""
|
|
{
|
|
"name": "stateful_graph",
|
|
"actor": "openai/gpt-4",
|
|
"checkpointing": true,
|
|
"enable_time_travel": true,
|
|
"nodes": {
|
|
"accumulate": {
|
|
"type": "function",
|
|
"function": "add_to_state"
|
|
}
|
|
},
|
|
"edges": [
|
|
{"source": "start", "target": "accumulate"},
|
|
{"source": "accumulate", "target": "end"}
|
|
]
|
|
}
|
|
"""
|
|
When I create the stateful graph
|
|
Then the graph should be created with actor "openai/gpt-4"
|
|
And the graph state should be persisted
|
|
And time travel should be enabled
|
|
|
|
# From agent_modules_coverage.feature
|
|
Scenario: Create agent with actor configuration
|
|
Given I have an agent configuration:
|
|
"""
|
|
{
|
|
"name": "test_agent",
|
|
"type": "base",
|
|
"actor": "anthropic/claude-3"
|
|
}
|
|
"""
|
|
When I create an agent from the configuration
|
|
Then the agent should be created successfully
|
|
And the agent should use actor "anthropic/claude-3"
|
|
And the agent module should be accessible
|
|
|
|
# From chain_agent_comprehensive.feature
|
|
Scenario: Chain agent with actor and steps
|
|
Given I have a chain agent configuration:
|
|
"""
|
|
{
|
|
"name": "test_chain",
|
|
"type": "chain",
|
|
"actor": "openai/gpt-3.5-turbo",
|
|
"steps": ["validate", "transform", "output"],
|
|
"prompt": "Process this: {message}"
|
|
}
|
|
"""
|
|
When I create a chain agent from the configuration
|
|
Then the chain agent should be created successfully
|
|
And the chain agent should have 3 steps
|
|
And the chain agent should use actor "openai/gpt-3.5-turbo"
|
|
|
|
Scenario: Process message with actor-based chain agent
|
|
Given I have a chain agent with actor "local/custom-processor"
|
|
And the chain has steps ["parse", "analyze", "format"]
|
|
When I process the message "Test input"
|
|
Then the chain should use the specified actor
|
|
And the result should show processing through all steps
|
|
|
|
# From composite_agent_coverage.feature pattern
|
|
Scenario: Composite agent with multiple actors
|
|
Given I have a composite agent configuration:
|
|
"""
|
|
{
|
|
"name": "multi_actor_composite",
|
|
"type": "composite",
|
|
"agents": [
|
|
{
|
|
"name": "analyzer",
|
|
"actor": "openai/gpt-4",
|
|
"role": "analyze"
|
|
},
|
|
{
|
|
"name": "generator",
|
|
"actor": "anthropic/claude-3",
|
|
"role": "generate"
|
|
},
|
|
{
|
|
"name": "validator",
|
|
"actor": "local/validator",
|
|
"role": "validate"
|
|
}
|
|
]
|
|
}
|
|
"""
|
|
When I create a composite agent from the configuration
|
|
Then the composite agent should have 3 sub-agents
|
|
And each sub-agent should use its configured actor
|
|
And parallel processing should work with all actors
|
|
|
|
# From reactive_agents.feature pattern
|
|
Scenario: Reactive agent with actor-based streaming
|
|
Given I have a reactive agent configuration:
|
|
"""
|
|
{
|
|
"name": "stream_agent",
|
|
"type": "reactive",
|
|
"actor": "openai/gpt-4",
|
|
"stream_config": {
|
|
"stream_type": "transform",
|
|
"operators": ["map", "filter", "reduce"]
|
|
}
|
|
}
|
|
"""
|
|
When I create a reactive agent from the configuration
|
|
Then the agent should support reactive streaming
|
|
And the stream should use actor "openai/gpt-4"
|
|
And operators should transform data through the actor
|
|
|
|
# From tool_agent.feature pattern
|
|
Scenario: Tool agent with actor and tool configuration
|
|
Given I have a tool agent configuration:
|
|
"""
|
|
{
|
|
"name": "tool_agent",
|
|
"type": "tool",
|
|
"actor": "openai/gpt-4",
|
|
"tools": [
|
|
{
|
|
"name": "calculator",
|
|
"type": "function",
|
|
"function": "calculate"
|
|
},
|
|
{
|
|
"name": "search",
|
|
"type": "api",
|
|
"endpoint": "search_api"
|
|
}
|
|
]
|
|
}
|
|
"""
|
|
When I create a tool agent from the configuration
|
|
Then the tool agent should have 2 tools available
|
|
And the tool agent should use actor "openai/gpt-4"
|
|
And tool calls should be routed through the actor
|
|
|
|
# LangGraph visualization with actors
|
|
Scenario: Visualize actor-based LangGraph
|
|
Given I have a complex LangGraph with multiple actors:
|
|
"""
|
|
{
|
|
"name": "visualization_graph",
|
|
"nodes": {
|
|
"input": {
|
|
"type": "input",
|
|
"actor": "openai/gpt-3.5-turbo"
|
|
},
|
|
"process": {
|
|
"type": "llm",
|
|
"actor": "anthropic/claude-3"
|
|
},
|
|
"validate": {
|
|
"type": "tool",
|
|
"actor": "local/validator"
|
|
},
|
|
"output": {
|
|
"type": "output",
|
|
"actor": "openai/gpt-4"
|
|
}
|
|
},
|
|
"edges": [
|
|
{"source": "input", "target": "process"},
|
|
{"source": "process", "target": "validate"},
|
|
{"source": "validate", "target": "output"}
|
|
]
|
|
}
|
|
"""
|
|
When I visualize the graph
|
|
Then the visualization should show all nodes with their actors
|
|
And the edge flow should be clearly represented
|
|
And actor transitions should be highlighted
|
|
|
|
# Agent factory with default actor
|
|
Scenario: Agent factory creates agents with default actor
|
|
Given I have an agent factory with default actor "openai/gpt-4"
|
|
When I create multiple agents using the factory:
|
|
| agent_name | agent_type |
|
|
| parser | chain |
|
|
| analyzer | tool |
|
|
| generator | composite |
|
|
Then all agents should use the default actor "openai/gpt-4"
|
|
And each agent should have the correct type
|
|
|
|
# LangGraph with conditional routing based on actor capabilities
|
|
Scenario: Conditional routing based on actor capabilities
|
|
Given I have a LangGraph with conditional routing:
|
|
"""
|
|
{
|
|
"name": "capability_router",
|
|
"nodes": {
|
|
"router": {
|
|
"type": "conditional",
|
|
"conditions": [
|
|
{
|
|
"if": "needs_vision",
|
|
"then": "vision_processor",
|
|
"actor": "openai/gpt-4-vision"
|
|
},
|
|
{
|
|
"if": "needs_code",
|
|
"then": "code_generator",
|
|
"actor": "anthropic/claude-3-opus"
|
|
},
|
|
{
|
|
"else": "general_processor",
|
|
"actor": "openai/gpt-3.5-turbo"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
"""
|
|
When I route a request that needs vision
|
|
Then the request should be routed to "openai/gpt-4-vision"
|
|
And the routing decision should be based on actor capabilities |