hammad-python 0.0.22__py3-none-any.whl → 0.0.24__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.
- hammad/__init__.py +269 -16
- hammad/_internal.py +19 -1
- hammad/cli/plugins.py +3 -1
- hammad/data/__init__.py +10 -0
- hammad/data/collections/__init__.py +5 -1
- hammad/data/sql/__init__.py +2 -1
- hammad/genai/__init__.py +57 -0
- hammad/genai/agents/__init__.py +11 -1
- hammad/genai/agents/agent.py +719 -213
- hammad/genai/agents/run.py +50 -12
- hammad/genai/agents/types/agent_response.py +2 -1
- hammad/genai/graphs/__init__.py +113 -0
- hammad/genai/graphs/base.py +1103 -0
- hammad/genai/graphs/plugins.py +316 -0
- hammad/genai/graphs/types.py +638 -0
- hammad/genai/models/embeddings/__init__.py +5 -1
- hammad/genai/models/embeddings/model.py +31 -2
- hammad/genai/models/language/__init__.py +5 -1
- hammad/genai/models/language/model.py +70 -0
- hammad/genai/models/language/run.py +29 -12
- hammad/genai/models/language/types/language_model_response.py +1 -1
- hammad/genai/types/tools.py +1 -1
- hammad/logging/logger.py +10 -0
- {hammad_python-0.0.22.dist-info → hammad_python-0.0.24.dist-info}/METADATA +5 -1
- {hammad_python-0.0.22.dist-info → hammad_python-0.0.24.dist-info}/RECORD +27 -23
- {hammad_python-0.0.22.dist-info → hammad_python-0.0.24.dist-info}/WHEEL +0 -0
- {hammad_python-0.0.22.dist-info → hammad_python-0.0.24.dist-info}/licenses/LICENSE +0 -0
@@ -1,7 +1,7 @@
|
|
1
1
|
"""hammad.genai.embedding_models.embedding_model"""
|
2
2
|
|
3
3
|
import asyncio
|
4
|
-
from dataclasses import dataclass
|
4
|
+
from dataclasses import dataclass, field
|
5
5
|
from typing import Any, List, Optional
|
6
6
|
import sys
|
7
7
|
|
@@ -26,6 +26,7 @@ from ....formatting.text import convert_to_text
|
|
26
26
|
__all__ = (
|
27
27
|
"EmbeddingModel",
|
28
28
|
"EmbeddingModelError",
|
29
|
+
"create_embedding_model",
|
29
30
|
)
|
30
31
|
|
31
32
|
|
@@ -87,7 +88,7 @@ class EmbeddingModel:
|
|
87
88
|
api_version: Optional[str] = None
|
88
89
|
"""Optional API version for a custom embedding provider."""
|
89
90
|
|
90
|
-
settings: EmbeddingModelSettings = EmbeddingModelSettings
|
91
|
+
settings: EmbeddingModelSettings = field(default_factory=EmbeddingModelSettings)
|
91
92
|
"""Optional settings for the embedding model."""
|
92
93
|
|
93
94
|
async def async_run(
|
@@ -195,3 +196,31 @@ class EmbeddingModel:
|
|
195
196
|
format=format,
|
196
197
|
)
|
197
198
|
)
|
199
|
+
|
200
|
+
|
201
|
+
def create_embedding_model(
|
202
|
+
model: str | EmbeddingModelName = "openai/text-embedding-3-small",
|
203
|
+
base_url: Optional[str] = None,
|
204
|
+
api_key: Optional[str] = None,
|
205
|
+
api_version: Optional[str] = None,
|
206
|
+
api_type: Optional[str] = None,
|
207
|
+
settings: Optional[EmbeddingModelSettings] = None,
|
208
|
+
) -> EmbeddingModel:
|
209
|
+
"""Create an embedding model instance.
|
210
|
+
|
211
|
+
Args:
|
212
|
+
model (str | EmbeddingModelName) : The model to use for the embedding.
|
213
|
+
base_url (Optional[str]) : The base URL for the API.
|
214
|
+
api_key (Optional[str]) : The API key to use for the request.
|
215
|
+
api_version (Optional[str]) : The version of the API.
|
216
|
+
api_type (Optional[str]) : The API type to use for the request.
|
217
|
+
settings (Optional[EmbeddingModelSettings]) : The settings for the embedding model.
|
218
|
+
"""
|
219
|
+
return EmbeddingModel(
|
220
|
+
model=model,
|
221
|
+
base_url=base_url,
|
222
|
+
api_key=api_key,
|
223
|
+
api_version=api_version,
|
224
|
+
api_type=api_type,
|
225
|
+
settings=settings or EmbeddingModelSettings(),
|
226
|
+
)
|
@@ -5,7 +5,10 @@ from ...._internal import create_getattr_importer
|
|
5
5
|
|
6
6
|
|
7
7
|
if TYPE_CHECKING:
|
8
|
-
from .model import
|
8
|
+
from .model import (
|
9
|
+
LanguageModel,
|
10
|
+
create_language_model,
|
11
|
+
)
|
9
12
|
from .run import run_language_model, async_run_language_model
|
10
13
|
from .types.language_model_instructor_mode import LanguageModelInstructorMode
|
11
14
|
from .types.language_model_messages import LanguageModelMessages
|
@@ -19,6 +22,7 @@ if TYPE_CHECKING:
|
|
19
22
|
__all__ = [
|
20
23
|
# hammad.genai.models.language.model
|
21
24
|
"LanguageModel",
|
25
|
+
"create_language_model",
|
22
26
|
# hammad.genai.models.language.run
|
23
27
|
"run_language_model",
|
24
28
|
"async_run_language_model",
|
@@ -46,6 +46,7 @@ from .utils import (
|
|
46
46
|
__all__ = [
|
47
47
|
"LanguageModel",
|
48
48
|
"LanguageModelError",
|
49
|
+
"create_language_model",
|
49
50
|
]
|
50
51
|
|
51
52
|
T = TypeVar("T")
|
@@ -99,6 +100,8 @@ class LanguageModel(BaseGenAIModel, Generic[T]):
|
|
99
100
|
base_url: Optional[str] = None,
|
100
101
|
api_key: Optional[str] = None,
|
101
102
|
instructor_mode: LanguageModelInstructorMode = "tool_call",
|
103
|
+
verbose: bool = False,
|
104
|
+
debug: bool = False,
|
102
105
|
**kwargs: Any,
|
103
106
|
):
|
104
107
|
"""Initialize the language model.
|
@@ -108,6 +111,8 @@ class LanguageModel(BaseGenAIModel, Generic[T]):
|
|
108
111
|
base_url: Custom base URL for the API
|
109
112
|
api_key: API key for authentication
|
110
113
|
instructor_mode: Default instructor mode for structured outputs
|
114
|
+
verbose: If True, set logger to INFO level for detailed output
|
115
|
+
debug: If True, set logger to DEBUG level for maximum verbosity
|
111
116
|
**kwargs: Additional arguments passed to BaseGenAIModel
|
112
117
|
"""
|
113
118
|
# Initialize BaseGenAIModel via super()
|
@@ -115,6 +120,14 @@ class LanguageModel(BaseGenAIModel, Generic[T]):
|
|
115
120
|
|
116
121
|
# Initialize LanguageModel-specific attributes
|
117
122
|
self._instructor_client = None
|
123
|
+
self.verbose = verbose
|
124
|
+
self.debug = debug
|
125
|
+
|
126
|
+
# Set logger level based on verbose/debug flags
|
127
|
+
if debug:
|
128
|
+
logger.setLevel("DEBUG")
|
129
|
+
elif verbose:
|
130
|
+
logger.setLevel("INFO")
|
118
131
|
|
119
132
|
logger.info(f"Initialized LanguageModel w/ model: {self.model}")
|
120
133
|
logger.debug(f"LanguageModel settings: {self.settings}")
|
@@ -336,6 +349,8 @@ class LanguageModel(BaseGenAIModel, Generic[T]):
|
|
336
349
|
messages: LanguageModelMessages,
|
337
350
|
instructions: Optional[str] = None,
|
338
351
|
mock_response: Optional[str] = None,
|
352
|
+
verbose: Optional[bool] = None,
|
353
|
+
debug: Optional[bool] = None,
|
339
354
|
**kwargs: Any,
|
340
355
|
) -> Union[LanguageModelResponse[Any], LanguageModelStream[Any]]:
|
341
356
|
"""Run a language model request.
|
@@ -344,11 +359,20 @@ class LanguageModel(BaseGenAIModel, Generic[T]):
|
|
344
359
|
messages: The input messages/content for the request
|
345
360
|
instructions: Optional system instructions to prepend
|
346
361
|
mock_response: Mock response string for testing (saves API costs)
|
362
|
+
verbose: If True, set logger to INFO level for this request
|
363
|
+
debug: If True, set logger to DEBUG level for this request
|
347
364
|
**kwargs: Additional request parameters
|
348
365
|
|
349
366
|
Returns:
|
350
367
|
LanguageModelResponse or LanguageModelStream depending on parameters
|
351
368
|
"""
|
369
|
+
# Set logger level for this request if specified
|
370
|
+
original_level = logger.level
|
371
|
+
if debug or (debug is None and self.debug):
|
372
|
+
logger.setLevel("DEBUG")
|
373
|
+
elif verbose or (verbose is None and self.verbose):
|
374
|
+
logger.setLevel("INFO")
|
375
|
+
|
352
376
|
logger.info(f"Running LanguageModel request with model: {self.model}")
|
353
377
|
logger.debug(f"LanguageModel request kwargs: {kwargs}")
|
354
378
|
|
@@ -387,6 +411,10 @@ class LanguageModel(BaseGenAIModel, Generic[T]):
|
|
387
411
|
|
388
412
|
except Exception as e:
|
389
413
|
raise LanguageModelError(f"Error in language model request: {e}") from e
|
414
|
+
finally:
|
415
|
+
# Restore original logger level
|
416
|
+
if debug is not None or verbose is not None:
|
417
|
+
logger.setLevel(original_level)
|
390
418
|
|
391
419
|
# Overloaded async_run methods for different return types
|
392
420
|
|
@@ -573,6 +601,8 @@ class LanguageModel(BaseGenAIModel, Generic[T]):
|
|
573
601
|
messages: LanguageModelMessages,
|
574
602
|
instructions: Optional[str] = None,
|
575
603
|
mock_response: Optional[str] = None,
|
604
|
+
verbose: Optional[bool] = None,
|
605
|
+
debug: Optional[bool] = None,
|
576
606
|
**kwargs: Any,
|
577
607
|
) -> Union[LanguageModelResponse[Any], LanguageModelStream[Any]]:
|
578
608
|
"""Run an async language model request.
|
@@ -581,11 +611,20 @@ class LanguageModel(BaseGenAIModel, Generic[T]):
|
|
581
611
|
messages: The input messages/content for the request
|
582
612
|
instructions: Optional system instructions to prepend
|
583
613
|
mock_response: Mock response string for testing (saves API costs)
|
614
|
+
verbose: If True, set logger to INFO level for this request
|
615
|
+
debug: If True, set logger to DEBUG level for this request
|
584
616
|
**kwargs: Additional request parameters
|
585
617
|
|
586
618
|
Returns:
|
587
619
|
LanguageModelResponse or LanguageModelAsyncStream depending on parameters
|
588
620
|
"""
|
621
|
+
# Set logger level for this request if specified
|
622
|
+
original_level = logger.level
|
623
|
+
if debug or (debug is None and self.debug):
|
624
|
+
logger.setLevel("DEBUG")
|
625
|
+
elif verbose or (verbose is None and self.verbose):
|
626
|
+
logger.setLevel("INFO")
|
627
|
+
|
589
628
|
logger.info(f"Running async LanguageModel request with model: {self.model}")
|
590
629
|
logger.debug(f"LanguageModel request kwargs: {kwargs}")
|
591
630
|
|
@@ -630,6 +669,10 @@ class LanguageModel(BaseGenAIModel, Generic[T]):
|
|
630
669
|
raise LanguageModelError(
|
631
670
|
f"Error in async language model request: {e}"
|
632
671
|
) from e
|
672
|
+
finally:
|
673
|
+
# Restore original logger level
|
674
|
+
if debug is not None or verbose is not None:
|
675
|
+
logger.setLevel(original_level)
|
633
676
|
|
634
677
|
def _handle_completion_request(
|
635
678
|
self, request: LanguageModelRequestBuilder, parsed_messages: List[Any]
|
@@ -1026,3 +1069,30 @@ class LanguageModel(BaseGenAIModel, Generic[T]):
|
|
1026
1069
|
)
|
1027
1070
|
|
1028
1071
|
return response.output
|
1072
|
+
|
1073
|
+
|
1074
|
+
def create_language_model(
|
1075
|
+
model: str | LanguageModelName = "openai/gpt-4o-mini",
|
1076
|
+
base_url: Optional[str] = None,
|
1077
|
+
api_key: Optional[str] = None,
|
1078
|
+
api_version: Optional[str] = None,
|
1079
|
+
organization: Optional[str] = None,
|
1080
|
+
deployment_id: Optional[str] = None,
|
1081
|
+
model_list: Optional[List[Any]] = None,
|
1082
|
+
extra_headers: Optional[Dict[str, str]] = None,
|
1083
|
+
verbose: bool = False,
|
1084
|
+
debug: bool = False,
|
1085
|
+
) -> LanguageModel:
|
1086
|
+
"""Create a language model instance."""
|
1087
|
+
return LanguageModel(
|
1088
|
+
model=model,
|
1089
|
+
base_url=base_url,
|
1090
|
+
api_key=api_key,
|
1091
|
+
api_version=api_version,
|
1092
|
+
organization=organization,
|
1093
|
+
deployment_id=deployment_id,
|
1094
|
+
model_list=model_list,
|
1095
|
+
extra_headers=extra_headers,
|
1096
|
+
verbose=verbose,
|
1097
|
+
debug=debug,
|
1098
|
+
)
|
@@ -26,14 +26,13 @@ if TYPE_CHECKING:
|
|
26
26
|
ChatCompletionAudioParam,
|
27
27
|
)
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
29
|
+
from .types import (
|
30
|
+
LanguageModelMessages,
|
31
|
+
LanguageModelInstructorMode,
|
32
|
+
LanguageModelName,
|
33
|
+
LanguageModelResponse,
|
34
|
+
LanguageModelStream,
|
35
|
+
)
|
37
36
|
from .model import LanguageModel
|
38
37
|
|
39
38
|
|
@@ -276,6 +275,8 @@ def run_language_model(
|
|
276
275
|
messages: "LanguageModelMessages",
|
277
276
|
instructions: Optional[str] = None,
|
278
277
|
mock_response: Optional[bool] = None,
|
278
|
+
verbose: bool = False,
|
279
|
+
debug: bool = False,
|
279
280
|
**kwargs: Any,
|
280
281
|
) -> Union["LanguageModelResponse[Any]", "LanguageModelStream[Any]"]:
|
281
282
|
"""Run a language model request with full parameter support.
|
@@ -283,6 +284,8 @@ def run_language_model(
|
|
283
284
|
Args:
|
284
285
|
messages: The input messages/content for the request
|
285
286
|
instructions: Optional system instructions to prepend
|
287
|
+
verbose: If True, set logger to INFO level for detailed output
|
288
|
+
debug: If True, set logger to DEBUG level for maximum verbosity
|
286
289
|
**kwargs: All request parameters from LanguageModelRequest
|
287
290
|
|
288
291
|
Returns:
|
@@ -292,11 +295,16 @@ def run_language_model(
|
|
292
295
|
model = kwargs.pop("model", "openai/gpt-4o-mini")
|
293
296
|
|
294
297
|
# Create language model instance
|
295
|
-
language_model = LanguageModel(model=model)
|
298
|
+
language_model = LanguageModel(model=model, verbose=verbose, debug=debug)
|
296
299
|
|
297
300
|
# Forward to the instance method
|
298
301
|
return language_model.run(
|
299
|
-
messages,
|
302
|
+
messages,
|
303
|
+
instructions,
|
304
|
+
mock_response=mock_response,
|
305
|
+
verbose=verbose,
|
306
|
+
debug=debug,
|
307
|
+
**kwargs,
|
300
308
|
)
|
301
309
|
|
302
310
|
|
@@ -529,6 +537,8 @@ async def async_run_language_model(
|
|
529
537
|
messages: "LanguageModelMessages",
|
530
538
|
instructions: Optional[str] = None,
|
531
539
|
mock_response: Optional[bool] = None,
|
540
|
+
verbose: bool = False,
|
541
|
+
debug: bool = False,
|
532
542
|
**kwargs: Any,
|
533
543
|
) -> Union["LanguageModelResponse[Any]", "LanguageModelStream[Any]"]:
|
534
544
|
"""Run an async language model request with full parameter support.
|
@@ -536,6 +546,8 @@ async def async_run_language_model(
|
|
536
546
|
Args:
|
537
547
|
messages: The input messages/content for the request
|
538
548
|
instructions: Optional system instructions to prepend
|
549
|
+
verbose: If True, set logger to INFO level for detailed output
|
550
|
+
debug: If True, set logger to DEBUG level for maximum verbosity
|
539
551
|
**kwargs: All request parameters from LanguageModelRequest
|
540
552
|
|
541
553
|
Returns:
|
@@ -545,9 +557,14 @@ async def async_run_language_model(
|
|
545
557
|
model = kwargs.pop("model", "openai/gpt-4o-mini")
|
546
558
|
|
547
559
|
# Create language model instance
|
548
|
-
language_model = LanguageModel(model=model)
|
560
|
+
language_model = LanguageModel(model=model, verbose=verbose, debug=debug)
|
549
561
|
|
550
562
|
# Forward to the instance method
|
551
563
|
return await language_model.async_run(
|
552
|
-
messages,
|
564
|
+
messages,
|
565
|
+
instructions,
|
566
|
+
mock_response=mock_response,
|
567
|
+
verbose=verbose,
|
568
|
+
debug=debug,
|
569
|
+
**kwargs,
|
553
570
|
)
|
@@ -47,7 +47,7 @@ class LanguageModelResponse(BaseGenAIModelResponse[T]):
|
|
47
47
|
In many cases with tool calling, message content is not present, in these cases
|
48
48
|
this field will **NOT** represent tool calls, and will be returned as `None`."""
|
49
49
|
|
50
|
-
completion:
|
50
|
+
completion: Any
|
51
51
|
"""The raw Chat Completion (`litellm.ModelResponse`) object returned by the
|
52
52
|
language model."""
|
53
53
|
|
hammad/genai/types/tools.py
CHANGED
@@ -75,7 +75,7 @@ def extract_tool_calls_from_response(
|
|
75
75
|
) -> List[Any]:
|
76
76
|
"""Extract tool calls from various response types."""
|
77
77
|
# ensure type is of agent or language model
|
78
|
-
if response.type not in ["language_model", "agent"]:
|
78
|
+
if response.type not in ["language_model", "agent", "graph"]:
|
79
79
|
raise ValueError(f"Response type {response.type} is not supported")
|
80
80
|
|
81
81
|
# Handle LanguageModelResponse
|
hammad/logging/logger.py
CHANGED
@@ -534,6 +534,16 @@ class Logger:
|
|
534
534
|
|
535
535
|
return JSONFormatter()
|
536
536
|
|
537
|
+
def setLevel(
|
538
|
+
self,
|
539
|
+
level: Union[LoggerLevelName, int],
|
540
|
+
) -> None:
|
541
|
+
"""Set the logging level."""
|
542
|
+
self._user_level = level
|
543
|
+
self._logger.setLevel(level)
|
544
|
+
for handler in self._logger.handlers:
|
545
|
+
handler.setLevel(level)
|
546
|
+
|
537
547
|
def add_level(
|
538
548
|
self, name: str, value: int, style: Optional[LoggerLevelSettings] = None
|
539
549
|
) -> None:
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: hammad-python
|
3
|
-
Version: 0.0.
|
3
|
+
Version: 0.0.24
|
4
4
|
Author-email: Hammad Saeed <hammadaidev@gmail.com>
|
5
5
|
License: MIT License
|
6
6
|
|
@@ -45,6 +45,7 @@ Requires-Dist: fastapi>=0.115.6; extra == 'all'
|
|
45
45
|
Requires-Dist: instructor>=1.9.0; extra == 'all'
|
46
46
|
Requires-Dist: litellm>=1.73.6; extra == 'all'
|
47
47
|
Requires-Dist: mcp>=1.10.1; extra == 'all'
|
48
|
+
Requires-Dist: pydantic-graph>=0.4.2; extra == 'all'
|
48
49
|
Requires-Dist: qdrant-client>=1.14.3; extra == 'all'
|
49
50
|
Requires-Dist: uvicorn>=0.34.0; extra == 'all'
|
50
51
|
Provides-Extra: genai
|
@@ -52,8 +53,11 @@ Requires-Dist: fastapi>=0.115.6; extra == 'genai'
|
|
52
53
|
Requires-Dist: instructor>=1.9.0; extra == 'genai'
|
53
54
|
Requires-Dist: litellm>=1.73.6; extra == 'genai'
|
54
55
|
Requires-Dist: mcp>=1.10.1; extra == 'genai'
|
56
|
+
Requires-Dist: pydantic-graph>=0.4.2; extra == 'genai'
|
55
57
|
Requires-Dist: qdrant-client>=1.14.3; extra == 'genai'
|
56
58
|
Requires-Dist: uvicorn>=0.34.0; extra == 'genai'
|
59
|
+
Provides-Extra: graph
|
60
|
+
Requires-Dist: pydantic-graph>=0.4.2; extra == 'graph'
|
57
61
|
Provides-Extra: mcp
|
58
62
|
Requires-Dist: mcp>=1.10.1; extra == 'mcp'
|
59
63
|
Provides-Extra: serve
|
@@ -1,5 +1,5 @@
|
|
1
|
-
hammad/__init__.py,sha256=
|
2
|
-
hammad/_internal.py,sha256=
|
1
|
+
hammad/__init__.py,sha256=4HD87ONlgDV8fLLE7xsGW_DXyubyPly7uai_X0cADws,7549
|
2
|
+
hammad/_internal.py,sha256=qQGXjzQyyCxzH5kMjCHwVdAojp-2OOVAO2T2QDxOBn8,8957
|
3
3
|
hammad/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
4
|
hammad/cache/__init__.py,sha256=29vI8UkVITtiEe7fTr9UR5Q0lV7tr_SVe7tLlJmm1Ks,954
|
5
5
|
hammad/cache/base_cache.py,sha256=kYJS2IcQtxhzT7BQBFtOWnhw4VkvAapPhAVkfbW5IeY,6353
|
@@ -10,13 +10,13 @@ hammad/cache/ttl_cache.py,sha256=-0pJ4lkVgg1OIb98bQFub9n6f4zgWVs-dQfKZe_DmpE,215
|
|
10
10
|
hammad/cli/__init__.py,sha256=DkBgA8zkdsOmReoPI5dqni5l5DGkaA7TzrIFvmy5MIo,785
|
11
11
|
hammad/cli/_runner.py,sha256=XEdao-JplTOGfdynN396ganaV_PKhyP0q5D15y7qA-8,9556
|
12
12
|
hammad/cli/animations.py,sha256=h68OuJBkDiYTLdB5pLPgQ2gpPT2c3dNulkDv2BtKHFA,19507
|
13
|
-
hammad/cli/plugins.py,sha256=
|
13
|
+
hammad/cli/plugins.py,sha256=qWFtCUZMB0Tu6WwbUg9ut1PvCT5eIIUo2S5WFejUm4A,31804
|
14
14
|
hammad/cli/styles/__init__.py,sha256=Ok7J_uhJgyswNkBWnDw50oTX9Xk1HPksUl3UbmT1qTI,1363
|
15
15
|
hammad/cli/styles/settings.py,sha256=irChf9RsMij3djx_n9D9duoVIzxLCpd9-BlKl6U_OLk,5532
|
16
16
|
hammad/cli/styles/types.py,sha256=vNIeQY_23m10K8qVT7Iy-PMwosGL-La-UAZKszHJjEE,7911
|
17
17
|
hammad/cli/styles/utils.py,sha256=zzi0JdH1X7O8XWRlMVfJP2jB-OWt7zkpm_LeCHoSKVY,28287
|
18
|
-
hammad/data/__init__.py,sha256=
|
19
|
-
hammad/data/collections/__init__.py,sha256=
|
18
|
+
hammad/data/__init__.py,sha256=nluYCFbWW330ZNhR0N8T183rmQ01clovt8Rf7ruGIIc,2162
|
19
|
+
hammad/data/collections/__init__.py,sha256=xEORHnjoV75Fa6LFDMyFw90oDaJ0e9VmISLFV3mOsIQ,1110
|
20
20
|
hammad/data/collections/collection.py,sha256=fi7jyT2GmXiGLNajjegBJMbefzggL0PIMHf-81ov7Bo,10833
|
21
21
|
hammad/data/collections/indexes/__init__.py,sha256=RmXKWKq2sbtA1swz5vamKKWut-eKfc-Q2tUnij-E-IU,960
|
22
22
|
hammad/data/collections/indexes/qdrant/__init__.py,sha256=KU89TIJkYmJPnVxWKHfXntkIYwhn86ejXtWG30hCyHg,49
|
@@ -36,7 +36,7 @@ hammad/data/models/utils.py,sha256=KNtr1PlxBizs14gmZqQeG1A7EQ6JHPRrRN0pTr3ucR8,9
|
|
36
36
|
hammad/data/models/extensions/__init__.py,sha256=dfVDCMBKZYtaMHJRQBShaoMHFcQ6VJcD_5q5Fcc77mQ,128
|
37
37
|
hammad/data/models/extensions/pydantic/__init__.py,sha256=2ipoelO4knYSug47Vdt0URHtBNCQIFixJ3tTcawaCtE,1205
|
38
38
|
hammad/data/models/extensions/pydantic/converters.py,sha256=_485-4EUQe7-fxlPG2o1wnaU8SDA79AhxMitiUMoIYY,24545
|
39
|
-
hammad/data/sql/__init__.py,sha256=
|
39
|
+
hammad/data/sql/__init__.py,sha256=o5OygbXCCpWH0A1Sr994e_rdplUxY0Vl3mGIykt1c7k,493
|
40
40
|
hammad/data/sql/database.py,sha256=t06bNLQ0WPmg8Be_Xf9u8k5zhy70Iw-akC4Ff2o5PrA,18208
|
41
41
|
hammad/data/sql/types.py,sha256=8xLEEK7u6YBFGfh8MJbJeSVNeGZ1RCxF_QvNTu0rel0,3526
|
42
42
|
hammad/data/types/__init__.py,sha256=LeyrRKKBbDP2VaTaNEiyJU_1rs52LofD18WUS8rl5gw,758
|
@@ -53,38 +53,42 @@ hammad/formatting/text/converters.py,sha256=g3z-ZGTaKNVbLFFKBSh6qN2Uz0BSkdxCaN3L
|
|
53
53
|
hammad/formatting/text/markdown.py,sha256=D17NOoGkoXUBhoOGKelKHwi72iqsAwPU5HEFjRJtLQI,3407
|
54
54
|
hammad/formatting/yaml/__init__.py,sha256=4dBeXPi0jx7ELT2_sC2fUYaiY8b8wFiUScLODc9ISEw,462
|
55
55
|
hammad/formatting/yaml/converters.py,sha256=zvSB8QGb56uvwO0KjXllfTj9g1FmNINOKR06DTjvXw8,153
|
56
|
-
hammad/genai/__init__.py,sha256=
|
57
|
-
hammad/genai/agents/__init__.py,sha256=
|
58
|
-
hammad/genai/agents/agent.py,sha256=
|
59
|
-
hammad/genai/agents/run.py,sha256=
|
56
|
+
hammad/genai/__init__.py,sha256=KbnekLr0ijsXW509dr1wE78ze_npPkbAI-A6E583CFI,4795
|
57
|
+
hammad/genai/agents/__init__.py,sha256=2PIXzdBISSKy4lfJ0vYHuT8G9oRT2GYYIESQfENt9Hk,1500
|
58
|
+
hammad/genai/agents/agent.py,sha256=4qnJ8AQHhuqcSWmfdx4qhDQaGyULfYxsfn17ZNJk8H0,80802
|
59
|
+
hammad/genai/agents/run.py,sha256=FBD2fOURc8_VPFCQAR7x9VEcDyzj8Gjz8Ki0GH2OPD0,24953
|
60
60
|
hammad/genai/agents/types/__init__.py,sha256=6X6_P82qe15dyqs-vAcXUk4na4tB-7oMdMf484v87io,1119
|
61
61
|
hammad/genai/agents/types/agent_context.py,sha256=u4evwx9B-UKEHMtNcsNlN9q8i12bsW9HhtyvmU0NNTw,313
|
62
62
|
hammad/genai/agents/types/agent_event.py,sha256=zNKXXPKKOsIO9MAhE-YNCOxeNg00O7j1mE0R1pA_Xr8,3925
|
63
63
|
hammad/genai/agents/types/agent_hooks.py,sha256=wgys4ixiHjX5oux4zVSr9OPXyAZ-iJGk_MhaOKEgMxo,7853
|
64
64
|
hammad/genai/agents/types/agent_messages.py,sha256=csjEq42bElaTZYZW2dE6nlFZc142-HgT3bB6h1KMg_w,846
|
65
|
-
hammad/genai/agents/types/agent_response.py,sha256=
|
65
|
+
hammad/genai/agents/types/agent_response.py,sha256=tQ3oNBZC_9dD7t-7tRuKA2h1a-XE5gGryVF9XcmZ5GA,3863
|
66
66
|
hammad/genai/agents/types/agent_stream.py,sha256=VIfqZp55wq6jQh_OtPzZjiL_K4cEoVCkeEZS3s_MIXI,11069
|
67
|
+
hammad/genai/graphs/__init__.py,sha256=89SvH1dpir3isJBwWsR384BF7EV8Kg7OJQt0bJXWHyo,2917
|
68
|
+
hammad/genai/graphs/base.py,sha256=X0LspElhQgWl8Xx6BoGFo2cCbhcWmUs29-VZDm3V5Vo,41494
|
69
|
+
hammad/genai/graphs/plugins.py,sha256=AK_JSo2eLCD9cdrxZ5OxxZtLVrUDcQ8f_FWBxOQPzyw,10007
|
70
|
+
hammad/genai/graphs/types.py,sha256=bk3SaBYVgKhPtWNBRfv7CpHCWE4cjvbGoW5dM0vLdI8,20661
|
67
71
|
hammad/genai/models/__init__.py,sha256=e4TbEsiKIoXENOEsdIdQcWWt0RnFdTEqCz0nICHQHtM,26
|
68
72
|
hammad/genai/models/model_provider.py,sha256=2RdOeqr7KpjyrMqq4YH4OYy1pk6sjzf2CPu1ZHa1Pdk,75
|
69
73
|
hammad/genai/models/multimodal.py,sha256=KXUyLXqM1eBgBGZFEbMw3dYbakZFAXoko2xYprronxY,1276
|
70
74
|
hammad/genai/models/reranking.py,sha256=oR1j7uomtEQCse-1zkteDTdXklEKu40CvFcAMLAV2XM,451
|
71
|
-
hammad/genai/models/embeddings/__init__.py,sha256=
|
72
|
-
hammad/genai/models/embeddings/model.py,sha256=
|
75
|
+
hammad/genai/models/embeddings/__init__.py,sha256=x_lWV2TGjogAsG4Yny73-ECRmZPVMw245qnKOr81R9o,1033
|
76
|
+
hammad/genai/models/embeddings/model.py,sha256=vh8JPfy8_vBZrS8h3OEyaUYjbbuyBq3x2bUa0hVxkuc,8166
|
73
77
|
hammad/genai/models/embeddings/run.py,sha256=-0WPCGF2otIfPZzQ2VeocuvKFxSyCz66WsfkhORJAV4,5011
|
74
78
|
hammad/genai/models/embeddings/types/__init__.py,sha256=j1puexoIpgyYpDkz-1wMy2QjbS5QEZiLlI0BJaus3gY,1068
|
75
79
|
hammad/genai/models/embeddings/types/embedding_model_name.py,sha256=LA8E6C-_o7cz8KwFPL0vLYt2OxhTtJikMHsQBwNpKpY,2499
|
76
80
|
hammad/genai/models/embeddings/types/embedding_model_response.py,sha256=V2H_VTl1MSBTa6Yubwjb43ZaoIrHORRdy9nYG2kZGyQ,2038
|
77
81
|
hammad/genai/models/embeddings/types/embedding_model_run_params.py,sha256=ZGhCXrEEzMF5y-V8neF2a73Gh1emzrYUHVxWkybg5uE,1570
|
78
82
|
hammad/genai/models/embeddings/types/embedding_model_settings.py,sha256=KEwvoElXhPMSVCKW2uKwqqT2lSAAthQXmGXaV7Qk5cU,1268
|
79
|
-
hammad/genai/models/language/__init__.py,sha256=
|
80
|
-
hammad/genai/models/language/model.py,sha256=
|
81
|
-
hammad/genai/models/language/run.py,sha256=
|
83
|
+
hammad/genai/models/language/__init__.py,sha256=jyn5GIT0J7gcDQAbKlcW25pU7jzUY-Jl-VT4Nc8Tleg,1915
|
84
|
+
hammad/genai/models/language/model.py,sha256=se0Lflc1d9Vw-T0SlWLxIKDqNv01QkSfOR3VETNNRFw,42027
|
85
|
+
hammad/genai/models/language/run.py,sha256=7h5EOD6ar1ITrs3GiktQa7ZT5kda7rY1-XK4osQ8ADw,22031
|
82
86
|
hammad/genai/models/language/types/__init__.py,sha256=cdLnoCiVmK6T86-5CZrUJg2rxXKoSk-svyCSviUdgao,1534
|
83
87
|
hammad/genai/models/language/types/language_model_instructor_mode.py,sha256=7ywBaY24m-UKRynnX6XsfVf_hsQrM2xHAHugTgV0Vho,1008
|
84
88
|
hammad/genai/models/language/types/language_model_messages.py,sha256=e-HZ_YKXq17gwmMlpOmYUYUpBFm7Mu3aRawtjSslWXs,504
|
85
89
|
hammad/genai/models/language/types/language_model_name.py,sha256=2V70cZ47L9yIcug6LCcMHcvEJaee7gRN6DUPhLUBlsE,8056
|
86
90
|
hammad/genai/models/language/types/language_model_request.py,sha256=ZtzhCx8o6zkEBS3uTFXFLf_poDD7MnIp1y7MbKckOmI,3911
|
87
|
-
hammad/genai/models/language/types/language_model_response.py,sha256=
|
91
|
+
hammad/genai/models/language/types/language_model_response.py,sha256=uUmcaSBBb0-CrWOx1axZ-INHmgyac5ktiAbR-HyW-fk,7520
|
88
92
|
hammad/genai/models/language/types/language_model_response_chunk.py,sha256=wIzGZw732KsI-a1-uASjATA6qvBuq-7rupWoFjsAgQo,1796
|
89
93
|
hammad/genai/models/language/types/language_model_settings.py,sha256=C0EvLXZoOLgPZ4bX7mVFs_CWP-jam27qkseJRGsBAfQ,2794
|
90
94
|
hammad/genai/models/language/types/language_model_stream.py,sha256=XgJ83JSbtTdf7jeLQMrDhMfI7zp0pRrdY7JWYbZV_h0,22043
|
@@ -94,10 +98,10 @@ hammad/genai/models/language/utils/structured_outputs.py,sha256=Va7pie9AOvLbJOaD
|
|
94
98
|
hammad/genai/types/__init__.py,sha256=W0fzUnKhDynt4TkwZX8LCRYfgRTAVomSuWqPmhGu8sg,25
|
95
99
|
hammad/genai/types/base.py,sha256=VnGL45w8oR-6rWl2GfGgWX4SjMC-23RGWuN0_H2bH_I,5437
|
96
100
|
hammad/genai/types/history.py,sha256=zsfBvGMoFTHZCT7Igae-5_jszu409dVJ_wEmNw7alCk,10208
|
97
|
-
hammad/genai/types/tools.py,sha256=
|
101
|
+
hammad/genai/types/tools.py,sha256=Te4WU-MOTCoFvpMw0ddHB9NjlXvpeAYZ99Cd6pcchi4,16563
|
98
102
|
hammad/logging/__init__.py,sha256=VtskZx0bKEAJ9FHTMflhB1CzeFUxLpDT5HPgcecAXUo,701
|
99
103
|
hammad/logging/decorators.py,sha256=VbI1x3P4ft0-0BGjXq7nQgiuNqcXAA51CGmoSn47iSw,30122
|
100
|
-
hammad/logging/logger.py,sha256=
|
104
|
+
hammad/logging/logger.py,sha256=60SrmxESlE4cd_iJr6tKwjUaOkvtqQcbUCjCCeh3Nog,31987
|
101
105
|
hammad/mcp/__init__.py,sha256=5oTU-BLYjfz6fBHDH9cyWg3DpQ6Qar-jodbCR05SuWo,1123
|
102
106
|
hammad/mcp/client/__init__.py,sha256=_SfnKvd5Za-FfFoE5GcXkBY9WcwprZND9SyZ6RY--no,795
|
103
107
|
hammad/mcp/client/client.py,sha256=auKCiIJfcZkuVFRapTpqYP4PxoyIfx40gVbMYLBdTzI,20565
|
@@ -121,7 +125,7 @@ hammad/web/openapi/__init__.py,sha256=JhJQ6_laBmB2djIYFc0vgGha2GsdUe4FP1LDdZCQ5J
|
|
121
125
|
hammad/web/openapi/client.py,sha256=1pXz7KAO_0pN4kQZoWKWskXDYGiJ535TsPO1GGCiC0E,26816
|
122
126
|
hammad/web/search/__init__.py,sha256=e9A6znPIiZCz-4secyHbUs0uUGf5yAqW6wGacgx961U,24
|
123
127
|
hammad/web/search/client.py,sha256=LIx2MsHhn6cRTuq5i1mWowRTdIhPobY4GQV3S3bk9lk,36694
|
124
|
-
hammad_python-0.0.
|
125
|
-
hammad_python-0.0.
|
126
|
-
hammad_python-0.0.
|
127
|
-
hammad_python-0.0.
|
128
|
+
hammad_python-0.0.24.dist-info/METADATA,sha256=aJPgdYoABndPWZn6gLJ1aQObIHsupEBf2itoFKutXjA,6755
|
129
|
+
hammad_python-0.0.24.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
130
|
+
hammad_python-0.0.24.dist-info/licenses/LICENSE,sha256=h74yFUWjbBaodcWG5wNmm30npjl8obVcxD-1nQfUp2I,1069
|
131
|
+
hammad_python-0.0.24.dist-info/RECORD,,
|
File without changes
|
File without changes
|