structifyai 1.177.0__py3-none-any.whl → 1.179.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.179.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,7 +16,6 @@ from structify.types.entity_param import EntityParam
16
16
  from structify.types.property_type_param import PropertyTypeParam
17
17
  from structify.types.dataset_create_params import Relationship as CreateRelationshipParam
18
18
  from structify.types.knowledge_graph_param import KnowledgeGraphParam
19
- from structify.types.dataset_view_table_response import Properties
20
19
 
21
20
  from ..types import TableParam
22
21
  from .._compat import cached_property
@@ -35,6 +34,17 @@ from ..types.structure_run_async_params import SourceWebWeb
35
34
  __all__ = ["PolarsResource"]
36
35
 
37
36
  MAX_PARALLEL_REQUESTS = 20
37
+ STRUCTIFY_JOB_ID_COLUMN = "structify_job_id"
38
+
39
+
40
+ def _collect_entities_with_job_ids(entities: Any) -> List[Dict[str, Any]]:
41
+ """Collect entity properties with their first job_id."""
42
+ results: List[Dict[str, Any]] = []
43
+ for entity in entities:
44
+ row: Dict[str, Any] = dict(entity.properties)
45
+ row[STRUCTIFY_JOB_ID_COLUMN] = entity.job_ids[0] if entity.job_ids else None
46
+ results.append(row)
47
+ return results
38
48
 
39
49
 
40
50
  class PolarsResource(SyncAPIResource):
@@ -164,8 +174,9 @@ class PolarsResource(SyncAPIResource):
164
174
  # Get the node ID when the function is called, not when the batch is processed
165
175
  node_id = get_node_id()
166
176
 
167
- # Create the expected output schema
177
+ # Create the expected output schema with single job_id column
168
178
  expected_schema = properties_to_schema(all_properties)
179
+ expected_schema[STRUCTIFY_JOB_ID_COLUMN] = pl.String
169
180
 
170
181
  # Apply Structify enrich on the dataframe
171
182
  def enhance_batch(batch_df: pl.DataFrame) -> pl.DataFrame:
@@ -249,11 +260,10 @@ class PolarsResource(SyncAPIResource):
249
260
  # 3. Wait for all jobs to complete
250
261
  title = f"Enriching {property_names} for {dataframe_name}"
251
262
  self._client.jobs.wait_for_jobs(dataset_name=dataset_name, title=title, node_id=node_id)
252
- # 4. Collect the results
253
- results = [
254
- entity.properties
255
- for entity in self._client.datasets.view_table(dataset=dataset_name, name=dataframe_name)
256
- ]
263
+ # 4. Collect the results with job_ids
264
+ results = _collect_entities_with_job_ids(
265
+ self._client.datasets.view_table(dataset=dataset_name, name=dataframe_name)
266
+ )
257
267
  # 5. Return the results
258
268
  return pl.DataFrame(results, schema=expected_schema)
259
269
 
@@ -296,6 +306,7 @@ class PolarsResource(SyncAPIResource):
296
306
  target_columns[col_name] = col_info.get("type", pl.String())
297
307
 
298
308
  output_schema = _merge_schema_with_suffix(input_schema, target_columns, suffix=target_table_name)
309
+ output_schema[STRUCTIFY_JOB_ID_COLUMN] = pl.String
299
310
 
300
311
  target_properties: list[Property] = [
301
312
  Property(
@@ -412,6 +423,7 @@ class PolarsResource(SyncAPIResource):
412
423
  prop_name if prop_name not in input_schema else f"{prop_name}_{target_table_name}"
413
424
  ) # If the column already exists in the input schema, we need to suffix it with the target table name
414
425
  result_row[eff] = target_entity.properties.get(prop_name)
426
+ result_row[STRUCTIFY_JOB_ID_COLUMN] = target_entity.job_ids[0] if target_entity.job_ids else None
415
427
  result_rows.append(result_row)
416
428
 
417
429
  # Handle source rows without relationships
@@ -422,6 +434,7 @@ class PolarsResource(SyncAPIResource):
422
434
  for prop_name in target_schema.keys():
423
435
  eff = prop_name if prop_name not in input_schema else f"{prop_name}_{target_table_name}"
424
436
  orphan_row[eff] = None
437
+ orphan_row[STRUCTIFY_JOB_ID_COLUMN] = None
425
438
  result_rows.append(orphan_row)
426
439
 
427
440
  if not result_rows:
@@ -440,14 +453,11 @@ class PolarsResource(SyncAPIResource):
440
453
  dataframe_name: str,
441
454
  dataframe_description: str,
442
455
  use_proxy: bool = False,
443
- include_job_ids: bool = False,
444
456
  ) -> LazyFrame:
445
457
  """
446
458
  Enhance one or more columns of a `LazyFrame` directly from a URL.
447
459
 
448
- When `include_job_ids=True`, an additional `job_id` column is added to the
449
- output DataFrame with the Structify job id for each URL. The job id is not
450
- stored in Structify.
460
+ Adds a `structify_job_id` column with the job id for each row.
451
461
  """
452
462
 
453
463
  # Existing columns & their dtypes from the LazyFrame
@@ -475,8 +485,6 @@ class PolarsResource(SyncAPIResource):
475
485
  for col_name, (dtype, desc) in new_columns_dict.items()
476
486
  ]
477
487
 
478
- job_id_column: str | None = "job_id" if include_job_ids else None
479
-
480
488
  all_properties = merge_column_properties(pre_existing_properties, new_column_properties)
481
489
 
482
490
  dataset_name = f"enhance_{dataframe_name}_{uuid.uuid4().hex}"
@@ -504,10 +512,9 @@ class PolarsResource(SyncAPIResource):
504
512
  # Get the node ID when the function is called, not when the batch is processed
505
513
  node_id = get_node_id()
506
514
 
507
- # Create the expected output schema
515
+ # Create the expected output schema with single job_id column
508
516
  expected_schema = properties_to_schema(all_properties)
509
- if job_id_column is not None:
510
- expected_schema[job_id_column] = pl.String
517
+ expected_schema[STRUCTIFY_JOB_ID_COLUMN] = pl.String
511
518
 
512
519
  # Apply Structify scrape on the dataframe
513
520
  def scrape_batch(batch_df: pl.DataFrame) -> pl.DataFrame:
@@ -537,8 +544,6 @@ class PolarsResource(SyncAPIResource):
537
544
  entity_id_to_entity[entity_id] = entity
538
545
 
539
546
  # 2. Run scrape jobs for each entity
540
- job_ids_by_url: Dict[str, str] = {}
541
-
542
547
  def scrape_entity_property(entity_id: str) -> None:
543
548
  entity = entity_id_to_entity[entity_id]
544
549
  url = entity["properties"].get(url_column)
@@ -549,7 +554,7 @@ class PolarsResource(SyncAPIResource):
549
554
  f"URL column {url_column} must be of string type, got {type(entity['properties'][url_column])}"
550
555
  )
551
556
 
552
- response = self._client.scrape.scrape(
557
+ self._client.scrape.scrape(
553
558
  dataset_name=dataset_name,
554
559
  extraction_criteria=[
555
560
  RequiredProperty(
@@ -566,8 +571,6 @@ class PolarsResource(SyncAPIResource):
566
571
  use_proxy=use_proxy,
567
572
  url=url,
568
573
  )
569
- if job_id_column is not None:
570
- job_ids_by_url[url] = response.job_id
571
574
 
572
575
  property_list = list(new_columns_dict.keys())
573
576
  if len(property_list) == 1:
@@ -592,17 +595,10 @@ class PolarsResource(SyncAPIResource):
592
595
  title = f"Scraping {property_names} for {dataframe_name}"
593
596
  self._client.jobs.wait_for_jobs(dataset_name=dataset_name, title=title, node_id=node_id)
594
597
 
595
- # 4. Collect the results
596
- results: list[dict[str, Properties]] = []
597
- for entity in self._client.datasets.view_table(dataset=dataset_name, name=dataframe_name):
598
- properties = entity.properties.copy()
599
- if job_id_column is not None:
600
- url = properties.get(url_column)
601
- if isinstance(url, str):
602
- job_id = job_ids_by_url.get(url)
603
- if job_id is not None:
604
- properties[job_id_column] = job_id
605
- results.append(properties)
598
+ # 4. Collect the results with job_id
599
+ results = _collect_entities_with_job_ids(
600
+ self._client.datasets.view_table(dataset=dataset_name, name=dataframe_name)
601
+ )
606
602
 
607
603
  # 5. Return the results
608
604
  return pl.DataFrame(results, schema=expected_schema)
@@ -657,6 +653,7 @@ class PolarsResource(SyncAPIResource):
657
653
  }
658
654
 
659
655
  output_schema = _merge_schema_with_suffix(input_schema, scraped_columns, suffix=relationship["target_table"])
656
+ output_schema[STRUCTIFY_JOB_ID_COLUMN] = pl.String
660
657
 
661
658
  properties: list[Property] = []
662
659
  for col_name, col_info in scrape_schema.items():
@@ -758,6 +755,9 @@ class PolarsResource(SyncAPIResource):
758
755
  result_row: dict[str, Any] = {
759
756
  **scraped_entity.properties,
760
757
  url_column: related_entity.properties[url_column],
758
+ STRUCTIFY_JOB_ID_COLUMN: scraped_entity.job_ids[0]
759
+ if scraped_entity.job_ids
760
+ else None,
761
761
  }
762
762
  result_rows.append(result_row)
763
763
  offset += LIMIT
@@ -765,8 +765,11 @@ class PolarsResource(SyncAPIResource):
765
765
  break
766
766
  except Exception:
767
767
  break
768
- # Build scraped schema (pre-join, original names) incl. join column
769
- scraped_schema = scraped_columns | {url_column: input_schema[url_column]}
768
+ # Build scraped schema (pre-join, original names) incl. join column and job_id
769
+ scraped_schema: Dict[str, pl.DataType] = scraped_columns | {
770
+ url_column: input_schema[url_column],
771
+ STRUCTIFY_JOB_ID_COLUMN: pl.String(),
772
+ }
770
773
 
771
774
  # Fill missing columns in scraped results
772
775
  for result_row in result_rows:
@@ -839,6 +842,7 @@ class PolarsResource(SyncAPIResource):
839
842
  polars_schema = pl.Schema(
840
843
  [(path_column, pl.String())]
841
844
  + [(col_name, col_info.get("type", pl.String())) for col_name, col_info in schema.items()]
845
+ + [(STRUCTIFY_JOB_ID_COLUMN, pl.String())]
842
846
  )
843
847
 
844
848
  assert path_column in document_paths.collect_schema(), (
@@ -931,9 +935,15 @@ class PolarsResource(SyncAPIResource):
931
935
 
932
936
  # Get all of the entities with their job_ids
933
937
  entities = self._client.datasets.view_table(dataset=dataset_name, name=table_name)
934
- structured_results: List[Dict[str, Any]] = [
935
- {**entity.properties, path_column: job_to_pdf_path[entity.job_ids[0]]} for entity in entities
936
- ]
938
+ structured_results: List[Dict[str, Any]] = []
939
+ for entity in entities:
940
+ job_id = entity.job_ids[0] if entity.job_ids else None
941
+ result_row: Dict[str, Any] = {
942
+ **entity.properties,
943
+ path_column: job_to_pdf_path.get(job_id) if job_id else None,
944
+ STRUCTIFY_JOB_ID_COLUMN: job_id,
945
+ }
946
+ structured_results.append(result_row)
937
947
 
938
948
  # Ensure all columns are present with None for missing values
939
949
  for result_row in structured_results:
@@ -986,6 +996,7 @@ class PolarsResource(SyncAPIResource):
986
996
  all_properties = existing_properties + [new_property]
987
997
 
988
998
  expected_schema = properties_to_schema(all_properties)
999
+ expected_schema[STRUCTIFY_JOB_ID_COLUMN] = pl.String
989
1000
  if collected_df.is_empty():
990
1001
  return pl.DataFrame(schema=expected_schema).lazy()
991
1002
 
@@ -1024,12 +1035,12 @@ class PolarsResource(SyncAPIResource):
1024
1035
  node_id=node_id,
1025
1036
  )
1026
1037
 
1027
- # 3. Collect the results
1038
+ # 3. Collect the results with job_ids
1028
1039
  title = f"Tagging {new_property_name} for {dataframe_name}"
1029
1040
  self._client.jobs.wait_for_jobs(dataset_name=dataset_name, title=title, node_id=node_id)
1030
- results = [
1031
- entity.properties for entity in self._client.datasets.view_table(dataset=dataset_name, name=dataframe_name)
1032
- ]
1041
+ results = _collect_entities_with_job_ids(
1042
+ self._client.datasets.view_table(dataset=dataset_name, name=dataframe_name)
1043
+ )
1033
1044
 
1034
1045
  # 4. Return the results
1035
1046
  return pl.DataFrame(results, schema=expected_schema).lazy()
@@ -1157,6 +1168,7 @@ class PolarsResource(SyncAPIResource):
1157
1168
  "idx1": [match.target_entity_index for match in matches],
1158
1169
  "idx2": [match.source_entity_index for match in matches],
1159
1170
  "match_reason": [match.match_reason for match in matches],
1171
+ STRUCTIFY_JOB_ID_COLUMN: [match.job_id for match in matches],
1160
1172
  }
1161
1173
  else:
1162
1174
  # No swap, return as normal
@@ -1164,6 +1176,7 @@ class PolarsResource(SyncAPIResource):
1164
1176
  "idx1": [match.source_entity_index for match in matches],
1165
1177
  "idx2": [match.target_entity_index for match in matches],
1166
1178
  "match_reason": [match.match_reason for match in matches],
1179
+ STRUCTIFY_JOB_ID_COLUMN: [match.job_id for match in matches],
1167
1180
  }
1168
1181
 
1169
1182
  return pl.DataFrame(matches_in_schema).lazy()
@@ -1182,7 +1195,7 @@ class PolarsResource(SyncAPIResource):
1182
1195
  "/entity/upload_parquet",
1183
1196
  params={"dataset": dataset_name, "table_name": table_name},
1184
1197
  files={"file": ("data.parquet", parquet_bytes.getvalue(), "application/octet-stream")},
1185
- headers={"Authorization": f"Bearer {self._client.session_token}"},
1198
+ headers=self._client.auth_headers,
1186
1199
  )
1187
1200
  response.raise_for_status()
1188
1201
 
@@ -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.179.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=wgYCQOamvnt8XFcVc7rp8aKcLrFsK_GWWmssGhTAKiE,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
@@ -39,7 +39,7 @@ structify/resources/external_dataframe_proxy.py,sha256=DSn0YwWIembR__ZtDxVCJtyY3
39
39
  structify/resources/jobs.py,sha256=gO1aSByi1dMvW90UDsMmNhLHFCOY4ENLkZcAx4gbLHY,30108
40
40
  structify/resources/match.py,sha256=gDWEWnKwEoLbheQAMFltJCk2ysa_L9AuJMOaauM7c4Y,12248
41
41
  structify/resources/nango.py,sha256=Zl0M1XhlVe61jHVd-SdYI9uEbEhIRmskvlk7Xp0Lh8g,9166
42
- structify/resources/polars.py,sha256=W7m8A-q8mdz5-hb3pqcO9q93j5ttMFCGJlEfGWDBFH0,60046
42
+ structify/resources/polars.py,sha256=9uluqVdLXu5ZpR9-v7B6i3TJVV47zKtILOJwAzz5lkU,60817
43
43
  structify/resources/projects.py,sha256=YDikBDB9D1EXyZ2GyRx4GlpQ83snw51YlNuU1sLHqho,14117
44
44
  structify/resources/public_sessions.py,sha256=_JmssE0MMjeGdxT0FWtrkcceSV4skeEkVGYeO2FkJes,9976
45
45
  structify/resources/sandbox.py,sha256=KgpZ623G6T_3_oovCgjlxO81M63NanMBAezVDdesOCc,12807
@@ -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.179.0.dist-info/METADATA,sha256=ZntSnSVPD0ghtVBXKP4ejLLRTP16yvtcTVfH2QFZCPw,16399
500
+ structifyai-1.179.0.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
501
+ structifyai-1.179.0.dist-info/licenses/LICENSE,sha256=9CwgrmGz3rZSTT-KqGc1gua-7g8B4ThTgMtUgPALh5c,11339
502
+ structifyai-1.179.0.dist-info/RECORD,,