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.
@@ -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 LanguageModel
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
- from .types import (
30
- LanguageModelMessages,
31
- LanguageModelInstructorMode,
32
- LanguageModelName,
33
- LanguageModelResponse,
34
- LanguageModelStream,
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, instructions, mock_response=mock_response, **kwargs
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, instructions, mock_response=mock_response, **kwargs
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: "litellm.ModelResponse"
50
+ completion: Any
51
51
  """The raw Chat Completion (`litellm.ModelResponse`) object returned by the
52
52
  language model."""
53
53
 
@@ -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.22
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=H9AE2dPsfFRiir-cCi6_Zz48PP8D17oIKnSFx8SO6gk,1050
2
- hammad/_internal.py,sha256=GJ5QEhFf4qNXYUZd1C5oq9wJ-a4gkUtLePwbz3W4weY,7872
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=vj6QdWjoqp2X4UC0vm55PIT8hkkuznWE5uAU9FZXHKM,31778
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=WTKbH94kzR6oOrB_T24XLbKgda4pTKbiHf2qyLWyRo4,1824
19
- hammad/data/collections/__init__.py,sha256=b7NkF_p4fesZ-qOBxz931-vQjnyJB7IGyCpBJlO5G98,1041
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=sCV7B9pgueKAFjdLvLrY7r1ZWKa0x44lzF5xdYnZ4mo,453
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=16L9z0U73uUhBB7JHSL0tHWie2-rI7GAUtQSY94IeZk,3579
57
- hammad/genai/agents/__init__.py,sha256=R_wW_fbZqMXZZYSErAb81UDRMTaNDlAFzNKfTOm4XYg,1235
58
- hammad/genai/agents/agent.py,sha256=xtb-xexCA7XzoHCR20zCTAEsgjTo0C-i701WQGzIXgA,55884
59
- hammad/genai/agents/run.py,sha256=G3NLJgg8nXFHfOrh_XR1NpVjGzAgjnA_Ojc_rrMHz9E,23278
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=vRR9bWwzSA6Y6a_cpf7KrrmJqoAwh5OuuNThTERNVwY,3806
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=XfAsy8nGIDQtbWhQokb28mym6-q1su180pFMTaUp5Eg,954
72
- hammad/genai/models/embeddings/model.py,sha256=lYi1a5Rs8eX3OFUfo3CkGL5FQk-MSQ1lQaoxC7Yia7I,7066
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=B92q9f5UIQBMIFoYUja9V61bn5Lzdrk12_bf3DHw6Is,1838
80
- hammad/genai/models/language/model.py,sha256=h3V-Z_AUlVRn_pFbC0wchMajk7tyJjK0dIpZxq3lYy8,39408
81
- hammad/genai/models/language/run.py,sha256=nqqQYi3iBpkNxW3_JHyyZBNpn79LVWLpnebCBYOaEbA,21468
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=YHDEDJuhQ_ULs9qse2b-h5cx1ELWgfPc2BHk34OPVxE,7540
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=3p7qhZcilP_NOCOnufCkubTeYN0yC7Ij5bqrUy-FYow,16554
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=5Y41gCtH7APxNjIXtsZg1E9nwpi2xTgRAoC2l-QKil4,31706
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.22.dist-info/METADATA,sha256=OFmPfD3CcZq0Et0hWl2dBUjRNm4IcYZKL1EX8aTJPsU,6570
125
- hammad_python-0.0.22.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
126
- hammad_python-0.0.22.dist-info/licenses/LICENSE,sha256=h74yFUWjbBaodcWG5wNmm30npjl8obVcxD-1nQfUp2I,1069
127
- hammad_python-0.0.22.dist-info/RECORD,,
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,,