forked from cleveragents/cleveragents-core
77 lines
2.5 KiB
Python
77 lines
2.5 KiB
Python
import io
|
|
import sys
|
|
from unittest.mock import patch
|
|
|
|
from behave import given
|
|
from behave import then
|
|
from behave import when
|
|
|
|
from cleveragents.agents.base import Agent
|
|
from cleveragents.interactive.commands import execute_command
|
|
from cleveragents.interactive.commands import format_help_text
|
|
from cleveragents.interactive.commands import parse_command
|
|
from cleveragents.interactive.session import InteractiveSession
|
|
from cleveragents.routing.router import Router
|
|
from cleveragents.templates.renderer import TemplateRenderer
|
|
|
|
|
|
class MockAgent(Agent):
|
|
async def process(self, message, context=None):
|
|
return f"Response to: {message}"
|
|
|
|
def get_capabilities(self):
|
|
return ["mock"]
|
|
|
|
|
|
@given("an interactive session is active")
|
|
def step_impl(context):
|
|
context.template_renderer = TemplateRenderer()
|
|
agent = MockAgent("test_agent", {}, context.template_renderer)
|
|
context.router = Router("test_router", {"agent": agent}, context.template_renderer)
|
|
context.session = InteractiveSession(
|
|
routers={"test_router": context.router}, initial_route_name="test_router"
|
|
)
|
|
|
|
|
|
@when('I enter the "{command}" command')
|
|
def step_impl(context, command):
|
|
context.stdout = io.StringIO()
|
|
with patch("sys.stdout", context.stdout):
|
|
if command.startswith("/"):
|
|
context.continue_session = context.session.process_command(command)
|
|
else:
|
|
context.parsed_command = parse_command(command)
|
|
context.command_result = execute_command(context.parsed_command)
|
|
|
|
|
|
@then("I should see the help information")
|
|
def step_impl(context):
|
|
output = context.stdout.getvalue()
|
|
assert "Available Commands:" in output
|
|
assert "/help" in output
|
|
assert "/exit" in output
|
|
|
|
|
|
@given("an interactive session with some history")
|
|
def step_impl(context):
|
|
context.template_renderer = TemplateRenderer()
|
|
agent = MockAgent("test_agent", {}, context.template_renderer)
|
|
context.router = Router("test_router", {"agent": agent}, context.template_renderer)
|
|
context.session = InteractiveSession(
|
|
routers={"test_router": context.router}, initial_route_name="test_router"
|
|
)
|
|
context.session.add_to_history("user", "Hello")
|
|
context.session.add_to_history("assistant", "Hi there!")
|
|
|
|
|
|
@then("I should see the conversation history")
|
|
def step_impl(context):
|
|
output = context.stdout.getvalue()
|
|
assert "You: Hello" in output
|
|
assert "Agent: Hi there!" in output
|
|
|
|
|
|
@then("the session should end")
|
|
def step_impl(context):
|
|
assert context.continue_session is False
|