structifyai 1.177.0__py3-none-any.whl → 1.178.0__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.
structify/_version.py CHANGED
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "structify"
4
- __version__ = "1.177.0" # x-release-please-version
4
+ __version__ = "1.178.0" # x-release-please-version
@@ -48,6 +48,14 @@ from .sandbox import (
48
48
  SandboxResourceWithStreamingResponse,
49
49
  AsyncSandboxResourceWithStreamingResponse,
50
50
  )
51
+ from .connector import (
52
+ ConnectorResource,
53
+ AsyncConnectorResource,
54
+ ConnectorResourceWithRawResponse,
55
+ AsyncConnectorResourceWithRawResponse,
56
+ ConnectorResourceWithStreamingResponse,
57
+ AsyncConnectorResourceWithStreamingResponse,
58
+ )
51
59
  from .chat_templates import (
52
60
  ChatTemplatesResource,
53
61
  AsyncChatTemplatesResource,
@@ -108,6 +116,12 @@ __all__ = [
108
116
  "AsyncChatTemplatesResourceWithRawResponse",
109
117
  "ChatTemplatesResourceWithStreamingResponse",
110
118
  "AsyncChatTemplatesResourceWithStreamingResponse",
119
+ "ConnectorResource",
120
+ "AsyncConnectorResource",
121
+ "ConnectorResourceWithRawResponse",
122
+ "AsyncConnectorResourceWithRawResponse",
123
+ "ConnectorResourceWithStreamingResponse",
124
+ "AsyncConnectorResourceWithStreamingResponse",
111
125
  "AdminResource",
112
126
  "AsyncAdminResource",
113
127
  "AdminResourceWithRawResponse",
@@ -43,6 +43,14 @@ from .sandbox import (
43
43
  AsyncSandboxResourceWithStreamingResponse,
44
44
  )
45
45
  from ..._compat import cached_property
46
+ from .connector import (
47
+ ConnectorResource,
48
+ AsyncConnectorResource,
49
+ ConnectorResourceWithRawResponse,
50
+ AsyncConnectorResourceWithRawResponse,
51
+ ConnectorResourceWithStreamingResponse,
52
+ AsyncConnectorResourceWithStreamingResponse,
53
+ )
46
54
  from ..._resource import SyncAPIResource, AsyncAPIResource
47
55
  from .chat_templates import (
48
56
  ChatTemplatesResource,
@@ -93,6 +101,10 @@ class AdminResource(SyncAPIResource):
93
101
  def chat_templates(self) -> ChatTemplatesResource:
94
102
  return ChatTemplatesResource(self._client)
95
103
 
104
+ @cached_property
105
+ def connector(self) -> ConnectorResource:
106
+ return ConnectorResource(self._client)
107
+
96
108
  @cached_property
97
109
  def with_raw_response(self) -> AdminResourceWithRawResponse:
98
110
  """
@@ -142,6 +154,10 @@ class AsyncAdminResource(AsyncAPIResource):
142
154
  def chat_templates(self) -> AsyncChatTemplatesResource:
143
155
  return AsyncChatTemplatesResource(self._client)
144
156
 
157
+ @cached_property
158
+ def connector(self) -> AsyncConnectorResource:
159
+ return AsyncConnectorResource(self._client)
160
+
145
161
  @cached_property
146
162
  def with_raw_response(self) -> AsyncAdminResourceWithRawResponse:
147
163
  """
@@ -194,6 +210,10 @@ class AdminResourceWithRawResponse:
194
210
  def chat_templates(self) -> ChatTemplatesResourceWithRawResponse:
195
211
  return ChatTemplatesResourceWithRawResponse(self._admin.chat_templates)
196
212
 
213
+ @cached_property
214
+ def connector(self) -> ConnectorResourceWithRawResponse:
215
+ return ConnectorResourceWithRawResponse(self._admin.connector)
216
+
197
217
 
198
218
  class AsyncAdminResourceWithRawResponse:
199
219
  def __init__(self, admin: AsyncAdminResource) -> None:
@@ -227,6 +247,10 @@ class AsyncAdminResourceWithRawResponse:
227
247
  def chat_templates(self) -> AsyncChatTemplatesResourceWithRawResponse:
228
248
  return AsyncChatTemplatesResourceWithRawResponse(self._admin.chat_templates)
229
249
 
250
+ @cached_property
251
+ def connector(self) -> AsyncConnectorResourceWithRawResponse:
252
+ return AsyncConnectorResourceWithRawResponse(self._admin.connector)
253
+
230
254
 
231
255
  class AdminResourceWithStreamingResponse:
232
256
  def __init__(self, admin: AdminResource) -> None:
@@ -260,6 +284,10 @@ class AdminResourceWithStreamingResponse:
260
284
  def chat_templates(self) -> ChatTemplatesResourceWithStreamingResponse:
261
285
  return ChatTemplatesResourceWithStreamingResponse(self._admin.chat_templates)
262
286
 
287
+ @cached_property
288
+ def connector(self) -> ConnectorResourceWithStreamingResponse:
289
+ return ConnectorResourceWithStreamingResponse(self._admin.connector)
290
+
263
291
 
264
292
  class AsyncAdminResourceWithStreamingResponse:
265
293
  def __init__(self, admin: AsyncAdminResource) -> None:
@@ -292,3 +320,7 @@ class AsyncAdminResourceWithStreamingResponse:
292
320
  @cached_property
293
321
  def chat_templates(self) -> AsyncChatTemplatesResourceWithStreamingResponse:
294
322
  return AsyncChatTemplatesResourceWithStreamingResponse(self._admin.chat_templates)
323
+
324
+ @cached_property
325
+ def connector(self) -> AsyncConnectorResourceWithStreamingResponse:
326
+ return AsyncConnectorResourceWithStreamingResponse(self._admin.connector)
@@ -0,0 +1,176 @@
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 Iterable
6
+
7
+ import httpx
8
+
9
+ from ..._types import Body, Query, Headers, NotGiven, 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.admin import connector_clone_params
20
+ from ..._base_client import make_request_options
21
+ from ...types.admin.clone_connectors_response import CloneConnectorsResponse
22
+ from ...types.admin.clone_connector_item_param import CloneConnectorItemParam
23
+
24
+ __all__ = ["ConnectorResource", "AsyncConnectorResource"]
25
+
26
+
27
+ class ConnectorResource(SyncAPIResource):
28
+ @cached_property
29
+ def with_raw_response(self) -> ConnectorResourceWithRawResponse:
30
+ """
31
+ This property can be used as a prefix for any HTTP method call to return
32
+ the raw response object instead of the parsed content.
33
+
34
+ For more information, see https://www.github.com/StructifyAI/structify-python#accessing-raw-response-data-eg-headers
35
+ """
36
+ return ConnectorResourceWithRawResponse(self)
37
+
38
+ @cached_property
39
+ def with_streaming_response(self) -> ConnectorResourceWithStreamingResponse:
40
+ """
41
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
42
+
43
+ For more information, see https://www.github.com/StructifyAI/structify-python#with_streaming_response
44
+ """
45
+ return ConnectorResourceWithStreamingResponse(self)
46
+
47
+ def clone(
48
+ self,
49
+ *,
50
+ connectors: Iterable[CloneConnectorItemParam],
51
+ target_team_id: str,
52
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
53
+ # The extra values given here take precedence over values defined on the client or passed to this method.
54
+ extra_headers: Headers | None = None,
55
+ extra_query: Query | None = None,
56
+ extra_body: Body | None = None,
57
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
58
+ ) -> CloneConnectorsResponse:
59
+ """
60
+ Args:
61
+ extra_headers: Send extra headers
62
+
63
+ extra_query: Add additional query parameters to the request
64
+
65
+ extra_body: Add additional JSON properties to the request
66
+
67
+ timeout: Override the client-level default timeout for this request, in seconds
68
+ """
69
+ return self._post(
70
+ "/admin/connector/clone",
71
+ body=maybe_transform(
72
+ {
73
+ "connectors": connectors,
74
+ "target_team_id": target_team_id,
75
+ },
76
+ connector_clone_params.ConnectorCloneParams,
77
+ ),
78
+ options=make_request_options(
79
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
80
+ ),
81
+ cast_to=CloneConnectorsResponse,
82
+ )
83
+
84
+
85
+ class AsyncConnectorResource(AsyncAPIResource):
86
+ @cached_property
87
+ def with_raw_response(self) -> AsyncConnectorResourceWithRawResponse:
88
+ """
89
+ This property can be used as a prefix for any HTTP method call to return
90
+ the raw response object instead of the parsed content.
91
+
92
+ For more information, see https://www.github.com/StructifyAI/structify-python#accessing-raw-response-data-eg-headers
93
+ """
94
+ return AsyncConnectorResourceWithRawResponse(self)
95
+
96
+ @cached_property
97
+ def with_streaming_response(self) -> AsyncConnectorResourceWithStreamingResponse:
98
+ """
99
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
100
+
101
+ For more information, see https://www.github.com/StructifyAI/structify-python#with_streaming_response
102
+ """
103
+ return AsyncConnectorResourceWithStreamingResponse(self)
104
+
105
+ async def clone(
106
+ self,
107
+ *,
108
+ connectors: Iterable[CloneConnectorItemParam],
109
+ target_team_id: str,
110
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
111
+ # The extra values given here take precedence over values defined on the client or passed to this method.
112
+ extra_headers: Headers | None = None,
113
+ extra_query: Query | None = None,
114
+ extra_body: Body | None = None,
115
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
116
+ ) -> CloneConnectorsResponse:
117
+ """
118
+ Args:
119
+ extra_headers: Send extra headers
120
+
121
+ extra_query: Add additional query parameters to the request
122
+
123
+ extra_body: Add additional JSON properties to the request
124
+
125
+ timeout: Override the client-level default timeout for this request, in seconds
126
+ """
127
+ return await self._post(
128
+ "/admin/connector/clone",
129
+ body=await async_maybe_transform(
130
+ {
131
+ "connectors": connectors,
132
+ "target_team_id": target_team_id,
133
+ },
134
+ connector_clone_params.ConnectorCloneParams,
135
+ ),
136
+ options=make_request_options(
137
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
138
+ ),
139
+ cast_to=CloneConnectorsResponse,
140
+ )
141
+
142
+
143
+ class ConnectorResourceWithRawResponse:
144
+ def __init__(self, connector: ConnectorResource) -> None:
145
+ self._connector = connector
146
+
147
+ self.clone = to_raw_response_wrapper(
148
+ connector.clone,
149
+ )
150
+
151
+
152
+ class AsyncConnectorResourceWithRawResponse:
153
+ def __init__(self, connector: AsyncConnectorResource) -> None:
154
+ self._connector = connector
155
+
156
+ self.clone = async_to_raw_response_wrapper(
157
+ connector.clone,
158
+ )
159
+
160
+
161
+ class ConnectorResourceWithStreamingResponse:
162
+ def __init__(self, connector: ConnectorResource) -> None:
163
+ self._connector = connector
164
+
165
+ self.clone = to_streamed_response_wrapper(
166
+ connector.clone,
167
+ )
168
+
169
+
170
+ class AsyncConnectorResourceWithStreamingResponse:
171
+ def __init__(self, connector: AsyncConnectorResource) -> None:
172
+ self._connector = connector
173
+
174
+ self.clone = async_to_streamed_response_wrapper(
175
+ connector.clone,
176
+ )
@@ -7,7 +7,7 @@ from typing import Optional
7
7
  import httpx
8
8
 
9
9
  from ..types import code_generate_code_params, code_interrupt_generation_params
10
- from .._types import Body, Omit, Query, Headers, NoneType, NotGiven, omit, not_given
10
+ from .._types import Body, Omit, Query, Headers, NoneType, NotGiven, SequenceNotStr, omit, not_given
11
11
  from .._utils import maybe_transform, async_maybe_transform
12
12
  from .._compat import cached_property
13
13
  from .._resource import SyncAPIResource, AsyncAPIResource
@@ -49,6 +49,8 @@ class CodeResource(SyncAPIResource):
49
49
  prompt: str,
50
50
  assistant_message_id: Optional[str] | Omit = omit,
51
51
  config: Optional[code_generate_code_params.Config] | Omit = omit,
52
+ connector_ids: SequenceNotStr[str] | Omit = omit,
53
+ file_paths: SequenceNotStr[str] | Omit = omit,
52
54
  trigger_workflow_execution: bool | Omit = omit,
53
55
  user_message_id: Optional[str] | Omit = omit,
54
56
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
@@ -83,6 +85,8 @@ class CodeResource(SyncAPIResource):
83
85
  "prompt": prompt,
84
86
  "assistant_message_id": assistant_message_id,
85
87
  "config": config,
88
+ "connector_ids": connector_ids,
89
+ "file_paths": file_paths,
86
90
  "trigger_workflow_execution": trigger_workflow_execution,
87
91
  "user_message_id": user_message_id,
88
92
  },
@@ -158,6 +162,8 @@ class AsyncCodeResource(AsyncAPIResource):
158
162
  prompt: str,
159
163
  assistant_message_id: Optional[str] | Omit = omit,
160
164
  config: Optional[code_generate_code_params.Config] | Omit = omit,
165
+ connector_ids: SequenceNotStr[str] | Omit = omit,
166
+ file_paths: SequenceNotStr[str] | Omit = omit,
161
167
  trigger_workflow_execution: bool | Omit = omit,
162
168
  user_message_id: Optional[str] | Omit = omit,
163
169
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
@@ -192,6 +198,8 @@ class AsyncCodeResource(AsyncAPIResource):
192
198
  "prompt": prompt,
193
199
  "assistant_message_id": assistant_message_id,
194
200
  "config": config,
201
+ "connector_ids": connector_ids,
202
+ "file_paths": file_paths,
195
203
  "trigger_workflow_execution": trigger_workflow_execution,
196
204
  "user_message_id": user_message_id,
197
205
  },
@@ -67,6 +67,7 @@ class ConnectorCatalogResource(SyncAPIResource):
67
67
  def list(
68
68
  self,
69
69
  *,
70
+ include_inactive: bool | Omit = omit,
70
71
  limit: int | Omit = omit,
71
72
  offset: int | Omit = omit,
72
73
  search: Optional[str] | Omit = omit,
@@ -78,9 +79,11 @@ class ConnectorCatalogResource(SyncAPIResource):
78
79
  timeout: float | httpx.Timeout | None | NotGiven = not_given,
79
80
  ) -> ConnectorCatalogListResponse:
80
81
  """
81
- List all connector catalog entries with their active auth methods and logos
82
+ List all connector catalog entries with their auth methods and logos
82
83
 
83
84
  Args:
85
+ include_inactive: Include inactive auth methods (admin only)
86
+
84
87
  search: Optional search query to filter by name, slug, or category (case-insensitive
85
88
  substring match)
86
89
 
@@ -101,6 +104,7 @@ class ConnectorCatalogResource(SyncAPIResource):
101
104
  timeout=timeout,
102
105
  query=maybe_transform(
103
106
  {
107
+ "include_inactive": include_inactive,
104
108
  "limit": limit,
105
109
  "offset": offset,
106
110
  "search": search,
@@ -204,6 +208,7 @@ class AsyncConnectorCatalogResource(AsyncAPIResource):
204
208
  async def list(
205
209
  self,
206
210
  *,
211
+ include_inactive: bool | Omit = omit,
207
212
  limit: int | Omit = omit,
208
213
  offset: int | Omit = omit,
209
214
  search: Optional[str] | Omit = omit,
@@ -215,9 +220,11 @@ class AsyncConnectorCatalogResource(AsyncAPIResource):
215
220
  timeout: float | httpx.Timeout | None | NotGiven = not_given,
216
221
  ) -> ConnectorCatalogListResponse:
217
222
  """
218
- List all connector catalog entries with their active auth methods and logos
223
+ List all connector catalog entries with their auth methods and logos
219
224
 
220
225
  Args:
226
+ include_inactive: Include inactive auth methods (admin only)
227
+
221
228
  search: Optional search query to filter by name, slug, or category (case-insensitive
222
229
  substring match)
223
230
 
@@ -238,6 +245,7 @@ class AsyncConnectorCatalogResource(AsyncAPIResource):
238
245
  timeout=timeout,
239
246
  query=await async_maybe_transform(
240
247
  {
248
+ "include_inactive": include_inactive,
241
249
  "limit": limit,
242
250
  "offset": offset,
243
251
  "search": search,
@@ -16,6 +16,7 @@ from .admin_dataset_return import AdminDatasetReturn as AdminDatasetReturn
16
16
  from .impersonate_response import ImpersonateResponse as ImpersonateResponse
17
17
  from .extend_trial_response import ExtendTrialResponse as ExtendTrialResponse
18
18
  from .user_get_stats_params import UserGetStatsParams as UserGetStatsParams
19
+ from .connector_clone_params import ConnectorCloneParams as ConnectorCloneParams
19
20
  from .expire_grants_response import ExpireGrantsResponse as ExpireGrantsResponse
20
21
  from .grant_credits_response import GrantCreditsResponse as GrantCreditsResponse
21
22
  from .user_get_stats_response import UserGetStatsResponse as UserGetStatsResponse
@@ -25,9 +26,11 @@ from .dataset_get_by_id_params import DatasetGetByIDParams as DatasetGetByIDPara
25
26
  from .team_extend_trial_params import TeamExtendTrialParams as TeamExtendTrialParams
26
27
  from .admin_teams_list_response import AdminTeamsListResponse as AdminTeamsListResponse
27
28
  from .chat_template_list_params import ChatTemplateListParams as ChatTemplateListParams
29
+ from .clone_connectors_response import CloneConnectorsResponse as CloneConnectorsResponse
28
30
  from .team_expire_grants_params import TeamExpireGrantsParams as TeamExpireGrantsParams
29
31
  from .team_grant_credits_params import TeamGrantCreditsParams as TeamGrantCreditsParams
30
32
  from .admin_delete_jobs_response import AdminDeleteJobsResponse as AdminDeleteJobsResponse
33
+ from .clone_connector_item_param import CloneConnectorItemParam as CloneConnectorItemParam
31
34
  from .chat_template_create_params import ChatTemplateCreateParams as ChatTemplateCreateParams
32
35
  from .chat_template_list_response import ChatTemplateListResponse as ChatTemplateListResponse
33
36
  from .chat_template_update_params import ChatTemplateUpdateParams as ChatTemplateUpdateParams
@@ -0,0 +1,15 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing_extensions import Required, TypedDict
6
+
7
+ __all__ = ["CloneConnectorItemParam"]
8
+
9
+
10
+ class CloneConnectorItemParam(TypedDict, total=False):
11
+ known_connector_type: Required[str]
12
+
13
+ name: Required[str]
14
+
15
+ source_connector_id: Required[str]
@@ -0,0 +1,12 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import List
4
+
5
+ from ..._models import BaseModel
6
+ from ..connector import Connector
7
+
8
+ __all__ = ["CloneConnectorsResponse"]
9
+
10
+
11
+ class CloneConnectorsResponse(BaseModel):
12
+ connectors: List[Connector]
@@ -0,0 +1,16 @@
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 Iterable
6
+ from typing_extensions import Required, TypedDict
7
+
8
+ from .clone_connector_item_param import CloneConnectorItemParam
9
+
10
+ __all__ = ["ConnectorCloneParams"]
11
+
12
+
13
+ class ConnectorCloneParams(TypedDict, total=False):
14
+ connectors: Required[Iterable[CloneConnectorItemParam]]
15
+
16
+ target_team_id: Required[str]
@@ -53,6 +53,8 @@ class Config(TypedDict, total=False):
53
53
  ]
54
54
  """LLM model keys available in the system. Format: <provider>.<model-name>"""
55
55
 
56
+ max_steps: Optional[int]
57
+
56
58
  reminder_message: Optional[str]
57
59
 
58
60
  system_prompt: Optional[str]
@@ -31,6 +31,10 @@ __all__ = [
31
31
  "ReviewRequest",
32
32
  "ReviewRequestReviewRequest",
33
33
  "ReviewRequestReviewRequestNodeSummary",
34
+ "AttachedFile",
35
+ "AttachedFileAttachedFile",
36
+ "ConnectorRequest",
37
+ "ConnectorRequestConnectorRequest",
34
38
  ]
35
39
 
36
40
 
@@ -146,6 +150,8 @@ class InternalError(BaseModel):
146
150
 
147
151
 
148
152
  class ReviewRequestReviewRequestNodeSummary(BaseModel):
153
+ in_dashboard: bool
154
+
149
155
  name: str
150
156
 
151
157
  data_preview: Optional[str] = None
@@ -161,6 +167,34 @@ class ReviewRequest(BaseModel):
161
167
  review_request: ReviewRequestReviewRequest = FieldInfo(alias="ReviewRequest")
162
168
 
163
169
 
170
+ class AttachedFileAttachedFile(BaseModel):
171
+ path: str
172
+
173
+ image_bytes: Optional[object] = None
174
+
175
+
176
+ class AttachedFile(BaseModel):
177
+ attached_file: AttachedFileAttachedFile = FieldInfo(alias="AttachedFile")
178
+
179
+
180
+ class ConnectorRequestConnectorRequest(BaseModel):
181
+ connector_id: str
182
+
183
+
184
+ class ConnectorRequest(BaseModel):
185
+ connector_request: ConnectorRequestConnectorRequest = FieldInfo(alias="ConnectorRequest")
186
+
187
+
164
188
  ChatEvent: TypeAlias = Union[
165
- TextMessage, Thinking, File, Action, Connector, ToolCall, Question, InternalError, ReviewRequest
189
+ TextMessage,
190
+ Thinking,
191
+ File,
192
+ Action,
193
+ Connector,
194
+ ToolCall,
195
+ Question,
196
+ InternalError,
197
+ ReviewRequest,
198
+ AttachedFile,
199
+ ConnectorRequest,
166
200
  ]
@@ -5,6 +5,7 @@ from __future__ import annotations
5
5
  from typing import Optional
6
6
  from typing_extensions import Literal, Required, Annotated, TypedDict
7
7
 
8
+ from .._types import SequenceNotStr
8
9
  from .._utils import PropertyInfo
9
10
 
10
11
  __all__ = ["CodeGenerateCodeParams", "Config"]
@@ -20,6 +21,10 @@ class CodeGenerateCodeParams(TypedDict, total=False):
20
21
  config: Optional[Config]
21
22
  """Configuration for chat session with system prompt and LLM key"""
22
23
 
24
+ connector_ids: Annotated[SequenceNotStr[str], PropertyInfo(alias="connectorIds")]
25
+
26
+ file_paths: Annotated[SequenceNotStr[str], PropertyInfo(alias="filePaths")]
27
+
23
28
  trigger_workflow_execution: Annotated[bool, PropertyInfo(alias="triggerWorkflowExecution")]
24
29
 
25
30
  user_message_id: Annotated[Optional[str], PropertyInfo(alias="userMessageId")]
@@ -57,6 +62,8 @@ class Config(TypedDict, total=False):
57
62
  ]
58
63
  """LLM model keys available in the system. Format: <provider>.<model-name>"""
59
64
 
65
+ max_steps: Optional[int]
66
+
60
67
  reminder_message: Optional[str]
61
68
 
62
69
  system_prompt: Optional[str]
@@ -9,6 +9,9 @@ __all__ = ["ConnectorCatalogListParams"]
9
9
 
10
10
 
11
11
  class ConnectorCatalogListParams(TypedDict, total=False):
12
+ include_inactive: bool
13
+ """Include inactive auth methods (admin only)"""
14
+
12
15
  limit: int
13
16
 
14
17
  offset: int
@@ -118,6 +118,8 @@ class ConnectedEntity(BaseModel):
118
118
 
119
119
  dataset_id: str
120
120
 
121
+ job_ids: List[str]
122
+
121
123
  label: str
122
124
 
123
125
  properties: Dict[str, ConnectedEntityProperties]
@@ -210,6 +212,8 @@ class Entity(BaseModel):
210
212
 
211
213
  dataset_id: str
212
214
 
215
+ job_ids: List[str]
216
+
213
217
  label: str
214
218
 
215
219
  properties: Dict[str, EntityProperties]
@@ -5,6 +5,7 @@ from datetime import datetime
5
5
  from typing_extensions import TypeAlias
6
6
 
7
7
  from .._models import BaseModel
8
+ from .chat_event import ChatEvent
8
9
  from .chat_prompt import ChatPrompt
9
10
 
10
11
  __all__ = ["JobGetScrapersResponse", "JobGetScrapersResponseItem"]
@@ -25,6 +26,8 @@ class JobGetScrapersResponseItem(BaseModel):
25
26
 
26
27
  code: Optional[str] = None
27
28
 
29
+ events: Optional[List[ChatEvent]] = None
30
+
28
31
  next_page_code: Optional[str] = None
29
32
 
30
33
 
@@ -11,7 +11,6 @@ __all__ = [
11
11
  "ToolResult",
12
12
  "Error",
13
13
  "Text",
14
- "Image",
15
14
  "CodeExecution",
16
15
  "CodeExecutionCodeExecution",
17
16
  "WebMarkdown",
@@ -21,6 +20,8 @@ __all__ = [
21
20
  "ConnectorSearchConnectorSearch",
22
21
  "ConnectorSearchConnectorSearchColumn",
23
22
  "NodeLogs",
23
+ "Image",
24
+ "ImageImage",
24
25
  ]
25
26
 
26
27
 
@@ -32,10 +33,6 @@ class Text(BaseModel):
32
33
  text: str = FieldInfo(alias="Text")
33
34
 
34
35
 
35
- class Image(BaseModel):
36
- image: object = FieldInfo(alias="Image")
37
-
38
-
39
36
  class CodeExecutionCodeExecution(BaseModel):
40
37
  return_code: int
41
38
 
@@ -94,6 +91,24 @@ class NodeLogs(BaseModel):
94
91
  node_logs: List[str] = FieldInfo(alias="NodeLogs")
95
92
 
96
93
 
94
+ class ImageImage(BaseModel):
95
+ image_bytes: object
96
+
97
+ ocr_text: Optional[str] = None
98
+
99
+
100
+ class Image(BaseModel):
101
+ image: ImageImage = FieldInfo(alias="Image")
102
+
103
+
97
104
  ToolResult: TypeAlias = Union[
98
- Literal["Pending", "NoResult"], Error, Text, Image, CodeExecution, WebMarkdown, WebSearch, ConnectorSearch, NodeLogs
105
+ Literal["Pending", "NoResult", "Completed"],
106
+ Error,
107
+ Text,
108
+ CodeExecution,
109
+ WebMarkdown,
110
+ WebSearch,
111
+ ConnectorSearch,
112
+ NodeLogs,
113
+ Image,
99
114
  ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: structifyai
3
- Version: 1.177.0
3
+ Version: 1.178.0
4
4
  Summary: The official Python library for the structify API
5
5
  Project-URL: Homepage, https://github.com/StructifyAI/structify-python
6
6
  Project-URL: Repository, https://github.com/StructifyAI/structify-python
@@ -11,7 +11,7 @@ structify/_resource.py,sha256=tJi4pDQooQZ_zJwEwrLj-U-ye2hC-cbmr1GzIwCT10Y,1118
11
11
  structify/_response.py,sha256=RuNhMDiZUdPqEbmFJHDVI4FMPDszk8QjK9LVWm1Fagk,28806
12
12
  structify/_streaming.py,sha256=n4C9M7ITmANYn9LaWHNoqJdIIyF7svLco2qst7u3M7U,10233
13
13
  structify/_types.py,sha256=jj4p-m3vpUma0AdhPWIaljHZXeb4RKnrAusjVdpDy5Y,7597
14
- structify/_version.py,sha256=eU9JOmkhTHjI3x58Ff2ihBWGUwxnvrP8j_cONBsukgs,163
14
+ structify/_version.py,sha256=oPHKgofoBsX3XsUo0vn74-C4ADz2Aq_wNd3D_a2VRiI,163
15
15
  structify/pagination.py,sha256=ycybhWcpKk4ztsMcCA6C0WZiJejGrSx6bSr8LLskJUY,4346
16
16
  structify/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
17
  structify/_utils/__init__.py,sha256=7fch0GT9zpNnErbciSpUNa-SjTxxjY6kxHxKMOM4AGs,2305
@@ -31,7 +31,7 @@ structify/lib/__init__.py,sha256=Ueo7RB2lM1a3wkuifgjgBpqwQxhQUHJzvGorfJAfuUc,187
31
31
  structify/lib/cost_confirmation.py,sha256=LvE76RQ0zVU17-qcYvQiH6NBtORIA7m4b72f1_YLMUg,2069
32
32
  structify/resources/__init__.py,sha256=uEPBix75KmHK4iO50jocLO_psMYaebe-jkemfOjlz_U,12597
33
33
  structify/resources/chat.py,sha256=RIYa-2vgc1I2G52cp5Ak6sIBJf04TWbH5IoGd-r38Co,91243
34
- structify/resources/code.py,sha256=6DrVsa3SHWz2b9BFJ5lOssni2u-fz4GLBz68-fj9ALE,11196
34
+ structify/resources/code.py,sha256=geloVbg4Bul_2OOFJ9OfaGOafRaN2PtQcerttBKnyZE,11634
35
35
  structify/resources/documents.py,sha256=QBuL5NQyW1XrncP4tjyb9yLFgqPgWCXa8Zj1uESy5j8,18180
36
36
  structify/resources/entities.py,sha256=Fz4yCEdsxs-62bjmkYZY9Ku_tzDe73Q4xfqv_XHGe_M,81990
37
37
  structify/resources/external.py,sha256=lVZCAEwNKTSGSZasGFibDmIC9N6MseJRkgBFCNvgcQU,3556
@@ -55,9 +55,10 @@ structify/resources/whitelabel_service.py,sha256=cqGBpRegtJRjt5WFNPCXTwyGKHTAbBU
55
55
  structify/resources/wiki.py,sha256=0j5qrgQ72LE7GsuLyy4nylnEuU0VDSjTMRejaHlqa-8,19490
56
56
  structify/resources/workflow.py,sha256=D8gnt22usKoY9iA3HTNlbQyWTykNUXl2m3rFsPAKZZc,9273
57
57
  structify/resources/workflow_schedule.py,sha256=bP7rxm0OsW27zt2Y5EF7EILfFzP3lKFIaRRr_8MbZvA,29807
58
- structify/resources/admin/__init__.py,sha256=PJr020x__bUptQWFYBt2yIUFScH7IHZ0jB4wFscLERM,3873
59
- structify/resources/admin/admin.py,sha256=oUo4LKqjnN5E2Kir-1bz2h8W_mLhms5q-ZbkkSPOWC8,10397
58
+ structify/resources/admin/__init__.py,sha256=QbNLwto24WRX1DgTltNy7lRPrwp4bgRla_pmd0fRedM,4362
59
+ structify/resources/admin/admin.py,sha256=pRiBhmMOpM_k7aYtKA9yl1tfF5kz_KsTe4K-7GIvXMA,11549
60
60
  structify/resources/admin/chat_templates.py,sha256=tsWs-2tI-8nybzQn-lNERBAA81LebwR0giW7ZrPgnG8,14727
61
+ structify/resources/admin/connector.py,sha256=YXAONtTL-fsgiR-R5d9tXolm2khuMnvGVPXaMruYQiw,6505
61
62
  structify/resources/admin/dataset.py,sha256=1AEVHzMvgr96bbJjY3fcWRTDwq1zJAmMzYQB9kjSnL8,6096
62
63
  structify/resources/admin/functional_tests.py,sha256=ZdGnpHBSz1qEYf5oE5W8SjhvPQUtlP5plh6IvceYjbI,23977
63
64
  structify/resources/admin/jobs.py,sha256=dVTzYPFyx4RdoC52gnacZ9cC4gPVuvCQejqp0HWQ4bA,11918
@@ -66,7 +67,7 @@ structify/resources/admin/teams.py,sha256=-xR3N8tGF2uI4SMHwsLnAf6q36z42hLHAWDPA8
66
67
  structify/resources/admin/users.py,sha256=F0xis-9-Wo5qQHLGvAnJ9Ekao4Ssew043z9sCbOeEH8,17496
67
68
  structify/resources/connector_catalog/__init__.py,sha256=uwvbyu4gu4pZ_px3-Nhhh2lxiosNwQGlqW-IIbbWgx8,1120
68
69
  structify/resources/connector_catalog/admin.py,sha256=2ob0yPRr_zyoHGs-XTIupwCCnO9LgddXP-ToAJtTxmw,60801
69
- structify/resources/connector_catalog/connector_catalog.py,sha256=eek2Q0bB6BEhlrtW0HwbGOXLKAgn5iZk_Oa2pChLzPU,15187
70
+ structify/resources/connector_catalog/connector_catalog.py,sha256=0cl-NXRalMWtcsWXkKEAPlxZ_slhR1VW4FsPBE81iWY,15533
70
71
  structify/resources/connectors/__init__.py,sha256=XshER9L_6E2kY_zKa1VTkY_UmEIAoi3MkeFYJdGGH0U,1133
71
72
  structify/resources/connectors/connectors.py,sha256=AanoFJqH01EN6Hfsll9JOMnHIGgxA5Co8gewnASHtas,89020
72
73
  structify/resources/connectors/type_snippets.py,sha256=dawxpQbDQhqKPHpRQApti0OhgMI-rQUHeRuaDKgU-wM,6585
@@ -90,11 +91,11 @@ structify/types/chat_admin_issue_found_params.py,sha256=N5YMgm6O-Yr3sXZb2sWDHdyN
90
91
  structify/types/chat_copy_node_output_by_code_hash_params.py,sha256=gP4V2Y0_Rb4-kwoEceClJLgjVdWv7bgcI4qqQIvdNv8,356
91
92
  structify/types/chat_copy_node_output_by_code_hash_response.py,sha256=Cst1RK9jDrMAKEyzLIk5_-D6YUbO-AIVllYui2sy2aQ,272
92
93
  structify/types/chat_copy_params.py,sha256=tfA3jdduKDJeHiYjWWKdHifRMp1sCGyGQcYHFuMFdnE,425
93
- structify/types/chat_create_session_params.py,sha256=QSkL1Z0Vj0sT8AJ8mcDZQIqAwUkbhiQHuF6811veMmc,1810
94
+ structify/types/chat_create_session_params.py,sha256=3pQxz7kuIlXjcBzosAj5B9NYv3r5fZJUSve6wo11l2w,1840
94
95
  structify/types/chat_delete_files_params.py,sha256=Rv24bWe1CK524xobl9-_APx5GG8KTqIwEtUgYIUlMXc,343
95
96
  structify/types/chat_delete_files_response.py,sha256=ZoFJjfZqn_rVuwiFhsuFigN_AQHh_DRkb5KRj7J_49g,225
96
97
  structify/types/chat_dependency.py,sha256=J8JLY6kBjFt4dgf-_Vk_HEjxS5R6_6VnTQue2JzZRug,415
97
- structify/types/chat_event.py,sha256=P75JvtSDWSFPkhnkQ0QhOb8hgtkLwEeuyZLDn3k1zEw,3334
98
+ structify/types/chat_event.py,sha256=NKiIZcC98brPmW0T3mGJNyuvDpHdZ4_0EuRirsoSDBo,3965
98
99
  structify/types/chat_get_git_commit_response.py,sha256=6_Bpdh6HU5zwGi219Q14a0c0tN-qtJN9RPrDudeZu3U,440
99
100
  structify/types/chat_get_partial_chats_response.py,sha256=LS4eF1-GW2N5mZSJVZUoMu9Q77Y7Fo6bIIUS3P7zwh4,290
100
101
  structify/types/chat_get_session_timeline_response.py,sha256=6SM_FoDMxNn75rpqPKJj1C1_YXjONvncMnYkf8V8knA,1684
@@ -114,12 +115,12 @@ structify/types/chat_update_session_favorite_params.py,sha256=UNi0YujSs1gCSry2jK
114
115
  structify/types/chat_update_session_params.py,sha256=5NQZx-j-W2xQGlX0GU-9vwyQt0QunlifWY2MpRtrEv8,382
115
116
  structify/types/chat_update_visibility_params.py,sha256=uWtgq4zb_TSO4hIsY0FmdWaljB_20wpjl6IQhRMibTg,361
116
117
  structify/types/chat_visibility.py,sha256=GpTgjpcupE1z9Iul8fxOrlMoP_2wjQ_7Z0rJ2y9qO5Q,244
117
- structify/types/code_generate_code_params.py,sha256=cX5HYhmrv-9gBZcYMy9jJ8h4vMewt-Zy5jVfAYJsirA,2114
118
+ structify/types/code_generate_code_params.py,sha256=d1GmeAN35JdwdxWfAIObWFUs7QOm8xDx2Q5OvuFgvNg,2348
118
119
  structify/types/code_interrupt_generation_params.py,sha256=1Y9VOgObIJFyYgAEkUuWZRKKV5-4HcoRA6p5iSEnF3s,410
119
120
  structify/types/connector.py,sha256=hqfk8x1ZM39idvAd4wXLm1QNrnT3kRgxEuhk8O28-B0,1069
120
121
  structify/types/connector_auth_method.py,sha256=iHBmcNbi74mDjFd_m4-HrGrZoV9_WRSFtrOY0fz9NhQ,562
121
122
  structify/types/connector_auth_method_with_fields.py,sha256=EABCugmJ8ahZNhSqvNQAESjHpD3kozh4GPop2OZpSMw,519
122
- structify/types/connector_catalog_list_params.py,sha256=vqyYfA7M3STeDKKshpD9FthkmoSh4LJecrBFhVGbBJs,470
123
+ structify/types/connector_catalog_list_params.py,sha256=I6VUDKLGNd_p2ePnb1OeHHdaFW2HT5Hw26fSJR4xR3E,551
123
124
  structify/types/connector_catalog_list_response.py,sha256=0e1AQU59zTfN-bvx1GCUElnaEiyW104XHUIYvZ4Gkmg,503
124
125
  structify/types/connector_catalog_with_methods.py,sha256=EZdXqN6oZggX-SYXUrn_hDgCRHeMY1zNo7pY1q0vX4E,532
125
126
  structify/types/connector_category.py,sha256=2YnDoj4lXtyfRTVhSi-7a5InFuOUn26SqeVeaCSS4lE,245
@@ -185,7 +186,7 @@ structify/types/dataset_view_relationships_response.py,sha256=IC5Ot90K_F7wSPBSz7
185
186
  structify/types/dataset_view_table_params.py,sha256=vD_qKTv13_mbBP4zIorOSO--RL2qp5pQRxXPdwPBuio,985
186
187
  structify/types/dataset_view_table_response.py,sha256=Ultse5-ichgV1vnD0UJmfslMpEqQlnqPmRmQYId0gkA,1846
187
188
  structify/types/dataset_view_tables_with_relationships_params.py,sha256=0qCpvobbsnHIij0Z4nAJfDPl_bf8zGoER-3Cmve7Yxw,1021
188
- structify/types/dataset_view_tables_with_relationships_response.py,sha256=4ICbKqXwWfYrq7N-ZvlFY4kZCwVdo9k65NMaIL4KWZA,5670
189
+ structify/types/dataset_view_tables_with_relationships_response.py,sha256=-ylxL-VlT5WaIPl-YIX_33OdbViRtCJLSNiIk1mvQYI,5718
189
190
  structify/types/delete_chat_session_response.py,sha256=HuoT7Z2lgj4Elha7SBWf7dBamo-vjoGY5kedaoAYgUw,292
190
191
  structify/types/delete_project_response.py,sha256=58f-dGQrLRJROkKAafEjy8FHOt7sMef0rc23-H5h8G0,216
191
192
  structify/types/delete_schema_object_request_param.py,sha256=5Yg2DZddB0NfZJWwB-da7bKP0434CknxWeFl_-ohF2c,865
@@ -262,7 +263,7 @@ structify/types/image.py,sha256=FpYU3gDZnet0wO17e2uHzcyRUD6E1ssSgv63Ew0DzjU,269
262
263
  structify/types/invitation_details_response.py,sha256=TmyeM4mW4Kb6L0d7Ook9cH3g8vzfQYPnvZDIBdgVAO4,272
263
264
  structify/types/job_cancel_response.py,sha256=y8M8qPkcXT-pTi4IwQ0JBJQzXeAQIs3u2OsaVeGBTtc,1224
264
265
  structify/types/job_event_body.py,sha256=pO11fTm5sGvQ6cx7NvWTitUaunSqdRo-d5tkyh4KPsk,3906
265
- structify/types/job_get_scrapers_response.py,sha256=-E9DaG9YCkrJeuffZ3RiI6MW7ZsbPjmlVU3jUQdggSY,694
266
+ structify/types/job_get_scrapers_response.py,sha256=JsbPIyUlLS3iZNyYulU8X7eF_XOmhRqYjoiGh8lnfQg,774
266
267
  structify/types/job_get_source_entities_response.py,sha256=vlGKFkMKjII48EexIEBbls6-PAVYDDkmR1__aKjuiUo,3379
267
268
  structify/types/job_list_params.py,sha256=i_MYi4vIFC6Dq5I4E4htYwZejqRE5qAf2lgg_SRBuKg,1012
268
269
  structify/types/job_list_response.py,sha256=mKWo7HlbMFtsGMjQHLwT8SCuV_Ktmf6pIAqoPx9a5HU,5134
@@ -372,7 +373,7 @@ structify/types/teams_link_code_response.py,sha256=p81nvCP4KeGVUgQiiaFwAlLMRaGnG
372
373
  structify/types/token_response.py,sha256=N75RMh9ZF05z5Ubc_Pu2pePe3MN7Yqn2GB1FJ8FQJZ0,408
373
374
  structify/types/tool_invocation.py,sha256=HCc_nFmfjm5MnoDKDbtnh7TIvLEH7gvsBI4IIU0AxO4,7995
374
375
  structify/types/tool_metadata.py,sha256=drtuS9ZQm4cB2KScB1pycX1ifjhGwSUMJm9TFv1SHuI,382
375
- structify/types/tool_result.py,sha256=C7CSxU0PfW4WMiWlwDckEmsjTbZmWzEoSt2LbcYdAtc,2013
376
+ structify/types/tool_result.py,sha256=ac97GlYBN9GoVcbRRCS42krwzsf8-mHxw-Au3vIsP2I,2172
376
377
  structify/types/update_member_role_response.py,sha256=q1jTM0lFmzvH8ki7GcSQAh-5cN7VnLF6Jg_IRdA4AqE,222
377
378
  structify/types/update_table_response.py,sha256=ypJEzW8JcLOmLpoZq46i7ADFUkHqBGeo0AhtiSq8HAk,1156
378
379
  structify/types/update_team_response.py,sha256=AOm2-jzpjF3UVRh3msyc8W00l-hNpk_SqmMI3oK_YBE,230
@@ -405,7 +406,7 @@ structify/types/workflow_session.py,sha256=TowRK1sUm0sFlN2DTV6wAnFkFFl3U70svD8V2
405
406
  structify/types/workflow_session_edge.py,sha256=GDlkWnOwnArC80Q1e04FfBkREOvh5HSs7Ij4K2rNR1Q,334
406
407
  structify/types/workflow_session_node.py,sha256=dSC6uG4Rhf7vo5hXVsuOfPBAjPj26bQNEy_FGUKAqkE,1159
407
408
  structify/types/workflow_stop_params.py,sha256=DLTGDSENmcdNQoV_LnsL0lvf3i3NtupkpiBGBpZakUs,298
408
- structify/types/admin/__init__.py,sha256=sI2YUoXg3jsKmOp7cu3j_z2PoGhwQ5x7aTf822d192k,3540
409
+ structify/types/admin/__init__.py,sha256=nXPN4Q3xY3UQU9c6bmfep1li_pnj9j9N8HMSBgGXfbU,3802
409
410
  structify/types/admin/admin_dataset_return.py,sha256=hRSCIBTiaCb1O1lcxsKyxnzGiYuIUEvnMxXkNbyj4_U,495
410
411
  structify/types/admin/admin_delete_jobs_response.py,sha256=c3IO7bCqAoEN9PHYM88gO0JT0e6hCaHyIBtxC84Tw38,225
411
412
  structify/types/admin/admin_list_jobs_response.py,sha256=27IoyuBSaBJPnSSyiZt3q5dHfeyBzrGtnq7nGvJcapM,4867
@@ -416,6 +417,9 @@ structify/types/admin/chat_template_create_params.py,sha256=GCP3Uhb1_wPfaC4iFkQF
416
417
  structify/types/admin/chat_template_list_params.py,sha256=reCVbp32J8xxQodoRZOUYdgMJAb7JV90gjQ-q6-bv80,320
417
418
  structify/types/admin/chat_template_list_response.py,sha256=PWierLwWeuthLC8cKaffmJAt7gCTNedvtjfwqF5wLt8,291
418
419
  structify/types/admin/chat_template_update_params.py,sha256=1MnZNe4q6a_dtodbR9d8G86xKZQzew-xFxDkW2by5Rs,472
420
+ structify/types/admin/clone_connector_item_param.py,sha256=aFEU0ffw2pPH9PkwYkmN96rNRwBwyxiThYBb-MjybYY,374
421
+ structify/types/admin/clone_connectors_response.py,sha256=8tI4t8BlNcP-KR1PGduSc5hYtD2CLiyHR3I1_PBCN_Y,294
422
+ structify/types/admin/connector_clone_params.py,sha256=6_FYEQv9s5qC-Ef8Qkmg1FVVpnrf39MYItYpqF_pn2A,451
419
423
  structify/types/admin/create_subscription_response.py,sha256=JFm1lbs87TDnqLoI-7wNd058BJt6GYTUV5UXojldM_w,275
420
424
  structify/types/admin/dataset_get_by_id_params.py,sha256=upS3EraM1yOXntE91YlE0H5NMfMRT-Ne9QBTZNORYJs,325
421
425
  structify/types/admin/expire_grants_response.py,sha256=qdsKTN4Lbg805rSy4QUEYUGjMfV8ptjO-97IfHliYLU,238
@@ -492,7 +496,7 @@ structify/types/user/stripe_create_portal_session_params.py,sha256=5AYRC8z_SlKmd
492
496
  structify/types/user/stripe_create_session_params.py,sha256=DFcNLNzEWeupkGQ9J5PafsuL_bIU9cLEIhAmFPsRlfo,387
493
497
  structify/types/user/stripe_create_subscription_params.py,sha256=d8HfiC94gJbG-cC_WvBz6xYCvxKJO_EP2yyVmVvufrU,424
494
498
  structify/types/user/subscription_plan.py,sha256=qKJMM-zPpYolYC1DlypOwPpxlyJBLkQqFK_0VpwktJs,222
495
- structifyai-1.177.0.dist-info/METADATA,sha256=V1fDbr3ZhvU5KVj40qYtmNBshvhZQ0eWeEW7bmpwOQ4,16399
496
- structifyai-1.177.0.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
497
- structifyai-1.177.0.dist-info/licenses/LICENSE,sha256=9CwgrmGz3rZSTT-KqGc1gua-7g8B4ThTgMtUgPALh5c,11339
498
- structifyai-1.177.0.dist-info/RECORD,,
499
+ structifyai-1.178.0.dist-info/METADATA,sha256=YR3Xd2scGjvgDi48CePU9hhyhXkmwtXYDSxiuMoNrDQ,16399
500
+ structifyai-1.178.0.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
501
+ structifyai-1.178.0.dist-info/licenses/LICENSE,sha256=9CwgrmGz3rZSTT-KqGc1gua-7g8B4ThTgMtUgPALh5c,11339
502
+ structifyai-1.178.0.dist-info/RECORD,,