Skip to content

Commit 08bcd00

Browse files
Aayush KatariaAayush Kataria
authored andcommitted
Updating cosmos db topology to use 3 containers
1 parent e0de0b1 commit 08bcd00

84 files changed

Lines changed: 3259 additions & 1686 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.env.template

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,12 @@ COSMOS_DB__accountEndpoint=https://<your-account>.documents.azure.com:443/
1010
# letting you create databases/containers without RBAC role assignments.
1111
# Leave blank to use DefaultAzureCredential / managed identity.
1212
COSMOS_DB_KEY=
13+
# Database name. Must match what the Function App reads (COSMOS_DB_DATABASE there).
14+
# Default is "ai_memory"; change only if your infra deploys a different name.
1315
COSMOS_DB_DATABASE=ai_memory
14-
COSMOS_DB_CONTAINER=memories
16+
COSMOS_DB_MEMORIES_CONTAINER="memories"
17+
COSMOS_DB_SUMMARIES_CONTAINER="memories_summaries"
18+
COSMOS_DB_TURNS_CONTAINER="memories_turns"
1519
COSMOS_DB_COUNTERS_CONTAINER=counter
1620
COSMOS_DB_LEASE_CONTAINER=leases
1721
# Throughput mode for all required Cosmos DB containers created by the toolkit
@@ -29,6 +33,21 @@ THREAD_SUMMARY_EVERY_N=10
2933
FACT_EXTRACTION_EVERY_N=1
3034
USER_SUMMARY_EVERY_N=20
3135

36+
# ---- Processor ownership (in-process SDK vs. Function App / Durable) ----
37+
# Controls which side runs the auto-trigger to avoid double-firing when both
38+
# the SDK and the Function App are deployed against the same database.
39+
#
40+
# * Unset / blank -> SDK auto-trigger fires; FA change-feed SKIPS.
41+
# (Pure SDK deployments — no env config needed.)
42+
# * "inprocess" -> SDK auto-trigger fires; FA change-feed SKIPS.
43+
# * "durable" -> SDK auto-trigger SKIPS; FA change-feed fires.
44+
#
45+
# The contract is asymmetric by design: the FA defaults to skip (default-deny)
46+
# so a fresh FA deploy next to an existing SDK install does not race. If you
47+
# run the Function App, you MUST set this to "durable" or processing will
48+
# silently no-op.
49+
MEMORY_PROCESSOR_OWNER=
50+
3251
# ---- AI Foundry / Azure OpenAI ----
3352
AI_FOUNDRY_ENDPOINT=https://<your-account>.openai.azure.com/
3453
AI_FOUNDRY_API_KEY=
@@ -39,3 +58,6 @@ AI_FOUNDRY_EMBEDDING_DISTANCE_FUNCTION=cosine
3958
COSMOS_DB_FULL_TEXT_LANGUAGE=en-US
4059

4160
AI_FOUNDRY_CHAT_DEPLOYMENT_NAME=<your-model-deployment>
61+
# Optional. Pin the Azure OpenAI REST API version used by chat and embeddings
62+
# clients. Leave blank to use the toolkit default ("2024-12-01-preview").
63+
AZURE_OPENAI_API_VERSION=

Docs/azure_testing.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ az functionapp config appsettings set \
105105
--settings \
106106
COSMOS_DB_ENDPOINT="https://<cosmos-account-name>.documents.azure.com:443/" \
107107
COSMOS_DB_DATABASE="ai_memory" \
108-
COSMOS_DB_CONTAINER="memories" \
108+
COSMOS_DB_MEMORIES_CONTAINER="memories" \
109109
COSMOS_DB_COUNTERS_CONTAINER="counter" \
110110
COSMOS_DB_LEASE_CONTAINER="leases" \
111111
COSMOS_DB_THROUGHPUT_MODE="serverless" \
@@ -178,7 +178,7 @@ Update `.env` to point at Azure instead of localhost:
178178
```env
179179
COSMOS_DB_ENDPOINT=https://<cosmos-account-name>.documents.azure.com:443/
180180
COSMOS_DB_DATABASE=ai_memory
181-
COSMOS_DB_CONTAINER=memories
181+
COSMOS_DB_MEMORIES_CONTAINER=memories
182182
COSMOS_DB_COUNTERS_CONTAINER=counter
183183
COSMOS_DB_LEASE_CONTAINER=leases
184184
COSMOS_DB_THROUGHPUT_MODE=serverless
@@ -213,7 +213,7 @@ load_dotenv()
213213
memory = CosmosMemoryClient(
214214
cosmos_endpoint=os.getenv("COSMOS_DB_ENDPOINT"),
215215
cosmos_database=os.getenv("COSMOS_DB_DATABASE", "ai_memory"),
216-
cosmos_container=os.getenv("COSMOS_DB_CONTAINER", "memories"),
216+
cosmos_container=os.getenv("COSMOS_DB_MEMORIES_CONTAINER", "memories"),
217217
cosmos_counter_container=os.getenv("COSMOS_DB_COUNTERS_CONTAINER", "counter"),
218218
cosmos_lease_container=os.getenv("COSMOS_DB_LEASE_CONTAINER", "leases"),
219219
cosmos_throughput_mode=os.getenv("COSMOS_DB_THROUGHPUT_MODE", "serverless"),
@@ -242,7 +242,7 @@ load_dotenv()
242242
memory = AsyncCosmosMemoryClient(
243243
cosmos_endpoint=os.getenv("COSMOS_DB_ENDPOINT"),
244244
cosmos_database=os.getenv("COSMOS_DB_DATABASE", "ai_memory"),
245-
cosmos_container=os.getenv("COSMOS_DB_CONTAINER", "memories"),
245+
cosmos_container=os.getenv("COSMOS_DB_MEMORIES_CONTAINER", "memories"),
246246
cosmos_counter_container=os.getenv("COSMOS_DB_COUNTERS_CONTAINER", "counter"),
247247
cosmos_lease_container=os.getenv("COSMOS_DB_LEASE_CONTAINER", "leases"),
248248
cosmos_throughput_mode=os.getenv("COSMOS_DB_THROUGHPUT_MODE", "serverless"),

Docs/local_testing.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ Minimum `.env` values:
7171
```env
7272
COSMOS_DB_ENDPOINT=https://<your-account>.documents.azure.com:443/
7373
COSMOS_DB_DATABASE=ai_memory
74-
COSMOS_DB_CONTAINER=memories
74+
COSMOS_DB_MEMORIES_CONTAINER=memories
7575
COSMOS_DB_COUNTERS_CONTAINER=counter
7676
COSMOS_DB_LEASE_CONTAINER=leases
7777
COSMOS_DB_THROUGHPUT_MODE=serverless
@@ -160,7 +160,7 @@ load_dotenv()
160160
memory = AgentMemory(
161161
cosmos_endpoint=os.getenv("COSMOS_DB_ENDPOINT"),
162162
cosmos_database=os.getenv("COSMOS_DB_DATABASE"),
163-
cosmos_container=os.getenv("COSMOS_DB_CONTAINER"),
163+
cosmos_container=os.getenv("COSMOS_DB_MEMORIES_CONTAINER"),
164164
cosmos_counter_container=os.getenv("COSMOS_DB_COUNTERS_CONTAINER", "counter"),
165165
cosmos_lease_container=os.getenv("COSMOS_DB_LEASE_CONTAINER", "leases"),
166166
cosmos_throughput_mode=os.getenv("COSMOS_DB_THROUGHPUT_MODE", "serverless"),
@@ -203,7 +203,7 @@ load_dotenv()
203203
memory = AsyncAgentMemory(
204204
cosmos_endpoint=os.getenv("COSMOS_DB_ENDPOINT"),
205205
cosmos_database=os.getenv("COSMOS_DB_DATABASE"),
206-
cosmos_container=os.getenv("COSMOS_DB_CONTAINER"),
206+
cosmos_container=os.getenv("COSMOS_DB_MEMORIES_CONTAINER"),
207207
cosmos_counter_container=os.getenv("COSMOS_DB_COUNTERS_CONTAINER", "counter"),
208208
cosmos_lease_container=os.getenv("COSMOS_DB_LEASE_CONTAINER", "leases"),
209209
cosmos_throughput_mode=os.getenv("COSMOS_DB_THROUGHPUT_MODE", "serverless"),
@@ -219,7 +219,7 @@ memory = AsyncAgentMemory(
219219
await memory.connect_cosmos(
220220
endpoint=os.getenv("COSMOS_DB_ENDPOINT"),
221221
database=os.getenv("COSMOS_DB_DATABASE"),
222-
container=os.getenv("COSMOS_DB_CONTAINER"),
222+
container=os.getenv("COSMOS_DB_MEMORIES_CONTAINER"),
223223
credential=AsyncDefaultAzureCredential(),
224224
)
225225
await memory.create_memory_store()

Docs/public_api.md

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@
1414

1515
### Connection
1616

17-
- `__init__(cosmos_endpoint=None, cosmos_credential=None, cosmos_key=None, cosmos_database=None, cosmos_container=None, cosmos_turns_container=None, cosmos_counter_container=None, cosmos_lease_container=None, cosmos_throughput_mode=None, cosmos_autoscale_max_ru=None, ai_foundry_endpoint=None, ai_foundry_credential=None, ai_foundry_api_key=None, embedding_deployment_name='text-embedding-3-large', embedding_dimensions=None, chat_deployment_name='gpt-4o-mini', use_default_credential=True, processor=None) -> None` — configure local state, model clients, optional Cosmos auto-connect, and optional processing backend. When `cosmos_turns_container` is set, turn-type documents land in a dedicated container so the main `memories` container only fires the Durable change-feed trigger for processed memory writes.
17+
- `__init__(cosmos_endpoint=None, cosmos_credential=None, cosmos_key=None, cosmos_database=None, cosmos_container=None, cosmos_turns_container='memories_turns', cosmos_summaries_container='memories_summaries', cosmos_counter_container=None, cosmos_lease_container=None, cosmos_throughput_mode=None, cosmos_autoscale_max_ru=None, ai_foundry_endpoint=None, ai_foundry_credential=None, ai_foundry_api_key=None, embedding_deployment_name='text-embedding-3-large', embedding_dimensions=None, chat_deployment_name='gpt-4o-mini', use_default_credential=True, processor=None) -> None` — configure local state, model clients, optional Cosmos auto-connect, and optional processing backend. The SDK uses a hard 3-container topology: turns in `memories_turns`, facts/episodic/procedural in `memories`, and summaries in `memories_summaries` (or the names you pass).
1818
- `close() -> None` — close Cosmos/model clients and owned credentials.
19-
- `connect_cosmos(endpoint=None, credential=None, key=None, database=None, container=None, turns_container=None) -> None` — connect to an existing memory container.
20-
- `create_memory_store(database=None, container=None, turns_container=None, counter_container=None, lease_container=None, endpoint=None, credential=None, key=None, embedding_dimensions=None, embedding_data_type=None, distance_function=None, full_text_language=None, throughput_mode=None, autoscale_max_ru=None) -> None` — create/connect the memory, optional turns, counter, and lease containers.
19+
- `connect_cosmos(endpoint=None, credential=None, key=None, database=None, container=None, turns_container=None, summaries_container=None) -> None` — connect to existing memory, turns, and summaries containers.
20+
- `create_memory_store(database=None, container=None, turns_container=None, summaries_container=None, counter_container=None, lease_container=None, endpoint=None, credential=None, key=None, embedding_dimensions=None, embedding_data_type=None, distance_function=None, full_text_language=None, throughput_mode=None, autoscale_max_ru=None) -> None` — create/connect the memory, turns, summaries, counter, and lease containers.
21+
- `validate_topology() -> None` — read metadata for all three memory containers and raise `RuntimeError` if any is missing or unreachable; call after connecting to catch infrastructure/config drift before writes.
2122

2223
### Memory CRUD
2324

@@ -65,10 +66,11 @@ Local-buffer methods remain synchronous in-memory operations; Cosmos, retrieval,
6566

6667
### Connection
6768

68-
- `__init__(cosmos_endpoint=None, cosmos_credential=None, cosmos_key=None, cosmos_database=None, cosmos_container=None, cosmos_turns_container=None, cosmos_counter_container=None, cosmos_lease_container=None, cosmos_throughput_mode=None, cosmos_autoscale_max_ru=None, ai_foundry_endpoint=None, ai_foundry_credential=None, ai_foundry_api_key=None, embedding_deployment_name='text-embedding-3-large', embedding_dimensions=None, chat_deployment_name='gpt-4o-mini', use_default_credential=True, processor=None) -> None` — configure async local state, model clients, and optional processing backend. When `cosmos_turns_container` is set, turn-type documents land in a dedicated container so the main `memories` container only fires the Durable change-feed trigger for processed memory writes.
69+
- `__init__(cosmos_endpoint=None, cosmos_credential=None, cosmos_key=None, cosmos_database=None, cosmos_container=None, cosmos_turns_container='memories_turns', cosmos_summaries_container='memories_summaries', cosmos_counter_container=None, cosmos_lease_container=None, cosmos_throughput_mode=None, cosmos_autoscale_max_ru=None, ai_foundry_endpoint=None, ai_foundry_credential=None, ai_foundry_api_key=None, embedding_deployment_name='text-embedding-3-large', embedding_dimensions=None, chat_deployment_name='gpt-4o-mini', use_default_credential=True, processor=None) -> None` — configure async local state, model clients, and optional processing backend. The async SDK uses the same hard 3-container topology as the sync client.
6970
- `async close() -> None` — close async/sync resources and owned credentials.
70-
- `async connect_cosmos(endpoint=None, credential=None, key=None, database=None, container=None, turns_container=None) -> None` — connect to an existing memory container.
71-
- `async create_memory_store(database=None, container=None, turns_container=None, counter_container=None, lease_container=None, endpoint=None, credential=None, key=None, embedding_dimensions=None, embedding_data_type=None, distance_function=None, full_text_language=None, throughput_mode=None, autoscale_max_ru=None) -> None` — create/connect memory, optional turns, counter, and lease containers.
71+
- `async connect_cosmos(endpoint=None, credential=None, key=None, database=None, container=None, turns_container=None, summaries_container=None) -> None` — connect to existing memory, turns, and summaries containers.
72+
- `async create_memory_store(database=None, container=None, turns_container=None, summaries_container=None, counter_container=None, lease_container=None, endpoint=None, credential=None, key=None, embedding_dimensions=None, embedding_data_type=None, distance_function=None, full_text_language=None, throughput_mode=None, autoscale_max_ru=None) -> None` — create/connect memory, turns, summaries, counter, and lease containers.
73+
- `async validate_topology() -> None` — read metadata for all three memory containers and raise `RuntimeError` if any is missing or unreachable; call after connecting to catch infrastructure/config drift before writes.
7274

7375
### Memory CRUD
7476

@@ -110,6 +112,10 @@ Local-buffer methods remain synchronous in-memory operations; Cosmos, retrieval,
110112
- `async remove_tags(memory_id, user_id, thread_id, tags) -> None` — remove tags from a memory.
111113
- `async list_tags(user_id, *, thread_id=None, prefix=None, include_sys=False) -> list[str]` — list sorted, deduped tags for a user; omits `sys:*` by default.
112114

115+
## Topology validation
116+
117+
Use `validate_topology()` (sync) or `await validate_topology()` (async) after `connect_cosmos()` or `create_memory_store()` to verify that `memories`, `memories_turns`, and `memories_summaries` all exist and are readable. The method raises `RuntimeError` with redeploy guidance on the first missing or unreachable container.
118+
113119
## Extension Points
114120

115121
Sync extension protocols live in `agent_memory_toolkit.services`; async variants live in `agent_memory_toolkit.aio.services`.

Docs/troubleshooting.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ COSMOS_DB_ENDPOINT=https://<account>.documents.azure.com:443/
4747
COSMOS_DB__accountEndpoint=https://<account>.documents.azure.com:443/
4848
COSMOS_DB_KEY=
4949
COSMOS_DB_DATABASE=ai_memory
50-
COSMOS_DB_CONTAINER=memories
50+
COSMOS_DB_MEMORIES_CONTAINER=memories
5151
COSMOS_DB_COUNTERS_CONTAINER=counter
5252
COSMOS_DB_LEASE_CONTAINER=leases
5353
COSMOS_DB_THROUGHPUT_MODE=serverless
@@ -68,7 +68,7 @@ The notebooks and samples pass these values into the client like this:
6868
|---|---|
6969
| `COSMOS_DB_ENDPOINT` | `cosmos_endpoint` |
7070
| `COSMOS_DB_DATABASE` | `cosmos_database` |
71-
| `COSMOS_DB_CONTAINER` | `cosmos_container` |
71+
| `COSMOS_DB_MEMORIES_CONTAINER` | `cosmos_container` |
7272
| `COSMOS_DB_COUNTERS_CONTAINER` | `cosmos_counter_container` |
7373
| `COSMOS_DB_LEASE_CONTAINER` | `cosmos_lease_container` |
7474
| `COSMOS_DB_KEY` | `cosmos_key` |
@@ -149,7 +149,7 @@ Automatic processing requires these settings in the Functions app or `local.sett
149149
"COSMOS_DB__accountEndpoint": "https://<account>.documents.azure.com:443/",
150150
"COSMOS_DB_ENDPOINT": "https://<account>.documents.azure.com:443/",
151151
"COSMOS_DB_DATABASE": "ai_memory",
152-
"COSMOS_DB_CONTAINER": "memories",
152+
"COSMOS_DB_MEMORIES_CONTAINER": "memories",
153153
"COSMOS_DB_COUNTERS_CONTAINER": "counter",
154154
"COSMOS_DB_LEASE_CONTAINER": "leases",
155155
"AI_FOUNDRY_ENDPOINT": "https://<account>.openai.azure.com/",

README.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ load_dotenv()
8282
memory = CosmosMemoryClient(
8383
cosmos_endpoint=os.environ["COSMOS_DB_ENDPOINT"],
8484
cosmos_database=os.getenv("COSMOS_DB_DATABASE", "ai_memory"),
85-
cosmos_container=os.getenv("COSMOS_DB_CONTAINER", "memories"),
85+
cosmos_container=os.getenv("COSMOS_DB_MEMORIES_CONTAINER", "memories"),
8686
ai_foundry_endpoint=os.environ["AI_FOUNDRY_ENDPOINT"],
8787
embedding_deployment_name=os.getenv("AI_FOUNDRY_EMBEDDING_DEPLOYMENT_NAME", "text-embedding-3-large"),
8888
chat_deployment_name=os.getenv("AI_FOUNDRY_CHAT_DEPLOYMENT_NAME", "gpt-4o-mini"),
@@ -137,7 +137,13 @@ See [`Samples/`](Samples/) for end-to-end scenarios (chat memory, RAG, multi-age
137137
| **Search** | Vector + full-text + filter; returns any of the above | `search_cosmos(...)` |
138138
| **Process now** | Run the full pipeline (summary → facts → user profile) for recent turns | `process_now(...)`, `process_now_and_wait(...)` |
139139

140-
All memory kinds live in the same Cosmos container, partitioned by `(user_id, thread_id)`, distinguished by a `type` discriminator.
140+
AgentMemoryToolkit uses 3-container Cosmos topology, all partitioned by hierarchical `(user_id, thread_id)` keys:
141+
142+
| Container | Holds | Notes |
143+
|---|---|---|
144+
| `memories_turns` | raw `turn` documents | append-only conversation timeline |
145+
| `memories` | `fact`, `episodic`, `procedural` documents | vector + full-text retrieval path |
146+
| `memories_summaries` | thread and user summaries | latest-summary point/read path |
141147

142148
### Memory Type Taxonomy
143149

Samples/Advanced/advanced_memory_lifecycle.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ def main() -> None:
5454
cosmos_endpoint=os.environ["COSMOS_DB_ENDPOINT"],
5555
cosmos_key=os.environ.get("COSMOS_DB_KEY") or None,
5656
cosmos_database=os.environ.get("COSMOS_DB_DATABASE", "ai_memory"),
57-
cosmos_container=os.environ.get("COSMOS_DB_CONTAINER", "memories"),
57+
cosmos_container=os.environ.get("COSMOS_DB_MEMORIES_CONTAINER", "memories"),
5858
ai_foundry_endpoint=os.environ["AI_FOUNDRY_ENDPOINT"],
5959
ai_foundry_api_key=os.environ.get("AI_FOUNDRY_API_KEY") or None,
6060
embedding_deployment_name=os.environ.get("AI_FOUNDRY_EMBEDDING_DEPLOYMENT_NAME", "text-embedding-3-large"),

Samples/Advanced/advanced_search_patterns.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ def main() -> None:
193193
mem = CosmosMemoryClient(
194194
cosmos_endpoint=cosmos_endpoint,
195195
cosmos_database=os.environ.get("COSMOS_DB_DATABASE", "ai_memory"),
196-
cosmos_container=os.environ.get("COSMOS_DB_CONTAINER", "memories"),
196+
cosmos_container=os.environ.get("COSMOS_DB_MEMORIES_CONTAINER", "memories"),
197197
cosmos_key=os.environ.get("COSMOS_DB_KEY"),
198198
ai_foundry_endpoint=ai_foundry_endpoint,
199199
ai_foundry_api_key=os.environ.get("AI_FOUNDRY_API_KEY"),

Samples/Notebooks/Demo.ipynb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
"load_dotenv(os.path.join(\"../..\", \".env\"))\n",
6464
"print(\"COSMOS_DB_ENDPOINT:\", os.getenv(\"COSMOS_DB_ENDPOINT\"))\n",
6565
"print(\"COSMOS_DB_DATABASE:\", os.getenv(\"COSMOS_DB_DATABASE\"))\n",
66-
"print(\"COSMOS_DB_CONTAINER:\", os.getenv(\"COSMOS_DB_CONTAINER\"))\n",
66+
"print(\"COSMOS_DB_MEMORIES_CONTAINER:\", os.getenv(\"COSMOS_DB_MEMORIES_CONTAINER\"))\n",
6767
"print(\"COSMOS_DB_COUNTERS_CONTAINER:\", os.getenv(\"COSMOS_DB_COUNTERS_CONTAINER\", \"counter\"))\n",
6868
"print(\"COSMOS_DB_LEASE_CONTAINER:\", os.getenv(\"COSMOS_DB_LEASE_CONTAINER\", \"leases\"))\n",
6969
"print(\"COSMOS_DB_THROUGHPUT_MODE:\", os.getenv(\"COSMOS_DB_THROUGHPUT_MODE\", \"serverless\"))\n",
@@ -94,7 +94,7 @@
9494
"memory = CosmosMemoryClient(\n",
9595
" cosmos_endpoint=os.getenv(\"COSMOS_DB_ENDPOINT\"),\n",
9696
" cosmos_database=os.getenv(\"COSMOS_DB_DATABASE\"),\n",
97-
" cosmos_container=os.getenv(\"COSMOS_DB_CONTAINER\"),\n",
97+
" cosmos_container=os.getenv(\"COSMOS_DB_MEMORIES_CONTAINER\"),\n",
9898
" cosmos_counter_container=os.getenv(\"COSMOS_DB_COUNTERS_CONTAINER\", \"counter\"),\n",
9999
" cosmos_lease_container=os.getenv(\"COSMOS_DB_LEASE_CONTAINER\", \"leases\"),\n",
100100
" cosmos_throughput_mode=os.getenv(\"COSMOS_DB_THROUGHPUT_MODE\", \"serverless\"),\n",
@@ -419,7 +419,7 @@
419419
"outputs": [],
420420
"source": [
421421
"# Already connected via constructor — call connect_cosmos() only if you need to reconnect\n",
422-
"print(f\"Connected: {memory._container_client is not None}\")"
422+
"print(f\"Connected: {memory._memories_container_client is not None}\")"
423423
]
424424
},
425425
{
@@ -692,7 +692,7 @@
692692
"2. Optionally keep only the **k most recent** documents (`recent_k`).\n",
693693
"3. Call the configured AI Foundry LLM to produce a structured summary.\n",
694694
"4. Generate a vector embedding of the summary.\n",
695-
"5. Upsert the result back into Cosmos DB as a memory of type `\"summary\"`.\n",
695+
"5. Upsert the result back into Cosmos DB as a memory of type `\"thread_summary\"`.\n",
696696
"\n",
697697
"If a prior summary exists, the call performs an **incremental update** that preserves the\n",
698698
"metadata-tracked `source_count`.\n"

0 commit comments

Comments
 (0)