letta-nightly 0.6.32.dev20250224104119__py3-none-any.whl → 0.6.33.dev20250226015402__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of letta-nightly might be problematic. Click here for more details.
- letta/__init__.py +1 -1
- letta/agent.py +10 -5
- letta/constants.py +7 -0
- letta/functions/ast_parsers.py +13 -0
- letta/functions/schema_generator.py +14 -2
- letta/helpers/composio_helpers.py +3 -2
- letta/helpers/tool_execution_helper.py +171 -0
- letta/llm_api/anthropic.py +37 -1
- letta/orm/source.py +2 -2
- letta/schemas/openai/chat_completion_request.py +1 -1
- letta/schemas/providers.py +43 -4
- letta/schemas/tool.py +1 -13
- letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +225 -35
- letta/server/rest_api/routers/v1/agents.py +57 -55
- letta/server/rest_api/routers/v1/blocks.py +12 -12
- letta/server/rest_api/routers/v1/identities.py +12 -12
- letta/server/rest_api/routers/v1/jobs.py +8 -8
- letta/server/rest_api/routers/v1/providers.py +11 -5
- letta/server/rest_api/routers/v1/runs.py +12 -12
- letta/server/rest_api/routers/v1/sandbox_configs.py +24 -24
- letta/server/rest_api/routers/v1/sources.py +20 -20
- letta/server/rest_api/routers/v1/steps.py +8 -7
- letta/server/rest_api/routers/v1/tags.py +2 -2
- letta/server/rest_api/routers/v1/tools.py +20 -20
- letta/server/rest_api/utils.py +2 -3
- letta/services/agent_manager.py +36 -0
- letta/services/block_manager.py +4 -2
- letta/services/identity_manager.py +6 -0
- letta/services/message_manager.py +4 -1
- letta/services/provider_manager.py +10 -9
- letta/services/step_manager.py +2 -2
- {letta_nightly-0.6.32.dev20250224104119.dist-info → letta_nightly-0.6.33.dev20250226015402.dist-info}/METADATA +1 -1
- {letta_nightly-0.6.32.dev20250224104119.dist-info → letta_nightly-0.6.33.dev20250226015402.dist-info}/RECORD +36 -35
- {letta_nightly-0.6.32.dev20250224104119.dist-info → letta_nightly-0.6.33.dev20250226015402.dist-info}/LICENSE +0 -0
- {letta_nightly-0.6.32.dev20250224104119.dist-info → letta_nightly-0.6.33.dev20250226015402.dist-info}/WHEEL +0 -0
- {letta_nightly-0.6.32.dev20250224104119.dist-info → letta_nightly-0.6.33.dev20250226015402.dist-info}/entry_points.txt +0 -0
|
@@ -44,7 +44,7 @@ def list_agents(
|
|
|
44
44
|
description="If True, only returns agents that match ALL given tags. Otherwise, return agents that have ANY of the passed in tags.",
|
|
45
45
|
),
|
|
46
46
|
server: "SyncServer" = Depends(get_letta_server),
|
|
47
|
-
|
|
47
|
+
actor_id: Optional[str] = Header(None, alias="user_id"),
|
|
48
48
|
before: Optional[str] = Query(None, description="Cursor for pagination"),
|
|
49
49
|
after: Optional[str] = Query(None, description="Cursor for pagination"),
|
|
50
50
|
limit: Optional[int] = Query(None, description="Limit for pagination"),
|
|
@@ -52,13 +52,14 @@ def list_agents(
|
|
|
52
52
|
project_id: Optional[str] = Query(None, description="Search agents by project id"),
|
|
53
53
|
template_id: Optional[str] = Query(None, description="Search agents by template id"),
|
|
54
54
|
base_template_id: Optional[str] = Query(None, description="Search agents by base template id"),
|
|
55
|
+
identifier_id: Optional[str] = Query(None, description="Search agents by identifier id"),
|
|
55
56
|
identifier_keys: Optional[List[str]] = Query(None, description="Search agents by identifier keys"),
|
|
56
57
|
):
|
|
57
58
|
"""
|
|
58
59
|
List all agents associated with a given user.
|
|
59
60
|
This endpoint retrieves a list of all agents and their configurations associated with the specified user ID.
|
|
60
61
|
"""
|
|
61
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
62
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
62
63
|
|
|
63
64
|
# Use dictionary comprehension to build kwargs dynamically
|
|
64
65
|
kwargs = {
|
|
@@ -68,6 +69,7 @@ def list_agents(
|
|
|
68
69
|
"project_id": project_id,
|
|
69
70
|
"template_id": template_id,
|
|
70
71
|
"base_template_id": base_template_id,
|
|
72
|
+
"identifier_id": identifier_id,
|
|
71
73
|
}.items()
|
|
72
74
|
if value is not None
|
|
73
75
|
}
|
|
@@ -91,12 +93,12 @@ def list_agents(
|
|
|
91
93
|
def retrieve_agent_context_window(
|
|
92
94
|
agent_id: str,
|
|
93
95
|
server: "SyncServer" = Depends(get_letta_server),
|
|
94
|
-
|
|
96
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
95
97
|
):
|
|
96
98
|
"""
|
|
97
99
|
Retrieve the context window of a specific agent.
|
|
98
100
|
"""
|
|
99
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
101
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
100
102
|
|
|
101
103
|
return server.get_agent_context_window(agent_id=agent_id, actor=actor)
|
|
102
104
|
|
|
@@ -107,21 +109,21 @@ class CreateAgentRequest(CreateAgent):
|
|
|
107
109
|
"""
|
|
108
110
|
|
|
109
111
|
# Override the user_id field to exclude it from the request body validation
|
|
110
|
-
|
|
112
|
+
actor_id: Optional[str] = Field(None, exclude=True)
|
|
111
113
|
|
|
112
114
|
|
|
113
115
|
@router.post("/", response_model=AgentState, operation_id="create_agent")
|
|
114
116
|
def create_agent(
|
|
115
117
|
agent: CreateAgentRequest = Body(...),
|
|
116
118
|
server: "SyncServer" = Depends(get_letta_server),
|
|
117
|
-
|
|
119
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
118
120
|
x_project: Optional[str] = Header(None, alias="X-Project"), # Only handled by next js middleware
|
|
119
121
|
):
|
|
120
122
|
"""
|
|
121
123
|
Create a new agent with the specified configuration.
|
|
122
124
|
"""
|
|
123
125
|
try:
|
|
124
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
126
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
125
127
|
return server.create_agent(agent, actor=actor)
|
|
126
128
|
except Exception as e:
|
|
127
129
|
traceback.print_exc()
|
|
@@ -133,10 +135,10 @@ def modify_agent(
|
|
|
133
135
|
agent_id: str,
|
|
134
136
|
update_agent: UpdateAgent = Body(...),
|
|
135
137
|
server: "SyncServer" = Depends(get_letta_server),
|
|
136
|
-
|
|
138
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
137
139
|
):
|
|
138
140
|
"""Update an existing agent"""
|
|
139
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
141
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
140
142
|
return server.agent_manager.update_agent(agent_id=agent_id, agent_update=update_agent, actor=actor)
|
|
141
143
|
|
|
142
144
|
|
|
@@ -144,10 +146,10 @@ def modify_agent(
|
|
|
144
146
|
def list_agent_tools(
|
|
145
147
|
agent_id: str,
|
|
146
148
|
server: "SyncServer" = Depends(get_letta_server),
|
|
147
|
-
|
|
149
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
148
150
|
):
|
|
149
151
|
"""Get tools from an existing agent"""
|
|
150
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
152
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
151
153
|
return server.agent_manager.list_attached_tools(agent_id=agent_id, actor=actor)
|
|
152
154
|
|
|
153
155
|
|
|
@@ -156,12 +158,12 @@ def attach_tool(
|
|
|
156
158
|
agent_id: str,
|
|
157
159
|
tool_id: str,
|
|
158
160
|
server: "SyncServer" = Depends(get_letta_server),
|
|
159
|
-
|
|
161
|
+
actor_id: Optional[str] = Header(None, alias="user_id"),
|
|
160
162
|
):
|
|
161
163
|
"""
|
|
162
164
|
Attach a tool to an agent.
|
|
163
165
|
"""
|
|
164
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
166
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
165
167
|
return server.agent_manager.attach_tool(agent_id=agent_id, tool_id=tool_id, actor=actor)
|
|
166
168
|
|
|
167
169
|
|
|
@@ -170,12 +172,12 @@ def detach_tool(
|
|
|
170
172
|
agent_id: str,
|
|
171
173
|
tool_id: str,
|
|
172
174
|
server: "SyncServer" = Depends(get_letta_server),
|
|
173
|
-
|
|
175
|
+
actor_id: Optional[str] = Header(None, alias="user_id"),
|
|
174
176
|
):
|
|
175
177
|
"""
|
|
176
178
|
Detach a tool from an agent.
|
|
177
179
|
"""
|
|
178
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
180
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
179
181
|
return server.agent_manager.detach_tool(agent_id=agent_id, tool_id=tool_id, actor=actor)
|
|
180
182
|
|
|
181
183
|
|
|
@@ -184,12 +186,12 @@ def attach_source(
|
|
|
184
186
|
agent_id: str,
|
|
185
187
|
source_id: str,
|
|
186
188
|
server: "SyncServer" = Depends(get_letta_server),
|
|
187
|
-
|
|
189
|
+
actor_id: Optional[str] = Header(None, alias="user_id"),
|
|
188
190
|
):
|
|
189
191
|
"""
|
|
190
192
|
Attach a source to an agent.
|
|
191
193
|
"""
|
|
192
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
194
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
193
195
|
return server.agent_manager.attach_source(agent_id=agent_id, source_id=source_id, actor=actor)
|
|
194
196
|
|
|
195
197
|
|
|
@@ -198,12 +200,12 @@ def detach_source(
|
|
|
198
200
|
agent_id: str,
|
|
199
201
|
source_id: str,
|
|
200
202
|
server: "SyncServer" = Depends(get_letta_server),
|
|
201
|
-
|
|
203
|
+
actor_id: Optional[str] = Header(None, alias="user_id"),
|
|
202
204
|
):
|
|
203
205
|
"""
|
|
204
206
|
Detach a source from an agent.
|
|
205
207
|
"""
|
|
206
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
208
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
207
209
|
return server.agent_manager.detach_source(agent_id=agent_id, source_id=source_id, actor=actor)
|
|
208
210
|
|
|
209
211
|
|
|
@@ -211,12 +213,12 @@ def detach_source(
|
|
|
211
213
|
def retrieve_agent(
|
|
212
214
|
agent_id: str,
|
|
213
215
|
server: "SyncServer" = Depends(get_letta_server),
|
|
214
|
-
|
|
216
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
215
217
|
):
|
|
216
218
|
"""
|
|
217
219
|
Get the state of the agent.
|
|
218
220
|
"""
|
|
219
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
221
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
220
222
|
|
|
221
223
|
try:
|
|
222
224
|
return server.agent_manager.get_agent_by_id(agent_id=agent_id, actor=actor)
|
|
@@ -228,12 +230,12 @@ def retrieve_agent(
|
|
|
228
230
|
def delete_agent(
|
|
229
231
|
agent_id: str,
|
|
230
232
|
server: "SyncServer" = Depends(get_letta_server),
|
|
231
|
-
|
|
233
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
232
234
|
):
|
|
233
235
|
"""
|
|
234
236
|
Delete an agent.
|
|
235
237
|
"""
|
|
236
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
238
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
237
239
|
try:
|
|
238
240
|
server.agent_manager.delete_agent(agent_id=agent_id, actor=actor)
|
|
239
241
|
return JSONResponse(status_code=status.HTTP_200_OK, content={"message": f"Agent id={agent_id} successfully deleted"})
|
|
@@ -245,12 +247,12 @@ def delete_agent(
|
|
|
245
247
|
def list_agent_sources(
|
|
246
248
|
agent_id: str,
|
|
247
249
|
server: "SyncServer" = Depends(get_letta_server),
|
|
248
|
-
|
|
250
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
249
251
|
):
|
|
250
252
|
"""
|
|
251
253
|
Get the sources associated with an agent.
|
|
252
254
|
"""
|
|
253
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
255
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
254
256
|
return server.agent_manager.list_attached_sources(agent_id=agent_id, actor=actor)
|
|
255
257
|
|
|
256
258
|
|
|
@@ -259,13 +261,13 @@ def list_agent_sources(
|
|
|
259
261
|
def retrieve_agent_memory(
|
|
260
262
|
agent_id: str,
|
|
261
263
|
server: "SyncServer" = Depends(get_letta_server),
|
|
262
|
-
|
|
264
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
263
265
|
):
|
|
264
266
|
"""
|
|
265
267
|
Retrieve the memory state of a specific agent.
|
|
266
268
|
This endpoint fetches the current memory state of the agent identified by the user ID and agent ID.
|
|
267
269
|
"""
|
|
268
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
270
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
269
271
|
|
|
270
272
|
return server.get_agent_memory(agent_id=agent_id, actor=actor)
|
|
271
273
|
|
|
@@ -275,12 +277,12 @@ def retrieve_core_memory_block(
|
|
|
275
277
|
agent_id: str,
|
|
276
278
|
block_label: str,
|
|
277
279
|
server: "SyncServer" = Depends(get_letta_server),
|
|
278
|
-
|
|
280
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
279
281
|
):
|
|
280
282
|
"""
|
|
281
283
|
Retrieve a memory block from an agent.
|
|
282
284
|
"""
|
|
283
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
285
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
284
286
|
|
|
285
287
|
try:
|
|
286
288
|
return server.agent_manager.get_block_with_label(agent_id=agent_id, block_label=block_label, actor=actor)
|
|
@@ -292,12 +294,12 @@ def retrieve_core_memory_block(
|
|
|
292
294
|
def list_core_memory_blocks(
|
|
293
295
|
agent_id: str,
|
|
294
296
|
server: "SyncServer" = Depends(get_letta_server),
|
|
295
|
-
|
|
297
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
296
298
|
):
|
|
297
299
|
"""
|
|
298
300
|
Retrieve the memory blocks of a specific agent.
|
|
299
301
|
"""
|
|
300
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
302
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
301
303
|
try:
|
|
302
304
|
agent = server.agent_manager.get_agent_by_id(agent_id, actor=actor)
|
|
303
305
|
return agent.memory.blocks
|
|
@@ -311,12 +313,12 @@ def modify_core_memory_block(
|
|
|
311
313
|
block_label: str,
|
|
312
314
|
block_update: BlockUpdate = Body(...),
|
|
313
315
|
server: "SyncServer" = Depends(get_letta_server),
|
|
314
|
-
|
|
316
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
315
317
|
):
|
|
316
318
|
"""
|
|
317
319
|
Updates a memory block of an agent.
|
|
318
320
|
"""
|
|
319
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
321
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
320
322
|
|
|
321
323
|
block = server.agent_manager.get_block_with_label(agent_id=agent_id, block_label=block_label, actor=actor)
|
|
322
324
|
block = server.block_manager.update_block(block.id, block_update=block_update, actor=actor)
|
|
@@ -332,12 +334,12 @@ def attach_core_memory_block(
|
|
|
332
334
|
agent_id: str,
|
|
333
335
|
block_id: str,
|
|
334
336
|
server: "SyncServer" = Depends(get_letta_server),
|
|
335
|
-
|
|
337
|
+
actor_id: Optional[str] = Header(None, alias="user_id"),
|
|
336
338
|
):
|
|
337
339
|
"""
|
|
338
340
|
Attach a block to an agent.
|
|
339
341
|
"""
|
|
340
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
342
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
341
343
|
return server.agent_manager.attach_block(agent_id=agent_id, block_id=block_id, actor=actor)
|
|
342
344
|
|
|
343
345
|
|
|
@@ -346,12 +348,12 @@ def detach_core_memory_block(
|
|
|
346
348
|
agent_id: str,
|
|
347
349
|
block_id: str,
|
|
348
350
|
server: "SyncServer" = Depends(get_letta_server),
|
|
349
|
-
|
|
351
|
+
actor_id: Optional[str] = Header(None, alias="user_id"),
|
|
350
352
|
):
|
|
351
353
|
"""
|
|
352
354
|
Detach a block from an agent.
|
|
353
355
|
"""
|
|
354
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
356
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
355
357
|
return server.agent_manager.detach_block(agent_id=agent_id, block_id=block_id, actor=actor)
|
|
356
358
|
|
|
357
359
|
|
|
@@ -362,12 +364,12 @@ def list_archival_memory(
|
|
|
362
364
|
after: Optional[int] = Query(None, description="Unique ID of the memory to start the query range at."),
|
|
363
365
|
before: Optional[int] = Query(None, description="Unique ID of the memory to end the query range at."),
|
|
364
366
|
limit: Optional[int] = Query(None, description="How many results to include in the response."),
|
|
365
|
-
|
|
367
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
366
368
|
):
|
|
367
369
|
"""
|
|
368
370
|
Retrieve the memories in an agent's archival memory store (paginated query).
|
|
369
371
|
"""
|
|
370
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
372
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
371
373
|
|
|
372
374
|
return server.get_agent_archival(
|
|
373
375
|
user_id=actor.id,
|
|
@@ -383,12 +385,12 @@ def create_archival_memory(
|
|
|
383
385
|
agent_id: str,
|
|
384
386
|
request: CreateArchivalMemory = Body(...),
|
|
385
387
|
server: "SyncServer" = Depends(get_letta_server),
|
|
386
|
-
|
|
388
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
387
389
|
):
|
|
388
390
|
"""
|
|
389
391
|
Insert a memory into an agent's archival memory store.
|
|
390
392
|
"""
|
|
391
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
393
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
392
394
|
|
|
393
395
|
return server.insert_archival_memory(agent_id=agent_id, memory_contents=request.text, actor=actor)
|
|
394
396
|
|
|
@@ -401,12 +403,12 @@ def delete_archival_memory(
|
|
|
401
403
|
memory_id: str,
|
|
402
404
|
# memory_id: str = Query(..., description="Unique ID of the memory to be deleted."),
|
|
403
405
|
server: "SyncServer" = Depends(get_letta_server),
|
|
404
|
-
|
|
406
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
405
407
|
):
|
|
406
408
|
"""
|
|
407
409
|
Delete a memory from an agent's archival memory store.
|
|
408
410
|
"""
|
|
409
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
411
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
410
412
|
|
|
411
413
|
server.delete_archival_memory(memory_id=memory_id, actor=actor)
|
|
412
414
|
return JSONResponse(status_code=status.HTTP_200_OK, content={"message": f"Memory id={memory_id} successfully deleted"})
|
|
@@ -427,12 +429,12 @@ def list_messages(
|
|
|
427
429
|
use_assistant_message: bool = Query(True, description="Whether to use assistant messages"),
|
|
428
430
|
assistant_message_tool_name: str = Query(DEFAULT_MESSAGE_TOOL, description="The name of the designated message tool."),
|
|
429
431
|
assistant_message_tool_kwarg: str = Query(DEFAULT_MESSAGE_TOOL_KWARG, description="The name of the message argument."),
|
|
430
|
-
|
|
432
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
431
433
|
):
|
|
432
434
|
"""
|
|
433
435
|
Retrieve message history for an agent.
|
|
434
436
|
"""
|
|
435
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
437
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
436
438
|
|
|
437
439
|
return server.get_agent_recall(
|
|
438
440
|
user_id=actor.id,
|
|
@@ -454,13 +456,13 @@ def modify_message(
|
|
|
454
456
|
message_id: str,
|
|
455
457
|
request: MessageUpdate = Body(...),
|
|
456
458
|
server: "SyncServer" = Depends(get_letta_server),
|
|
457
|
-
|
|
459
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
458
460
|
):
|
|
459
461
|
"""
|
|
460
462
|
Update the details of a message associated with an agent.
|
|
461
463
|
"""
|
|
462
464
|
# TODO: Get rid of agent_id here, it's not really relevant
|
|
463
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
465
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
464
466
|
return server.message_manager.update_message_by_id(message_id=message_id, message_update=request, actor=actor)
|
|
465
467
|
|
|
466
468
|
|
|
@@ -474,13 +476,13 @@ async def send_message(
|
|
|
474
476
|
agent_id: str,
|
|
475
477
|
server: SyncServer = Depends(get_letta_server),
|
|
476
478
|
request: LettaRequest = Body(...),
|
|
477
|
-
|
|
479
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
478
480
|
):
|
|
479
481
|
"""
|
|
480
482
|
Process a user message and return the agent's response.
|
|
481
483
|
This endpoint accepts a message from a user and processes it through the agent.
|
|
482
484
|
"""
|
|
483
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
485
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
484
486
|
result = await server.send_message_to_agent(
|
|
485
487
|
agent_id=agent_id,
|
|
486
488
|
actor=actor,
|
|
@@ -513,14 +515,14 @@ async def send_message_streaming(
|
|
|
513
515
|
agent_id: str,
|
|
514
516
|
server: SyncServer = Depends(get_letta_server),
|
|
515
517
|
request: LettaStreamingRequest = Body(...),
|
|
516
|
-
|
|
518
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
517
519
|
):
|
|
518
520
|
"""
|
|
519
521
|
Process a user message and return the agent's response.
|
|
520
522
|
This endpoint accepts a message from a user and processes it through the agent.
|
|
521
523
|
It will stream the steps of the response always, and stream the tokens if 'stream_tokens' is set to True.
|
|
522
524
|
"""
|
|
523
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
525
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
524
526
|
result = await server.send_message_to_agent(
|
|
525
527
|
agent_id=agent_id,
|
|
526
528
|
actor=actor,
|
|
@@ -590,13 +592,13 @@ async def send_message_async(
|
|
|
590
592
|
background_tasks: BackgroundTasks,
|
|
591
593
|
server: SyncServer = Depends(get_letta_server),
|
|
592
594
|
request: LettaRequest = Body(...),
|
|
593
|
-
|
|
595
|
+
actor_id: Optional[str] = Header(None, alias="user_id"),
|
|
594
596
|
):
|
|
595
597
|
"""
|
|
596
598
|
Asynchronously process a user message and return a run object.
|
|
597
599
|
The actual processing happens in the background, and the status can be checked using the run ID.
|
|
598
600
|
"""
|
|
599
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
601
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
600
602
|
|
|
601
603
|
# Create a new job
|
|
602
604
|
run = Run(
|
|
@@ -635,8 +637,8 @@ def reset_messages(
|
|
|
635
637
|
agent_id: str,
|
|
636
638
|
add_default_initial_messages: bool = Query(default=False, description="If true, adds the default initial messages after resetting."),
|
|
637
639
|
server: "SyncServer" = Depends(get_letta_server),
|
|
638
|
-
|
|
640
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
639
641
|
):
|
|
640
642
|
"""Resets the messages for an agent"""
|
|
641
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
643
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
642
644
|
return server.agent_manager.reset_messages(agent_id=agent_id, actor=actor, add_default_initial_messages=add_default_initial_messages)
|
|
@@ -21,9 +21,9 @@ def list_blocks(
|
|
|
21
21
|
templates_only: bool = Query(True, description="Whether to include only templates"),
|
|
22
22
|
name: Optional[str] = Query(None, description="Name of the block"),
|
|
23
23
|
server: SyncServer = Depends(get_letta_server),
|
|
24
|
-
|
|
24
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
25
25
|
):
|
|
26
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
26
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
27
27
|
return server.block_manager.get_blocks(actor=actor, label=label, is_template=templates_only, template_name=name)
|
|
28
28
|
|
|
29
29
|
|
|
@@ -31,9 +31,9 @@ def list_blocks(
|
|
|
31
31
|
def create_block(
|
|
32
32
|
create_block: CreateBlock = Body(...),
|
|
33
33
|
server: SyncServer = Depends(get_letta_server),
|
|
34
|
-
|
|
34
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
35
35
|
):
|
|
36
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
36
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
37
37
|
block = Block(**create_block.model_dump())
|
|
38
38
|
return server.block_manager.create_or_update_block(actor=actor, block=block)
|
|
39
39
|
|
|
@@ -43,9 +43,9 @@ def modify_block(
|
|
|
43
43
|
block_id: str,
|
|
44
44
|
block_update: BlockUpdate = Body(...),
|
|
45
45
|
server: SyncServer = Depends(get_letta_server),
|
|
46
|
-
|
|
46
|
+
actor_id: Optional[str] = Header(None, alias="user_id"),
|
|
47
47
|
):
|
|
48
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
48
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
49
49
|
return server.block_manager.update_block(block_id=block_id, block_update=block_update, actor=actor)
|
|
50
50
|
|
|
51
51
|
|
|
@@ -53,9 +53,9 @@ def modify_block(
|
|
|
53
53
|
def delete_block(
|
|
54
54
|
block_id: str,
|
|
55
55
|
server: SyncServer = Depends(get_letta_server),
|
|
56
|
-
|
|
56
|
+
actor_id: Optional[str] = Header(None, alias="user_id"),
|
|
57
57
|
):
|
|
58
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
58
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
59
59
|
return server.block_manager.delete_block(block_id=block_id, actor=actor)
|
|
60
60
|
|
|
61
61
|
|
|
@@ -63,10 +63,10 @@ def delete_block(
|
|
|
63
63
|
def retrieve_block(
|
|
64
64
|
block_id: str,
|
|
65
65
|
server: SyncServer = Depends(get_letta_server),
|
|
66
|
-
|
|
66
|
+
actor_id: Optional[str] = Header(None, alias="user_id"),
|
|
67
67
|
):
|
|
68
68
|
print("call get block", block_id)
|
|
69
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
69
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
70
70
|
try:
|
|
71
71
|
block = server.block_manager.get_block_by_id(block_id=block_id, actor=actor)
|
|
72
72
|
if block is None:
|
|
@@ -80,13 +80,13 @@ def retrieve_block(
|
|
|
80
80
|
def list_agents_for_block(
|
|
81
81
|
block_id: str,
|
|
82
82
|
server: SyncServer = Depends(get_letta_server),
|
|
83
|
-
|
|
83
|
+
actor_id: Optional[str] = Header(None, alias="user_id"),
|
|
84
84
|
):
|
|
85
85
|
"""
|
|
86
86
|
Retrieves all agents associated with the specified block.
|
|
87
87
|
Raises a 404 if the block does not exist.
|
|
88
88
|
"""
|
|
89
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
89
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
90
90
|
try:
|
|
91
91
|
agents = server.block_manager.get_agents_for_block(block_id=block_id, actor=actor)
|
|
92
92
|
return agents
|
|
@@ -22,13 +22,13 @@ def list_identities(
|
|
|
22
22
|
after: Optional[str] = Query(None),
|
|
23
23
|
limit: Optional[int] = Query(50),
|
|
24
24
|
server: "SyncServer" = Depends(get_letta_server),
|
|
25
|
-
|
|
25
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
26
26
|
):
|
|
27
27
|
"""
|
|
28
28
|
Get a list of all identities in the database
|
|
29
29
|
"""
|
|
30
30
|
try:
|
|
31
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
31
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
32
32
|
|
|
33
33
|
identities = server.identity_manager.list_identities(
|
|
34
34
|
name=name,
|
|
@@ -51,10 +51,10 @@ def list_identities(
|
|
|
51
51
|
def retrieve_identity(
|
|
52
52
|
identity_id: str,
|
|
53
53
|
server: "SyncServer" = Depends(get_letta_server),
|
|
54
|
-
|
|
54
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
55
55
|
):
|
|
56
56
|
try:
|
|
57
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
57
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
58
58
|
return server.identity_manager.get_identity(identity_id=identity_id, actor=actor)
|
|
59
59
|
except NoResultFound as e:
|
|
60
60
|
raise HTTPException(status_code=404, detail=str(e))
|
|
@@ -64,11 +64,11 @@ def retrieve_identity(
|
|
|
64
64
|
def create_identity(
|
|
65
65
|
identity: IdentityCreate = Body(...),
|
|
66
66
|
server: "SyncServer" = Depends(get_letta_server),
|
|
67
|
-
|
|
67
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
68
68
|
x_project: Optional[str] = Header(None, alias="X-Project"), # Only handled by next js middleware
|
|
69
69
|
):
|
|
70
70
|
try:
|
|
71
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
71
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
72
72
|
return server.identity_manager.create_identity(identity=identity, actor=actor)
|
|
73
73
|
except HTTPException:
|
|
74
74
|
raise
|
|
@@ -80,11 +80,11 @@ def create_identity(
|
|
|
80
80
|
def upsert_identity(
|
|
81
81
|
identity: IdentityCreate = Body(...),
|
|
82
82
|
server: "SyncServer" = Depends(get_letta_server),
|
|
83
|
-
|
|
83
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
84
84
|
x_project: Optional[str] = Header(None, alias="X-Project"), # Only handled by next js middleware
|
|
85
85
|
):
|
|
86
86
|
try:
|
|
87
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
87
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
88
88
|
return server.identity_manager.upsert_identity(identity=identity, actor=actor)
|
|
89
89
|
except HTTPException:
|
|
90
90
|
raise
|
|
@@ -97,10 +97,10 @@ def modify_identity(
|
|
|
97
97
|
identity_id: str,
|
|
98
98
|
identity: IdentityUpdate = Body(...),
|
|
99
99
|
server: "SyncServer" = Depends(get_letta_server),
|
|
100
|
-
|
|
100
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
101
101
|
):
|
|
102
102
|
try:
|
|
103
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
103
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
104
104
|
return server.identity_manager.update_identity(identity_id=identity_id, identity=identity, actor=actor)
|
|
105
105
|
except HTTPException:
|
|
106
106
|
raise
|
|
@@ -112,10 +112,10 @@ def modify_identity(
|
|
|
112
112
|
def delete_identity(
|
|
113
113
|
identity_id: str,
|
|
114
114
|
server: "SyncServer" = Depends(get_letta_server),
|
|
115
|
-
|
|
115
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
116
116
|
):
|
|
117
117
|
"""
|
|
118
118
|
Delete an identity by its identifier key
|
|
119
119
|
"""
|
|
120
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
120
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
121
121
|
server.identity_manager.delete_identity(identity_id=identity_id, actor=actor)
|
|
@@ -15,12 +15,12 @@ router = APIRouter(prefix="/jobs", tags=["jobs"])
|
|
|
15
15
|
def list_jobs(
|
|
16
16
|
server: "SyncServer" = Depends(get_letta_server),
|
|
17
17
|
source_id: Optional[str] = Query(None, description="Only list jobs associated with the source."),
|
|
18
|
-
|
|
18
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
19
19
|
):
|
|
20
20
|
"""
|
|
21
21
|
List all jobs.
|
|
22
22
|
"""
|
|
23
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
23
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
24
24
|
|
|
25
25
|
# TODO: add filtering by status
|
|
26
26
|
jobs = server.job_manager.list_jobs(actor=actor)
|
|
@@ -35,12 +35,12 @@ def list_jobs(
|
|
|
35
35
|
@router.get("/active", response_model=List[Job], operation_id="list_active_jobs")
|
|
36
36
|
def list_active_jobs(
|
|
37
37
|
server: "SyncServer" = Depends(get_letta_server),
|
|
38
|
-
|
|
38
|
+
actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
|
|
39
39
|
):
|
|
40
40
|
"""
|
|
41
41
|
List all active jobs.
|
|
42
42
|
"""
|
|
43
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
43
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
44
44
|
|
|
45
45
|
return server.job_manager.list_jobs(actor=actor, statuses=[JobStatus.created, JobStatus.running])
|
|
46
46
|
|
|
@@ -48,13 +48,13 @@ def list_active_jobs(
|
|
|
48
48
|
@router.get("/{job_id}", response_model=Job, operation_id="retrieve_job")
|
|
49
49
|
def retrieve_job(
|
|
50
50
|
job_id: str,
|
|
51
|
-
|
|
51
|
+
actor_id: Optional[str] = Header(None, alias="user_id"),
|
|
52
52
|
server: "SyncServer" = Depends(get_letta_server),
|
|
53
53
|
):
|
|
54
54
|
"""
|
|
55
55
|
Get the status of a job.
|
|
56
56
|
"""
|
|
57
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
57
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
58
58
|
|
|
59
59
|
try:
|
|
60
60
|
return server.job_manager.get_job_by_id(job_id=job_id, actor=actor)
|
|
@@ -65,13 +65,13 @@ def retrieve_job(
|
|
|
65
65
|
@router.delete("/{job_id}", response_model=Job, operation_id="delete_job")
|
|
66
66
|
def delete_job(
|
|
67
67
|
job_id: str,
|
|
68
|
-
|
|
68
|
+
actor_id: Optional[str] = Header(None, alias="user_id"),
|
|
69
69
|
server: "SyncServer" = Depends(get_letta_server),
|
|
70
70
|
):
|
|
71
71
|
"""
|
|
72
72
|
Delete a job by its job_id.
|
|
73
73
|
"""
|
|
74
|
-
actor = server.user_manager.get_user_or_default(user_id=
|
|
74
|
+
actor = server.user_manager.get_user_or_default(user_id=actor_id)
|
|
75
75
|
|
|
76
76
|
try:
|
|
77
77
|
job = server.job_manager.delete_job_by_id(job_id=job_id, actor=actor)
|