mirascope 1.23.4__py3-none-any.whl → 1.24.1__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.
- mirascope/__init__.py +2 -0
- mirascope/core/__init__.py +2 -0
- mirascope/core/azure/call_response_chunk.py +5 -5
- mirascope/core/base/__init__.py +2 -0
- mirascope/core/base/_utils/_convert_messages_to_message_params.py +9 -2
- mirascope/core/base/call_response.py +1 -3
- mirascope/core/base/message_param.py +13 -0
- mirascope/core/base/messages.py +5 -0
- mirascope/core/base/tool.py +9 -0
- mirascope/core/bedrock/_utils/_message_param_converter.py +10 -9
- mirascope/core/bedrock/call_response.py +0 -1
- mirascope/core/bedrock/tool.py +4 -0
- mirascope/core/google/_utils/_convert_message_params.py +76 -3
- mirascope/core/google/_utils/_message_param_converter.py +42 -4
- mirascope/core/google/_utils/_validate_media_type.py +24 -0
- mirascope/llm/call_response.py +1 -10
- {mirascope-1.23.4.dist-info → mirascope-1.24.1.dist-info}/METADATA +3 -3
- {mirascope-1.23.4.dist-info → mirascope-1.24.1.dist-info}/RECORD +20 -20
- {mirascope-1.23.4.dist-info → mirascope-1.24.1.dist-info}/WHEEL +0 -0
- {mirascope-1.23.4.dist-info → mirascope-1.24.1.dist-info}/licenses/LICENSE +0 -0
mirascope/__init__.py
CHANGED
|
@@ -15,6 +15,7 @@ from .core import (
|
|
|
15
15
|
BaseToolKit,
|
|
16
16
|
CacheControlPart,
|
|
17
17
|
DocumentPart,
|
|
18
|
+
DocumentURLPart,
|
|
18
19
|
ImagePart,
|
|
19
20
|
ImageURLPart,
|
|
20
21
|
LocalProvider,
|
|
@@ -43,6 +44,7 @@ __all__ = [
|
|
|
43
44
|
"BaseToolKit",
|
|
44
45
|
"CacheControlPart",
|
|
45
46
|
"DocumentPart",
|
|
47
|
+
"DocumentURLPart",
|
|
46
48
|
"ImagePart",
|
|
47
49
|
"ImageURLPart",
|
|
48
50
|
"LocalProvider",
|
mirascope/core/__init__.py
CHANGED
|
@@ -16,6 +16,7 @@ from .base import (
|
|
|
16
16
|
CacheControlPart,
|
|
17
17
|
CostMetadata,
|
|
18
18
|
DocumentPart,
|
|
19
|
+
DocumentURLPart,
|
|
19
20
|
FromCallArgs,
|
|
20
21
|
ImagePart,
|
|
21
22
|
ImageURLPart,
|
|
@@ -77,6 +78,7 @@ __all__ = [
|
|
|
77
78
|
"CacheControlPart",
|
|
78
79
|
"CostMetadata",
|
|
79
80
|
"DocumentPart",
|
|
81
|
+
"DocumentURLPart",
|
|
80
82
|
"FromCallArgs",
|
|
81
83
|
"ImagePart",
|
|
82
84
|
"ImageURLPart",
|
|
@@ -75,14 +75,14 @@ class AzureCallResponseChunk(
|
|
|
75
75
|
return self.chunk.id
|
|
76
76
|
|
|
77
77
|
@property
|
|
78
|
-
def usage(self) -> CompletionsUsage:
|
|
78
|
+
def usage(self) -> CompletionsUsage | None:
|
|
79
79
|
"""Returns the usage of the chat completion."""
|
|
80
80
|
return self.chunk.usage
|
|
81
81
|
|
|
82
82
|
@property
|
|
83
|
-
def input_tokens(self) -> int:
|
|
83
|
+
def input_tokens(self) -> int | None:
|
|
84
84
|
"""Returns the number of input tokens."""
|
|
85
|
-
return self.usage.prompt_tokens
|
|
85
|
+
return self.usage.prompt_tokens if self.usage else None
|
|
86
86
|
|
|
87
87
|
@property
|
|
88
88
|
def cached_tokens(self) -> int:
|
|
@@ -90,9 +90,9 @@ class AzureCallResponseChunk(
|
|
|
90
90
|
return 0
|
|
91
91
|
|
|
92
92
|
@property
|
|
93
|
-
def output_tokens(self) -> int:
|
|
93
|
+
def output_tokens(self) -> int | None:
|
|
94
94
|
"""Returns the number of output tokens."""
|
|
95
|
-
return self.usage.completion_tokens
|
|
95
|
+
return self.usage.completion_tokens if self.usage else None
|
|
96
96
|
|
|
97
97
|
@property
|
|
98
98
|
def cost_metadata(self) -> CostMetadata:
|
mirascope/core/base/__init__.py
CHANGED
|
@@ -16,6 +16,7 @@ from .message_param import (
|
|
|
16
16
|
BaseMessageParam,
|
|
17
17
|
CacheControlPart,
|
|
18
18
|
DocumentPart,
|
|
19
|
+
DocumentURLPart,
|
|
19
20
|
ImagePart,
|
|
20
21
|
ImageURLPart,
|
|
21
22
|
TextPart,
|
|
@@ -59,6 +60,7 @@ __all__ = [
|
|
|
59
60
|
"CommonCallParams",
|
|
60
61
|
"CostMetadata",
|
|
61
62
|
"DocumentPart",
|
|
63
|
+
"DocumentURLPart",
|
|
62
64
|
"FromCallArgs",
|
|
63
65
|
"GenerateJsonSchemaNoTitles",
|
|
64
66
|
"ImagePart",
|
|
@@ -14,6 +14,7 @@ from ..message_param import (
|
|
|
14
14
|
BaseMessageParam,
|
|
15
15
|
CacheControlPart,
|
|
16
16
|
DocumentPart,
|
|
17
|
+
DocumentURLPart,
|
|
17
18
|
ImagePart,
|
|
18
19
|
ImageURLPart,
|
|
19
20
|
TextPart,
|
|
@@ -37,7 +38,8 @@ def _convert_message_sequence_part_to_content_part(
|
|
|
37
38
|
| AudioURLPart
|
|
38
39
|
| AudioSegment
|
|
39
40
|
| Wave_read
|
|
40
|
-
| DocumentPart
|
|
41
|
+
| DocumentPart
|
|
42
|
+
| DocumentURLPart,
|
|
41
43
|
) -> (
|
|
42
44
|
TextPart
|
|
43
45
|
| ImagePart
|
|
@@ -45,6 +47,7 @@ def _convert_message_sequence_part_to_content_part(
|
|
|
45
47
|
| AudioPart
|
|
46
48
|
| AudioURLPart
|
|
47
49
|
| CacheControlPart
|
|
50
|
+
| DocumentURLPart
|
|
48
51
|
| DocumentPart
|
|
49
52
|
):
|
|
50
53
|
if isinstance(message_sequence_part, str):
|
|
@@ -57,7 +60,8 @@ def _convert_message_sequence_part_to_content_part(
|
|
|
57
60
|
| AudioPart
|
|
58
61
|
| AudioURLPart
|
|
59
62
|
| CacheControlPart
|
|
60
|
-
| DocumentPart
|
|
63
|
+
| DocumentPart
|
|
64
|
+
| DocumentURLPart,
|
|
61
65
|
):
|
|
62
66
|
return message_sequence_part
|
|
63
67
|
elif has_pil_module and isinstance(message_sequence_part, Image.Image):
|
|
@@ -107,6 +111,7 @@ def convert_message_content_to_message_param_content(
|
|
|
107
111
|
| AudioSegment
|
|
108
112
|
| Wave_read
|
|
109
113
|
| DocumentPart
|
|
114
|
+
| DocumentURLPart,
|
|
110
115
|
],
|
|
111
116
|
) -> (
|
|
112
117
|
list[
|
|
@@ -117,6 +122,7 @@ def convert_message_content_to_message_param_content(
|
|
|
117
122
|
| AudioURLPart
|
|
118
123
|
| CacheControlPart
|
|
119
124
|
| DocumentPart
|
|
125
|
+
| DocumentURLPart,
|
|
120
126
|
]
|
|
121
127
|
| str
|
|
122
128
|
):
|
|
@@ -151,6 +157,7 @@ def convert_messages_to_message_params(
|
|
|
151
157
|
| AudioSegment
|
|
152
158
|
| Wave_read
|
|
153
159
|
| DocumentPart
|
|
160
|
+
| DocumentURLPart,
|
|
154
161
|
]
|
|
155
162
|
| list[BaseMessageParam]
|
|
156
163
|
| BaseMessageParam,
|
|
@@ -60,10 +60,8 @@ def transform_tool_outputs(
|
|
|
60
60
|
tools_and_outputs: Sequence[tuple[_BaseToolT, JsonableType]],
|
|
61
61
|
) -> list[_ToolMessageParamT]:
|
|
62
62
|
def recursive_serializer(value: JsonableType) -> BaseType:
|
|
63
|
-
if isinstance(value, str):
|
|
63
|
+
if isinstance(value, str | int | float | bool | None):
|
|
64
64
|
return value
|
|
65
|
-
if isinstance(value, int | float | bool):
|
|
66
|
-
return value # Don't serialize primitives yet
|
|
67
65
|
if isinstance(value, bytes):
|
|
68
66
|
return base64.b64encode(value).decode("utf-8")
|
|
69
67
|
if isinstance(value, BaseModel):
|
|
@@ -103,6 +103,18 @@ class DocumentPart(BaseModel):
|
|
|
103
103
|
document: bytes
|
|
104
104
|
|
|
105
105
|
|
|
106
|
+
class DocumentURLPart(BaseModel):
|
|
107
|
+
"""A content part for documents with a URL.
|
|
108
|
+
|
|
109
|
+
Attributes:
|
|
110
|
+
type: Always "document_url"
|
|
111
|
+
url: The URL to the document
|
|
112
|
+
"""
|
|
113
|
+
|
|
114
|
+
type: Literal["document_url"]
|
|
115
|
+
url: str
|
|
116
|
+
|
|
117
|
+
|
|
106
118
|
class ToolCallPart(BaseModel):
|
|
107
119
|
"""A content part for tool.
|
|
108
120
|
|
|
@@ -156,6 +168,7 @@ class BaseMessageParam(BaseModel):
|
|
|
156
168
|
| AudioURLPart
|
|
157
169
|
| CacheControlPart
|
|
158
170
|
| DocumentPart
|
|
171
|
+
| DocumentURLPart
|
|
159
172
|
| ToolCallPart
|
|
160
173
|
| ToolResultPart
|
|
161
174
|
]
|
mirascope/core/base/messages.py
CHANGED
|
@@ -14,6 +14,7 @@ from .message_param import (
|
|
|
14
14
|
BaseMessageParam,
|
|
15
15
|
CacheControlPart,
|
|
16
16
|
DocumentPart,
|
|
17
|
+
DocumentURLPart,
|
|
17
18
|
ImagePart,
|
|
18
19
|
ImageURLPart,
|
|
19
20
|
TextPart,
|
|
@@ -36,6 +37,7 @@ class Messages:
|
|
|
36
37
|
| AudioSegment
|
|
37
38
|
| Wave_read
|
|
38
39
|
| DocumentPart
|
|
40
|
+
| DocumentURLPart
|
|
39
41
|
]
|
|
40
42
|
| list[BaseMessageParam | Any]
|
|
41
43
|
| BaseMessageParam
|
|
@@ -57,6 +59,7 @@ class Messages:
|
|
|
57
59
|
| AudioSegment
|
|
58
60
|
| Wave_read
|
|
59
61
|
| DocumentPart
|
|
62
|
+
| DocumentURLPart
|
|
60
63
|
],
|
|
61
64
|
) -> BaseMessageParam:
|
|
62
65
|
return BaseMessageParam(
|
|
@@ -80,6 +83,7 @@ class Messages:
|
|
|
80
83
|
| AudioSegment
|
|
81
84
|
| Wave_read
|
|
82
85
|
| DocumentPart
|
|
86
|
+
| DocumentURLPart
|
|
83
87
|
],
|
|
84
88
|
) -> BaseMessageParam:
|
|
85
89
|
return BaseMessageParam(
|
|
@@ -103,6 +107,7 @@ class Messages:
|
|
|
103
107
|
| AudioSegment
|
|
104
108
|
| Wave_read
|
|
105
109
|
| DocumentPart
|
|
110
|
+
| DocumentURLPart
|
|
106
111
|
],
|
|
107
112
|
) -> BaseMessageParam:
|
|
108
113
|
return BaseMessageParam(
|
mirascope/core/base/tool.py
CHANGED
|
@@ -122,6 +122,15 @@ class BaseTool(BaseModel, ABC):
|
|
|
122
122
|
if field not in {"tool_call", "delta"}
|
|
123
123
|
}
|
|
124
124
|
|
|
125
|
+
@property
|
|
126
|
+
def id(self) -> str | None:
|
|
127
|
+
"""The id of the tool."""
|
|
128
|
+
if tool_call := getattr(self, "tool_call", None):
|
|
129
|
+
# Expect tool_call has an id attribute.
|
|
130
|
+
# If not, we should override this method on the provider tool
|
|
131
|
+
return getattr(tool_call, "id", None)
|
|
132
|
+
return None
|
|
133
|
+
|
|
125
134
|
@abstractmethod
|
|
126
135
|
def call(self, *args: Any, **kwargs: Any) -> Any: # noqa: ANN401
|
|
127
136
|
"""The method to call the tool."""
|
|
@@ -100,25 +100,27 @@ class BedrockMessageParamConverter(BaseMessageParamConverter):
|
|
|
100
100
|
)
|
|
101
101
|
elif "toolUse" in block:
|
|
102
102
|
tool_use = block["toolUse"]
|
|
103
|
+
|
|
104
|
+
tool_use_part = ToolCallPart(
|
|
105
|
+
type="tool_call",
|
|
106
|
+
name=tool_use["name"],
|
|
107
|
+
id=tool_use["toolUseId"],
|
|
108
|
+
args=tool_use["input"],
|
|
109
|
+
)
|
|
103
110
|
if converted_content:
|
|
111
|
+
converted_content.append(tool_use_part)
|
|
104
112
|
converted.append(
|
|
105
113
|
BaseMessageParam(
|
|
106
114
|
role=message_param["role"], content=converted_content
|
|
107
115
|
)
|
|
108
116
|
)
|
|
109
117
|
converted_content = []
|
|
118
|
+
continue
|
|
110
119
|
|
|
111
120
|
converted.append(
|
|
112
121
|
BaseMessageParam(
|
|
113
122
|
role="assistant",
|
|
114
|
-
content=[
|
|
115
|
-
ToolCallPart(
|
|
116
|
-
type="tool_call",
|
|
117
|
-
name=tool_use["name"],
|
|
118
|
-
id=tool_use["toolUseId"],
|
|
119
|
-
args=tool_use["input"],
|
|
120
|
-
)
|
|
121
|
-
],
|
|
123
|
+
content=[tool_use_part],
|
|
122
124
|
)
|
|
123
125
|
)
|
|
124
126
|
elif "toolResult" in block:
|
|
@@ -137,7 +139,6 @@ class BedrockMessageParamConverter(BaseMessageParamConverter):
|
|
|
137
139
|
ToolResultPart(
|
|
138
140
|
type="tool_result",
|
|
139
141
|
id=tool_result["toolUseId"],
|
|
140
|
-
name=tool_result["name"], # pyright: ignore [reportGeneralTypeIssues]
|
|
141
142
|
content=tool_result["content"]
|
|
142
143
|
if isinstance(tool_result["content"], str)
|
|
143
144
|
else tool_result["content"][0]["text"], # pyright: ignore [reportTypedDictNotRequiredAccess]
|
mirascope/core/bedrock/tool.py
CHANGED
|
@@ -56,6 +56,10 @@ class BedrockTool(BaseTool):
|
|
|
56
56
|
|
|
57
57
|
tool_call: SkipJsonSchema[ToolUseBlockContentTypeDef]
|
|
58
58
|
|
|
59
|
+
@property
|
|
60
|
+
def id(self) -> str | None:
|
|
61
|
+
return self.tool_call["toolUse"]["toolUseId"]
|
|
62
|
+
|
|
59
63
|
@classmethod
|
|
60
64
|
def tool_schema(cls) -> ToolTypeDef:
|
|
61
65
|
"""Constructs a JSON Schema tool schema from the `BaseModel` schema defined.
|
|
@@ -16,9 +16,13 @@ from google.genai.types import (
|
|
|
16
16
|
)
|
|
17
17
|
|
|
18
18
|
from ...base import BaseMessageParam
|
|
19
|
-
from ...base._utils import get_audio_type, get_image_type
|
|
19
|
+
from ...base._utils import get_audio_type, get_document_type, get_image_type
|
|
20
20
|
from ...base._utils._parse_content_template import _load_media
|
|
21
|
-
from ._validate_media_type import
|
|
21
|
+
from ._validate_media_type import (
|
|
22
|
+
_check_audio_media_type,
|
|
23
|
+
_check_document_media_type,
|
|
24
|
+
_check_image_media_type,
|
|
25
|
+
)
|
|
22
26
|
|
|
23
27
|
|
|
24
28
|
def _over_file_size_limit(size: int) -> bool:
|
|
@@ -154,9 +158,78 @@ async def _convert_message_params_async(
|
|
|
154
158
|
if _over_file_size_limit(total_payload_size):
|
|
155
159
|
must_upload[index] = blob_dict
|
|
156
160
|
total_payload_size -= audio_size
|
|
161
|
+
elif part.type == "document":
|
|
162
|
+
_check_document_media_type(part.media_type)
|
|
163
|
+
blob_dict = BlobDict(data=part.document, mime_type=part.media_type)
|
|
164
|
+
converted_content.append(PartDict(inline_data=blob_dict))
|
|
165
|
+
document_size = len(part.document)
|
|
166
|
+
total_payload_size += document_size
|
|
167
|
+
if _over_file_size_limit(total_payload_size):
|
|
168
|
+
must_upload[index] = blob_dict
|
|
169
|
+
total_payload_size -= document_size
|
|
170
|
+
elif part.type == "document_url":
|
|
171
|
+
if (
|
|
172
|
+
client.vertexai
|
|
173
|
+
or not part.url.startswith(("https://", "http://"))
|
|
174
|
+
or "generativelanguage.googleapis.com" in part.url
|
|
175
|
+
):
|
|
176
|
+
converted_content.append(
|
|
177
|
+
PartDict(
|
|
178
|
+
file_data=FileDataDict(
|
|
179
|
+
file_uri=part.url, mime_type=None
|
|
180
|
+
)
|
|
181
|
+
)
|
|
182
|
+
)
|
|
183
|
+
else:
|
|
184
|
+
media_type = None
|
|
185
|
+
try:
|
|
186
|
+
downloaded_document = _load_media(part.url)
|
|
187
|
+
document_types = {
|
|
188
|
+
"pdf": "application/pdf",
|
|
189
|
+
"html": "text/html",
|
|
190
|
+
"xml": "text/xml",
|
|
191
|
+
"rtf": "text/rtf",
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
try:
|
|
195
|
+
document_type_ext = get_document_type(
|
|
196
|
+
downloaded_document
|
|
197
|
+
)
|
|
198
|
+
media_type = document_types.get(document_type_ext)
|
|
199
|
+
except ValueError:
|
|
200
|
+
try:
|
|
201
|
+
downloaded_document.decode("utf-8")
|
|
202
|
+
media_type = "text/plain"
|
|
203
|
+
except UnicodeDecodeError:
|
|
204
|
+
pass
|
|
205
|
+
|
|
206
|
+
if media_type is None:
|
|
207
|
+
raise ValueError(
|
|
208
|
+
f"Unsupported document format detected for URL: {part.url}. "
|
|
209
|
+
"Google API only supports the following document formats: "
|
|
210
|
+
"PDF, JavaScript, Python, TXT, HTML, CSS, Markdown, CSV, XML and RTF. "
|
|
211
|
+
"Please provide a document in one of these supported formats."
|
|
212
|
+
)
|
|
213
|
+
|
|
214
|
+
_check_document_media_type(media_type)
|
|
215
|
+
blob_dict = BlobDict(
|
|
216
|
+
data=downloaded_document, mime_type=media_type
|
|
217
|
+
)
|
|
218
|
+
converted_content.append(PartDict(inline_data=blob_dict))
|
|
219
|
+
document_size = len(downloaded_document)
|
|
220
|
+
total_payload_size += document_size
|
|
221
|
+
if _over_file_size_limit(total_payload_size):
|
|
222
|
+
must_upload[index] = blob_dict
|
|
223
|
+
total_payload_size -= document_size
|
|
224
|
+
except ValueError as e:
|
|
225
|
+
raise ValueError(
|
|
226
|
+
f"Failed to process document from URL: {part.url}. "
|
|
227
|
+
f"Error details: {str(e)}. "
|
|
228
|
+
"Please ensure the URL is accessible and points to a supported document format."
|
|
229
|
+
)
|
|
157
230
|
else:
|
|
158
231
|
raise ValueError(
|
|
159
|
-
"Google currently only supports text, tool_call, tool_result, image, and
|
|
232
|
+
"Google currently only supports text, tool_call, tool_result, image, audio, and document parts. "
|
|
160
233
|
f"Part provided: {part.type}"
|
|
161
234
|
)
|
|
162
235
|
|
|
@@ -8,7 +8,7 @@ from google.genai.types import (
|
|
|
8
8
|
)
|
|
9
9
|
|
|
10
10
|
from mirascope.core import BaseMessageParam
|
|
11
|
-
from mirascope.core.base import DocumentPart, ImagePart, TextPart
|
|
11
|
+
from mirascope.core.base import DocumentPart, DocumentURLPart, ImagePart, TextPart
|
|
12
12
|
from mirascope.core.base._utils._base_message_param_converter import (
|
|
13
13
|
BaseMessageParamConverter,
|
|
14
14
|
)
|
|
@@ -21,7 +21,11 @@ from mirascope.core.base.message_param import (
|
|
|
21
21
|
)
|
|
22
22
|
from mirascope.core.google._utils import convert_message_params
|
|
23
23
|
|
|
24
|
-
from ._validate_media_type import
|
|
24
|
+
from ._validate_media_type import (
|
|
25
|
+
_check_audio_media_type,
|
|
26
|
+
_check_document_media_type,
|
|
27
|
+
_check_image_media_type,
|
|
28
|
+
)
|
|
25
29
|
|
|
26
30
|
|
|
27
31
|
class GoogleMessageParamConverter(BaseMessageParamConverter):
|
|
@@ -78,7 +82,21 @@ class GoogleMessageParamConverter(BaseMessageParamConverter):
|
|
|
78
82
|
audio=data,
|
|
79
83
|
)
|
|
80
84
|
)
|
|
81
|
-
elif mime_type
|
|
85
|
+
elif mime_type in [
|
|
86
|
+
"application/pdf",
|
|
87
|
+
"application/x-javascript",
|
|
88
|
+
"text/javascript",
|
|
89
|
+
"application/x-python",
|
|
90
|
+
"text/x-python",
|
|
91
|
+
"text/plain",
|
|
92
|
+
"text/html",
|
|
93
|
+
"text/css",
|
|
94
|
+
"text/csv",
|
|
95
|
+
"text/xml",
|
|
96
|
+
"text/rtf",
|
|
97
|
+
"text/md",
|
|
98
|
+
]:
|
|
99
|
+
_check_document_media_type(mime_type)
|
|
82
100
|
content_list.append(
|
|
83
101
|
DocumentPart(
|
|
84
102
|
type="document", media_type=mime_type, document=data
|
|
@@ -106,6 +124,26 @@ class GoogleMessageParamConverter(BaseMessageParamConverter):
|
|
|
106
124
|
url=cast(str, part.file_data.file_uri),
|
|
107
125
|
)
|
|
108
126
|
)
|
|
127
|
+
elif mime_type in [
|
|
128
|
+
"application/pdf",
|
|
129
|
+
"application/x-javascript",
|
|
130
|
+
"text/javascript",
|
|
131
|
+
"application/x-python",
|
|
132
|
+
"text/x-python",
|
|
133
|
+
"text/plain",
|
|
134
|
+
"text/html",
|
|
135
|
+
"text/css",
|
|
136
|
+
"text/csv",
|
|
137
|
+
"text/xml",
|
|
138
|
+
"text/rtf",
|
|
139
|
+
"text/md",
|
|
140
|
+
]:
|
|
141
|
+
content_list.append(
|
|
142
|
+
DocumentURLPart(
|
|
143
|
+
type="document_url",
|
|
144
|
+
url=cast(str, part.file_data.file_uri),
|
|
145
|
+
)
|
|
146
|
+
)
|
|
109
147
|
else:
|
|
110
148
|
# Since `FileDataDict` handles any file data, we use
|
|
111
149
|
# `ImageURLPart` for unknown mime types
|
|
@@ -148,7 +186,7 @@ class GoogleMessageParamConverter(BaseMessageParamConverter):
|
|
|
148
186
|
)
|
|
149
187
|
else:
|
|
150
188
|
raise ValueError(
|
|
151
|
-
"Part does not contain any supported content (text, image, or document)."
|
|
189
|
+
"Part does not contain any supported content (text, image, audio, or document)."
|
|
152
190
|
)
|
|
153
191
|
|
|
154
192
|
if len(content_list) == 1 and isinstance(content_list[0], TextPart):
|
|
@@ -32,3 +32,27 @@ def _check_audio_media_type(media_type: str) -> None:
|
|
|
32
32
|
"Google currently only supports WAV, MP3, AIFF, AAC, OGG, "
|
|
33
33
|
"and FLAC audio file types."
|
|
34
34
|
)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _check_document_media_type(media_type: str) -> None:
|
|
38
|
+
"""Raises a `ValueError` if the document media type is not supported."""
|
|
39
|
+
|
|
40
|
+
if media_type not in [
|
|
41
|
+
"application/pdf",
|
|
42
|
+
"application/x-javascript",
|
|
43
|
+
"text/javascript",
|
|
44
|
+
"application/x-python",
|
|
45
|
+
"text/x-python",
|
|
46
|
+
"text/plain",
|
|
47
|
+
"text/html",
|
|
48
|
+
"text/css",
|
|
49
|
+
"text/csv",
|
|
50
|
+
"text/xml",
|
|
51
|
+
"text/rtf",
|
|
52
|
+
"text/md",
|
|
53
|
+
]:
|
|
54
|
+
raise ValueError(
|
|
55
|
+
f"Unsupported document media type: {media_type}. "
|
|
56
|
+
"Google currently only supports PDF, JavaScript, Python, TXT, HTML, CSS, "
|
|
57
|
+
"CSV, XML, RTF, and Markdown document types."
|
|
58
|
+
)
|
mirascope/llm/call_response.py
CHANGED
|
@@ -142,15 +142,6 @@ class CallResponse(
|
|
|
142
142
|
tools_and_outputs: The sequence of tools and their outputs from which the tool
|
|
143
143
|
message parameters should be constructed.
|
|
144
144
|
"""
|
|
145
|
-
|
|
146
|
-
def _get_tool_call_id(_tool: BaseTool) -> str | None:
|
|
147
|
-
"""Get the tool call ID."""
|
|
148
|
-
if tool_call := getattr(_tool, "tool_call", None):
|
|
149
|
-
# Expect tool_call has an id attribute.
|
|
150
|
-
# If not, we should implement a method to get the id on the provider tool
|
|
151
|
-
return getattr(tool_call, "id", None)
|
|
152
|
-
return None
|
|
153
|
-
|
|
154
145
|
return [
|
|
155
146
|
BaseMessageParam(
|
|
156
147
|
role="tool",
|
|
@@ -159,7 +150,7 @@ class CallResponse(
|
|
|
159
150
|
type="tool_result",
|
|
160
151
|
name=tool._name(),
|
|
161
152
|
content=output,
|
|
162
|
-
id=
|
|
153
|
+
id=tool.id,
|
|
163
154
|
)
|
|
164
155
|
],
|
|
165
156
|
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mirascope
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.24.1
|
|
4
4
|
Summary: LLM abstractions that aren't obstructions
|
|
5
5
|
Project-URL: Homepage, https://mirascope.com
|
|
6
6
|
Project-URL: Documentation, https://mirascope.com/WELCOME
|
|
@@ -154,7 +154,7 @@ print(book)
|
|
|
154
154
|
|
|
155
155
|
## Tutorials
|
|
156
156
|
|
|
157
|
-
Check out our [quickstart tutorial](https://mirascope.com/
|
|
157
|
+
Check out our [quickstart tutorial](https://mirascope.com/docs/mirascope/getting-started/quickstart) and many other tutorials for an interactive way to getting started with Mirascope.
|
|
158
158
|
|
|
159
159
|
## Usage
|
|
160
160
|
|
|
@@ -166,4 +166,4 @@ Mirascope uses [Semantic Versioning](https://semver.org/).
|
|
|
166
166
|
|
|
167
167
|
## Licence
|
|
168
168
|
|
|
169
|
-
This project is licensed under the terms of the [MIT License](https://github.com/Mirascope/mirascope/
|
|
169
|
+
This project is licensed under the terms of the [MIT License](https://github.com/Mirascope/mirascope/tree/main/LICENSE).
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
mirascope/__init__.py,sha256=
|
|
1
|
+
mirascope/__init__.py,sha256=Rmt0CqSEEEqc7KhW10KzQHgGij11PIKRrNQ_y4IU4eY,1127
|
|
2
2
|
mirascope/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
3
|
mirascope/beta/__init__.py,sha256=YsIIE5w3nKj0Ywcs_Y5tSE6WlHKR-nQwwbhNF1R8UW8,43
|
|
4
4
|
mirascope/beta/openai/__init__.py,sha256=a7xllQBfcpO6kYwZ5Zv1CWzN9qpS1SJoBgb1J20F-Hk,257
|
|
@@ -41,7 +41,7 @@ mirascope/beta/rag/pinecone/vectorstores.py,sha256=ZcLwVmrxNMq5a2mLI-3F9XJ_UYDry
|
|
|
41
41
|
mirascope/beta/rag/weaviate/__init__.py,sha256=eod9OprMo1zdDb-waYWtBJKWuYQRx7v-QEen-wzm_5w,231
|
|
42
42
|
mirascope/beta/rag/weaviate/types.py,sha256=-2r2Vy71kpLlRJgVqWoE3atub5a2eymHPSjTHuSqCfQ,2984
|
|
43
43
|
mirascope/beta/rag/weaviate/vectorstores.py,sha256=8Nwy-QRHwSUdvMkqEhqmUkN7y_CzQN7bop7do1K8v4w,3606
|
|
44
|
-
mirascope/core/__init__.py,sha256=
|
|
44
|
+
mirascope/core/__init__.py,sha256=10mn-PHVEOUu0aZ-CIOZDl89exoRcJVDBB1xWK938YA,2074
|
|
45
45
|
mirascope/core/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
46
46
|
mirascope/core/anthropic/__init__.py,sha256=GB-CULa3jYEPv1ZDyZjNCKQJbrc6ojqu8WNRSFElQ-4,918
|
|
47
47
|
mirascope/core/anthropic/_call.py,sha256=LXUR__AyexD-hsPMPKpA7IFuh8Cfc0uAg1GrJSxiWnU,2358
|
|
@@ -66,7 +66,7 @@ mirascope/core/azure/_call.py,sha256=SHqSJe6_4zgn4Y9PkpDl4vXvLuT4QmVnWUcws9e_RR8
|
|
|
66
66
|
mirascope/core/azure/_call_kwargs.py,sha256=q38xKSgCBWi8DLScepG-KnUfgi67AU6xr2uOHwCZ2mI,435
|
|
67
67
|
mirascope/core/azure/call_params.py,sha256=NK_ggVJbactDip85DbfCaqSWRpO0CgwN1svY-KW4_Yg,1836
|
|
68
68
|
mirascope/core/azure/call_response.py,sha256=FzSqAunmZCeVhQIei2_YcUqZBnJUgmEFFT4jHiJFm28,7068
|
|
69
|
-
mirascope/core/azure/call_response_chunk.py,sha256=
|
|
69
|
+
mirascope/core/azure/call_response_chunk.py,sha256=bWgpT-XldmetNwcQmpVVHRCLn6B6UKM6NK_RAxb2Zio,3224
|
|
70
70
|
mirascope/core/azure/dynamic_config.py,sha256=6SBMGFce7tuXdwHrlKNISpZxVxUnnumbIQB9lGR6nbs,1066
|
|
71
71
|
mirascope/core/azure/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
72
72
|
mirascope/core/azure/stream.py,sha256=XfEO6sOgnXiOhhuagrFdtFI-oQECxBP0Zt0wbfUH1TU,4637
|
|
@@ -80,7 +80,7 @@ mirascope/core/azure/_utils/_get_json_output.py,sha256=Qec7WJY5is1Q63Vp9uUNNfkRw
|
|
|
80
80
|
mirascope/core/azure/_utils/_handle_stream.py,sha256=M_BGnjBGWTPefNyIMuJSHiDxIvqmENmqfVlDx_qzL1c,4638
|
|
81
81
|
mirascope/core/azure/_utils/_message_param_converter.py,sha256=JAUeHObtd_V225YyZqEruuih3HRozq43pqjYJCbJj8A,4443
|
|
82
82
|
mirascope/core/azure/_utils/_setup_call.py,sha256=cdUof-RCxsPbKuJvevsEUYXU-ckoql3wTevNEQiEpz4,6496
|
|
83
|
-
mirascope/core/base/__init__.py,sha256=
|
|
83
|
+
mirascope/core/base/__init__.py,sha256=tBy5Q2jrioxxYji_tArS-fcxBYmIBbhmGGZDpkhDjE8,2111
|
|
84
84
|
mirascope/core/base/_call_factory.py,sha256=YdFHAa9WtGfYeqVcM2xaDNh5gMg584rOe26_E51-1to,9663
|
|
85
85
|
mirascope/core/base/_create.py,sha256=M6dpcWwtyb6O7pa9pT0rdwhYEUcuB2iu2uv97kAU1qk,10090
|
|
86
86
|
mirascope/core/base/_extract.py,sha256=QTqkArgmgR17OB5jTP86Wo-TW-BcouOcK9gdMy-EcNw,6799
|
|
@@ -88,20 +88,20 @@ mirascope/core/base/_extract_with_tools.py,sha256=MW4v8D1xty7LqLb5RwMFkX-peQqA73
|
|
|
88
88
|
mirascope/core/base/_partial.py,sha256=w_ACCgsDKNLtMyAP-lNmfRdrFEPmzh2BT4aninajxyY,3240
|
|
89
89
|
mirascope/core/base/call_kwargs.py,sha256=0mznCsrj1dYxvdwYNF0RKbc9CiU5G6WvvcjPqOMsOE4,351
|
|
90
90
|
mirascope/core/base/call_params.py,sha256=wtuuOY-SwIZYCDBKfn_xRC0Kf1cUuI4eSQaXu6VrtaE,1331
|
|
91
|
-
mirascope/core/base/call_response.py,sha256=
|
|
91
|
+
mirascope/core/base/call_response.py,sha256=2f7ETVpr3ZPcTfGJ7aQp4xlN-7fU7IWDvdfT-fMzDr0,10632
|
|
92
92
|
mirascope/core/base/call_response_chunk.py,sha256=ZfulgERwgva55TLrQI9XimX8bpgOqBNLs_I-_kELl-4,3606
|
|
93
93
|
mirascope/core/base/dynamic_config.py,sha256=V5IG2X5gPFpfQ47uO8JU1zoC2eNdRftsRZEmwhRPaYI,2859
|
|
94
94
|
mirascope/core/base/from_call_args.py,sha256=8ijMX7PN6a4o6uLdmXJlSRnE-rEVJU5NLxUmNrS8dvU,909
|
|
95
95
|
mirascope/core/base/merge_decorators.py,sha256=9pQYXuTxLh4mGKVIsnR5pYBkYCaQjg85TTelC6XDldE,1988
|
|
96
|
-
mirascope/core/base/message_param.py,sha256=
|
|
97
|
-
mirascope/core/base/messages.py,sha256=
|
|
96
|
+
mirascope/core/base/message_param.py,sha256=5AtuTmpscZKsXengBPkPV4F33Et0BQRpfeRwMMvqqdY,3822
|
|
97
|
+
mirascope/core/base/messages.py,sha256=tn38kanabpq6fabxvb0p8zo5fZBBz6Yotl1szCgh3xg,2671
|
|
98
98
|
mirascope/core/base/metadata.py,sha256=V9hgMkj6m3QGsu4H5LhCxBZBYQLoygJv0CeLIf1DF0M,382
|
|
99
99
|
mirascope/core/base/prompt.py,sha256=M5PK9JoEsWTQ-kzNCpZKdDGzWAkb8MS267xEFCPfpAU,15414
|
|
100
100
|
mirascope/core/base/response_model_config_dict.py,sha256=OUdx_YkV2vBzUSSB2OYLAAHf22T7jvF5tRuc6c-vhNQ,254
|
|
101
101
|
mirascope/core/base/stream.py,sha256=ZHjC9MQ3HT9KMbqCKTB0um2fvMLJmRYU_eSGdfRj79I,17274
|
|
102
102
|
mirascope/core/base/stream_config.py,sha256=vwWqNh9NJhTYjiJmfDbC9D5O84je_lBRhNOt4wI3FHM,238
|
|
103
103
|
mirascope/core/base/structured_stream.py,sha256=FIvLXXKninrpQ5P7MsLEqGrU4cfvEDiPbueZqgJ4Dlw,10395
|
|
104
|
-
mirascope/core/base/tool.py,sha256=
|
|
104
|
+
mirascope/core/base/tool.py,sha256=or8Zv0reSLSGjBAxlcfX4MzEQyhyPv-HOivJLJ9rQGs,7220
|
|
105
105
|
mirascope/core/base/toolkit.py,sha256=GmZquYPqvQL2J9Hd6StEwx6jfeFsqtcUyxKvp4iW_7Q,6271
|
|
106
106
|
mirascope/core/base/types.py,sha256=4GVyVzHThWJU2Og-wpVbYNPZD8QMdHltIAV83FUlisM,9247
|
|
107
107
|
mirascope/core/base/_utils/__init__.py,sha256=Tm-9-6k7cZL3IaqebOEaKpTg9nFUMfAGHHeKmC3YzLQ,3192
|
|
@@ -110,7 +110,7 @@ mirascope/core/base/_utils/_base_type.py,sha256=x8ZabSxZZNAy6ER-VQEkB6mNyjWcGSCB
|
|
|
110
110
|
mirascope/core/base/_utils/_convert_base_model_to_base_tool.py,sha256=JoHf1CbRwK91dABm5xLhdIPmeMSFS_nj-qW9OQu_YJ0,1750
|
|
111
111
|
mirascope/core/base/_utils/_convert_base_type_to_base_tool.py,sha256=fAOfqqoT0_vk1i-h-lCdWQYYeTjZ3fTiCgwGmgtHk9o,734
|
|
112
112
|
mirascope/core/base/_utils/_convert_function_to_base_tool.py,sha256=squjro0oxwXOiavcf4bSHjHS94uSeCBGpykacoFpKx8,5729
|
|
113
|
-
mirascope/core/base/_utils/_convert_messages_to_message_params.py,sha256=
|
|
113
|
+
mirascope/core/base/_utils/_convert_messages_to_message_params.py,sha256=9gys7ZPBAiuQH5hdi4_bL0KH32Q96fESyKDW5S0-9Js,4532
|
|
114
114
|
mirascope/core/base/_utils/_convert_provider_finish_reason_to_finish_reason.py,sha256=Mki5mYbYX8vUW-oosC4PaRNUHW_T5xAQWti3_1ndtTk,611
|
|
115
115
|
mirascope/core/base/_utils/_default_tool_docstring.py,sha256=JLyryjGDaHMU-P7gUpnjkPyELCQsQgi8AP4Dp_yXPOM,277
|
|
116
116
|
mirascope/core/base/_utils/_extract_tool_return.py,sha256=ZDBZJ4cacFd8nijSWZEhib7B58ZnSFD_rK1FiGNTYU0,1553
|
|
@@ -145,19 +145,19 @@ mirascope/core/bedrock/_call.py,sha256=8Z8sdzpTdJsMHBev35B1KH3O16_eMLbtTkOmPB7bz
|
|
|
145
145
|
mirascope/core/bedrock/_call_kwargs.py,sha256=N1d_iglnwZW3JrcaT8WTOeuLT5MYcVLU5vS8u8uyEL4,408
|
|
146
146
|
mirascope/core/bedrock/_types.py,sha256=ntmzYsgT6wuigv1GavkdqCvJnAYRsFvVuIwxafE4DFY,3229
|
|
147
147
|
mirascope/core/bedrock/call_params.py,sha256=3eKNYTteCTaPLqvAcy1vHU5aY9nMVNhmApL45ugPbrQ,1716
|
|
148
|
-
mirascope/core/bedrock/call_response.py,sha256=
|
|
148
|
+
mirascope/core/bedrock/call_response.py,sha256=V9YFYdPxW415t-yBq4Y5Jexn5hkewiePnWv9gghW9JA,8359
|
|
149
149
|
mirascope/core/bedrock/call_response_chunk.py,sha256=EAs0mJseL-C4dlnEhggtUT8_s6L2d5lSAqrIjLxQepI,3524
|
|
150
150
|
mirascope/core/bedrock/dynamic_config.py,sha256=X6v93X9g14mfvkGLL08yX-xTFGgX8y8bVngNmExdUhQ,1166
|
|
151
151
|
mirascope/core/bedrock/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
152
152
|
mirascope/core/bedrock/stream.py,sha256=UyA6b7l3-MjEULzo-DXF-le7N3oQw6W5FFk48_K93a0,5219
|
|
153
|
-
mirascope/core/bedrock/tool.py,sha256=
|
|
153
|
+
mirascope/core/bedrock/tool.py,sha256=tgt__paZyzpN1_NdTVKh-2hIWHah2Ect8lAfM1GEl-s,2758
|
|
154
154
|
mirascope/core/bedrock/_utils/__init__.py,sha256=OYpHXxPRbgasCLz_emLatmNa5WCb_S6pvVFHcNoGy9E,389
|
|
155
155
|
mirascope/core/bedrock/_utils/_convert_common_call_params.py,sha256=i17yrW-_7qdIsf-zS3OD5HIO0uykCdfanPsjV3WxTEY,1091
|
|
156
156
|
mirascope/core/bedrock/_utils/_convert_finish_reason_to_common_finish_reasons.py,sha256=A67-Q3zgpXh9q0iub5IfJw9VRgHvK-pczt1Btot_jks,792
|
|
157
157
|
mirascope/core/bedrock/_utils/_convert_message_params.py,sha256=ZPFj34ed0-4bmMldj4tR6EGb9RsuHkXzSwjmwEeN-KU,4680
|
|
158
158
|
mirascope/core/bedrock/_utils/_get_json_output.py,sha256=hW-IBBQ5YW85VljjFJHDDtu66zsaF2ydTbFxgCX_j6A,1159
|
|
159
159
|
mirascope/core/bedrock/_utils/_handle_stream.py,sha256=s8KNMNDKzvSIkFROtaZgbEJry78X_qCzTvGmHcL7UW0,3776
|
|
160
|
-
mirascope/core/bedrock/_utils/_message_param_converter.py,sha256=
|
|
160
|
+
mirascope/core/bedrock/_utils/_message_param_converter.py,sha256=BCoFozjclkqAZq1InB1ar_IAVGMW9xclU1bK-oi2zI0,6765
|
|
161
161
|
mirascope/core/bedrock/_utils/_setup_call.py,sha256=XQs-JlviE0uhbBxEpjXP8812NbiObLYx5VkAwJJAF84,9168
|
|
162
162
|
mirascope/core/cohere/__init__.py,sha256=vk73WFGBOEmMFEiqWMRnPfxsCBDlDcq8SaLB2A6RKeo,830
|
|
163
163
|
mirascope/core/cohere/_call.py,sha256=y0nB_7h7FWCNxHRPywtAVCYXyeYX3uzTyYBPWnuLwUE,2261
|
|
@@ -221,12 +221,12 @@ mirascope/core/google/tool.py,sha256=61a9Ejdxz41pwaab9VE2yvP_J1Aebua3BeRPJ_GJSnE
|
|
|
221
221
|
mirascope/core/google/_utils/__init__.py,sha256=vL0hx6WKW5lqpUcFTFCFGvmwtR-pts0JzWgCXhaUVrI,388
|
|
222
222
|
mirascope/core/google/_utils/_convert_common_call_params.py,sha256=TF7GWBHcpfzb7XmrxKp3gnaONITYF93lqr4XkSVz_uU,1195
|
|
223
223
|
mirascope/core/google/_utils/_convert_finish_reason_to_common_finish_reasons.py,sha256=ig4tb7Zanz-tyZpvc9Ncd47a2FNTOS7-wl1PYBq-4cY,879
|
|
224
|
-
mirascope/core/google/_utils/_convert_message_params.py,sha256=
|
|
224
|
+
mirascope/core/google/_utils/_convert_message_params.py,sha256=OZXdwhAP-33yIr1QfEBDirjh1QOUeLzL2IajfVXgcUM,12787
|
|
225
225
|
mirascope/core/google/_utils/_get_json_output.py,sha256=sxDgT0Ra6YJynL5_hhakf0dNJEhZm0DfAgfcvC_DAFU,1596
|
|
226
226
|
mirascope/core/google/_utils/_handle_stream.py,sha256=xTaQvAWnJ195YI_h68USvit4-G8T_fogmtBZFhu1qoE,2238
|
|
227
|
-
mirascope/core/google/_utils/_message_param_converter.py,sha256=
|
|
227
|
+
mirascope/core/google/_utils/_message_param_converter.py,sha256=8N3etkSjoyU0wxcGVw13A5EtI7iphBD4pHG87iUCkZg,8094
|
|
228
228
|
mirascope/core/google/_utils/_setup_call.py,sha256=UoV4McGgSS79PKErjArCmrq1HmpFvq2qegJYoyY4P5U,6469
|
|
229
|
-
mirascope/core/google/_utils/_validate_media_type.py,sha256=
|
|
229
|
+
mirascope/core/google/_utils/_validate_media_type.py,sha256=qLSoUlv5l5AZJ_PAsGFZmHNNdJHiB3jbFuAR2Ckga6s,1746
|
|
230
230
|
mirascope/core/groq/__init__.py,sha256=8jWCQScdei_TImGMWUwiKnlOwffQqaXdAL-bluFmEL0,798
|
|
231
231
|
mirascope/core/groq/_call.py,sha256=gR8VN5IaYWIFXc0csn995q59FM0nBs-xVFjkVycPjMM,2223
|
|
232
232
|
mirascope/core/groq/_call_kwargs.py,sha256=trT8AdQ-jdQPYKlGngIMRwwQuvKuvAbvI1yyozftOuI,425
|
|
@@ -339,7 +339,7 @@ mirascope/llm/_context.py,sha256=vtHJkLlFfUwyR_hYEHXAw3xunpHhLn67k4kuFw50GR8,124
|
|
|
339
339
|
mirascope/llm/_override.py,sha256=m4MdOhM-aJRIGP7NBJhscq3ISNct6FBPn3jjmryFo_Q,112292
|
|
340
340
|
mirascope/llm/_protocols.py,sha256=HXspRAC0PduGqbh2BM0CGe5iVj7CC3ZKMPAYvFvbDNQ,16406
|
|
341
341
|
mirascope/llm/_response_metaclass.py,sha256=6DLQb5IrqMldyEXHT_pAsr2DlUVc9CmZuZiBXG37WK8,851
|
|
342
|
-
mirascope/llm/call_response.py,sha256=
|
|
342
|
+
mirascope/llm/call_response.py,sha256=tJ6jHZ4PFaYf_4Hn9OihlVqOxNEM9d6gAi4Bo15XXnQ,4825
|
|
343
343
|
mirascope/llm/call_response_chunk.py,sha256=bZwO43ipc6PO1VLgGSaAPRqCIUyZD_Ty5oxdJX62yno,1966
|
|
344
344
|
mirascope/llm/stream.py,sha256=GtUKyLBlKqqZTOKjdL9FLInCXJ0ZOEAe6nymbjKwyTQ,5293
|
|
345
345
|
mirascope/llm/tool.py,sha256=MQRJBPhP1d-OyOz3PE_VsKmSXca0chySyYO1U9OW8ck,1824
|
|
@@ -371,7 +371,7 @@ mirascope/v0/base/ops_utils.py,sha256=1Qq-VIwgHBaYutiZsS2MUQ4OgPC3APyywI5bTiTAmA
|
|
|
371
371
|
mirascope/v0/base/prompts.py,sha256=FM2Yz98cSnDceYogiwPrp4BALf3_F3d4fIOCGAkd-SE,1298
|
|
372
372
|
mirascope/v0/base/types.py,sha256=ZfatJoX0Yl0e3jhv0D_MhiSVHLYUeJsdN3um3iE10zY,352
|
|
373
373
|
mirascope/v0/base/utils.py,sha256=XREPENRQTu8gpMhHU8RC8qH_am3FfGUvY-dJ6x8i-mw,681
|
|
374
|
-
mirascope-1.
|
|
375
|
-
mirascope-1.
|
|
376
|
-
mirascope-1.
|
|
377
|
-
mirascope-1.
|
|
374
|
+
mirascope-1.24.1.dist-info/METADATA,sha256=CF6YrOzpQRtxq7M0Pz_cl5d3m2dyjy2rO08z64sEzN8,8542
|
|
375
|
+
mirascope-1.24.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
376
|
+
mirascope-1.24.1.dist-info/licenses/LICENSE,sha256=LAs5Q8mdawTsVdONpDGukwsoc4KEUBmmonDEL39b23Y,1072
|
|
377
|
+
mirascope-1.24.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|