fix(memory): biographer tool type hints for Ollama (v1.3.2)
Build and Push / build (release) Successful in 51s

- Change `str | None` to `str` with empty default for memory_type
- Remove `keywords` parameter from store_insight (auto-generated anyway)
- Ollama's OpenAI API doesn't handle union types with None properly

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-14 15:04:10 +01:00
co-authored by Claude Opus 4.5
parent 8e38a568ef
commit 9d7ce399c8
4 changed files with 14 additions and 13 deletions
+6
View File
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
## [1.3.2] - 2025-12-14
### Fixed
- **Memory**: Fix biographer tool type hints for Ollama compatibility (remove `| None` union types)
## [1.3.1] - 2025-12-14
### Fixed
+1 -1
View File
@@ -432,7 +432,7 @@ For LLM agent development guidelines and architectural decisions, see [AGENTS.md
## Version
Current version: **1.3.1** - Biographer delegation fix
Current version: **1.3.2** - Biographer tool type hints fix
---
+1 -1
View File
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "tatlock"
version = "1.3.1"
version = "1.3.2"
description = "OpenAI-compatible API with Ollama backend"
requires-python = ">=3.12"
dependencies = []
+6 -11
View File
@@ -25,7 +25,7 @@ logger = get_logger(__name__)
async def recall_semantic(
query: str,
memory_type: str | None = None,
memory_type: str = "",
limit: int = 5,
) -> str:
"""
@@ -64,7 +64,7 @@ async def recall_semantic(
user=user,
query_vector=query_vector,
limit=limit,
memory_type=memory_type,
memory_type=memory_type if memory_type else None,
)
if not results:
@@ -111,7 +111,6 @@ async def recall_semantic(
async def store_insight(
key: str,
value: str,
keywords: list[str] | None = None,
importance: float = 0.5,
) -> str:
"""
@@ -128,7 +127,6 @@ async def store_insight(
Args:
key: Short identifier for the memory (e.g., "car", "employer", "pet")
value: The actual information to remember
keywords: Optional keywords for better search (auto-extracted if not provided)
importance: How important is this? 0.0 (trivial) to 1.0 (critical)
Returns:
@@ -137,15 +135,12 @@ async def store_insight(
Examples:
store_insight("car", "User drives a Tesla Model 3")
store_insight("employer", "Works at Acme Corp as software engineer", importance=0.8)
store_insight("coffee", "Prefers oat milk lattes", keywords=["coffee", "drink", "preference"])
"""
try:
# Auto-generate keywords if not provided
if not keywords:
keywords = [key]
# Extract simple keywords from value
words = value.lower().split()
keywords.extend([w for w in words if len(w) > 4][:5])
# Auto-generate keywords from key and value
keywords = [key]
words = value.lower().split()
keywords.extend([w for w in words if len(w) > 4][:5])
success = await memory_service.store_fact(
key=key,