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.
- 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.dev20250225104119.dist-info → letta_nightly-0.6.33.dev20250226015402.dist-info}/METADATA +1 -1
- {letta_nightly-0.6.32.dev20250225104119.dist-info → letta_nightly-0.6.33.dev20250226015402.dist-info}/RECORD +36 -35
- {letta_nightly-0.6.32.dev20250225104119.dist-info → letta_nightly-0.6.33.dev20250226015402.dist-info}/LICENSE +0 -0
- {letta_nightly-0.6.32.dev20250225104119.dist-info → letta_nightly-0.6.33.dev20250226015402.dist-info}/WHEEL +0 -0
- {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
|
-
|
|
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=
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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=
|
|
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
|
-
|
|
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=
|
|
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
|
-
|
|
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=
|
|
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
|
-
|
|
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=
|
|
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
|
-
|
|
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=
|
|
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
|
-
|
|
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=
|
|
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
|
-
|
|
28
|
+
actor_id: str = Depends(get_user_id),
|
|
29
29
|
):
|
|
30
|
-
actor = server.user_manager.get_user_or_default(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
|
-
|
|
38
|
+
actor_id: str = Depends(get_user_id),
|
|
39
39
|
):
|
|
40
|
-
actor = server.user_manager.get_user_or_default(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
|
-
|
|
47
|
+
actor_id: str = Depends(get_user_id),
|
|
48
48
|
):
|
|
49
|
-
actor = server.user_manager.get_user_or_default(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
|
-
|
|
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=
|
|
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
|
-
|
|
86
|
+
actor_id: str = Depends(get_user_id),
|
|
87
87
|
):
|
|
88
|
-
actor = server.user_manager.get_user_or_default(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
|
-
|
|
96
|
+
actor_id: str = Depends(get_user_id),
|
|
97
97
|
):
|
|
98
|
-
actor = server.user_manager.get_user_or_default(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
|
-
|
|
108
|
+
actor_id: str = Depends(get_user_id),
|
|
109
109
|
):
|
|
110
|
-
actor = server.user_manager.get_user_or_default(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
|
-
|
|
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=
|
|
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
|
-
|
|
165
|
+
actor_id: str = Depends(get_user_id),
|
|
166
166
|
):
|
|
167
|
-
actor = server.user_manager.get_user_or_default(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
|
-
|
|
176
|
+
actor_id: str = Depends(get_user_id),
|
|
177
177
|
):
|
|
178
|
-
actor = server.user_manager.get_user_or_default(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
|
-
|
|
186
|
+
actor_id: str = Depends(get_user_id),
|
|
187
187
|
):
|
|
188
|
-
actor = server.user_manager.get_user_or_default(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
|
-
|
|
198
|
+
actor_id: str = Depends(get_user_id),
|
|
199
199
|
):
|
|
200
|
-
actor = server.user_manager.get_user_or_default(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
|
-
|
|
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=
|
|
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
|
-
|
|
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=
|
|
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
|
-
|
|
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=
|
|
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
|
-
|
|
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=
|
|
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
|
-
|
|
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=
|
|
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
|
-
|
|
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=
|
|
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
|
-
|
|
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=
|
|
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
|
-
|
|
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=
|
|
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
|
-
|
|
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=
|
|
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
|
-
|
|
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=
|
|
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
|
-
|
|
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=
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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=
|
|
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
|
-
|
|
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=
|
|
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
|