hammad-python 0.0.18__py3-none-any.whl → 0.0.20__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 +7 -137
- hammad/_internal.py +1 -0
- hammad/cli/_runner.py +8 -8
- hammad/cli/plugins.py +55 -26
- hammad/cli/styles/utils.py +16 -8
- hammad/data/__init__.py +1 -5
- hammad/data/collections/__init__.py +2 -3
- hammad/data/collections/collection.py +41 -22
- hammad/data/collections/indexes/__init__.py +1 -1
- hammad/data/collections/indexes/qdrant/__init__.py +1 -1
- hammad/data/collections/indexes/qdrant/index.py +106 -118
- hammad/data/collections/indexes/qdrant/settings.py +14 -14
- hammad/data/collections/indexes/qdrant/utils.py +28 -38
- hammad/data/collections/indexes/tantivy/__init__.py +1 -1
- hammad/data/collections/indexes/tantivy/index.py +57 -59
- hammad/data/collections/indexes/tantivy/settings.py +8 -19
- hammad/data/collections/indexes/tantivy/utils.py +28 -52
- hammad/data/models/__init__.py +2 -7
- hammad/data/sql/__init__.py +1 -1
- hammad/data/sql/database.py +71 -73
- hammad/data/sql/types.py +37 -51
- hammad/formatting/__init__.py +2 -1
- hammad/formatting/json/converters.py +2 -2
- hammad/genai/__init__.py +96 -36
- hammad/genai/agents/__init__.py +47 -1
- hammad/genai/agents/agent.py +1022 -0
- hammad/genai/agents/run.py +615 -0
- hammad/genai/agents/types/__init__.py +29 -22
- hammad/genai/agents/types/agent_context.py +13 -0
- hammad/genai/agents/types/agent_event.py +128 -0
- hammad/genai/agents/types/agent_hooks.py +220 -0
- hammad/genai/agents/types/agent_messages.py +31 -0
- hammad/genai/agents/types/agent_response.py +90 -0
- hammad/genai/agents/types/agent_stream.py +242 -0
- hammad/genai/models/__init__.py +1 -0
- hammad/genai/models/embeddings/__init__.py +39 -0
- hammad/genai/{embedding_models/embedding_model.py → models/embeddings/model.py} +45 -41
- hammad/genai/{embedding_models → models/embeddings}/run.py +10 -8
- hammad/genai/models/embeddings/types/__init__.py +37 -0
- hammad/genai/{embedding_models → models/embeddings/types}/embedding_model_name.py +2 -4
- hammad/genai/{embedding_models → models/embeddings/types}/embedding_model_response.py +11 -4
- hammad/genai/{embedding_models/embedding_model_request.py → models/embeddings/types/embedding_model_run_params.py} +4 -3
- hammad/genai/models/embeddings/types/embedding_model_settings.py +47 -0
- hammad/genai/models/language/__init__.py +48 -0
- hammad/genai/{language_models/language_model.py → models/language/model.py} +481 -204
- hammad/genai/{language_models → models/language}/run.py +80 -57
- hammad/genai/models/language/types/__init__.py +40 -0
- hammad/genai/models/language/types/language_model_instructor_mode.py +47 -0
- hammad/genai/models/language/types/language_model_messages.py +28 -0
- hammad/genai/{language_models/_types.py → models/language/types/language_model_name.py} +3 -40
- hammad/genai/{language_models → models/language/types}/language_model_request.py +17 -25
- hammad/genai/{language_models → models/language/types}/language_model_response.py +61 -68
- hammad/genai/{language_models → models/language/types}/language_model_response_chunk.py +8 -5
- hammad/genai/models/language/types/language_model_settings.py +89 -0
- hammad/genai/{language_models/_streaming.py → models/language/types/language_model_stream.py} +221 -243
- hammad/genai/{language_models/_utils → models/language/utils}/__init__.py +8 -11
- hammad/genai/models/language/utils/requests.py +421 -0
- hammad/genai/{language_models/_utils/_structured_outputs.py → models/language/utils/structured_outputs.py} +31 -20
- hammad/genai/models/model_provider.py +4 -0
- hammad/genai/{multimodal_models.py → models/multimodal.py} +4 -5
- hammad/genai/models/reranking.py +26 -0
- hammad/genai/types/__init__.py +1 -0
- hammad/genai/types/base.py +215 -0
- hammad/genai/{agents/types → types}/history.py +101 -88
- hammad/genai/{agents/types/tool.py → types/tools.py} +156 -141
- hammad/logging/logger.py +2 -1
- hammad/mcp/client/__init__.py +2 -3
- hammad/mcp/client/client.py +10 -10
- hammad/mcp/servers/__init__.py +2 -1
- hammad/service/decorators.py +1 -3
- hammad/web/models.py +1 -3
- hammad/web/search/client.py +10 -22
- {hammad_python-0.0.18.dist-info → hammad_python-0.0.20.dist-info}/METADATA +10 -2
- hammad_python-0.0.20.dist-info/RECORD +127 -0
- hammad/genai/embedding_models/__init__.py +0 -41
- hammad/genai/language_models/__init__.py +0 -35
- hammad/genai/language_models/_utils/_completions.py +0 -131
- hammad/genai/language_models/_utils/_messages.py +0 -89
- hammad/genai/language_models/_utils/_requests.py +0 -202
- hammad/genai/rerank_models.py +0 -26
- hammad_python-0.0.18.dist-info/RECORD +0 -111
- {hammad_python-0.0.18.dist-info → hammad_python-0.0.20.dist-info}/WHEEL +0 -0
- {hammad_python-0.0.18.dist-info → hammad_python-0.0.20.dist-info}/licenses/LICENSE +0 -0
hammad/data/sql/types.py
CHANGED
@@ -17,11 +17,11 @@ import uuid
|
|
17
17
|
|
18
18
|
__all__ = (
|
19
19
|
"DatabaseItemType",
|
20
|
-
"DatabaseItemFilters",
|
20
|
+
"DatabaseItemFilters",
|
21
21
|
"DatabaseItem",
|
22
22
|
"QueryOperator",
|
23
23
|
"QueryCondition",
|
24
|
-
"QueryFilter"
|
24
|
+
"QueryFilter",
|
25
25
|
)
|
26
26
|
|
27
27
|
|
@@ -35,21 +35,21 @@ DatabaseItemFilters: TypeAlias = Dict[str, object]
|
|
35
35
|
|
36
36
|
|
37
37
|
QueryOperator = Literal[
|
38
|
-
"eq",
|
39
|
-
"ne",
|
40
|
-
"gt",
|
41
|
-
"gte",
|
42
|
-
"lt",
|
43
|
-
"lte",
|
44
|
-
"in",
|
38
|
+
"eq", # equal
|
39
|
+
"ne", # not equal
|
40
|
+
"gt", # greater than
|
41
|
+
"gte", # greater than or equal
|
42
|
+
"lt", # less than
|
43
|
+
"lte", # less than or equal
|
44
|
+
"in", # in list
|
45
45
|
"not_in", # not in list
|
46
|
-
"like",
|
47
|
-
"ilike",
|
48
|
-
"is_null",
|
49
|
-
"is_not_null",
|
50
|
-
"contains",
|
51
|
-
"startswith",
|
52
|
-
"endswith",
|
46
|
+
"like", # SQL LIKE
|
47
|
+
"ilike", # case insensitive LIKE
|
48
|
+
"is_null", # IS NULL
|
49
|
+
"is_not_null", # IS NOT NULL
|
50
|
+
"contains", # for JSON contains
|
51
|
+
"startswith", # string starts with
|
52
|
+
"endswith", # string ends with
|
53
53
|
]
|
54
54
|
"""Supported query operators for database queries."""
|
55
55
|
|
@@ -57,24 +57,24 @@ QueryOperator = Literal[
|
|
57
57
|
@dataclass
|
58
58
|
class QueryCondition:
|
59
59
|
"""Represents a single query condition for database filtering."""
|
60
|
-
|
60
|
+
|
61
61
|
field: str
|
62
62
|
"""The field name to filter on."""
|
63
|
-
|
63
|
+
|
64
64
|
operator: QueryOperator
|
65
65
|
"""The operator to use for comparison."""
|
66
|
-
|
66
|
+
|
67
67
|
value: Any = None
|
68
68
|
"""The value to compare against (not needed for is_null/is_not_null)."""
|
69
69
|
|
70
70
|
|
71
|
-
@dataclass
|
71
|
+
@dataclass
|
72
72
|
class QueryFilter:
|
73
73
|
"""Represents a collection of query conditions with logical operators."""
|
74
|
-
|
74
|
+
|
75
75
|
conditions: list[QueryCondition] = field(default_factory=list)
|
76
76
|
"""List of individual query conditions."""
|
77
|
-
|
77
|
+
|
78
78
|
logic: Literal["and", "or"] = "and"
|
79
79
|
"""Logical operator to combine conditions."""
|
80
80
|
|
@@ -83,52 +83,37 @@ class QueryFilter:
|
|
83
83
|
class DatabaseItem(Generic[DatabaseItemType]):
|
84
84
|
"""Base class for all items that can be stored within a database."""
|
85
85
|
|
86
|
-
id: str = field(
|
87
|
-
default_factory=lambda: str(uuid.uuid4())
|
88
|
-
)
|
86
|
+
id: str = field(default_factory=lambda: str(uuid.uuid4()))
|
89
87
|
"""The unique identifier for this item."""
|
90
88
|
|
91
|
-
item: DatabaseItemType = field(
|
92
|
-
default_factory=lambda: None
|
93
|
-
)
|
89
|
+
item: DatabaseItemType = field(default_factory=lambda: None)
|
94
90
|
"""The item that is stored within this database item."""
|
95
91
|
|
96
|
-
created_at: datetime = field(
|
97
|
-
default_factory=lambda: datetime.now(timezone.utc)
|
98
|
-
)
|
92
|
+
created_at: datetime = field(default_factory=lambda: datetime.now(timezone.utc))
|
99
93
|
"""The timestamp when this item was created."""
|
100
94
|
|
101
|
-
updated_at: datetime = field(
|
102
|
-
default_factory=lambda: datetime.now(timezone.utc)
|
103
|
-
)
|
95
|
+
updated_at: datetime = field(default_factory=lambda: datetime.now(timezone.utc))
|
104
96
|
"""The timestamp when this item was last updated."""
|
105
97
|
|
106
|
-
ttl: Optional[int] = field(
|
107
|
-
default=None
|
108
|
-
)
|
98
|
+
ttl: Optional[int] = field(default=None)
|
109
99
|
"""The time to live for this item in seconds."""
|
110
100
|
|
111
|
-
filters: DatabaseItemFilters = field(
|
112
|
-
default_factory=dict
|
113
|
-
)
|
101
|
+
filters: DatabaseItemFilters = field(default_factory=dict)
|
114
102
|
"""The filters that are associated with this item."""
|
115
|
-
|
116
|
-
table_name: str = field(
|
117
|
-
default="default"
|
118
|
-
)
|
103
|
+
|
104
|
+
table_name: str = field(default="default")
|
119
105
|
"""The table/collection name where this item is stored."""
|
120
|
-
|
121
|
-
score: Optional[float] = field(
|
122
|
-
default=None
|
123
|
-
)
|
106
|
+
|
107
|
+
score: Optional[float] = field(default=None)
|
124
108
|
"""The similarity score for this item (used in vector search results)."""
|
125
109
|
|
126
110
|
def is_expired(self) -> bool:
|
127
111
|
"""Check if this item has expired based on its TTL."""
|
128
112
|
if self.ttl is None:
|
129
113
|
return False
|
130
|
-
|
114
|
+
|
131
115
|
from datetime import timedelta
|
116
|
+
|
132
117
|
expires_at = self.created_at + timedelta(seconds=self.ttl)
|
133
118
|
return datetime.now(timezone.utc) >= expires_at
|
134
119
|
|
@@ -136,6 +121,7 @@ class DatabaseItem(Generic[DatabaseItemType]):
|
|
136
121
|
"""Calculate when this item will expire."""
|
137
122
|
if self.ttl is None:
|
138
123
|
return None
|
139
|
-
|
124
|
+
|
140
125
|
from datetime import timedelta
|
141
|
-
|
126
|
+
|
127
|
+
return self.created_at + timedelta(seconds=self.ttl)
|
hammad/formatting/__init__.py
CHANGED
hammad/genai/__init__.py
CHANGED
@@ -3,76 +3,136 @@
|
|
3
3
|
from typing import TYPE_CHECKING
|
4
4
|
from .._internal import create_getattr_importer
|
5
5
|
|
6
|
+
|
6
7
|
if TYPE_CHECKING:
|
7
|
-
from .
|
8
|
+
from .agents import (
|
9
|
+
Agent,
|
10
|
+
AgentEvent,
|
11
|
+
AgentResponse,
|
12
|
+
AgentStream,
|
13
|
+
AgentContext,
|
14
|
+
AgentMessages,
|
15
|
+
AgentResponseChunk,
|
16
|
+
)
|
17
|
+
from .agents.run import (
|
18
|
+
run_agent,
|
19
|
+
run_agent_iter,
|
20
|
+
async_run_agent,
|
21
|
+
async_run_agent_iter,
|
22
|
+
)
|
23
|
+
from .models.embeddings import (
|
24
|
+
Embedding,
|
8
25
|
EmbeddingModel,
|
9
|
-
EmbeddingModelRequest,
|
10
26
|
EmbeddingModelResponse,
|
27
|
+
EmbeddingModelSettings,
|
11
28
|
run_embedding_model,
|
12
|
-
async_run_embedding_model
|
29
|
+
async_run_embedding_model,
|
13
30
|
)
|
14
|
-
from .
|
31
|
+
from .models.language import (
|
15
32
|
LanguageModel,
|
33
|
+
LanguageModelInstructorMode,
|
34
|
+
LanguageModelMessages,
|
35
|
+
LanguageModelName,
|
16
36
|
LanguageModelRequest,
|
17
37
|
LanguageModelResponse,
|
38
|
+
LanguageModelResponseChunk,
|
39
|
+
LanguageModelSettings,
|
40
|
+
LanguageModelStream,
|
18
41
|
run_language_model,
|
19
42
|
async_run_language_model,
|
20
43
|
)
|
21
|
-
from .
|
22
|
-
|
23
|
-
async_run_rerank_model,
|
24
|
-
)
|
25
|
-
from .multimodal_models import (
|
26
|
-
run_image_generation_model,
|
27
|
-
async_run_image_generation_model,
|
44
|
+
from .models.reranking import run_reranking_model, async_run_reranking_model
|
45
|
+
from .models.multimodal import (
|
28
46
|
run_image_edit_model,
|
29
|
-
|
47
|
+
run_image_generation_model,
|
30
48
|
run_image_variation_model,
|
31
|
-
async_run_image_variation_model,
|
32
|
-
|
33
|
-
run_tts_model,
|
34
|
-
async_run_tts_model,
|
35
49
|
run_transcription_model,
|
50
|
+
run_tts_model,
|
51
|
+
async_run_image_edit_model,
|
52
|
+
async_run_image_generation_model,
|
53
|
+
async_run_image_variation_model,
|
36
54
|
async_run_transcription_model,
|
55
|
+
async_run_tts_model,
|
56
|
+
)
|
57
|
+
from .types.base import (
|
58
|
+
BaseGenAIModel,
|
59
|
+
BaseGenAIModelEvent,
|
60
|
+
BaseGenAIModelResponse,
|
61
|
+
BaseGenAIModelSettings,
|
62
|
+
BaseGenAIModelStream,
|
63
|
+
)
|
64
|
+
from .types.history import History
|
65
|
+
from .types.tools import (
|
66
|
+
Tool,
|
67
|
+
define_tool,
|
68
|
+
execute_tools_from_language_model_response,
|
37
69
|
)
|
38
70
|
|
39
71
|
|
40
|
-
__all__ =
|
41
|
-
# hammad.genai.
|
72
|
+
__all__ = [
|
73
|
+
# hammad.genai.agents.agent
|
74
|
+
"Agent",
|
75
|
+
"AgentEvent",
|
76
|
+
"AgentResponse",
|
77
|
+
"AgentStream",
|
78
|
+
"AgentContext",
|
79
|
+
"AgentMessages",
|
80
|
+
"AgentResponseChunk",
|
81
|
+
# hammad.genai.agents.run
|
82
|
+
"run_agent",
|
83
|
+
"run_agent_iter",
|
84
|
+
"async_run_agent",
|
85
|
+
"async_run_agent_iter",
|
86
|
+
# hammad.genai.models.embeddings
|
87
|
+
"Embedding",
|
42
88
|
"EmbeddingModel",
|
43
|
-
"EmbeddingModelRequest",
|
44
89
|
"EmbeddingModelResponse",
|
90
|
+
"EmbeddingModelSettings",
|
45
91
|
"run_embedding_model",
|
46
92
|
"async_run_embedding_model",
|
47
|
-
|
48
|
-
# hammad.genai.language_models
|
93
|
+
# hammad.genai.models.language
|
49
94
|
"LanguageModel",
|
95
|
+
"LanguageModelInstructorMode",
|
96
|
+
"LanguageModelMessages",
|
97
|
+
"LanguageModelName",
|
50
98
|
"LanguageModelRequest",
|
51
99
|
"LanguageModelResponse",
|
100
|
+
"LanguageModelResponseChunk",
|
101
|
+
"LanguageModelSettings",
|
102
|
+
"LanguageModelStream",
|
52
103
|
"run_language_model",
|
53
104
|
"async_run_language_model",
|
54
|
-
|
55
|
-
|
56
|
-
"
|
57
|
-
|
58
|
-
|
59
|
-
# hammad.genai.multimodal_models
|
60
|
-
"run_image_generation_model",
|
61
|
-
"async_run_image_generation_model",
|
105
|
+
# hammad.genai.models.reranking
|
106
|
+
"run_reranking_model",
|
107
|
+
"async_run_reranking_model",
|
108
|
+
# hammad.genai.models.multimodal
|
62
109
|
"run_image_edit_model",
|
63
|
-
"
|
110
|
+
"run_image_generation_model",
|
64
111
|
"run_image_variation_model",
|
65
|
-
"async_run_image_variation_model",
|
66
|
-
"run_tts_model",
|
67
|
-
"async_run_tts_model",
|
68
112
|
"run_transcription_model",
|
113
|
+
"run_tts_model",
|
114
|
+
"async_run_image_edit_model",
|
115
|
+
"async_run_image_generation_model",
|
116
|
+
"async_run_image_variation_model",
|
69
117
|
"async_run_transcription_model",
|
70
|
-
|
118
|
+
"async_run_tts_model",
|
119
|
+
# hammad.genai.types.base
|
120
|
+
"BaseGenAIModel",
|
121
|
+
"BaseGenAIModelEvent",
|
122
|
+
"BaseGenAIModelResponse",
|
123
|
+
"BaseGenAIModelSettings",
|
124
|
+
"BaseGenAIModelStream",
|
125
|
+
# hammad.genai.types.history
|
126
|
+
"History",
|
127
|
+
# hammad.genai.types.tools
|
128
|
+
"Tool",
|
129
|
+
"define_tool",
|
130
|
+
"execute_tools_from_language_model_response",
|
131
|
+
]
|
71
132
|
|
72
133
|
|
73
134
|
__getattr__ = create_getattr_importer(__all__)
|
74
135
|
|
75
136
|
|
76
137
|
def __dir__() -> list[str]:
|
77
|
-
|
78
|
-
return list(__all__)
|
138
|
+
return __all__
|
hammad/genai/agents/__init__.py
CHANGED
@@ -1 +1,47 @@
|
|
1
|
-
"""hammad.genai.agents"""
|
1
|
+
"""hammad.genai.agents"""
|
2
|
+
|
3
|
+
from typing import TYPE_CHECKING
|
4
|
+
from ..._internal import create_getattr_importer
|
5
|
+
|
6
|
+
|
7
|
+
if TYPE_CHECKING:
|
8
|
+
from .agent import Agent
|
9
|
+
|
10
|
+
# Types
|
11
|
+
from .types.agent_context import AgentContext
|
12
|
+
from .types.agent_event import AgentEvent
|
13
|
+
from .types.agent_hooks import HookManager, HookDecorator
|
14
|
+
from .types.agent_messages import AgentMessages
|
15
|
+
from .types.agent_response import (
|
16
|
+
AgentResponse,
|
17
|
+
_create_agent_response_from_language_model_response,
|
18
|
+
)
|
19
|
+
from .types.agent_stream import AgentStream, AgentResponseChunk
|
20
|
+
|
21
|
+
|
22
|
+
__all__ = [
|
23
|
+
# hammad.genai.agents.agent
|
24
|
+
"Agent",
|
25
|
+
# hammad.genai.agents.types.agent_context
|
26
|
+
"AgentContext",
|
27
|
+
# hammad.genai.agents.types.agent_event
|
28
|
+
"AgentEvent",
|
29
|
+
# hammad.genai.agents.types.agent_hooks
|
30
|
+
"HookManager",
|
31
|
+
"HookDecorator",
|
32
|
+
# hammad.genai.agents.types.agent_messages
|
33
|
+
"AgentMessages",
|
34
|
+
# hammad.genai.agents.types.agent_response
|
35
|
+
"AgentResponse",
|
36
|
+
"_create_agent_response_from_language_model_response",
|
37
|
+
# hammad.genai.agents.types.agent_stream
|
38
|
+
"AgentStream",
|
39
|
+
"AgentResponseChunk",
|
40
|
+
]
|
41
|
+
|
42
|
+
|
43
|
+
__getattr__ = create_getattr_importer(__all__)
|
44
|
+
|
45
|
+
|
46
|
+
def __dir__() -> list[str]:
|
47
|
+
return __all__
|