hammad-python 0.0.30__py3-none-any.whl → 0.0.32__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.
- ham/__init__.py +200 -0
- {hammad_python-0.0.30.dist-info → hammad_python-0.0.32.dist-info}/METADATA +6 -32
- hammad_python-0.0.32.dist-info/RECORD +6 -0
- hammad/__init__.py +0 -84
- hammad/_internal.py +0 -256
- hammad/_main.py +0 -226
- hammad/cache/__init__.py +0 -40
- hammad/cache/base_cache.py +0 -181
- hammad/cache/cache.py +0 -169
- hammad/cache/decorators.py +0 -261
- hammad/cache/file_cache.py +0 -80
- hammad/cache/ttl_cache.py +0 -74
- hammad/cli/__init__.py +0 -33
- hammad/cli/animations.py +0 -573
- hammad/cli/plugins.py +0 -867
- hammad/cli/styles/__init__.py +0 -55
- hammad/cli/styles/settings.py +0 -139
- hammad/cli/styles/types.py +0 -358
- hammad/cli/styles/utils.py +0 -634
- hammad/data/__init__.py +0 -90
- hammad/data/collections/__init__.py +0 -49
- hammad/data/collections/collection.py +0 -326
- hammad/data/collections/indexes/__init__.py +0 -37
- hammad/data/collections/indexes/qdrant/__init__.py +0 -1
- hammad/data/collections/indexes/qdrant/index.py +0 -723
- hammad/data/collections/indexes/qdrant/settings.py +0 -94
- hammad/data/collections/indexes/qdrant/utils.py +0 -210
- hammad/data/collections/indexes/tantivy/__init__.py +0 -1
- hammad/data/collections/indexes/tantivy/index.py +0 -426
- hammad/data/collections/indexes/tantivy/settings.py +0 -40
- hammad/data/collections/indexes/tantivy/utils.py +0 -176
- hammad/data/configurations/__init__.py +0 -35
- hammad/data/configurations/configuration.py +0 -564
- hammad/data/models/__init__.py +0 -50
- hammad/data/models/extensions/__init__.py +0 -4
- hammad/data/models/extensions/pydantic/__init__.py +0 -42
- hammad/data/models/extensions/pydantic/converters.py +0 -759
- hammad/data/models/fields.py +0 -546
- hammad/data/models/model.py +0 -1078
- hammad/data/models/utils.py +0 -280
- hammad/data/sql/__init__.py +0 -24
- hammad/data/sql/database.py +0 -576
- hammad/data/sql/types.py +0 -127
- hammad/data/types/__init__.py +0 -75
- hammad/data/types/file.py +0 -431
- hammad/data/types/multimodal/__init__.py +0 -36
- hammad/data/types/multimodal/audio.py +0 -200
- hammad/data/types/multimodal/image.py +0 -182
- hammad/data/types/text.py +0 -1308
- hammad/formatting/__init__.py +0 -33
- hammad/formatting/json/__init__.py +0 -27
- hammad/formatting/json/converters.py +0 -158
- hammad/formatting/text/__init__.py +0 -63
- hammad/formatting/text/converters.py +0 -723
- hammad/formatting/text/markdown.py +0 -131
- hammad/formatting/yaml/__init__.py +0 -26
- hammad/formatting/yaml/converters.py +0 -5
- hammad/genai/__init__.py +0 -217
- hammad/genai/a2a/__init__.py +0 -32
- hammad/genai/a2a/workers.py +0 -552
- hammad/genai/agents/__init__.py +0 -59
- hammad/genai/agents/agent.py +0 -1973
- hammad/genai/agents/run.py +0 -1024
- hammad/genai/agents/types/__init__.py +0 -42
- hammad/genai/agents/types/agent_context.py +0 -13
- hammad/genai/agents/types/agent_event.py +0 -128
- hammad/genai/agents/types/agent_hooks.py +0 -220
- hammad/genai/agents/types/agent_messages.py +0 -31
- hammad/genai/agents/types/agent_response.py +0 -125
- hammad/genai/agents/types/agent_stream.py +0 -327
- hammad/genai/graphs/__init__.py +0 -125
- hammad/genai/graphs/_utils.py +0 -190
- hammad/genai/graphs/base.py +0 -1828
- hammad/genai/graphs/plugins.py +0 -316
- hammad/genai/graphs/types.py +0 -638
- hammad/genai/models/__init__.py +0 -1
- hammad/genai/models/embeddings/__init__.py +0 -43
- hammad/genai/models/embeddings/model.py +0 -226
- hammad/genai/models/embeddings/run.py +0 -163
- hammad/genai/models/embeddings/types/__init__.py +0 -37
- hammad/genai/models/embeddings/types/embedding_model_name.py +0 -75
- hammad/genai/models/embeddings/types/embedding_model_response.py +0 -76
- hammad/genai/models/embeddings/types/embedding_model_run_params.py +0 -66
- hammad/genai/models/embeddings/types/embedding_model_settings.py +0 -47
- hammad/genai/models/language/__init__.py +0 -57
- hammad/genai/models/language/model.py +0 -1098
- hammad/genai/models/language/run.py +0 -878
- hammad/genai/models/language/types/__init__.py +0 -40
- hammad/genai/models/language/types/language_model_instructor_mode.py +0 -47
- hammad/genai/models/language/types/language_model_messages.py +0 -28
- hammad/genai/models/language/types/language_model_name.py +0 -239
- hammad/genai/models/language/types/language_model_request.py +0 -127
- hammad/genai/models/language/types/language_model_response.py +0 -217
- hammad/genai/models/language/types/language_model_response_chunk.py +0 -56
- hammad/genai/models/language/types/language_model_settings.py +0 -89
- hammad/genai/models/language/types/language_model_stream.py +0 -600
- hammad/genai/models/language/utils/__init__.py +0 -28
- hammad/genai/models/language/utils/requests.py +0 -421
- hammad/genai/models/language/utils/structured_outputs.py +0 -135
- hammad/genai/models/model_provider.py +0 -4
- hammad/genai/models/multimodal.py +0 -47
- hammad/genai/models/reranking.py +0 -26
- hammad/genai/types/__init__.py +0 -1
- hammad/genai/types/base.py +0 -215
- hammad/genai/types/history.py +0 -290
- hammad/genai/types/tools.py +0 -507
- hammad/logging/__init__.py +0 -35
- hammad/logging/decorators.py +0 -834
- hammad/logging/logger.py +0 -1018
- hammad/mcp/__init__.py +0 -53
- hammad/mcp/client/__init__.py +0 -35
- hammad/mcp/client/client.py +0 -624
- hammad/mcp/client/client_service.py +0 -400
- hammad/mcp/client/settings.py +0 -178
- hammad/mcp/servers/__init__.py +0 -26
- hammad/mcp/servers/launcher.py +0 -1161
- hammad/runtime/__init__.py +0 -32
- hammad/runtime/decorators.py +0 -142
- hammad/runtime/run.py +0 -299
- hammad/service/__init__.py +0 -49
- hammad/service/create.py +0 -527
- hammad/service/decorators.py +0 -283
- hammad/types.py +0 -288
- hammad/typing/__init__.py +0 -435
- hammad/web/__init__.py +0 -43
- hammad/web/http/__init__.py +0 -1
- hammad/web/http/client.py +0 -944
- hammad/web/models.py +0 -275
- hammad/web/openapi/__init__.py +0 -1
- hammad/web/openapi/client.py +0 -740
- hammad/web/search/__init__.py +0 -1
- hammad/web/search/client.py +0 -1023
- hammad/web/utils.py +0 -472
- hammad_python-0.0.30.dist-info/RECORD +0 -135
- {hammad → ham}/py.typed +0 -0
- {hammad_python-0.0.30.dist-info → hammad_python-0.0.32.dist-info}/WHEEL +0 -0
- {hammad_python-0.0.30.dist-info → hammad_python-0.0.32.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
|