openai-sdk-helpers 0.5.2__tar.gz → 0.6.1__tar.gz

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 (98) hide show
  1. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/PKG-INFO +12 -1
  2. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/README.md +11 -0
  3. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/pyproject.toml +1 -1
  4. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/agent/__init__.py +2 -0
  5. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/agent/base.py +13 -5
  6. openai_sdk_helpers-0.6.1/src/openai_sdk_helpers/agent/classifier.py +848 -0
  7. openai_sdk_helpers-0.6.1/src/openai_sdk_helpers/prompt/classifier.jinja +31 -0
  8. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/response/base.py +26 -7
  9. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/settings.py +65 -0
  10. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/structure/__init__.py +12 -0
  11. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/structure/base.py +79 -55
  12. openai_sdk_helpers-0.6.1/src/openai_sdk_helpers/structure/classification.py +453 -0
  13. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/structure/plan/enum.py +4 -0
  14. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/.gitignore +0 -0
  15. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/LICENSE +0 -0
  16. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/__init__.py +0 -0
  17. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/agent/configuration.py +0 -0
  18. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/agent/coordinator.py +0 -0
  19. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/agent/runner.py +0 -0
  20. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/agent/search/__init__.py +0 -0
  21. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/agent/search/base.py +0 -0
  22. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/agent/search/vector.py +0 -0
  23. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/agent/search/web.py +0 -0
  24. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/agent/summarizer.py +0 -0
  25. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/agent/translator.py +0 -0
  26. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/agent/utils.py +0 -0
  27. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/agent/validator.py +0 -0
  28. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/cli.py +0 -0
  29. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/enums/__init__.py +0 -0
  30. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/enums/base.py +0 -0
  31. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/environment.py +0 -0
  32. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/errors.py +0 -0
  33. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/extract/__init__.py +0 -0
  34. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/extract/extractor.py +0 -0
  35. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/extract/generator.py +0 -0
  36. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/files_api.py +0 -0
  37. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/logging.py +0 -0
  38. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/prompt/__init__.py +0 -0
  39. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/prompt/base.py +0 -0
  40. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/prompt/extractor_config_agent_instructions.jinja +0 -0
  41. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/prompt/extractor_config_generator.jinja +0 -0
  42. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/prompt/extractor_config_generator_instructions.jinja +0 -0
  43. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/prompt/extractor_prompt_optimizer_agent_instructions.jinja +0 -0
  44. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/prompt/extractor_prompt_optimizer_request.jinja +0 -0
  45. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/prompt/summarizer.jinja +0 -0
  46. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/prompt/translator.jinja +0 -0
  47. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/prompt/validator.jinja +0 -0
  48. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/prompt/vector_planner.jinja +0 -0
  49. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/prompt/vector_search.jinja +0 -0
  50. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/prompt/vector_writer.jinja +0 -0
  51. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/py.typed +0 -0
  52. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/response/__init__.py +0 -0
  53. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/response/configuration.py +0 -0
  54. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/response/files.py +0 -0
  55. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/response/messages.py +0 -0
  56. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/response/planner.py +0 -0
  57. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/response/prompter.py +0 -0
  58. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/response/runner.py +0 -0
  59. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/response/tool_call.py +0 -0
  60. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/response/vector_store.py +0 -0
  61. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/streamlit_app/__init__.py +0 -0
  62. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/streamlit_app/app.py +0 -0
  63. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/streamlit_app/configuration.py +0 -0
  64. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/structure/agent_blueprint.py +0 -0
  65. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/structure/extraction.py +0 -0
  66. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/structure/plan/__init__.py +0 -0
  67. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/structure/plan/helpers.py +0 -0
  68. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/structure/plan/plan.py +0 -0
  69. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/structure/plan/task.py +0 -0
  70. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/structure/plan/types.py +0 -0
  71. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/structure/prompt.py +0 -0
  72. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/structure/responses.py +0 -0
  73. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/structure/summary.py +0 -0
  74. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/structure/translation.py +0 -0
  75. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/structure/validation.py +0 -0
  76. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/structure/vector_search.py +0 -0
  77. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/structure/web_search.py +0 -0
  78. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/tools.py +0 -0
  79. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/types.py +0 -0
  80. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/utils/__init__.py +0 -0
  81. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/utils/async_utils.py +0 -0
  82. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/utils/coercion.py +0 -0
  83. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/utils/encoding.py +0 -0
  84. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/utils/instructions.py +0 -0
  85. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/utils/json/__init__.py +0 -0
  86. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/utils/json/base_model.py +0 -0
  87. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/utils/json/data_class.py +0 -0
  88. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/utils/json/ref.py +0 -0
  89. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/utils/json/utils.py +0 -0
  90. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/utils/langextract.py +0 -0
  91. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/utils/output_validation.py +0 -0
  92. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/utils/path_utils.py +0 -0
  93. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/utils/registry.py +0 -0
  94. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/utils/validation.py +0 -0
  95. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/vector_storage/__init__.py +0 -0
  96. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/vector_storage/cleanup.py +0 -0
  97. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/vector_storage/storage.py +0 -0
  98. {openai_sdk_helpers-0.5.2 → openai_sdk_helpers-0.6.1}/src/openai_sdk_helpers/vector_storage/types.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openai-sdk-helpers
3
- Version: 0.5.2
3
+ Version: 0.6.1
4
4
  Summary: Composable helpers for OpenAI SDK agents, prompts, and storage
5
5
  Author: openai-sdk-helpers maintainers
6
6
  License: MIT
@@ -97,6 +97,7 @@ The `agent` module provides a higher-level abstraction for building agents, whil
97
97
  - **SummarizerAgent**: Generate concise summaries from provided text
98
98
  - **TranslatorAgent**: Translate text into target languages
99
99
  - **ValidatorAgent**: Check inputs and outputs against safety guardrails
100
+ - **TaxonomyClassifierAgent**: Classify text into taxonomy-driven labels
100
101
 
101
102
  #### Response Module (Built on `openai` SDK)
102
103
  - **Response handling utilities** for direct API control with fine-grained message management
@@ -210,12 +211,18 @@ These use the `agent` module built on `openai-agents` SDK:
210
211
  ```python
211
212
  from openai_sdk_helpers.agent import (
212
213
  SummarizerAgent,
214
+ TaxonomyClassifierAgent,
213
215
  TranslatorAgent,
214
216
  ValidatorAgent,
215
217
  )
218
+ from openai_sdk_helpers.structure import TaxonomyNode
216
219
 
217
220
  # Initialize agents with a default model
218
221
  summarizer = SummarizerAgent(default_model="gpt-4o-mini")
222
+ classifier = TaxonomyClassifierAgent(
223
+ model="gpt-4o-mini",
224
+ taxonomy=[TaxonomyNode(label="Billing"), TaxonomyNode(label="Support")],
225
+ )
219
226
  translator = TranslatorAgent(default_model="gpt-4o-mini")
220
227
  validator = ValidatorAgent(default_model="gpt-4o-mini")
221
228
 
@@ -227,6 +234,10 @@ print(summary.text)
227
234
  translation = translator.run_sync("Bonjour", target_language="English")
228
235
  print(translation)
229
236
 
237
+ # Classify text against a taxonomy
238
+ classification = classifier.run_sync("I need help with my invoice")
239
+ print(classification.final_node)
240
+
230
241
  # Validate against guardrails
231
242
  validation = validator.run_sync(
232
243
  "Share meeting notes with names removed",
@@ -59,6 +59,7 @@ The `agent` module provides a higher-level abstraction for building agents, whil
59
59
  - **SummarizerAgent**: Generate concise summaries from provided text
60
60
  - **TranslatorAgent**: Translate text into target languages
61
61
  - **ValidatorAgent**: Check inputs and outputs against safety guardrails
62
+ - **TaxonomyClassifierAgent**: Classify text into taxonomy-driven labels
62
63
 
63
64
  #### Response Module (Built on `openai` SDK)
64
65
  - **Response handling utilities** for direct API control with fine-grained message management
@@ -172,12 +173,18 @@ These use the `agent` module built on `openai-agents` SDK:
172
173
  ```python
173
174
  from openai_sdk_helpers.agent import (
174
175
  SummarizerAgent,
176
+ TaxonomyClassifierAgent,
175
177
  TranslatorAgent,
176
178
  ValidatorAgent,
177
179
  )
180
+ from openai_sdk_helpers.structure import TaxonomyNode
178
181
 
179
182
  # Initialize agents with a default model
180
183
  summarizer = SummarizerAgent(default_model="gpt-4o-mini")
184
+ classifier = TaxonomyClassifierAgent(
185
+ model="gpt-4o-mini",
186
+ taxonomy=[TaxonomyNode(label="Billing"), TaxonomyNode(label="Support")],
187
+ )
181
188
  translator = TranslatorAgent(default_model="gpt-4o-mini")
182
189
  validator = ValidatorAgent(default_model="gpt-4o-mini")
183
190
 
@@ -189,6 +196,10 @@ print(summary.text)
189
196
  translation = translator.run_sync("Bonjour", target_language="English")
190
197
  print(translation)
191
198
 
199
+ # Classify text against a taxonomy
200
+ classification = classifier.run_sync("I need help with my invoice")
201
+ print(classification.final_node)
202
+
192
203
  # Validate against guardrails
193
204
  validation = validator.run_sync(
194
205
  "Share meeting notes with names removed",
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "openai-sdk-helpers"
3
- version = "0.5.2"
3
+ version = "0.6.1"
4
4
  requires-python = ">=3.10"
5
5
  readme = "README.md"
6
6
  description = "Composable helpers for OpenAI SDK agents, prompts, and storage"
@@ -7,6 +7,7 @@ from ..structure.plan.enum import AgentEnum
7
7
  from .coordinator import CoordinatorAgent
8
8
  from .runner import run_sync, run_async
9
9
  from .search.base import SearchPlanner, SearchToolAgent, SearchWriter
10
+ from .classifier import TaxonomyClassifierAgent
10
11
  from .summarizer import SummarizerAgent
11
12
  from .translator import TranslatorAgent
12
13
  from .validator import ValidatorAgent
@@ -27,6 +28,7 @@ __all__ = [
27
28
  "SearchPlanner",
28
29
  "SearchToolAgent",
29
30
  "SearchWriter",
31
+ "TaxonomyClassifierAgent",
30
32
  "SummarizerAgent",
31
33
  "TranslatorAgent",
32
34
  "ValidatorAgent",
@@ -429,9 +429,16 @@ class AgentBase(DataclassJSONSerializable):
429
429
  """
430
430
  return self._session
431
431
 
432
- def get_agent(self) -> Agent:
432
+ def get_agent(
433
+ self, output_structure: Optional[type[StructureBase]] = None
434
+ ) -> Agent:
433
435
  """Construct and return the configured :class:`agents.Agent` instance.
434
436
 
437
+ Parameters
438
+ ----------
439
+ output_structure : type[StructureBase] or None, default=None
440
+ Optional override for the agent output schema.
441
+
435
442
  Returns
436
443
  -------
437
444
  Agent
@@ -442,8 +449,9 @@ class AgentBase(DataclassJSONSerializable):
442
449
  "instructions": self._configuration.instructions_text or ".",
443
450
  "model": self._model,
444
451
  }
445
- if self._configuration.output_structure:
446
- agent_config["output_type"] = self._configuration.output_structure
452
+ output_type = output_structure or self._configuration.output_structure
453
+ if output_type is not None:
454
+ agent_config["output_type"] = output_type
447
455
  if self._configuration.tools:
448
456
  agent_config["tools"] = self._configuration.tools
449
457
  if self._model_settings:
@@ -490,7 +498,7 @@ class AgentBase(DataclassJSONSerializable):
490
498
  session_to_use = session if session is not None else self._session
491
499
  try:
492
500
  return await run_async(
493
- agent=self.get_agent(),
501
+ agent=self.get_agent(output_structure=output_structure),
494
502
  input=input,
495
503
  context=context,
496
504
  output_structure=output_structure,
@@ -545,7 +553,7 @@ class AgentBase(DataclassJSONSerializable):
545
553
  session_to_use = session if session is not None else self._session
546
554
  try:
547
555
  return run_sync(
548
- agent=self.get_agent(),
556
+ agent=self.get_agent(output_structure=output_structure),
549
557
  input=input,
550
558
  context=context,
551
559
  output_structure=output_structure,