hammad-python 0.0.30__py3-none-any.whl → 0.0.31__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 (137) hide show
  1. ham/__init__.py +10 -0
  2. {hammad_python-0.0.30.dist-info → hammad_python-0.0.31.dist-info}/METADATA +6 -32
  3. hammad_python-0.0.31.dist-info/RECORD +6 -0
  4. hammad/__init__.py +0 -84
  5. hammad/_internal.py +0 -256
  6. hammad/_main.py +0 -226
  7. hammad/cache/__init__.py +0 -40
  8. hammad/cache/base_cache.py +0 -181
  9. hammad/cache/cache.py +0 -169
  10. hammad/cache/decorators.py +0 -261
  11. hammad/cache/file_cache.py +0 -80
  12. hammad/cache/ttl_cache.py +0 -74
  13. hammad/cli/__init__.py +0 -33
  14. hammad/cli/animations.py +0 -573
  15. hammad/cli/plugins.py +0 -867
  16. hammad/cli/styles/__init__.py +0 -55
  17. hammad/cli/styles/settings.py +0 -139
  18. hammad/cli/styles/types.py +0 -358
  19. hammad/cli/styles/utils.py +0 -634
  20. hammad/data/__init__.py +0 -90
  21. hammad/data/collections/__init__.py +0 -49
  22. hammad/data/collections/collection.py +0 -326
  23. hammad/data/collections/indexes/__init__.py +0 -37
  24. hammad/data/collections/indexes/qdrant/__init__.py +0 -1
  25. hammad/data/collections/indexes/qdrant/index.py +0 -723
  26. hammad/data/collections/indexes/qdrant/settings.py +0 -94
  27. hammad/data/collections/indexes/qdrant/utils.py +0 -210
  28. hammad/data/collections/indexes/tantivy/__init__.py +0 -1
  29. hammad/data/collections/indexes/tantivy/index.py +0 -426
  30. hammad/data/collections/indexes/tantivy/settings.py +0 -40
  31. hammad/data/collections/indexes/tantivy/utils.py +0 -176
  32. hammad/data/configurations/__init__.py +0 -35
  33. hammad/data/configurations/configuration.py +0 -564
  34. hammad/data/models/__init__.py +0 -50
  35. hammad/data/models/extensions/__init__.py +0 -4
  36. hammad/data/models/extensions/pydantic/__init__.py +0 -42
  37. hammad/data/models/extensions/pydantic/converters.py +0 -759
  38. hammad/data/models/fields.py +0 -546
  39. hammad/data/models/model.py +0 -1078
  40. hammad/data/models/utils.py +0 -280
  41. hammad/data/sql/__init__.py +0 -24
  42. hammad/data/sql/database.py +0 -576
  43. hammad/data/sql/types.py +0 -127
  44. hammad/data/types/__init__.py +0 -75
  45. hammad/data/types/file.py +0 -431
  46. hammad/data/types/multimodal/__init__.py +0 -36
  47. hammad/data/types/multimodal/audio.py +0 -200
  48. hammad/data/types/multimodal/image.py +0 -182
  49. hammad/data/types/text.py +0 -1308
  50. hammad/formatting/__init__.py +0 -33
  51. hammad/formatting/json/__init__.py +0 -27
  52. hammad/formatting/json/converters.py +0 -158
  53. hammad/formatting/text/__init__.py +0 -63
  54. hammad/formatting/text/converters.py +0 -723
  55. hammad/formatting/text/markdown.py +0 -131
  56. hammad/formatting/yaml/__init__.py +0 -26
  57. hammad/formatting/yaml/converters.py +0 -5
  58. hammad/genai/__init__.py +0 -217
  59. hammad/genai/a2a/__init__.py +0 -32
  60. hammad/genai/a2a/workers.py +0 -552
  61. hammad/genai/agents/__init__.py +0 -59
  62. hammad/genai/agents/agent.py +0 -1973
  63. hammad/genai/agents/run.py +0 -1024
  64. hammad/genai/agents/types/__init__.py +0 -42
  65. hammad/genai/agents/types/agent_context.py +0 -13
  66. hammad/genai/agents/types/agent_event.py +0 -128
  67. hammad/genai/agents/types/agent_hooks.py +0 -220
  68. hammad/genai/agents/types/agent_messages.py +0 -31
  69. hammad/genai/agents/types/agent_response.py +0 -125
  70. hammad/genai/agents/types/agent_stream.py +0 -327
  71. hammad/genai/graphs/__init__.py +0 -125
  72. hammad/genai/graphs/_utils.py +0 -190
  73. hammad/genai/graphs/base.py +0 -1828
  74. hammad/genai/graphs/plugins.py +0 -316
  75. hammad/genai/graphs/types.py +0 -638
  76. hammad/genai/models/__init__.py +0 -1
  77. hammad/genai/models/embeddings/__init__.py +0 -43
  78. hammad/genai/models/embeddings/model.py +0 -226
  79. hammad/genai/models/embeddings/run.py +0 -163
  80. hammad/genai/models/embeddings/types/__init__.py +0 -37
  81. hammad/genai/models/embeddings/types/embedding_model_name.py +0 -75
  82. hammad/genai/models/embeddings/types/embedding_model_response.py +0 -76
  83. hammad/genai/models/embeddings/types/embedding_model_run_params.py +0 -66
  84. hammad/genai/models/embeddings/types/embedding_model_settings.py +0 -47
  85. hammad/genai/models/language/__init__.py +0 -57
  86. hammad/genai/models/language/model.py +0 -1098
  87. hammad/genai/models/language/run.py +0 -878
  88. hammad/genai/models/language/types/__init__.py +0 -40
  89. hammad/genai/models/language/types/language_model_instructor_mode.py +0 -47
  90. hammad/genai/models/language/types/language_model_messages.py +0 -28
  91. hammad/genai/models/language/types/language_model_name.py +0 -239
  92. hammad/genai/models/language/types/language_model_request.py +0 -127
  93. hammad/genai/models/language/types/language_model_response.py +0 -217
  94. hammad/genai/models/language/types/language_model_response_chunk.py +0 -56
  95. hammad/genai/models/language/types/language_model_settings.py +0 -89
  96. hammad/genai/models/language/types/language_model_stream.py +0 -600
  97. hammad/genai/models/language/utils/__init__.py +0 -28
  98. hammad/genai/models/language/utils/requests.py +0 -421
  99. hammad/genai/models/language/utils/structured_outputs.py +0 -135
  100. hammad/genai/models/model_provider.py +0 -4
  101. hammad/genai/models/multimodal.py +0 -47
  102. hammad/genai/models/reranking.py +0 -26
  103. hammad/genai/types/__init__.py +0 -1
  104. hammad/genai/types/base.py +0 -215
  105. hammad/genai/types/history.py +0 -290
  106. hammad/genai/types/tools.py +0 -507
  107. hammad/logging/__init__.py +0 -35
  108. hammad/logging/decorators.py +0 -834
  109. hammad/logging/logger.py +0 -1018
  110. hammad/mcp/__init__.py +0 -53
  111. hammad/mcp/client/__init__.py +0 -35
  112. hammad/mcp/client/client.py +0 -624
  113. hammad/mcp/client/client_service.py +0 -400
  114. hammad/mcp/client/settings.py +0 -178
  115. hammad/mcp/servers/__init__.py +0 -26
  116. hammad/mcp/servers/launcher.py +0 -1161
  117. hammad/runtime/__init__.py +0 -32
  118. hammad/runtime/decorators.py +0 -142
  119. hammad/runtime/run.py +0 -299
  120. hammad/service/__init__.py +0 -49
  121. hammad/service/create.py +0 -527
  122. hammad/service/decorators.py +0 -283
  123. hammad/types.py +0 -288
  124. hammad/typing/__init__.py +0 -435
  125. hammad/web/__init__.py +0 -43
  126. hammad/web/http/__init__.py +0 -1
  127. hammad/web/http/client.py +0 -944
  128. hammad/web/models.py +0 -275
  129. hammad/web/openapi/__init__.py +0 -1
  130. hammad/web/openapi/client.py +0 -740
  131. hammad/web/search/__init__.py +0 -1
  132. hammad/web/search/client.py +0 -1023
  133. hammad/web/utils.py +0 -472
  134. hammad_python-0.0.30.dist-info/RECORD +0 -135
  135. {hammad → ham}/py.typed +0 -0
  136. {hammad_python-0.0.30.dist-info → hammad_python-0.0.31.dist-info}/WHEEL +0 -0
  137. {hammad_python-0.0.30.dist-info → hammad_python-0.0.31.dist-info}/licenses/LICENSE +0 -0
hammad/web/utils.py DELETED
@@ -1,472 +0,0 @@
1
- """hammad.web.utils"""
2
-
3
- import asyncio
4
- from typing import Any, Dict, Optional, Union, Literal, List, overload, TYPE_CHECKING
5
-
6
- if TYPE_CHECKING:
7
- from .http.client import HttpResponse
8
-
9
- from .models import (
10
- SearchResults,
11
- NewsResults,
12
- WebPageResult,
13
- WebPageResults,
14
- ExtractedLinks,
15
- HttpResponse as HttpResponseModel,
16
- )
17
-
18
- __all__ = (
19
- "run_web_request",
20
- "run_web_search",
21
- "read_web_page",
22
- "read_web_pages",
23
- "run_news_search",
24
- "extract_web_page_links",
25
- )
26
-
27
-
28
- # Module-level singleton for performance
29
- _search_client = None
30
-
31
-
32
- def _get_search_client():
33
- """Get a SearchClient instance using lazy import and singleton pattern."""
34
- global _search_client
35
- if _search_client is None:
36
- from .search.client import AsyncSearchClient as SearchClient
37
-
38
- _search_client = SearchClient()
39
- return _search_client
40
-
41
-
42
- @overload
43
- def run_web_request(
44
- type: Literal["http"],
45
- method: Literal["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"],
46
- url: str,
47
- *,
48
- headers: Optional[Dict[str, str]] = None,
49
- params: Optional[Dict[str, Any]] = None,
50
- json_data: Optional[Dict[str, Any]] = None,
51
- form_data: Optional[Dict[str, Any]] = None,
52
- content: Optional[Union[str, bytes]] = None,
53
- timeout: Optional[float] = None,
54
- follow_redirects: bool = True,
55
- base_url: Optional[str] = None,
56
- default_headers: Optional[Dict[str, str]] = None,
57
- verify_ssl: bool = True,
58
- # Semantic authentication parameters
59
- api_key: Optional[str] = None,
60
- api_key_header: str = "X-API-Key",
61
- bearer_token: Optional[str] = None,
62
- basic_auth: Optional[tuple[str, str]] = None,
63
- user_agent: Optional[str] = None,
64
- retry_attempts: int = 0,
65
- retry_delay: float = 1.0,
66
- ) -> "HttpResponse": ...
67
-
68
-
69
- @overload
70
- def run_web_request(
71
- type: Literal["openapi"],
72
- openapi_spec: Union[str, Dict[str, Any]],
73
- operation_id: str,
74
- *,
75
- parameters: Optional[Dict[str, Any]] = None,
76
- request_body: Optional[Dict[str, Any]] = None,
77
- headers: Optional[Dict[str, str]] = None,
78
- base_url: Optional[str] = None,
79
- default_headers: Optional[Dict[str, str]] = None,
80
- timeout: float = 30.0,
81
- follow_redirects: bool = True,
82
- verify_ssl: bool = True,
83
- # Semantic authentication parameters
84
- api_key: Optional[str] = None,
85
- api_key_header: str = "X-API-Key",
86
- bearer_token: Optional[str] = None,
87
- basic_auth: Optional[tuple[str, str]] = None,
88
- user_agent: Optional[str] = None,
89
- ) -> "HttpResponse": ...
90
-
91
-
92
- def run_web_request(
93
- type: Literal["http", "openapi"], *args, **kwargs
94
- ) -> "HttpResponse":
95
- """
96
- Create and execute a request using either HTTP or OpenAPI toolkits.
97
-
98
- This function initializes the appropriate toolkit and sends the request,
99
- returning the HTTP response.
100
-
101
- Args:
102
- type: Type of request - "http" for direct HTTP requests or "openapi" for OpenAPI operations
103
-
104
- HTTP-specific args:
105
- method: HTTP method
106
- url: Request URL
107
- headers: Request headers
108
- params: Query parameters
109
- json_data: JSON request body
110
- form_data: Form data
111
- content: Raw content
112
- timeout: Request timeout
113
- follow_redirects: Whether to follow redirects
114
- base_url: Base URL for requests
115
- default_headers: Default headers
116
- verify_ssl: Whether to verify SSL certificates
117
-
118
- OpenAPI-specific args:
119
- openapi_spec: OpenAPI specification (dict, JSON string, or YAML string)
120
- operation_id: OpenAPI operation ID to execute
121
- parameters: Operation parameters
122
- request_body: Request body for the operation
123
- headers: Additional headers
124
- base_url: Base URL override
125
- default_headers: Default headers
126
- timeout: Request timeout
127
- follow_redirects: Whether to follow redirects
128
- verify_ssl: Whether to verify SSL certificates
129
-
130
- Returns:
131
- HttpResponse object containing the response data
132
-
133
- Raises:
134
- ValueError: For invalid request type or missing required parameters
135
- HttpToolkitError: For HTTP-related errors
136
- OpenApiToolkitError: For OpenAPI-related errors
137
- """
138
-
139
- async def _run_web_request_async():
140
- if type == "http":
141
- if len(args) < 2:
142
- raise ValueError(
143
- "HTTP requests require method and url as positional arguments"
144
- )
145
-
146
- method, url = args[0], args[1]
147
-
148
- # Import here to avoid circular imports
149
- from .http.client import HttpClient as HttpToolkit
150
-
151
- # Initialize the HTTP toolkit
152
- toolkit = HttpToolkit(
153
- base_url=kwargs.get("base_url"),
154
- default_headers=kwargs.get("default_headers", {}),
155
- timeout=kwargs.get("timeout", 30.0),
156
- follow_redirects=kwargs.get("follow_redirects", True),
157
- verify_ssl=kwargs.get("verify_ssl", True),
158
- api_key=kwargs.get("api_key"),
159
- api_key_header=kwargs.get("api_key_header", "X-API-Key"),
160
- bearer_token=kwargs.get("bearer_token"),
161
- basic_auth=kwargs.get("basic_auth"),
162
- user_agent=kwargs.get("user_agent"),
163
- )
164
-
165
- # Execute the request based on method
166
- if method.upper() == "GET":
167
- return await toolkit.get(
168
- url,
169
- headers=kwargs.get("headers"),
170
- params=kwargs.get("params"),
171
- timeout=kwargs.get("timeout"),
172
- retry_attempts=kwargs.get("retry_attempts", 0),
173
- retry_delay=kwargs.get("retry_delay", 1.0),
174
- )
175
- elif method.upper() == "POST":
176
- return await toolkit.post(
177
- url,
178
- headers=kwargs.get("headers"),
179
- json_data=kwargs.get("json_data"),
180
- form_data=kwargs.get("form_data"),
181
- timeout=kwargs.get("timeout"),
182
- retry_attempts=kwargs.get("retry_attempts", 0),
183
- )
184
- elif method.upper() == "PUT":
185
- return await toolkit.put(
186
- url,
187
- headers=kwargs.get("headers"),
188
- json_data=kwargs.get("json_data"),
189
- form_data=kwargs.get("form_data"),
190
- timeout=kwargs.get("timeout"),
191
- retry_attempts=kwargs.get("retry_attempts", 0),
192
- )
193
- elif method.upper() == "PATCH":
194
- return await toolkit.patch(
195
- url,
196
- headers=kwargs.get("headers"),
197
- json_data=kwargs.get("json_data"),
198
- form_data=kwargs.get("form_data"),
199
- timeout=kwargs.get("timeout"),
200
- retry_attempts=kwargs.get("retry_attempts", 0),
201
- )
202
- elif method.upper() == "DELETE":
203
- return await toolkit.delete(
204
- url,
205
- headers=kwargs.get("headers"),
206
- timeout=kwargs.get("timeout"),
207
- retry_attempts=kwargs.get("retry_attempts", 0),
208
- )
209
- else:
210
- raise ValueError(f"Unsupported HTTP method: {method}")
211
-
212
- elif type == "openapi":
213
- from .openapi.client import OpenAPIClient as OpenApiToolkit
214
-
215
- if len(args) < 2:
216
- raise ValueError(
217
- "OpenAPI requests require openapi_spec and operation_id as positional arguments"
218
- )
219
-
220
- openapi_spec, operation_id = args[0], args[1]
221
-
222
- # Initialize the OpenAPI toolkit
223
- toolkit = OpenApiToolkit(
224
- openapi_spec=openapi_spec,
225
- base_url=kwargs.get("base_url"),
226
- default_headers=kwargs.get("default_headers"),
227
- timeout=kwargs.get("timeout", 30.0),
228
- follow_redirects=kwargs.get("follow_redirects", True),
229
- verify_ssl=kwargs.get("verify_ssl", True),
230
- api_key=kwargs.get("api_key"),
231
- api_key_header=kwargs.get("api_key_header", "X-API-Key"),
232
- bearer_token=kwargs.get("bearer_token"),
233
- basic_auth=kwargs.get("basic_auth"),
234
- user_agent=kwargs.get("user_agent"),
235
- )
236
-
237
- # Execute the OpenAPI operation
238
- return await toolkit.execute_operation(
239
- operation_id=operation_id,
240
- parameters=kwargs.get("parameters"),
241
- request_body=kwargs.get("request_body"),
242
- headers=kwargs.get("headers"),
243
- )
244
-
245
- else:
246
- raise ValueError(
247
- f"Invalid request type: {type}. Must be 'http' or 'openapi'"
248
- )
249
-
250
- return asyncio.run(_run_web_request_async())
251
-
252
-
253
- def run_web_search(
254
- query: str,
255
- *,
256
- max_results: int = 10,
257
- region: str = "wt-wt",
258
- safesearch: Literal["on", "moderate", "off"] = "moderate",
259
- timelimit: Optional[Literal["d", "w", "m", "y"]] = None,
260
- backend: Literal["auto", "html", "lite"] = "auto",
261
- retry_attempts: int = 3,
262
- retry_delay: float = 1.0,
263
- ) -> SearchResults:
264
- """
265
- Search the web using DuckDuckGo search.
266
-
267
- Args:
268
- query: Search query string
269
- max_results: Maximum number of results to return (default: 10)
270
- region: Search region (default: "wt-wt" for worldwide)
271
- safesearch: Safe search setting (default: "moderate")
272
- timelimit: Time limit for results (d=day, w=week, m=month, y=year)
273
- backend: Search backend to use (default: "auto")
274
- retry_attempts: Number of retry attempts for rate limit errors (default: 3)
275
- retry_delay: Initial delay between retries in seconds (default: 1.0)
276
-
277
- Returns:
278
- List of search result dictionaries with 'title', 'href', and 'body' keys
279
-
280
- Raises:
281
- ValueError: If query is empty
282
- Exception: If search fails after all retries
283
- """
284
-
285
- async def _run_web_search_async():
286
- client = _get_search_client()
287
- return await client.web_search(
288
- query=query,
289
- max_results=max_results,
290
- region=region,
291
- safesearch=safesearch,
292
- timelimit=timelimit,
293
- backend=backend,
294
- )
295
-
296
- return asyncio.run(_run_web_search_async())
297
-
298
-
299
- def read_web_page(
300
- url: str,
301
- *,
302
- timeout: float = 30.0,
303
- headers: Optional[Dict[str, str]] = None,
304
- extract_text: bool = True,
305
- extract_links: bool = False,
306
- extract_images: bool = False,
307
- css_selector: Optional[str] = None,
308
- ) -> WebPageResult:
309
- """
310
- Read and parse a single web page using selectolax.
311
-
312
- Args:
313
- url: URL to fetch and parse
314
- timeout: Request timeout in seconds (default: 30.0)
315
- headers: Optional HTTP headers to send
316
- extract_text: Whether to extract text content (default: True)
317
- extract_links: Whether to extract links (default: False)
318
- extract_images: Whether to extract images (default: False)
319
- css_selector: Optional CSS selector to extract specific elements
320
-
321
- Returns:
322
- Dictionary containing parsed content and metadata
323
-
324
- Raises:
325
- httpx.HTTPError: If request fails
326
- Exception: If parsing fails
327
- """
328
-
329
- async def _read_web_page_async():
330
- client = _get_search_client()
331
- return await client.read_web_page(
332
- url=url,
333
- timeout=timeout,
334
- headers=headers,
335
- extract_text=extract_text,
336
- extract_links=extract_links,
337
- extract_images=extract_images,
338
- css_selector=css_selector,
339
- )
340
-
341
- return asyncio.run(_read_web_page_async())
342
-
343
-
344
- def read_web_pages(
345
- urls: List[str],
346
- *,
347
- timeout: float = 30.0,
348
- headers: Optional[Dict[str, str]] = None,
349
- extract_text: bool = True,
350
- extract_links: bool = False,
351
- extract_images: bool = False,
352
- css_selector: Optional[str] = None,
353
- max_concurrent: int = 5,
354
- ) -> WebPageResults:
355
- """
356
- Read and parse multiple web pages concurrently using selectolax.
357
-
358
- Args:
359
- urls: List of URLs to fetch and parse
360
- timeout: Request timeout in seconds (default: 30.0)
361
- headers: Optional HTTP headers to send
362
- extract_text: Whether to extract text content (default: True)
363
- extract_links: Whether to extract links (default: False)
364
- extract_images: Whether to extract images (default: False)
365
- css_selector: Optional CSS selector to extract specific elements
366
- max_concurrent: Maximum number of concurrent requests (default: 5)
367
-
368
- Returns:
369
- List of dictionaries containing parsed content and metadata
370
-
371
- Raises:
372
- Exception: If any critical error occurs
373
- """
374
-
375
- async def _read_web_pages_async():
376
- client = _get_search_client()
377
- return await client.read_web_pages(
378
- urls=urls,
379
- timeout=timeout,
380
- headers=headers,
381
- extract_text=extract_text,
382
- extract_links=extract_links,
383
- extract_images=extract_images,
384
- css_selector=css_selector,
385
- max_concurrent=max_concurrent,
386
- )
387
-
388
- return asyncio.run(_read_web_pages_async())
389
-
390
-
391
- def run_news_search(
392
- query: str,
393
- *,
394
- max_results: int = 10,
395
- region: str = "wt-wt",
396
- safesearch: Literal["on", "moderate", "off"] = "moderate",
397
- timelimit: Optional[Literal["d", "w", "m"]] = None,
398
- ) -> NewsResults:
399
- """
400
- Search for news using DuckDuckGo news search.
401
-
402
- Args:
403
- query: Search query string
404
- max_results: Maximum number of results to return (default: 10)
405
- region: Search region (default: "wt-wt" for worldwide)
406
- safesearch: Safe search setting (default: "moderate")
407
- timelimit: Time limit for results (d=day, w=week, m=month)
408
-
409
- Returns:
410
- List of news result dictionaries with date, title, body, url, image, and source
411
-
412
- Raises:
413
- ValueError: If query is empty
414
- Exception: If search fails
415
- """
416
-
417
- async def _run_news_search_async():
418
- client = _get_search_client()
419
- return await client.search_news(
420
- query=query,
421
- max_results=max_results,
422
- region=region,
423
- safesearch=safesearch,
424
- timelimit=timelimit,
425
- )
426
-
427
- return asyncio.run(_run_news_search_async())
428
-
429
-
430
- def extract_web_page_links(
431
- url: str,
432
- *,
433
- timeout: float = 30.0,
434
- headers: Optional[Dict[str, str]] = None,
435
- css_selector: str = "a[href]",
436
- include_external: bool = True,
437
- include_internal: bool = True,
438
- base_url: Optional[str] = None,
439
- ) -> ExtractedLinks:
440
- """
441
- Extract links from a web page using selectolax.
442
-
443
- Args:
444
- url: URL to fetch and extract links from
445
- timeout: Request timeout in seconds (default: 30.0)
446
- headers: Optional HTTP headers to send
447
- css_selector: CSS selector for links (default: "a[href]")
448
- include_external: Whether to include external links (default: True)
449
- include_internal: Whether to include internal links (default: True)
450
- base_url: Base URL for resolving relative links (uses page URL if not provided)
451
-
452
- Returns:
453
- List of link dictionaries with href, text, title, and type (internal/external)
454
-
455
- Raises:
456
- httpx.HTTPError: If request fails
457
- Exception: If parsing fails
458
- """
459
-
460
- async def _extract_web_page_links_async():
461
- client = _get_search_client()
462
- return await client.extract_page_links(
463
- url=url,
464
- timeout=timeout,
465
- headers=headers,
466
- css_selector=css_selector,
467
- include_external=include_external,
468
- include_internal=include_internal,
469
- base_url=base_url,
470
- )
471
-
472
- return asyncio.run(_extract_web_page_links_async())
@@ -1,135 +0,0 @@
1
- hammad/__init__.py,sha256=PtKUoTlLLfTA8cuhfvvaG1PCz6B4gkyl4d0OgZA0rNY,1705
2
- hammad/_internal.py,sha256=qQGXjzQyyCxzH5kMjCHwVdAojp-2OOVAO2T2QDxOBn8,8957
3
- hammad/_main.py,sha256=2y18WxvGqRtA0C4aaYK9-LhFXwhFvY6832kNmUyebRA,6902
4
- hammad/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- hammad/types.py,sha256=bhQaWC9eY0vS5Ds_bbehf-61uzrUZRMNRg3oE_BsCbY,7444
6
- hammad/cache/__init__.py,sha256=29vI8UkVITtiEe7fTr9UR5Q0lV7tr_SVe7tLlJmm1Ks,954
7
- hammad/cache/base_cache.py,sha256=kYJS2IcQtxhzT7BQBFtOWnhw4VkvAapPhAVkfbW5IeY,6353
8
- hammad/cache/cache.py,sha256=bzDXxjSolrSdIxqES2VMfVZZGTk_8k4x9n0AW4tlifs,4621
9
- hammad/cache/decorators.py,sha256=olYLK5x4JkxHpA8WIiplI45QYmNIzyGjNMrTKNRCSQg,9599
10
- hammad/cache/file_cache.py,sha256=XjLJxM4Ql65OABxz8q1DtA_s8HZQJKywCw6MNVnC6YE,2485
11
- hammad/cache/ttl_cache.py,sha256=-0pJ4lkVgg1OIb98bQFub9n6f4zgWVs-dQfKZe_DmpE,2153
12
- hammad/cli/__init__.py,sha256=mnetA--WekbUSvNUJOO4hQywltvfY25kcD07pe6DAWQ,733
13
- hammad/cli/animations.py,sha256=h68OuJBkDiYTLdB5pLPgQ2gpPT2c3dNulkDv2BtKHFA,19507
14
- hammad/cli/plugins.py,sha256=qWFtCUZMB0Tu6WwbUg9ut1PvCT5eIIUo2S5WFejUm4A,31804
15
- hammad/cli/styles/__init__.py,sha256=Ok7J_uhJgyswNkBWnDw50oTX9Xk1HPksUl3UbmT1qTI,1363
16
- hammad/cli/styles/settings.py,sha256=irChf9RsMij3djx_n9D9duoVIzxLCpd9-BlKl6U_OLk,5532
17
- hammad/cli/styles/types.py,sha256=vNIeQY_23m10K8qVT7Iy-PMwosGL-La-UAZKszHJjEE,7911
18
- hammad/cli/styles/utils.py,sha256=zzi0JdH1X7O8XWRlMVfJP2jB-OWt7zkpm_LeCHoSKVY,28287
19
- hammad/data/__init__.py,sha256=VfrHgmyf4RU1y8U0oA23TcohuF-XUh8742rH3lUnw0g,2278
20
- hammad/data/collections/__init__.py,sha256=_7qoquGARHfx6G_ui9D4czyQAx5RkVHyrdFBhB7UI9U,1156
21
- hammad/data/collections/collection.py,sha256=zDx27gMv-5F-ClTSaI0_1_GZN8K9bzXmvWIvIBqpkH0,12172
22
- hammad/data/collections/indexes/__init__.py,sha256=RmXKWKq2sbtA1swz5vamKKWut-eKfc-Q2tUnij-E-IU,960
23
- hammad/data/collections/indexes/qdrant/__init__.py,sha256=KU89TIJkYmJPnVxWKHfXntkIYwhn86ejXtWG30hCyHg,49
24
- hammad/data/collections/indexes/qdrant/index.py,sha256=UzhW64i5Yq5AXyGZjkW4dljgQxwKUbjF6vhzendbjko,25634
25
- hammad/data/collections/indexes/qdrant/settings.py,sha256=6Q3zT7hDNfKKqC6qI3xLiinm8yTsmyrncIoxLjbPk5o,2445
26
- hammad/data/collections/indexes/qdrant/utils.py,sha256=_-iUn8O2C5Oaf2WlWBYBWZM4F7WM7B1KXh7FKu4Svkk,6326
27
- hammad/data/collections/indexes/tantivy/__init__.py,sha256=iHlb8zNlvoKkQJOZgLONq8knYkoHFRQlS1DYKpcVwvE,46
28
- hammad/data/collections/indexes/tantivy/index.py,sha256=TO5eRJB0ajjeJtDKRs5Q7-0n5vOqlAZgH87h6YIzavw,13628
29
- hammad/data/collections/indexes/tantivy/settings.py,sha256=8K3CmmiU2geVniiUsRo3PXUAhAAhfqYeCSSvTQhpKH4,1254
30
- hammad/data/collections/indexes/tantivy/utils.py,sha256=etY_N3BdiF91r7mvD8SYyQhnADPFLeMKA9d56jmlCYE,5454
31
- hammad/data/configurations/__init__.py,sha256=1vJMpKKItA_aCDtOV7ouNpNAwOXhCJ28H_8dilrAzz0,834
32
- hammad/data/configurations/configuration.py,sha256=ijm2FAyQjZ66Jo2RlT5hjCiAZdC9EnnghmR7Pj5z0Gw,17737
33
- hammad/data/models/__init__.py,sha256=M59vT2Wu1Qw1jK2Qhs5KRgxh8MVrSmTRjGUNlM_Rmkw,1154
34
- hammad/data/models/fields.py,sha256=6H5SbrXhC0KEge5PJNFqN-Ek8RKxt7-eRKC2E7xmoe8,19180
35
- hammad/data/models/model.py,sha256=gBH6fL9TjSYfAyDHuw-VJdTorML62iisokvTlVzOnhY,39128
36
- hammad/data/models/utils.py,sha256=KNtr1PlxBizs14gmZqQeG1A7EQ6JHPRrRN0pTr3ucR8,9964
37
- hammad/data/models/extensions/__init__.py,sha256=dfVDCMBKZYtaMHJRQBShaoMHFcQ6VJcD_5q5Fcc77mQ,128
38
- hammad/data/models/extensions/pydantic/__init__.py,sha256=2ipoelO4knYSug47Vdt0URHtBNCQIFixJ3tTcawaCtE,1205
39
- hammad/data/models/extensions/pydantic/converters.py,sha256=_485-4EUQe7-fxlPG2o1wnaU8SDA79AhxMitiUMoIYY,24545
40
- hammad/data/sql/__init__.py,sha256=o5OygbXCCpWH0A1Sr994e_rdplUxY0Vl3mGIykt1c7k,493
41
- hammad/data/sql/database.py,sha256=t06bNLQ0WPmg8Be_Xf9u8k5zhy70Iw-akC4Ff2o5PrA,18208
42
- hammad/data/sql/types.py,sha256=8xLEEK7u6YBFGfh8MJbJeSVNeGZ1RCxF_QvNTu0rel0,3526
43
- hammad/data/types/__init__.py,sha256=6BB1tu7RHrTLiqUYAxXsSFeejGSBuzOvFaw4I0llGN4,1723
44
- hammad/data/types/file.py,sha256=G40bjC5n6zzbGDLeyCYER3hOg0bbCoZgjSH4TaCwL5A,13092
45
- hammad/data/types/text.py,sha256=x22KAEX18eU0m5DUvY5P9f1kcYYtoUv9tPRlvmTJubA,40863
46
- hammad/data/types/multimodal/__init__.py,sha256=jPqoHTmgBJnc_8jg-QMjAYiOiRys29IcDnJ3FMrCH_0,689
47
- hammad/data/types/multimodal/audio.py,sha256=6T3XJXrAazkAluwohfGff0ENmhRtIMAX0XV22KVGgDU,5380
48
- hammad/data/types/multimodal/image.py,sha256=IDjuCfTpsNqWEaAZ2c6M28gwTpswHy6tGu16F3GE6Rg,4733
49
- hammad/formatting/__init__.py,sha256=HspdG2uFBPcqtUa5lMdqV_9gTon1Emvn61WBUAz4xCI,642
50
- hammad/formatting/json/__init__.py,sha256=V4uODCUQdptfyw_D96R3XDopw1bgNIR2ogiEG-Z-FtQ,525
51
- hammad/formatting/json/converters.py,sha256=CfEKtoTkeQbaGnpHHY3SAFVFjRjeG115X94L8Jq-14I,5597
52
- hammad/formatting/text/__init__.py,sha256=ZAA7D4pwKFjeUxHsnm21QKSTtQ7Fj8ncO__m5Ry_eHY,1506
53
- hammad/formatting/text/converters.py,sha256=g3z-ZGTaKNVbLFFKBSh6qN2Uz0BSkdxCaN3LR9cAyV8,23806
54
- hammad/formatting/text/markdown.py,sha256=D17NOoGkoXUBhoOGKelKHwi72iqsAwPU5HEFjRJtLQI,3407
55
- hammad/formatting/yaml/__init__.py,sha256=4dBeXPi0jx7ELT2_sC2fUYaiY8b8wFiUScLODc9ISEw,462
56
- hammad/formatting/yaml/converters.py,sha256=zvSB8QGb56uvwO0KjXllfTj9g1FmNINOKR06DTjvXw8,153
57
- hammad/genai/__init__.py,sha256=d7E8JzSEk-4j-9eEYdTo-oPIH1_7wCMNteqSa0JfBLY,5271
58
- hammad/genai/a2a/__init__.py,sha256=TXSD1nrihWVZsZLMxcbi4rgcXpmZy6c8cVXDKFVJ4HA,504
59
- hammad/genai/a2a/workers.py,sha256=xJNVDDw-8XxQhwtQXBSLgUJhn-dLfuvvFCz_eTqcbMc,18339
60
- hammad/genai/agents/__init__.py,sha256=_kfDT1rLHNm-eVdr7Lq3IRoHNooQvw3HbaN_71uqKek,1544
61
- hammad/genai/agents/agent.py,sha256=CdYqCApgRSVRtBv2Es8qqTPm10Ss_YBvdUahENBdpOI,84509
62
- hammad/genai/agents/run.py,sha256=ooiyVIOlDmIb0327pIP8j2OrcU198VgSRIOZTEmJr0s,37530
63
- hammad/genai/agents/types/__init__.py,sha256=6X6_P82qe15dyqs-vAcXUk4na4tB-7oMdMf484v87io,1119
64
- hammad/genai/agents/types/agent_context.py,sha256=u4evwx9B-UKEHMtNcsNlN9q8i12bsW9HhtyvmU0NNTw,313
65
- hammad/genai/agents/types/agent_event.py,sha256=zNKXXPKKOsIO9MAhE-YNCOxeNg00O7j1mE0R1pA_Xr8,3925
66
- hammad/genai/agents/types/agent_hooks.py,sha256=wgys4ixiHjX5oux4zVSr9OPXyAZ-iJGk_MhaOKEgMxo,7853
67
- hammad/genai/agents/types/agent_messages.py,sha256=csjEq42bElaTZYZW2dE6nlFZc142-HgT3bB6h1KMg_w,846
68
- hammad/genai/agents/types/agent_response.py,sha256=tQ3oNBZC_9dD7t-7tRuKA2h1a-XE5gGryVF9XcmZ5GA,3863
69
- hammad/genai/agents/types/agent_stream.py,sha256=VIfqZp55wq6jQh_OtPzZjiL_K4cEoVCkeEZS3s_MIXI,11069
70
- hammad/genai/graphs/__init__.py,sha256=bK59ilXuR46DgSjat7kOOr_KujIpJSfbCSgriceRhjw,3112
71
- hammad/genai/graphs/_utils.py,sha256=kLPD9iAWhI7zRDTNLnYGRrD2f2IPre-0GYLMQcq1xzU,8854
72
- hammad/genai/graphs/base.py,sha256=02kLcQRFJxGw-rPlfFBDWW9C9_CAlPYHdlTwu7rg7nA,69633
73
- hammad/genai/graphs/plugins.py,sha256=AK_JSo2eLCD9cdrxZ5OxxZtLVrUDcQ8f_FWBxOQPzyw,10007
74
- hammad/genai/graphs/types.py,sha256=kpQvWpE7cKjK9TzNFa_I-z7LfxWdlCuIA-lfRTk_nFU,20701
75
- hammad/genai/models/__init__.py,sha256=e4TbEsiKIoXENOEsdIdQcWWt0RnFdTEqCz0nICHQHtM,26
76
- hammad/genai/models/model_provider.py,sha256=2RdOeqr7KpjyrMqq4YH4OYy1pk6sjzf2CPu1ZHa1Pdk,75
77
- hammad/genai/models/multimodal.py,sha256=KXUyLXqM1eBgBGZFEbMw3dYbakZFAXoko2xYprronxY,1276
78
- hammad/genai/models/reranking.py,sha256=oR1j7uomtEQCse-1zkteDTdXklEKu40CvFcAMLAV2XM,451
79
- hammad/genai/models/embeddings/__init__.py,sha256=x_lWV2TGjogAsG4Yny73-ECRmZPVMw245qnKOr81R9o,1033
80
- hammad/genai/models/embeddings/model.py,sha256=vh8JPfy8_vBZrS8h3OEyaUYjbbuyBq3x2bUa0hVxkuc,8166
81
- hammad/genai/models/embeddings/run.py,sha256=-0WPCGF2otIfPZzQ2VeocuvKFxSyCz66WsfkhORJAV4,5011
82
- hammad/genai/models/embeddings/types/__init__.py,sha256=j1puexoIpgyYpDkz-1wMy2QjbS5QEZiLlI0BJaus3gY,1068
83
- hammad/genai/models/embeddings/types/embedding_model_name.py,sha256=LA8E6C-_o7cz8KwFPL0vLYt2OxhTtJikMHsQBwNpKpY,2499
84
- hammad/genai/models/embeddings/types/embedding_model_response.py,sha256=V2H_VTl1MSBTa6Yubwjb43ZaoIrHORRdy9nYG2kZGyQ,2038
85
- hammad/genai/models/embeddings/types/embedding_model_run_params.py,sha256=ZGhCXrEEzMF5y-V8neF2a73Gh1emzrYUHVxWkybg5uE,1570
86
- hammad/genai/models/embeddings/types/embedding_model_settings.py,sha256=KEwvoElXhPMSVCKW2uKwqqT2lSAAthQXmGXaV7Qk5cU,1268
87
- hammad/genai/models/language/__init__.py,sha256=1PovP7w1eIytFPCRB7NaTLERT8-pl-5axg1pOEL5tMo,2006
88
- hammad/genai/models/language/model.py,sha256=se0Lflc1d9Vw-T0SlWLxIKDqNv01QkSfOR3VETNNRFw,42027
89
- hammad/genai/models/language/run.py,sha256=ulIjn97X74u1Ct575kGV2OZzexpOmjlKkbx7T9IeTOk,32495
90
- hammad/genai/models/language/types/__init__.py,sha256=cdLnoCiVmK6T86-5CZrUJg2rxXKoSk-svyCSviUdgao,1534
91
- hammad/genai/models/language/types/language_model_instructor_mode.py,sha256=7ywBaY24m-UKRynnX6XsfVf_hsQrM2xHAHugTgV0Vho,1008
92
- hammad/genai/models/language/types/language_model_messages.py,sha256=e-HZ_YKXq17gwmMlpOmYUYUpBFm7Mu3aRawtjSslWXs,504
93
- hammad/genai/models/language/types/language_model_name.py,sha256=2V70cZ47L9yIcug6LCcMHcvEJaee7gRN6DUPhLUBlsE,8056
94
- hammad/genai/models/language/types/language_model_request.py,sha256=ZtzhCx8o6zkEBS3uTFXFLf_poDD7MnIp1y7MbKckOmI,3911
95
- hammad/genai/models/language/types/language_model_response.py,sha256=CE-PWxmAB9RDzHqGjEUvYaVnbDnKYz4eEMW4Fz65F4s,7640
96
- hammad/genai/models/language/types/language_model_response_chunk.py,sha256=wIzGZw732KsI-a1-uASjATA6qvBuq-7rupWoFjsAgQo,1796
97
- hammad/genai/models/language/types/language_model_settings.py,sha256=C0EvLXZoOLgPZ4bX7mVFs_CWP-jam27qkseJRGsBAfQ,2794
98
- hammad/genai/models/language/types/language_model_stream.py,sha256=XgJ83JSbtTdf7jeLQMrDhMfI7zp0pRrdY7JWYbZV_h0,22043
99
- hammad/genai/models/language/utils/__init__.py,sha256=eoq08gYz2dzgRAge38c-HsadHdv9sNdTxsZ3Af8YfXQ,732
100
- hammad/genai/models/language/utils/requests.py,sha256=_FAksgbNyD7dQAEB5a6D50DoWG0ENg71HX9DBeIwmJg,13344
101
- hammad/genai/models/language/utils/structured_outputs.py,sha256=Va7pie9AOvLbJOaDj4VIKG94EO8-47d-aL4CJTM9FAg,3923
102
- hammad/genai/types/__init__.py,sha256=W0fzUnKhDynt4TkwZX8LCRYfgRTAVomSuWqPmhGu8sg,25
103
- hammad/genai/types/base.py,sha256=VnGL45w8oR-6rWl2GfGgWX4SjMC-23RGWuN0_H2bH_I,5437
104
- hammad/genai/types/history.py,sha256=zsfBvGMoFTHZCT7Igae-5_jszu409dVJ_wEmNw7alCk,10208
105
- hammad/genai/types/tools.py,sha256=Te4WU-MOTCoFvpMw0ddHB9NjlXvpeAYZ99Cd6pcchi4,16563
106
- hammad/logging/__init__.py,sha256=VtskZx0bKEAJ9FHTMflhB1CzeFUxLpDT5HPgcecAXUo,701
107
- hammad/logging/decorators.py,sha256=VbI1x3P4ft0-0BGjXq7nQgiuNqcXAA51CGmoSn47iSw,30122
108
- hammad/logging/logger.py,sha256=5i89ILoRDn-ThTj7DRvN5sLgWN9IXdX_4-pqCoRAsIg,33612
109
- hammad/mcp/__init__.py,sha256=qdnxy_G75NAuZvaxUNXNFd_n_Qxs1pItkcXuCk7k120,1195
110
- hammad/mcp/client/__init__.py,sha256=_SfnKvd5Za-FfFoE5GcXkBY9WcwprZND9SyZ6RY--no,795
111
- hammad/mcp/client/client.py,sha256=auKCiIJfcZkuVFRapTpqYP4PxoyIfx40gVbMYLBdTzI,20565
112
- hammad/mcp/client/client_service.py,sha256=quJp02n9tp70l0SJd9jkIuRkdSPeWegzusk-eiV41b0,14990
113
- hammad/mcp/client/settings.py,sha256=7bLpJYyiUT_H7zp3SDwLyAt9fmiQwL3L89qVTAZYpi8,5913
114
- hammad/mcp/servers/__init__.py,sha256=QOQGd8NnTyt3bUJ8Bbs_izDiSdmB6ZvCc3HQTQfgmTc,585
115
- hammad/mcp/servers/launcher.py,sha256=jQDQOqz-cKK2PSEOxoPBCVsBeTABNNjcwTXSWE4-LQA,41606
116
- hammad/runtime/__init__.py,sha256=I7MuJV-1dvLSUaAiK6TCAo1rm0vQvR617bLd1Q9c99E,662
117
- hammad/runtime/decorators.py,sha256=5T56nAwwfH0ZKfnLlDGkDNFYaGBBSrH1i4_yX3Dt5GA,4524
118
- hammad/runtime/run.py,sha256=VFzoXieSaEg1KlDTTepDIsSyISkWXuxHpNs_AgHX5nM,10802
119
- hammad/service/__init__.py,sha256=B7wnQkT8e2kFwaigpAcXI_PJ8jlQzxcgTtDDH1p4KSU,1222
120
- hammad/service/create.py,sha256=Z0Vy-nQUKk_zqLuVOKJye6gLdVSU5HNlPgm4irvRgu8,16224
121
- hammad/service/decorators.py,sha256=s7MB1fBgf1TwDYH80tmpJe12ixtaElkmFlTvtMTMQdQ,9918
122
- hammad/typing/__init__.py,sha256=P9XCKrn-kxyfSLHpY9vraOLV9vyoBz_DzEm6eIH5xWY,11712
123
- hammad/web/__init__.py,sha256=8wQPjlpW6t1bbCKUkZMIEJtVbL9Aj6TnTWcmNRdjBRY,1077
124
- hammad/web/models.py,sha256=YLQ5oKLWmsyVWb1Gtd0x38YMOZginQd4oCgIXCVoRh4,6407
125
- hammad/web/utils.py,sha256=o-ys9anLDtOTkqvk0Z8gxc-V0lhp0LB03DHFpoj6Ous,15863
126
- hammad/web/http/__init__.py,sha256=jn9Rn7Yg2cypD7duTTNFuW2wQZx9B63Bde4RJJeDYU0,22
127
- hammad/web/http/client.py,sha256=LWBSVjvHEuHmOOWq5EUT4zN5w6zSG45bOTk6FiSPHuA,33082
128
- hammad/web/openapi/__init__.py,sha256=JhJQ6_laBmB2djIYFc0vgGha2GsdUe4FP1LDdZCQ5J4,25
129
- hammad/web/openapi/client.py,sha256=1pXz7KAO_0pN4kQZoWKWskXDYGiJ535TsPO1GGCiC0E,26816
130
- hammad/web/search/__init__.py,sha256=e9A6znPIiZCz-4secyHbUs0uUGf5yAqW6wGacgx961U,24
131
- hammad/web/search/client.py,sha256=cBp8aNWFzVKoYimjip1IYJ09Z3lDgQ0EAzDST16e8Pk,36676
132
- hammad_python-0.0.30.dist-info/METADATA,sha256=IvVMqWWbCsvUK8z_VWipb7CVEOdl5jWuDoQwpOFOy1c,6425
133
- hammad_python-0.0.30.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
134
- hammad_python-0.0.30.dist-info/licenses/LICENSE,sha256=h74yFUWjbBaodcWG5wNmm30npjl8obVcxD-1nQfUp2I,1069
135
- hammad_python-0.0.30.dist-info/RECORD,,
{hammad → ham}/py.typed RENAMED
File without changes