openai-sdk-helpers 0.4.0__py3-none-any.whl → 0.4.1__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,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from .base import AgentBase
6
- from .config import AgentConfiguration, AgentConfigurationRegistry, get_default_registry
6
+ from .config import AgentConfiguration, AgentRegistry, get_default_registry
7
7
  from ..structure.plan.enum import AgentEnum
8
8
  from .coordination import CoordinatorAgent
9
9
  from .runner import run_sync, run_async, run_streamed
@@ -18,7 +18,7 @@ from .search.web import WebAgentSearch
18
18
  __all__ = [
19
19
  "AgentBase",
20
20
  "AgentConfiguration",
21
- "AgentConfigurationRegistry",
21
+ "AgentRegistry",
22
22
  "get_default_registry",
23
23
  "AgentEnum",
24
24
  "CoordinatorAgent",
@@ -3,7 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from pathlib import Path
6
- from typing import Any, Dict, Optional, Protocol, cast
6
+ from typing import Any, Callable, Dict, Optional, Protocol, cast
7
7
  import uuid
8
8
 
9
9
  from agents import (
@@ -30,7 +30,7 @@ from ..utils import (
30
30
  from .runner import run_async, run_streamed, run_sync
31
31
 
32
32
 
33
- class AgentConfigurationLike(Protocol):
33
+ class AgentConfigurationProtocol(Protocol):
34
34
  """Protocol describing the configuration attributes for AgentBase."""
35
35
 
36
36
  @property
@@ -188,7 +188,7 @@ class AgentBase(DataclassJSONSerializable):
188
188
  def __init__(
189
189
  self,
190
190
  *,
191
- config: AgentConfigurationLike,
191
+ config: AgentConfigurationProtocol,
192
192
  run_context_wrapper: Optional[RunContextWrapper[Dict[str, Any]]] = None,
193
193
  data_path: Path | str | None = None,
194
194
  prompt_dir: Optional[Path] = None,
@@ -198,7 +198,7 @@ class AgentBase(DataclassJSONSerializable):
198
198
 
199
199
  Parameters
200
200
  ----------
201
- config : AgentConfigurationLike
201
+ config : AgentConfigurationProtocol
202
202
  Configuration describing this agent.
203
203
  run_context_wrapper : RunContextWrapper or None, default=None
204
204
  Optional wrapper providing runtime context for prompt rendering.
@@ -428,7 +428,7 @@ class AgentBase(DataclassJSONSerializable):
428
428
  "model": self.model,
429
429
  }
430
430
  if self._output_structure:
431
- agent_config["output_structure"] = self._output_structure
431
+ agent_config["output_type"] = self._output_structure
432
432
  if self._tools:
433
433
  agent_config["tools"] = self._tools
434
434
  if self._model_settings:
@@ -575,6 +575,26 @@ class AgentBase(DataclassJSONSerializable):
575
575
  )
576
576
  return tool_obj
577
577
 
578
+ def as_response_tool(self) -> tuple[dict[str, Callable[..., Any]], dict[str, Any]]:
579
+ """Return the agent as a callable response tool.
580
+
581
+ Returns
582
+ -------
583
+ Tool
584
+ Tool instance wrapping this agent for response generation.
585
+ """
586
+ tool_handler = {self.name: self.run_sync}
587
+ tool_definition = {
588
+ "type": "function",
589
+ "name": self.name,
590
+ "description": self.description,
591
+ "strict": True,
592
+ "additionalProperties": False,
593
+ }
594
+ if self.output_structure:
595
+ tool_definition["parameters"] = self.output_structure.get_schema()
596
+ return tool_handler, tool_definition
597
+
578
598
  def __enter__(self) -> AgentBase:
579
599
  """Enter the context manager for resource management.
580
600
 
@@ -651,4 +671,4 @@ class AgentBase(DataclassJSONSerializable):
651
671
  log(f"Saved messages to {target}")
652
672
 
653
673
 
654
- __all__ = ["AgentConfigurationLike", "AgentBase"]
674
+ __all__ = ["AgentConfigurationProtocol", "AgentBase"]
@@ -10,20 +10,20 @@ from agents import Agent, Handoff, InputGuardrail, OutputGuardrail, Session
10
10
  from agents.model_settings import ModelSettings
11
11
 
12
12
  from ..utils.json.data_class import DataclassJSONSerializable
13
- from ..utils.registry import BaseRegistry
13
+ from ..utils.registry import RegistryBase
14
14
  from ..utils.instructions import resolve_instructions_from_path
15
15
  from ..structure.base import StructureBase
16
16
 
17
17
 
18
- class AgentConfigurationRegistry(BaseRegistry["AgentConfiguration"]):
18
+ class AgentRegistry(RegistryBase["AgentConfiguration"]):
19
19
  """Registry for managing AgentConfiguration instances.
20
20
 
21
- Inherits from BaseRegistry to provide centralized storage and retrieval
21
+ Inherits from RegistryBase to provide centralized storage and retrieval
22
22
  of agent configurations, enabling reusable agent specs across the application.
23
23
 
24
24
  Examples
25
25
  --------
26
- >>> registry = AgentConfigurationRegistry()
26
+ >>> registry = AgentRegistry()
27
27
  >>> config = AgentConfiguration(
28
28
  ... name="test_agent",
29
29
  ... model="gpt-4o-mini",
@@ -65,7 +65,7 @@ class AgentConfigurationRegistry(BaseRegistry["AgentConfiguration"]):
65
65
 
66
66
  Examples
67
67
  --------
68
- >>> registry = AgentConfigurationRegistry()
68
+ >>> registry = AgentRegistry()
69
69
  >>> count = registry.load_from_directory("./agents")
70
70
  >>> print(f"Loaded {count} configurations")
71
71
  """
@@ -74,12 +74,12 @@ class AgentConfigurationRegistry(BaseRegistry["AgentConfiguration"]):
74
74
  return super().load_from_directory(path, config_class=config_class)
75
75
 
76
76
 
77
- def get_default_registry() -> AgentConfigurationRegistry:
77
+ def get_default_registry() -> AgentRegistry:
78
78
  """Return the global default registry instance.
79
79
 
80
80
  Returns
81
81
  -------
82
- AgentConfigurationRegistry
82
+ AgentRegistry
83
83
  Singleton registry for application-wide configuration storage.
84
84
 
85
85
  Examples
@@ -424,6 +424,6 @@ class AgentConfiguration(DataclassJSONSerializable):
424
424
 
425
425
 
426
426
  # Global default registry instance
427
- _default_registry = AgentConfigurationRegistry()
427
+ _default_registry = AgentRegistry()
428
428
 
429
- __all__ = ["AgentConfiguration", "AgentConfigurationRegistry", "get_default_registry"]
429
+ __all__ = ["AgentConfiguration", "AgentRegistry", "get_default_registry"]
@@ -10,17 +10,17 @@ from ..config import OpenAISettings
10
10
  from ..structure.base import StructureBase
11
11
  from ..response.base import ResponseBase, ToolHandler
12
12
  from ..utils.json.data_class import DataclassJSONSerializable
13
- from ..utils.registry import BaseRegistry
13
+ from ..utils.registry import RegistryBase
14
14
  from ..utils.instructions import resolve_instructions_from_path
15
15
 
16
16
  TIn = TypeVar("TIn", bound="StructureBase")
17
17
  TOut = TypeVar("TOut", bound="StructureBase")
18
18
 
19
19
 
20
- class ResponseRegistry(BaseRegistry["ResponseConfiguration"]):
20
+ class ResponseRegistry(RegistryBase["ResponseConfiguration"]):
21
21
  """Registry for managing ResponseConfiguration instances.
22
22
 
23
- Inherits from BaseRegistry to provide centralized storage and retrieval
23
+ Inherits from RegistryBase to provide centralized storage and retrieval
24
24
  of response configurations, enabling reusable response specs across the application.
25
25
 
26
26
  Examples
@@ -108,8 +108,6 @@ class ResponseConfiguration(DataclassJSONSerializable, Generic[TIn, TOut]):
108
108
  -------
109
109
  __post_init__()
110
110
  Validate configuration invariants and enforce StructureBase subclassing.
111
- instructions_text
112
- Return the resolved instruction content as a string.
113
111
  to_json()
114
112
  Return a JSON-compatible dict representation (inherited from JSONSerializable).
115
113
  to_json_file(filepath)
@@ -138,6 +136,7 @@ class ResponseConfiguration(DataclassJSONSerializable, Generic[TIn, TOut]):
138
136
  output_structure: Optional[Type[TOut]]
139
137
  system_vector_store: Optional[list[str]] = None
140
138
  add_output_instructions: bool = True
139
+ add_web_search_tool: bool = False
141
140
 
142
141
  def __post_init__(self) -> None:
143
142
  """
@@ -185,7 +184,7 @@ class ResponseConfiguration(DataclassJSONSerializable, Generic[TIn, TOut]):
185
184
  raise TypeError("Configuration.tools must be a Sequence or None")
186
185
 
187
186
  @property
188
- def instructions_text(self) -> str:
187
+ def get_resolved_instructions(self) -> str:
189
188
  """Return the resolved instruction text.
190
189
 
191
190
  Returns
@@ -204,6 +203,20 @@ class ResponseConfiguration(DataclassJSONSerializable, Generic[TIn, TOut]):
204
203
 
205
204
  return resolved_instructions
206
205
 
206
+ @property
207
+ def get_resolved_tools(self) -> list:
208
+ """Return the complete list of tools, including optional web search tool.
209
+
210
+ Returns
211
+ -------
212
+ list
213
+ List of tool definitions, including web search tool if enabled.
214
+ """
215
+ tools = self.tools or []
216
+ if self.add_web_search_tool:
217
+ tools = tools + [{"type": "web_search"}]
218
+ return tools
219
+
207
220
  def gen_response(
208
221
  self,
209
222
  *,
@@ -229,8 +242,8 @@ class ResponseConfiguration(DataclassJSONSerializable, Generic[TIn, TOut]):
229
242
  """
230
243
  return ResponseBase[TOut](
231
244
  name=self.name,
232
- instructions=self.instructions_text,
233
- tools=self.tools,
245
+ instructions=self.get_resolved_instructions,
246
+ tools=self.get_resolved_tools,
234
247
  output_structure=self.output_structure,
235
248
  system_vector_store=self.system_vector_store,
236
249
  data_path=data_path,
@@ -8,23 +8,23 @@ Classes
8
8
  -------
9
9
  StreamlitAppConfig
10
10
  Validated configuration for Streamlit chat applications.
11
+ StreamlitAppRegistry
12
+ Registry for storing Streamlit app configurations.
11
13
 
12
14
  Functions
13
15
  ---------
14
- load_app_config
15
- Load and validate configuration from a Python module.
16
16
  _load_configuration
17
17
  Load configuration with user-friendly error handling for Streamlit UI.
18
18
  """
19
19
 
20
20
  from .config import (
21
21
  StreamlitAppConfig,
22
+ StreamlitAppRegistry,
22
23
  _load_configuration,
23
- load_app_config,
24
24
  )
25
25
 
26
26
  __all__ = [
27
27
  "StreamlitAppConfig",
28
+ "StreamlitAppRegistry",
28
29
  "_load_configuration",
29
- "load_app_config",
30
30
  ]
@@ -15,7 +15,7 @@ from pydantic import ConfigDict, Field, field_validator, model_validator
15
15
 
16
16
  from openai_sdk_helpers.response.base import ResponseBase
17
17
  from openai_sdk_helpers.structure.base import StructureBase
18
- from openai_sdk_helpers.utils import ensure_list
18
+ from openai_sdk_helpers.utils import RegistryBase, ensure_list
19
19
  from ..utils.json import BaseModelJSONSerializable
20
20
 
21
21
 
@@ -29,6 +29,8 @@ class StreamlitAppConfig(BaseModelJSONSerializable):
29
29
 
30
30
  Attributes
31
31
  ----------
32
+ name : str
33
+ Unique configuration identifier. Default is ``"streamlit_app"``.
32
34
  response : ResponseBase, type[ResponseBase], Callable, or None
33
35
  Response handler as an instance, class, or callable factory.
34
36
  display_title : str
@@ -48,8 +50,6 @@ class StreamlitAppConfig(BaseModelJSONSerializable):
48
50
  Return configured system vector stores as a list.
49
51
  create_response()
50
52
  Instantiate and return the configured ResponseBase.
51
- load_app_config(config_path)
52
- Load, validate, and return configuration from a Python module.
53
53
 
54
54
  Examples
55
55
  --------
@@ -63,6 +63,10 @@ class StreamlitAppConfig(BaseModelJSONSerializable):
63
63
 
64
64
  model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
65
65
 
66
+ name: str = Field(
67
+ default="streamlit_app",
68
+ description="Unique configuration identifier used for registry lookup.",
69
+ )
66
70
  response: ResponseBase[StructureBase] | type[ResponseBase] | Callable | None = (
67
71
  Field(
68
72
  default=None,
@@ -225,6 +229,39 @@ class StreamlitAppConfig(BaseModelJSONSerializable):
225
229
  """
226
230
  return _instantiate_response(self.response)
227
231
 
232
+
233
+ class StreamlitAppRegistry(RegistryBase[StreamlitAppConfig]):
234
+ """Registry for managing StreamlitAppConfig instances.
235
+
236
+ Inherits from RegistryBase to provide centralized storage and retrieval
237
+ of Streamlit app configurations, enabling reuse across applications.
238
+
239
+ Methods
240
+ -------
241
+ register(config)
242
+ Add a configuration to the registry.
243
+ get(name)
244
+ Retrieve a configuration by name.
245
+ list_names()
246
+ Return all registered configuration names.
247
+ clear()
248
+ Remove all registered configurations.
249
+ save_to_directory(path)
250
+ Export all registered configurations to JSON files.
251
+ load_from_directory(path)
252
+ Load configurations from JSON files in a directory.
253
+ load_app_config(config_path)
254
+ Load, validate, and return configuration from a Python module.
255
+
256
+ Examples
257
+ --------
258
+ >>> registry = StreamlitAppRegistry()
259
+ >>> config = StreamlitAppConfig(response=MyResponse)
260
+ >>> registry.register(config)
261
+ >>> registry.get(config.name)
262
+ StreamlitAppConfig(...)
263
+ """
264
+
228
265
  @staticmethod
229
266
  def load_app_config(
230
267
  config_path: Path,
@@ -258,7 +295,7 @@ class StreamlitAppConfig(BaseModelJSONSerializable):
258
295
  Examples
259
296
  --------
260
297
  >>> from pathlib import Path
261
- >>> config = StreamlitAppConfig.load_app_config(
298
+ >>> config = StreamlitAppRegistry.load_app_config(
262
299
  ... Path("./my_config.py")
263
300
  ... )
264
301
  """
@@ -433,36 +470,10 @@ def _config_from_mapping(raw_config: dict) -> StreamlitAppConfig:
433
470
  return StreamlitAppConfig(**config_kwargs)
434
471
 
435
472
 
436
- def load_app_config(
437
- config_path: Path,
438
- ) -> StreamlitAppConfig:
439
- """Load and validate Streamlit configuration from a Python module.
440
-
441
- Convenience function that proxies to StreamlitAppConfig.load_app_config
442
- for backward compatibility.
443
-
444
- Parameters
445
- ----------
446
- config_path : Path
447
- Filesystem path to the configuration module.
448
-
449
- Returns
450
- -------
451
- StreamlitAppConfig
452
- Validated configuration loaded from the module.
453
-
454
- Examples
455
- --------
456
- >>> from pathlib import Path
457
- >>> config = load_app_config(Path("./my_config.py"))
458
- """
459
- return StreamlitAppConfig.load_app_config(config_path=config_path)
460
-
461
-
462
473
  def _load_configuration(config_path: Path) -> StreamlitAppConfig:
463
474
  """Load configuration with user-friendly error handling for Streamlit.
464
475
 
465
- Wraps StreamlitAppConfig.load_app_config with exception handling that
476
+ Wraps StreamlitAppRegistry.load_app_config with exception handling that
466
477
  displays errors in the Streamlit UI and halts execution gracefully.
467
478
 
468
479
  Parameters
@@ -487,7 +498,7 @@ def _load_configuration(config_path: Path) -> StreamlitAppConfig:
487
498
  than raising exceptions that crash the app.
488
499
  """
489
500
  try:
490
- return StreamlitAppConfig.load_app_config(config_path=config_path)
501
+ return StreamlitAppRegistry.load_app_config(config_path=config_path)
491
502
  except Exception as exc: # pragma: no cover - surfaced in UI
492
503
  import streamlit as st # type: ignore[import-not-found]
493
504
 
@@ -498,6 +509,6 @@ def _load_configuration(config_path: Path) -> StreamlitAppConfig:
498
509
 
499
510
  __all__ = [
500
511
  "StreamlitAppConfig",
501
- "load_app_config",
512
+ "StreamlitAppRegistry",
502
513
  "_load_configuration",
503
514
  ]
@@ -55,7 +55,7 @@ from .json import (
55
55
  get_module_qualname,
56
56
  to_jsonable,
57
57
  )
58
- from .registry import BaseRegistry
58
+ from .registry import RegistryBase
59
59
 
60
60
  from .path_utils import check_filepath, ensure_directory
61
61
  from openai_sdk_helpers.logging_config import log
@@ -135,5 +135,5 @@ __all__ = [
135
135
  "create_file_data_url",
136
136
  "is_image_file",
137
137
  # Registry
138
- "BaseRegistry",
138
+ "RegistryBase",
139
139
  ]
@@ -4,15 +4,42 @@ from __future__ import annotations
4
4
 
5
5
  import warnings
6
6
  from pathlib import Path
7
- from typing import Generic, TypeVar
7
+ from typing import Generic, Protocol, TypeVar
8
+ from typing_extensions import Self
8
9
 
9
- from ..utils.json.data_class import DataclassJSONSerializable
10
10
  from .path_utils import ensure_directory
11
11
 
12
- T = TypeVar("T", bound=DataclassJSONSerializable)
13
12
 
13
+ class RegistrySerializable(Protocol):
14
+ """Protocol describing serializable registry entries.
14
15
 
15
- class BaseRegistry(Generic[T]):
16
+ Methods
17
+ -------
18
+ to_json_file(filepath)
19
+ Write the instance to a JSON file path.
20
+ from_json_file(filepath)
21
+ Load an instance from a JSON file path.
22
+ """
23
+
24
+ @property
25
+ def name(self) -> str:
26
+ """Return the configuration name."""
27
+ ...
28
+
29
+ def to_json_file(self, filepath: Path | str) -> str:
30
+ """Write serialized JSON data to a file path."""
31
+ ...
32
+
33
+ @classmethod
34
+ def from_json_file(cls, filepath: Path | str) -> Self:
35
+ """Load an instance from a JSON file."""
36
+ ...
37
+
38
+
39
+ T = TypeVar("T", bound=RegistrySerializable)
40
+
41
+
42
+ class RegistryBase(Generic[T]):
16
43
  """Base registry for managing configuration instances.
17
44
 
18
45
  Provides centralized storage and retrieval of configurations,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openai-sdk-helpers
3
- Version: 0.4.0
3
+ Version: 0.4.1
4
4
  Summary: Composable helpers for OpenAI SDK agents, prompts, and storage
5
5
  Author: openai-sdk-helpers maintainers
6
6
  License: MIT
@@ -11,9 +11,9 @@ openai_sdk_helpers/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  openai_sdk_helpers/retry.py,sha256=J10oQYphfzDXm3BnLoXwxk7PAhN93TC2LQOv0VDGOwI,6533
12
12
  openai_sdk_helpers/tools.py,sha256=Awj5htt1ImBbNToM1u6qdrIZ-7MiPZAXZ_oKKiWivy8,10547
13
13
  openai_sdk_helpers/types.py,sha256=xzldCRfwCZ3rZl18IBmfgA-PVdoZKSWNrlSIhirumSo,1451
14
- openai_sdk_helpers/agent/__init__.py,sha256=rWJks5wZ-AP1vsZoxROXCeVen_twE269FJLqdpNIKS0,1086
15
- openai_sdk_helpers/agent/base.py,sha256=5G2ELmdR8wPOLuppzqDzflW2se7pSmfYEf9_drcSN9I,20914
16
- openai_sdk_helpers/agent/config.py,sha256=SOEX0-G0jDgrCNiHFYCMCk-K-oP4fWapTxtDvgF7FXc,15939
14
+ openai_sdk_helpers/agent/__init__.py,sha256=vEI4LG7WJaP6WwCcO_5lE7CEOHOl2vUhY5Ai4El2Syk,1060
15
+ openai_sdk_helpers/agent/base.py,sha256=BZ9EImXFeM9x_79T9tla8cD7CzYDstZBkv4mQkZ7XYk,21635
16
+ openai_sdk_helpers/agent/config.py,sha256=tTw2f0VZmIl8MQrJzdsYFZ-daSrm9mpTdZ1RxFON9Yc,15848
17
17
  openai_sdk_helpers/agent/coordination.py,sha256=VTzyl4RV1q4ugiyFW4Fj7pOAVVO0bMRD63PfQRDwfoQ,18030
18
18
  openai_sdk_helpers/agent/prompt_utils.py,sha256=-1M66tqQxh9wWCFg6X-K7cCcqauca3yA04ZjvOpN3bA,337
19
19
  openai_sdk_helpers/agent/runner.py,sha256=aOVN1OYKK5_u7oFBqRCOOeTgcb-lLl4kZGxuPLmJrMw,4884
@@ -34,15 +34,15 @@ openai_sdk_helpers/prompt/translator.jinja,sha256=SZhW8ipEzM-9IA4wyS_r2wIMTAclWr
34
34
  openai_sdk_helpers/prompt/validator.jinja,sha256=6t8q_IdxFd3mVBGX6SFKNOert1Wo3YpTOji2SNEbbtE,547
35
35
  openai_sdk_helpers/response/__init__.py,sha256=Rh3tBygneOhS-Er_4dtX4Xa69ukvxYv01brq26VpgwQ,1886
36
36
  openai_sdk_helpers/response/base.py,sha256=OA1p9h6EIzwt8VCWFXEalaQHOe0_eZDefqs5jQKu-vU,34844
37
- openai_sdk_helpers/response/config.py,sha256=KsfLKnh8mPTn15l26JK_BCqPj3CqyArW-L30ceYRNpk,8903
37
+ openai_sdk_helpers/response/config.py,sha256=nVEf4KSlBmKHa9Yl78nNi-t60BIwkGqBC2bCRu_q_xQ,9304
38
38
  openai_sdk_helpers/response/files.py,sha256=6iHXeNZg4R08ilQ7D53qIJDQGYPpTLcByAhNJlEwbZ4,13226
39
39
  openai_sdk_helpers/response/messages.py,sha256=qX3sW79rLuJEys28zyv5MovZikwGOaLevzdVN0VYMRE,10104
40
40
  openai_sdk_helpers/response/runner.py,sha256=Rg8XmxU5UwxJc3MjPlYlXWDimxy_cjxzefGiruNZK6s,4269
41
41
  openai_sdk_helpers/response/tool_call.py,sha256=c9Filh4IG5H_RWuJlYl6KUZDaF7mCjkabFRQMNiz7zM,7422
42
42
  openai_sdk_helpers/response/vector_store.py,sha256=cG5Mzdhjw5FsX1phgclIGz2MQ8f8uMKBaage1O2EZQU,3074
43
- openai_sdk_helpers/streamlit_app/__init__.py,sha256=RjJbnBDS5_YmAmxvaa3phB5u9UcXsXDEk_jMlY_pa5Q,793
43
+ openai_sdk_helpers/streamlit_app/__init__.py,sha256=DIXClgbzncsex2vnXUGjBwvykazx4-Bz089beZiq8vc,805
44
44
  openai_sdk_helpers/streamlit_app/app.py,sha256=jNkMQ4zkfojP501qk_vncyLN4TymiDXxA3cXkUvBfsw,17402
45
- openai_sdk_helpers/streamlit_app/config.py,sha256=Jla8IoKsazHBq71pDFUGEv8W23WE18GSmAKcTI5LCww,16042
45
+ openai_sdk_helpers/streamlit_app/config.py,sha256=t1fylt53eVmnNOfBXwpfDyG-Jji9JBUb0ZyrtUWBZ1s,16594
46
46
  openai_sdk_helpers/streamlit_app/streamlit_web_search.py,sha256=21xhBhdTsqK6ybPcLzSKSLOVeK8a3x9y_rRNvNBOAGM,2812
47
47
  openai_sdk_helpers/structure/__init__.py,sha256=jROw0IbXYVRD2Eb3dBMsB6amQZrX8X7XSgGh_zjsZWc,3469
48
48
  openai_sdk_helpers/structure/agent_blueprint.py,sha256=VyJWkgPNzAYKRDMeR1M4kE6qqQURnwqtrrEn0TRJf0g,9698
@@ -60,7 +60,7 @@ openai_sdk_helpers/structure/plan/helpers.py,sha256=Vc6dBTMFrNWlsaCTpEImEIKjfFq4
60
60
  openai_sdk_helpers/structure/plan/plan.py,sha256=CStfSfCdcv7HfLWV_G09xElJvq_kAKi_6JDkB3I7cSI,9663
61
61
  openai_sdk_helpers/structure/plan/task.py,sha256=FSdt2OJ_arC60zMoWIUHMT3U1syWM_7svyTpOIwiRSM,4580
62
62
  openai_sdk_helpers/structure/plan/types.py,sha256=7y9QEVdZreQUXV7n-R4RoNZzw5HeOVbJGWx9QkSfuNY,418
63
- openai_sdk_helpers/utils/__init__.py,sha256=le6bj7RDCM5IQv8lh2mJ1dlnUggwhsNGM_zFYba_4PM,3670
63
+ openai_sdk_helpers/utils/__init__.py,sha256=8SghfmiFhNhMj8Wuop1SAtEt1F8QJb_r4jhi5DtSCDE,3670
64
64
  openai_sdk_helpers/utils/async_utils.py,sha256=9KbPEVfi6IXdbwkTUE0h5DleK8TI7I6P_VPL8UgUv98,3689
65
65
  openai_sdk_helpers/utils/coercion.py,sha256=Pq1u7tAbD7kTZ84lK-7Fb9CyYKKKQt4fypG5BlSI6oQ,3774
66
66
  openai_sdk_helpers/utils/deprecation.py,sha256=VF0VDDegawYhsu5f-vE6dop9ob-jv8egxsm0KsPvP9E,4753
@@ -68,7 +68,7 @@ openai_sdk_helpers/utils/encoding.py,sha256=oDtlNGZ5p-edXiHW76REs-0-8NXkQNReKJdj
68
68
  openai_sdk_helpers/utils/instructions.py,sha256=trbjxjxv2otQR9VmBsPFk1_CJj8nA85Sgtj_5QmQOKI,942
69
69
  openai_sdk_helpers/utils/output_validation.py,sha256=3DC6Hr6vAFx_bQGaLsxkGN_LuKe_MugLpVogMBgG9tc,12621
70
70
  openai_sdk_helpers/utils/path_utils.py,sha256=NOSX7553cc8LqxbnvmdYjgDBi5Le2W2LuMINwFsTzyM,1969
71
- openai_sdk_helpers/utils/registry.py,sha256=qJrhPRbrw3y0gaqvsdUz2IsTRxClWZ4oLqHwhxTJjUc,5873
71
+ openai_sdk_helpers/utils/registry.py,sha256=m59q6qm2IqXRdvdeKB-7H5tiUs1SB-aXTuyhTsVH5E4,6499
72
72
  openai_sdk_helpers/utils/validation.py,sha256=ZjnZNOy5AoFlszRxarNol6YZwfgw6LnwPtkCekZmwAU,7826
73
73
  openai_sdk_helpers/utils/json/__init__.py,sha256=wBm1DBgfy_n1uSUcnCPyqBn_cCq41mijjPigSMZJZqg,2118
74
74
  openai_sdk_helpers/utils/json/base_model.py,sha256=8j__oKly46RRekmRjwFZjAxBHhZkIjMADcJReKo-QsQ,5100
@@ -79,8 +79,8 @@ openai_sdk_helpers/vector_storage/__init__.py,sha256=L5LxO09puh9_yBB9IDTvc1CvVkA
79
79
  openai_sdk_helpers/vector_storage/cleanup.py,sha256=ImWIE-9lli-odD8qIARvmeaa0y8ZD4pYYP-kT0O3178,3552
80
80
  openai_sdk_helpers/vector_storage/storage.py,sha256=A6zJDicObdSOVSlzhHVxEGq_tKO2_bNcsYi94xsKDNI,23655
81
81
  openai_sdk_helpers/vector_storage/types.py,sha256=jTCcOYMeOpZWvcse0z4T3MVs-RBOPC-fqWTBeQrgafU,1639
82
- openai_sdk_helpers-0.4.0.dist-info/METADATA,sha256=bRSOBilp9Y0zr8r2VNKSMTJHSBWoV2aH_HQw7diindo,23557
83
- openai_sdk_helpers-0.4.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
84
- openai_sdk_helpers-0.4.0.dist-info/entry_points.txt,sha256=gEOD1ZeXe8d2OP-KzUlG-b_9D9yUZTCt-GFW3EDbIIY,63
85
- openai_sdk_helpers-0.4.0.dist-info/licenses/LICENSE,sha256=CUhc1NrE50bs45tcXF7OcTQBKEvkUuLqeOHgrWQ5jaA,1067
86
- openai_sdk_helpers-0.4.0.dist-info/RECORD,,
82
+ openai_sdk_helpers-0.4.1.dist-info/METADATA,sha256=AHH6lc1N3igZSpnjxss0wQpxz8EjP-qLY7IBWRRg93g,23557
83
+ openai_sdk_helpers-0.4.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
84
+ openai_sdk_helpers-0.4.1.dist-info/entry_points.txt,sha256=gEOD1ZeXe8d2OP-KzUlG-b_9D9yUZTCt-GFW3EDbIIY,63
85
+ openai_sdk_helpers-0.4.1.dist-info/licenses/LICENSE,sha256=CUhc1NrE50bs45tcXF7OcTQBKEvkUuLqeOHgrWQ5jaA,1067
86
+ openai_sdk_helpers-0.4.1.dist-info/RECORD,,