mirror of
https://gitee.com/wanwujie/deer-flow
synced 2026-04-03 22:32:12 +08:00
- Add AioSandboxProvider for Docker-based sandbox execution with configurable container lifecycle, volume mounts, and port management - Add TitleMiddleware to auto-generate thread titles after first user-assistant exchange using LLM - Add Claude Code documentation (CLAUDE.md, AGENTS.md) - Extend SandboxConfig with Docker-specific options (image, port, mounts) - Fix hardcoded mount path to use expanduser - Add agent-sandbox and dotenv dependencies Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
91 lines
2.7 KiB
Python
91 lines
2.7 KiB
Python
"""Tests for automatic thread title generation."""
|
|
|
|
import pytest
|
|
|
|
from src.agents.middlewares.title_middleware import TitleMiddleware
|
|
from src.config.title_config import TitleConfig, get_title_config, set_title_config
|
|
|
|
|
|
class TestTitleConfig:
|
|
"""Tests for TitleConfig."""
|
|
|
|
def test_default_config(self):
|
|
"""Test default configuration values."""
|
|
config = TitleConfig()
|
|
assert config.enabled is True
|
|
assert config.max_words == 6
|
|
assert config.max_chars == 60
|
|
assert config.model_name is None
|
|
|
|
def test_custom_config(self):
|
|
"""Test custom configuration."""
|
|
config = TitleConfig(
|
|
enabled=False,
|
|
max_words=10,
|
|
max_chars=100,
|
|
model_name="gpt-4",
|
|
)
|
|
assert config.enabled is False
|
|
assert config.max_words == 10
|
|
assert config.max_chars == 100
|
|
assert config.model_name == "gpt-4"
|
|
|
|
def test_config_validation(self):
|
|
"""Test configuration validation."""
|
|
# max_words should be between 1 and 20
|
|
with pytest.raises(ValueError):
|
|
TitleConfig(max_words=0)
|
|
with pytest.raises(ValueError):
|
|
TitleConfig(max_words=21)
|
|
|
|
# max_chars should be between 10 and 200
|
|
with pytest.raises(ValueError):
|
|
TitleConfig(max_chars=5)
|
|
with pytest.raises(ValueError):
|
|
TitleConfig(max_chars=201)
|
|
|
|
def test_get_set_config(self):
|
|
"""Test global config getter and setter."""
|
|
original_config = get_title_config()
|
|
|
|
# Set new config
|
|
new_config = TitleConfig(enabled=False, max_words=10)
|
|
set_title_config(new_config)
|
|
|
|
# Verify it was set
|
|
assert get_title_config().enabled is False
|
|
assert get_title_config().max_words == 10
|
|
|
|
# Restore original config
|
|
set_title_config(original_config)
|
|
|
|
|
|
class TestTitleMiddleware:
|
|
"""Tests for TitleMiddleware."""
|
|
|
|
def test_middleware_initialization(self):
|
|
"""Test middleware can be initialized."""
|
|
middleware = TitleMiddleware()
|
|
assert middleware is not None
|
|
assert middleware.state_schema is not None
|
|
|
|
# TODO: Add integration tests with mock Runtime
|
|
# def test_should_generate_title(self):
|
|
# """Test title generation trigger logic."""
|
|
# pass
|
|
|
|
# def test_generate_title(self):
|
|
# """Test title generation."""
|
|
# pass
|
|
|
|
# def test_after_agent_hook(self):
|
|
# """Test after_agent hook."""
|
|
# pass
|
|
|
|
|
|
# TODO: Add integration tests
|
|
# - Test with real LangGraph runtime
|
|
# - Test title persistence with checkpointer
|
|
# - Test fallback behavior when LLM fails
|
|
# - Test concurrent title generation
|