1919from google .genai import types as genai_types
2020
2121
22- def test_generate_memories (client ):
22+ def test_generate_and_rollback_memories (client ):
23+ client ._api_client ._http_options .base_url = (
24+ "https://us-central1-autopush-aiplatform.sandbox.googleapis.com/"
25+ )
2326 agent_engine = client .agent_engines .create ()
2427 assert not list (
25- client .agent_engines .list_memories (
28+ client .agent_engines .memories . list (
2629 name = agent_engine .api_resource .name ,
2730 )
2831 )
29- client .agent_engines .generate_memories (
32+ # Generate memories using source content. This result is non-deterministic,
33+ # because an LLM is used to generate the memories.
34+ client .agent_engines .memories .generate (
3035 name = agent_engine .api_resource .name ,
3136 scope = {"user_id" : "test-user-id" },
3237 direct_contents_source = types .GenerateMemoriesRequestDirectContentsSource (
@@ -43,50 +48,99 @@ def test_generate_memories(client):
4348 )
4449 ]
4550 ),
51+ config = types .GenerateAgentEngineMemoriesConfig (
52+ revision_labels = {"key" : "value" }
53+ ),
4654 )
47- assert (
48- len (
49- list (
50- client .agent_engines .list_memories (
51- name = agent_engine .api_resource .name ,
52- )
53- )
55+ memories = list (
56+ client .agent_engines .memories .list (
57+ name = agent_engine .api_resource .name ,
5458 )
55- >= 1
5659 )
57- client . agent_engines . delete ( name = agent_engine . api_resource . name , force = True )
60+ assert len ( memories ) >= 1
5861
62+ # Every action that modifies a memory creates a new revision.
63+ memory_revisions = list (
64+ client .agent_engines .memories .revisions .list (
65+ name = memories [0 ].name ,
66+ )
67+ )
68+ assert len (memory_revisions ) >= 1
69+ # The revision's labels depend on the generation request's revision labels.
70+ assert memory_revisions [0 ].labels == {"key" : "value" }
71+ revision_name = memory_revisions [0 ].name
5972
60- def test_generate_memories_direct_memories_source (client ):
61- agent_engine = client .agent_engines .create ()
62- client .agent_engines .generate_memories (
73+ # Update the memory.
74+ client .agent_engines .memories ._update (
75+ name = memories [0 ].name ,
76+ fact = "This is temporary" ,
77+ scope = {"user_id" : "test-user-id" },
78+ )
79+ memory = client .agent_engines .memories .get (name = memories [0 ].name )
80+ assert memory .fact == "This is temporary"
81+
82+ # Rollback to the revision with the original fact that was created by the
83+ # generation request.
84+ client .agent_engines .memories .rollback (
85+ name = memories [0 ].name ,
86+ target_revision_id = revision_name .split ("/" )[- 1 ],
87+ )
88+ memory = client .agent_engines .memories .get (name = memories [0 ].name )
89+ assert memory .fact == memory_revisions [0 ].fact
90+
91+ # Update the memory again using generation. We use the original source
92+ # content to ensure that the original memory is updated. The response should
93+ # refer to the previous revision.
94+ response = client .agent_engines .memories .generate (
6395 name = agent_engine .api_resource .name ,
6496 scope = {"user_id" : "test-user-id" },
65- direct_memories_source = types .GenerateMemoriesRequestDirectMemoriesSource (
66- direct_memories = [
67- types .GenerateMemoriesRequestDirectMemoriesSourceDirectMemory (
68- fact = "I am a software engineer."
69- ) ,
70- types . GenerateMemoriesRequestDirectMemoriesSourceDirectMemory (
71- fact = "I like to write replay tests."
72- ),
97+ direct_contents_source = types .GenerateMemoriesRequestDirectContentsSource (
98+ events = [
99+ types .GenerateMemoriesRequestDirectContentsSourceEvent (
100+ content = genai_types . Content (
101+ role = "model" ,
102+ parts = [ genai_types . Part ( text = memory_revisions [ 0 ]. fact )],
103+ )
104+ )
73105 ]
74106 ),
75- config = types .GenerateAgentEngineMemoriesConfig (wait_for_completion = True ),
76- )
77- assert (
78- len (
79- list (
80- client .agent_engines .list_memories (
81- name = agent_engine .api_resource .name ,
82- )
83- )
84- )
85- >= 1
86107 )
108+ # The memory was updated, so the previous revision is set.
109+ assert response .response .generated_memories [0 ].previous_revision is not None
110+
87111 client .agent_engines .delete (name = agent_engine .api_resource .name , force = True )
88112
89113
114+ # def test_generate_memories_direct_memories_source(client):
115+ # agent_engine = client.agent_engines.create()
116+ # client.agent_engines.memories.generate(
117+ # name=agent_engine.api_resource.name,
118+ # scope={"user_id": "test-user-id"},
119+ # direct_memories_source=types.GenerateMemoriesRequestDirectMemoriesSource(
120+ # direct_memories=[
121+ # types.GenerateMemoriesRequestDirectMemoriesSourceDirectMemory(
122+ # fact="I am a software engineer."
123+ # ),
124+ # types.GenerateMemoriesRequestDirectMemoriesSourceDirectMemory(
125+ # fact="I like to write replay tests."
126+ # ),
127+ # ]
128+ # ),
129+ # config=types.GenerateAgentEngineMemoriesConfig(wait_for_completion=True),
130+ # )
131+ # assert (
132+ # len(
133+ # list(
134+ # client.agent_engines.memories.list(
135+ # name=agent_engine.api_resource.name,
136+ # )
137+ # )
138+ # )
139+ # >= 1
140+ # )
141+ # client.agent_engines.delete(name=agent_engine.api_resource.name, force=True)
142+
143+
90144pytestmark = pytest_helper .setup (
91145 file = __file__ ,
92146 globals_for_file = globals (),
0 commit comments