-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmemory_quickstart.py
More file actions
89 lines (70 loc) · 2.83 KB
/
Copy pathmemory_quickstart.py
File metadata and controls
89 lines (70 loc) · 2.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
"""Minimal MongoDB Memory provisioning and direct-API quickstart."""
from __future__ import annotations
import argparse
import asyncio
import os
from collections.abc import Awaitable, Sequence
from typing import Any
from agent_framework import Embedding, GeneratedEmbeddings, Message
from agent_framework_mongodb import MongoDBMemoryContextProvider
class DemoEmbeddingGenerator:
"""Deterministic local vectors for setup demonstration only."""
additional_properties: dict[str, Any] = {}
async def _generate(self, values: Sequence[str]) -> GeneratedEmbeddings[list[float], Any]:
return GeneratedEmbeddings(
[Embedding(vector=[float(len(value)), 1.0, 0.0]) for value in values]
)
def get_embeddings(
self,
values: Sequence[str],
*,
options: Any | None = None,
) -> Awaitable[GeneratedEmbeddings[list[float], Any]]:
del options
return self._generate(values)
def required_environment(name: str) -> str:
value = os.getenv(name)
if not value:
raise RuntimeError(f"Set {name} before running the Memory quickstart.")
return value
async def run_memory_quickstart(
provider: MongoDBMemoryContextProvider,
*,
keep: bool = False,
) -> None:
"""Store and retrieve one memory record with optional retention."""
async with provider:
await provider.store(
[Message("user", ["MongoDB is my preferred database."], message_id="quickstart-1")],
session_id="quickstart-session",
)
await provider.ensure_vector_search_index(wait_until_ready=True)
for memory in await provider.search("preferred database", exact=True):
print(memory.text)
if keep:
print("Authorized cleanup skipped by --keep.")
else:
await provider.clear_session("quickstart-session")
def parse_args(argv: Sequence[str] | None = None) -> argparse.Namespace:
"""Parse the sample's retention option."""
parser = argparse.ArgumentParser(description="Store and retrieve one MongoDB memory.")
parser.add_argument(
"--keep",
action="store_true",
help="retain the sample session instead of clearing it after retrieval",
)
return parser.parse_args(argv)
async def main(argv: Sequence[str] | None = None) -> None:
arguments = parse_args(argv)
provider = MongoDBMemoryContextProvider(
DemoEmbeddingGenerator(),
connection_string=required_environment("MONGODB_URI"),
database_name=required_environment("MONGODB_DATABASE"),
collection_name=required_environment("MONGODB_MEMORY_COLLECTION"),
vector_dimensions=3,
application_id="memory-quickstart",
user_id="quickstart-user",
)
await run_memory_quickstart(provider, keep=arguments.keep)
if __name__ == "__main__":
asyncio.run(main())