mirascope 2.0.0a0__py3-none-any.whl → 2.0.0a2__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/llm/__init__.py CHANGED
@@ -8,13 +8,14 @@ code that works with multiple LLM providers without changing your application lo
8
8
  # TODO: Across the API, audit docstrings to ensure they are compliant Google-style docstrings
9
9
  # (Write some tooling to ensure this happens consistently + in CI)
10
10
 
11
+ from contextlib import suppress
12
+
11
13
  from . import (
12
14
  calls,
13
15
  clients,
14
16
  content,
15
17
  exceptions,
16
18
  formatting,
17
- mcp,
18
19
  messages,
19
20
  models,
20
21
  prompts,
@@ -22,6 +23,9 @@ from . import (
22
23
  tools,
23
24
  types,
24
25
  )
26
+
27
+ with suppress(ImportError):
28
+ from . import mcp
25
29
  from .calls import call
26
30
  from .clients import ModelId, Params, Provider, client, get_client
27
31
  from .content import (
@@ -0,0 +1,47 @@
1
+ """Utilities for handling optional provider dependencies."""
2
+
3
+ from collections.abc import Callable
4
+
5
+
6
+ def create_import_error_stub(
7
+ package_name: str, client_name: str
8
+ ) -> Callable: # pragma: no cover
9
+ """Create a stub that raises ImportError when called.
10
+
11
+ Args:
12
+ package_name: The package/extra name (e.g., "anthropic", "openai", "google")
13
+ client_name: The client name for the error message (e.g., "AnthropicClient")
14
+
15
+ Returns:
16
+ A callable that raises `ImportError` with helpful message.
17
+ """
18
+
19
+ def _raise_not_installed() -> None:
20
+ raise ImportError(
21
+ f"The '{package_name}' package is required to use {client_name}. "
22
+ f"Install it with: `uv add 'mirascope[{package_name}]'`. "
23
+ "Or use `uv add 'mirascope[all]'` to support all providers."
24
+ )
25
+
26
+ return _raise_not_installed
27
+
28
+
29
+ def create_client_stub(package_name: str, client_name: str) -> type: # pragma: no cover
30
+ """Create a stub client class that raises ImportError when instantiated.
31
+
32
+ Args:
33
+ package_name: The package/extra name (e.g., "anthropic", "openai", "google")
34
+ client_name: The client name for the error message (e.g., "AnthropicClient")
35
+
36
+ Returns:
37
+ A stub class that raises `ImportError` on instantiation.
38
+ """
39
+ error_fn = create_import_error_stub(package_name, client_name)
40
+
41
+ class _ClientStub:
42
+ """Stub client that raises `ImportError` when instantiated."""
43
+
44
+ def __init__(self) -> None:
45
+ error_fn()
46
+
47
+ return _ClientStub
@@ -1,7 +1,21 @@
1
1
  """Anthropic client implementation."""
2
2
 
3
- from .clients import AnthropicClient, client, get_client
4
- from .model_ids import AnthropicModelId
3
+ from typing import TYPE_CHECKING, Any
4
+
5
+ if TYPE_CHECKING:
6
+ from .clients import AnthropicClient, client, get_client
7
+ from .model_ids import AnthropicModelId
8
+ else:
9
+ try:
10
+ from .clients import AnthropicClient, client, get_client
11
+ from .model_ids import AnthropicModelId
12
+ except ImportError: # pragma: no cover
13
+ from .._missing_import_stubs import create_client_stub, create_import_error_stub
14
+
15
+ AnthropicClient = create_client_stub("anthropic", "AnthropicClient")
16
+ AnthropicModelId = str
17
+ client = create_import_error_stub("anthropic", "AnthropicClient")
18
+ get_client = create_import_error_stub("anthropic", "AnthropicClient")
5
19
 
6
20
  __all__ = [
7
21
  "AnthropicClient",
@@ -1,6 +1,20 @@
1
1
  """Google client implementation."""
2
2
 
3
- from .clients import GoogleClient, client, get_client
4
- from .model_ids import GoogleModelId
3
+ from typing import TYPE_CHECKING
4
+
5
+ if TYPE_CHECKING:
6
+ from .clients import GoogleClient, client, get_client
7
+ from .model_ids import GoogleModelId
8
+ else:
9
+ try:
10
+ from .clients import GoogleClient, client, get_client
11
+ from .model_ids import GoogleModelId
12
+ except ImportError: # pragma: no cover
13
+ from .._missing_import_stubs import create_client_stub, create_import_error_stub
14
+
15
+ GoogleClient = create_client_stub("google", "GoogleClient")
16
+ GoogleModelId = str
17
+ client = create_import_error_stub("google", "GoogleClient")
18
+ get_client = create_import_error_stub("google", "GoogleClient")
5
19
 
6
20
  __all__ = ["GoogleClient", "GoogleModelId", "client", "get_client"]
@@ -1,5 +1,24 @@
1
- from .clients import OpenAICompletionsClient, client, get_client
2
- from .model_ids import OpenAICompletionsModelId
1
+ from typing import TYPE_CHECKING
2
+
3
+ if TYPE_CHECKING:
4
+ from .clients import OpenAICompletionsClient, client, get_client
5
+ from .model_ids import OpenAICompletionsModelId
6
+ else:
7
+ try:
8
+ from .clients import OpenAICompletionsClient, client, get_client
9
+ from .model_ids import OpenAICompletionsModelId
10
+ except ImportError: # pragma: no cover
11
+ from ..._missing_import_stubs import (
12
+ create_client_stub,
13
+ create_import_error_stub,
14
+ )
15
+
16
+ OpenAICompletionsClient = create_client_stub(
17
+ "openai", "OpenAICompletionsClient"
18
+ )
19
+ OpenAICompletionsModelId = str
20
+ client = create_import_error_stub("openai", "OpenAICompletionsClient")
21
+ get_client = create_import_error_stub("openai", "OpenAICompletionsClient")
3
22
 
4
23
  __all__ = [
5
24
  "OpenAICompletionsClient",
@@ -1,5 +1,22 @@
1
- from .clients import OpenAIResponsesClient, client, get_client
2
- from .model_ids import OpenAIResponsesModelId
1
+ from typing import TYPE_CHECKING
2
+
3
+ if TYPE_CHECKING:
4
+ from .clients import OpenAIResponsesClient, client, get_client
5
+ from .model_ids import OpenAIResponsesModelId
6
+ else:
7
+ try:
8
+ from .clients import OpenAIResponsesClient, client, get_client
9
+ from .model_ids import OpenAIResponsesModelId
10
+ except ImportError: # pragma: no cover
11
+ from ..._missing_import_stubs import (
12
+ create_client_stub,
13
+ create_import_error_stub,
14
+ )
15
+
16
+ OpenAIResponsesClient = create_client_stub("openai", "OpenAIResponsesClient")
17
+ OpenAIResponsesModelId = str
18
+ client = create_import_error_stub("openai", "OpenAIResponsesClient")
19
+ get_client = create_import_error_stub("openai", "OpenAIResponsesClient")
3
20
 
4
21
  __all__ = [
5
22
  "OpenAIResponsesClient",
@@ -20,14 +20,14 @@ class ToolDecorator:
20
20
  @overload
21
21
  def __call__( # pyright:ignore[reportOverlappingOverload]
22
22
  self, fn: ContextToolFn[DepsT, P, JsonableCovariantT]
23
- ) -> ContextTool[DepsT, P, JsonableCovariantT]:
23
+ ) -> ContextTool[DepsT, JsonableCovariantT, P]:
24
24
  """Call the decorator with a context function."""
25
25
  ...
26
26
 
27
27
  @overload
28
28
  def __call__( # pyright:ignore[reportOverlappingOverload]
29
29
  self, fn: AsyncContextToolFn[DepsT, P, JsonableCovariantT]
30
- ) -> AsyncContextTool[DepsT, P, JsonableCovariantT]:
30
+ ) -> AsyncContextTool[DepsT, JsonableCovariantT, P]:
31
31
  """Call the decorator with an async context function."""
32
32
  ...
33
33
 
@@ -52,8 +52,8 @@ class ToolDecorator:
52
52
  | ToolFn[P, JsonableCovariantT]
53
53
  | AsyncToolFn[P, JsonableCovariantT],
54
54
  ) -> (
55
- ContextTool[DepsT, P, JsonableCovariantT]
56
- | AsyncContextTool[DepsT, P, JsonableCovariantT]
55
+ ContextTool[DepsT, JsonableCovariantT, P]
56
+ | AsyncContextTool[DepsT, JsonableCovariantT, P]
57
57
  | Tool[P, JsonableCovariantT]
58
58
  | AsyncTool[P, JsonableCovariantT]
59
59
  ):
@@ -62,11 +62,11 @@ class ToolDecorator:
62
62
  is_async = _tool_utils.is_async_tool_fn(fn)
63
63
 
64
64
  if is_context and is_async:
65
- return AsyncContextTool[DepsT, P, JsonableCovariantT](
65
+ return AsyncContextTool[DepsT, JsonableCovariantT, P](
66
66
  fn, strict=self.strict
67
67
  )
68
68
  elif is_context:
69
- return ContextTool[DepsT, P, JsonableCovariantT](fn, strict=self.strict)
69
+ return ContextTool[DepsT, JsonableCovariantT, P](fn, strict=self.strict)
70
70
  elif is_async:
71
71
  return AsyncTool[P, JsonableCovariantT](fn, strict=self.strict)
72
72
  else:
@@ -76,7 +76,7 @@ class ToolDecorator:
76
76
  @overload
77
77
  def tool( # pyright:ignore[reportOverlappingOverload]
78
78
  __fn: AsyncContextToolFn[DepsT, P, JsonableCovariantT],
79
- ) -> AsyncContextTool[DepsT, P, JsonableCovariantT]:
79
+ ) -> AsyncContextTool[DepsT, JsonableCovariantT, P]:
80
80
  """Overload for async context tool functions."""
81
81
  ...
82
82
 
@@ -84,7 +84,7 @@ def tool( # pyright:ignore[reportOverlappingOverload]
84
84
  @overload
85
85
  def tool( # pyright:ignore[reportOverlappingOverload]
86
86
  __fn: ContextToolFn[DepsT, P, JsonableCovariantT],
87
- ) -> ContextTool[DepsT, P, JsonableCovariantT]:
87
+ ) -> ContextTool[DepsT, JsonableCovariantT, P]:
88
88
  """Overload for context tool functions."""
89
89
  ...
90
90
 
@@ -116,8 +116,8 @@ def tool(
116
116
  *,
117
117
  strict: bool = False,
118
118
  ) -> (
119
- ContextTool[DepsT, P, JsonableCovariantT]
120
- | AsyncContextTool[DepsT, P, JsonableCovariantT]
119
+ ContextTool[DepsT, JsonableCovariantT, P]
120
+ | AsyncContextTool[DepsT, JsonableCovariantT, P]
121
121
  | Tool[P, JsonableCovariantT]
122
122
  | AsyncTool[P, JsonableCovariantT]
123
123
  | ToolDecorator
@@ -89,7 +89,7 @@ class AsyncTool(
89
89
 
90
90
  class ContextTool(
91
91
  ToolSchema[ContextToolFn[DepsT, AnyP, JsonableCovariantT]],
92
- Generic[DepsT, AnyP, JsonableCovariantT],
92
+ Generic[DepsT, JsonableCovariantT, AnyP],
93
93
  ):
94
94
  """Protocol defining a tool that can be used by LLMs.
95
95
 
@@ -130,7 +130,7 @@ class ContextTool(
130
130
 
131
131
  class AsyncContextTool(
132
132
  ToolSchema[AsyncContextToolFn[DepsT, AnyP, JsonableCovariantT]],
133
- Generic[DepsT, AnyP, JsonableCovariantT],
133
+ Generic[DepsT, JsonableCovariantT, AnyP],
134
134
  ):
135
135
  """Protocol defining an async tool that can be used by LLMs with context.
136
136
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mirascope
3
- Version: 2.0.0a0
3
+ Version: 2.0.0a2
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/docs/mirascope/v2
@@ -40,13 +40,23 @@ Classifier: Programming Language :: Python :: 3.10
40
40
  Classifier: Programming Language :: Python :: 3.11
41
41
  Classifier: Programming Language :: Python :: 3.12
42
42
  Classifier: Programming Language :: Python :: 3.13
43
+ Classifier: Programming Language :: Python :: 3.14
43
44
  Classifier: Topic :: File Formats :: JSON
44
45
  Classifier: Topic :: File Formats :: JSON :: JSON Schema
45
46
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
46
47
  Classifier: Topic :: Software Development :: Libraries
47
48
  Requires-Python: >=3.10
48
49
  Requires-Dist: docstring-parser>=0.17.0
50
+ Requires-Dist: httpx>=0.27.0
51
+ Requires-Dist: pydantic>=2.0.0
49
52
  Requires-Dist: typing-extensions>=4.10.0
53
+ Provides-Extra: all
54
+ Requires-Dist: anthropic<1.0,>=0.72.0; extra == 'all'
55
+ Requires-Dist: google-genai<2,>=1.48.0; extra == 'all'
56
+ Requires-Dist: mcp<2,>=1.0.0; extra == 'all'
57
+ Requires-Dist: openai<3,>=2.7.1; extra == 'all'
58
+ Requires-Dist: pillow<11,>=10.4.0; extra == 'all'
59
+ Requires-Dist: proto-plus>=1.24.0; extra == 'all'
50
60
  Provides-Extra: anthropic
51
61
  Requires-Dist: anthropic<1.0,>=0.72.0; extra == 'anthropic'
52
62
  Provides-Extra: google
@@ -1,7 +1,7 @@
1
1
  mirascope/__init__.py,sha256=wKvhFqB-FAf_Fxi1_pEenLRUK-QGMbhlsY5aPGc0lug,98
2
2
  mirascope/graphs/__init__.py,sha256=fkZHjSt6DvJAX-V3OCnDO7B1zJx5gv1Qp2G6P32wI7I,1086
3
3
  mirascope/graphs/finite_state_machine.py,sha256=9j8kwQ6Ne3o-auP0KVdoA0hzW2txfM1wH3GSSnbZOyg,23261
4
- mirascope/llm/__init__.py,sha256=qHerzIANTngmc1aXg_ga9S7dEY7rRj83e5Z61ObAdN4,4420
4
+ mirascope/llm/__init__.py,sha256=rB8y7UB95NjsizaDGEAzgNstV9fFlt89HJ0SjyAGLg4,4495
5
5
  mirascope/llm/exceptions.py,sha256=30yPPCIr8Uwibqpt2Y0cDMsimVlQubAmjqbeO5kVpSA,3090
6
6
  mirascope/llm/agents/__init__.py,sha256=aG5ymnBfa4ZFLfGPZjdXybwjC3lrlkkeLjKfx2Zzr0Q,363
7
7
  mirascope/llm/agents/agent.py,sha256=obACeIZuD8FIUaZL_NF0u5GNeaxRpbyNb9PNipyYIZE,2959
@@ -12,8 +12,9 @@ mirascope/llm/calls/base_call.py,sha256=ghD8__Uw-RpL-TWI1zShThWugXmZCiEA2tLsZ-XH
12
12
  mirascope/llm/calls/calls.py,sha256=R2hEGVsOHkZlBKcp4CvfssXABoLiIj9aKu80qrx6Ta4,9867
13
13
  mirascope/llm/calls/decorator.py,sha256=77JLc1xIotl7dWxzyz5xYeKIRu8ykMxZ40yj9MNd79c,7472
14
14
  mirascope/llm/clients/__init__.py,sha256=L00p7Kfk1gu8hSLXz3dvn3y0ku0rG6vPxq2vxRoukJI,770
15
+ mirascope/llm/clients/_missing_import_stubs.py,sha256=KKTd_CVhUOZLTm8Slt2U-C94VN5N8mm2x89rKhmzdoI,1550
15
16
  mirascope/llm/clients/providers.py,sha256=GwZldKYXGaTPbkbAbGlCYyl2-CuR1dnz4smZGblyfqc,5095
16
- mirascope/llm/clients/anthropic/__init__.py,sha256=wSYwKLkASUQHEsIjvuMSQHIZ6mhdyOymmzb3clL8SlU,231
17
+ mirascope/llm/clients/anthropic/__init__.py,sha256=9V6UiDGuSXRJgkrbOHP9KW7KFHVb4Z_CMON2n8h-U6M,818
17
18
  mirascope/llm/clients/anthropic/clients.py,sha256=8Z1Ol8V-JwCxefT2mQYUrfduliES2Yvk88hyM4GCNvc,27460
18
19
  mirascope/llm/clients/anthropic/model_ids.py,sha256=0vp-nhDCYMw_3sKFD_tQO2FRlW8QzKiwXKBQ_lEv0yo,197
19
20
  mirascope/llm/clients/anthropic/_utils/__init__.py,sha256=U2VNfEJCaqorAJBZDV7p3rFEp1fyk7vSitYFv_5G5Cs,232
@@ -24,7 +25,7 @@ mirascope/llm/clients/base/_utils.py,sha256=JyVXkbsHgOD_CnCNkq-aVdSmD4me0M40NPsd
24
25
  mirascope/llm/clients/base/client.py,sha256=ffgxwMJ2vmbUB-KKzPwpgumzmGT2IhIr1yGqxYt9oBk,42258
25
26
  mirascope/llm/clients/base/kwargs.py,sha256=pjaHVqtlmScUBqG8ZAllVaLoepdKE-KYl2eTqzOBXm0,406
26
27
  mirascope/llm/clients/base/params.py,sha256=x2WLz0s5rMZ3u3GBGQmRlYGjecePtsLglHSJBLh35YE,3670
27
- mirascope/llm/clients/google/__init__.py,sha256=nrUGqVqbUmhi1Y3MNfbmp5ItooNHEV2D3cUNhyeRH_U,197
28
+ mirascope/llm/clients/google/__init__.py,sha256=Wsf-AfbFJ5kD-encD776uhjcINJV30NaDKhXpV_GZ-U,749
28
29
  mirascope/llm/clients/google/clients.py,sha256=rsWJV5kfwh93RSRE6x45wnBhnP122mLCCuOdy1cD2u4,28073
29
30
  mirascope/llm/clients/google/message.py,sha256=ryNsMKPSyBSVXl_H0MQEaSiWC3FFybjxIUuORNSiKTk,179
30
31
  mirascope/llm/clients/google/model_ids.py,sha256=zJe9IAX4DIO6JXeTksAx77nwtlz1k2aO0YcJHsNpRx4,338
@@ -32,14 +33,14 @@ mirascope/llm/clients/google/_utils/__init__.py,sha256=U2VNfEJCaqorAJBZDV7p3rFEp
32
33
  mirascope/llm/clients/google/_utils/decode.py,sha256=z__aZLIL130nCVV5CdAJPTiaCSw61mCrItTHVDffkQQ,9007
33
34
  mirascope/llm/clients/google/_utils/encode.py,sha256=XFaRCzMQlUW3sm949pc-rPTavDgxSIjrxOllJ8KgR3k,10482
34
35
  mirascope/llm/clients/openai/__init__.py,sha256=LkD4Kkxc-dnpR_K5f539xSfqEaXE1vioDcW7suOJhJE,600
35
- mirascope/llm/clients/openai/completions/__init__.py,sha256=mdDQfZ0WI0tOH4OUrbnNBIe1kyqdj3y0r4q3LIwr4Os,223
36
+ mirascope/llm/clients/openai/completions/__init__.py,sha256=KUymq4dY6LiOdTLCMctmi2n9DiwGbfL_7K2Ha-AjnIE,912
36
37
  mirascope/llm/clients/openai/completions/clients.py,sha256=GjfNV1ewRi1ADgsP0t5cxPdQUWyN65gRSPzDJFMhApg,28086
37
38
  mirascope/llm/clients/openai/completions/model_ids.py,sha256=bno8SND8YbzoQE3Tjh9dxYo04luDILD3ndzQvgL5pAg,243
38
39
  mirascope/llm/clients/openai/completions/_utils/__init__.py,sha256=U2VNfEJCaqorAJBZDV7p3rFEp1fyk7vSitYFv_5G5Cs,232
39
40
  mirascope/llm/clients/openai/completions/_utils/decode.py,sha256=yiXPQwL33YNVxIZAABohqSO3ElEtiShVSki8fPQWf0A,6539
40
41
  mirascope/llm/clients/openai/completions/_utils/encode.py,sha256=q2jP8By9TUiv66-oJpWZddn709ZRIGkXniSPTxLR2Co,13227
41
42
  mirascope/llm/clients/openai/completions/_utils/model_features.py,sha256=iIm0uxNNfYOJ4qn1wmZjNrkCXNJK5czOPmn5UVBIjz4,3397
42
- mirascope/llm/clients/openai/responses/__init__.py,sha256=PofDWzyxz__hD1AaHn2hQkIPs7xxyiBcgDoCl39Tlq4,215
43
+ mirascope/llm/clients/openai/responses/__init__.py,sha256=qecYX7X20HJ_n2Elmo2SkF5SuxkuLmpJjUhe0M2ual8,868
43
44
  mirascope/llm/clients/openai/responses/clients.py,sha256=dMIdp-Ua_stFAtT99gDp89woUyLyWShO4aAz8G_2nog,27627
44
45
  mirascope/llm/clients/openai/responses/model_ids.py,sha256=30OQ8wnIVp6A3I4NsTPBLqfi-SB5dhzyB7ic5p_XXhg,239
45
46
  mirascope/llm/clients/openai/responses/_utils/__init__.py,sha256=U2VNfEJCaqorAJBZDV7p3rFEp1fyk7vSitYFv_5G5Cs,232
@@ -86,16 +87,16 @@ mirascope/llm/responses/stream_response.py,sha256=g8hGoKL94intm5w5mOpAh2QAH1eiCb
86
87
  mirascope/llm/responses/streams.py,sha256=TmEFvLVEWHfVYplik61yUWisxe8JGbaZdh7yC7e-axI,10789
87
88
  mirascope/llm/tools/__init__.py,sha256=3xIhEzpLlTkuDuvkfwVy3gLPRTTJCJH5GKkqCGjgo3A,772
88
89
  mirascope/llm/tools/_utils.py,sha256=bBVsZs8SywWspVGBGR7GGuhSmGa5-wCzeXGV6Woof9Q,872
89
- mirascope/llm/tools/decorator.py,sha256=kZ90qrE7jZHcW5fg3O-SOh6xiI6yjT4fz548e4AxvQc,5326
90
+ mirascope/llm/tools/decorator.py,sha256=1K-67dJkjCOS1rHAM91lOT8XfShTw54QA-TMEok5eH0,5326
90
91
  mirascope/llm/tools/protocols.py,sha256=VubSZm-N2QEnBzFTsnj4pRtIgJOx2GQWM4IyqZjDk1Q,3054
91
92
  mirascope/llm/tools/tool_schema.py,sha256=vFGVNOa8ZrE6gnwelBcPKYK7-0ULqVtlr1oXZsbVxKY,8358
92
93
  mirascope/llm/tools/toolkit.py,sha256=pGXchFSO2H7PxFM2sPQYEMDAYHNaX9bhGEyyou_4vsg,4900
93
- mirascope/llm/tools/tools.py,sha256=AEgTEZoRTxictYxPDxdX18_Ho2sD8SIa-LUTngNHPiM,5972
94
+ mirascope/llm/tools/tools.py,sha256=7RD69pdEjZVjQz8VpegOmixz09Wq2CXotcyI34hA7cQ,5972
94
95
  mirascope/llm/types/__init__.py,sha256=lqzi1FkZ-s-D9-KQzVkAHuQQ1zp6B6yM3r9UNo46teE,357
95
96
  mirascope/llm/types/dataclass.py,sha256=y4_9M3Yqw_4I-H0V4TwvgGIp6JvRdtpW11NxqufnsJk,247
96
97
  mirascope/llm/types/jsonable.py,sha256=KY6l21_RBhlHQRXQ_xy6pUqqbTVb_jVFSU4ykRy_OLU,1104
97
98
  mirascope/llm/types/type_vars.py,sha256=OsAcQAZh5T_X8ZTLlP4GC1x3qgVY9rfYSnME8aMTDxw,642
98
- mirascope-2.0.0a0.dist-info/METADATA,sha256=FySDVeLpjaHcLhgRrb12tjVMSLxojbv7AFcnJObI0XU,5035
99
- mirascope-2.0.0a0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
100
- mirascope-2.0.0a0.dist-info/licenses/LICENSE,sha256=LAs5Q8mdawTsVdONpDGukwsoc4KEUBmmonDEL39b23Y,1072
101
- mirascope-2.0.0a0.dist-info/RECORD,,
99
+ mirascope-2.0.0a2.dist-info/METADATA,sha256=GKHQgnkZlGO2uYH2GvKT4e9ReNf0QuptJXe4GVJIz_o,5468
100
+ mirascope-2.0.0a2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
101
+ mirascope-2.0.0a2.dist-info/licenses/LICENSE,sha256=LAs5Q8mdawTsVdONpDGukwsoc4KEUBmmonDEL39b23Y,1072
102
+ mirascope-2.0.0a2.dist-info/RECORD,,