letta-client 1.0.0a11__py3-none-any.whl → 1.0.0a13__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 +23 -0
- letta_client/_streaming.py +4 -6
- letta_client/_version.py +1 -1
- letta_client/resources/__init__.py +14 -0
- letta_client/resources/agents/agents.py +0 -8
- letta_client/resources/groups/groups.py +1 -17
- letta_client/resources/groups/messages.py +8 -2
- letta_client/resources/identities/identities.py +1 -17
- 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/messages.py +8 -2
- letta_client/resources/steps/steps.py +1 -9
- letta_client/resources/tools.py +4 -4
- letta_client/types/__init__.py +6 -0
- letta_client/types/agent_create_params.py +1 -5
- letta_client/types/group_create_params.py +1 -5
- letta_client/types/group_modify_params.py +1 -5
- letta_client/types/identity_create_params.py +1 -5
- 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/step_list_params.py +1 -5
- letta_client/types/tool.py +4 -4
- {letta_client-1.0.0a11.dist-info → letta_client-1.0.0a13.dist-info}/METADATA +1 -1
- {letta_client-1.0.0a11.dist-info → letta_client-1.0.0a13.dist-info}/RECORD +38 -23
- {letta_client-1.0.0a11.dist-info → letta_client-1.0.0a13.dist-info}/WHEEL +0 -0
- {letta_client-1.0.0a11.dist-info → letta_client-1.0.0a13.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
|
+
)
|
|
@@ -17,10 +17,12 @@ from ..._response import (
|
|
|
17
17
|
async_to_raw_response_wrapper,
|
|
18
18
|
async_to_streamed_response_wrapper,
|
|
19
19
|
)
|
|
20
|
+
from ..._streaming import Stream, AsyncStream
|
|
20
21
|
from ...pagination import SyncArrayPage, AsyncArrayPage
|
|
21
22
|
from ...types.runs import message_list_params, message_stream_params
|
|
22
23
|
from ..._base_client import AsyncPaginator, make_request_options
|
|
23
24
|
from ...types.agents.letta_message_union import LettaMessageUnion
|
|
25
|
+
from ...types.agents.letta_streaming_response import LettaStreamingResponse
|
|
24
26
|
|
|
25
27
|
__all__ = ["MessagesResource", "AsyncMessagesResource"]
|
|
26
28
|
|
|
@@ -124,7 +126,7 @@ class MessagesResource(SyncAPIResource):
|
|
|
124
126
|
extra_query: Query | None = None,
|
|
125
127
|
extra_body: Body | None = None,
|
|
126
128
|
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
127
|
-
) ->
|
|
129
|
+
) -> Stream[LettaStreamingResponse]:
|
|
128
130
|
"""
|
|
129
131
|
Retrieve Stream
|
|
130
132
|
|
|
@@ -164,6 +166,8 @@ class MessagesResource(SyncAPIResource):
|
|
|
164
166
|
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
165
167
|
),
|
|
166
168
|
cast_to=object,
|
|
169
|
+
stream=True,
|
|
170
|
+
stream_cls=Stream[LettaStreamingResponse],
|
|
167
171
|
)
|
|
168
172
|
|
|
169
173
|
|
|
@@ -266,7 +270,7 @@ class AsyncMessagesResource(AsyncAPIResource):
|
|
|
266
270
|
extra_query: Query | None = None,
|
|
267
271
|
extra_body: Body | None = None,
|
|
268
272
|
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
269
|
-
) ->
|
|
273
|
+
) -> AsyncStream[LettaStreamingResponse]:
|
|
270
274
|
"""
|
|
271
275
|
Retrieve Stream
|
|
272
276
|
|
|
@@ -306,6 +310,8 @@ class AsyncMessagesResource(AsyncAPIResource):
|
|
|
306
310
|
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
307
311
|
),
|
|
308
312
|
cast_to=object,
|
|
313
|
+
stream=True,
|
|
314
|
+
stream_cls=AsyncStream[LettaStreamingResponse],
|
|
309
315
|
)
|
|
310
316
|
|
|
311
317
|
|
|
@@ -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],
|
letta_client/resources/tools.py
CHANGED
|
@@ -2,10 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import typing
|
|
6
|
+
import inspect
|
|
5
7
|
from typing import Dict, Iterable, Optional
|
|
8
|
+
from textwrap import dedent
|
|
6
9
|
from typing_extensions import Literal
|
|
7
10
|
|
|
8
11
|
import httpx
|
|
12
|
+
from pydantic import BaseModel
|
|
9
13
|
|
|
10
14
|
from ..types import tool_list_params, tool_count_params, tool_create_params, tool_modify_params, tool_upsert_params
|
|
11
15
|
from .._types import Body, Omit, Query, Headers, NotGiven, SequenceNotStr, omit, not_given
|
|
@@ -25,10 +29,6 @@ from ..types.tool_count_response import ToolCountResponse
|
|
|
25
29
|
from ..types.npm_requirement_param import NpmRequirementParam
|
|
26
30
|
from ..types.pip_requirement_param import PipRequirementParam
|
|
27
31
|
from ..types.tool_upsert_base_tools_response import ToolUpsertBaseToolsResponse
|
|
28
|
-
import typing
|
|
29
|
-
from pydantic import BaseModel
|
|
30
|
-
from textwrap import dedent
|
|
31
|
-
import inspect
|
|
32
32
|
|
|
33
33
|
__all__ = ["ToolsResource", "AsyncToolsResource"]
|
|
34
34
|
|