hammad-python 0.0.29__py3-none-any.whl → 0.0.31__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 (137) hide show
  1. ham/__init__.py +10 -0
  2. {hammad_python-0.0.29.dist-info → hammad_python-0.0.31.dist-info}/METADATA +6 -32
  3. hammad_python-0.0.31.dist-info/RECORD +6 -0
  4. hammad/__init__.py +0 -84
  5. hammad/_internal.py +0 -256
  6. hammad/_main.py +0 -226
  7. hammad/cache/__init__.py +0 -40
  8. hammad/cache/base_cache.py +0 -181
  9. hammad/cache/cache.py +0 -169
  10. hammad/cache/decorators.py +0 -261
  11. hammad/cache/file_cache.py +0 -80
  12. hammad/cache/ttl_cache.py +0 -74
  13. hammad/cli/__init__.py +0 -33
  14. hammad/cli/animations.py +0 -573
  15. hammad/cli/plugins.py +0 -867
  16. hammad/cli/styles/__init__.py +0 -55
  17. hammad/cli/styles/settings.py +0 -139
  18. hammad/cli/styles/types.py +0 -358
  19. hammad/cli/styles/utils.py +0 -634
  20. hammad/data/__init__.py +0 -90
  21. hammad/data/collections/__init__.py +0 -49
  22. hammad/data/collections/collection.py +0 -326
  23. hammad/data/collections/indexes/__init__.py +0 -37
  24. hammad/data/collections/indexes/qdrant/__init__.py +0 -1
  25. hammad/data/collections/indexes/qdrant/index.py +0 -723
  26. hammad/data/collections/indexes/qdrant/settings.py +0 -94
  27. hammad/data/collections/indexes/qdrant/utils.py +0 -210
  28. hammad/data/collections/indexes/tantivy/__init__.py +0 -1
  29. hammad/data/collections/indexes/tantivy/index.py +0 -426
  30. hammad/data/collections/indexes/tantivy/settings.py +0 -40
  31. hammad/data/collections/indexes/tantivy/utils.py +0 -176
  32. hammad/data/configurations/__init__.py +0 -35
  33. hammad/data/configurations/configuration.py +0 -564
  34. hammad/data/models/__init__.py +0 -50
  35. hammad/data/models/extensions/__init__.py +0 -4
  36. hammad/data/models/extensions/pydantic/__init__.py +0 -42
  37. hammad/data/models/extensions/pydantic/converters.py +0 -759
  38. hammad/data/models/fields.py +0 -546
  39. hammad/data/models/model.py +0 -1078
  40. hammad/data/models/utils.py +0 -280
  41. hammad/data/sql/__init__.py +0 -24
  42. hammad/data/sql/database.py +0 -576
  43. hammad/data/sql/types.py +0 -127
  44. hammad/data/types/__init__.py +0 -75
  45. hammad/data/types/file.py +0 -431
  46. hammad/data/types/multimodal/__init__.py +0 -36
  47. hammad/data/types/multimodal/audio.py +0 -200
  48. hammad/data/types/multimodal/image.py +0 -182
  49. hammad/data/types/text.py +0 -1308
  50. hammad/formatting/__init__.py +0 -33
  51. hammad/formatting/json/__init__.py +0 -27
  52. hammad/formatting/json/converters.py +0 -158
  53. hammad/formatting/text/__init__.py +0 -63
  54. hammad/formatting/text/converters.py +0 -723
  55. hammad/formatting/text/markdown.py +0 -131
  56. hammad/formatting/yaml/__init__.py +0 -26
  57. hammad/formatting/yaml/converters.py +0 -5
  58. hammad/genai/__init__.py +0 -217
  59. hammad/genai/a2a/__init__.py +0 -32
  60. hammad/genai/a2a/workers.py +0 -552
  61. hammad/genai/agents/__init__.py +0 -59
  62. hammad/genai/agents/agent.py +0 -1973
  63. hammad/genai/agents/run.py +0 -1024
  64. hammad/genai/agents/types/__init__.py +0 -42
  65. hammad/genai/agents/types/agent_context.py +0 -13
  66. hammad/genai/agents/types/agent_event.py +0 -128
  67. hammad/genai/agents/types/agent_hooks.py +0 -220
  68. hammad/genai/agents/types/agent_messages.py +0 -31
  69. hammad/genai/agents/types/agent_response.py +0 -125
  70. hammad/genai/agents/types/agent_stream.py +0 -327
  71. hammad/genai/graphs/__init__.py +0 -125
  72. hammad/genai/graphs/_utils.py +0 -190
  73. hammad/genai/graphs/base.py +0 -1828
  74. hammad/genai/graphs/plugins.py +0 -316
  75. hammad/genai/graphs/types.py +0 -638
  76. hammad/genai/models/__init__.py +0 -1
  77. hammad/genai/models/embeddings/__init__.py +0 -43
  78. hammad/genai/models/embeddings/model.py +0 -226
  79. hammad/genai/models/embeddings/run.py +0 -163
  80. hammad/genai/models/embeddings/types/__init__.py +0 -37
  81. hammad/genai/models/embeddings/types/embedding_model_name.py +0 -75
  82. hammad/genai/models/embeddings/types/embedding_model_response.py +0 -76
  83. hammad/genai/models/embeddings/types/embedding_model_run_params.py +0 -66
  84. hammad/genai/models/embeddings/types/embedding_model_settings.py +0 -47
  85. hammad/genai/models/language/__init__.py +0 -57
  86. hammad/genai/models/language/model.py +0 -1098
  87. hammad/genai/models/language/run.py +0 -878
  88. hammad/genai/models/language/types/__init__.py +0 -40
  89. hammad/genai/models/language/types/language_model_instructor_mode.py +0 -47
  90. hammad/genai/models/language/types/language_model_messages.py +0 -28
  91. hammad/genai/models/language/types/language_model_name.py +0 -239
  92. hammad/genai/models/language/types/language_model_request.py +0 -127
  93. hammad/genai/models/language/types/language_model_response.py +0 -217
  94. hammad/genai/models/language/types/language_model_response_chunk.py +0 -56
  95. hammad/genai/models/language/types/language_model_settings.py +0 -89
  96. hammad/genai/models/language/types/language_model_stream.py +0 -600
  97. hammad/genai/models/language/utils/__init__.py +0 -28
  98. hammad/genai/models/language/utils/requests.py +0 -421
  99. hammad/genai/models/language/utils/structured_outputs.py +0 -135
  100. hammad/genai/models/model_provider.py +0 -4
  101. hammad/genai/models/multimodal.py +0 -47
  102. hammad/genai/models/reranking.py +0 -26
  103. hammad/genai/types/__init__.py +0 -1
  104. hammad/genai/types/base.py +0 -215
  105. hammad/genai/types/history.py +0 -290
  106. hammad/genai/types/tools.py +0 -507
  107. hammad/logging/__init__.py +0 -35
  108. hammad/logging/decorators.py +0 -834
  109. hammad/logging/logger.py +0 -1018
  110. hammad/mcp/__init__.py +0 -53
  111. hammad/mcp/client/__init__.py +0 -35
  112. hammad/mcp/client/client.py +0 -624
  113. hammad/mcp/client/client_service.py +0 -400
  114. hammad/mcp/client/settings.py +0 -178
  115. hammad/mcp/servers/__init__.py +0 -26
  116. hammad/mcp/servers/launcher.py +0 -1161
  117. hammad/runtime/__init__.py +0 -32
  118. hammad/runtime/decorators.py +0 -142
  119. hammad/runtime/run.py +0 -299
  120. hammad/service/__init__.py +0 -49
  121. hammad/service/create.py +0 -527
  122. hammad/service/decorators.py +0 -283
  123. hammad/types.py +0 -288
  124. hammad/typing/__init__.py +0 -435
  125. hammad/web/__init__.py +0 -43
  126. hammad/web/http/__init__.py +0 -1
  127. hammad/web/http/client.py +0 -944
  128. hammad/web/models.py +0 -275
  129. hammad/web/openapi/__init__.py +0 -1
  130. hammad/web/openapi/client.py +0 -740
  131. hammad/web/search/__init__.py +0 -1
  132. hammad/web/search/client.py +0 -1023
  133. hammad/web/utils.py +0 -472
  134. hammad_python-0.0.29.dist-info/RECORD +0 -135
  135. {hammad → ham}/py.typed +0 -0
  136. {hammad_python-0.0.29.dist-info → hammad_python-0.0.31.dist-info}/WHEEL +0 -0
  137. {hammad_python-0.0.29.dist-info → hammad_python-0.0.31.dist-info}/licenses/LICENSE +0 -0
@@ -1,878 +0,0 @@
1
- """hammad.genai.language_models.run
2
-
3
- Standalone functions for running language models with full parameter typing.
4
- """
5
-
6
- import inspect
7
- import functools
8
- from typing import (
9
- Any,
10
- List,
11
- TypeVar,
12
- Union,
13
- Optional,
14
- Type,
15
- overload,
16
- Dict,
17
- TYPE_CHECKING,
18
- Callable,
19
- )
20
- from typing_extensions import Literal
21
-
22
- if TYPE_CHECKING:
23
- from httpx import Timeout
24
-
25
- from openai.types.chat import (
26
- ChatCompletionModality,
27
- ChatCompletionPredictionContentParam,
28
- ChatCompletionAudioParam,
29
- )
30
-
31
- from .types import (
32
- LanguageModelMessages,
33
- LanguageModelInstructorMode,
34
- LanguageModelName,
35
- LanguageModelResponse,
36
- LanguageModelStream,
37
- )
38
- from .model import LanguageModel
39
-
40
-
41
- __all__ = [
42
- "run_language_model",
43
- "async_run_language_model",
44
- "language_model_decorator",
45
- ]
46
-
47
-
48
- T = TypeVar("T")
49
-
50
-
51
- # Overloads for run_language_model - String output, non-streaming
52
- @overload
53
- def run_language_model(
54
- messages: "LanguageModelMessages",
55
- instructions: Optional[str] = None,
56
- *,
57
- # Provider settings
58
- model: "LanguageModelName" = "openai/gpt-4o-mini",
59
- base_url: Optional[str] = None,
60
- api_key: Optional[str] = None,
61
- api_version: Optional[str] = None,
62
- organization: Optional[str] = None,
63
- deployment_id: Optional[str] = None,
64
- model_list: Optional[List[Any]] = None,
65
- extra_headers: Optional[Dict[str, str]] = None,
66
- mock_response: Optional[bool] = None,
67
- # Streaming settings
68
- stream: Literal[False] = False,
69
- stream_options: Optional[Dict[str, Any]] = None,
70
- # Extended settings
71
- timeout: Optional[Union[float, str, "Timeout"]] = None,
72
- temperature: Optional[float] = None,
73
- top_p: Optional[float] = None,
74
- n: Optional[int] = None,
75
- stop: Optional[str] = None,
76
- max_completion_tokens: Optional[int] = None,
77
- max_tokens: Optional[int] = None,
78
- modalities: Optional[List["ChatCompletionModality"]] = None,
79
- prediction: Optional["ChatCompletionPredictionContentParam"] = None,
80
- audio: Optional["ChatCompletionAudioParam"] = None,
81
- presence_penalty: Optional[float] = None,
82
- frequency_penalty: Optional[float] = None,
83
- logit_bias: Optional[Dict[str, float]] = None,
84
- user: Optional[str] = None,
85
- reasoning_effort: Optional[str] = None,
86
- seed: Optional[int] = None,
87
- logprobs: Optional[bool] = None,
88
- top_logprobs: Optional[int] = None,
89
- thinking: Optional[Dict[str, Any]] = None,
90
- web_search_options: Optional[Dict[str, Any]] = None,
91
- # Tools settings
92
- tools: Optional[List[Any]] = None,
93
- tool_choice: Optional[Union[str, Dict[str, Any]]] = None,
94
- parallel_tool_calls: Optional[bool] = None,
95
- functions: Optional[List[Any]] = None,
96
- function_call: Optional[str] = None,
97
- ) -> "LanguageModelResponse[str]": ...
98
-
99
-
100
- # Overloads for run_language_model - String output, streaming
101
- @overload
102
- def run_language_model(
103
- messages: "LanguageModelMessages",
104
- instructions: Optional[str] = None,
105
- *,
106
- # Provider settings
107
- model: "LanguageModelName" = "openai/gpt-4o-mini",
108
- base_url: Optional[str] = None,
109
- api_key: Optional[str] = None,
110
- api_version: Optional[str] = None,
111
- organization: Optional[str] = None,
112
- deployment_id: Optional[str] = None,
113
- model_list: Optional[List[Any]] = None,
114
- extra_headers: Optional[Dict[str, str]] = None,
115
- mock_response: Optional[bool] = None,
116
- # Streaming settings
117
- stream: Literal[True],
118
- stream_options: Optional[Dict[str, Any]] = None,
119
- # Extended settings
120
- timeout: Optional[Union[float, str, "Timeout"]] = None,
121
- temperature: Optional[float] = None,
122
- top_p: Optional[float] = None,
123
- n: Optional[int] = None,
124
- stop: Optional[str] = None,
125
- max_completion_tokens: Optional[int] = None,
126
- max_tokens: Optional[int] = None,
127
- modalities: Optional[List["ChatCompletionModality"]] = None,
128
- prediction: Optional["ChatCompletionPredictionContentParam"] = None,
129
- audio: Optional["ChatCompletionAudioParam"] = None,
130
- presence_penalty: Optional[float] = None,
131
- frequency_penalty: Optional[float] = None,
132
- logit_bias: Optional[Dict[str, float]] = None,
133
- user: Optional[str] = None,
134
- reasoning_effort: Optional[str] = None,
135
- seed: Optional[int] = None,
136
- logprobs: Optional[bool] = None,
137
- top_logprobs: Optional[int] = None,
138
- thinking: Optional[Dict[str, Any]] = None,
139
- web_search_options: Optional[Dict[str, Any]] = None,
140
- # Tools settings
141
- tools: Optional[List[Any]] = None,
142
- tool_choice: Optional[Union[str, Dict[str, Any]]] = None,
143
- parallel_tool_calls: Optional[bool] = None,
144
- functions: Optional[List[Any]] = None,
145
- function_call: Optional[str] = None,
146
- ) -> "LanguageModelStream[str]": ...
147
-
148
-
149
- # Overloads for run_language_model - Structured output, non-streaming
150
- @overload
151
- def run_language_model(
152
- messages: "LanguageModelMessages",
153
- instructions: Optional[str] = None,
154
- *,
155
- # Provider settings
156
- model: "LanguageModelName" = "openai/gpt-4o-mini",
157
- base_url: Optional[str] = None,
158
- api_key: Optional[str] = None,
159
- api_version: Optional[str] = None,
160
- organization: Optional[str] = None,
161
- deployment_id: Optional[str] = None,
162
- model_list: Optional[List[Any]] = None,
163
- extra_headers: Optional[Dict[str, str]] = None,
164
- mock_response: Optional[bool] = None,
165
- # Structured output settings
166
- type: Type[T],
167
- instructor_mode: Optional[LanguageModelInstructorMode] = "tool_call",
168
- response_field_name: Optional[str] = None,
169
- response_field_instruction: Optional[str] = None,
170
- response_model_name: Optional[str] = None,
171
- max_retries: Optional[int] = None,
172
- strict: Optional[bool] = None,
173
- validation_context: Optional[Dict[str, Any]] = None,
174
- context: Optional[Dict[str, Any]] = None,
175
- completion_kwargs_hooks: Optional[List[Callable[..., None]]] = None,
176
- completion_response_hooks: Optional[List[Callable[..., None]]] = None,
177
- completion_error_hooks: Optional[List[Callable[..., None]]] = None,
178
- completion_last_attempt_hooks: Optional[List[Callable[..., None]]] = None,
179
- parse_error_hooks: Optional[List[Callable[..., None]]] = None,
180
- # Streaming settings
181
- stream: Literal[False] = False,
182
- stream_options: Optional[Dict[str, Any]] = None,
183
- # Extended settings
184
- timeout: Optional[Union[float, str, "Timeout"]] = None,
185
- temperature: Optional[float] = None,
186
- top_p: Optional[float] = None,
187
- n: Optional[int] = None,
188
- stop: Optional[str] = None,
189
- max_completion_tokens: Optional[int] = None,
190
- max_tokens: Optional[int] = None,
191
- modalities: Optional[List["ChatCompletionModality"]] = None,
192
- prediction: Optional["ChatCompletionPredictionContentParam"] = None,
193
- audio: Optional["ChatCompletionAudioParam"] = None,
194
- presence_penalty: Optional[float] = None,
195
- frequency_penalty: Optional[float] = None,
196
- logit_bias: Optional[Dict[str, float]] = None,
197
- user: Optional[str] = None,
198
- reasoning_effort: Optional[str] = None,
199
- seed: Optional[int] = None,
200
- logprobs: Optional[bool] = None,
201
- top_logprobs: Optional[int] = None,
202
- thinking: Optional[Dict[str, Any]] = None,
203
- web_search_options: Optional[Dict[str, Any]] = None,
204
- # Tools settings
205
- tools: Optional[List[Any]] = None,
206
- tool_choice: Optional[Union[str, Dict[str, Any]]] = None,
207
- parallel_tool_calls: Optional[bool] = None,
208
- functions: Optional[List[Any]] = None,
209
- function_call: Optional[str] = None,
210
- ) -> "LanguageModelResponse[T]": ...
211
-
212
-
213
- # Overloads for run_language_model - Structured output, streaming
214
- @overload
215
- def run_language_model(
216
- messages: "LanguageModelMessages",
217
- instructions: Optional[str] = None,
218
- *,
219
- # Provider settings
220
- model: "LanguageModelName" = "openai/gpt-4o-mini",
221
- base_url: Optional[str] = None,
222
- api_key: Optional[str] = None,
223
- api_version: Optional[str] = None,
224
- organization: Optional[str] = None,
225
- deployment_id: Optional[str] = None,
226
- model_list: Optional[List[Any]] = None,
227
- extra_headers: Optional[Dict[str, str]] = None,
228
- mock_response: Optional[bool] = None,
229
- # Structured output settings
230
- type: Type[T],
231
- instructor_mode: Optional[LanguageModelInstructorMode] = "tool_call",
232
- response_field_name: Optional[str] = None,
233
- response_field_instruction: Optional[str] = None,
234
- response_model_name: Optional[str] = None,
235
- max_retries: Optional[int] = None,
236
- strict: Optional[bool] = None,
237
- validation_context: Optional[Dict[str, Any]] = None,
238
- context: Optional[Dict[str, Any]] = None,
239
- completion_kwargs_hooks: Optional[List[Callable[..., None]]] = None,
240
- completion_response_hooks: Optional[List[Callable[..., None]]] = None,
241
- completion_error_hooks: Optional[List[Callable[..., None]]] = None,
242
- completion_last_attempt_hooks: Optional[List[Callable[..., None]]] = None,
243
- parse_error_hooks: Optional[List[Callable[..., None]]] = None,
244
- # Streaming settings
245
- stream: Literal[True],
246
- stream_options: Optional[Dict[str, Any]] = None,
247
- # Extended settings
248
- timeout: Optional[Union[float, str, "Timeout"]] = None,
249
- temperature: Optional[float] = None,
250
- top_p: Optional[float] = None,
251
- n: Optional[int] = None,
252
- stop: Optional[str] = None,
253
- max_completion_tokens: Optional[int] = None,
254
- max_tokens: Optional[int] = None,
255
- modalities: Optional[List["ChatCompletionModality"]] = None,
256
- prediction: Optional["ChatCompletionPredictionContentParam"] = None,
257
- audio: Optional["ChatCompletionAudioParam"] = None,
258
- presence_penalty: Optional[float] = None,
259
- frequency_penalty: Optional[float] = None,
260
- logit_bias: Optional[Dict[str, float]] = None,
261
- user: Optional[str] = None,
262
- reasoning_effort: Optional[str] = None,
263
- seed: Optional[int] = None,
264
- logprobs: Optional[bool] = None,
265
- top_logprobs: Optional[int] = None,
266
- thinking: Optional[Dict[str, Any]] = None,
267
- web_search_options: Optional[Dict[str, Any]] = None,
268
- # Tools settings
269
- tools: Optional[List[Any]] = None,
270
- tool_choice: Optional[Union[str, Dict[str, Any]]] = None,
271
- parallel_tool_calls: Optional[bool] = None,
272
- functions: Optional[List[Any]] = None,
273
- function_call: Optional[str] = None,
274
- ) -> "LanguageModelStream[T]": ...
275
-
276
-
277
- def run_language_model(
278
- messages: "LanguageModelMessages",
279
- instructions: Optional[str] = None,
280
- mock_response: Optional[bool] = None,
281
- verbose: bool = False,
282
- debug: bool = False,
283
- **kwargs: Any,
284
- ) -> Union["LanguageModelResponse[Any]", "LanguageModelStream[Any]"]:
285
- """Run a language model request with full parameter support.
286
-
287
- Args:
288
- messages: The input messages/content for the request
289
- instructions: Optional system instructions to prepend
290
- verbose: If True, set logger to INFO level for detailed output
291
- debug: If True, set logger to DEBUG level for maximum verbosity
292
- **kwargs: All request parameters from LanguageModelRequest
293
-
294
- Returns:
295
- LanguageModelResponse or Stream depending on parameters
296
- """
297
- # Extract model parameter or use default
298
- model = kwargs.pop("model", "openai/gpt-4o-mini")
299
-
300
- # Create language model instance
301
- language_model = LanguageModel(model=model, verbose=verbose, debug=debug)
302
-
303
- # Forward to the instance method
304
- return language_model.run(
305
- messages,
306
- instructions,
307
- mock_response=mock_response,
308
- verbose=verbose,
309
- debug=debug,
310
- **kwargs,
311
- )
312
-
313
-
314
- # Async overloads for async_run_language_model - String output, non-streaming
315
- @overload
316
- async def async_run_language_model(
317
- messages: "LanguageModelMessages",
318
- instructions: Optional[str] = None,
319
- *,
320
- # Provider settings
321
- model: "LanguageModelName" = "openai/gpt-4o-mini",
322
- base_url: Optional[str] = None,
323
- api_key: Optional[str] = None,
324
- api_version: Optional[str] = None,
325
- organization: Optional[str] = None,
326
- deployment_id: Optional[str] = None,
327
- model_list: Optional[List[Any]] = None,
328
- extra_headers: Optional[Dict[str, str]] = None,
329
- # Streaming settings
330
- stream: Literal[False] = False,
331
- stream_options: Optional[Dict[str, Any]] = None,
332
- # Extended settings
333
- timeout: Optional[Union[float, str, "Timeout"]] = None,
334
- temperature: Optional[float] = None,
335
- top_p: Optional[float] = None,
336
- n: Optional[int] = None,
337
- stop: Optional[str] = None,
338
- max_completion_tokens: Optional[int] = None,
339
- max_tokens: Optional[int] = None,
340
- modalities: Optional[List["ChatCompletionModality"]] = None,
341
- prediction: Optional["ChatCompletionPredictionContentParam"] = None,
342
- audio: Optional["ChatCompletionAudioParam"] = None,
343
- presence_penalty: Optional[float] = None,
344
- frequency_penalty: Optional[float] = None,
345
- logit_bias: Optional[Dict[str, float]] = None,
346
- user: Optional[str] = None,
347
- reasoning_effort: Optional[str] = None,
348
- seed: Optional[int] = None,
349
- logprobs: Optional[bool] = None,
350
- top_logprobs: Optional[int] = None,
351
- thinking: Optional[Dict[str, Any]] = None,
352
- web_search_options: Optional[Dict[str, Any]] = None,
353
- # Tools settings
354
- tools: Optional[List[Any]] = None,
355
- tool_choice: Optional[Union[str, Dict[str, Any]]] = None,
356
- parallel_tool_calls: Optional[bool] = None,
357
- functions: Optional[List[Any]] = None,
358
- function_call: Optional[str] = None,
359
- ) -> "LanguageModelResponse[str]": ...
360
-
361
-
362
- # Async overloads for async_run_language_model - String output, streaming
363
- @overload
364
- async def async_run_language_model(
365
- messages: "LanguageModelMessages",
366
- instructions: Optional[str] = None,
367
- *,
368
- # Provider settings
369
- model: "LanguageModelName" = "openai/gpt-4o-mini",
370
- base_url: Optional[str] = None,
371
- api_key: Optional[str] = None,
372
- api_version: Optional[str] = None,
373
- organization: Optional[str] = None,
374
- deployment_id: Optional[str] = None,
375
- model_list: Optional[List[Any]] = None,
376
- extra_headers: Optional[Dict[str, str]] = None,
377
- mock_response: Optional[bool] = None,
378
- # Streaming settings
379
- stream: Literal[True],
380
- stream_options: Optional[Dict[str, Any]] = None,
381
- # Extended settings
382
- timeout: Optional[Union[float, str, "Timeout"]] = None,
383
- temperature: Optional[float] = None,
384
- top_p: Optional[float] = None,
385
- n: Optional[int] = None,
386
- stop: Optional[str] = None,
387
- max_completion_tokens: Optional[int] = None,
388
- max_tokens: Optional[int] = None,
389
- modalities: Optional[List["ChatCompletionModality"]] = None,
390
- prediction: Optional["ChatCompletionPredictionContentParam"] = None,
391
- audio: Optional["ChatCompletionAudioParam"] = None,
392
- presence_penalty: Optional[float] = None,
393
- frequency_penalty: Optional[float] = None,
394
- logit_bias: Optional[Dict[str, float]] = None,
395
- user: Optional[str] = None,
396
- reasoning_effort: Optional[str] = None,
397
- seed: Optional[int] = None,
398
- logprobs: Optional[bool] = None,
399
- top_logprobs: Optional[int] = None,
400
- thinking: Optional[Dict[str, Any]] = None,
401
- web_search_options: Optional[Dict[str, Any]] = None,
402
- # Tools settings
403
- tools: Optional[List[Any]] = None,
404
- tool_choice: Optional[Union[str, Dict[str, Any]]] = None,
405
- parallel_tool_calls: Optional[bool] = None,
406
- functions: Optional[List[Any]] = None,
407
- function_call: Optional[str] = None,
408
- ) -> "LanguageModelStream[str]": ...
409
-
410
-
411
- # Async overloads for async_run_language_model - Structured output, non-streaming
412
- @overload
413
- async def async_run_language_model(
414
- messages: "LanguageModelMessages",
415
- instructions: Optional[str] = None,
416
- *,
417
- # Provider settings
418
- model: "LanguageModelName" = "openai/gpt-4o-mini",
419
- base_url: Optional[str] = None,
420
- api_key: Optional[str] = None,
421
- api_version: Optional[str] = None,
422
- organization: Optional[str] = None,
423
- deployment_id: Optional[str] = None,
424
- model_list: Optional[List[Any]] = None,
425
- extra_headers: Optional[Dict[str, str]] = None,
426
- mock_response: Optional[bool] = None,
427
- # Structured output settings
428
- type: Type[T],
429
- instructor_mode: Optional[LanguageModelInstructorMode] = "tool_call",
430
- response_field_name: Optional[str] = None,
431
- response_field_instruction: Optional[str] = None,
432
- response_model_name: Optional[str] = None,
433
- max_retries: Optional[int] = None,
434
- strict: Optional[bool] = None,
435
- validation_context: Optional[Dict[str, Any]] = None,
436
- context: Optional[Dict[str, Any]] = None,
437
- completion_kwargs_hooks: Optional[List[Callable[..., None]]] = None,
438
- completion_response_hooks: Optional[List[Callable[..., None]]] = None,
439
- completion_error_hooks: Optional[List[Callable[..., None]]] = None,
440
- completion_last_attempt_hooks: Optional[List[Callable[..., None]]] = None,
441
- parse_error_hooks: Optional[List[Callable[..., None]]] = None,
442
- # Streaming settings
443
- stream: Literal[False] = False,
444
- stream_options: Optional[Dict[str, Any]] = None,
445
- # Extended settings
446
- timeout: Optional[Union[float, str, "Timeout"]] = None,
447
- temperature: Optional[float] = None,
448
- top_p: Optional[float] = None,
449
- n: Optional[int] = None,
450
- stop: Optional[str] = None,
451
- max_completion_tokens: Optional[int] = None,
452
- max_tokens: Optional[int] = None,
453
- modalities: Optional[List["ChatCompletionModality"]] = None,
454
- prediction: Optional["ChatCompletionPredictionContentParam"] = None,
455
- audio: Optional["ChatCompletionAudioParam"] = None,
456
- presence_penalty: Optional[float] = None,
457
- frequency_penalty: Optional[float] = None,
458
- logit_bias: Optional[Dict[str, float]] = None,
459
- user: Optional[str] = None,
460
- reasoning_effort: Optional[str] = None,
461
- seed: Optional[int] = None,
462
- logprobs: Optional[bool] = None,
463
- top_logprobs: Optional[int] = None,
464
- thinking: Optional[Dict[str, Any]] = None,
465
- web_search_options: Optional[Dict[str, Any]] = None,
466
- # Tools settings
467
- tools: Optional[List[Any]] = None,
468
- tool_choice: Optional[Union[str, Dict[str, Any]]] = None,
469
- parallel_tool_calls: Optional[bool] = None,
470
- functions: Optional[List[Any]] = None,
471
- function_call: Optional[str] = None,
472
- ) -> "LanguageModelResponse[T]": ...
473
-
474
-
475
- # Async overloads for async_run_language_model - Structured output, streaming
476
- @overload
477
- async def async_run_language_model(
478
- messages: "LanguageModelMessages",
479
- instructions: Optional[str] = None,
480
- *,
481
- # Provider settings
482
- model: "LanguageModelName" = "openai/gpt-4o-mini",
483
- base_url: Optional[str] = None,
484
- api_key: Optional[str] = None,
485
- api_version: Optional[str] = None,
486
- organization: Optional[str] = None,
487
- deployment_id: Optional[str] = None,
488
- model_list: Optional[List[Any]] = None,
489
- extra_headers: Optional[Dict[str, str]] = None,
490
- mock_response: Optional[bool] = None,
491
- # Structured output settings
492
- type: Type[T],
493
- instructor_mode: Optional[LanguageModelInstructorMode] = "tool_call",
494
- response_field_name: Optional[str] = None,
495
- response_field_instruction: Optional[str] = None,
496
- response_model_name: Optional[str] = None,
497
- max_retries: Optional[int] = None,
498
- strict: Optional[bool] = None,
499
- validation_context: Optional[Dict[str, Any]] = None,
500
- context: Optional[Dict[str, Any]] = None,
501
- completion_kwargs_hooks: Optional[List[Callable[..., None]]] = None,
502
- completion_response_hooks: Optional[List[Callable[..., None]]] = None,
503
- completion_error_hooks: Optional[List[Callable[..., None]]] = None,
504
- completion_last_attempt_hooks: Optional[List[Callable[..., None]]] = None,
505
- parse_error_hooks: Optional[List[Callable[..., None]]] = None,
506
- # Streaming settings
507
- stream: Literal[True],
508
- stream_options: Optional[Dict[str, Any]] = None,
509
- # Extended settings
510
- timeout: Optional[Union[float, str, "Timeout"]] = None,
511
- temperature: Optional[float] = None,
512
- top_p: Optional[float] = None,
513
- n: Optional[int] = None,
514
- stop: Optional[str] = None,
515
- max_completion_tokens: Optional[int] = None,
516
- max_tokens: Optional[int] = None,
517
- modalities: Optional[List["ChatCompletionModality"]] = None,
518
- prediction: Optional["ChatCompletionPredictionContentParam"] = None,
519
- audio: Optional["ChatCompletionAudioParam"] = None,
520
- presence_penalty: Optional[float] = None,
521
- frequency_penalty: Optional[float] = None,
522
- logit_bias: Optional[Dict[str, float]] = None,
523
- user: Optional[str] = None,
524
- reasoning_effort: Optional[str] = None,
525
- seed: Optional[int] = None,
526
- logprobs: Optional[bool] = None,
527
- top_logprobs: Optional[int] = None,
528
- thinking: Optional[Dict[str, Any]] = None,
529
- web_search_options: Optional[Dict[str, Any]] = None,
530
- # Tools settings
531
- tools: Optional[List[Any]] = None,
532
- tool_choice: Optional[Union[str, Dict[str, Any]]] = None,
533
- parallel_tool_calls: Optional[bool] = None,
534
- functions: Optional[List[Any]] = None,
535
- function_call: Optional[str] = None,
536
- ) -> "LanguageModelStream[T]": ...
537
-
538
-
539
- async def async_run_language_model(
540
- messages: "LanguageModelMessages",
541
- instructions: Optional[str] = None,
542
- mock_response: Optional[bool] = None,
543
- verbose: bool = False,
544
- debug: bool = False,
545
- **kwargs: Any,
546
- ) -> Union["LanguageModelResponse[Any]", "LanguageModelStream[Any]"]:
547
- """Run an async language model request with full parameter support.
548
-
549
- Args:
550
- messages: The input messages/content for the request
551
- instructions: Optional system instructions to prepend
552
- verbose: If True, set logger to INFO level for detailed output
553
- debug: If True, set logger to DEBUG level for maximum verbosity
554
- **kwargs: All request parameters from LanguageModelRequest
555
-
556
- Returns:
557
- LanguageModelResponse or AsyncStream depending on parameters
558
- """
559
- # Extract model parameter or use default
560
- model = kwargs.pop("model", "openai/gpt-4o-mini")
561
-
562
- # Create language model instance
563
- language_model = LanguageModel(model=model, verbose=verbose, debug=debug)
564
-
565
- # Forward to the instance method
566
- return await language_model.async_run(
567
- messages,
568
- instructions,
569
- mock_response=mock_response,
570
- verbose=verbose,
571
- debug=debug,
572
- **kwargs,
573
- )
574
-
575
-
576
- def language_model_decorator(
577
- fn: Union[str, Callable, None] = None,
578
- *,
579
- # Model settings
580
- model: Optional[Union["LanguageModel", "LanguageModelName"]] = None,
581
- instructions: Optional[str] = None,
582
- mock_response: Optional[bool] = None,
583
- # Request settings
584
- output_type: Optional[Type] = None,
585
- stream: Optional[bool] = None,
586
- instructor_mode: Optional["LanguageModelInstructorMode"] = None,
587
- return_output: bool = True,
588
- # LM settings
589
- timeout: Optional[Union[float, str, "Timeout"]] = None,
590
- temperature: Optional[float] = None,
591
- top_p: Optional[float] = None,
592
- max_tokens: Optional[int] = None,
593
- presence_penalty: Optional[float] = None,
594
- frequency_penalty: Optional[float] = None,
595
- seed: Optional[int] = None,
596
- user: Optional[str] = None,
597
- # Advanced settings
598
- response_format: Optional[Dict[str, Any]] = None,
599
- stop: Optional[Union[str, List[str]]] = None,
600
- logit_bias: Optional[Dict[int, float]] = None,
601
- logprobs: Optional[bool] = None,
602
- top_logprobs: Optional[int] = None,
603
- thinking: Optional[Dict[str, Any]] = None,
604
- web_search_options: Optional[Dict[str, Any]] = None,
605
- # Tools settings
606
- tools: Optional[List[Any]] = None,
607
- tool_choice: Optional[Union[str, Dict[str, Any]]] = None,
608
- parallel_tool_calls: Optional[bool] = None,
609
- functions: Optional[List[Any]] = None,
610
- function_call: Optional[str] = None,
611
- verbose: bool = False,
612
- debug: bool = False,
613
- ):
614
- """Decorator that converts a function into a language model call.
615
-
616
- The function's parameters become the input to the LLM (converted to a string),
617
- the function's return type annotation becomes the language model's output type,
618
- and the function's docstring becomes the language model's instructions.
619
-
620
- Works with both sync and async functions.
621
-
622
- Can be used in multiple ways:
623
-
624
- 1. As a decorator with parameters:
625
- @language_model_decorator(model="gpt-4", temperature=0.7)
626
- def my_lm():
627
- pass
628
-
629
- 2. As a decorator without parameters:
630
- @language_model_decorator
631
- def my_lm():
632
- pass
633
-
634
- 3. As an inline function with model as first argument:
635
- lm = language_model_decorator("gpt-4")
636
- # Then use: decorated_func = lm(my_function)
637
-
638
- 4. As an inline function with all parameters:
639
- lm = language_model_decorator(model="gpt-4", temperature=0.7)
640
- # Then use: decorated_func = lm(my_function)
641
- """
642
- # Handle different calling patterns
643
- if callable(fn):
644
- # Case: @language_model_decorator (no parentheses)
645
- func = fn
646
- actual_model = model or "openai/gpt-4o-mini"
647
- return _create_language_model_wrapper(
648
- func,
649
- actual_model,
650
- instructions,
651
- mock_response,
652
- output_type,
653
- stream,
654
- instructor_mode,
655
- return_output,
656
- timeout,
657
- temperature,
658
- top_p,
659
- max_tokens,
660
- presence_penalty,
661
- frequency_penalty,
662
- seed,
663
- user,
664
- response_format,
665
- stop,
666
- logit_bias,
667
- logprobs,
668
- top_logprobs,
669
- thinking,
670
- web_search_options,
671
- tools,
672
- tool_choice,
673
- parallel_tool_calls,
674
- functions,
675
- function_call,
676
- verbose,
677
- debug,
678
- )
679
- elif isinstance(fn, str):
680
- # Case: language_model_decorator("gpt-4") - first arg is model
681
- actual_model = fn
682
- else:
683
- # Case: language_model_decorator() or language_model_decorator(model="gpt-4")
684
- actual_model = model or "openai/gpt-4o-mini"
685
-
686
- def decorator(func: Callable) -> Callable:
687
- return _create_language_model_wrapper(
688
- func,
689
- actual_model,
690
- instructions,
691
- mock_response,
692
- output_type,
693
- stream,
694
- instructor_mode,
695
- return_output,
696
- timeout,
697
- temperature,
698
- top_p,
699
- max_tokens,
700
- presence_penalty,
701
- frequency_penalty,
702
- seed,
703
- user,
704
- response_format,
705
- stop,
706
- logit_bias,
707
- logprobs,
708
- top_logprobs,
709
- thinking,
710
- web_search_options,
711
- tools,
712
- tool_choice,
713
- parallel_tool_calls,
714
- functions,
715
- function_call,
716
- verbose,
717
- debug,
718
- )
719
-
720
- return decorator
721
-
722
-
723
- def _create_language_model_wrapper(
724
- func: Callable,
725
- model: Union["LanguageModel", "LanguageModelName"],
726
- instructions: Optional[str],
727
- mock_response: Optional[bool],
728
- output_type: Optional[Type],
729
- stream: Optional[bool],
730
- instructor_mode: Optional["LanguageModelInstructorMode"],
731
- return_output: bool,
732
- timeout: Optional[Union[float, str, "Timeout"]],
733
- temperature: Optional[float],
734
- top_p: Optional[float],
735
- max_tokens: Optional[int],
736
- presence_penalty: Optional[float],
737
- frequency_penalty: Optional[float],
738
- seed: Optional[int],
739
- user: Optional[str],
740
- response_format: Optional[Dict[str, Any]],
741
- stop: Optional[Union[str, List[str]]],
742
- logit_bias: Optional[Dict[int, float]],
743
- logprobs: Optional[bool],
744
- top_logprobs: Optional[int],
745
- thinking: Optional[Dict[str, Any]],
746
- web_search_options: Optional[Dict[str, Any]],
747
- tools: Optional[List[Any]],
748
- tool_choice: Optional[Union[str, Dict[str, Any]]],
749
- parallel_tool_calls: Optional[bool],
750
- functions: Optional[List[Any]],
751
- function_call: Optional[str],
752
- verbose: bool,
753
- debug: bool,
754
- ) -> Callable:
755
- """Helper function to create the actual language model wrapper."""
756
- import inspect
757
- import asyncio
758
- from typing import get_type_hints
759
-
760
- # Get function metadata
761
- sig = inspect.signature(func)
762
- type_hints = get_type_hints(func)
763
- return_type = output_type or type_hints.get("return", str)
764
- func_instructions = instructions or func.__doc__ or ""
765
-
766
- # Check if function is async
767
- is_async = asyncio.iscoroutinefunction(func)
768
-
769
- if is_async:
770
-
771
- @functools.wraps(func)
772
- async def async_wrapper(*args, **kwargs):
773
- # Convert function parameters to message string
774
- bound_args = sig.bind(*args, **kwargs)
775
- bound_args.apply_defaults()
776
-
777
- # Create message from parameters
778
- param_parts = []
779
- for param_name, param_value in bound_args.arguments.items():
780
- param_parts.append(f"{param_name}: {param_value}")
781
- message = "\n".join(param_parts)
782
-
783
- # Prepare parameters for language model call
784
- lm_kwargs = {
785
- "messages": message,
786
- "instructions": func_instructions,
787
- "model": model,
788
- "mock_response": mock_response,
789
- "stream": stream,
790
- "instructor_mode": instructor_mode,
791
- "timeout": timeout,
792
- "temperature": temperature,
793
- "top_p": top_p,
794
- "max_tokens": max_tokens,
795
- "presence_penalty": presence_penalty,
796
- "frequency_penalty": frequency_penalty,
797
- "seed": seed,
798
- "user": user,
799
- "response_format": response_format,
800
- "stop": stop,
801
- "logit_bias": logit_bias,
802
- "logprobs": logprobs,
803
- "top_logprobs": top_logprobs,
804
- "thinking": thinking,
805
- "web_search_options": web_search_options,
806
- "tools": tools,
807
- "tool_choice": tool_choice,
808
- "parallel_tool_calls": parallel_tool_calls,
809
- "functions": functions,
810
- "function_call": function_call,
811
- }
812
-
813
- # Only add type parameter if it's not str (for structured output)
814
- if return_type is not str:
815
- lm_kwargs["type"] = return_type
816
-
817
- # Run language model with extracted parameters
818
- return await async_run_language_model(**lm_kwargs)
819
-
820
- return async_wrapper
821
- else:
822
-
823
- @functools.wraps(func)
824
- def sync_wrapper(*args, **kwargs):
825
- # Convert function parameters to message string
826
- bound_args = sig.bind(*args, **kwargs)
827
- bound_args.apply_defaults()
828
-
829
- # Create message from parameters
830
- param_parts = []
831
- for param_name, param_value in bound_args.arguments.items():
832
- param_parts.append(f"{param_name}: {param_value}")
833
- message = "\n".join(param_parts)
834
-
835
- # Prepare parameters for language model call
836
- lm_kwargs = {
837
- "messages": message,
838
- "instructions": func_instructions,
839
- "model": model,
840
- "mock_response": mock_response,
841
- "stream": stream,
842
- "instructor_mode": instructor_mode,
843
- "timeout": timeout,
844
- "temperature": temperature,
845
- "top_p": top_p,
846
- "max_tokens": max_tokens,
847
- "presence_penalty": presence_penalty,
848
- "frequency_penalty": frequency_penalty,
849
- "seed": seed,
850
- "user": user,
851
- "response_format": response_format,
852
- "stop": stop,
853
- "logit_bias": logit_bias,
854
- "logprobs": logprobs,
855
- "top_logprobs": top_logprobs,
856
- "thinking": thinking,
857
- "web_search_options": web_search_options,
858
- "tools": tools,
859
- "tool_choice": tool_choice,
860
- "parallel_tool_calls": parallel_tool_calls,
861
- "functions": functions,
862
- "function_call": function_call,
863
- }
864
-
865
- # Only add type parameter if it's not str (for structured output)
866
- if return_type is not str:
867
- lm_kwargs["type"] = return_type
868
-
869
- # Run language model with extracted parameters
870
- response = run_language_model(**lm_kwargs)
871
-
872
- # Return just the output if return_output is True (default behavior)
873
- if return_output:
874
- return response.output
875
- else:
876
- return response
877
-
878
- return sync_wrapper