diff --git a/CHANGELOG.md b/CHANGELOG.md index b7c26a8..d8d774e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,87 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.2.0] - 2025-12-06 + +### Added + +#### PydanticAI Integration (Phase 1) +- Real Tatlock agent using PydanticAI with Ollama backend (mistral-nemo:latest) +- British butler personality with research-oriented mindset +- Lazy agent initialization to avoid connection issues in tests +- Streaming response integration with reasoning output +- Error handling for PydanticAI-specific exceptions + +#### Permanent Tools (Phase 1) +- **Calculator tool** (`src/agents/tools.py`): + - Safe mathematical expression evaluation using restricted namespace + - Support for arithmetic, algebra, trigonometry, logarithms + - Math functions: sqrt, sin, cos, tan, log, exp, etc. + - Constants: pi, e + - Integer result formatting (removes unnecessary decimals) +- **Date/Time toolkit**: + - `get_current_datetime`: Current date/time in multiple formats + - `calculate_time_offset`: Relative date calculations ("1 week ago", "2 months from now") + - `time_difference`: Human-readable time differences between dates +- **Web Search tool**: + - SearXNG integration for privacy-preserving web search + - Automatic fallback from production to localhost in development + - Formatted search results with titles, URLs, and snippets + - Configurable result limits (max 10) + +#### Tool Framework +- PydanticAI tool registration with `@agent.tool` decorator +- Tool descriptions visible to LLM for intelligent usage +- Async tool support for I/O operations +- Error handling with string-based error messages +- Tool usage guidelines in system prompt + +#### Configuration +- SearXNG configuration in `src/core/config.py`: + - `SEARXNG_HOST` with development fallback + - `SEARXNG_TIMEOUT` setting +- Updated `.env.example` with SearXNG configuration +- Ollama configuration documentation + +#### Testing +- 26 new tool tests (`tests/agents/test_tools.py`): + - 7 calculator tests (arithmetic, functions, error handling) + - 14 date/time tests (current time, offsets, differences) + - 5 web search tests (mocked HTTP client) +- Updated registry tests for tools capability +- Total: 131 tests, 81.78% coverage (up from 95 tests, 78.95%) + +#### Documentation +- Comprehensive README.md updates: + - Tatlock agent capabilities and tool descriptions + - Requirements section with Ollama and SearXNG setup + - Configuration examples for external services + - Tool usage examples and philosophy + - Troubleshooting for Ollama and SearXNG + - Updated test statistics +- AGENTS.md refactored for LLM development: + - PydanticAI tool registration pattern + - Tool implementation guidelines + - Removed project status, focused on development instructions +- IMPLEMENTATION_ROADMAP.md updates: + - Phase 1 marked as "MOSTLY COMPLETE" + - Detailed completion status for each deliverable + - Updated current state summary + +### Changed +- Tatlock agent converted from mock to real PydanticAI implementation +- Tatlock capabilities updated: `tools: True` +- Streaming coordination now handles chunk-based delivery (50 chars) to preserve markdown +- Chat service streaming updated to preserve formatting +- System prompt enhanced with tool usage guidelines and research mindset +- Agent initialization changed to lazy pattern for better testability + +### Fixed +- Text duplication bug in streaming responses (proper delta calculation) +- Markdown formatting preservation in streamed responses +- GeneratorExit errors from async context managers in generators +- PydanticAI API usage (`result.output` instead of `result.data`) + ## [0.1.1] - 2025-12-06 ### Added @@ -115,6 +196,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - CORS middleware - Exception handlers (OpenAI-compatible error format) -[Unreleased]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v0.1.1...main +[Unreleased]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v0.2.0...main +[0.2.0]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v0.1.1...v0.2.0 [0.1.1]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v0.1.0...v0.1.1 [0.1.0]: https://git.schweitz.net/jpmschweitzer/tatlock/releases/tag/v0.1.0