openai-sdk-helpers 0.6.1__py3-none-any.whl → 0.6.4__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.
@@ -3,7 +3,10 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from enum import Enum
6
- from typing import Any, Iterable, Optional, cast
6
+ from typing import Any, Iterable, Optional, Sequence, cast
7
+
8
+ PATH_DELIMITER = " > "
9
+ PATH_ESCAPE_TOKEN = "\\>"
7
10
 
8
11
  from .base import StructureBase, spec_field
9
12
 
@@ -30,18 +33,26 @@ class TaxonomyNode(StructureBase):
30
33
  Return True when the taxonomy node has no children.
31
34
  child_by_path(path)
32
35
  Return the child node matching the provided path.
36
+ path_identifier
37
+ Return the path identifier string for the node.
38
+ keywords
39
+ Return a list of keywords for the node.
40
+ computed_description
41
+ Return the computed description for the node.
42
+ flattened_nodes
43
+ Return a flattened list of all taxonomy nodes.
33
44
  """
34
45
 
35
46
  label: str = spec_field(
36
- "label", description="Human-readable label for the taxonomy node."
47
+ name="label", description="Human-readable label for the taxonomy node."
37
48
  )
38
49
  description: str | None = spec_field(
39
- "description",
50
+ name="description",
40
51
  description="Optional description of the taxonomy node.",
41
52
  default=None,
42
53
  )
43
54
  children: list["TaxonomyNode"] = spec_field(
44
- "children",
55
+ name="children",
45
56
  description="Child nodes in the taxonomy.",
46
57
  default_factory=list,
47
58
  )
@@ -103,7 +114,7 @@ class TaxonomyNode(StructureBase):
103
114
  if path is None:
104
115
  return None
105
116
  if isinstance(path, str):
106
- path_segments = _split_path_identifier(path)
117
+ path_segments = split_path_identifier(path)
107
118
  else:
108
119
  path_segments = list(path)
109
120
  last_segment = path_segments[-1] if path_segments else None
@@ -114,8 +125,142 @@ class TaxonomyNode(StructureBase):
114
125
  None,
115
126
  )
116
127
 
128
+ @property
129
+ def path_identifier(self) -> str:
130
+ """Return the path identifier string for this node.
131
+
132
+ Returns
133
+ -------
134
+ str
135
+ Delimited path identifier.
136
+ """
137
+ return format_path_identifier(self.computed_path)
138
+
139
+ @property
140
+ def keywords(self) -> list[str]:
141
+ """Return a list of keywords for this node.
142
+
143
+ Returns
144
+ -------
145
+ list[str]
146
+ Unique list of keywords derived from the node and descendants.
147
+ """
148
+ keywords = [self.label]
149
+ for child in self.children:
150
+ keywords.extend(child.keywords)
151
+ return list(dict.fromkeys(filter(None, keywords)))
152
+
153
+ @property
154
+ def computed_description(self) -> str:
155
+ """Return the computed description for this node.
156
+
157
+ Returns
158
+ -------
159
+ str
160
+ Node description with optional keyword context.
161
+ """
162
+ keywords = self.keywords
163
+ base = self.description or self.label
164
+ if len(keywords) == 1 and keywords[0] == self.label:
165
+ return base
166
+ if keywords:
167
+ return f"{base}\nKeywords: {', '.join(keywords)}"
168
+ return base
169
+
170
+ @property
171
+ def flattened_nodes(self) -> list[TaxonomyNode]:
172
+ """Return a flattened list of all taxonomy nodes.
173
+
174
+ Returns
175
+ -------
176
+ list[TaxonomyNode]
177
+ Depth-first list of taxonomy nodes.
178
+ """
179
+ flattened: list[TaxonomyNode] = []
180
+ for node in self.children:
181
+ flattened.append(node)
182
+ flattened.extend(node.flattened_nodes)
183
+ return flattened
184
+
185
+
186
+ class Taxonomy(TaxonomyNode):
187
+ """Represent a taxonomy with metadata and root nodes.
188
+
189
+ Attributes
190
+ ----------
191
+ label : str
192
+ Human-readable taxonomy name.
193
+ description : str | None
194
+ Optional description of the taxonomy.
195
+ children : list[TaxonomyNode]
196
+ Root taxonomy nodes.
197
+
198
+ Methods
199
+ -------
200
+ root(label, *children)
201
+ Create a taxonomy from root nodes.
202
+ build_path(parent_path)
203
+ Build a computed path using the provided parent path segments.
204
+ computed_path
205
+ Return the computed path for the node.
206
+ is_leaf
207
+ Return True when the taxonomy node has no children.
208
+ child_by_path(path)
209
+ Return the child node matching the provided path.
210
+ path_identifier
211
+ Return the path identifier string for the node.
212
+ keywords
213
+ Return a list of keywords for the node.
214
+ computed_description
215
+ Return the computed description for the node.
216
+ flattened_nodes
217
+ Return a flattened list of all taxonomy nodes.
218
+ """
219
+
220
+ def __init__(
221
+ self,
222
+ *,
223
+ label: str,
224
+ description: str | None = None,
225
+ children: list[TaxonomyNode] | None = None,
226
+ ) -> None:
227
+ """Initialize a taxonomy with name and root nodes.
228
+
229
+ Parameters
230
+ ----------
231
+ label : str
232
+ Human-readable taxonomy name.
233
+ description : str or None, default=None
234
+ Optional description of the taxonomy.
235
+ children : list[TaxonomyNode] or None, default=None
236
+ Root taxonomy nodes. Defaults to an empty list.
237
+ """
238
+ super().__init__(
239
+ label=label,
240
+ description=description,
241
+ children=children or [],
242
+ )
243
+
244
+ @classmethod
245
+ def root(cls, label: str, *children: TaxonomyNode) -> "Taxonomy":
246
+ """Create a taxonomy from root nodes.
247
+
248
+ Parameters
249
+ ----------
250
+ label : str
251
+ Human-readable taxonomy name.
252
+ *children : TaxonomyNode
253
+ Root taxonomy nodes.
254
+
255
+ Returns
256
+ -------
257
+ Taxonomy
258
+ Taxonomy instance with provided root nodes.
259
+ """
260
+ return cls(label=label, children=list(children))
261
+
117
262
 
118
- def _split_path_identifier(path: str) -> list[str]:
263
+ def split_path_identifier(path: str) -> list[str]:
119
264
  """Split a path identifier into label segments.
120
265
 
121
266
  Parameters
@@ -128,10 +273,27 @@ def _split_path_identifier(path: str) -> list[str]:
128
273
  list[str]
129
274
  Label segments extracted from the path identifier.
130
275
  """
131
- delimiter = " > "
132
- escape_token = "\\>"
133
- segments = path.split(delimiter) if path else []
134
- return [segment.replace(escape_token, delimiter) for segment in segments]
276
+ segments = path.split(PATH_DELIMITER) if path else []
277
+ return [segment.replace(PATH_ESCAPE_TOKEN, PATH_DELIMITER) for segment in segments]
278
+
279
+
280
+ def format_path_identifier(path_segments: Sequence[str]) -> str:
281
+ """Format path segments into a safe identifier string.
282
+
283
+ Parameters
284
+ ----------
285
+ path_segments : Sequence[str]
286
+ Path segments to format.
287
+
288
+ Returns
289
+ -------
290
+ str
291
+ Escaped path identifier string.
292
+ """
293
+ escaped_segments = [
294
+ segment.replace(PATH_DELIMITER, PATH_ESCAPE_TOKEN) for segment in path_segments
295
+ ]
296
+ return PATH_DELIMITER.join(escaped_segments)
135
297
 
136
298
 
137
299
  class ClassificationStopReason(str, Enum):
@@ -171,8 +333,6 @@ class ClassificationStep(StructureBase):
171
333
 
172
334
  Attributes
173
335
  ----------
174
- selected_node : Enum or None
175
- Enum value of the selected taxonomy node.
176
336
  selected_nodes : list[Enum] or None
177
337
  Enum values of selected taxonomy nodes for multi-class classification.
178
338
  confidence : float or None
@@ -204,11 +364,6 @@ class ClassificationStep(StructureBase):
204
364
  [<NodeEnum.BILLING: 'billing'>]
205
365
  """
206
366
 
207
- selected_node: Enum | None = spec_field(
208
- "selected_node",
209
- description="Path identifier of the selected taxonomy node.",
210
- default=None,
211
- )
212
367
  selected_nodes: list[Enum] | None = spec_field(
213
368
  "selected_nodes",
214
369
  description="Path identifiers of selected taxonomy nodes.",
@@ -247,14 +402,8 @@ class ClassificationStep(StructureBase):
247
402
  """
248
403
  namespace: dict[str, Any] = {
249
404
  "__annotations__": {
250
- "selected_node": enum_cls | None,
251
405
  "selected_nodes": list[enum_cls] | None,
252
406
  },
253
- "selected_node": spec_field(
254
- "selected_node",
255
- description="Path identifier of the selected taxonomy node.",
256
- default=None,
257
- ),
258
407
  "selected_nodes": spec_field(
259
408
  "selected_nodes",
260
409
  description="Path identifiers of selected taxonomy nodes.",
@@ -275,16 +424,14 @@ class ClassificationStep(StructureBase):
275
424
  --------
276
425
  >>> NodeEnum = Enum("NodeEnum", {"ROOT": "root"})
277
426
  >>> StepEnum = ClassificationStep.build_for_enum(NodeEnum)
278
- >>> step = StepEnum(selected_node=NodeEnum.ROOT)
279
- >>> step.as_summary()["selected_node"]
280
- <NodeEnum.ROOT: 'root'>
427
+ >>> step = StepEnum(selected_nodes=[NodeEnum.ROOT])
428
+ >>> step.as_summary()["selected_nodes"]
429
+ [<NodeEnum.ROOT: 'root'>]
281
430
  """
282
- selected_node = _normalize_enum_value(self.selected_node)
283
431
  selected_nodes = [
284
432
  _normalize_enum_value(item) for item in self.selected_nodes or []
285
433
  ]
286
434
  return {
287
- "selected_node": selected_node,
288
435
  "selected_nodes": selected_nodes or None,
289
436
  "confidence": self.confidence,
290
437
  "stop_reason": self.stop_reason.value,
@@ -314,25 +461,25 @@ class ClassificationResult(StructureBase):
314
461
 
315
462
  Attributes
316
463
  ----------
317
- final_node : TaxonomyNode or None
318
- Resolved taxonomy node for the final selection.
319
464
  final_nodes : list[TaxonomyNode] or None
320
465
  Resolved taxonomy nodes for the final selections across branches.
321
466
  confidence : float or None
322
467
  Confidence score for the final selection.
323
468
  stop_reason : ClassificationStopReason
324
469
  Reason the traversal ended.
325
- path : list[ClassificationStep]
470
+ steps : list[ClassificationStep]
326
471
  Ordered list of classification steps.
327
- path_nodes : list[TaxonomyNode]
328
- Resolved taxonomy nodes selected across the path.
329
472
 
330
473
  Methods
331
474
  -------
332
475
  depth
333
476
  Return the number of classification steps recorded.
334
- path_identifiers
335
- Return the identifiers selected at each step.
477
+ final_node
478
+ Return the first resolved taxonomy node, if available.
479
+ iter_selected_nodes
480
+ Yield selected identifiers across all steps.
481
+ selected_nodes
482
+ Return the selected identifiers across all steps.
336
483
 
337
484
  Examples
338
485
  --------
@@ -340,7 +487,6 @@ class ClassificationResult(StructureBase):
340
487
 
341
488
  >>> node = TaxonomyNode(label="Tax")
342
489
  >>> result = ClassificationResult(
343
- ... final_node=node,
344
490
  ... final_nodes=[node],
345
491
  ... confidence=0.91,
346
492
  ... stop_reason=ClassificationStopReason.STOP,
@@ -349,11 +495,6 @@ class ClassificationResult(StructureBase):
349
495
  [TaxonomyNode(label='Tax', description=None, children=[])]
350
496
  """
351
497
 
352
- final_node: TaxonomyNode | None = spec_field(
353
- "final_node",
354
- description="Resolved taxonomy node for the final selection.",
355
- default=None,
356
- )
357
498
  final_nodes: list[TaxonomyNode] | None = spec_field(
358
499
  "final_nodes",
359
500
  description="Resolved taxonomy nodes for the final selections.",
@@ -369,16 +510,11 @@ class ClassificationResult(StructureBase):
369
510
  description="Reason the traversal ended.",
370
511
  default=ClassificationStopReason.STOP,
371
512
  )
372
- path: list[ClassificationStep] = spec_field(
373
- "path",
513
+ steps: list[ClassificationStep] = spec_field(
514
+ "steps",
374
515
  description="Ordered list of classification steps.",
375
516
  default_factory=list,
376
517
  )
377
- path_nodes: list[TaxonomyNode] = spec_field(
378
- "path_nodes",
379
- description="Resolved taxonomy nodes selected across the path.",
380
- default_factory=list,
381
- )
382
518
 
383
519
  @property
384
520
  def depth(self) -> int:
@@ -389,65 +525,84 @@ class ClassificationResult(StructureBase):
389
525
  int
390
526
  Count of classification steps.
391
527
  """
392
- return len(self.path)
528
+ return len(self.steps)
393
529
 
394
530
  @property
395
- def path_identifiers(self) -> list[str]:
396
- """Return the identifiers selected at each step.
531
+ def final_node(self) -> TaxonomyNode | None:
532
+ """Return the first resolved taxonomy node.
533
+
534
+ Returns
535
+ -------
536
+ TaxonomyNode or None
537
+ First resolved taxonomy node, if available.
538
+ """
539
+ if not self.final_nodes:
540
+ return None
541
+ return self.final_nodes[0]
542
+
543
+ @property
544
+ def selected_nodes(self) -> list[str]:
545
+ """Return the selected identifiers across all steps.
397
546
 
398
547
  Returns
399
548
  -------
400
549
  list[str]
401
- Identifiers selected at each classification step.
550
+ Selected identifiers in traversal order.
551
+ """
552
+ return list(self.iter_selected_nodes())
402
553
 
403
- Examples
404
- --------
405
- >>> steps = [
406
- ... ClassificationStep(selected_node="Root"),
407
- ... ClassificationStep(selected_nodes=["Root > Leaf", "Root > Branch"]),
408
- ... ]
409
- >>> ClassificationResult(
410
- ... stop_reason=ClassificationStopReason.STOP,
411
- ... path=steps,
412
- ... ).path_identifiers
413
- ['Root', 'Root > Leaf', 'Root > Branch']
554
+ def iter_selected_nodes(self) -> Iterable[str]:
555
+ """Yield selected identifiers across all steps.
556
+
557
+ Yields
558
+ ------
559
+ str
560
+ Selected identifier in traversal order.
414
561
  """
415
- identifiers: list[str] = []
416
- for step in self.path:
417
- if step.selected_nodes:
418
- identifiers.extend(
419
- _normalize_enum_value(value) for value in step.selected_nodes
420
- )
421
- elif step.selected_node:
422
- identifiers.append(_normalize_enum_value(step.selected_node))
423
- return [identifier for identifier in identifiers if identifier]
562
+ for step in self.steps:
563
+ for value in step.selected_nodes or []:
564
+ normalized = _normalize_enum_value(value)
565
+ if normalized:
566
+ yield normalized
424
567
 
425
568
 
426
- def flatten_taxonomy(nodes: Iterable[TaxonomyNode]) -> list[TaxonomyNode]:
427
- """Return a flattened list of taxonomy nodes.
569
+ def taxonomy_enum_path(value: Enum | str | None) -> list[str]:
570
+ """Return the taxonomy path segments for an enum value.
428
571
 
429
572
  Parameters
430
573
  ----------
431
- nodes : Iterable[TaxonomyNode]
432
- Root nodes to traverse.
574
+ value : Enum or str or None
575
+ Enum member or path identifier string to split. If None, return an
576
+ empty list.
433
577
 
434
578
  Returns
435
579
  -------
436
- list[TaxonomyNode]
437
- Depth-first ordered list of nodes.
580
+ list[str]
581
+ Path segments extracted from the taxonomy identifier.
582
+
583
+ Examples
584
+ --------
585
+ >>> StepEnum = Enum("StepEnum", {"ROOT_LEAF": "Root > Leaf"})
586
+ >>> taxonomy_enum_path(StepEnum.ROOT_LEAF)
587
+ ['Root', 'Leaf']
438
588
  """
439
- flattened: list[TaxonomyNode] = []
440
- for node in nodes:
441
- flattened.append(node)
442
- if node.children:
443
- flattened.extend(flatten_taxonomy(node.children))
444
- return flattened
589
+ if value is None:
590
+ return []
591
+ normalized_value = _normalize_enum_value(value)
592
+ if not normalized_value:
593
+ return []
594
+ if not isinstance(normalized_value, str):
595
+ normalized_value = str(normalized_value)
596
+ return split_path_identifier(normalized_value)
445
597
 
446
598
 
447
599
  __all__ = [
448
600
  "ClassificationResult",
449
601
  "ClassificationStep",
450
602
  "ClassificationStopReason",
603
+ "Taxonomy",
451
604
  "TaxonomyNode",
452
- "flatten_taxonomy",
605
+ "format_path_identifier",
606
+ "split_path_identifier",
607
+ "taxonomy_enum_path",
453
608
  ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openai-sdk-helpers
3
- Version: 0.6.1
3
+ Version: 0.6.4
4
4
  Summary: Composable helpers for OpenAI SDK agents, prompts, and storage
5
5
  Author: openai-sdk-helpers maintainers
6
6
  License: MIT
@@ -2,20 +2,21 @@ openai_sdk_helpers/__init__.py,sha256=8I469KuzrbAjhNX2A5UnYt_kSmjXqQbfHectTeUx7T
2
2
  openai_sdk_helpers/cli.py,sha256=BDc08NqWVfL4GBekxMfN5IPPB4pmN1Od9sVpKtIJRZk,8025
3
3
  openai_sdk_helpers/environment.py,sha256=mNoswzIdv37tTRhFwA2B6_Onxsm7vhfjPArfwhYuL7g,1825
4
4
  openai_sdk_helpers/errors.py,sha256=ZclLp94o08fSsFNjFn_yrX9yTjw1RE0v7A5T1hBChUc,2925
5
- openai_sdk_helpers/files_api.py,sha256=Sg-k4YDsrzggvICYA7h4Ua6_vGhMpZmAeS5JtQVE2hU,12598
5
+ openai_sdk_helpers/files_api.py,sha256=kn-A2pwiNkxMd035PkWDLi_EWzccuEnGyMpLQcY-aVY,14086
6
6
  openai_sdk_helpers/logging.py,sha256=djtMo_R_88JjxJeUGU_hSlYCTRv3ffoSu1ocOKrUBIw,1153
7
7
  openai_sdk_helpers/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  openai_sdk_helpers/settings.py,sha256=9qTdEIWuvQfQEQI8MU6STUDvbOk-I9FdmAEDjb2Zwx8,13316
9
9
  openai_sdk_helpers/tools.py,sha256=8hhcytpmDfoXV16UQbDmDVV0rhLOn8c_VjXO8XaTFLQ,19000
10
10
  openai_sdk_helpers/types.py,sha256=ejCG0rYqJhjOQvKLoNnzq-TzcKCFt69GVfi7y805NkU,1451
11
- openai_sdk_helpers/agent/__init__.py,sha256=Nyvm8MJB-FhxhOfXD6ohDveSEUDR4KK76ffASCtgNIk,1119
12
- openai_sdk_helpers/agent/base.py,sha256=vEsAZ6FkaQx1vAEJkCArL-ygplOEw4546f36jA2R6Ws,26488
13
- openai_sdk_helpers/agent/classifier.py,sha256=6RjWhCz-hAWdHooShdUUFn0FkSWH4QZZogkRKML0S3k,25864
14
- openai_sdk_helpers/agent/configuration.py,sha256=FU3xnb8-8qoezLW47WwxZg7z2AxNXRW1Svl0FMsk8kc,14244
11
+ openai_sdk_helpers/agent/__init__.py,sha256=qyzKzPhD8KsEl6d79XERK32AK5It_BZNOqChOpBdmhg,1199
12
+ openai_sdk_helpers/agent/base.py,sha256=vLs0oALhxsd_Xy5dGjSZTUFTug-YwZkF1LabQ2ruLxk,29508
13
+ openai_sdk_helpers/agent/classifier.py,sha256=PHUnA5dSDWBQeRxwo0Qe8xIe7Ren3xSRAOmsQrRK_oA,33241
14
+ openai_sdk_helpers/agent/configuration.py,sha256=ZeH4ErgVe-BZamjUeNONbQi60ViolgYAWh-c8hNAQTw,15810
15
15
  openai_sdk_helpers/agent/coordinator.py,sha256=lVjA0yI-GhGKlqbNR_k9GOCrUjFoZ0QoqRaafHckyME,18052
16
- openai_sdk_helpers/agent/runner.py,sha256=l2NPS9VA9d4RISuBfanFfKxXNYSHQ7MTjRsuzx4APls,3473
16
+ openai_sdk_helpers/agent/files.py,sha256=H7UfSZSjFUbv1cjRvNld9kZwIjc5wPq4vynqU8HgGJE,4478
17
+ openai_sdk_helpers/agent/runner.py,sha256=uNf8FiLIlZsbSvE-CopYhv5sPAyxU2te0OaBBxO9RWY,3613
17
18
  openai_sdk_helpers/agent/summarizer.py,sha256=-yVm-KdTvGRXGj1MlEikTAFYVlPoovLNIL3Tc_WYIzs,3653
18
- openai_sdk_helpers/agent/translator.py,sha256=6Gj1cqT-W5j32F14sY9kOCFQenq_odceu2fi8hud_Z0,5970
19
+ openai_sdk_helpers/agent/translator.py,sha256=Skke5wyZTpo_9gMcwHRyoBQl00zTBeXnIUujUIr2ZDE,6017
19
20
  openai_sdk_helpers/agent/utils.py,sha256=DTD5foCqGYfXf13F2bZMYIQROl7SbDSy5GDPGi0Zl-0,1089
20
21
  openai_sdk_helpers/agent/validator.py,sha256=krktzjaHhEprn76F7hD4cH6H2CwucmFN1KWJ_vjl01g,4774
21
22
  openai_sdk_helpers/agent/search/__init__.py,sha256=LXXzEcX2MU7_htHRdRCGPw0hsr9CrZn0ESii7GZJMBw,806
@@ -29,7 +30,7 @@ openai_sdk_helpers/extract/extractor.py,sha256=vmRJyhKDEYAVfRk0KMgLH5hTqUfDAUyWB
29
30
  openai_sdk_helpers/extract/generator.py,sha256=K9Euq0IaWs82oe5aRm73_18DelLKYyuH8VhfZ1_ZCEU,14695
30
31
  openai_sdk_helpers/prompt/__init__.py,sha256=MOqgKwG9KLqKudoKRlUfLxiSmdOi2aD6hNrWDFqLHkk,418
31
32
  openai_sdk_helpers/prompt/base.py,sha256=6X0zeopEvO0ba8207O8Nnj1QvFZEZier7kNNh4qkcmE,7782
32
- openai_sdk_helpers/prompt/classifier.jinja,sha256=PgJ8tvnuOcEa4DGbOqIrEyrG0GJ26bBpTZ7FlRZoL-s,1239
33
+ openai_sdk_helpers/prompt/classifier.jinja,sha256=u4gTwImOdKHu9qRdnnhl2aX23ns2THYYh6l8bc2EeNo,1866
33
34
  openai_sdk_helpers/prompt/extractor_config_agent_instructions.jinja,sha256=vCrsoUnsgHWSr7OS_ojMUjmPtHfbyv9bzKfaMaCJ99E,329
34
35
  openai_sdk_helpers/prompt/extractor_config_generator.jinja,sha256=9rZ1PZdoQtnxDxFUlKRb0SooIEfNw4_Em99n9xvFyyU,960
35
36
  openai_sdk_helpers/prompt/extractor_config_generator_instructions.jinja,sha256=GqV3DrGObyER_Fa-GMGGqhWBrQIH9FFlyKdgTjidyzg,534
@@ -54,10 +55,10 @@ openai_sdk_helpers/response/vector_store.py,sha256=HClp6O_g20uklQTY7trC4age3rtDm
54
55
  openai_sdk_helpers/streamlit_app/__init__.py,sha256=3yAkl6qV71cqtT5YFZuC9Bkqit0NtffDV6jmMWpT1k4,812
55
56
  openai_sdk_helpers/streamlit_app/app.py,sha256=kkjtdCKVwrJ9nZWuBArm3dhvcjMESX0TMqAiF61_JLM,17402
56
57
  openai_sdk_helpers/streamlit_app/configuration.py,sha256=0KeJ4HqCNFthBHsedV6ptqHluAcTPBb5_TujFOGkIUU,16685
57
- openai_sdk_helpers/structure/__init__.py,sha256=-_bEFvvKhg99bgsMnimpxx7RpLQpQyReSMquOc-2Ts8,4173
58
+ openai_sdk_helpers/structure/__init__.py,sha256=w27ezTYVLzZdDMFfA8mawE82h8zO53idFBCiCfYfh7s,4321
58
59
  openai_sdk_helpers/structure/agent_blueprint.py,sha256=VyJWkgPNzAYKRDMeR1M4kE6qqQURnwqtrrEn0TRJf0g,9698
59
60
  openai_sdk_helpers/structure/base.py,sha256=UrnNNU9qQ9mEES8MB9y6QESbDgPXH47XW8LVWSxYUYM,25280
60
- openai_sdk_helpers/structure/classification.py,sha256=q7d9x2Ya7ICBr6rk5SOSrQrW5lDLat345wHQisKZO7Y,13351
61
+ openai_sdk_helpers/structure/classification.py,sha256=SYrrsv0Y2A2kXhL3jbn7lWnTb5jB_UE-cx-sJSRCxEA,17312
61
62
  openai_sdk_helpers/structure/extraction.py,sha256=wODP0iLAhhsdQkMWRYPYTiLUMU8bFMKiBjPl3PKUleg,37335
62
63
  openai_sdk_helpers/structure/prompt.py,sha256=ZfsaHdA0hj5zmZDrOdpXjCsC8U-jjzwFG4JBsWYiaH4,1535
63
64
  openai_sdk_helpers/structure/responses.py,sha256=WUwh0DhXj24pkvgqH1FMkdx5V2ArdvdtrDN_fuMBtDU,4882
@@ -91,8 +92,8 @@ openai_sdk_helpers/vector_storage/__init__.py,sha256=L5LxO09puh9_yBB9IDTvc1CvVkA
91
92
  openai_sdk_helpers/vector_storage/cleanup.py,sha256=sZ4ZSTlnjF52o9Cc8A9dTX37ZYXXDxS_fdIpoOBWvrg,3666
92
93
  openai_sdk_helpers/vector_storage/storage.py,sha256=t_ukacaXRa9EXE4-3BxsrB4Rjhu6nTu7NA9IjCJBIpQ,24259
93
94
  openai_sdk_helpers/vector_storage/types.py,sha256=jTCcOYMeOpZWvcse0z4T3MVs-RBOPC-fqWTBeQrgafU,1639
94
- openai_sdk_helpers-0.6.1.dist-info/METADATA,sha256=S0KXq5lr2GHbi8uYDac-sn7W4ug5WlIjMqNXjXXHBj0,24622
95
- openai_sdk_helpers-0.6.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
96
- openai_sdk_helpers-0.6.1.dist-info/entry_points.txt,sha256=gEOD1ZeXe8d2OP-KzUlG-b_9D9yUZTCt-GFW3EDbIIY,63
97
- openai_sdk_helpers-0.6.1.dist-info/licenses/LICENSE,sha256=CUhc1NrE50bs45tcXF7OcTQBKEvkUuLqeOHgrWQ5jaA,1067
98
- openai_sdk_helpers-0.6.1.dist-info/RECORD,,
95
+ openai_sdk_helpers-0.6.4.dist-info/METADATA,sha256=l5XBsVFPOrOSDskGR0ZhgKHjJFLtO_-ZgWrRjXi1_bU,24622
96
+ openai_sdk_helpers-0.6.4.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
97
+ openai_sdk_helpers-0.6.4.dist-info/entry_points.txt,sha256=gEOD1ZeXe8d2OP-KzUlG-b_9D9yUZTCt-GFW3EDbIIY,63
98
+ openai_sdk_helpers-0.6.4.dist-info/licenses/LICENSE,sha256=CUhc1NrE50bs45tcXF7OcTQBKEvkUuLqeOHgrWQ5jaA,1067
99
+ openai_sdk_helpers-0.6.4.dist-info/RECORD,,