diff --git a/CHANGELOG.md b/CHANGELOG.md index 868bcac..b4c30e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ All notable changes to the CueMap Python SDK will be documented in this file. +## [0.7.5] - 2026-10-14 + +### Added +- `ingest_content(..., segmenter="conversation")` for chat histories (Claude or ChatGPT exports, JSON message lists, role- or speaker-labelled transcripts): one memory per message with conversation, turn and role metadata. + +### Changed +- Synchronized with CueMap Engine v0.7.5. +- `expansion_depth` now accepts `"conversation_round"` and defaults to `None`, so recall uses the engine default (`"conversation_round"`: each result gets the message it replies to, and the top result gets its answer; memories without session, turn and role metadata are returned as they are). Pass `expansion_depth=1` for the previous matched-memory-only behaviour. + ## [0.7.3] - 2026-08-27 ### Changed diff --git a/README.md b/README.md index a0f742f..d173b78 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ PyPI Python versions License - Engine compatibility + Engine compatibility

**High-performance temporal-associative memory store** designed for dynamic contextual retrieval. diff --git a/cuemap/__init__.py b/cuemap/__init__.py index 3aa8bb2..cb89ecc 100644 --- a/cuemap/__init__.py +++ b/cuemap/__init__.py @@ -23,7 +23,7 @@ from .exceptions import CueMapError, ConnectionError, AuthenticationError from .grounding import CueMapGroundingRetriever, AsyncCueMapGroundingRetriever -__version__ = "0.7.3" +__version__ = "0.7.5" __all__ = [ "CueMap", "AsyncCueMap", diff --git a/cuemap/client.py b/cuemap/client.py index 3d51792..3b0665c 100644 --- a/cuemap/client.py +++ b/cuemap/client.py @@ -1,7 +1,7 @@ """Pure CueMap client - no magic, just speed.""" import httpx -from typing import List, Optional, Dict, Any +from typing import List, Optional, Dict, Any, Union from .models import Memory, RecallResult, RecallPreviewResult from .exceptions import CueMapError, ConnectionError, AuthenticationError @@ -167,7 +167,7 @@ def recall( disable_salience_bias: bool = False, disable_alias_expansion: bool = True, trace_timing: bool = False, - expansion_depth: int = 1, + expansion_depth: Optional[Union[int, str]] = None, parent_fusion: str = "off", parent_fusion_limit: int = 80, parent_fusion_min_chunks: int = 2, @@ -197,6 +197,11 @@ def recall( projects: List of project IDs for cross-domain queries limit: Maximum results to return depth: Number of multi-hop recall expansion hops + expansion_depth: Neighbour context per result. Unset uses the engine default, + "conversation_round": prepend the message each result replies to and + append the answer to the top result (needs session, turn and role + metadata; other memories are returned as they are). A number gives + source-order neighbours instead (1 = matched memory only) auto_reinforce: Automatically reinforce retrieved memories min_intersection: Minimum number of cues that must match explain: Include recall explanation in results @@ -273,7 +278,7 @@ def recall_grounded( min_intersection: Optional[int] = None, disable_salience_bias: bool = False, disable_alias_expansion: bool = True, - expansion_depth: int = 1, + expansion_depth: Optional[Union[int, str]] = None, disable_pattern_completion: Optional[bool] = None, disable_systems_consolidation: Optional[bool] = None, ) -> Dict[str, Any]: @@ -727,7 +732,12 @@ def ingest_content( segment_min_chunk_chars: Optional[int] = None, segment_max_chunk_chars: Optional[int] = None, ) -> Dict[str, Any]: - """Ingest raw content.""" + """Ingest raw content. + + segmenter: "sentence_window" (default), "logical_block", or "conversation" for chat + histories (Claude or ChatGPT exports, JSON message lists, or role/speaker-labelled + transcripts): one memory per message with conversation, turn and role metadata. + """ response = self.client.post( "/ingest/content", json=_clean_payload({ @@ -966,7 +976,7 @@ async def recall( disable_salience_bias: bool = False, disable_alias_expansion: bool = True, trace_timing: bool = False, - expansion_depth: int = 1, + expansion_depth: Optional[Union[int, str]] = None, parent_fusion: str = "off", parent_fusion_limit: int = 80, parent_fusion_min_chunks: int = 2, @@ -1052,7 +1062,7 @@ async def recall_grounded( min_intersection: Optional[int] = None, disable_salience_bias: bool = False, disable_alias_expansion: bool = True, - expansion_depth: int = 1, + expansion_depth: Optional[Union[int, str]] = None, disable_pattern_completion: Optional[bool] = None, disable_systems_consolidation: Optional[bool] = None, ) -> Dict[str, Any]: diff --git a/pyproject.toml b/pyproject.toml index d0384fc..8c8db56 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "cuemap" -version = "0.7.3" +version = "0.7.5" description = "CueMap Python SDK - High-performance temporal-associative memory" readme = "README.md" requires-python = ">=3.8"