hammad-python 0.0.13__py3-none-any.whl → 0.0.14__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. hammad/__init__.py +1 -180
  2. hammad/ai/__init__.py +0 -58
  3. hammad/ai/completions/__init__.py +3 -2
  4. hammad/ai/completions/client.py +84 -129
  5. hammad/ai/completions/create.py +33 -9
  6. hammad/ai/completions/settings.py +100 -0
  7. hammad/ai/completions/types.py +86 -5
  8. hammad/ai/completions/utils.py +112 -0
  9. hammad/ai/embeddings/__init__.py +2 -2
  10. hammad/ai/embeddings/client/fastembed_text_embeddings_client.py +1 -1
  11. hammad/ai/embeddings/client/litellm_embeddings_client.py +1 -1
  12. hammad/ai/embeddings/types.py +4 -4
  13. hammad/cache/__init__.py +13 -21
  14. hammad/cli/__init__.py +2 -2
  15. hammad/cli/animations.py +8 -39
  16. hammad/cli/styles/__init__.py +2 -2
  17. hammad/data/__init__.py +19 -2
  18. hammad/data/collections/__init__.py +2 -2
  19. hammad/data/collections/vector_collection.py +0 -7
  20. hammad/{configuration → data/configurations}/__init__.py +2 -2
  21. hammad/{configuration → data/configurations}/configuration.py +1 -1
  22. hammad/data/databases/__init__.py +2 -2
  23. hammad/data/models/__init__.py +44 -0
  24. hammad/{base → data/models/base}/__init__.py +3 -3
  25. hammad/{pydantic → data/models/pydantic}/__init__.py +28 -16
  26. hammad/{pydantic → data/models/pydantic}/converters.py +11 -2
  27. hammad/{pydantic → data/models/pydantic}/models/__init__.py +3 -3
  28. hammad/{pydantic → data/models/pydantic}/models/arbitrary_model.py +1 -1
  29. hammad/{pydantic → data/models/pydantic}/models/cacheable_model.py +1 -1
  30. hammad/{pydantic → data/models/pydantic}/models/fast_model.py +1 -1
  31. hammad/{pydantic → data/models/pydantic}/models/function_model.py +1 -1
  32. hammad/{pydantic → data/models/pydantic}/models/subscriptable_model.py +1 -1
  33. hammad/data/types/__init__.py +41 -0
  34. hammad/{types → data/types}/file.py +2 -2
  35. hammad/{multimodal → data/types/multimodal}/__init__.py +2 -2
  36. hammad/{multimodal → data/types/multimodal}/audio.py +2 -2
  37. hammad/{multimodal → data/types/multimodal}/image.py +2 -2
  38. hammad/{text → data/types}/text.py +4 -4
  39. hammad/formatting/__init__.py +38 -0
  40. hammad/{json → formatting/json}/__init__.py +3 -3
  41. hammad/{json → formatting/json}/converters.py +2 -2
  42. hammad/{text → formatting/text}/__init__.py +5 -24
  43. hammad/{text → formatting/text}/converters.py +2 -2
  44. hammad/{text → formatting/text}/markdown.py +1 -1
  45. hammad/{yaml → formatting/yaml}/__init__.py +3 -7
  46. hammad/formatting/yaml/converters.py +5 -0
  47. hammad/logging/__init__.py +2 -2
  48. hammad/mcp/__init__.py +50 -0
  49. hammad/mcp/client/__init__.py +1 -0
  50. hammad/mcp/client/client.py +523 -0
  51. hammad/mcp/client/client_service.py +393 -0
  52. hammad/mcp/client/settings.py +178 -0
  53. hammad/mcp/servers/__init__.py +1 -0
  54. hammad/mcp/servers/launcher.py +1161 -0
  55. hammad/performance/__init__.py +36 -0
  56. hammad/{_core/_utils/_import_utils.py → performance/imports.py} +125 -76
  57. hammad/performance/runtime/__init__.py +32 -0
  58. hammad/performance/runtime/decorators.py +142 -0
  59. hammad/performance/runtime/run.py +299 -0
  60. hammad/service/__init__.py +49 -0
  61. hammad/service/create.py +532 -0
  62. hammad/service/decorators.py +285 -0
  63. hammad/web/__init__.py +2 -2
  64. hammad/web/http/client.py +1 -1
  65. hammad/web/openapi/__init__.py +1 -0
  66. {hammad_python-0.0.13.dist-info → hammad_python-0.0.14.dist-info}/METADATA +35 -3
  67. hammad_python-0.0.14.dist-info/RECORD +99 -0
  68. hammad/_core/__init__.py +0 -1
  69. hammad/_core/_utils/__init__.py +0 -4
  70. hammad/multithreading/__init__.py +0 -304
  71. hammad/types/__init__.py +0 -11
  72. hammad/yaml/converters.py +0 -19
  73. hammad_python-0.0.13.dist-info/RECORD +0 -85
  74. /hammad/{base → data/models/base}/fields.py +0 -0
  75. /hammad/{base → data/models/base}/model.py +0 -0
  76. /hammad/{base → data/models/base}/utils.py +0 -0
  77. {hammad_python-0.0.13.dist-info → hammad_python-0.0.14.dist-info}/WHEEL +0 -0
  78. {hammad_python-0.0.13.dist-info → hammad_python-0.0.14.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,285 @@
1
+ """hammad.service.decorators"""
2
+
3
+ from typing import (
4
+ Any,
5
+ Callable,
6
+ Dict,
7
+ List,
8
+ Literal,
9
+ Optional,
10
+ Type,
11
+ Union,
12
+ ParamSpec,
13
+ TypeVar,
14
+ )
15
+
16
+
17
+ ServiceFunctionParams = ParamSpec("ServiceFunctionParams")
18
+ ServiceFunctionReturn = TypeVar("ServiceFunctionReturn")
19
+
20
+
21
+ def serve(
22
+ func: Optional[Callable[ServiceFunctionParams, ServiceFunctionReturn]] = None,
23
+ *,
24
+ # Overrides
25
+ name: Optional[str] = None,
26
+ method: Literal[
27
+ "GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS", "HEAD"
28
+ ] = "POST",
29
+ path: str = "/",
30
+ # Server configuration
31
+ host: str = "0.0.0.0",
32
+ port: int = 8000,
33
+ log_level: str = "info",
34
+ reload: bool = False,
35
+ workers: int = 1,
36
+ timeout_keep_alive: int = 5,
37
+ access_log: bool = True,
38
+ use_colors: bool = True,
39
+ auto_start: bool = True,
40
+ # FastAPI
41
+ include_in_schema: bool = True,
42
+ dependencies: Optional[List[Callable[..., Any]]] = None,
43
+ tags: Optional[List[str]] = None,
44
+ description: Optional[str] = None,
45
+ ) -> Union[Callable[ServiceFunctionParams, ServiceFunctionReturn], Callable]:
46
+ """Decorator to serve a function as a FastAPI endpoint.
47
+
48
+ Can be used as a decorator (@serve) or as a function (serve(func)).
49
+
50
+ Args:
51
+ func: Function to serve (when used as decorator, this is None initially)
52
+ name: Service name (defaults to function name)
53
+ method: HTTP method to use
54
+ path: API endpoint path
55
+ host: Host to bind to
56
+ port: Port to bind to
57
+ log_level: Uvicorn log level
58
+ reload: Enable auto-reload
59
+ workers: Number of worker processes
60
+ timeout_keep_alive: Keep-alive timeout
61
+ access_log: Enable access logging
62
+ use_colors: Use colored logs
63
+ auto_start: Automatically start the server
64
+ include_in_schema: Include in OpenAPI schema
65
+ dependencies: FastAPI dependencies
66
+ tags: API tags
67
+ description: API description
68
+
69
+ Returns:
70
+ The original function (when used as decorator)
71
+ """
72
+ from .create import create_service
73
+ from ..mcp.servers.launcher import find_next_free_port
74
+
75
+ def decorator(
76
+ f: Callable[ServiceFunctionParams, ServiceFunctionReturn],
77
+ ) -> Callable[ServiceFunctionParams, ServiceFunctionReturn]:
78
+ # Find next available port if auto_start is True
79
+ actual_port = port
80
+ if auto_start:
81
+ actual_port = find_next_free_port(port, host)
82
+
83
+ # Handle dependencies - convert raw functions to FastAPI Depends
84
+ processed_dependencies = None
85
+ if dependencies is not None:
86
+ from fastapi import Depends
87
+
88
+ processed_dependencies = [
89
+ Depends(dep) if callable(dep) else dep for dep in dependencies
90
+ ]
91
+
92
+ # Store the service configuration on the function
93
+ f._service_config = {
94
+ "name": name or f.__name__,
95
+ "method": method,
96
+ "path": path,
97
+ "host": host,
98
+ "port": actual_port,
99
+ "log_level": log_level,
100
+ "reload": reload,
101
+ "workers": workers,
102
+ "timeout_keep_alive": timeout_keep_alive,
103
+ "access_log": access_log,
104
+ "use_colors": use_colors,
105
+ "auto_start": auto_start,
106
+ "include_in_schema": include_in_schema,
107
+ "dependencies": processed_dependencies,
108
+ "tags": tags,
109
+ "description": description,
110
+ }
111
+
112
+ # Create and start the service immediately if auto_start is True
113
+ if auto_start:
114
+ create_service(f, **f._service_config)
115
+
116
+ return f
117
+
118
+ if func is None:
119
+ # Called as @serve(...)
120
+ return decorator
121
+ else:
122
+ # Called as @serve (without parentheses)
123
+ return decorator(func)
124
+
125
+
126
+ def serve_mcp(
127
+ func_or_funcs: Optional[Union[Callable, List[Callable]]] = None,
128
+ *,
129
+ # MCP Server configuration
130
+ name: Optional[str] = None,
131
+ instructions: Optional[str] = None,
132
+ transport: Literal["stdio", "sse", "streamable-http"] = "stdio",
133
+ # Server settings (for sse/http transports)
134
+ host: str = "127.0.0.1",
135
+ port: int = 8000,
136
+ mount_path: str = "/",
137
+ sse_path: str = "/sse",
138
+ message_path: str = "/messages/",
139
+ streamable_http_path: str = "/mcp",
140
+ json_response: bool = False,
141
+ stateless_http: bool = False,
142
+ warn_on_duplicate_resources: bool = True,
143
+ warn_on_duplicate_tools: bool = True,
144
+ # FastMCP settings
145
+ dependencies: Optional[List[str]] = None,
146
+ log_level: Literal["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"] = "INFO",
147
+ debug_mode: bool = False,
148
+ cwd: Optional[str] = None,
149
+ # Launch settings
150
+ auto_restart: bool = False,
151
+ check_interval: float = 1.0,
152
+ # Function-specific parameters (only when single function)
153
+ single_func_name: Optional[str] = None,
154
+ single_func_description: Optional[str] = None,
155
+ ) -> Union[Callable, List[Callable]]:
156
+ """Decorator/function to serve functions as MCP server tools.
157
+
158
+ Can be used in multiple ways:
159
+ 1. As a decorator: @serve_mcp
160
+ 2. As a decorator with params: @serve_mcp(name="MyServer")
161
+ 3. As a function with single function: serve_mcp(my_func)
162
+ 4. As a function with multiple functions: serve_mcp([func1, func2])
163
+
164
+ Args:
165
+ func_or_funcs: Function or list of functions to serve
166
+ name: MCP server name
167
+ instructions: Server instructions
168
+ transport: Transport type (stdio, sse, streamable-http)
169
+ host: Host for HTTP transports
170
+ port: Starting port for HTTP transports
171
+ mount_path: Mount path for HTTP servers
172
+ sse_path: SSE endpoint path
173
+ message_path: Message endpoint path
174
+ streamable_http_path: StreamableHTTP endpoint path
175
+ json_response: Use JSON responses for HTTP
176
+ stateless_http: Use stateless HTTP mode
177
+ warn_on_duplicate_resources: Warn on duplicate resources
178
+ warn_on_duplicate_tools: Warn on duplicate tools
179
+ dependencies: FastMCP dependencies
180
+ log_level: Logging level
181
+ debug_mode: Enable debug mode
182
+ cwd: Working directory
183
+ auto_restart: Automatically restart failed servers
184
+ check_interval: Health check interval in seconds
185
+ single_func_name: Name override for single function
186
+ single_func_description: Description for single function
187
+
188
+ Returns:
189
+ Original function(s) unchanged
190
+ """
191
+ from ..mcp.servers.launcher import (
192
+ launch_mcp_servers,
193
+ MCPServerStdioSettings,
194
+ MCPServerSseSettings,
195
+ MCPServerStreamableHttpSettings,
196
+ )
197
+
198
+ def _create_server_config(
199
+ tools: List[Callable], server_name: str, server_instructions: Optional[str]
200
+ ):
201
+ """Create the appropriate server configuration based on transport type."""
202
+ base_config = {
203
+ "name": server_name,
204
+ "instructions": server_instructions,
205
+ "tools": tools,
206
+ "dependencies": dependencies or [],
207
+ "log_level": log_level,
208
+ "debug_mode": debug_mode,
209
+ "cwd": cwd,
210
+ }
211
+
212
+ if transport == "stdio":
213
+ return MCPServerStdioSettings(**base_config)
214
+ elif transport == "sse":
215
+ return MCPServerSseSettings(
216
+ **base_config,
217
+ host=host,
218
+ start_port=port,
219
+ mount_path=mount_path,
220
+ sse_path=sse_path,
221
+ message_path=message_path,
222
+ json_response=json_response,
223
+ stateless_http=stateless_http,
224
+ warn_on_duplicate_resources=warn_on_duplicate_resources,
225
+ warn_on_duplicate_tools=warn_on_duplicate_tools,
226
+ )
227
+ elif transport == "streamable-http":
228
+ return MCPServerStreamableHttpSettings(
229
+ **base_config,
230
+ host=host,
231
+ start_port=port,
232
+ mount_path=mount_path,
233
+ streamable_http_path=streamable_http_path,
234
+ json_response=json_response,
235
+ stateless_http=stateless_http,
236
+ warn_on_duplicate_resources=warn_on_duplicate_resources,
237
+ warn_on_duplicate_tools=warn_on_duplicate_tools,
238
+ )
239
+ else:
240
+ raise ValueError(f"Unsupported transport: {transport}")
241
+
242
+ def _launch_server(server_config):
243
+ """Launch the MCP server with the given configuration."""
244
+ launch_mcp_servers(
245
+ servers=[server_config],
246
+ check_interval=check_interval,
247
+ auto_restart=auto_restart,
248
+ )
249
+
250
+ def decorator(f: Callable) -> Callable:
251
+ """Decorator for single function."""
252
+ func_name = single_func_name or name or f.__name__
253
+ func_instructions = single_func_description or instructions or f.__doc__
254
+
255
+ # Create server configuration and launch
256
+ server_config = _create_server_config([f], func_name, func_instructions)
257
+ _launch_server(server_config)
258
+
259
+ return f
260
+
261
+ def handle_multiple_functions(funcs: List[Callable]) -> List[Callable]:
262
+ """Handle multiple functions."""
263
+ server_name = name or "MCPServer"
264
+ server_instructions = instructions or f"MCP server with {len(funcs)} tools"
265
+
266
+ # Create server configuration and launch
267
+ server_config = _create_server_config(funcs, server_name, server_instructions)
268
+ _launch_server(server_config)
269
+
270
+ return funcs
271
+
272
+ # Handle different call patterns
273
+ if func_or_funcs is None:
274
+ # Called as @serve_mcp(...) - return decorator
275
+ return decorator
276
+ elif callable(func_or_funcs):
277
+ # Called as @serve_mcp (no parentheses) or serve_mcp(single_func)
278
+ return decorator(func_or_funcs)
279
+ elif isinstance(func_or_funcs, list):
280
+ # Called as serve_mcp([func1, func2, ...])
281
+ return handle_multiple_functions(func_or_funcs)
282
+ else:
283
+ raise TypeError(
284
+ f"Expected callable or list of callables, got {type(func_or_funcs)}"
285
+ )
hammad/web/__init__.py CHANGED
@@ -1,7 +1,7 @@
1
1
  """hammad.web"""
2
2
 
3
3
  from typing import TYPE_CHECKING
4
- from .._core._utils._import_utils import _auto_create_getattr_loader
4
+ from ..performance.imports import create_getattr_importer
5
5
 
6
6
  if TYPE_CHECKING:
7
7
  from .utils import (
@@ -35,7 +35,7 @@ __all__ = (
35
35
  )
36
36
 
37
37
 
38
- __getattr__ = _auto_create_getattr_loader(__all__)
38
+ __getattr__ = create_getattr_importer(__all__)
39
39
 
40
40
 
41
41
  def __dir__() -> list[str]:
hammad/web/http/client.py CHANGED
@@ -1,4 +1,4 @@
1
- """Base HTTP toolkit implementation with clean type hints and semantic error handling."""
1
+ """hammad.web.http.client"""
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -0,0 +1 @@
1
+ """hammad.web.openapi"""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hammad-python
3
- Version: 0.0.13
3
+ Version: 0.0.14
4
4
  Summary: hammad - *Nightly* hyper-fast opinionated resources and modules built for quick development.
5
5
  Author-email: Hammad Saeed <hammadaidev@gmail.com>
6
6
  License-File: LICENSE
@@ -34,5 +34,37 @@ Requires-Dist: sse-starlette>=1.1.0; extra == 'serve'
34
34
  Requires-Dist: uvicorn>=0.34.0; extra == 'serve'
35
35
  Description-Content-Type: text/markdown
36
36
 
37
- # hammad-python
38
- hammadpy - *Nightly* hyper-fast opinionated resources and modules built for quick development.
37
+ ## hammad-python
38
+
39
+ > __Happily Accelerated Micro-Modules (_for_) Application Development__
40
+
41
+ ## Introduction
42
+
43
+ The `hammad-python` library, is a mix of a love letter and collection of mixed resources for
44
+ developing Python applications. This library is meant to be used for rapid prototyping and
45
+ development, and is focused on providing styled placeholder tools for common patterns, tasks
46
+ and workflows.
47
+
48
+ The package is currently built into the following structures:
49
+
50
+ - `hammad-python` : Contains most core functionality and resources.
51
+ - `hammad-python[ai]` : Contains easy to use resources for Generative AI related tasks such as
52
+ generating completions with language models, or creating embeddings.
53
+
54
+ ## Installation
55
+
56
+ You can install the package using `pip` or `uv`:
57
+
58
+ ```bash
59
+ pip install hammad-python
60
+
61
+ # or install the `ai` extension
62
+ # pip install 'hammad-python[ai]'
63
+ ```
64
+
65
+ ```bash
66
+ uv pip install hammad-python
67
+
68
+ # or install the `ai` extension
69
+ # uv pip install 'hammad-python[ai]'
70
+ ```
@@ -0,0 +1,99 @@
1
+ hammad/__init__.py,sha256=jlLAU-UQOE0szthvDBf3u77U6I-4quzZZ8_PWuGVPJ4,20
2
+ hammad/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ hammad/ai/__init__.py,sha256=6COUrJFQoIqJIRy6tUhi5Lpml_e4qMxXWYTIIacqtoM,16
4
+ hammad/ai/_utils.py,sha256=axsCHv66zfjjhlEbxaF_049fClHjQgHtUReXs8nsMwc,3950
5
+ hammad/ai/completions/__init__.py,sha256=3MHiUWn7AVlbXh4vmH1ILG4MYPEYp0-CYSlZR18QO4w,1115
6
+ hammad/ai/completions/client.py,sha256=4M40D_a4sbJmakBZD-lusRyEGp5YGaAKcmwBKJEroF4,26679
7
+ hammad/ai/completions/create.py,sha256=o1XLpRUPoQs6q4w2DHpdUVAzQA1TqeaIr4ct1rcTMpk,31909
8
+ hammad/ai/completions/settings.py,sha256=pM9ft62rMzlG2JBqQU6j-9skT6edbkbK_stajeLfFM0,3093
9
+ hammad/ai/completions/types.py,sha256=o6ki8aA9SZ-bVgmUZykKIoGgeI-GqO-rddMpIyZGcsk,28140
10
+ hammad/ai/completions/utils.py,sha256=lLEec1XdYBG2rBEALSfsRq88yK6gsU2uBOWH97UbxnI,17305
11
+ hammad/ai/embeddings/__init__.py,sha256=HmJBRWdzASa0nEa37GIkJiSbAaLXV-k48omra374kmA,1090
12
+ hammad/ai/embeddings/create.py,sha256=voVD6WLvoyIgqIMYOmJKJFxUho8ZIl0YDfbgM4X6B6w,6590
13
+ hammad/ai/embeddings/types.py,sha256=FCr2r4IYN-xYBmRXadocDQhDC2foC49X940UTVi9bgo,1772
14
+ hammad/ai/embeddings/client/__init__.py,sha256=F2SO89Q6xOYQWNfvAONBJdDLoXIsCxON6I1BxpjEkGQ,34
15
+ hammad/ai/embeddings/client/base_embeddings_client.py,sha256=EMT8jDMa0TKIV9XA9Tx9ze7eJ882OuCLL9KucI2EezQ,600
16
+ hammad/ai/embeddings/client/fastembed_text_embeddings_client.py,sha256=EWiaS9U-K7gnc2g8qHN-3lHCCgsEaCc-1Hny-DV3rf4,6956
17
+ hammad/ai/embeddings/client/litellm_embeddings_client.py,sha256=EMl7V6XiGUGaDs9N_HZaJ2GUJwW8LpWquiNF_yXzP3o,10042
18
+ hammad/cache/__init__.py,sha256=Ab97dA3tUUy4fts5kMOlSoVoYPydDShTJSMve6emGgY,964
19
+ hammad/cache/base_cache.py,sha256=kYJS2IcQtxhzT7BQBFtOWnhw4VkvAapPhAVkfbW5IeY,6353
20
+ hammad/cache/cache.py,sha256=bzDXxjSolrSdIxqES2VMfVZZGTk_8k4x9n0AW4tlifs,4621
21
+ hammad/cache/decorators.py,sha256=olYLK5x4JkxHpA8WIiplI45QYmNIzyGjNMrTKNRCSQg,9599
22
+ hammad/cache/file_cache.py,sha256=XjLJxM4Ql65OABxz8q1DtA_s8HZQJKywCw6MNVnC6YE,2485
23
+ hammad/cache/ttl_cache.py,sha256=-0pJ4lkVgg1OIb98bQFub9n6f4zgWVs-dQfKZe_DmpE,2153
24
+ hammad/cli/__init__.py,sha256=Tz0OyzLJHeW6wnKwX-xnA0oN4FE1Z2zm3WntFzE2RNI,743
25
+ hammad/cli/animations.py,sha256=q8rMyboRUwmgBwHutPj4oveDjw9BPTu1UjL53XlOb-U,19514
26
+ hammad/cli/plugins.py,sha256=61cljGF_V03_6xrBhO0tR-rrlgB44veHh5HXcxMTM3Y,26932
27
+ hammad/cli/styles/__init__.py,sha256=PDQEHlMhujetCVurTGRW3LOKZLr7338DQvKCFt4Fyjs,1373
28
+ hammad/cli/styles/settings.py,sha256=irChf9RsMij3djx_n9D9duoVIzxLCpd9-BlKl6U_OLk,5532
29
+ hammad/cli/styles/types.py,sha256=vNIeQY_23m10K8qVT7Iy-PMwosGL-La-UAZKszHJjEE,7911
30
+ hammad/cli/styles/utils.py,sha256=BGFwQIEJHWlTAXed8ZxHeI_phLfEdh-_Mok2fe-jn7g,19356
31
+ hammad/data/__init__.py,sha256=0PKUAZMYUk3eb5JAg7e1pUJwb0NtWMhicIo-O7TU-o4,1380
32
+ hammad/data/collections/__init__.py,sha256=trapmRN7MUEgLZsJfCanU2rbn8-hSw3uIGjD-uwz-fg,823
33
+ hammad/data/collections/base_collection.py,sha256=ZRht7OZjLIT8GxNvMgNxTarbCTY6EUUurEkGHZ3Rsy4,1419
34
+ hammad/data/collections/collection.py,sha256=MWjyY3YqZa3U9WH3Br8v-Q_FLP5XWf3p0lIMGzfIeJ4,15758
35
+ hammad/data/collections/searchable_collection.py,sha256=vCV_JgMwB57QRi4Cri6dfEUzLCyTBN58_JfWEKL2h_0,21361
36
+ hammad/data/collections/vector_collection.py,sha256=x3-pFoi6v9uRCpCmLdcVwJpo-6FVIVw_JTLWV4pYAiY,20901
37
+ hammad/data/configurations/__init__.py,sha256=-qd2LClmGgoCvucePfpZVJDP0sXR95b4J3x9lK3MX_o,838
38
+ hammad/data/configurations/configuration.py,sha256=M3JBpPjynOMdhjJrV9HiIzuTPKqo6i9dh7NiaCbp_L0,17739
39
+ hammad/data/databases/__init__.py,sha256=xlQFbwW9O0UzjZS5uh2BipgRzMFcwz1q7Bg0aDdqFuU,410
40
+ hammad/data/databases/database.py,sha256=7ngi-oWAsmAdtLTvpT4axw5ftcMzqsCtJmfmjzw5etk,31160
41
+ hammad/data/models/__init__.py,sha256=kGErTmEmWS5fqTRd-ESsetf_aRZTEUgt5k3uYWAx_fw,895
42
+ hammad/data/models/base/__init__.py,sha256=uCltlgyHVMk1GdAbqArPBC2xjRVE5U7BGaAfoBrPPcY,812
43
+ hammad/data/models/base/fields.py,sha256=n02Qqq1AkcxwGCGEjcBSu63uWSkcyfxisATr7nwc7DA,19173
44
+ hammad/data/models/base/model.py,sha256=_qyJ3IRJTwRXqZsYMpuYP8FTbMfLgh75VbTrTt1Wqx8,39121
45
+ hammad/data/models/base/utils.py,sha256=kmdWqDcCTB7y4w5pdAfyrOfpzqj1hjKILIklAwbvNxM,9957
46
+ hammad/data/models/pydantic/__init__.py,sha256=uv2KhaxACJf5rUURlUjB3gXWcb0EDEDXF98QoK_KQTI,1501
47
+ hammad/data/models/pydantic/converters.py,sha256=ePV4GXco_eEZ5cTYH0vk2bv3ywZztvAzwEgenUeQicA,20544
48
+ hammad/data/models/pydantic/models/__init__.py,sha256=tEjSun4IPyUfVvYst8e8l9JgvRanAvJt0iLNYiigHdc,670
49
+ hammad/data/models/pydantic/models/arbitrary_model.py,sha256=xgCt4e7CyD0CF8Ozk9TNNLa_Kxue4K1QAs8vj6S-WQY,1536
50
+ hammad/data/models/pydantic/models/cacheable_model.py,sha256=xnv-5Bf7uf6ELQ-amuZghRDfuuX1eFmaDh7Lz5IRpdU,2821
51
+ hammad/data/models/pydantic/models/fast_model.py,sha256=RiVyutUS296tQp7gK7IrHXeLWVtSx9wKU_vf9keuYuU,11728
52
+ hammad/data/models/pydantic/models/function_model.py,sha256=6YTGzHAtwlybn3M46dry6JgfGjuo1TntXtHVZ5pqrHQ,6312
53
+ hammad/data/models/pydantic/models/subscriptable_model.py,sha256=K5ZqxrDxikKv2iMv7_Xt3liG9AZ73cSNhzuOZpjed7w,1718
54
+ hammad/data/types/__init__.py,sha256=asGaCmHSYo7r5mXR8tWA0b3ermLCMGAuZDXXDkR6W3w,770
55
+ hammad/data/types/file.py,sha256=gBpQxQCJJJVOFeUS_7NRkhA1pB54b6Wy3NzOH-fmnWY,11116
56
+ hammad/data/types/text.py,sha256=rATiwkTsAJ8pWzZ7OBsWX7rDNoKvkeuWsGWd_sbuUaM,33369
57
+ hammad/data/types/multimodal/__init__.py,sha256=FrQJ7GoUfI-zen5m2oayzXfDlShKqqSQG4zLXlL-3Nw,431
58
+ hammad/data/types/multimodal/audio.py,sha256=HAKWi96F2kJ2dLMDXTeVLYlXPhaFZAH55TCROuirMzo,2786
59
+ hammad/data/types/multimodal/image.py,sha256=oI9DMHw6XxV2ma3XIWqK-jwczi5HUNszGzIl_BtEuxA,2274
60
+ hammad/formatting/__init__.py,sha256=J4VSLnZk2ImZCBtVg2el0KZFcwQNmU1UyF4wdiz-i5E,776
61
+ hammad/formatting/json/__init__.py,sha256=Sv-p-85VFcmVE3vHbgu23jGZB0tzJRFX0HKJDYLc6KA,472
62
+ hammad/formatting/json/converters.py,sha256=4AYKxsqDftKtjfxFTIY9mQ0_CbrUmAK_6EBpD2X40pU,5502
63
+ hammad/formatting/text/__init__.py,sha256=lpDcwMpKN0ZyMYxGBNd52fAWQ0UhOTkjkNP1WqJ1xjM,1516
64
+ hammad/formatting/text/converters.py,sha256=g3z-ZGTaKNVbLFFKBSh6qN2Uz0BSkdxCaN3LR9cAyV8,23806
65
+ hammad/formatting/text/markdown.py,sha256=D17NOoGkoXUBhoOGKelKHwi72iqsAwPU5HEFjRJtLQI,3407
66
+ hammad/formatting/yaml/__init__.py,sha256=EEkOsh6DYH0F2mIU-mzFXgNqcc_GmqHaIPlKGCnj2tg,472
67
+ hammad/formatting/yaml/converters.py,sha256=zvSB8QGb56uvwO0KjXllfTj9g1FmNINOKR06DTjvXw8,153
68
+ hammad/logging/__init__.py,sha256=2fMnpKO20HWcyYbgQnGzV02g1t0kbH_c8wLmHIV5Hrk,711
69
+ hammad/logging/decorators.py,sha256=xhHRA7WhesgdVMSwK_JvqZhGb90GF3TbYco13Y7aY0w,30119
70
+ hammad/logging/logger.py,sha256=8q-7anLeZk07QlPszdt_qzsQPaeuZyDHevV8C6R_okk,31451
71
+ hammad/mcp/__init__.py,sha256=aaXwQOI4kJ8Dkbsg9rb8kZ5NJ6NqeT7aDmfQKPJcOAM,1133
72
+ hammad/mcp/client/__init__.py,sha256=FdvJqHaup6KgonBRvE570B2X-_GwY-ZlEtsXBLXubcw,24
73
+ hammad/mcp/client/client.py,sha256=kRPKAcTenUSp1aL7oCnrOw0AoSqU9dVdf1H_r1rkDaY,17959
74
+ hammad/mcp/client/client_service.py,sha256=lZUkNJo9BBrwR8qUtDByzofMx6aJJuer9w2uHZFBCW0,14874
75
+ hammad/mcp/client/settings.py,sha256=7bLpJYyiUT_H7zp3SDwLyAt9fmiQwL3L89qVTAZYpi8,5913
76
+ hammad/mcp/servers/__init__.py,sha256=lxlhxoBPPhlFAJl87AL-11Qbl1Jhit27lmPDC03Ww8I,25
77
+ hammad/mcp/servers/launcher.py,sha256=jQDQOqz-cKK2PSEOxoPBCVsBeTABNNjcwTXSWE4-LQA,41606
78
+ hammad/performance/__init__.py,sha256=hAbp_40Uw5LqGy-K2MCoiee1DUazb8GT49_GJ7LQGKs,789
79
+ hammad/performance/imports.py,sha256=WwbrufLOkrvqJh3CLp8H_7nmGEE8vcWNbJN74Dk_gGg,7814
80
+ hammad/performance/runtime/__init__.py,sha256=xk7rdpDb_s2EIxu2bvpOlhAZh5ZV1ckRIviSapL9wFM,672
81
+ hammad/performance/runtime/decorators.py,sha256=TC6JL5MVu9ak2XUNpuzpwPY6nirKDLgbd-iuUNI0YIA,4536
82
+ hammad/performance/runtime/run.py,sha256=K6GS6SGs8ktztiBAAgU8oaPpycravjPAgJD_tXAjQpA,10814
83
+ hammad/service/__init__.py,sha256=U8wxhj5l9JdeJZXIPT7Eo7gZacxJ2PQ-xN58gy5Lb5g,1232
84
+ hammad/service/create.py,sha256=x9N3uAzWeoInnq7HJpUTf3m87sYCFP5jLQK3S91ArLo,16423
85
+ hammad/service/decorators.py,sha256=QBZ7iZK1c-tTNoKt6vqnNFN2BT-FdLaGz_f6vOmeY1w,10028
86
+ hammad/typing/__init__.py,sha256=jQEwoJVMdgk1VQTLyMiJaU7l5P8JIvcvwcjMazE7iSo,10923
87
+ hammad/web/__init__.py,sha256=CbHQXPfybL1qv2yi0_HmeOqNkjzz9xSdXKmot2gSub8,1063
88
+ hammad/web/models.py,sha256=q9d4_3UPvHcvG_HuULxKHQuNrllA2S-3CSP3HdU21Cs,5637
89
+ hammad/web/utils.py,sha256=7jf_esoIwctKg1qxSaN6yAgzeo70HT1IdSVqoNdHFSQ,15815
90
+ hammad/web/http/__init__.py,sha256=jn9Rn7Yg2cypD7duTTNFuW2wQZx9B63Bde4RJJeDYU0,22
91
+ hammad/web/http/client.py,sha256=J_W0d1vop92uANQ7YD1o72XAp95Ma67Uz1YolNDF19M,33086
92
+ hammad/web/openapi/__init__.py,sha256=JhJQ6_laBmB2djIYFc0vgGha2GsdUe4FP1LDdZCQ5J4,25
93
+ hammad/web/openapi/client.py,sha256=1pXz7KAO_0pN4kQZoWKWskXDYGiJ535TsPO1GGCiC0E,26816
94
+ hammad/web/search/__init__.py,sha256=e9A6znPIiZCz-4secyHbUs0uUGf5yAqW6wGacgx961U,24
95
+ hammad/web/search/client.py,sha256=4VEhctFf_4LRxM2TXsEssSW6tbaZnu0NYaIVMYQrJNs,35434
96
+ hammad_python-0.0.14.dist-info/METADATA,sha256=ECSnj__tLbSE19XURH8fuHtt_iplioxoNN0QbSmBWtw,2302
97
+ hammad_python-0.0.14.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
98
+ hammad_python-0.0.14.dist-info/licenses/LICENSE,sha256=h74yFUWjbBaodcWG5wNmm30npjl8obVcxD-1nQfUp2I,1069
99
+ hammad_python-0.0.14.dist-info/RECORD,,
hammad/_core/__init__.py DELETED
@@ -1 +0,0 @@
1
- """hammad._core"""
@@ -1,4 +0,0 @@
1
- """hammad._core._utils
2
-
3
- Contains internal utility functions use at a low level for various cases
4
- throughout the `hammad` package."""