fabricatio 0.2.6.dev8__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.
fabricatio/models/tool.py CHANGED
@@ -136,7 +136,9 @@ class ToolExecutor(BaseModel):
136
136
 
137
137
  def inject_tools[M: ModuleType](self, module: Optional[M] = None) -> M:
138
138
  """Inject the tools into the provided module or default."""
139
- module = module or cast(M, module_from_spec(spec=ModuleSpec(name=configs.toolbox.tool_module_name, loader=None)))
139
+ module = module or cast(
140
+ "M", module_from_spec(spec=ModuleSpec(name=configs.toolbox.tool_module_name, loader=None))
141
+ )
140
142
  for tool in self.candidates:
141
143
  logger.debug(f"Injecting tool: {tool.name}")
142
144
  setattr(module, tool.name, tool.invoke)
@@ -144,7 +146,9 @@ class ToolExecutor(BaseModel):
144
146
 
145
147
  def inject_data[M: ModuleType](self, module: Optional[M] = None) -> M:
146
148
  """Inject the data into the provided module or default."""
147
- module = module or cast(M,module_from_spec(spec=ModuleSpec(name=configs.toolbox.data_module_name, loader=None)))
149
+ module = module or cast(
150
+ 'M', module_from_spec(spec=ModuleSpec(name=configs.toolbox.data_module_name, loader=None))
151
+ )
148
152
  for key, value in self.data.items():
149
153
  logger.debug(f"Injecting data: {key}")
150
154
  setattr(module, key, value)
@@ -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.6.dev8
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
@@ -0,0 +1,42 @@
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
+ fabricatio/actions/rag.py,sha256=QBdzEM8MloM_ahx5pTBZAETm9_631lTe_0ih_he_Iuo,2759
7
+ fabricatio/capabilities/correct.py,sha256=8GOU2VBPUakjG-r59SqsCgCD0QHX-l__IynCLO-ib8Q,6482
8
+ fabricatio/capabilities/propose.py,sha256=y3kge5g6bb8HYuV8e9h4MdqOMTlsfAIZpqE_cagWPTY,1593
9
+ fabricatio/capabilities/rag.py,sha256=XVvfH6rcog-moj1WCgwtR-l0-NdbFR6-fMQFLG7_asY,17690
10
+ fabricatio/capabilities/rating.py,sha256=vzEWOjGXmcZcw-bHtOWba0VojONU1Toy015o9H42RLQ,14438
11
+ fabricatio/capabilities/review.py,sha256=zETLiWBU0sJ_xHGyDMpTIItofaEieLyv0eSZGqEjDT4,11106
12
+ fabricatio/capabilities/task.py,sha256=vtS0YOe639vN8iTrkP2WK0AJVCr5N_JAaJuvRGyY2Fg,4639
13
+ fabricatio/config.py,sha256=hUv5XMzOkEw8cQjsVHTpPPix52IKwmxjBsZM6Px3xZI,16915
14
+ fabricatio/core.py,sha256=VQ_JKgUGIy2gZ8xsTBZCdr_IP7wC5aPg0_bsOmjQ588,6458
15
+ fabricatio/decorators.py,sha256=uzsP4tFKQNjDHBkofsjjoJA0IUAaYOtt6YVedoyOqlo,6551
16
+ fabricatio/fs/curd.py,sha256=N6l2MncjrFfnXBRtteRouXp5Rjy8EAKC_i29_G-zz98,4618
17
+ fabricatio/fs/readers.py,sha256=EZKN_AZdrp8DggJECP53QHw3uHeSDf-AwCAA_V7fNKU,1202
18
+ fabricatio/fs/__init__.py,sha256=PCf0s_9KDjVfNw7AfPoJzGt3jMq4gJOfbcT4pb0D0ZY,588
19
+ fabricatio/journal.py,sha256=stnEP88aUBA_GmU9gfTF2EZI8FS2OyMLGaMSTgK4QgA,476
20
+ fabricatio/models/action.py,sha256=6gffWv8NKw5HwtbmNimWfD5AZqQRzBV-PgAICHq7ZYU,8608
21
+ fabricatio/models/events.py,sha256=QvlnS8FEELg6KNabcJMeh2GV_y0ZBzKOPphcteKYWYU,4183
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
+ fabricatio/models/role.py,sha256=mmQbJ6GKr2Gx3wtjEz8d-vYoXs09ffcEkT_eCXaDd3E,2782
26
+ fabricatio/models/task.py,sha256=8NaR7ojQWyM740EDTqt9stwHKdrD6axCRpLKo0QzS-I,10492
27
+ fabricatio/models/tool.py,sha256=kD0eB7OxO9geZOxO6JIKvCBeG-KOpRAkfRZqK_WGfW4,7105
28
+ fabricatio/models/usages.py,sha256=LvU3Zfy3TZp6dwxWczRw9sb2c7xleqhsGscZ9gymf_0,31453
29
+ fabricatio/models/utils.py,sha256=NyIS82Gex4Q9qs6pzys5HplQ6JJXOLJBj4OkMPZYioc,5910
30
+ fabricatio/parser.py,sha256=9Jzw-yV6uKbFvf6sPna-XHdziVGVBZWvPctgX_6ODL8,6251
31
+ fabricatio/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
+ fabricatio/toolboxes/arithmetic.py,sha256=WLqhY-Pikv11Y_0SGajwZx3WhsLNpHKf9drzAqOf_nY,1369
33
+ fabricatio/toolboxes/fs.py,sha256=l4L1CVxJmjw9Ld2XUpIlWfV0_Fu_2Og6d3E13I-S4aE,736
34
+ fabricatio/toolboxes/__init__.py,sha256=KBJi5OG_pExscdlM7Bnt_UF43j4I3Lv6G71kPVu4KQU,395
35
+ fabricatio/workflows/articles.py,sha256=G5HGRr-DHuYuEcfhFdFAuDvTTJ9aSU_UQ2yYXEjTMtM,1047
36
+ fabricatio/workflows/rag.py,sha256=-YYp2tlE9Vtfgpg6ROpu6QVO8j8yVSPa6yDzlN3qVxs,520
37
+ fabricatio/_rust.pyi,sha256=dGTGV7viu3YAGl1cRKIWrdHPc1hlwk3_hbaDaswxdVo,3831
38
+ fabricatio/_rust_instances.py,sha256=2GwF8aVfYNemRI2feBzH1CZfBGno-XJJE5imJokGEYw,314
39
+ fabricatio/__init__.py,sha256=SzBYsRhZeL77jLtfJEjmoHOSwHwUGyvMATX6xfndLDM,1135
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,,
@@ -1,42 +0,0 @@
1
- fabricatio-0.2.6.dev8.dist-info/METADATA,sha256=teU7Pg274Y7dl9-wIMG_T4ueJrjmeg9HX60Z1I680uI,14085
2
- fabricatio-0.2.6.dev8.dist-info/WHEEL,sha256=mDFV3bKFgwlxLHvOsPqpR9up9dUKYzsUQNKBdkW5c08,94
3
- fabricatio-0.2.6.dev8.dist-info/licenses/LICENSE,sha256=do7J7EiCGbq0QPbMAL_FqLYufXpHnCnXBOuqVPwSV8Y,1088
4
- fabricatio/actions/article.py,sha256=LfIWnbFYB9e3Bq2YDPk1geWDbJTq7zCitLtpFhAhYHM,4563
5
- fabricatio/actions/output.py,sha256=KSSLvEvXsA10ACN2mbqGo98QwKLVUAoMUJNKYk6HhGc,645
6
- fabricatio/actions/rag.py,sha256=Qe3WMcSsTqcH_DXN1Jd0sFz8tJ19_Eqez6pesC6t9UM,1006
7
- fabricatio/capabilities/correct.py,sha256=0BYhjo9WrLwKsXQR8bTPvdQITbrMs7RX1xpzhuQt_yY,5222
8
- fabricatio/capabilities/propose.py,sha256=y3kge5g6bb8HYuV8e9h4MdqOMTlsfAIZpqE_cagWPTY,1593
9
- fabricatio/capabilities/rag.py,sha256=RGP3VswqIBCK5TJxIUw-LuWL_9K2-QvVSSz1O7EU-4A,16459
10
- fabricatio/capabilities/rating.py,sha256=R9otyZVE2E3kKxrOCTZMeesBCPbC-fSb7bXgZPMQzfU,14406
11
- fabricatio/capabilities/review.py,sha256=XYzpSnFCT9HS2XytQT8HDgV4SjXehexoJgucZFMx6P8,11102
12
- fabricatio/capabilities/task.py,sha256=MBiDyC3oHwTbTiLiGyqUEVfVGSN42lU03ndeapTpyjQ,4609
13
- fabricatio/config.py,sha256=3lIblK-aEjdwQkTVYRDm8_u3xinjsn6NudFspNn2cp4,16757
14
- fabricatio/core.py,sha256=VQ_JKgUGIy2gZ8xsTBZCdr_IP7wC5aPg0_bsOmjQ588,6458
15
- fabricatio/decorators.py,sha256=uzsP4tFKQNjDHBkofsjjoJA0IUAaYOtt6YVedoyOqlo,6551
16
- fabricatio/fs/curd.py,sha256=N6l2MncjrFfnXBRtteRouXp5Rjy8EAKC_i29_G-zz98,4618
17
- fabricatio/fs/readers.py,sha256=EZKN_AZdrp8DggJECP53QHw3uHeSDf-AwCAA_V7fNKU,1202
18
- fabricatio/fs/__init__.py,sha256=PCf0s_9KDjVfNw7AfPoJzGt3jMq4gJOfbcT4pb0D0ZY,588
19
- fabricatio/journal.py,sha256=stnEP88aUBA_GmU9gfTF2EZI8FS2OyMLGaMSTgK4QgA,476
20
- fabricatio/models/action.py,sha256=kV4mZgLjpZEXlna9IRLl2OwbUw3dkCHkcviDG4Cr9ow,8589
21
- fabricatio/models/events.py,sha256=QvlnS8FEELg6KNabcJMeh2GV_y0ZBzKOPphcteKYWYU,4183
22
- fabricatio/models/extra.py,sha256=5FJmU_jH8MBNgOX5b35l_4iOwgz4HCoByZ873mmC0-4,26314
23
- fabricatio/models/generic.py,sha256=IdPJMf3qxZFq8yqd6OuAYKfCM0wBlJkozgxvxQZVEEc,14025
24
- fabricatio/models/kwargs_types.py,sha256=H6DI3Jdben-FER_kx7owiRzmbSFKuu0sFjCADA1LJB0,5008
25
- fabricatio/models/role.py,sha256=mmQbJ6GKr2Gx3wtjEz8d-vYoXs09ffcEkT_eCXaDd3E,2782
26
- fabricatio/models/task.py,sha256=8NaR7ojQWyM740EDTqt9stwHKdrD6axCRpLKo0QzS-I,10492
27
- fabricatio/models/tool.py,sha256=4b-v4WIC_LuLOKzzXL9bvKXr8vmGZ8O2uAFv5-1KRA0,7052
28
- fabricatio/models/usages.py,sha256=yHEMi7xSRvv3RqIynIf3HtlWtbmnWT9DSC9V0sVlCQ8,31086
29
- fabricatio/models/utils.py,sha256=NyIS82Gex4Q9qs6pzys5HplQ6JJXOLJBj4OkMPZYioc,5910
30
- fabricatio/parser.py,sha256=9Jzw-yV6uKbFvf6sPna-XHdziVGVBZWvPctgX_6ODL8,6251
31
- fabricatio/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
- fabricatio/toolboxes/arithmetic.py,sha256=WLqhY-Pikv11Y_0SGajwZx3WhsLNpHKf9drzAqOf_nY,1369
33
- fabricatio/toolboxes/fs.py,sha256=l4L1CVxJmjw9Ld2XUpIlWfV0_Fu_2Og6d3E13I-S4aE,736
34
- fabricatio/toolboxes/__init__.py,sha256=KBJi5OG_pExscdlM7Bnt_UF43j4I3Lv6G71kPVu4KQU,395
35
- fabricatio/workflows/articles.py,sha256=G5HGRr-DHuYuEcfhFdFAuDvTTJ9aSU_UQ2yYXEjTMtM,1047
36
- fabricatio/workflows/rag.py,sha256=-YYp2tlE9Vtfgpg6ROpu6QVO8j8yVSPa6yDzlN3qVxs,520
37
- fabricatio/_rust.pyi,sha256=eawBfpyGrB-JtOh4I6RSbjFSq83SSl-0syBeZ-g8270,3491
38
- fabricatio/_rust_instances.py,sha256=2GwF8aVfYNemRI2feBzH1CZfBGno-XJJE5imJokGEYw,314
39
- fabricatio/__init__.py,sha256=SzBYsRhZeL77jLtfJEjmoHOSwHwUGyvMATX6xfndLDM,1135
40
- fabricatio/_rust.cp39-win_amd64.pyd,sha256=0v1LHLSeVy_BcO4ssj64nGq_ksd78f6oLjtEvTVQFuQ,1830400
41
- fabricatio-0.2.6.dev8.data/scripts/tdown.exe,sha256=NWvImTrrUptePGBwlr5wJ7bnR-rl1QocamTTutb3axI,3405824
42
- fabricatio-0.2.6.dev8.dist-info/RECORD,,