openai-sdk-helpers 0.4.2__py3-none-any.whl → 0.5.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.
Files changed (68) hide show
  1. openai_sdk_helpers/__init__.py +45 -41
  2. openai_sdk_helpers/agent/__init__.py +4 -6
  3. openai_sdk_helpers/agent/base.py +110 -191
  4. openai_sdk_helpers/agent/{config.py → configuration.py} +24 -32
  5. openai_sdk_helpers/agent/{coordination.py → coordinator.py} +22 -23
  6. openai_sdk_helpers/agent/runner.py +3 -45
  7. openai_sdk_helpers/agent/search/base.py +54 -76
  8. openai_sdk_helpers/agent/search/vector.py +92 -108
  9. openai_sdk_helpers/agent/search/web.py +104 -82
  10. openai_sdk_helpers/agent/summarizer.py +22 -28
  11. openai_sdk_helpers/agent/translator.py +22 -24
  12. openai_sdk_helpers/agent/{validation.py → validator.py} +19 -23
  13. openai_sdk_helpers/cli.py +8 -22
  14. openai_sdk_helpers/environment.py +8 -13
  15. openai_sdk_helpers/errors.py +9 -0
  16. openai_sdk_helpers/extract/__init__.py +23 -0
  17. openai_sdk_helpers/extract/extractor.py +157 -0
  18. openai_sdk_helpers/extract/generator.py +476 -0
  19. openai_sdk_helpers/prompt/extractor_config_agent_instructions.jinja +6 -0
  20. openai_sdk_helpers/prompt/extractor_config_generator.jinja +37 -0
  21. openai_sdk_helpers/prompt/extractor_config_generator_instructions.jinja +9 -0
  22. openai_sdk_helpers/prompt/extractor_prompt_optimizer_agent_instructions.jinja +4 -0
  23. openai_sdk_helpers/prompt/extractor_prompt_optimizer_request.jinja +11 -0
  24. openai_sdk_helpers/prompt/vector_planner.jinja +7 -0
  25. openai_sdk_helpers/prompt/vector_search.jinja +6 -0
  26. openai_sdk_helpers/prompt/vector_writer.jinja +7 -0
  27. openai_sdk_helpers/response/__init__.py +3 -7
  28. openai_sdk_helpers/response/base.py +89 -98
  29. openai_sdk_helpers/response/{config.py → configuration.py} +45 -20
  30. openai_sdk_helpers/response/files.py +2 -0
  31. openai_sdk_helpers/response/planner.py +1 -1
  32. openai_sdk_helpers/response/prompter.py +1 -1
  33. openai_sdk_helpers/response/runner.py +1 -48
  34. openai_sdk_helpers/response/tool_call.py +0 -141
  35. openai_sdk_helpers/response/vector_store.py +8 -5
  36. openai_sdk_helpers/streamlit_app/__init__.py +1 -1
  37. openai_sdk_helpers/streamlit_app/app.py +17 -18
  38. openai_sdk_helpers/streamlit_app/{config.py → configuration.py} +13 -13
  39. openai_sdk_helpers/structure/__init__.py +16 -0
  40. openai_sdk_helpers/structure/base.py +239 -278
  41. openai_sdk_helpers/structure/extraction.py +1228 -0
  42. openai_sdk_helpers/structure/plan/plan.py +0 -20
  43. openai_sdk_helpers/structure/plan/task.py +0 -33
  44. openai_sdk_helpers/structure/prompt.py +16 -0
  45. openai_sdk_helpers/structure/responses.py +2 -2
  46. openai_sdk_helpers/structure/web_search.py +0 -10
  47. openai_sdk_helpers/tools.py +346 -99
  48. openai_sdk_helpers/types.py +3 -3
  49. openai_sdk_helpers/utils/__init__.py +9 -6
  50. openai_sdk_helpers/utils/json/base_model.py +316 -33
  51. openai_sdk_helpers/utils/json/data_class.py +1 -1
  52. openai_sdk_helpers/utils/langextract.py +194 -0
  53. openai_sdk_helpers/utils/registry.py +19 -15
  54. openai_sdk_helpers/vector_storage/storage.py +1 -1
  55. {openai_sdk_helpers-0.4.2.dist-info → openai_sdk_helpers-0.5.0.dist-info}/METADATA +25 -11
  56. openai_sdk_helpers-0.5.0.dist-info/RECORD +95 -0
  57. openai_sdk_helpers/agent/prompt_utils.py +0 -15
  58. openai_sdk_helpers/context_manager.py +0 -241
  59. openai_sdk_helpers/deprecation.py +0 -167
  60. openai_sdk_helpers/retry.py +0 -175
  61. openai_sdk_helpers/streamlit_app/streamlit_web_search.py +0 -75
  62. openai_sdk_helpers/utils/deprecation.py +0 -167
  63. openai_sdk_helpers-0.4.2.dist-info/RECORD +0 -88
  64. /openai_sdk_helpers/{logging_config.py → logging.py} +0 -0
  65. /openai_sdk_helpers/{config.py → settings.py} +0 -0
  66. {openai_sdk_helpers-0.4.2.dist-info → openai_sdk_helpers-0.5.0.dist-info}/WHEEL +0 -0
  67. {openai_sdk_helpers-0.4.2.dist-info → openai_sdk_helpers-0.5.0.dist-info}/entry_points.txt +0 -0
  68. {openai_sdk_helpers-0.4.2.dist-info → openai_sdk_helpers-0.5.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,167 +0,0 @@
1
- """Deprecation utilities for managing deprecated features.
2
-
3
- This module provides infrastructure for marking and managing deprecated
4
- functions, classes, and features with consistent warning messages.
5
-
6
- Functions
7
- ---------
8
- deprecated
9
- Decorator to mark functions or classes as deprecated.
10
- warn_deprecated
11
- Emit a deprecation warning with optional custom message.
12
-
13
- Classes
14
- -------
15
- DeprecationHelper
16
- Utility class for managing deprecation warnings and versions.
17
- """
18
-
19
- from __future__ import annotations
20
-
21
- import functools
22
- import warnings
23
- from typing import Any, Callable, TypeVar
24
-
25
- F = TypeVar("F", bound=Callable[..., Any])
26
-
27
-
28
- class DeprecationHelper:
29
- """Utility class for managing deprecation warnings.
30
-
31
- Provides consistent formatting and control of deprecation warnings
32
- across the package.
33
-
34
- Methods
35
- -------
36
- warn
37
- Emit a deprecation warning with standard formatting.
38
- """
39
-
40
- @staticmethod
41
- def warn(
42
- feature_name: str,
43
- removal_version: str,
44
- alternative: str | None = None,
45
- extra_message: str | None = None,
46
- ) -> None:
47
- """Emit a deprecation warning for a feature.
48
-
49
- Parameters
50
- ----------
51
- feature_name : str
52
- Name of the deprecated feature (e.g., "MyClass.old_method").
53
- removal_version : str
54
- Version in which the feature will be removed.
55
- alternative : str, optional
56
- Recommended alternative to use instead.
57
- extra_message : str, optional
58
- Additional context or migration instructions.
59
-
60
- Raises
61
- ------
62
- DeprecationWarning
63
- Always issues a DeprecationWarning to stderr.
64
- """
65
- msg = f"{feature_name} is deprecated and will be removed in version {removal_version}."
66
- if alternative:
67
- msg += f" Use {alternative} instead."
68
- if extra_message:
69
- msg += f" {extra_message}"
70
-
71
- warnings.warn(msg, DeprecationWarning, stacklevel=3)
72
-
73
-
74
- def deprecated(
75
- removal_version: str,
76
- alternative: str | None = None,
77
- extra_message: str | None = None,
78
- ) -> Callable[[F], F]:
79
- """Mark a function or class as deprecated.
80
-
81
- Parameters
82
- ----------
83
- removal_version : str
84
- Version in which the decorated feature will be removed.
85
- alternative : str, optional
86
- Recommended alternative to use instead.
87
- extra_message : str, optional
88
- Additional context or migration instructions.
89
-
90
- Returns
91
- -------
92
- Callable
93
- Decorator function that wraps the target function or class.
94
-
95
- Examples
96
- --------
97
- >>> @deprecated("1.0.0", "new_function")
98
- ... def old_function():
99
- ... pass
100
-
101
- >>> class OldClass:
102
- ... @deprecated("1.0.0", "NewClass")
103
- ... def old_method(self):
104
- ... pass
105
- """
106
-
107
- def decorator(func_or_class: F) -> F:
108
- feature_name = f"{func_or_class.__module__}.{func_or_class.__qualname__}"
109
-
110
- if isinstance(func_or_class, type):
111
- # Handle class deprecation
112
- original_init = func_or_class.__init__
113
-
114
- @functools.wraps(original_init)
115
- def new_init(self: Any, *args: Any, **kwargs: Any) -> None:
116
- DeprecationHelper.warn(
117
- feature_name,
118
- removal_version,
119
- alternative,
120
- extra_message,
121
- )
122
- original_init(self, *args, **kwargs)
123
-
124
- func_or_class.__init__ = new_init
125
- else:
126
- # Handle function deprecation
127
- @functools.wraps(func_or_class)
128
- def wrapper(*args: Any, **kwargs: Any) -> Any:
129
- DeprecationHelper.warn(
130
- feature_name,
131
- removal_version,
132
- alternative,
133
- extra_message,
134
- )
135
- return func_or_class(*args, **kwargs)
136
-
137
- return wrapper # type: ignore
138
-
139
- return func_or_class # type: ignore[return-value]
140
-
141
- return decorator
142
-
143
-
144
- def warn_deprecated(
145
- feature_name: str,
146
- removal_version: str,
147
- alternative: str | None = None,
148
- extra_message: str | None = None,
149
- ) -> None:
150
- """Issue a deprecation warning.
151
-
152
- Parameters
153
- ----------
154
- feature_name : str
155
- Name of the deprecated feature.
156
- removal_version : str
157
- Version in which the feature will be removed.
158
- alternative : str, optional
159
- Recommended alternative to use instead.
160
- extra_message : str, optional
161
- Additional context or migration instructions.
162
-
163
- Examples
164
- --------
165
- >>> warn_deprecated("old_config_key", "1.0.0", "new_config_key")
166
- """
167
- DeprecationHelper.warn(feature_name, removal_version, alternative, extra_message)
@@ -1,175 +0,0 @@
1
- """Retry decorators with exponential backoff for API operations.
2
-
3
- Provides decorators for retrying async and sync functions with
4
- exponential backoff and jitter when rate limiting or transient
5
- errors occur.
6
- """
7
-
8
- import asyncio
9
- import logging
10
- import random
11
- import time
12
- from functools import wraps
13
- from typing import Any, Callable, ParamSpec, TypeVar
14
-
15
- from openai import APIError, RateLimitError
16
-
17
- from openai_sdk_helpers.errors import AsyncExecutionError
18
- from openai_sdk_helpers.logging_config import log
19
-
20
- P = ParamSpec("P")
21
- T = TypeVar("T")
22
-
23
- # Default retry configuration constants
24
- DEFAULT_MAX_RETRIES = 3
25
- DEFAULT_BASE_DELAY = 1.0
26
- DEFAULT_MAX_DELAY = 60.0
27
-
28
- # HTTP status codes for transient errors
29
- TRANSIENT_HTTP_STATUS_CODES = frozenset({408, 429, 500, 502, 503})
30
-
31
-
32
- def with_exponential_backoff(
33
- max_retries: int = DEFAULT_MAX_RETRIES,
34
- base_delay: float = DEFAULT_BASE_DELAY,
35
- max_delay: float = DEFAULT_MAX_DELAY,
36
- ) -> Callable[[Callable[P, T]], Callable[P, T]]:
37
- """Decorate functions with exponential backoff on transient errors.
38
-
39
- Retries on RateLimitError or transient API errors (5xx, 408, 429).
40
- Uses exponential backoff with jitter to avoid thundering herd.
41
-
42
- Parameters
43
- ----------
44
- max_retries : int
45
- Maximum number of retry attempts (total attempts = max_retries + 1).
46
- Default is 3.
47
- base_delay : float
48
- Initial delay in seconds before first retry. Default is 1.0.
49
- max_delay : float
50
- Maximum delay in seconds between retries. Default is 60.0.
51
-
52
- Returns
53
- -------
54
- Callable
55
- Decorator function.
56
-
57
- Examples
58
- --------
59
- >>> @with_exponential_backoff(max_retries=3, base_delay=1.0)
60
- ... def call_api(query: str) -> str:
61
- ... # API call that may fail with rate limiting
62
- ... return client.call(query)
63
- """
64
-
65
- def decorator(func: Callable[P, T]) -> Callable[P, T]:
66
- """Apply retry logic to function."""
67
- if asyncio.iscoroutinefunction(func):
68
-
69
- @wraps(func)
70
- async def async_wrapper(*args: P.args, **kwargs: P.kwargs) -> T:
71
- """Async wrapper with retry logic."""
72
- last_exc: Exception | None = None
73
- for attempt in range(max_retries + 1):
74
- try:
75
- return await func(*args, **kwargs)
76
- except RateLimitError as exc:
77
- last_exc = exc
78
- if attempt >= max_retries:
79
- raise
80
- delay = min(
81
- base_delay * (2**attempt) + random.uniform(0, 1),
82
- max_delay,
83
- )
84
- log(
85
- f"Rate limited on {func.__name__}, retrying in "
86
- f"{delay:.2f}s (attempt {attempt + 1}/{max_retries + 1})",
87
- level=logging.WARNING,
88
- )
89
- await asyncio.sleep(delay)
90
- except APIError as exc:
91
- last_exc = exc
92
- status_code: int | None = getattr(exc, "status_code", None)
93
- # Only retry on transient errors
94
- if (
95
- not status_code
96
- or status_code not in TRANSIENT_HTTP_STATUS_CODES
97
- ):
98
- raise
99
- if attempt >= max_retries:
100
- raise
101
- delay = min(
102
- base_delay * (2**attempt),
103
- max_delay,
104
- )
105
- log(
106
- f"Transient API error on {func.__name__}: "
107
- f"{status_code}, retrying in {delay:.2f}s "
108
- f"(attempt {attempt + 1}/{max_retries + 1})",
109
- level=logging.WARNING,
110
- )
111
- await asyncio.sleep(delay)
112
-
113
- # Should never reach here, but handle edge case
114
- if last_exc:
115
- raise last_exc
116
- raise AsyncExecutionError(
117
- f"Unexpected state in {func.__name__} after retries"
118
- )
119
-
120
- return async_wrapper # type: ignore
121
-
122
- @wraps(func)
123
- def sync_wrapper(*args: P.args, **kwargs: P.kwargs) -> T:
124
- """Sync wrapper with retry logic."""
125
- last_exc: Exception | None = None
126
- for attempt in range(max_retries + 1):
127
- try:
128
- return func(*args, **kwargs)
129
- except RateLimitError as exc:
130
- last_exc = exc
131
- if attempt >= max_retries:
132
- raise
133
- delay = min(
134
- base_delay * (2**attempt) + random.uniform(0, 1),
135
- max_delay,
136
- )
137
- log(
138
- f"Rate limited on {func.__name__}, retrying in "
139
- f"{delay:.2f}s (attempt {attempt + 1}/{max_retries + 1})",
140
- level=logging.WARNING,
141
- )
142
- time.sleep(delay)
143
- except APIError as exc:
144
- last_exc = exc
145
- status_code: int | None = getattr(exc, "status_code", None)
146
- # Only retry on transient errors
147
- if (
148
- not status_code
149
- or status_code not in TRANSIENT_HTTP_STATUS_CODES
150
- ):
151
- raise
152
- if attempt >= max_retries:
153
- raise
154
- delay = min(
155
- base_delay * (2**attempt),
156
- max_delay,
157
- )
158
- log(
159
- f"Transient API error on {func.__name__}: "
160
- f"{status_code}, retrying in {delay:.2f}s "
161
- f"(attempt {attempt + 1}/{max_retries + 1})",
162
- level=logging.WARNING,
163
- )
164
- time.sleep(delay)
165
-
166
- # Should never reach here, but handle edge case
167
- if last_exc:
168
- raise last_exc
169
- raise AsyncExecutionError(
170
- f"Unexpected state in {func.__name__} after retries"
171
- )
172
-
173
- return sync_wrapper # type: ignore
174
-
175
- return decorator
@@ -1,75 +0,0 @@
1
- """Developer configuration for the example Streamlit chat app."""
2
-
3
- import json
4
- from openai_sdk_helpers.agent.search.web import WebAgentSearch
5
- from openai_sdk_helpers.config import OpenAISettings
6
- from openai_sdk_helpers.response.base import ResponseBase
7
- from openai_sdk_helpers.structure.web_search import WebSearchStructure
8
- from openai_sdk_helpers.structure.prompt import PromptStructure
9
- from openai_sdk_helpers.tools import ToolSpec, build_tool_definitions
10
- from openai_sdk_helpers.utils import coerce_jsonable, customJSONEncoder
11
- from openai_sdk_helpers.environment import DEFAULT_MODEL
12
-
13
-
14
- class StreamlitWebSearch(ResponseBase[WebSearchStructure]):
15
- """Response tuned for a generic chat experience with structured output.
16
-
17
- Methods
18
- -------
19
- __init__()
20
- Configure a general-purpose response session using OpenAI settings.
21
- """
22
-
23
- def __init__(self) -> None:
24
- settings = OpenAISettings.from_env()
25
- if not settings.default_model:
26
- settings = settings.model_copy(update={"default_model": DEFAULT_MODEL})
27
- super().__init__(
28
- name="streamlit_web_search",
29
- instructions="Perform web searches and generate reports.",
30
- tools=build_tool_definitions(
31
- [
32
- ToolSpec(
33
- structure=PromptStructure,
34
- tool_name="perform_search",
35
- tool_description="Tool to perform web searches and generate reports.",
36
- output_structure=WebSearchStructure,
37
- )
38
- ]
39
- ),
40
- output_structure=WebSearchStructure,
41
- tool_handlers={"perform_search": perform_search},
42
- openai_settings=settings,
43
- )
44
-
45
-
46
- async def perform_search(tool) -> str:
47
- """Perform a web search and return structured results."""
48
- structured_data = PromptStructure.from_tool_arguments(tool.arguments)
49
- web_result = await WebAgentSearch(default_model=DEFAULT_MODEL).run_agent_async(
50
- structured_data.prompt
51
- )
52
- payload = coerce_jsonable(web_result)
53
- return json.dumps(payload, cls=customJSONEncoder)
54
-
55
-
56
- APP_CONFIG = {
57
- "response": StreamlitWebSearch,
58
- "display_title": "Web Search Assistant",
59
- "description": "Config-driven chat experience for performing web searches.",
60
- }
61
-
62
- if __name__ == "__main__":
63
- web_search_instance = StreamlitWebSearch()
64
- import asyncio
65
-
66
- result = asyncio.run(
67
- web_search_instance.run_async("What are the 2026 advancements in AI?")
68
- )
69
- if result:
70
- print(web_search_instance.get_last_tool_message())
71
- else:
72
- print("No result returned.")
73
- filepath = f"./data/{web_search_instance.name}.{web_search_instance.uuid}.json"
74
- web_search_instance.save(filepath)
75
- web_search_instance.close()
@@ -1,167 +0,0 @@
1
- """Deprecation utilities for managing deprecated features.
2
-
3
- This module provides infrastructure for marking and managing deprecated
4
- functions, classes, and features with consistent warning messages.
5
-
6
- Functions
7
- ---------
8
- deprecated
9
- Decorator to mark functions or classes as deprecated.
10
- warn_deprecated
11
- Emit a deprecation warning with optional custom message.
12
-
13
- Classes
14
- -------
15
- DeprecationHelper
16
- Utility class for managing deprecation warnings and versions.
17
- """
18
-
19
- from __future__ import annotations
20
-
21
- import functools
22
- import warnings
23
- from typing import Any, Callable, TypeVar
24
-
25
- F = TypeVar("F", bound=Callable[..., Any])
26
-
27
-
28
- class DeprecationHelper:
29
- """Utility class for managing deprecation warnings.
30
-
31
- Provides consistent formatting and control of deprecation warnings
32
- across the package.
33
-
34
- Methods
35
- -------
36
- warn
37
- Emit a deprecation warning with standard formatting.
38
- """
39
-
40
- @staticmethod
41
- def warn(
42
- feature_name: str,
43
- removal_version: str,
44
- alternative: str | None = None,
45
- extra_message: str | None = None,
46
- ) -> None:
47
- """Emit a deprecation warning for a feature.
48
-
49
- Parameters
50
- ----------
51
- feature_name : str
52
- Name of the deprecated feature (e.g., "MyClass.old_method").
53
- removal_version : str
54
- Version in which the feature will be removed.
55
- alternative : str, optional
56
- Recommended alternative to use instead.
57
- extra_message : str, optional
58
- Additional context or migration instructions.
59
-
60
- Raises
61
- ------
62
- DeprecationWarning
63
- Always issues a DeprecationWarning to stderr.
64
- """
65
- msg = f"{feature_name} is deprecated and will be removed in version {removal_version}."
66
- if alternative:
67
- msg += f" Use {alternative} instead."
68
- if extra_message:
69
- msg += f" {extra_message}"
70
-
71
- warnings.warn(msg, DeprecationWarning, stacklevel=3)
72
-
73
-
74
- def deprecated(
75
- removal_version: str,
76
- alternative: str | None = None,
77
- extra_message: str | None = None,
78
- ) -> Callable[[F], F]:
79
- """Mark a function or class as deprecated.
80
-
81
- Parameters
82
- ----------
83
- removal_version : str
84
- Version in which the decorated feature will be removed.
85
- alternative : str, optional
86
- Recommended alternative to use instead.
87
- extra_message : str, optional
88
- Additional context or migration instructions.
89
-
90
- Returns
91
- -------
92
- Callable
93
- Decorator function that wraps the target function or class.
94
-
95
- Examples
96
- --------
97
- >>> @deprecated("1.0.0", "new_function")
98
- ... def old_function():
99
- ... pass
100
-
101
- >>> class OldClass:
102
- ... @deprecated("1.0.0", "NewClass")
103
- ... def old_method(self):
104
- ... pass
105
- """
106
-
107
- def decorator(func_or_class: F) -> F:
108
- feature_name = f"{func_or_class.__module__}.{func_or_class.__qualname__}"
109
-
110
- if isinstance(func_or_class, type):
111
- # Handle class deprecation
112
- original_init = func_or_class.__init__
113
-
114
- @functools.wraps(original_init)
115
- def new_init(self: Any, *args: Any, **kwargs: Any) -> None:
116
- DeprecationHelper.warn(
117
- feature_name,
118
- removal_version,
119
- alternative,
120
- extra_message,
121
- )
122
- original_init(self, *args, **kwargs)
123
-
124
- func_or_class.__init__ = new_init
125
- else:
126
- # Handle function deprecation
127
- @functools.wraps(func_or_class)
128
- def wrapper(*args: Any, **kwargs: Any) -> Any:
129
- DeprecationHelper.warn(
130
- feature_name,
131
- removal_version,
132
- alternative,
133
- extra_message,
134
- )
135
- return func_or_class(*args, **kwargs)
136
-
137
- return wrapper # type: ignore
138
-
139
- return func_or_class # type: ignore[return-value]
140
-
141
- return decorator
142
-
143
-
144
- def warn_deprecated(
145
- feature_name: str,
146
- removal_version: str,
147
- alternative: str | None = None,
148
- extra_message: str | None = None,
149
- ) -> None:
150
- """Issue a deprecation warning.
151
-
152
- Parameters
153
- ----------
154
- feature_name : str
155
- Name of the deprecated feature.
156
- removal_version : str
157
- Version in which the feature will be removed.
158
- alternative : str, optional
159
- Recommended alternative to use instead.
160
- extra_message : str, optional
161
- Additional context or migration instructions.
162
-
163
- Examples
164
- --------
165
- >>> warn_deprecated("old_config_key", "1.0.0", "new_config_key")
166
- """
167
- DeprecationHelper.warn(feature_name, removal_version, alternative, extra_message)
@@ -1,88 +0,0 @@
1
- openai_sdk_helpers/__init__.py,sha256=19MEuQFgMqr6YqEc0QdmNe5YTg5JJVVCIisrYLFbqGk,4766
2
- openai_sdk_helpers/cli.py,sha256=YnQz-IcAqcBdh8eCCxVYa7NHDuHgHaU-PJ4FWPvkz58,8278
3
- openai_sdk_helpers/config.py,sha256=xK_u0YNKgtPrLrZrVr4F4k0CvSuYbsmkqqw9mCMdyF8,10932
4
- openai_sdk_helpers/context_manager.py,sha256=QqlrtenwKoz2krY0IzuToKdTX1HptUYtIEylxieybgY,6633
5
- openai_sdk_helpers/deprecation.py,sha256=VF0VDDegawYhsu5f-vE6dop9ob-jv8egxsm0KsPvP9E,4753
6
- openai_sdk_helpers/environment.py,sha256=9SYGAgf6dp0aknDdvcnSD40vJWONZsVhO-i8Ayo3jpg,1906
7
- openai_sdk_helpers/errors.py,sha256=0TLrcpRXPBvk2KlrU5I1VAQl-sYy-d15h_SMDkEawvI,2757
8
- openai_sdk_helpers/files_api.py,sha256=uMKHvGg1Od0J95Izl3AG9ofQYq8EDJXEty7zP0oKjJM,12569
9
- openai_sdk_helpers/logging_config.py,sha256=JcR0FTWht1tYdwD-bXH835pr0JV0RwHfY3poruiZGHM,795
10
- openai_sdk_helpers/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- openai_sdk_helpers/retry.py,sha256=J10oQYphfzDXm3BnLoXwxk7PAhN93TC2LQOv0VDGOwI,6533
12
- openai_sdk_helpers/tools.py,sha256=Awj5htt1ImBbNToM1u6qdrIZ-7MiPZAXZ_oKKiWivy8,10547
13
- openai_sdk_helpers/types.py,sha256=xzldCRfwCZ3rZl18IBmfgA-PVdoZKSWNrlSIhirumSo,1451
14
- openai_sdk_helpers/agent/__init__.py,sha256=39nYVK8okZv_srC86HStwtKirkH1_FXkacoqfV73naA,1070
15
- openai_sdk_helpers/agent/base.py,sha256=iv14LURB5PFcbRHuP1lWyj8JbKvDqM1m1Tf1mOi6CA8,27080
16
- openai_sdk_helpers/agent/config.py,sha256=NlSE1T1T3fUOu4GJzwjmrVGxB1aI969yYg6sFXgwHCI,14611
17
- openai_sdk_helpers/agent/coordination.py,sha256=VTzyl4RV1q4ugiyFW4Fj7pOAVVO0bMRD63PfQRDwfoQ,18030
18
- openai_sdk_helpers/agent/prompt_utils.py,sha256=-1M66tqQxh9wWCFg6X-K7cCcqauca3yA04ZjvOpN3bA,337
19
- openai_sdk_helpers/agent/runner.py,sha256=aOVN1OYKK5_u7oFBqRCOOeTgcb-lLl4kZGxuPLmJrMw,4884
20
- openai_sdk_helpers/agent/summarizer.py,sha256=lg_PLB1DSHox3PNDgiCzvCPM5VoCUbKEMGy1gqUvl8Y,4168
21
- openai_sdk_helpers/agent/translator.py,sha256=3u7er1GhUGdy7OMa3A_vyqFFZfev3XBCZW_6w5OwYVc,6286
22
- openai_sdk_helpers/agent/utils.py,sha256=DTD5foCqGYfXf13F2bZMYIQROl7SbDSy5GDPGi0Zl-0,1089
23
- openai_sdk_helpers/agent/validation.py,sha256=6NHZIFaUOqRZeYqvRBnDc_uApAV3YHJnOhLHKbVUsi0,5094
24
- openai_sdk_helpers/agent/search/__init__.py,sha256=LXXzEcX2MU7_htHRdRCGPw0hsr9CrZn0ESii7GZJMBw,806
25
- openai_sdk_helpers/agent/search/base.py,sha256=VokTw3-V2yxGzm2WzlcvU100h3UaeyGslCFwIgMvJwI,10146
26
- openai_sdk_helpers/agent/search/vector.py,sha256=A1HskDI6YVd3D9IQncowgiWUy9ptlMlSJhrBRDyqroM,15167
27
- openai_sdk_helpers/agent/search/web.py,sha256=EQ0Rgcz21Rm9bDGPr8XPlDj34_nH2wnB7ER9rBy48Ak,11199
28
- openai_sdk_helpers/enums/__init__.py,sha256=aFf79C4JBeLC3kMlJfSpehyjx5uNCtW6eK5rD6ZFfhM,322
29
- openai_sdk_helpers/enums/base.py,sha256=cNllDtzcgI0_eZYXxFko14yhxwicX6xbeDfz9gFE3qo,2753
30
- openai_sdk_helpers/prompt/__init__.py,sha256=MOqgKwG9KLqKudoKRlUfLxiSmdOi2aD6hNrWDFqLHkk,418
31
- openai_sdk_helpers/prompt/base.py,sha256=6X0zeopEvO0ba8207O8Nnj1QvFZEZier7kNNh4qkcmE,7782
32
- openai_sdk_helpers/prompt/summarizer.jinja,sha256=jliSetWDISbql1EkWi1RB8-L_BXUg8JMkRRsPRHuzbY,309
33
- openai_sdk_helpers/prompt/translator.jinja,sha256=SZhW8ipEzM-9IA4wyS_r2wIMTAclWrilmk1s46njoL0,291
34
- openai_sdk_helpers/prompt/validator.jinja,sha256=6t8q_IdxFd3mVBGX6SFKNOert1Wo3YpTOji2SNEbbtE,547
35
- openai_sdk_helpers/response/__init__.py,sha256=Rh3tBygneOhS-Er_4dtX4Xa69ukvxYv01brq26VpgwQ,1886
36
- openai_sdk_helpers/response/base.py,sha256=OA1p9h6EIzwt8VCWFXEalaQHOe0_eZDefqs5jQKu-vU,34844
37
- openai_sdk_helpers/response/config.py,sha256=ugZIP29krecf6JXiwkrc1nBDCdT_C9DSOCdPkLRN4wY,9305
38
- openai_sdk_helpers/response/files.py,sha256=6iHXeNZg4R08ilQ7D53qIJDQGYPpTLcByAhNJlEwbZ4,13226
39
- openai_sdk_helpers/response/messages.py,sha256=qX3sW79rLuJEys28zyv5MovZikwGOaLevzdVN0VYMRE,10104
40
- openai_sdk_helpers/response/planner.py,sha256=OfqrANheofY2155kVVfAWPPAHlnSnhaF0MLUHwNgPBU,333
41
- openai_sdk_helpers/response/prompter.py,sha256=vaHrNAAB9Z5WYwQeTKfOkAoH6DaFx1aRcywngqr47Pc,337
42
- openai_sdk_helpers/response/runner.py,sha256=Rg8XmxU5UwxJc3MjPlYlXWDimxy_cjxzefGiruNZK6s,4269
43
- openai_sdk_helpers/response/tool_call.py,sha256=c9Filh4IG5H_RWuJlYl6KUZDaF7mCjkabFRQMNiz7zM,7422
44
- openai_sdk_helpers/response/vector_store.py,sha256=cG5Mzdhjw5FsX1phgclIGz2MQ8f8uMKBaage1O2EZQU,3074
45
- openai_sdk_helpers/streamlit_app/__init__.py,sha256=DIXClgbzncsex2vnXUGjBwvykazx4-Bz089beZiq8vc,805
46
- openai_sdk_helpers/streamlit_app/app.py,sha256=jNkMQ4zkfojP501qk_vncyLN4TymiDXxA3cXkUvBfsw,17402
47
- openai_sdk_helpers/streamlit_app/config.py,sha256=t1fylt53eVmnNOfBXwpfDyG-Jji9JBUb0ZyrtUWBZ1s,16594
48
- openai_sdk_helpers/streamlit_app/streamlit_web_search.py,sha256=-5T22a7XbNDjQxC3pLySH85iAdlqSM2ZrR4ZIIYk_KA,2808
49
- openai_sdk_helpers/structure/__init__.py,sha256=jROw0IbXYVRD2Eb3dBMsB6amQZrX8X7XSgGh_zjsZWc,3469
50
- openai_sdk_helpers/structure/agent_blueprint.py,sha256=VyJWkgPNzAYKRDMeR1M4kE6qqQURnwqtrrEn0TRJf0g,9698
51
- openai_sdk_helpers/structure/base.py,sha256=7JuHxKkLR5gP0RWGQIjOQlvySfain6LrB4-zHb0oFxo,25298
52
- openai_sdk_helpers/structure/prompt.py,sha256=Pp3j-fOG0SWQO5Ts9zS86n8cveSB6kWzSGHW6J9MlcY,1075
53
- openai_sdk_helpers/structure/responses.py,sha256=eqCcW4d8lwhUF5kzHMA4FR9uNkaBHl8CuZk7a8YrenI,4868
54
- openai_sdk_helpers/structure/summary.py,sha256=iP1uffqve18B9HXceP4rV0Ho5AaDZXMmC66tRKDNx3c,3143
55
- openai_sdk_helpers/structure/translation.py,sha256=rBSzGBX6hGaETD43340z9MbKGsxWekjRD4xEZz67SnI,712
56
- openai_sdk_helpers/structure/validation.py,sha256=D03rlyBDn22qNjTGaGsjhsk3g50oPmzYMFqycYF2_CU,2409
57
- openai_sdk_helpers/structure/vector_search.py,sha256=XNQsG6_-c7X6TpXjqWOdKCmqXatX1gwd0zq-hII3cz4,5782
58
- openai_sdk_helpers/structure/web_search.py,sha256=8ETWc2G1eO3dWkNQrs5rsxvHHyhyG1puEYUVRNCLUYI,4572
59
- openai_sdk_helpers/structure/plan/__init__.py,sha256=IGr0Tk4inN_8o7fT2N02_FTi6U6l2T9_npcQHAlBwKA,1076
60
- openai_sdk_helpers/structure/plan/enum.py,sha256=seESSwH-IeeW-9BqIMUQyk3qjtchfU3TDhF9HPDB1OM,3079
61
- openai_sdk_helpers/structure/plan/helpers.py,sha256=Vc6dBTMFrNWlsaCTpEImEIKjfFq4BSSxNjB4K8dywOQ,5139
62
- openai_sdk_helpers/structure/plan/plan.py,sha256=CStfSfCdcv7HfLWV_G09xElJvq_kAKi_6JDkB3I7cSI,9663
63
- openai_sdk_helpers/structure/plan/task.py,sha256=FSdt2OJ_arC60zMoWIUHMT3U1syWM_7svyTpOIwiRSM,4580
64
- openai_sdk_helpers/structure/plan/types.py,sha256=7y9QEVdZreQUXV7n-R4RoNZzw5HeOVbJGWx9QkSfuNY,418
65
- openai_sdk_helpers/utils/__init__.py,sha256=8SghfmiFhNhMj8Wuop1SAtEt1F8QJb_r4jhi5DtSCDE,3670
66
- openai_sdk_helpers/utils/async_utils.py,sha256=9KbPEVfi6IXdbwkTUE0h5DleK8TI7I6P_VPL8UgUv98,3689
67
- openai_sdk_helpers/utils/coercion.py,sha256=Pq1u7tAbD7kTZ84lK-7Fb9CyYKKKQt4fypG5BlSI6oQ,3774
68
- openai_sdk_helpers/utils/deprecation.py,sha256=VF0VDDegawYhsu5f-vE6dop9ob-jv8egxsm0KsPvP9E,4753
69
- openai_sdk_helpers/utils/encoding.py,sha256=oDtlNGZ5p-edXiHW76REs-0-8NXkQNReKJdj6sHLkt8,4615
70
- openai_sdk_helpers/utils/instructions.py,sha256=trbjxjxv2otQR9VmBsPFk1_CJj8nA85Sgtj_5QmQOKI,942
71
- openai_sdk_helpers/utils/output_validation.py,sha256=3DC6Hr6vAFx_bQGaLsxkGN_LuKe_MugLpVogMBgG9tc,12621
72
- openai_sdk_helpers/utils/path_utils.py,sha256=NOSX7553cc8LqxbnvmdYjgDBi5Le2W2LuMINwFsTzyM,1969
73
- openai_sdk_helpers/utils/registry.py,sha256=m59q6qm2IqXRdvdeKB-7H5tiUs1SB-aXTuyhTsVH5E4,6499
74
- openai_sdk_helpers/utils/validation.py,sha256=ZjnZNOy5AoFlszRxarNol6YZwfgw6LnwPtkCekZmwAU,7826
75
- openai_sdk_helpers/utils/json/__init__.py,sha256=wBm1DBgfy_n1uSUcnCPyqBn_cCq41mijjPigSMZJZqg,2118
76
- openai_sdk_helpers/utils/json/base_model.py,sha256=8j__oKly46RRekmRjwFZjAxBHhZkIjMADcJReKo-QsQ,5100
77
- openai_sdk_helpers/utils/json/data_class.py,sha256=hffMQQTNTwybuMTOtmKNzxd6kXrVyQen67F5BE_OGqE,6469
78
- openai_sdk_helpers/utils/json/ref.py,sha256=FqBIRWIw33Up3rFyTlLYljcuUjg43f6Nu5wX3tOXn54,2809
79
- openai_sdk_helpers/utils/json/utils.py,sha256=iyc25tnObqXQJWPKLZMVts932GArdKer59KuC8aQKsY,5948
80
- openai_sdk_helpers/vector_storage/__init__.py,sha256=L5LxO09puh9_yBB9IDTvc1CvVkARVkHqYY1KX3inB4c,975
81
- openai_sdk_helpers/vector_storage/cleanup.py,sha256=ImWIE-9lli-odD8qIARvmeaa0y8ZD4pYYP-kT0O3178,3552
82
- openai_sdk_helpers/vector_storage/storage.py,sha256=A6zJDicObdSOVSlzhHVxEGq_tKO2_bNcsYi94xsKDNI,23655
83
- openai_sdk_helpers/vector_storage/types.py,sha256=jTCcOYMeOpZWvcse0z4T3MVs-RBOPC-fqWTBeQrgafU,1639
84
- openai_sdk_helpers-0.4.2.dist-info/METADATA,sha256=h1-_VwnRxkgrCwRJMEwpqMe3TCeUuMQ0U-PwYoJrJkU,23557
85
- openai_sdk_helpers-0.4.2.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
86
- openai_sdk_helpers-0.4.2.dist-info/entry_points.txt,sha256=gEOD1ZeXe8d2OP-KzUlG-b_9D9yUZTCt-GFW3EDbIIY,63
87
- openai_sdk_helpers-0.4.2.dist-info/licenses/LICENSE,sha256=CUhc1NrE50bs45tcXF7OcTQBKEvkUuLqeOHgrWQ5jaA,1067
88
- openai_sdk_helpers-0.4.2.dist-info/RECORD,,
File without changes
File without changes