hammad-python 0.0.12__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.
- hammad/__init__.py +1 -180
- hammad/ai/__init__.py +0 -58
- hammad/ai/completions/__init__.py +3 -2
- hammad/ai/completions/client.py +84 -129
- hammad/ai/completions/create.py +33 -9
- hammad/ai/completions/settings.py +100 -0
- hammad/ai/completions/types.py +86 -5
- hammad/ai/completions/utils.py +112 -0
- hammad/ai/embeddings/__init__.py +2 -2
- hammad/ai/embeddings/client/fastembed_text_embeddings_client.py +1 -1
- hammad/ai/embeddings/client/litellm_embeddings_client.py +1 -1
- hammad/ai/embeddings/types.py +4 -4
- hammad/cache/__init__.py +13 -21
- hammad/cli/__init__.py +2 -2
- hammad/cli/animations.py +8 -39
- hammad/cli/styles/__init__.py +2 -2
- hammad/data/__init__.py +19 -2
- hammad/data/collections/__init__.py +2 -2
- hammad/data/collections/vector_collection.py +0 -7
- hammad/{configuration → data/configurations}/__init__.py +2 -2
- hammad/{configuration → data/configurations}/configuration.py +1 -1
- hammad/data/databases/__init__.py +2 -2
- hammad/data/models/__init__.py +44 -0
- hammad/{base → data/models/base}/__init__.py +3 -3
- hammad/{pydantic → data/models/pydantic}/__init__.py +28 -16
- hammad/{pydantic → data/models/pydantic}/converters.py +11 -2
- hammad/{pydantic → data/models/pydantic}/models/__init__.py +3 -3
- hammad/{pydantic → data/models/pydantic}/models/arbitrary_model.py +1 -1
- hammad/{pydantic → data/models/pydantic}/models/cacheable_model.py +1 -1
- hammad/{pydantic → data/models/pydantic}/models/fast_model.py +1 -1
- hammad/{pydantic → data/models/pydantic}/models/function_model.py +1 -1
- hammad/{pydantic → data/models/pydantic}/models/subscriptable_model.py +1 -1
- hammad/data/types/__init__.py +41 -0
- hammad/{types → data/types}/file.py +2 -2
- hammad/{multimodal → data/types/multimodal}/__init__.py +2 -2
- hammad/{multimodal → data/types/multimodal}/audio.py +2 -2
- hammad/{multimodal → data/types/multimodal}/image.py +2 -2
- hammad/{text → data/types}/text.py +4 -4
- hammad/formatting/__init__.py +38 -0
- hammad/{json → formatting/json}/__init__.py +3 -3
- hammad/{json → formatting/json}/converters.py +2 -2
- hammad/{text → formatting/text}/__init__.py +5 -24
- hammad/{text → formatting/text}/converters.py +2 -2
- hammad/{text → formatting/text}/markdown.py +1 -1
- hammad/{yaml → formatting/yaml}/__init__.py +3 -7
- hammad/formatting/yaml/converters.py +5 -0
- hammad/logging/__init__.py +2 -2
- hammad/mcp/__init__.py +50 -0
- hammad/mcp/client/__init__.py +1 -0
- hammad/mcp/client/client.py +523 -0
- hammad/mcp/client/client_service.py +393 -0
- hammad/mcp/client/settings.py +178 -0
- hammad/mcp/servers/__init__.py +1 -0
- hammad/mcp/servers/launcher.py +1161 -0
- hammad/performance/__init__.py +36 -0
- hammad/{_core/_utils/_import_utils.py → performance/imports.py} +125 -76
- hammad/performance/runtime/__init__.py +32 -0
- hammad/performance/runtime/decorators.py +142 -0
- hammad/performance/runtime/run.py +299 -0
- hammad/service/__init__.py +49 -0
- hammad/service/create.py +532 -0
- hammad/service/decorators.py +285 -0
- hammad/web/__init__.py +2 -2
- hammad/web/http/client.py +1 -1
- hammad/web/openapi/__init__.py +1 -0
- {hammad_python-0.0.12.dist-info → hammad_python-0.0.14.dist-info}/METADATA +35 -3
- hammad_python-0.0.14.dist-info/RECORD +99 -0
- hammad/_core/__init__.py +0 -1
- hammad/_core/_utils/__init__.py +0 -4
- hammad/multithreading/__init__.py +0 -304
- hammad/types/__init__.py +0 -11
- hammad/yaml/converters.py +0 -19
- hammad_python-0.0.12.dist-info/RECORD +0 -85
- /hammad/{base → data/models/base}/fields.py +0 -0
- /hammad/{base → data/models/base}/model.py +0 -0
- /hammad/{base → data/models/base}/utils.py +0 -0
- {hammad_python-0.0.12.dist-info → hammad_python-0.0.14.dist-info}/WHEEL +0 -0
- {hammad_python-0.0.12.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 ..
|
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__ =
|
38
|
+
__getattr__ = create_getattr_importer(__all__)
|
39
39
|
|
40
40
|
|
41
41
|
def __dir__() -> list[str]:
|
hammad/web/http/client.py
CHANGED
hammad/web/openapi/__init__.py
CHANGED
@@ -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.
|
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
|
-
|
38
|
-
|
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"""
|
hammad/_core/_utils/__init__.py
DELETED