🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
+57
-1
@@ -7,6 +7,52 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [1.10.0] - 2025-12-22
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
#### Lightweight Request Tracing
|
||||||
|
- **JSON-based tracing system** for local development debugging
|
||||||
|
- Captures full request flow through multi-agent architecture
|
||||||
|
- `Trace` and `Span` dataclasses with automatic timing and nesting
|
||||||
|
- ContextVar-based propagation for async-safe tracing
|
||||||
|
- `trace_span` async context manager for clean instrumentation
|
||||||
|
- Traces written to `logs/traces/{trace_id}.json`
|
||||||
|
- Enabled via `DEBUG=true` environment variable
|
||||||
|
- **Trace Viewer UI** (`logs/traces/viewer.html`)
|
||||||
|
- Standalone HTML viewer with timeline visualization
|
||||||
|
- Filter by status, search by request text
|
||||||
|
- Expandable span details with prompts and responses
|
||||||
|
- **Tracing REST API** (`/traces`)
|
||||||
|
- `GET /traces` - Serve trace viewer UI
|
||||||
|
- `GET /traces/list` - List available traces with filtering
|
||||||
|
- `GET /traces/{trace_id}` - Retrieve specific trace JSON
|
||||||
|
- Only available when `DEBUG=true`
|
||||||
|
- **Full pipeline instrumentation**
|
||||||
|
- Router-level trace start/end with context management
|
||||||
|
- Steward analysis spans in preprocessing
|
||||||
|
- Tatlock orchestrate/synthesize spans
|
||||||
|
- Expert delegation spans (librarian/biographer/housekeeper)
|
||||||
|
- Tool-level spans extracted from PydanticAI messages
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- **Replaced Redis benchmarks with file-based tracing** - Simpler, more useful for debugging
|
||||||
|
- **Context management moved to service layer** - Router simplified, context set in response service
|
||||||
|
- **Server binds to all interfaces** - `wakeup.sh` now uses `0.0.0.0` for network access
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
|
||||||
|
- **Redis benchmark system** (`src/core/benchmarks.py`)
|
||||||
|
- `ENABLE_BENCHMARKS` config setting
|
||||||
|
- `REDIS_BENCHMARK_DB` config setting
|
||||||
|
- `redis_url` property (kept `redis_memory_url`)
|
||||||
|
- Benchmark recording in Steward service and tool tracking
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- **Librarian fabrication prevention** - Added explicit instructions to never invent data when tools fail or sources are unavailable
|
||||||
|
|
||||||
## [1.9.0] - 2025-12-18
|
## [1.9.0] - 2025-12-18
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
@@ -779,7 +825,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
- CORS middleware
|
- CORS middleware
|
||||||
- Exception handlers (OpenAI-compatible error format)
|
- Exception handlers (OpenAI-compatible error format)
|
||||||
|
|
||||||
[Unreleased]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.6.0...main
|
[Unreleased]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.10.0...main
|
||||||
|
[1.10.0]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.9.0...v1.10.0
|
||||||
|
[1.9.0]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.8.6...v1.9.0
|
||||||
|
[1.8.6]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.8.5...v1.8.6
|
||||||
|
[1.8.5]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.8.4...v1.8.5
|
||||||
|
[1.8.4]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.8.3...v1.8.4
|
||||||
|
[1.8.3]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.8.2...v1.8.3
|
||||||
|
[1.8.2]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.8.1...v1.8.2
|
||||||
|
[1.8.1]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.8.0...v1.8.1
|
||||||
|
[1.8.0]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.7.0...v1.8.0
|
||||||
|
[1.7.0]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.6.0...v1.7.0
|
||||||
[1.6.0]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.5.0...v1.6.0
|
[1.6.0]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.5.0...v1.6.0
|
||||||
[1.5.0]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.4.0...v1.5.0
|
[1.5.0]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.4.0...v1.5.0
|
||||||
[1.4.0]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.3.3...v1.4.0
|
[1.4.0]: https://git.schweitz.net/jpmschweitzer/tatlock/compare/v1.3.3...v1.4.0
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "tatlock"
|
name = "tatlock"
|
||||||
version = "1.9.0"
|
version = "1.10.0"
|
||||||
description = "OpenAI-compatible API with Ollama backend"
|
description = "OpenAI-compatible API with Ollama backend"
|
||||||
requires-python = ">=3.12"
|
requires-python = ">=3.12"
|
||||||
dependencies = []
|
dependencies = []
|
||||||
|
|||||||
Reference in New Issue
Block a user