letta-nightly 0.6.32.dev20250225104119__py3-none-any.whl → 0.6.33.dev20250226104113__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.

Files changed (36) hide show
  1. letta/__init__.py +1 -1
  2. letta/agent.py +10 -5
  3. letta/constants.py +7 -0
  4. letta/functions/ast_parsers.py +13 -0
  5. letta/functions/schema_generator.py +14 -2
  6. letta/helpers/composio_helpers.py +3 -2
  7. letta/helpers/tool_execution_helper.py +171 -0
  8. letta/llm_api/anthropic.py +37 -1
  9. letta/orm/source.py +2 -2
  10. letta/schemas/openai/chat_completion_request.py +1 -1
  11. letta/schemas/providers.py +43 -4
  12. letta/schemas/tool.py +1 -13
  13. letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +225 -35
  14. letta/server/rest_api/routers/v1/agents.py +57 -55
  15. letta/server/rest_api/routers/v1/blocks.py +12 -12
  16. letta/server/rest_api/routers/v1/identities.py +12 -12
  17. letta/server/rest_api/routers/v1/jobs.py +8 -8
  18. letta/server/rest_api/routers/v1/providers.py +11 -5
  19. letta/server/rest_api/routers/v1/runs.py +12 -12
  20. letta/server/rest_api/routers/v1/sandbox_configs.py +24 -24
  21. letta/server/rest_api/routers/v1/sources.py +20 -20
  22. letta/server/rest_api/routers/v1/steps.py +8 -7
  23. letta/server/rest_api/routers/v1/tags.py +2 -2
  24. letta/server/rest_api/routers/v1/tools.py +20 -20
  25. letta/server/rest_api/utils.py +2 -3
  26. letta/services/agent_manager.py +36 -0
  27. letta/services/block_manager.py +4 -2
  28. letta/services/identity_manager.py +6 -0
  29. letta/services/message_manager.py +4 -1
  30. letta/services/provider_manager.py +10 -9
  31. letta/services/step_manager.py +2 -2
  32. {letta_nightly-0.6.32.dev20250225104119.dist-info → letta_nightly-0.6.33.dev20250226104113.dist-info}/METADATA +1 -1
  33. {letta_nightly-0.6.32.dev20250225104119.dist-info → letta_nightly-0.6.33.dev20250226104113.dist-info}/RECORD +36 -35
  34. {letta_nightly-0.6.32.dev20250225104119.dist-info → letta_nightly-0.6.33.dev20250226104113.dist-info}/LICENSE +0 -0
  35. {letta_nightly-0.6.32.dev20250225104119.dist-info → letta_nightly-0.6.33.dev20250226104113.dist-info}/WHEEL +0 -0
  36. {letta_nightly-0.6.32.dev20250225104119.dist-info → letta_nightly-0.6.33.dev20250226104113.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
- user_id: Optional[str] = Header(None, alias="user_id"),
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Field(None, exclude=True)
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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"),
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=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
- user_id: Optional[str] = Header(None, alias="user_id"),
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=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
- user_id: Optional[str] = Header(None, alias="user_id"),
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=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
- user_id: Optional[str] = Header(None, alias="user_id"),
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"),
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=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
- user_id: Optional[str] = Header(None, alias="user_id"),
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"),
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"),
46
+ actor_id: Optional[str] = Header(None, alias="user_id"),
47
47
  ):
48
- actor = server.user_manager.get_user_or_default(user_id=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
- user_id: Optional[str] = Header(None, alias="user_id"),
56
+ actor_id: Optional[str] = Header(None, alias="user_id"),
57
57
  ):
58
- actor = server.user_manager.get_user_or_default(user_id=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
- user_id: Optional[str] = Header(None, alias="user_id"),
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=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
- user_id: Optional[str] = Header(None, alias="user_id"),
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
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=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
- user_id: Optional[str] = Header(None, alias="user_id"),
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=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
- user_id: Optional[str] = Header(None, alias="user_id"),
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=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)