openai-sdk-helpers 0.1.0__py3-none-any.whl → 0.1.2__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 (44) hide show
  1. openai_sdk_helpers/__init__.py +44 -7
  2. openai_sdk_helpers/agent/base.py +5 -1
  3. openai_sdk_helpers/agent/coordination.py +4 -5
  4. openai_sdk_helpers/agent/runner.py +4 -1
  5. openai_sdk_helpers/agent/search/base.py +1 -0
  6. openai_sdk_helpers/agent/search/vector.py +2 -0
  7. openai_sdk_helpers/cli.py +265 -0
  8. openai_sdk_helpers/config.py +93 -2
  9. openai_sdk_helpers/context_manager.py +1 -1
  10. openai_sdk_helpers/deprecation.py +167 -0
  11. openai_sdk_helpers/environment.py +3 -2
  12. openai_sdk_helpers/errors.py +0 -12
  13. openai_sdk_helpers/files_api.py +373 -0
  14. openai_sdk_helpers/logging_config.py +24 -95
  15. openai_sdk_helpers/prompt/base.py +1 -1
  16. openai_sdk_helpers/response/__init__.py +7 -3
  17. openai_sdk_helpers/response/base.py +217 -147
  18. openai_sdk_helpers/response/config.py +16 -1
  19. openai_sdk_helpers/response/files.py +392 -0
  20. openai_sdk_helpers/response/messages.py +1 -0
  21. openai_sdk_helpers/retry.py +1 -1
  22. openai_sdk_helpers/streamlit_app/app.py +97 -7
  23. openai_sdk_helpers/streamlit_app/streamlit_web_search.py +15 -8
  24. openai_sdk_helpers/structure/base.py +6 -6
  25. openai_sdk_helpers/structure/plan/helpers.py +1 -0
  26. openai_sdk_helpers/structure/plan/task.py +7 -7
  27. openai_sdk_helpers/tools.py +116 -13
  28. openai_sdk_helpers/utils/__init__.py +100 -35
  29. openai_sdk_helpers/{async_utils.py → utils/async_utils.py} +5 -6
  30. openai_sdk_helpers/utils/coercion.py +138 -0
  31. openai_sdk_helpers/utils/deprecation.py +167 -0
  32. openai_sdk_helpers/utils/encoding.py +189 -0
  33. openai_sdk_helpers/utils/json_utils.py +98 -0
  34. openai_sdk_helpers/utils/output_validation.py +448 -0
  35. openai_sdk_helpers/utils/path_utils.py +46 -0
  36. openai_sdk_helpers/{validation.py → utils/validation.py} +7 -3
  37. openai_sdk_helpers/vector_storage/storage.py +59 -28
  38. {openai_sdk_helpers-0.1.0.dist-info → openai_sdk_helpers-0.1.2.dist-info}/METADATA +152 -3
  39. openai_sdk_helpers-0.1.2.dist-info/RECORD +79 -0
  40. openai_sdk_helpers-0.1.2.dist-info/entry_points.txt +2 -0
  41. openai_sdk_helpers/utils/core.py +0 -596
  42. openai_sdk_helpers-0.1.0.dist-info/RECORD +0 -69
  43. {openai_sdk_helpers-0.1.0.dist-info → openai_sdk_helpers-0.1.2.dist-info}/WHEEL +0 -0
  44. {openai_sdk_helpers-0.1.0.dist-info → openai_sdk_helpers-0.1.2.dist-info}/licenses/LICENSE +0 -0
@@ -1,105 +1,34 @@
1
- """Centralized logging configuration for openai-sdk-helpers.
2
-
3
- Provides a centralized factory for creating and configuring loggers
4
- with consistent formatting and handler management.
5
- """
1
+ """Centralized logging configuration for openai-sdk-helpers."""
6
2
 
7
3
  import logging
8
- import threading
9
- from typing import Any
10
-
11
4
 
12
- class LoggerFactory:
13
- """Centralized logger creation and configuration.
14
5
 
15
- Manages logger initialization and configuration to ensure consistent
16
- logging behavior across the entire SDK. Thread-safe.
6
+ def log(
7
+ message: str,
8
+ level: int = logging.INFO,
9
+ *,
10
+ logger_name: str = "openai_sdk_helpers",
11
+ ) -> None:
12
+ """Log a message using Python's standard logging.
13
+
14
+ Parameters
15
+ ----------
16
+ message : str
17
+ The message to log.
18
+ level : int
19
+ Logging level (e.g., logging.DEBUG, logging.INFO).
20
+ Default is logging.INFO.
21
+ logger_name : str
22
+ Name of the logger. Default is "openai_sdk_helpers".
17
23
 
18
24
  Examples
19
25
  --------
20
- Configure logging once at application startup:
21
-
22
- >>> from openai_sdk_helpers.logging_config import LoggerFactory
23
- >>> import logging
24
- >>> LoggerFactory.configure(
25
- ... level=logging.DEBUG,
26
- ... handlers=[logging.StreamHandler()],
27
- ... )
28
-
29
- Get a logger instance in your module:
30
-
31
- >>> logger = LoggerFactory.get_logger("openai_sdk_helpers.agent")
32
- >>> logger.debug("Debug message")
26
+ >>> from openai_sdk_helpers.logging_config import log
27
+ >>> log("Operation completed")
28
+ >>> log("Debug info", level=logging.DEBUG)
33
29
  """
30
+ logger = logging.getLogger(logger_name)
31
+ logger.log(level, message)
34
32
 
35
- _initialized = False
36
- _log_level = logging.INFO
37
- _handlers: list[logging.Handler] = []
38
- _lock = threading.Lock()
39
-
40
- @classmethod
41
- def configure(
42
- cls,
43
- level: int = logging.INFO,
44
- handlers: list[logging.Handler] | None = None,
45
- ) -> None:
46
- """Configure logging globally.
47
-
48
- Parameters
49
- ----------
50
- level : int
51
- Logging level (e.g., logging.DEBUG, logging.INFO).
52
- Default is logging.INFO.
53
- handlers : list[logging.Handler] | None
54
- List of logging handlers. If None, a default
55
- StreamHandler is created. Default is None.
56
-
57
- Notes
58
- -----
59
- This method is thread-safe and can be called multiple times.
60
- """
61
- with cls._lock:
62
- cls._log_level = level
63
- if handlers:
64
- cls._handlers = handlers
65
- else:
66
- handler = logging.StreamHandler()
67
- handler.setLevel(level)
68
- formatter = logging.Formatter(
69
- "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
70
- )
71
- handler.setFormatter(formatter)
72
- cls._handlers = [handler]
73
- cls._initialized = True
74
-
75
- @classmethod
76
- def get_logger(cls, name: str) -> logging.Logger:
77
- """Get configured logger instance.
78
-
79
- Parameters
80
- ----------
81
- name : str
82
- Logger name, typically __name__ of calling module.
83
-
84
- Returns
85
- -------
86
- logging.Logger
87
- Configured logger instance.
88
- """
89
- logger = logging.getLogger(name)
90
-
91
- # Skip configuration if already configured
92
- if logger.handlers:
93
- return logger
94
-
95
- with cls._lock:
96
- if not cls._initialized:
97
- cls.configure()
98
-
99
- for handler in cls._handlers:
100
- logger.addHandler(handler)
101
-
102
- logger.setLevel(cls._log_level)
103
- logger.propagate = False
104
33
 
105
- return logger
34
+ __all__ = ["log"]
@@ -176,7 +176,7 @@ class PromptRenderer:
176
176
  ... context={"key": "value"}
177
177
  ... )
178
178
  """
179
- from openai_sdk_helpers.validation import validate_safe_path
179
+ from openai_sdk_helpers.utils.validation import validate_safe_path
180
180
 
181
181
  path = Path(template_path)
182
182
  if path.is_absolute():
@@ -1,9 +1,9 @@
1
1
  """Response handling for OpenAI API interactions.
2
2
 
3
3
  This module provides comprehensive support for managing OpenAI API responses,
4
- including message handling, tool execution, vector store attachments, and
5
- structured output parsing. It serves as the foundation for building
6
- sophisticated AI agents with persistent conversation state.
4
+ including message handling, tool execution, vector store attachments, file
5
+ processing, and structured output parsing. It serves as the foundation for
6
+ building sophisticated AI agents with persistent conversation state.
7
7
 
8
8
  Classes
9
9
  -------
@@ -28,12 +28,15 @@ run_streamed
28
28
  Execute a response workflow and return the asynchronous result.
29
29
  attach_vector_store
30
30
  Attach vector stores to a response's file_search tool.
31
+ process_files
32
+ Process file attachments with automatic type detection.
31
33
  """
32
34
 
33
35
  from __future__ import annotations
34
36
 
35
37
  from .base import BaseResponse
36
38
  from .config import ResponseConfiguration, ResponseRegistry, get_default_registry
39
+ from .files import process_files
37
40
  from .messages import ResponseMessage, ResponseMessages
38
41
  from .runner import run_async, run_streamed, run_sync
39
42
  from .tool_call import ResponseToolCall, parse_tool_arguments
@@ -52,4 +55,5 @@ __all__ = [
52
55
  "ResponseToolCall",
53
56
  "parse_tool_arguments",
54
57
  "attach_vector_store",
58
+ "process_files",
55
59
  ]