letta-client 1.0.0a11__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 +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/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/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.0a12.dist-info}/METADATA +1 -1
- {letta_client-1.0.0a11.dist-info → letta_client-1.0.0a12.dist-info}/RECORD +36 -21
- {letta_client-1.0.0a11.dist-info → letta_client-1.0.0a12.dist-info}/WHEEL +0 -0
- {letta_client-1.0.0a11.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 .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
|
|
letta_client/types/__init__.py
CHANGED
|
@@ -94,18 +94,24 @@ from .sleeptime_manager_param import SleeptimeManagerParam as SleeptimeManagerPa
|
|
|
94
94
|
from .agent_export_file_params import AgentExportFileParams as AgentExportFileParams
|
|
95
95
|
from .agent_import_file_params import AgentImportFileParams as AgentImportFileParams
|
|
96
96
|
from .continue_tool_rule_param import ContinueToolRuleParam as ContinueToolRuleParam
|
|
97
|
+
from .mcp_server_create_params import McpServerCreateParams as McpServerCreateParams
|
|
98
|
+
from .mcp_server_list_response import McpServerListResponse as McpServerListResponse
|
|
99
|
+
from .mcp_server_modify_params import McpServerModifyParams as McpServerModifyParams
|
|
97
100
|
from .supervisor_manager_param import SupervisorManagerParam as SupervisorManagerParam
|
|
98
101
|
from .terminal_tool_rule_param import TerminalToolRuleParam as TerminalToolRuleParam
|
|
99
102
|
from .round_robin_manager_param import RoundRobinManagerParam as RoundRobinManagerParam
|
|
100
103
|
from .agent_environment_variable import AgentEnvironmentVariable as AgentEnvironmentVariable
|
|
101
104
|
from .agent_export_file_response import AgentExportFileResponse as AgentExportFileResponse
|
|
102
105
|
from .agent_import_file_response import AgentImportFileResponse as AgentImportFileResponse
|
|
106
|
+
from .mcp_server_create_response import McpServerCreateResponse as McpServerCreateResponse
|
|
107
|
+
from .mcp_server_modify_response import McpServerModifyResponse as McpServerModifyResponse
|
|
103
108
|
from .text_response_format_param import TextResponseFormatParam as TextResponseFormatParam
|
|
104
109
|
from .conditional_tool_rule_param import ConditionalToolRuleParam as ConditionalToolRuleParam
|
|
105
110
|
from .json_object_response_format import JsonObjectResponseFormat as JsonObjectResponseFormat
|
|
106
111
|
from .json_schema_response_format import JsonSchemaResponseFormat as JsonSchemaResponseFormat
|
|
107
112
|
from .requires_approval_tool_rule import RequiresApprovalToolRule as RequiresApprovalToolRule
|
|
108
113
|
from .max_count_per_step_tool_rule import MaxCountPerStepToolRule as MaxCountPerStepToolRule
|
|
114
|
+
from .mcp_server_retrieve_response import McpServerRetrieveResponse as McpServerRetrieveResponse
|
|
109
115
|
from .voice_sleeptime_manager_param import VoiceSleeptimeManagerParam as VoiceSleeptimeManagerParam
|
|
110
116
|
from .required_before_exit_tool_rule import RequiredBeforeExitToolRule as RequiredBeforeExitToolRule
|
|
111
117
|
from .tool_upsert_base_tools_response import ToolUpsertBaseToolsResponse as ToolUpsertBaseToolsResponse
|
|
@@ -3,10 +3,9 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
from typing import Dict, Union, Iterable, Optional
|
|
6
|
-
from typing_extensions import
|
|
6
|
+
from typing_extensions import TypeAlias, TypedDict
|
|
7
7
|
|
|
8
8
|
from .._types import SequenceNotStr
|
|
9
|
-
from .._utils import PropertyInfo
|
|
10
9
|
from .agent_type import AgentType
|
|
11
10
|
from .llm_config_param import LlmConfigParam
|
|
12
11
|
from .create_block_param import CreateBlockParam
|
|
@@ -199,9 +198,6 @@ class AgentCreateParams(TypedDict, total=False):
|
|
|
199
198
|
tools: Optional[SequenceNotStr[str]]
|
|
200
199
|
"""The tools used by the agent."""
|
|
201
200
|
|
|
202
|
-
x_project: Annotated[str, PropertyInfo(alias="X-Project")]
|
|
203
|
-
"""The project slug to associate with the agent (cloud only)."""
|
|
204
|
-
|
|
205
201
|
|
|
206
202
|
ResponseFormat: TypeAlias = Union[TextResponseFormatParam, JsonSchemaResponseFormatParam, JsonObjectResponseFormatParam]
|
|
207
203
|
|