fabricatio 0.2.8.dev1__cp312-cp312-win_amd64.whl → 0.2.8.dev3__cp312-cp312-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.
Files changed (35) hide show
  1. fabricatio/_rust.cp312-win_amd64.pyd +0 -0
  2. fabricatio/_rust.pyi +50 -0
  3. fabricatio/actions/article.py +103 -65
  4. fabricatio/actions/article_rag.py +73 -19
  5. fabricatio/actions/output.py +39 -6
  6. fabricatio/actions/rag.py +3 -3
  7. fabricatio/capabilities/check.py +97 -0
  8. fabricatio/capabilities/correct.py +7 -6
  9. fabricatio/capabilities/propose.py +20 -4
  10. fabricatio/capabilities/rag.py +3 -2
  11. fabricatio/capabilities/rating.py +7 -10
  12. fabricatio/capabilities/review.py +18 -187
  13. fabricatio/capabilities/task.py +8 -9
  14. fabricatio/config.py +2 -0
  15. fabricatio/fs/curd.py +4 -0
  16. fabricatio/models/action.py +10 -5
  17. fabricatio/models/extra/advanced_judge.py +16 -9
  18. fabricatio/models/extra/article_base.py +53 -10
  19. fabricatio/models/extra/article_essence.py +47 -171
  20. fabricatio/models/extra/article_main.py +6 -1
  21. fabricatio/models/extra/article_proposal.py +19 -1
  22. fabricatio/models/extra/problem.py +120 -0
  23. fabricatio/models/extra/rule.py +23 -0
  24. fabricatio/models/generic.py +50 -42
  25. fabricatio/models/role.py +4 -1
  26. fabricatio/models/usages.py +8 -6
  27. fabricatio/models/utils.py +0 -46
  28. fabricatio/utils.py +54 -0
  29. fabricatio-0.2.8.dev3.data/scripts/tdown.exe +0 -0
  30. {fabricatio-0.2.8.dev1.dist-info → fabricatio-0.2.8.dev3.dist-info}/METADATA +2 -1
  31. fabricatio-0.2.8.dev3.dist-info/RECORD +53 -0
  32. fabricatio-0.2.8.dev1.data/scripts/tdown.exe +0 -0
  33. fabricatio-0.2.8.dev1.dist-info/RECORD +0 -49
  34. {fabricatio-0.2.8.dev1.dist-info → fabricatio-0.2.8.dev3.dist-info}/WHEEL +0 -0
  35. {fabricatio-0.2.8.dev1.dist-info → fabricatio-0.2.8.dev3.dist-info}/licenses/LICENSE +0 -0
@@ -1,17 +1,20 @@
1
1
  """This module defines generic classes for models in the Fabricatio library."""
2
2
 
3
3
  from abc import ABC, abstractmethod
4
+ from datetime import datetime
4
5
  from pathlib import Path
5
6
  from typing import Any, Callable, Dict, Iterable, List, Optional, Self, Union, final, overload
6
7
 
7
8
  import orjson
9
+ import rtoml
8
10
  from fabricatio._rust import blake3_hash
9
11
  from fabricatio._rust_instances import TEMPLATE_MANAGER
10
12
  from fabricatio.config import configs
11
13
  from fabricatio.fs.readers import MAGIKA, safe_text_read
12
14
  from fabricatio.journal import logger
13
- from fabricatio.models.utils import ok
14
15
  from fabricatio.parser import JsonCapture
16
+ from fabricatio.utils import ok
17
+ from litellm.utils import token_counter
15
18
  from pydantic import (
16
19
  BaseModel,
17
20
  ConfigDict,
@@ -62,7 +65,7 @@ class Named(Base):
62
65
  class Described(Base):
63
66
  """Class that includes a description attribute."""
64
67
 
65
- description: str = Field(default="", frozen=True)
68
+ description: str = Field(frozen=True)
66
69
  """The description of the object."""
67
70
 
68
71
 
@@ -93,16 +96,32 @@ class WithRef[T](Base):
93
96
  @property
94
97
  def referenced(self) -> T:
95
98
  """Get the referenced object."""
96
- return ok(self._reference, "_reference is None")
99
+ return ok(
100
+ self._reference, f"`{self.__class__.__name__}`' s `_reference` field is None. Have you called `update_ref`?"
101
+ )
102
+
103
+ @overload
104
+ def update_ref[S: WithRef](self: S, reference: T) -> S: ...
97
105
 
98
- def update_ref[S: "WithRef"](self: S, reference: T | S) -> S: # noqa: PYI019
106
+ @overload
107
+ def update_ref[S: WithRef](self: S, reference: "WithRef[T]") -> S: ...
108
+
109
+ @overload
110
+ def update_ref[S: WithRef](self: S, reference: None = None) -> S: ...
111
+ def update_ref[S: WithRef](self: S, reference: Union[T, "WithRef[T]", None] = None) -> S: # noqa: PYI019
99
112
  """Update the reference of the object."""
100
113
  if isinstance(reference, self.__class__):
101
114
  self._reference = reference.referenced
102
115
  else:
103
- self._reference = reference
116
+ self._reference = reference # pyright: ignore [reportAttributeAccessIssue]
104
117
  return self
105
118
 
119
+ def derive[S: WithRef](self: S, reference: Any) -> S: # noqa: PYI019
120
+ """Derive a new object from the current object."""
121
+ new = self.model_copy()
122
+ new._reference = reference
123
+ return new
124
+
106
125
 
107
126
  class PersistentAble(Base):
108
127
  """Class that provides a method to persist the object."""
@@ -117,18 +136,28 @@ class PersistentAble(Base):
117
136
  Self: The current instance of the object.
118
137
  """
119
138
  p = Path(path)
120
- out = self.model_dump_json(indent=1)
139
+ out = rtoml.dumps(self.model_dump())
140
+
141
+ # Generate a timestamp in the format YYYYMMDD_HHMMSS
142
+ timestamp = datetime.now().strftime("%Y%m%d")
143
+
144
+ # Generate the hash
145
+ file_hash = blake3_hash(out.encode())[:6]
146
+
147
+ # Construct the file name with timestamp and hash
148
+ file_name = f"{self.__class__.__name__}_{timestamp}_{file_hash}.json"
149
+
121
150
  if p.is_dir():
122
- p.joinpath(f"{self.__class__.__name__}_{blake3_hash(out.encode())[:6]}.json").write_text(
123
- out, encoding="utf-8"
124
- )
125
- return self
126
- p.mkdir(exist_ok=True, parents=True)
127
- p.write_text(out, encoding="utf-8")
128
- logger.info(f"Persisted {self} to {p.as_posix()}")
151
+ p.joinpath(file_name).write_text(out, encoding="utf-8")
152
+ else:
153
+ p.mkdir(exist_ok=True, parents=True)
154
+ p.write_text(out, encoding="utf-8")
155
+
156
+ logger.info(f"Persisted `{self.__class__.__name__}` to {p.as_posix()}")
129
157
  return self
130
158
 
131
- def from_persistent(self, path: str | Path) -> Self:
159
+ @classmethod
160
+ def from_persistent(cls, path: str | Path) -> Self:
132
161
  """Load the object from a file.
133
162
 
134
163
  Args:
@@ -137,7 +166,7 @@ class PersistentAble(Base):
137
166
  Returns:
138
167
  Self: The current instance of the object.
139
168
  """
140
- return self.model_validate_json(Path(path).read_text(encoding="utf-8"))
169
+ return cls.model_validate(rtoml.load(path))
141
170
 
142
171
 
143
172
  class ModelHash(Base):
@@ -207,27 +236,6 @@ class WithBriefing(Named, Described):
207
236
  """
208
237
  return f"{self.name}: {self.description}" if self.description else self.name
209
238
 
210
- def _prepend_inner(self, input_text: str) -> str:
211
- return f"# your personal briefing: \n{self.briefing}\n{input_text}"
212
-
213
- def prepend_sys_msg[D: (Dict[str, Any], str)](self, system_msg_like: D = "") -> Dict[str, Any]:
214
- """Prepend the system message with the briefing.
215
-
216
- Args:
217
- system_msg_like (str | dict): The system message or a dictionary containing the system message.
218
-
219
- Returns:
220
- dict: The system message with the briefing prepended.
221
- """
222
- match system_msg_like:
223
- case dict(d):
224
- d["system_message"] = self._prepend_inner(d.get("system_message", ""))
225
- return d
226
- case str(s):
227
- return {"system_message": self._prepend_inner(s)}
228
- case _:
229
- raise TypeError(f"{system_msg_like} is not a dict or str")
230
-
231
239
 
232
240
  class UnsortGenerate(GenerateJsonSchema):
233
241
  """Class that provides a reverse JSON schema of the model."""
@@ -308,7 +316,7 @@ class ProposedAble(CreateJsonObjPrompt, InstantiateFromString):
308
316
  """Class that provides a method to propose a JSON object based on the requirement."""
309
317
 
310
318
 
311
- class ProposedUpdateAble(PersistentAble, UpdateFrom, ABC):
319
+ class ProposedUpdateAble(ProposedAble, UpdateFrom, ABC):
312
320
  """Make the obj can be updated from the proposed obj in place."""
313
321
 
314
322
 
@@ -428,13 +436,13 @@ class WithDependency(Base):
428
436
  )
429
437
 
430
438
 
431
- class PrepareVectorization(Base):
439
+ class Vectorizable(Base):
432
440
  """Class that prepares the vectorization of the model."""
433
441
 
434
- @abstractmethod
435
442
  def _prepare_vectorization_inner(self) -> str:
436
- """Prepare the vectorization of the model."""
443
+ return rtoml.dumps(self.model_dump())
437
444
 
445
+ @final
438
446
  def prepare_vectorization(self, max_length: Optional[int] = None) -> str:
439
447
  """Prepare the vectorization of the model.
440
448
 
@@ -443,8 +451,8 @@ class PrepareVectorization(Base):
443
451
  """
444
452
  max_length = max_length or configs.embedding.max_sequence_length
445
453
  chunk = self._prepare_vectorization_inner()
446
- if max_length and len(chunk) > max_length:
447
- logger.error(err := f"Chunk exceeds maximum sequence length {max_length}.")
454
+ if max_length and (length := token_counter(text=chunk)) > max_length:
455
+ logger.error(err := f"Chunk exceeds maximum sequence length {max_length}, got {length},see {chunk}")
448
456
  raise ValueError(err)
449
457
 
450
458
  return chunk
fabricatio/models/role.py CHANGED
@@ -8,11 +8,12 @@ from fabricatio.core import env
8
8
  from fabricatio.journal import logger
9
9
  from fabricatio.models.action import WorkFlow
10
10
  from fabricatio.models.events import Event
11
+ from fabricatio.models.generic import WithBriefing
11
12
  from fabricatio.models.tool import ToolBox
12
13
  from pydantic import Field
13
14
 
14
15
 
15
- class Role(ProposeTask, HandleTask, Correct):
16
+ class Role(WithBriefing, ProposeTask, HandleTask, Correct):
16
17
  """Class that represents a role with a registry of events and workflows.
17
18
 
18
19
  A Role serves as a container for workflows, managing their registration to events
@@ -22,6 +23,8 @@ class Role(ProposeTask, HandleTask, Correct):
22
23
  registry: Mapping of events to workflows that handle them
23
24
  toolboxes: Set of toolboxes available to this role and its workflows
24
25
  """
26
+ description:str =""
27
+ """A brief description of the role's responsibilities and capabilities."""
25
28
 
26
29
  registry: dict[Event | str, WorkFlow] = Field(default_factory=dict)
27
30
  """The registry of events and workflows."""
@@ -14,8 +14,9 @@ from fabricatio.models.generic import ScopedConfig, WithBriefing
14
14
  from fabricatio.models.kwargs_types import ChooseKwargs, EmbeddingKwargs, GenerateKwargs, LLMKwargs, ValidateKwargs
15
15
  from fabricatio.models.task import Task
16
16
  from fabricatio.models.tool import Tool, ToolBox
17
- from fabricatio.models.utils import Messages, ok
17
+ from fabricatio.models.utils import Messages
18
18
  from fabricatio.parser import GenericCapture, JsonCapture
19
+ from fabricatio.utils import ok
19
20
  from litellm import RateLimitError, Router, stream_chunk_builder # pyright: ignore [reportPrivateImportUsage]
20
21
  from litellm.types.router import Deployment, LiteLLM_Params, ModelInfo
21
22
  from litellm.types.utils import (
@@ -280,7 +281,7 @@ class LLMUsage(ScopedConfig):
280
281
  question: str | List[str],
281
282
  validator: Callable[[str], T | None],
282
283
  default: Optional[T] = None,
283
- max_validations: PositiveInt = 2,
284
+ max_validations: PositiveInt = 3,
284
285
  co_extractor: Optional[GenerateKwargs] = None,
285
286
  **kwargs: Unpack[GenerateKwargs],
286
287
  ) -> Optional[T] | List[Optional[T]] | List[T] | T:
@@ -338,7 +339,7 @@ class LLMUsage(ScopedConfig):
338
339
 
339
340
  return await (gather(*[_inner(q) for q in question]) if isinstance(question, list) else _inner(question))
340
341
 
341
- async def aliststr(
342
+ async def alist_str(
342
343
  self, requirement: str, k: NonNegativeInt = 0, **kwargs: Unpack[ValidateKwargs[List[str]]]
343
344
  ) -> Optional[List[str]]:
344
345
  """Asynchronously generates a list of strings based on a given requirement.
@@ -360,6 +361,7 @@ class LLMUsage(ScopedConfig):
360
361
  **kwargs,
361
362
  )
362
363
 
364
+
363
365
  async def apathstr(self, requirement: str, **kwargs: Unpack[ChooseKwargs[List[str]]]) -> Optional[List[str]]:
364
366
  """Asynchronously generates a list of strings based on a given requirement.
365
367
 
@@ -370,7 +372,7 @@ class LLMUsage(ScopedConfig):
370
372
  Returns:
371
373
  List[str]: The validated response as a list of strings.
372
374
  """
373
- return await self.aliststr(
375
+ return await self.alist_str(
374
376
  TEMPLATE_MANAGER.render_template(
375
377
  configs.templates.pathstr_template,
376
378
  {"requirement": requirement},
@@ -550,8 +552,8 @@ class EmbeddingUsage(LLMUsage):
550
552
  """
551
553
  # check seq length
552
554
  max_len = self.embedding_max_sequence_length or configs.embedding.max_sequence_length
553
- if max_len and any(len(t) > max_len for t in input_text):
554
- logger.error(err := f"Input text exceeds maximum sequence length {max_len}.")
555
+ if max_len and any(length:=(token_counter(text=t)) > max_len for t in input_text):
556
+ logger.error(err := f"Input text exceeds maximum sequence length {max_len}, got {length}.")
555
557
  raise ValueError(err)
556
558
 
557
559
  return await litellm.aembedding(
@@ -4,7 +4,6 @@ from enum import Enum
4
4
  from typing import Any, Dict, List, Literal, Optional, Self
5
5
 
6
6
  from pydantic import BaseModel, ConfigDict, Field
7
- from questionary import text
8
7
 
9
8
 
10
9
  class Message(BaseModel):
@@ -147,48 +146,3 @@ class TaskStatus(Enum):
147
146
  Cancelled = "cancelled"
148
147
 
149
148
 
150
- async def ask_edit(
151
- text_seq: List[str],
152
- ) -> List[str]:
153
- """Asks the user to edit a list of texts.
154
-
155
- Args:
156
- text_seq (List[str]): A list of texts to be edited.
157
-
158
- Returns:
159
- List[str]: A list of edited texts.
160
- If the user does not edit a text, it will not be included in the returned list.
161
- """
162
- res = []
163
- for i, t in enumerate(text_seq):
164
- edited = await text(f"[{i}] ", default=t).ask_async()
165
- if edited:
166
- res.append(edited)
167
- return res
168
-
169
-
170
- def override_kwargs[T](kwargs: Dict[str, T], **overrides) -> Dict[str, T]:
171
- """Override the values in kwargs with the provided overrides."""
172
- kwargs.update({k: v for k, v in overrides.items() if v is not None})
173
- return kwargs
174
-
175
-
176
- def fallback_kwargs[T](kwargs: Dict[str, T], **overrides) -> Dict[str, T]:
177
- """Fallback the values in kwargs with the provided overrides."""
178
- kwargs.update({k: v for k, v in overrides.items() if k not in kwargs})
179
- return kwargs
180
-
181
-
182
- def ok[T](val: Optional[T], msg: str = "Value is None") -> T:
183
- """Check if a value is None and raise a ValueError with the provided message if it is.
184
-
185
- Args:
186
- val: The value to check.
187
- msg: The message to include in the ValueError if val is None.
188
-
189
- Returns:
190
- T: The value if it is not None.
191
- """
192
- if val is None:
193
- raise ValueError(msg)
194
- return val
fabricatio/utils.py ADDED
@@ -0,0 +1,54 @@
1
+ """A collection of utility functions for the fabricatio package."""
2
+
3
+ from typing import Any, Dict, List, Optional
4
+
5
+ from questionary import text
6
+
7
+
8
+ async def ask_edit(
9
+ text_seq: List[str],
10
+ ) -> List[str]:
11
+ """Asks the user to edit a list of texts.
12
+
13
+ Args:
14
+ text_seq (List[str]): A list of texts to be edited.
15
+
16
+ Returns:
17
+ List[str]: A list of edited texts.
18
+ If the user does not edit a text, it will not be included in the returned list.
19
+ """
20
+ res = []
21
+ for i, t in enumerate(text_seq):
22
+ edited = await text(f"[{i}] ", default=t).ask_async()
23
+ if edited:
24
+ res.append(edited)
25
+ return res
26
+
27
+
28
+ def override_kwargs(kwargs: Dict[str,Any], **overrides) -> Dict[str, Any]:
29
+ """Override the values in kwargs with the provided overrides."""
30
+ new_kwargs = kwargs.copy()
31
+ new_kwargs.update({k: v for k, v in overrides.items() if v is not None})
32
+ return new_kwargs
33
+
34
+
35
+ def fallback_kwargs(kwargs: Dict[str, Any], **overrides) -> Dict[str, Any]:
36
+ """Fallback the values in kwargs with the provided overrides."""
37
+ new_kwargs = kwargs.copy()
38
+ new_kwargs.update({k: v for k, v in overrides.items() if k not in new_kwargs and v is not None})
39
+ return new_kwargs
40
+
41
+
42
+ def ok[T](val: Optional[T], msg: str = "Value is None") -> T:
43
+ """Check if a value is None and raise a ValueError with the provided message if it is.
44
+
45
+ Args:
46
+ val: The value to check.
47
+ msg: The message to include in the ValueError if val is None.
48
+
49
+ Returns:
50
+ T: The value if it is not None.
51
+ """
52
+ if val is None:
53
+ raise ValueError(msg)
54
+ return val
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fabricatio
3
- Version: 0.2.8.dev1
3
+ Version: 0.2.8.dev3
4
4
  Classifier: License :: OSI Approved :: MIT License
5
5
  Classifier: Programming Language :: Rust
6
6
  Classifier: Programming Language :: Python :: 3.12
@@ -23,6 +23,7 @@ Requires-Dist: pymitter>=1.0.0
23
23
  Requires-Dist: questionary>=2.1.0
24
24
  Requires-Dist: regex>=2024.11.6
25
25
  Requires-Dist: rich>=13.9.4
26
+ Requires-Dist: rtoml>=0.12.0
26
27
  Requires-Dist: pymilvus>=2.5.4 ; extra == 'rag'
27
28
  Requires-Dist: fabricatio[calc,plot,rag] ; extra == 'full'
28
29
  Requires-Dist: sympy>=1.13.3 ; extra == 'calc'
@@ -0,0 +1,53 @@
1
+ fabricatio-0.2.8.dev3.dist-info/METADATA,sha256=dd-agw0ROR-UiBU9QvouJoQ2GCWKGev24EU51ddF1kc,5288
2
+ fabricatio-0.2.8.dev3.dist-info/WHEEL,sha256=jABKVkLC9kJr8mi_er5jOqpiQUjARSLXDUIIxDqsS50,96
3
+ fabricatio-0.2.8.dev3.dist-info/licenses/LICENSE,sha256=do7J7EiCGbq0QPbMAL_FqLYufXpHnCnXBOuqVPwSV8Y,1088
4
+ fabricatio/actions/article.py,sha256=cvUoP6a1iQklOmwPeBskJE6L5NdmF99rQEVvXOV-uR0,13733
5
+ fabricatio/actions/article_rag.py,sha256=-nFpxn2Qg1MQE6yS97P_wnSrGxJWQWlz05OX3Cdr4XE,3852
6
+ fabricatio/actions/output.py,sha256=-FfTzXEHIb_zOT-j4T4b5ND96zHLDEGdjlmmPviIbiM,3754
7
+ fabricatio/actions/rag.py,sha256=wb3vt-gS6fDHYJ57Yfu_OR0kpewT9vMqwtXsqXd42Kg,2735
8
+ fabricatio/capabilities/advanced_judge.py,sha256=selB0Gwf1F4gGJlwBiRo6gI4KOUROgh3WnzO3mZFEls,706
9
+ fabricatio/capabilities/check.py,sha256=XiA03x2lGcCzpTVICOHs-e7qzNODQwBwtjDxU8ucgdM,3915
10
+ fabricatio/capabilities/correct.py,sha256=55Zk1AzeQfoD-8k58VruGUxAMQR7q68ffGniCu6aogM,7282
11
+ fabricatio/capabilities/propose.py,sha256=hkBeSlmcTdfYWT-ph6nlbtHXBozi_JXqXlWcnBy3W78,2007
12
+ fabricatio/capabilities/rag.py,sha256=7xDxDEvhlmb7Y-mEquSgvlVIYpHsM2YFxA9LjRpVajo,17720
13
+ fabricatio/capabilities/rating.py,sha256=_PCJUeNA_1hwcP37r1GsWfHt6Gpwf8TuaAlKajUiyK8,14693
14
+ fabricatio/capabilities/review.py,sha256=1MGyJudPxHVOQod_GYKJ7NyB3jOWuwZhqBP30hAZ5Z4,5061
15
+ fabricatio/capabilities/task.py,sha256=JG9kD2n86FvZQIjqZq-aqw8j9jpuuDpEDKTJCB6HzX4,4416
16
+ fabricatio/config.py,sha256=-K3_PXAnwEDRu6OvMwbghZWeZzHKWyswWHfBeRi7cDk,17066
17
+ fabricatio/core.py,sha256=VQ_JKgUGIy2gZ8xsTBZCdr_IP7wC5aPg0_bsOmjQ588,6458
18
+ fabricatio/decorators.py,sha256=C0Gi7wcXC-0sWITqsSv3JdBGcgVJOlRvOt0FfO0aUsA,7554
19
+ fabricatio/fs/curd.py,sha256=p8y0LGKgVDk-CWOlm37E6wg7RK6RCD6denKo-VsW28c,4763
20
+ fabricatio/fs/readers.py,sha256=EZKN_AZdrp8DggJECP53QHw3uHeSDf-AwCAA_V7fNKU,1202
21
+ fabricatio/fs/__init__.py,sha256=PCf0s_9KDjVfNw7AfPoJzGt3jMq4gJOfbcT4pb0D0ZY,588
22
+ fabricatio/journal.py,sha256=stnEP88aUBA_GmU9gfTF2EZI8FS2OyMLGaMSTgK4QgA,476
23
+ fabricatio/models/action.py,sha256=N5_j7u1sd-EzuQACwPAJNUWgg328xenJ-DfZ4DOkh_s,9132
24
+ fabricatio/models/events.py,sha256=QvlnS8FEELg6KNabcJMeh2GV_y0ZBzKOPphcteKYWYU,4183
25
+ fabricatio/models/extra/advanced_judge.py,sha256=tmCD7mnPlpuykOxvXxWEk3bKzC7mUNSoOwSquT6fF7E,937
26
+ fabricatio/models/extra/article_base.py,sha256=mpetbUlZ334YAd46sqd-pBaoelozIg0XJgPWHbSdZ6k,17531
27
+ fabricatio/models/extra/article_essence.py,sha256=xd6j-PDqjhrMjgUmyfk6HqkyMLu-sS9feUo0sZ3QABY,2825
28
+ fabricatio/models/extra/article_main.py,sha256=OYOnv09n8hB8ChtCSXO9V18tt3ouoSWnG_0MsRkRzJk,8206
29
+ fabricatio/models/extra/article_outline.py,sha256=jFbVgiwlo7rnwCGS6ToVgeMUOoRe99Edgbx95THR6z8,1450
30
+ fabricatio/models/extra/article_proposal.py,sha256=L2kPvH1XCCQSNcI1KQU3ULGq7C24Y88ssugX43LgbsE,2043
31
+ fabricatio/models/extra/problem.py,sha256=CX93lMFl-UQDCO3JvD4nCMllXId_FlPwGiLpxOyO5Dc,4502
32
+ fabricatio/models/extra/rule.py,sha256=OIyn_r1lwLa-lhFsl--PQHqY_Qi2LIaT24zQSBazf38,781
33
+ fabricatio/models/generic.py,sha256=yHcYyM6NhK3tJCpPKG0lzb58y3KI3W8VtVH49FAynU0,19360
34
+ fabricatio/models/kwargs_types.py,sha256=chJ-rHaeBVRUPuORHuGR3DdNxxTUrotz0eflPEh4l4w,5474
35
+ fabricatio/models/role.py,sha256=-CRcj5_M3_ciLPzwiNn92grBmwoSLQ-n4koVZiCNTBM,2953
36
+ fabricatio/models/task.py,sha256=8NaR7ojQWyM740EDTqt9stwHKdrD6axCRpLKo0QzS-I,10492
37
+ fabricatio/models/tool.py,sha256=kD0eB7OxO9geZOxO6JIKvCBeG-KOpRAkfRZqK_WGfW4,7105
38
+ fabricatio/models/usages.py,sha256=HuU9X_8o6-UilHEy1LlszVVs36OMRKTDL07YstMFk5I,31808
39
+ fabricatio/models/utils.py,sha256=Ac5g-8ic6q_w7dhNuh-iiofpL1sqOACxbjPPTljP2LY,4417
40
+ fabricatio/parser.py,sha256=9Jzw-yV6uKbFvf6sPna-XHdziVGVBZWvPctgX_6ODL8,6251
41
+ fabricatio/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
+ fabricatio/toolboxes/arithmetic.py,sha256=WLqhY-Pikv11Y_0SGajwZx3WhsLNpHKf9drzAqOf_nY,1369
43
+ fabricatio/toolboxes/fs.py,sha256=l4L1CVxJmjw9Ld2XUpIlWfV0_Fu_2Og6d3E13I-S4aE,736
44
+ fabricatio/toolboxes/__init__.py,sha256=KBJi5OG_pExscdlM7Bnt_UF43j4I3Lv6G71kPVu4KQU,395
45
+ fabricatio/utils.py,sha256=QJR00IuclL2nNTSfpTNBRYJmNjc_DNXGtrYWjatWpq8,1681
46
+ fabricatio/workflows/articles.py,sha256=G5HGRr-DHuYuEcfhFdFAuDvTTJ9aSU_UQ2yYXEjTMtM,1047
47
+ fabricatio/workflows/rag.py,sha256=-YYp2tlE9Vtfgpg6ROpu6QVO8j8yVSPa6yDzlN3qVxs,520
48
+ fabricatio/_rust.pyi,sha256=_N8Jw1DMOFAaoibSQolxkKZ07nCfJao7Z9qkojHtLy0,5104
49
+ fabricatio/_rust_instances.py,sha256=2GwF8aVfYNemRI2feBzH1CZfBGno-XJJE5imJokGEYw,314
50
+ fabricatio/__init__.py,sha256=SzBYsRhZeL77jLtfJEjmoHOSwHwUGyvMATX6xfndLDM,1135
51
+ fabricatio/_rust.cp312-win_amd64.pyd,sha256=655GgiDLplHhewnAbEen77GKKxhllgjljHPx2q0cEps,1888256
52
+ fabricatio-0.2.8.dev3.data/scripts/tdown.exe,sha256=giKHqYYYtXEQg7gdrGBRA93R0HkoKPUoFqdyFKP9ZQM,3402752
53
+ fabricatio-0.2.8.dev3.dist-info/RECORD,,
@@ -1,49 +0,0 @@
1
- fabricatio-0.2.8.dev1.dist-info/METADATA,sha256=doJ4_NB0Ild3P3v79TzSYye8wttaYrTaoieNesBqxgw,5259
2
- fabricatio-0.2.8.dev1.dist-info/WHEEL,sha256=jABKVkLC9kJr8mi_er5jOqpiQUjARSLXDUIIxDqsS50,96
3
- fabricatio-0.2.8.dev1.dist-info/licenses/LICENSE,sha256=do7J7EiCGbq0QPbMAL_FqLYufXpHnCnXBOuqVPwSV8Y,1088
4
- fabricatio/actions/article.py,sha256=l1WzphK_yR-l8KdmX6cb95vhETntrJEvMgVLBTULwJU,12074
5
- fabricatio/actions/article_rag.py,sha256=PiOFxI6VTmLXm3BK-01g_KH1mTE9uOtnA-CwUjt16AU,1456
6
- fabricatio/actions/output.py,sha256=eHI4EH5n1nOt6MqQ00b7UWTjIqO8FerNakem_45d5qk,2315
7
- fabricatio/actions/rag.py,sha256=QBdzEM8MloM_ahx5pTBZAETm9_631lTe_0ih_he_Iuo,2759
8
- fabricatio/capabilities/advanced_judge.py,sha256=selB0Gwf1F4gGJlwBiRo6gI4KOUROgh3WnzO3mZFEls,706
9
- fabricatio/capabilities/correct.py,sha256=2093ggHkY8vQW8fl7VwXC8u39oW1xsfjxDjGoQ5puOA,7269
10
- fabricatio/capabilities/propose.py,sha256=y3kge5g6bb8HYuV8e9h4MdqOMTlsfAIZpqE_cagWPTY,1593
11
- fabricatio/capabilities/rag.py,sha256=XVvfH6rcog-moj1WCgwtR-l0-NdbFR6-fMQFLG7_asY,17690
12
- fabricatio/capabilities/rating.py,sha256=j7ABxVyEnXwdKIPOIP_ysP4WP7PR1FcwjmYTkSZsVcw,14900
13
- fabricatio/capabilities/review.py,sha256=1VBP9lNeqrTs-Whu2StpaPL2aDSrFybce8TfPJKIMjE,11376
14
- fabricatio/capabilities/task.py,sha256=vtS0YOe639vN8iTrkP2WK0AJVCr5N_JAaJuvRGyY2Fg,4639
15
- fabricatio/config.py,sha256=hUv5XMzOkEw8cQjsVHTpPPix52IKwmxjBsZM6Px3xZI,16915
16
- fabricatio/core.py,sha256=VQ_JKgUGIy2gZ8xsTBZCdr_IP7wC5aPg0_bsOmjQ588,6458
17
- fabricatio/decorators.py,sha256=C0Gi7wcXC-0sWITqsSv3JdBGcgVJOlRvOt0FfO0aUsA,7554
18
- fabricatio/fs/curd.py,sha256=N6l2MncjrFfnXBRtteRouXp5Rjy8EAKC_i29_G-zz98,4618
19
- fabricatio/fs/readers.py,sha256=EZKN_AZdrp8DggJECP53QHw3uHeSDf-AwCAA_V7fNKU,1202
20
- fabricatio/fs/__init__.py,sha256=PCf0s_9KDjVfNw7AfPoJzGt3jMq4gJOfbcT4pb0D0ZY,588
21
- fabricatio/journal.py,sha256=stnEP88aUBA_GmU9gfTF2EZI8FS2OyMLGaMSTgK4QgA,476
22
- fabricatio/models/action.py,sha256=Rt3a9JWVhaoo7AatStzb9Gl45MKRcSeLWcOHJFCqNNM,8883
23
- fabricatio/models/events.py,sha256=QvlnS8FEELg6KNabcJMeh2GV_y0ZBzKOPphcteKYWYU,4183
24
- fabricatio/models/extra/advanced_judge.py,sha256=98NACWVFG01Q-tZDiMNwyQ5-RDVAZ73IVt3D9aqky4Y,574
25
- fabricatio/models/extra/article_base.py,sha256=SRMCwtxYMkJyA7tK2GG8rFmg2UJgQV7O3qyiVwoq2MQ,15826
26
- fabricatio/models/extra/article_essence.py,sha256=-vtI8Kua-XoAYXg82b3szT-vscrXne-zmlv2TIxWspI,9063
27
- fabricatio/models/extra/article_main.py,sha256=N5deYozSjmAyYO8_On85NesUV0mIyTsGdHUWtR2b6q4,8087
28
- fabricatio/models/extra/article_outline.py,sha256=jFbVgiwlo7rnwCGS6ToVgeMUOoRe99Edgbx95THR6z8,1450
29
- fabricatio/models/extra/article_proposal.py,sha256=DWn3MQUNQlXj9Fcm3xSONyxARz8goAroJUA6pWvBhHw,1398
30
- fabricatio/models/generic.py,sha256=nyfhgaIEsSvbDvcHrjULEgseBKRzZx2t21lfncwCsq4,19225
31
- fabricatio/models/kwargs_types.py,sha256=chJ-rHaeBVRUPuORHuGR3DdNxxTUrotz0eflPEh4l4w,5474
32
- fabricatio/models/role.py,sha256=mmQbJ6GKr2Gx3wtjEz8d-vYoXs09ffcEkT_eCXaDd3E,2782
33
- fabricatio/models/task.py,sha256=8NaR7ojQWyM740EDTqt9stwHKdrD6axCRpLKo0QzS-I,10492
34
- fabricatio/models/tool.py,sha256=kD0eB7OxO9geZOxO6JIKvCBeG-KOpRAkfRZqK_WGfW4,7105
35
- fabricatio/models/usages.py,sha256=BZXHdm198wMOaYvCqL7wBcSzAHUMS4mYeD_VCi08mmY,31736
36
- fabricatio/models/utils.py,sha256=yjxPZ6N7QGpGwkI_Vb28Ud3EhkdlB-tyfGRHAZMcGxs,5872
37
- fabricatio/parser.py,sha256=9Jzw-yV6uKbFvf6sPna-XHdziVGVBZWvPctgX_6ODL8,6251
38
- fabricatio/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
- fabricatio/toolboxes/arithmetic.py,sha256=WLqhY-Pikv11Y_0SGajwZx3WhsLNpHKf9drzAqOf_nY,1369
40
- fabricatio/toolboxes/fs.py,sha256=l4L1CVxJmjw9Ld2XUpIlWfV0_Fu_2Og6d3E13I-S4aE,736
41
- fabricatio/toolboxes/__init__.py,sha256=KBJi5OG_pExscdlM7Bnt_UF43j4I3Lv6G71kPVu4KQU,395
42
- fabricatio/workflows/articles.py,sha256=G5HGRr-DHuYuEcfhFdFAuDvTTJ9aSU_UQ2yYXEjTMtM,1047
43
- fabricatio/workflows/rag.py,sha256=-YYp2tlE9Vtfgpg6ROpu6QVO8j8yVSPa6yDzlN3qVxs,520
44
- fabricatio/_rust.pyi,sha256=dGTGV7viu3YAGl1cRKIWrdHPc1hlwk3_hbaDaswxdVo,3831
45
- fabricatio/_rust_instances.py,sha256=2GwF8aVfYNemRI2feBzH1CZfBGno-XJJE5imJokGEYw,314
46
- fabricatio/__init__.py,sha256=SzBYsRhZeL77jLtfJEjmoHOSwHwUGyvMATX6xfndLDM,1135
47
- fabricatio/_rust.cp312-win_amd64.pyd,sha256=8WKD2UwAiWvZL9Nrl7xvYdQjVX0zNIMuINGgdxtaIHU,1830912
48
- fabricatio-0.2.8.dev1.data/scripts/tdown.exe,sha256=8q6RV1e71w8_otae06rFwh3ESP7jxTx6mQiQMP09aJU,3399680
49
- fabricatio-0.2.8.dev1.dist-info/RECORD,,