fabricatio 0.2.7.dev0__cp39-cp39-win_amd64.whl → 0.2.7.dev1__cp39-cp39-win_amd64.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.
@@ -10,6 +10,7 @@ from fabricatio._rust_instances import TEMPLATE_MANAGER
10
10
  from fabricatio.config import configs
11
11
  from fabricatio.fs.readers import MAGIKA, safe_text_read
12
12
  from fabricatio.journal import logger
13
+ from fabricatio.models.utils import ok
13
14
  from fabricatio.parser import JsonCapture
14
15
  from pydantic import (
15
16
  BaseModel,
@@ -19,6 +20,7 @@ from pydantic import (
19
20
  NonNegativeFloat,
20
21
  PositiveFloat,
21
22
  PositiveInt,
23
+ PrivateAttr,
22
24
  SecretStr,
23
25
  )
24
26
 
@@ -63,6 +65,44 @@ class Described(Base):
63
65
  """The description of the object."""
64
66
 
65
67
 
68
+ class AsPrompt(Base):
69
+ """Class that provides a method to generate a prompt from the model."""
70
+
71
+ @final
72
+ def as_prompt(self) -> str:
73
+ """Generate a prompt from the model.
74
+
75
+ Returns:
76
+ str: The generated prompt.
77
+ """
78
+ return TEMPLATE_MANAGER.render_template(
79
+ configs.templates.as_prompt_template,
80
+ self._as_prompt_inner(),
81
+ )
82
+
83
+ @abstractmethod
84
+ def _as_prompt_inner(self) -> Dict[str, str]: ...
85
+
86
+
87
+ class WithRef[T](Base):
88
+ """Class that provides a reference to another object."""
89
+
90
+ _reference: Optional[T] = PrivateAttr(None)
91
+
92
+ @property
93
+ def referenced(self) -> T:
94
+ """Get the referenced object."""
95
+ return ok(self._reference, "_reference is None")
96
+
97
+ def update_ref(self, reference: T | Self) -> Self:
98
+ """Update the reference of the object."""
99
+ if isinstance(reference, self.__class__):
100
+ self._reference = reference.referenced
101
+ else:
102
+ self._reference = reference
103
+ return self
104
+
105
+
66
106
  class WithBriefing(Named, Described):
67
107
  """Class that provides a briefing based on the name and description."""
68
108
 
@@ -75,17 +115,26 @@ class WithBriefing(Named, Described):
75
115
  """
76
116
  return f"{self.name}: {self.description}" if self.description else self.name
77
117
 
78
- def prepend[D: Dict[str, Any]](self, kwargs: D) -> D:
79
- """Prepend the briefing to the system message in the kwargs.
118
+ def _prepend_inner(self, input_text: str) -> str:
119
+ return f"# your personal briefing: \n{self.briefing}\n{input_text}"
120
+
121
+ def prepend_sys_msg[D: (Dict[str, Any], str)](self, system_msg_like: D = "") -> Dict[str, Any]:
122
+ """Prepend the system message with the briefing.
80
123
 
81
124
  Args:
82
- kwargs (Dict[str, Any]): The keyword arguments to modify.
125
+ system_msg_like (str | dict): The system message or a dictionary containing the system message.
83
126
 
84
127
  Returns:
85
- Dict[str, Any]: The modified keyword arguments.
128
+ dict: The system message with the briefing prepended.
86
129
  """
87
- kwargs["system_message"] = f"# your personal briefing: \n{self.briefing}\n" + kwargs.get("system_message", "")
88
- return kwargs
130
+ match system_msg_like:
131
+ case dict(d):
132
+ d["system_message"] = self._prepend_inner(d.get("system_message", ""))
133
+ return d
134
+ case str(s):
135
+ return {"system_message": self._prepend_inner(s)}
136
+ case _:
137
+ raise TypeError(f"{system_msg_like} is not a dict or str")
89
138
 
90
139
 
91
140
  class WithFormatedJsonSchema(Base):
@@ -158,19 +207,17 @@ class InstantiateFromString(Base):
158
207
  class ProposedAble(CreateJsonObjPrompt, InstantiateFromString):
159
208
  """Class that provides a method to propose a JSON object based on the requirement."""
160
209
 
161
- pass
162
-
163
210
 
164
211
  class FinalizedDumpAble(Base):
165
212
  """Class that provides a method to finalize the dump of the object."""
166
213
 
167
- @abstractmethod
168
214
  def finalized_dump(self) -> str:
169
215
  """Finalize the dump of the object.
170
216
 
171
217
  Returns:
172
218
  str: The finalized dump of the object.
173
219
  """
220
+ return self.model_dump_json()
174
221
 
175
222
  def finalized_dump_to(self, path: str | Path) -> Self:
176
223
  """Finalize the dump of the object to a file.
@@ -185,6 +232,10 @@ class FinalizedDumpAble(Base):
185
232
  return self
186
233
 
187
234
 
235
+ class CensoredAble(ProposedAble, FinalizedDumpAble):
236
+ """Class that provides a method to censor the object."""
237
+
238
+
188
239
  class WithDependency(Base):
189
240
  """Class that manages file dependencies."""
190
241
 
@@ -38,6 +38,12 @@ class FetchKwargs(TypedDict, total=False):
38
38
  result_per_query: int
39
39
 
40
40
 
41
+ class RetrievalKwargs(FetchKwargs, total=False):
42
+ """Arguments for retrieval operations."""
43
+
44
+ final_limit: int
45
+
46
+
41
47
  class EmbeddingKwargs(TypedDict, total=False):
42
48
  """Configuration parameters for text embedding operations.
43
49
 
@@ -94,8 +100,14 @@ class ValidateKwargs[T](GenerateKwargs, total=False):
94
100
  co_extractor: GenerateKwargs
95
101
 
96
102
 
103
+ class ReviewInnerKwargs[T](ValidateKwargs[T], total=False):
104
+ """Arguments for content review operations."""
105
+
106
+ criteria: set[str]
107
+
108
+
97
109
  # noinspection PyTypedDict
98
- class ReviewKwargs[T](ValidateKwargs[T], total=False):
110
+ class ReviewKwargs[T](ReviewInnerKwargs[T], total=False):
99
111
  """Arguments for content review operations.
100
112
 
101
113
  Extends GenerateKwargs with parameters for evaluating content against
@@ -103,7 +115,6 @@ class ReviewKwargs[T](ValidateKwargs[T], total=False):
103
115
  """
104
116
 
105
117
  topic: Required[str]
106
- criteria: set[str]
107
118
 
108
119
 
109
120
  class CorrectKwargs[T](ReviewKwargs[T], total=False):
@@ -117,6 +128,13 @@ class CorrectKwargs[T](ReviewKwargs[T], total=False):
117
128
  supervisor_check: bool
118
129
 
119
130
 
131
+ class CensoredCorrectKwargs[T](ReviewInnerKwargs[T], total=False):
132
+ """Arguments for content censorship operations."""
133
+
134
+ reference: str
135
+ supervisor_check: bool
136
+
137
+
120
138
  # noinspection PyTypedDict
121
139
  class ChooseKwargs[T](ValidateKwargs[T], total=False):
122
140
  """Arguments for selection operations.
@@ -23,7 +23,7 @@ from litellm.types.utils import (
23
23
  StreamingChoices,
24
24
  TextChoices,
25
25
  )
26
- from litellm.utils import CustomStreamWrapper # pyright: ignore [reportPrivateImportUsage]
26
+ from litellm.utils import CustomStreamWrapper, token_counter # pyright: ignore [reportPrivateImportUsage]
27
27
  from more_itertools import duplicates_everseen
28
28
  from pydantic import Field, NonNegativeInt, PositiveInt
29
29
 
@@ -118,6 +118,7 @@ class LLMUsage(ScopedConfig):
118
118
  question: str,
119
119
  system_message: str = "",
120
120
  n: PositiveInt | None = None,
121
+ stream_buffer_size: int = 50,
121
122
  **kwargs: Unpack[LLMKwargs],
122
123
  ) -> Sequence[TextChoices | Choices | StreamingChoices]:
123
124
  """Asynchronously invokes the language model with a question and optional system message.
@@ -126,6 +127,7 @@ class LLMUsage(ScopedConfig):
126
127
  question (str): The question to ask the model.
127
128
  system_message (str): The system message to provide context to the model. Defaults to an empty string.
128
129
  n (PositiveInt | None): The number of responses to generate. Defaults to the instance's `llm_generation_count` or the global configuration.
130
+ stream_buffer_size (int): The buffer size for streaming responses. Defaults to 50.
129
131
  **kwargs (Unpack[LLMKwargs]): Additional keyword arguments for the LLM usage.
130
132
 
131
133
  Returns:
@@ -142,9 +144,13 @@ class LLMUsage(ScopedConfig):
142
144
  if not configs.debug.streaming_visible and (pack := stream_chunk_builder(await asyncstdlib.list())):
143
145
  return pack.choices
144
146
  chunks = []
147
+ buffer = ""
145
148
  async for chunk in resp:
146
149
  chunks.append(chunk)
147
- print(chunk.choices[0].delta.content or "", end="") # noqa: T201
150
+ buffer += chunk.choices[0].delta.content or ""
151
+ if len(buffer) % stream_buffer_size == 0:
152
+ print(buffer, end="") # noqa: T201
153
+ buffer = ""
148
154
  if pack := stream_chunk_builder(chunks):
149
155
  return pack.choices
150
156
  logger.critical(err := f"Unexpected response type: {type(resp)}")
@@ -196,8 +202,7 @@ class LLMUsage(ScopedConfig):
196
202
  Returns:
197
203
  str | List[str]: The content of the model's response message.
198
204
  """
199
- system_message = system_message or ""
200
- match (question, system_message):
205
+ match (question, system_message or ""):
201
206
  case (list(q_seq), list(sm_seq)):
202
207
  res = await gather(
203
208
  *[
@@ -205,18 +210,23 @@ class LLMUsage(ScopedConfig):
205
210
  for q, sm in zip(q_seq, sm_seq, strict=True)
206
211
  ]
207
212
  )
208
- return [r[0].message.content for r in res] # pyright: ignore [reportReturnType, reportAttributeAccessIssue]
213
+ out = [r[0].message.content for r in res] # pyright: ignore [reportAttributeAccessIssue]
209
214
  case (list(q_seq), str(sm)):
210
215
  res = await gather(*[self.ainvoke(n=1, question=q, system_message=sm, **kwargs) for q in q_seq])
211
- return [r[0].message.content for r in res] # pyright: ignore [reportReturnType, reportAttributeAccessIssue]
216
+ out = [r[0].message.content for r in res] # pyright: ignore [reportAttributeAccessIssue]
212
217
  case (str(q), list(sm_seq)):
213
218
  res = await gather(*[self.ainvoke(n=1, question=q, system_message=sm, **kwargs) for sm in sm_seq])
214
- return [r[0].message.content for r in res] # pyright: ignore [reportReturnType, reportAttributeAccessIssue]
219
+ out = [r[0].message.content for r in res] # pyright: ignore [reportAttributeAccessIssue]
215
220
  case (str(q), str(sm)):
216
- return ((await self.ainvoke(n=1, question=q, system_message=sm, **kwargs))[0]).message.content # pyright: ignore [reportReturnType, reportAttributeAccessIssue]
221
+ out = ((await self.ainvoke(n=1, question=q, system_message=sm, **kwargs))[0]).message.content # pyright: ignore [reportAttributeAccessIssue]
217
222
  case _:
218
223
  raise RuntimeError("Should not reach here.")
219
224
 
225
+ logger.debug(
226
+ f"Response Token Count: {token_counter(text=out) if isinstance(out, str) else sum(token_counter(text=o) for o in out)}" # pyright: ignore [reportOptionalIterable]
227
+ )
228
+ return out # pyright: ignore [reportReturnType]
229
+
220
230
  @overload
221
231
  async def aask_validate[T](
222
232
  self,
@@ -286,26 +296,26 @@ class LLMUsage(ScopedConfig):
286
296
  async def _inner(q: str) -> Optional[T]:
287
297
  for lap in range(max_validations):
288
298
  try:
289
- if (response := await self.aask(question=q, **kwargs)) and (validated := validator(response)):
290
- logger.debug(f"Successfully validated the response at {lap}th attempt.")
291
- return validated
292
-
293
- if co_extractor and (
294
- (
295
- co_response := await self.aask(
296
- question=(
297
- TEMPLATE_MANAGER.render_template(
298
- configs.templates.co_validation_template,
299
- {"original_q": q, "original_a": response},
300
- )
301
- ),
302
- **co_extractor,
299
+ if (
300
+ (response := await self.aask(question=q, **kwargs))
301
+ or (
302
+ co_extractor
303
+ and (
304
+ response := await self.aask(
305
+ question=(
306
+ TEMPLATE_MANAGER.render_template(
307
+ configs.templates.co_validation_template,
308
+ {"original_q": q, "original_a": response},
309
+ )
310
+ ),
311
+ **co_extractor,
312
+ )
303
313
  )
304
314
  )
305
- and (validated := validator(co_response))
306
- ):
307
- logger.debug(f"Successfully validated the co-response at {lap}th attempt.")
315
+ ) and (validated := validator(response)):
316
+ logger.debug(f"Successfully validated the response at {lap}th attempt.")
308
317
  return validated
318
+
309
319
  except RateLimitError as e:
310
320
  logger.warning(f"Rate limit error: {e}")
311
321
  continue
@@ -319,10 +329,7 @@ class LLMUsage(ScopedConfig):
319
329
  logger.error(f"Failed to validate the response after {max_validations} attempts.")
320
330
  return default
321
331
 
322
- if isinstance(question, str):
323
- return await _inner(question)
324
-
325
- return await gather(*[_inner(q) for q in question])
332
+ return await (gather(*[_inner(q) for q in question]) if isinstance(question, list) else _inner(question))
326
333
 
327
334
  async def aliststr(
328
335
  self, requirement: str, k: NonNegativeInt = 0, **kwargs: Unpack[ValidateKwargs[List[str]]]
@@ -364,7 +371,7 @@ class LLMUsage(ScopedConfig):
364
371
  **kwargs,
365
372
  )
366
373
 
367
- async def awhich_pathstr(self, requirement: str, **kwargs: Unpack[ValidateKwargs[List[str]]]) -> str:
374
+ async def awhich_pathstr(self, requirement: str, **kwargs: Unpack[ValidateKwargs[List[str]]]) -> Optional[str]:
368
375
  """Asynchronously generates a single path string based on a given requirement.
369
376
 
370
377
  Args:
@@ -374,13 +381,14 @@ class LLMUsage(ScopedConfig):
374
381
  Returns:
375
382
  str: The validated response as a single string.
376
383
  """
377
- return ok(
378
- await self.apathstr(
379
- requirement,
380
- k=1,
381
- **kwargs,
382
- )
383
- ).pop()
384
+ if paths := await self.apathstr(
385
+ requirement,
386
+ k=1,
387
+ **kwargs,
388
+ ):
389
+ return paths.pop()
390
+
391
+ return None
384
392
 
385
393
  async def ageneric_string(self, requirement: str, **kwargs: Unpack[ValidateKwargs[str]]) -> Optional[str]:
386
394
  """Asynchronously generates a generic string based on a given requirement.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fabricatio
3
- Version: 0.2.7.dev0
3
+ Version: 0.2.7.dev1
4
4
  Classifier: License :: OSI Approved :: MIT License
5
5
  Classifier: Programming Language :: Rust
6
6
  Classifier: Programming Language :: Python :: 3.12
@@ -24,9 +24,13 @@ Requires-Dist: questionary>=2.1.0
24
24
  Requires-Dist: regex>=2024.11.6
25
25
  Requires-Dist: rich>=13.9.4
26
26
  Requires-Dist: pymilvus>=2.5.4 ; extra == 'rag'
27
- Requires-Dist: fabricatio[rag] ; extra == 'full'
27
+ Requires-Dist: fabricatio[calc,plot,rag] ; extra == 'full'
28
+ Requires-Dist: sympy>=1.13.3 ; extra == 'calc'
29
+ Requires-Dist: matplotlib>=3.10.1 ; extra == 'plot'
28
30
  Provides-Extra: rag
29
31
  Provides-Extra: full
32
+ Provides-Extra: calc
33
+ Provides-Extra: plot
30
34
  License-File: LICENSE
31
35
  Summary: A LLM multi-agent framework.
32
36
  Keywords: ai,agents,multi-agent,llm,pyo3
@@ -1,16 +1,16 @@
1
- fabricatio-0.2.7.dev0.dist-info/METADATA,sha256=UGoqkmyaQYHhvOsskZl8ReMV59mpzz--X3w0sbYKhW0,14085
2
- fabricatio-0.2.7.dev0.dist-info/WHEEL,sha256=mDFV3bKFgwlxLHvOsPqpR9up9dUKYzsUQNKBdkW5c08,94
3
- fabricatio-0.2.7.dev0.dist-info/licenses/LICENSE,sha256=do7J7EiCGbq0QPbMAL_FqLYufXpHnCnXBOuqVPwSV8Y,1088
4
- fabricatio/actions/article.py,sha256=c2dKJIQiyhF2UJOVQMSzTJs8ykY4j_secTxyhem4ldI,4553
5
- fabricatio/actions/output.py,sha256=KSSLvEvXsA10ACN2mbqGo98QwKLVUAoMUJNKYk6HhGc,645
1
+ fabricatio-0.2.7.dev1.dist-info/METADATA,sha256=rbtzXxw7C4TQhFkrr8L-0M_EbrmJV3VKDgJEMX5ewgs,14236
2
+ fabricatio-0.2.7.dev1.dist-info/WHEEL,sha256=mDFV3bKFgwlxLHvOsPqpR9up9dUKYzsUQNKBdkW5c08,94
3
+ fabricatio-0.2.7.dev1.dist-info/licenses/LICENSE,sha256=do7J7EiCGbq0QPbMAL_FqLYufXpHnCnXBOuqVPwSV8Y,1088
4
+ fabricatio/actions/article.py,sha256=m35NoNcnc2vPnAT9Ya3xtBFTUr52K8ymqPUSq6AQDpQ,5309
5
+ fabricatio/actions/output.py,sha256=K7xsBH8MjXRH6JOy3ZO94KCQzX2jNrwPPK_rRXVkS0E,1161
6
6
  fabricatio/actions/rag.py,sha256=QBdzEM8MloM_ahx5pTBZAETm9_631lTe_0ih_he_Iuo,2759
7
- fabricatio/capabilities/correct.py,sha256=rrz1ItQ2KlxbGCpUJ14AsX2_IPan9PthuDbt59XRyWk,5226
7
+ fabricatio/capabilities/correct.py,sha256=8GOU2VBPUakjG-r59SqsCgCD0QHX-l__IynCLO-ib8Q,6482
8
8
  fabricatio/capabilities/propose.py,sha256=y3kge5g6bb8HYuV8e9h4MdqOMTlsfAIZpqE_cagWPTY,1593
9
- fabricatio/capabilities/rag.py,sha256=2SG_O1qkUeYAS5hy3FsgKFtyuaAGHseSflZYL3-2hB0,16461
10
- fabricatio/capabilities/rating.py,sha256=R9otyZVE2E3kKxrOCTZMeesBCPbC-fSb7bXgZPMQzfU,14406
9
+ fabricatio/capabilities/rag.py,sha256=XVvfH6rcog-moj1WCgwtR-l0-NdbFR6-fMQFLG7_asY,17690
10
+ fabricatio/capabilities/rating.py,sha256=vzEWOjGXmcZcw-bHtOWba0VojONU1Toy015o9H42RLQ,14438
11
11
  fabricatio/capabilities/review.py,sha256=zETLiWBU0sJ_xHGyDMpTIItofaEieLyv0eSZGqEjDT4,11106
12
- fabricatio/capabilities/task.py,sha256=UN-Ft4A8x2qGRFA3FQDkJ18p7mFizlBGpGHclfCOqxA,4623
13
- fabricatio/config.py,sha256=3lIblK-aEjdwQkTVYRDm8_u3xinjsn6NudFspNn2cp4,16757
12
+ fabricatio/capabilities/task.py,sha256=vtS0YOe639vN8iTrkP2WK0AJVCr5N_JAaJuvRGyY2Fg,4639
13
+ fabricatio/config.py,sha256=hUv5XMzOkEw8cQjsVHTpPPix52IKwmxjBsZM6Px3xZI,16915
14
14
  fabricatio/core.py,sha256=VQ_JKgUGIy2gZ8xsTBZCdr_IP7wC5aPg0_bsOmjQ588,6458
15
15
  fabricatio/decorators.py,sha256=uzsP4tFKQNjDHBkofsjjoJA0IUAaYOtt6YVedoyOqlo,6551
16
16
  fabricatio/fs/curd.py,sha256=N6l2MncjrFfnXBRtteRouXp5Rjy8EAKC_i29_G-zz98,4618
@@ -19,13 +19,13 @@ fabricatio/fs/__init__.py,sha256=PCf0s_9KDjVfNw7AfPoJzGt3jMq4gJOfbcT4pb0D0ZY,588
19
19
  fabricatio/journal.py,sha256=stnEP88aUBA_GmU9gfTF2EZI8FS2OyMLGaMSTgK4QgA,476
20
20
  fabricatio/models/action.py,sha256=6gffWv8NKw5HwtbmNimWfD5AZqQRzBV-PgAICHq7ZYU,8608
21
21
  fabricatio/models/events.py,sha256=QvlnS8FEELg6KNabcJMeh2GV_y0ZBzKOPphcteKYWYU,4183
22
- fabricatio/models/extra.py,sha256=inW8q3axFtn_NBNJsb29wjadsczBesT87SYju_g2e1E,27776
23
- fabricatio/models/generic.py,sha256=IdPJMf3qxZFq8yqd6OuAYKfCM0wBlJkozgxvxQZVEEc,14025
24
- fabricatio/models/kwargs_types.py,sha256=H6DI3Jdben-FER_kx7owiRzmbSFKuu0sFjCADA1LJB0,5008
22
+ fabricatio/models/extra.py,sha256=QuN4pv80DApjzU1Jny03Dib8bu7ff5YXZs7yMzVhH30,28176
23
+ fabricatio/models/generic.py,sha256=vS7klUD4FMsRfdwWCskN0qtsEGcNUAQGJwp6dMvFHjU,15715
24
+ fabricatio/models/kwargs_types.py,sha256=J8Ct2_toefwehGfPi6ttSPd2AvqnZXpKGNZdhhv1UuA,5433
25
25
  fabricatio/models/role.py,sha256=mmQbJ6GKr2Gx3wtjEz8d-vYoXs09ffcEkT_eCXaDd3E,2782
26
26
  fabricatio/models/task.py,sha256=8NaR7ojQWyM740EDTqt9stwHKdrD6axCRpLKo0QzS-I,10492
27
27
  fabricatio/models/tool.py,sha256=kD0eB7OxO9geZOxO6JIKvCBeG-KOpRAkfRZqK_WGfW4,7105
28
- fabricatio/models/usages.py,sha256=yHEMi7xSRvv3RqIynIf3HtlWtbmnWT9DSC9V0sVlCQ8,31086
28
+ fabricatio/models/usages.py,sha256=LvU3Zfy3TZp6dwxWczRw9sb2c7xleqhsGscZ9gymf_0,31453
29
29
  fabricatio/models/utils.py,sha256=NyIS82Gex4Q9qs6pzys5HplQ6JJXOLJBj4OkMPZYioc,5910
30
30
  fabricatio/parser.py,sha256=9Jzw-yV6uKbFvf6sPna-XHdziVGVBZWvPctgX_6ODL8,6251
31
31
  fabricatio/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -34,9 +34,9 @@ fabricatio/toolboxes/fs.py,sha256=l4L1CVxJmjw9Ld2XUpIlWfV0_Fu_2Og6d3E13I-S4aE,73
34
34
  fabricatio/toolboxes/__init__.py,sha256=KBJi5OG_pExscdlM7Bnt_UF43j4I3Lv6G71kPVu4KQU,395
35
35
  fabricatio/workflows/articles.py,sha256=G5HGRr-DHuYuEcfhFdFAuDvTTJ9aSU_UQ2yYXEjTMtM,1047
36
36
  fabricatio/workflows/rag.py,sha256=-YYp2tlE9Vtfgpg6ROpu6QVO8j8yVSPa6yDzlN3qVxs,520
37
- fabricatio/_rust.pyi,sha256=eawBfpyGrB-JtOh4I6RSbjFSq83SSl-0syBeZ-g8270,3491
37
+ fabricatio/_rust.pyi,sha256=dGTGV7viu3YAGl1cRKIWrdHPc1hlwk3_hbaDaswxdVo,3831
38
38
  fabricatio/_rust_instances.py,sha256=2GwF8aVfYNemRI2feBzH1CZfBGno-XJJE5imJokGEYw,314
39
39
  fabricatio/__init__.py,sha256=SzBYsRhZeL77jLtfJEjmoHOSwHwUGyvMATX6xfndLDM,1135
40
- fabricatio/_rust.cp39-win_amd64.pyd,sha256=tQwnKZ33cdWkqDb02n8tIfFR5a_o7V-PyOKBQ84ZEOc,1830400
41
- fabricatio-0.2.7.dev0.data/scripts/tdown.exe,sha256=KMZaVXOnadUI1DiSZsxx_KGSu2MySqf8fBsr_mJyzKU,3405824
42
- fabricatio-0.2.7.dev0.dist-info/RECORD,,
40
+ fabricatio/_rust.cp39-win_amd64.pyd,sha256=v28StThnbVVewtNPoW6XDKZ004F-CB0y7aRUcHATz-s,1840128
41
+ fabricatio-0.2.7.dev1.data/scripts/tdown.exe,sha256=1BjZ8Iu_BgKhjSg9nH8BdSHfCjIYNq50DfaKWsomKxA,3401728
42
+ fabricatio-0.2.7.dev1.dist-info/RECORD,,