letta-client 1.0.0a10__py3-none-any.whl → 1.0.0a12__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-client might be problematic. Click here for more details.
- letta_client/_client.py +28 -1
- letta_client/_streaming.py +44 -8
- letta_client/_version.py +1 -1
- letta_client/resources/__init__.py +14 -0
- letta_client/resources/agents/agents.py +0 -8
- letta_client/resources/agents/blocks.py +15 -17
- letta_client/resources/agents/files.py +10 -13
- letta_client/resources/agents/folders.py +10 -13
- letta_client/resources/agents/messages.py +14 -4
- letta_client/resources/agents/tools.py +10 -13
- letta_client/resources/archives.py +10 -12
- letta_client/resources/batches/batches.py +10 -12
- letta_client/resources/batches/messages.py +11 -14
- letta_client/resources/blocks/blocks.py +19 -22
- letta_client/resources/folders/agents.py +10 -13
- letta_client/resources/folders/files.py +9 -12
- letta_client/resources/folders/folders.py +10 -12
- letta_client/resources/groups/groups.py +1 -17
- letta_client/resources/identities/blocks.py +7 -7
- letta_client/resources/identities/identities.py +11 -29
- letta_client/resources/mcp_servers/__init__.py +47 -0
- letta_client/resources/mcp_servers/mcp_servers.py +1165 -0
- letta_client/resources/mcp_servers/refresh.py +192 -0
- letta_client/resources/mcp_servers/tools.py +351 -0
- letta_client/resources/runs/runs.py +11 -13
- letta_client/resources/steps/steps.py +1 -9
- letta_client/resources/tags.py +10 -13
- letta_client/resources/tools.py +14 -16
- letta_client/types/__init__.py +13 -4
- letta_client/types/agent_create_params.py +1 -5
- letta_client/types/agents/__init__.py +2 -3
- letta_client/types/agents/file_list_response.py +14 -3
- letta_client/types/agents/folder_list_response.py +7 -3
- letta_client/types/agents/letta_streaming_response.py +70 -0
- letta_client/types/agents/tool_list_response.py +10 -0
- letta_client/types/archive_list_response.py +10 -0
- letta_client/types/batch_list_response.py +10 -0
- letta_client/types/batches/__init__.py +1 -0
- letta_client/types/batches/message_list_response.py +12 -0
- letta_client/types/{block_list_response.py → block_response.py} +5 -5
- letta_client/types/folder_list_response.py +10 -0
- letta_client/types/folders/agent_list_response.py +2 -1
- letta_client/types/folders/file_list_response.py +7 -4
- letta_client/types/group_create_params.py +1 -5
- letta_client/types/group_modify_params.py +1 -5
- letta_client/types/identities/__init__.py +0 -1
- letta_client/types/identity_create_params.py +1 -5
- letta_client/types/identity_list_response.py +10 -0
- letta_client/types/identity_upsert_params.py +1 -5
- letta_client/types/mcp_server_create_params.py +67 -0
- letta_client/types/mcp_server_create_response.py +74 -0
- letta_client/types/mcp_server_list_response.py +86 -0
- letta_client/types/mcp_server_modify_params.py +76 -0
- letta_client/types/mcp_server_modify_response.py +74 -0
- letta_client/types/mcp_server_retrieve_response.py +74 -0
- letta_client/types/mcp_servers/__init__.py +8 -0
- letta_client/types/mcp_servers/refresh_trigger_params.py +12 -0
- letta_client/types/mcp_servers/tool_list_response.py +10 -0
- letta_client/types/mcp_servers/tool_run_params.py +15 -0
- letta_client/types/mcp_servers/tool_run_response.py +43 -0
- letta_client/types/run_list_response.py +10 -0
- letta_client/types/step_list_params.py +1 -5
- letta_client/types/tag_list_response.py +2 -1
- letta_client/types/tool.py +28 -28
- letta_client/types/tool_list_response.py +10 -0
- {letta_client-1.0.0a10.dist-info → letta_client-1.0.0a12.dist-info}/METADATA +1 -1
- {letta_client-1.0.0a10.dist-info → letta_client-1.0.0a12.dist-info}/RECORD +69 -52
- letta_client/types/agents/block_list_response.py +0 -63
- letta_client/types/agents/block_modify_response.py +0 -63
- letta_client/types/agents/block_retrieve_response.py +0 -63
- letta_client/types/block_create_response.py +0 -63
- letta_client/types/block_modify_response.py +0 -63
- letta_client/types/block_retrieve_response.py +0 -63
- letta_client/types/identities/block_list_response.py +0 -63
- {letta_client-1.0.0a10.dist-info → letta_client-1.0.0a12.dist-info}/WHEEL +0 -0
- {letta_client-1.0.0a10.dist-info → letta_client-1.0.0a12.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Optional
|
|
6
|
+
|
|
7
|
+
import httpx
|
|
8
|
+
|
|
9
|
+
from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
|
|
10
|
+
from ..._utils import maybe_transform, async_maybe_transform
|
|
11
|
+
from ..._compat import cached_property
|
|
12
|
+
from ..._resource import SyncAPIResource, AsyncAPIResource
|
|
13
|
+
from ..._response import (
|
|
14
|
+
to_raw_response_wrapper,
|
|
15
|
+
to_streamed_response_wrapper,
|
|
16
|
+
async_to_raw_response_wrapper,
|
|
17
|
+
async_to_streamed_response_wrapper,
|
|
18
|
+
)
|
|
19
|
+
from ..._base_client import make_request_options
|
|
20
|
+
from ...types.mcp_servers import refresh_trigger_params
|
|
21
|
+
|
|
22
|
+
__all__ = ["RefreshResource", "AsyncRefreshResource"]
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class RefreshResource(SyncAPIResource):
|
|
26
|
+
@cached_property
|
|
27
|
+
def with_raw_response(self) -> RefreshResourceWithRawResponse:
|
|
28
|
+
"""
|
|
29
|
+
This property can be used as a prefix for any HTTP method call to return
|
|
30
|
+
the raw response object instead of the parsed content.
|
|
31
|
+
|
|
32
|
+
For more information, see https://www.github.com/letta-ai/letta-python#accessing-raw-response-data-eg-headers
|
|
33
|
+
"""
|
|
34
|
+
return RefreshResourceWithRawResponse(self)
|
|
35
|
+
|
|
36
|
+
@cached_property
|
|
37
|
+
def with_streaming_response(self) -> RefreshResourceWithStreamingResponse:
|
|
38
|
+
"""
|
|
39
|
+
An alternative to `.with_raw_response` that doesn't eagerly read the response body.
|
|
40
|
+
|
|
41
|
+
For more information, see https://www.github.com/letta-ai/letta-python#with_streaming_response
|
|
42
|
+
"""
|
|
43
|
+
return RefreshResourceWithStreamingResponse(self)
|
|
44
|
+
|
|
45
|
+
def trigger(
|
|
46
|
+
self,
|
|
47
|
+
mcp_server_id: str,
|
|
48
|
+
*,
|
|
49
|
+
agent_id: Optional[str] | Omit = omit,
|
|
50
|
+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
51
|
+
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
52
|
+
extra_headers: Headers | None = None,
|
|
53
|
+
extra_query: Query | None = None,
|
|
54
|
+
extra_body: Body | None = None,
|
|
55
|
+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
56
|
+
) -> object:
|
|
57
|
+
"""Refresh tools for an MCP server by:
|
|
58
|
+
|
|
59
|
+
1.
|
|
60
|
+
|
|
61
|
+
Fetching current tools from the MCP server
|
|
62
|
+
2. Deleting tools that no longer exist on the server
|
|
63
|
+
3. Updating schemas for existing tools
|
|
64
|
+
4. Adding new tools from the server
|
|
65
|
+
|
|
66
|
+
Returns a summary of changes made.
|
|
67
|
+
|
|
68
|
+
Args:
|
|
69
|
+
extra_headers: Send extra headers
|
|
70
|
+
|
|
71
|
+
extra_query: Add additional query parameters to the request
|
|
72
|
+
|
|
73
|
+
extra_body: Add additional JSON properties to the request
|
|
74
|
+
|
|
75
|
+
timeout: Override the client-level default timeout for this request, in seconds
|
|
76
|
+
"""
|
|
77
|
+
if not mcp_server_id:
|
|
78
|
+
raise ValueError(f"Expected a non-empty value for `mcp_server_id` but received {mcp_server_id!r}")
|
|
79
|
+
return self._patch(
|
|
80
|
+
f"/v1/mcp-servers/{mcp_server_id}/refresh",
|
|
81
|
+
options=make_request_options(
|
|
82
|
+
extra_headers=extra_headers,
|
|
83
|
+
extra_query=extra_query,
|
|
84
|
+
extra_body=extra_body,
|
|
85
|
+
timeout=timeout,
|
|
86
|
+
query=maybe_transform({"agent_id": agent_id}, refresh_trigger_params.RefreshTriggerParams),
|
|
87
|
+
),
|
|
88
|
+
cast_to=object,
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
class AsyncRefreshResource(AsyncAPIResource):
|
|
93
|
+
@cached_property
|
|
94
|
+
def with_raw_response(self) -> AsyncRefreshResourceWithRawResponse:
|
|
95
|
+
"""
|
|
96
|
+
This property can be used as a prefix for any HTTP method call to return
|
|
97
|
+
the raw response object instead of the parsed content.
|
|
98
|
+
|
|
99
|
+
For more information, see https://www.github.com/letta-ai/letta-python#accessing-raw-response-data-eg-headers
|
|
100
|
+
"""
|
|
101
|
+
return AsyncRefreshResourceWithRawResponse(self)
|
|
102
|
+
|
|
103
|
+
@cached_property
|
|
104
|
+
def with_streaming_response(self) -> AsyncRefreshResourceWithStreamingResponse:
|
|
105
|
+
"""
|
|
106
|
+
An alternative to `.with_raw_response` that doesn't eagerly read the response body.
|
|
107
|
+
|
|
108
|
+
For more information, see https://www.github.com/letta-ai/letta-python#with_streaming_response
|
|
109
|
+
"""
|
|
110
|
+
return AsyncRefreshResourceWithStreamingResponse(self)
|
|
111
|
+
|
|
112
|
+
async def trigger(
|
|
113
|
+
self,
|
|
114
|
+
mcp_server_id: str,
|
|
115
|
+
*,
|
|
116
|
+
agent_id: Optional[str] | Omit = omit,
|
|
117
|
+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
118
|
+
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
119
|
+
extra_headers: Headers | None = None,
|
|
120
|
+
extra_query: Query | None = None,
|
|
121
|
+
extra_body: Body | None = None,
|
|
122
|
+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
123
|
+
) -> object:
|
|
124
|
+
"""Refresh tools for an MCP server by:
|
|
125
|
+
|
|
126
|
+
1.
|
|
127
|
+
|
|
128
|
+
Fetching current tools from the MCP server
|
|
129
|
+
2. Deleting tools that no longer exist on the server
|
|
130
|
+
3. Updating schemas for existing tools
|
|
131
|
+
4. Adding new tools from the server
|
|
132
|
+
|
|
133
|
+
Returns a summary of changes made.
|
|
134
|
+
|
|
135
|
+
Args:
|
|
136
|
+
extra_headers: Send extra headers
|
|
137
|
+
|
|
138
|
+
extra_query: Add additional query parameters to the request
|
|
139
|
+
|
|
140
|
+
extra_body: Add additional JSON properties to the request
|
|
141
|
+
|
|
142
|
+
timeout: Override the client-level default timeout for this request, in seconds
|
|
143
|
+
"""
|
|
144
|
+
if not mcp_server_id:
|
|
145
|
+
raise ValueError(f"Expected a non-empty value for `mcp_server_id` but received {mcp_server_id!r}")
|
|
146
|
+
return await self._patch(
|
|
147
|
+
f"/v1/mcp-servers/{mcp_server_id}/refresh",
|
|
148
|
+
options=make_request_options(
|
|
149
|
+
extra_headers=extra_headers,
|
|
150
|
+
extra_query=extra_query,
|
|
151
|
+
extra_body=extra_body,
|
|
152
|
+
timeout=timeout,
|
|
153
|
+
query=await async_maybe_transform({"agent_id": agent_id}, refresh_trigger_params.RefreshTriggerParams),
|
|
154
|
+
),
|
|
155
|
+
cast_to=object,
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
class RefreshResourceWithRawResponse:
|
|
160
|
+
def __init__(self, refresh: RefreshResource) -> None:
|
|
161
|
+
self._refresh = refresh
|
|
162
|
+
|
|
163
|
+
self.trigger = to_raw_response_wrapper(
|
|
164
|
+
refresh.trigger,
|
|
165
|
+
)
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
class AsyncRefreshResourceWithRawResponse:
|
|
169
|
+
def __init__(self, refresh: AsyncRefreshResource) -> None:
|
|
170
|
+
self._refresh = refresh
|
|
171
|
+
|
|
172
|
+
self.trigger = async_to_raw_response_wrapper(
|
|
173
|
+
refresh.trigger,
|
|
174
|
+
)
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
class RefreshResourceWithStreamingResponse:
|
|
178
|
+
def __init__(self, refresh: RefreshResource) -> None:
|
|
179
|
+
self._refresh = refresh
|
|
180
|
+
|
|
181
|
+
self.trigger = to_streamed_response_wrapper(
|
|
182
|
+
refresh.trigger,
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
class AsyncRefreshResourceWithStreamingResponse:
|
|
187
|
+
def __init__(self, refresh: AsyncRefreshResource) -> None:
|
|
188
|
+
self._refresh = refresh
|
|
189
|
+
|
|
190
|
+
self.trigger = async_to_streamed_response_wrapper(
|
|
191
|
+
refresh.trigger,
|
|
192
|
+
)
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Dict
|
|
6
|
+
|
|
7
|
+
import httpx
|
|
8
|
+
|
|
9
|
+
from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
|
|
10
|
+
from ..._utils import maybe_transform, async_maybe_transform
|
|
11
|
+
from ..._compat import cached_property
|
|
12
|
+
from ..._resource import SyncAPIResource, AsyncAPIResource
|
|
13
|
+
from ..._response import (
|
|
14
|
+
to_raw_response_wrapper,
|
|
15
|
+
to_streamed_response_wrapper,
|
|
16
|
+
async_to_raw_response_wrapper,
|
|
17
|
+
async_to_streamed_response_wrapper,
|
|
18
|
+
)
|
|
19
|
+
from ...types.tool import Tool
|
|
20
|
+
from ..._base_client import make_request_options
|
|
21
|
+
from ...types.mcp_servers import tool_run_params
|
|
22
|
+
from ...types.mcp_servers.tool_run_response import ToolRunResponse
|
|
23
|
+
from ...types.mcp_servers.tool_list_response import ToolListResponse
|
|
24
|
+
|
|
25
|
+
__all__ = ["ToolsResource", "AsyncToolsResource"]
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class ToolsResource(SyncAPIResource):
|
|
29
|
+
@cached_property
|
|
30
|
+
def with_raw_response(self) -> ToolsResourceWithRawResponse:
|
|
31
|
+
"""
|
|
32
|
+
This property can be used as a prefix for any HTTP method call to return
|
|
33
|
+
the raw response object instead of the parsed content.
|
|
34
|
+
|
|
35
|
+
For more information, see https://www.github.com/letta-ai/letta-python#accessing-raw-response-data-eg-headers
|
|
36
|
+
"""
|
|
37
|
+
return ToolsResourceWithRawResponse(self)
|
|
38
|
+
|
|
39
|
+
@cached_property
|
|
40
|
+
def with_streaming_response(self) -> ToolsResourceWithStreamingResponse:
|
|
41
|
+
"""
|
|
42
|
+
An alternative to `.with_raw_response` that doesn't eagerly read the response body.
|
|
43
|
+
|
|
44
|
+
For more information, see https://www.github.com/letta-ai/letta-python#with_streaming_response
|
|
45
|
+
"""
|
|
46
|
+
return ToolsResourceWithStreamingResponse(self)
|
|
47
|
+
|
|
48
|
+
def retrieve(
|
|
49
|
+
self,
|
|
50
|
+
tool_id: str,
|
|
51
|
+
*,
|
|
52
|
+
mcp_server_id: str,
|
|
53
|
+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
54
|
+
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
55
|
+
extra_headers: Headers | None = None,
|
|
56
|
+
extra_query: Query | None = None,
|
|
57
|
+
extra_body: Body | None = None,
|
|
58
|
+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
59
|
+
) -> Tool:
|
|
60
|
+
"""
|
|
61
|
+
Get a specific MCP tool by its ID
|
|
62
|
+
|
|
63
|
+
Args:
|
|
64
|
+
extra_headers: Send extra headers
|
|
65
|
+
|
|
66
|
+
extra_query: Add additional query parameters to the request
|
|
67
|
+
|
|
68
|
+
extra_body: Add additional JSON properties to the request
|
|
69
|
+
|
|
70
|
+
timeout: Override the client-level default timeout for this request, in seconds
|
|
71
|
+
"""
|
|
72
|
+
if not mcp_server_id:
|
|
73
|
+
raise ValueError(f"Expected a non-empty value for `mcp_server_id` but received {mcp_server_id!r}")
|
|
74
|
+
if not tool_id:
|
|
75
|
+
raise ValueError(f"Expected a non-empty value for `tool_id` but received {tool_id!r}")
|
|
76
|
+
return self._get(
|
|
77
|
+
f"/v1/mcp-servers/{mcp_server_id}/tools/{tool_id}",
|
|
78
|
+
options=make_request_options(
|
|
79
|
+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
80
|
+
),
|
|
81
|
+
cast_to=Tool,
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
def list(
|
|
85
|
+
self,
|
|
86
|
+
mcp_server_id: str,
|
|
87
|
+
*,
|
|
88
|
+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
89
|
+
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
90
|
+
extra_headers: Headers | None = None,
|
|
91
|
+
extra_query: Query | None = None,
|
|
92
|
+
extra_body: Body | None = None,
|
|
93
|
+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
94
|
+
) -> ToolListResponse:
|
|
95
|
+
"""
|
|
96
|
+
Get a list of all tools for a specific MCP server
|
|
97
|
+
|
|
98
|
+
Args:
|
|
99
|
+
extra_headers: Send extra headers
|
|
100
|
+
|
|
101
|
+
extra_query: Add additional query parameters to the request
|
|
102
|
+
|
|
103
|
+
extra_body: Add additional JSON properties to the request
|
|
104
|
+
|
|
105
|
+
timeout: Override the client-level default timeout for this request, in seconds
|
|
106
|
+
"""
|
|
107
|
+
if not mcp_server_id:
|
|
108
|
+
raise ValueError(f"Expected a non-empty value for `mcp_server_id` but received {mcp_server_id!r}")
|
|
109
|
+
return self._get(
|
|
110
|
+
f"/v1/mcp-servers/{mcp_server_id}/tools",
|
|
111
|
+
options=make_request_options(
|
|
112
|
+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
113
|
+
),
|
|
114
|
+
cast_to=ToolListResponse,
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
def run(
|
|
118
|
+
self,
|
|
119
|
+
tool_id: str,
|
|
120
|
+
*,
|
|
121
|
+
mcp_server_id: str,
|
|
122
|
+
args: Dict[str, object] | Omit = omit,
|
|
123
|
+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
124
|
+
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
125
|
+
extra_headers: Headers | None = None,
|
|
126
|
+
extra_query: Query | None = None,
|
|
127
|
+
extra_body: Body | None = None,
|
|
128
|
+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
129
|
+
) -> ToolRunResponse:
|
|
130
|
+
"""
|
|
131
|
+
Execute a specific MCP tool
|
|
132
|
+
|
|
133
|
+
The request body should contain the tool arguments in the MCPToolExecuteRequest
|
|
134
|
+
format.
|
|
135
|
+
|
|
136
|
+
Args:
|
|
137
|
+
args: Arguments to pass to the MCP tool
|
|
138
|
+
|
|
139
|
+
extra_headers: Send extra headers
|
|
140
|
+
|
|
141
|
+
extra_query: Add additional query parameters to the request
|
|
142
|
+
|
|
143
|
+
extra_body: Add additional JSON properties to the request
|
|
144
|
+
|
|
145
|
+
timeout: Override the client-level default timeout for this request, in seconds
|
|
146
|
+
"""
|
|
147
|
+
if not mcp_server_id:
|
|
148
|
+
raise ValueError(f"Expected a non-empty value for `mcp_server_id` but received {mcp_server_id!r}")
|
|
149
|
+
if not tool_id:
|
|
150
|
+
raise ValueError(f"Expected a non-empty value for `tool_id` but received {tool_id!r}")
|
|
151
|
+
return self._post(
|
|
152
|
+
f"/v1/mcp-servers/{mcp_server_id}/tools/{tool_id}/run",
|
|
153
|
+
body=maybe_transform({"args": args}, tool_run_params.ToolRunParams),
|
|
154
|
+
options=make_request_options(
|
|
155
|
+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
156
|
+
),
|
|
157
|
+
cast_to=ToolRunResponse,
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
class AsyncToolsResource(AsyncAPIResource):
|
|
162
|
+
@cached_property
|
|
163
|
+
def with_raw_response(self) -> AsyncToolsResourceWithRawResponse:
|
|
164
|
+
"""
|
|
165
|
+
This property can be used as a prefix for any HTTP method call to return
|
|
166
|
+
the raw response object instead of the parsed content.
|
|
167
|
+
|
|
168
|
+
For more information, see https://www.github.com/letta-ai/letta-python#accessing-raw-response-data-eg-headers
|
|
169
|
+
"""
|
|
170
|
+
return AsyncToolsResourceWithRawResponse(self)
|
|
171
|
+
|
|
172
|
+
@cached_property
|
|
173
|
+
def with_streaming_response(self) -> AsyncToolsResourceWithStreamingResponse:
|
|
174
|
+
"""
|
|
175
|
+
An alternative to `.with_raw_response` that doesn't eagerly read the response body.
|
|
176
|
+
|
|
177
|
+
For more information, see https://www.github.com/letta-ai/letta-python#with_streaming_response
|
|
178
|
+
"""
|
|
179
|
+
return AsyncToolsResourceWithStreamingResponse(self)
|
|
180
|
+
|
|
181
|
+
async def retrieve(
|
|
182
|
+
self,
|
|
183
|
+
tool_id: str,
|
|
184
|
+
*,
|
|
185
|
+
mcp_server_id: str,
|
|
186
|
+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
187
|
+
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
188
|
+
extra_headers: Headers | None = None,
|
|
189
|
+
extra_query: Query | None = None,
|
|
190
|
+
extra_body: Body | None = None,
|
|
191
|
+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
192
|
+
) -> Tool:
|
|
193
|
+
"""
|
|
194
|
+
Get a specific MCP tool by its ID
|
|
195
|
+
|
|
196
|
+
Args:
|
|
197
|
+
extra_headers: Send extra headers
|
|
198
|
+
|
|
199
|
+
extra_query: Add additional query parameters to the request
|
|
200
|
+
|
|
201
|
+
extra_body: Add additional JSON properties to the request
|
|
202
|
+
|
|
203
|
+
timeout: Override the client-level default timeout for this request, in seconds
|
|
204
|
+
"""
|
|
205
|
+
if not mcp_server_id:
|
|
206
|
+
raise ValueError(f"Expected a non-empty value for `mcp_server_id` but received {mcp_server_id!r}")
|
|
207
|
+
if not tool_id:
|
|
208
|
+
raise ValueError(f"Expected a non-empty value for `tool_id` but received {tool_id!r}")
|
|
209
|
+
return await self._get(
|
|
210
|
+
f"/v1/mcp-servers/{mcp_server_id}/tools/{tool_id}",
|
|
211
|
+
options=make_request_options(
|
|
212
|
+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
213
|
+
),
|
|
214
|
+
cast_to=Tool,
|
|
215
|
+
)
|
|
216
|
+
|
|
217
|
+
async def list(
|
|
218
|
+
self,
|
|
219
|
+
mcp_server_id: str,
|
|
220
|
+
*,
|
|
221
|
+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
222
|
+
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
223
|
+
extra_headers: Headers | None = None,
|
|
224
|
+
extra_query: Query | None = None,
|
|
225
|
+
extra_body: Body | None = None,
|
|
226
|
+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
227
|
+
) -> ToolListResponse:
|
|
228
|
+
"""
|
|
229
|
+
Get a list of all tools for a specific MCP server
|
|
230
|
+
|
|
231
|
+
Args:
|
|
232
|
+
extra_headers: Send extra headers
|
|
233
|
+
|
|
234
|
+
extra_query: Add additional query parameters to the request
|
|
235
|
+
|
|
236
|
+
extra_body: Add additional JSON properties to the request
|
|
237
|
+
|
|
238
|
+
timeout: Override the client-level default timeout for this request, in seconds
|
|
239
|
+
"""
|
|
240
|
+
if not mcp_server_id:
|
|
241
|
+
raise ValueError(f"Expected a non-empty value for `mcp_server_id` but received {mcp_server_id!r}")
|
|
242
|
+
return await self._get(
|
|
243
|
+
f"/v1/mcp-servers/{mcp_server_id}/tools",
|
|
244
|
+
options=make_request_options(
|
|
245
|
+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
246
|
+
),
|
|
247
|
+
cast_to=ToolListResponse,
|
|
248
|
+
)
|
|
249
|
+
|
|
250
|
+
async def run(
|
|
251
|
+
self,
|
|
252
|
+
tool_id: str,
|
|
253
|
+
*,
|
|
254
|
+
mcp_server_id: str,
|
|
255
|
+
args: Dict[str, object] | Omit = omit,
|
|
256
|
+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
257
|
+
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
258
|
+
extra_headers: Headers | None = None,
|
|
259
|
+
extra_query: Query | None = None,
|
|
260
|
+
extra_body: Body | None = None,
|
|
261
|
+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
262
|
+
) -> ToolRunResponse:
|
|
263
|
+
"""
|
|
264
|
+
Execute a specific MCP tool
|
|
265
|
+
|
|
266
|
+
The request body should contain the tool arguments in the MCPToolExecuteRequest
|
|
267
|
+
format.
|
|
268
|
+
|
|
269
|
+
Args:
|
|
270
|
+
args: Arguments to pass to the MCP tool
|
|
271
|
+
|
|
272
|
+
extra_headers: Send extra headers
|
|
273
|
+
|
|
274
|
+
extra_query: Add additional query parameters to the request
|
|
275
|
+
|
|
276
|
+
extra_body: Add additional JSON properties to the request
|
|
277
|
+
|
|
278
|
+
timeout: Override the client-level default timeout for this request, in seconds
|
|
279
|
+
"""
|
|
280
|
+
if not mcp_server_id:
|
|
281
|
+
raise ValueError(f"Expected a non-empty value for `mcp_server_id` but received {mcp_server_id!r}")
|
|
282
|
+
if not tool_id:
|
|
283
|
+
raise ValueError(f"Expected a non-empty value for `tool_id` but received {tool_id!r}")
|
|
284
|
+
return await self._post(
|
|
285
|
+
f"/v1/mcp-servers/{mcp_server_id}/tools/{tool_id}/run",
|
|
286
|
+
body=await async_maybe_transform({"args": args}, tool_run_params.ToolRunParams),
|
|
287
|
+
options=make_request_options(
|
|
288
|
+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
289
|
+
),
|
|
290
|
+
cast_to=ToolRunResponse,
|
|
291
|
+
)
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
class ToolsResourceWithRawResponse:
|
|
295
|
+
def __init__(self, tools: ToolsResource) -> None:
|
|
296
|
+
self._tools = tools
|
|
297
|
+
|
|
298
|
+
self.retrieve = to_raw_response_wrapper(
|
|
299
|
+
tools.retrieve,
|
|
300
|
+
)
|
|
301
|
+
self.list = to_raw_response_wrapper(
|
|
302
|
+
tools.list,
|
|
303
|
+
)
|
|
304
|
+
self.run = to_raw_response_wrapper(
|
|
305
|
+
tools.run,
|
|
306
|
+
)
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
class AsyncToolsResourceWithRawResponse:
|
|
310
|
+
def __init__(self, tools: AsyncToolsResource) -> None:
|
|
311
|
+
self._tools = tools
|
|
312
|
+
|
|
313
|
+
self.retrieve = async_to_raw_response_wrapper(
|
|
314
|
+
tools.retrieve,
|
|
315
|
+
)
|
|
316
|
+
self.list = async_to_raw_response_wrapper(
|
|
317
|
+
tools.list,
|
|
318
|
+
)
|
|
319
|
+
self.run = async_to_raw_response_wrapper(
|
|
320
|
+
tools.run,
|
|
321
|
+
)
|
|
322
|
+
|
|
323
|
+
|
|
324
|
+
class ToolsResourceWithStreamingResponse:
|
|
325
|
+
def __init__(self, tools: ToolsResource) -> None:
|
|
326
|
+
self._tools = tools
|
|
327
|
+
|
|
328
|
+
self.retrieve = to_streamed_response_wrapper(
|
|
329
|
+
tools.retrieve,
|
|
330
|
+
)
|
|
331
|
+
self.list = to_streamed_response_wrapper(
|
|
332
|
+
tools.list,
|
|
333
|
+
)
|
|
334
|
+
self.run = to_streamed_response_wrapper(
|
|
335
|
+
tools.run,
|
|
336
|
+
)
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
class AsyncToolsResourceWithStreamingResponse:
|
|
340
|
+
def __init__(self, tools: AsyncToolsResource) -> None:
|
|
341
|
+
self._tools = tools
|
|
342
|
+
|
|
343
|
+
self.retrieve = async_to_streamed_response_wrapper(
|
|
344
|
+
tools.retrieve,
|
|
345
|
+
)
|
|
346
|
+
self.list = async_to_streamed_response_wrapper(
|
|
347
|
+
tools.list,
|
|
348
|
+
)
|
|
349
|
+
self.run = async_to_streamed_response_wrapper(
|
|
350
|
+
tools.run,
|
|
351
|
+
)
|
|
@@ -25,7 +25,7 @@ from .usage import (
|
|
|
25
25
|
)
|
|
26
26
|
from ...types import StopReasonType, run_list_params
|
|
27
27
|
from ..._types import Body, Omit, Query, Headers, NotGiven, SequenceNotStr, omit, not_given
|
|
28
|
-
from ..._utils import maybe_transform
|
|
28
|
+
from ..._utils import maybe_transform, async_maybe_transform
|
|
29
29
|
from .messages import (
|
|
30
30
|
MessagesResource,
|
|
31
31
|
AsyncMessagesResource,
|
|
@@ -42,10 +42,10 @@ from ..._response import (
|
|
|
42
42
|
async_to_raw_response_wrapper,
|
|
43
43
|
async_to_streamed_response_wrapper,
|
|
44
44
|
)
|
|
45
|
-
from ...
|
|
46
|
-
from ..._base_client import AsyncPaginator, make_request_options
|
|
45
|
+
from ..._base_client import make_request_options
|
|
47
46
|
from ...types.agents.run import Run
|
|
48
47
|
from ...types.stop_reason_type import StopReasonType
|
|
48
|
+
from ...types.run_list_response import RunListResponse
|
|
49
49
|
|
|
50
50
|
__all__ = ["RunsResource", "AsyncRunsResource"]
|
|
51
51
|
|
|
@@ -136,7 +136,7 @@ class RunsResource(SyncAPIResource):
|
|
|
136
136
|
extra_query: Query | None = None,
|
|
137
137
|
extra_body: Body | None = None,
|
|
138
138
|
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
139
|
-
) ->
|
|
139
|
+
) -> RunListResponse:
|
|
140
140
|
"""
|
|
141
141
|
List all runs.
|
|
142
142
|
|
|
@@ -178,9 +178,8 @@ class RunsResource(SyncAPIResource):
|
|
|
178
178
|
|
|
179
179
|
timeout: Override the client-level default timeout for this request, in seconds
|
|
180
180
|
"""
|
|
181
|
-
return self.
|
|
181
|
+
return self._get(
|
|
182
182
|
"/v1/runs/",
|
|
183
|
-
page=SyncArrayPage[Run],
|
|
184
183
|
options=make_request_options(
|
|
185
184
|
extra_headers=extra_headers,
|
|
186
185
|
extra_query=extra_query,
|
|
@@ -204,7 +203,7 @@ class RunsResource(SyncAPIResource):
|
|
|
204
203
|
run_list_params.RunListParams,
|
|
205
204
|
),
|
|
206
205
|
),
|
|
207
|
-
|
|
206
|
+
cast_to=RunListResponse,
|
|
208
207
|
)
|
|
209
208
|
|
|
210
209
|
|
|
@@ -273,7 +272,7 @@ class AsyncRunsResource(AsyncAPIResource):
|
|
|
273
272
|
cast_to=Run,
|
|
274
273
|
)
|
|
275
274
|
|
|
276
|
-
def list(
|
|
275
|
+
async def list(
|
|
277
276
|
self,
|
|
278
277
|
*,
|
|
279
278
|
active: bool | Omit = omit,
|
|
@@ -294,7 +293,7 @@ class AsyncRunsResource(AsyncAPIResource):
|
|
|
294
293
|
extra_query: Query | None = None,
|
|
295
294
|
extra_body: Body | None = None,
|
|
296
295
|
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
297
|
-
) ->
|
|
296
|
+
) -> RunListResponse:
|
|
298
297
|
"""
|
|
299
298
|
List all runs.
|
|
300
299
|
|
|
@@ -336,15 +335,14 @@ class AsyncRunsResource(AsyncAPIResource):
|
|
|
336
335
|
|
|
337
336
|
timeout: Override the client-level default timeout for this request, in seconds
|
|
338
337
|
"""
|
|
339
|
-
return self.
|
|
338
|
+
return await self._get(
|
|
340
339
|
"/v1/runs/",
|
|
341
|
-
page=AsyncArrayPage[Run],
|
|
342
340
|
options=make_request_options(
|
|
343
341
|
extra_headers=extra_headers,
|
|
344
342
|
extra_query=extra_query,
|
|
345
343
|
extra_body=extra_body,
|
|
346
344
|
timeout=timeout,
|
|
347
|
-
query=
|
|
345
|
+
query=await async_maybe_transform(
|
|
348
346
|
{
|
|
349
347
|
"active": active,
|
|
350
348
|
"after": after,
|
|
@@ -362,7 +360,7 @@ class AsyncRunsResource(AsyncAPIResource):
|
|
|
362
360
|
run_list_params.RunListParams,
|
|
363
361
|
),
|
|
364
362
|
),
|
|
365
|
-
|
|
363
|
+
cast_to=RunListResponse,
|
|
366
364
|
)
|
|
367
365
|
|
|
368
366
|
|
|
@@ -25,7 +25,7 @@ from .metrics import (
|
|
|
25
25
|
AsyncMetricsResourceWithStreamingResponse,
|
|
26
26
|
)
|
|
27
27
|
from ..._types import Body, Omit, Query, Headers, NotGiven, SequenceNotStr, omit, not_given
|
|
28
|
-
from ..._utils import maybe_transform
|
|
28
|
+
from ..._utils import maybe_transform
|
|
29
29
|
from .feedback import (
|
|
30
30
|
FeedbackResource,
|
|
31
31
|
AsyncFeedbackResource,
|
|
@@ -145,7 +145,6 @@ class StepsResource(SyncAPIResource):
|
|
|
145
145
|
start_date: Optional[str] | Omit = omit,
|
|
146
146
|
tags: Optional[SequenceNotStr[str]] | Omit = omit,
|
|
147
147
|
trace_ids: Optional[SequenceNotStr[str]] | Omit = omit,
|
|
148
|
-
x_project: str | Omit = omit,
|
|
149
148
|
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
150
149
|
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
151
150
|
extra_headers: Headers | None = None,
|
|
@@ -186,8 +185,6 @@ class StepsResource(SyncAPIResource):
|
|
|
186
185
|
|
|
187
186
|
trace_ids: Filter by trace ids returned by the server
|
|
188
187
|
|
|
189
|
-
x_project: Filter by project slug to associate with the group (cloud only).
|
|
190
|
-
|
|
191
188
|
extra_headers: Send extra headers
|
|
192
189
|
|
|
193
190
|
extra_query: Add additional query parameters to the request
|
|
@@ -196,7 +193,6 @@ class StepsResource(SyncAPIResource):
|
|
|
196
193
|
|
|
197
194
|
timeout: Override the client-level default timeout for this request, in seconds
|
|
198
195
|
"""
|
|
199
|
-
extra_headers = {**strip_not_given({"X-Project": x_project}), **(extra_headers or {})}
|
|
200
196
|
return self._get_api_list(
|
|
201
197
|
"/v1/steps/",
|
|
202
198
|
page=SyncArrayPage[Step],
|
|
@@ -317,7 +313,6 @@ class AsyncStepsResource(AsyncAPIResource):
|
|
|
317
313
|
start_date: Optional[str] | Omit = omit,
|
|
318
314
|
tags: Optional[SequenceNotStr[str]] | Omit = omit,
|
|
319
315
|
trace_ids: Optional[SequenceNotStr[str]] | Omit = omit,
|
|
320
|
-
x_project: str | Omit = omit,
|
|
321
316
|
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
322
317
|
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
323
318
|
extra_headers: Headers | None = None,
|
|
@@ -358,8 +353,6 @@ class AsyncStepsResource(AsyncAPIResource):
|
|
|
358
353
|
|
|
359
354
|
trace_ids: Filter by trace ids returned by the server
|
|
360
355
|
|
|
361
|
-
x_project: Filter by project slug to associate with the group (cloud only).
|
|
362
|
-
|
|
363
356
|
extra_headers: Send extra headers
|
|
364
357
|
|
|
365
358
|
extra_query: Add additional query parameters to the request
|
|
@@ -368,7 +361,6 @@ class AsyncStepsResource(AsyncAPIResource):
|
|
|
368
361
|
|
|
369
362
|
timeout: Override the client-level default timeout for this request, in seconds
|
|
370
363
|
"""
|
|
371
|
-
extra_headers = {**strip_not_given({"X-Project": x_project}), **(extra_headers or {})}
|
|
372
364
|
return self._get_api_list(
|
|
373
365
|
"/v1/steps/",
|
|
374
366
|
page=AsyncArrayPage[Step],
|