letta-nightly 0.6.32.dev20250225104119__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.

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.dev20250226015402.dist-info}/METADATA +1 -1
  33. {letta_nightly-0.6.32.dev20250225104119.dist-info → letta_nightly-0.6.33.dev20250226015402.dist-info}/RECORD +36 -35
  34. {letta_nightly-0.6.32.dev20250225104119.dist-info → letta_nightly-0.6.33.dev20250226015402.dist-info}/LICENSE +0 -0
  35. {letta_nightly-0.6.32.dev20250225104119.dist-info → letta_nightly-0.6.33.dev20250226015402.dist-info}/WHEEL +0 -0
  36. {letta_nightly-0.6.32.dev20250225104119.dist-info → letta_nightly-0.6.33.dev20250226015402.dist-info}/entry_points.txt +0 -0
@@ -15,13 +15,15 @@ router = APIRouter(prefix="/providers", tags=["providers"])
15
15
  def list_providers(
16
16
  after: Optional[str] = Query(None),
17
17
  limit: Optional[int] = Query(50),
18
+ actor_id: Optional[str] = Header(None, alias="user_id"),
18
19
  server: "SyncServer" = Depends(get_letta_server),
19
20
  ):
20
21
  """
21
22
  Get a list of all custom providers in the database
22
23
  """
23
24
  try:
24
- providers = server.provider_manager.list_providers(after=after, limit=limit)
25
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
26
+ providers = server.provider_manager.list_providers(after=after, limit=limit, actor=actor)
25
27
  except HTTPException:
26
28
  raise
27
29
  except Exception as e:
@@ -32,13 +34,13 @@ def list_providers(
32
34
  @router.post("/", tags=["providers"], response_model=Provider, operation_id="create_provider")
33
35
  def create_provider(
34
36
  request: ProviderCreate = Body(...),
37
+ actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
35
38
  server: "SyncServer" = Depends(get_letta_server),
36
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
37
39
  ):
38
40
  """
39
41
  Create a new custom provider
40
42
  """
41
- 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)
42
44
 
43
45
  provider = Provider(**request.model_dump())
44
46
  provider = server.provider_manager.create_provider(provider, actor=actor)
@@ -48,25 +50,29 @@ def create_provider(
48
50
  @router.patch("/", tags=["providers"], response_model=Provider, operation_id="modify_provider")
49
51
  def modify_provider(
50
52
  request: ProviderUpdate = Body(...),
53
+ actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
51
54
  server: "SyncServer" = Depends(get_letta_server),
52
55
  ):
53
56
  """
54
57
  Update an existing custom provider
55
58
  """
56
- provider = server.provider_manager.update_provider(request)
59
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
60
+ provider = server.provider_manager.update_provider(request, actor=actor)
57
61
  return provider
58
62
 
59
63
 
60
64
  @router.delete("/", tags=["providers"], response_model=None, operation_id="delete_provider")
61
65
  def delete_provider(
62
66
  provider_id: str = Query(..., description="The provider_id key to be deleted."),
67
+ actor_id: Optional[str] = Header(None, alias="user_id"),
63
68
  server: "SyncServer" = Depends(get_letta_server),
64
69
  ):
65
70
  """
66
71
  Delete an existing custom provider
67
72
  """
68
73
  try:
69
- server.provider_manager.delete_provider_by_id(provider_id=provider_id)
74
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
75
+ server.provider_manager.delete_provider_by_id(provider_id=provider_id, actor=actor)
70
76
  except HTTPException:
71
77
  raise
72
78
  except Exception as e:
@@ -18,12 +18,12 @@ router = APIRouter(prefix="/runs", tags=["runs"])
18
18
  @router.get("/", response_model=List[Run], operation_id="list_runs")
19
19
  def list_runs(
20
20
  server: "SyncServer" = Depends(get_letta_server),
21
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
21
+ actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
22
22
  ):
23
23
  """
24
24
  List all runs.
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
 
28
28
  return [Run.from_job(job) for job in server.job_manager.list_jobs(actor=actor, job_type=JobType.RUN)]
29
29
 
@@ -31,12 +31,12 @@ def list_runs(
31
31
  @router.get("/active", response_model=List[Run], operation_id="list_active_runs")
32
32
  def list_active_runs(
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
36
  """
37
37
  List all active runs.
38
38
  """
39
- actor = server.user_manager.get_user_or_default(user_id=user_id)
39
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
40
40
 
41
41
  active_runs = server.job_manager.list_jobs(actor=actor, statuses=[JobStatus.created, JobStatus.running], job_type=JobType.RUN)
42
42
 
@@ -46,13 +46,13 @@ def list_active_runs(
46
46
  @router.get("/{run_id}", response_model=Run, operation_id="retrieve_run")
47
47
  def retrieve_run(
48
48
  run_id: str,
49
- user_id: Optional[str] = Header(None, alias="user_id"),
49
+ actor_id: Optional[str] = Header(None, alias="user_id"),
50
50
  server: "SyncServer" = Depends(get_letta_server),
51
51
  ):
52
52
  """
53
53
  Get the status of a run.
54
54
  """
55
- actor = server.user_manager.get_user_or_default(user_id=user_id)
55
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
56
56
 
57
57
  try:
58
58
  job = server.job_manager.get_job_by_id(job_id=run_id, actor=actor)
@@ -74,7 +74,7 @@ RunMessagesResponse = Annotated[
74
74
  async def list_run_messages(
75
75
  run_id: str,
76
76
  server: "SyncServer" = Depends(get_letta_server),
77
- user_id: Optional[str] = Header(None, alias="user_id"),
77
+ actor_id: Optional[str] = Header(None, alias="user_id"),
78
78
  before: Optional[str] = Query(None, description="Cursor for pagination"),
79
79
  after: Optional[str] = Query(None, description="Cursor for pagination"),
80
80
  limit: Optional[int] = Query(100, description="Maximum number of messages to return"),
@@ -102,7 +102,7 @@ async def list_run_messages(
102
102
  if order not in ["asc", "desc"]:
103
103
  raise HTTPException(status_code=400, detail="Order must be 'asc' or 'desc'")
104
104
 
105
- actor = server.user_manager.get_user_or_default(user_id=user_id)
105
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
106
106
 
107
107
  try:
108
108
  messages = server.job_manager.get_run_messages(
@@ -122,13 +122,13 @@ async def list_run_messages(
122
122
  @router.get("/{run_id}/usage", response_model=UsageStatistics, operation_id="retrieve_run_usage")
123
123
  def retrieve_run_usage(
124
124
  run_id: str,
125
- user_id: Optional[str] = Header(None, alias="user_id"),
125
+ actor_id: Optional[str] = Header(None, alias="user_id"),
126
126
  server: "SyncServer" = Depends(get_letta_server),
127
127
  ):
128
128
  """
129
129
  Get usage statistics for a run.
130
130
  """
131
- actor = server.user_manager.get_user_or_default(user_id=user_id)
131
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
132
132
 
133
133
  try:
134
134
  usage = server.job_manager.get_job_usage(job_id=run_id, actor=actor)
@@ -140,13 +140,13 @@ def retrieve_run_usage(
140
140
  @router.delete("/{run_id}", response_model=Run, operation_id="delete_run")
141
141
  def delete_run(
142
142
  run_id: str,
143
- user_id: Optional[str] = Header(None, alias="user_id"),
143
+ actor_id: Optional[str] = Header(None, alias="user_id"),
144
144
  server: "SyncServer" = Depends(get_letta_server),
145
145
  ):
146
146
  """
147
147
  Delete a run by its run_id.
148
148
  """
149
- actor = server.user_manager.get_user_or_default(user_id=user_id)
149
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
150
150
 
151
151
  try:
152
152
  job = server.job_manager.delete_job_by_id(job_id=run_id, actor=actor)
@@ -25,9 +25,9 @@ logger = get_logger(__name__)
25
25
  def create_sandbox_config(
26
26
  config_create: SandboxConfigCreate,
27
27
  server: SyncServer = Depends(get_letta_server),
28
- user_id: str = Depends(get_user_id),
28
+ actor_id: str = Depends(get_user_id),
29
29
  ):
30
- actor = server.user_manager.get_user_or_default(user_id=user_id)
30
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
31
31
 
32
32
  return server.sandbox_config_manager.create_or_update_sandbox_config(config_create, actor)
33
33
 
@@ -35,18 +35,18 @@ def create_sandbox_config(
35
35
  @router.post("/e2b/default", response_model=PydanticSandboxConfig)
36
36
  def create_default_e2b_sandbox_config(
37
37
  server: SyncServer = Depends(get_letta_server),
38
- user_id: str = Depends(get_user_id),
38
+ actor_id: str = Depends(get_user_id),
39
39
  ):
40
- actor = server.user_manager.get_user_or_default(user_id=user_id)
40
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
41
41
  return server.sandbox_config_manager.get_or_create_default_sandbox_config(sandbox_type=SandboxType.E2B, actor=actor)
42
42
 
43
43
 
44
44
  @router.post("/local/default", response_model=PydanticSandboxConfig)
45
45
  def create_default_local_sandbox_config(
46
46
  server: SyncServer = Depends(get_letta_server),
47
- user_id: str = Depends(get_user_id),
47
+ actor_id: str = Depends(get_user_id),
48
48
  ):
49
- actor = server.user_manager.get_user_or_default(user_id=user_id)
49
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
50
50
  return server.sandbox_config_manager.get_or_create_default_sandbox_config(sandbox_type=SandboxType.LOCAL, actor=actor)
51
51
 
52
52
 
@@ -54,7 +54,7 @@ def create_default_local_sandbox_config(
54
54
  def create_custom_local_sandbox_config(
55
55
  local_sandbox_config: LocalSandboxConfig,
56
56
  server: SyncServer = Depends(get_letta_server),
57
- user_id: str = Depends(get_user_id),
57
+ actor_id: str = Depends(get_user_id),
58
58
  ):
59
59
  """
60
60
  Create or update a custom LocalSandboxConfig, including pip_requirements.
@@ -67,7 +67,7 @@ def create_custom_local_sandbox_config(
67
67
  )
68
68
 
69
69
  # Retrieve the user (actor)
70
- actor = server.user_manager.get_user_or_default(user_id=user_id)
70
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
71
71
 
72
72
  # Wrap the LocalSandboxConfig into a SandboxConfigCreate
73
73
  sandbox_config_create = SandboxConfigCreate(config=local_sandbox_config)
@@ -83,9 +83,9 @@ def update_sandbox_config(
83
83
  sandbox_config_id: str,
84
84
  config_update: SandboxConfigUpdate,
85
85
  server: SyncServer = Depends(get_letta_server),
86
- user_id: str = Depends(get_user_id),
86
+ actor_id: str = Depends(get_user_id),
87
87
  ):
88
- actor = server.user_manager.get_user_or_default(user_id=user_id)
88
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
89
89
  return server.sandbox_config_manager.update_sandbox_config(sandbox_config_id, config_update, actor)
90
90
 
91
91
 
@@ -93,9 +93,9 @@ def update_sandbox_config(
93
93
  def delete_sandbox_config(
94
94
  sandbox_config_id: str,
95
95
  server: SyncServer = Depends(get_letta_server),
96
- user_id: str = Depends(get_user_id),
96
+ actor_id: str = Depends(get_user_id),
97
97
  ):
98
- actor = server.user_manager.get_user_or_default(user_id=user_id)
98
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
99
99
  server.sandbox_config_manager.delete_sandbox_config(sandbox_config_id, actor)
100
100
 
101
101
 
@@ -105,22 +105,22 @@ def list_sandbox_configs(
105
105
  after: Optional[str] = Query(None, description="Pagination cursor to fetch the next set of results"),
106
106
  sandbox_type: Optional[SandboxType] = Query(None, description="Filter for this specific sandbox type"),
107
107
  server: SyncServer = Depends(get_letta_server),
108
- user_id: str = Depends(get_user_id),
108
+ actor_id: str = Depends(get_user_id),
109
109
  ):
110
- actor = server.user_manager.get_user_or_default(user_id=user_id)
110
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
111
111
  return server.sandbox_config_manager.list_sandbox_configs(actor, limit=limit, after=after, sandbox_type=sandbox_type)
112
112
 
113
113
 
114
114
  @router.post("/local/recreate-venv", response_model=PydanticSandboxConfig)
115
115
  def force_recreate_local_sandbox_venv(
116
116
  server: SyncServer = Depends(get_letta_server),
117
- user_id: str = Depends(get_user_id),
117
+ actor_id: str = Depends(get_user_id),
118
118
  ):
119
119
  """
120
120
  Forcefully recreate the virtual environment for the local sandbox.
121
121
  Deletes and recreates the venv, then reinstalls required dependencies.
122
122
  """
123
- actor = server.user_manager.get_user_or_default(user_id=user_id)
123
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
124
124
 
125
125
  # Retrieve the local sandbox config
126
126
  sbx_config = server.sandbox_config_manager.get_or_create_default_sandbox_config(sandbox_type=SandboxType.LOCAL, actor=actor)
@@ -162,9 +162,9 @@ def create_sandbox_env_var(
162
162
  sandbox_config_id: str,
163
163
  env_var_create: SandboxEnvironmentVariableCreate,
164
164
  server: SyncServer = Depends(get_letta_server),
165
- user_id: str = Depends(get_user_id),
165
+ actor_id: str = Depends(get_user_id),
166
166
  ):
167
- actor = server.user_manager.get_user_or_default(user_id=user_id)
167
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
168
168
  return server.sandbox_config_manager.create_sandbox_env_var(env_var_create, sandbox_config_id, actor)
169
169
 
170
170
 
@@ -173,9 +173,9 @@ def update_sandbox_env_var(
173
173
  env_var_id: str,
174
174
  env_var_update: SandboxEnvironmentVariableUpdate,
175
175
  server: SyncServer = Depends(get_letta_server),
176
- user_id: str = Depends(get_user_id),
176
+ actor_id: str = Depends(get_user_id),
177
177
  ):
178
- actor = server.user_manager.get_user_or_default(user_id=user_id)
178
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
179
179
  return server.sandbox_config_manager.update_sandbox_env_var(env_var_id, env_var_update, actor)
180
180
 
181
181
 
@@ -183,9 +183,9 @@ def update_sandbox_env_var(
183
183
  def delete_sandbox_env_var(
184
184
  env_var_id: str,
185
185
  server: SyncServer = Depends(get_letta_server),
186
- user_id: str = Depends(get_user_id),
186
+ actor_id: str = Depends(get_user_id),
187
187
  ):
188
- actor = server.user_manager.get_user_or_default(user_id=user_id)
188
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
189
189
  server.sandbox_config_manager.delete_sandbox_env_var(env_var_id, actor)
190
190
 
191
191
 
@@ -195,7 +195,7 @@ def list_sandbox_env_vars(
195
195
  limit: int = Query(1000, description="Number of results to return"),
196
196
  after: Optional[str] = Query(None, description="Pagination cursor to fetch the next set of results"),
197
197
  server: SyncServer = Depends(get_letta_server),
198
- user_id: str = Depends(get_user_id),
198
+ actor_id: str = Depends(get_user_id),
199
199
  ):
200
- actor = server.user_manager.get_user_or_default(user_id=user_id)
200
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
201
201
  return server.sandbox_config_manager.list_sandbox_env_vars(sandbox_config_id, actor, limit=limit, after=after)
@@ -23,12 +23,12 @@ router = APIRouter(prefix="/sources", tags=["sources"])
23
23
  def retrieve_source(
24
24
  source_id: str,
25
25
  server: "SyncServer" = Depends(get_letta_server),
26
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
26
+ actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
27
27
  ):
28
28
  """
29
29
  Get all sources
30
30
  """
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
  source = server.source_manager.get_source_by_id(source_id=source_id, actor=actor)
34
34
  if not source:
@@ -40,12 +40,12 @@ def retrieve_source(
40
40
  def get_source_id_by_name(
41
41
  source_name: str,
42
42
  server: "SyncServer" = Depends(get_letta_server),
43
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
43
+ actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
44
44
  ):
45
45
  """
46
46
  Get a source by name
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
 
50
50
  source = server.source_manager.get_source_by_name(source_name=source_name, actor=actor)
51
51
  if not source:
@@ -56,12 +56,12 @@ def get_source_id_by_name(
56
56
  @router.get("/", response_model=List[Source], operation_id="list_sources")
57
57
  def list_sources(
58
58
  server: "SyncServer" = Depends(get_letta_server),
59
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
59
+ actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
60
60
  ):
61
61
  """
62
62
  List all data sources created by a user.
63
63
  """
64
- actor = server.user_manager.get_user_or_default(user_id=user_id)
64
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
65
65
 
66
66
  return server.list_all_sources(actor=actor)
67
67
 
@@ -70,12 +70,12 @@ def list_sources(
70
70
  def create_source(
71
71
  source_create: SourceCreate,
72
72
  server: "SyncServer" = Depends(get_letta_server),
73
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
73
+ actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
74
74
  ):
75
75
  """
76
76
  Create a new data source.
77
77
  """
78
- actor = server.user_manager.get_user_or_default(user_id=user_id)
78
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
79
79
  source = Source(**source_create.model_dump())
80
80
 
81
81
  return server.source_manager.create_source(source=source, actor=actor)
@@ -86,12 +86,12 @@ def modify_source(
86
86
  source_id: str,
87
87
  source: SourceUpdate,
88
88
  server: "SyncServer" = Depends(get_letta_server),
89
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
89
+ actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
90
90
  ):
91
91
  """
92
92
  Update the name or documentation of an existing data source.
93
93
  """
94
- actor = server.user_manager.get_user_or_default(user_id=user_id)
94
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
95
95
  if not server.source_manager.get_source_by_id(source_id=source_id, actor=actor):
96
96
  raise HTTPException(status_code=404, detail=f"Source with id={source_id} does not exist.")
97
97
  return server.source_manager.update_source(source_id=source_id, source_update=source, actor=actor)
@@ -101,12 +101,12 @@ def modify_source(
101
101
  def delete_source(
102
102
  source_id: str,
103
103
  server: "SyncServer" = Depends(get_letta_server),
104
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
104
+ actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
105
105
  ):
106
106
  """
107
107
  Delete a data source.
108
108
  """
109
- actor = server.user_manager.get_user_or_default(user_id=user_id)
109
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
110
110
 
111
111
  server.delete_source(source_id=source_id, actor=actor)
112
112
 
@@ -117,12 +117,12 @@ def upload_file_to_source(
117
117
  source_id: str,
118
118
  background_tasks: BackgroundTasks,
119
119
  server: "SyncServer" = Depends(get_letta_server),
120
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
120
+ actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
121
121
  ):
122
122
  """
123
123
  Upload a file to a data source.
124
124
  """
125
- actor = server.user_manager.get_user_or_default(user_id=user_id)
125
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
126
126
 
127
127
  source = server.source_manager.get_source_by_id(source_id=source_id, actor=actor)
128
128
  assert source is not None, f"Source with id={source_id} not found."
@@ -151,12 +151,12 @@ def upload_file_to_source(
151
151
  def list_source_passages(
152
152
  source_id: str,
153
153
  server: SyncServer = Depends(get_letta_server),
154
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
154
+ actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
155
155
  ):
156
156
  """
157
157
  List all passages associated with a data source.
158
158
  """
159
- actor = server.user_manager.get_user_or_default(user_id=user_id)
159
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
160
160
  passages = server.list_data_source_passages(user_id=actor.id, source_id=source_id)
161
161
  return passages
162
162
 
@@ -167,12 +167,12 @@ def list_source_files(
167
167
  limit: int = Query(1000, description="Number of files to return"),
168
168
  after: Optional[str] = Query(None, description="Pagination cursor to fetch the next set of results"),
169
169
  server: "SyncServer" = Depends(get_letta_server),
170
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
170
+ actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
171
171
  ):
172
172
  """
173
173
  List paginated files associated with a data source.
174
174
  """
175
- actor = server.user_manager.get_user_or_default(user_id=user_id)
175
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
176
176
  return server.source_manager.list_files(source_id=source_id, limit=limit, after=after, actor=actor)
177
177
 
178
178
 
@@ -183,12 +183,12 @@ def delete_file_from_source(
183
183
  source_id: str,
184
184
  file_id: str,
185
185
  server: "SyncServer" = Depends(get_letta_server),
186
- user_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
186
+ actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
187
187
  ):
188
188
  """
189
189
  Delete a data source.
190
190
  """
191
- actor = server.user_manager.get_user_or_default(user_id=user_id)
191
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
192
192
 
193
193
  deleted_file = server.source_manager.delete_file(file_id=file_id, actor=actor)
194
194
  if deleted_file is None:
@@ -21,13 +21,13 @@ def list_steps(
21
21
  end_date: Optional[str] = Query(None, description='Return steps before this ISO datetime (e.g. "2025-01-29T15:01:19-08:00")'),
22
22
  model: Optional[str] = Query(None, description="Filter by the name of the model used for the step"),
23
23
  server: SyncServer = Depends(get_letta_server),
24
- user_id: Optional[str] = Header(None, alias="user_id"),
24
+ actor_id: Optional[str] = Header(None, alias="user_id"),
25
25
  ):
26
26
  """
27
27
  List steps with optional pagination and date filters.
28
28
  Dates should be provided in ISO 8601 format (e.g. 2025-01-29T15:01:19-08:00)
29
29
  """
30
- actor = server.user_manager.get_user_or_default(user_id=user_id)
30
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
31
31
 
32
32
  # Convert ISO strings to datetime objects if provided
33
33
  start_dt = datetime.fromisoformat(start_date) if start_date else None
@@ -48,14 +48,15 @@ def list_steps(
48
48
  @router.get("/{step_id}", response_model=Step, operation_id="retrieve_step")
49
49
  def retrieve_step(
50
50
  step_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 a step by ID.
56
56
  """
57
57
  try:
58
- return server.step_manager.get_step(step_id=step_id)
58
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
59
+ return server.step_manager.get_step(step_id=step_id, actor=actor)
59
60
  except NoResultFound:
60
61
  raise HTTPException(status_code=404, detail="Step not found")
61
62
 
@@ -64,15 +65,15 @@ def retrieve_step(
64
65
  def update_step_transaction_id(
65
66
  step_id: str,
66
67
  transaction_id: str,
67
- user_id: Optional[str] = Header(None, alias="user_id"),
68
+ actor_id: Optional[str] = Header(None, alias="user_id"),
68
69
  server: SyncServer = Depends(get_letta_server),
69
70
  ):
70
71
  """
71
72
  Update the transaction ID for a step.
72
73
  """
73
- 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)
74
75
 
75
76
  try:
76
- return server.step_manager.update_step_transaction_id(actor, step_id=step_id, transaction_id=transaction_id)
77
+ return server.step_manager.update_step_transaction_id(actor=actor, step_id=step_id, transaction_id=transaction_id)
77
78
  except NoResultFound:
78
79
  raise HTTPException(status_code=404, detail="Step not found")
@@ -17,11 +17,11 @@ def list_tags(
17
17
  limit: Optional[int] = Query(50),
18
18
  server: "SyncServer" = Depends(get_letta_server),
19
19
  query_text: Optional[str] = Query(None),
20
- user_id: Optional[str] = Header(None, alias="user_id"),
20
+ actor_id: Optional[str] = Header(None, alias="user_id"),
21
21
  ):
22
22
  """
23
23
  Get a list of all tags in the database
24
24
  """
25
- actor = server.user_manager.get_user_or_default(user_id=user_id)
25
+ actor = server.user_manager.get_user_or_default(user_id=actor_id)
26
26
  tags = server.agent_manager.list_tags(actor=actor, after=after, limit=limit, query_text=query_text)
27
27
  return tags