fabricatio 0.2.9.dev2__cp312-cp312-win_amd64.whl → 0.2.9.dev4__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.
@@ -8,15 +8,15 @@ descriptions, examples, and metadata for each rule and rule set, making it suita
8
8
  complex rule management systems.
9
9
  """
10
10
 
11
- from typing import List
11
+ from typing import List, Self, Tuple, Unpack
12
12
 
13
13
  from fabricatio.models.generic import Language, PersistentAble, SketchedAble, WithBriefing
14
+ from more_itertools import flatten
14
15
 
15
16
 
16
- class Rule(WithBriefing,Language, SketchedAble,PersistentAble):
17
+ class Rule(WithBriefing, Language, SketchedAble, PersistentAble):
17
18
  """Represents a rule or guideline for a specific topic."""
18
19
 
19
-
20
20
  violation_examples: List[str]
21
21
  """A list of concrete examples demonstrating violations of this rule. Each example should
22
22
  be a clear scenario or case that illustrates how the rule can be broken, including the
@@ -30,7 +30,7 @@ class Rule(WithBriefing,Language, SketchedAble,PersistentAble):
30
30
  serve as practical guidance for implementing the rule correctly."""
31
31
 
32
32
 
33
- class RuleSet( SketchedAble, PersistentAble, WithBriefing,Language):
33
+ class RuleSet(SketchedAble, PersistentAble, WithBriefing, Language):
34
34
  """Represents a collection of rules and guidelines for a particular topic."""
35
35
 
36
36
  rules: List[Rule]
@@ -38,3 +38,15 @@ class RuleSet( SketchedAble, PersistentAble, WithBriefing,Language):
38
38
  a well-defined, specific guideline that contributes to the overall purpose of the rule set.
39
39
  The rules should be logically organized and consistent with each other, forming a coherent
40
40
  framework for the topic or domain covered by the rule set."""
41
+
42
+ @classmethod
43
+ def gather(cls, *rulesets: Unpack[Tuple["RuleSet",...]]) -> Self:
44
+ """Gathers multiple rule sets into a single rule set."""
45
+ if not rulesets:
46
+ raise ValueError("No rulesets provided")
47
+ return cls(
48
+ language=rulesets[0].language,
49
+ name=";".join(ruleset.name for ruleset in rulesets),
50
+ description=";".join(ruleset.description for ruleset in rulesets),
51
+ rules=list(flatten(r.rules for r in rulesets)),
52
+ )
@@ -36,6 +36,7 @@ class Base(BaseModel):
36
36
  The `model_config` uses `use_attribute_docstrings=True` to ensure field descriptions are
37
37
  pulled from the attribute's docstring instead of the default Pydantic behavior.
38
38
  """
39
+
39
40
  model_config = ConfigDict(use_attribute_docstrings=True)
40
41
 
41
42
 
@@ -45,6 +46,7 @@ class Display(Base):
45
46
  Provides methods to generate both pretty-printed and compact JSON representations of the model.
46
47
  Used for debugging and logging purposes.
47
48
  """
49
+
48
50
  def display(self) -> str:
49
51
  """Generate pretty-printed JSON representation.
50
52
 
@@ -102,6 +104,20 @@ class Described(Base):
102
104
  this object's intent and application."""
103
105
 
104
106
 
107
+ class Titled(Base):
108
+ """Class that includes a title attribute."""
109
+
110
+ title: str
111
+ """The title of this object, make it professional and concise.No prefixed heading number should be included."""
112
+
113
+
114
+ class WordCount(Base):
115
+ """Class that includes a word count attribute."""
116
+
117
+ expected_word_count: int
118
+ """Expected word count of this research component."""
119
+
120
+
105
121
  class AsPrompt(Base):
106
122
  """Class that provides a method to generate a prompt from the model.
107
123
 
@@ -194,6 +210,7 @@ class PersistentAble(Base):
194
210
  Enables saving model instances to disk with timestamped filenames and loading from persisted files.
195
211
  Implements basic versioning through filename hashing and timestamping.
196
212
  """
213
+
197
214
  def persist(self, path: str | Path) -> Self:
198
215
  """Save model instance to disk with versioned filename.
199
216
 
@@ -208,7 +225,7 @@ class PersistentAble(Base):
208
225
  - Hash generated from JSON content ensures uniqueness
209
226
  """
210
227
  p = Path(path)
211
- out = self.model_dump_json()
228
+ out = self.model_dump_json(indent=1)
212
229
 
213
230
  # Generate a timestamp in the format YYYYMMDD_HHMMSS
214
231
  timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
@@ -229,7 +246,7 @@ class PersistentAble(Base):
229
246
  return self
230
247
 
231
248
  @classmethod
232
- def from_latest_persistent(cls, dir_path: str | Path) -> Self:
249
+ def from_latest_persistent(cls, dir_path: str | Path) -> Optional[Self]:
233
250
  """Load most recent persisted instance from directory.
234
251
 
235
252
  Args:
@@ -244,13 +261,13 @@ class PersistentAble(Base):
244
261
  """
245
262
  dir_path = Path(dir_path)
246
263
  if not dir_path.is_dir():
247
- raise NotADirectoryError(f"{dir_path} is not a valid directory")
264
+ return None
248
265
 
249
266
  pattern = f"{cls.__name__}_*.json"
250
267
  files = list(dir_path.glob(pattern))
251
268
 
252
269
  if not files:
253
- raise FileNotFoundError(f"No persistent files found for {cls.__name__} in {dir_path}")
270
+ return None
254
271
 
255
272
  def _get_timestamp(file_path: Path) -> datetime:
256
273
  stem = file_path.stem
@@ -282,8 +299,7 @@ class Language(Base):
282
299
  """Class that provides a language attribute."""
283
300
 
284
301
  language: str
285
- """The written language of this object, which should be aligned to the original requirement
286
- For example if the requirement is in Chinese, the language should be set to `zh`, if the requirement is in English, the language should be set to `en` and etc."""
302
+ """The fullname of the written language of this object."""
287
303
 
288
304
 
289
305
  class ModelHash(Base):
@@ -670,6 +686,7 @@ class ScopedConfig(Base):
670
686
  Manages LLM, embedding, and vector database configurations with fallback logic.
671
687
  Allows configuration values to be overridden in a hierarchical manner.
672
688
  """
689
+
673
690
  llm_api_endpoint: Optional[HttpUrl] = None
674
691
  """The OpenAI API endpoint."""
675
692
 
@@ -130,7 +130,6 @@ class LLMUsage(ScopedConfig):
130
130
  question: str,
131
131
  system_message: str = "",
132
132
  n: PositiveInt | None = None,
133
- stream_buffer_size: int = 50,
134
133
  **kwargs: Unpack[LLMKwargs],
135
134
  ) -> Sequence[TextChoices | Choices | StreamingChoices]:
136
135
  """Asynchronously invokes the language model with a question and optional system message.
@@ -139,7 +138,6 @@ class LLMUsage(ScopedConfig):
139
138
  question (str): The question to ask the model.
140
139
  system_message (str): The system message to provide context to the model. Defaults to an empty string.
141
140
  n (PositiveInt | None): The number of responses to generate. Defaults to the instance's `llm_generation_count` or the global configuration.
142
- stream_buffer_size (int): The buffer size for streaming responses. Defaults to 50.
143
141
  **kwargs (Unpack[LLMKwargs]): Additional keyword arguments for the LLM usage.
144
142
 
145
143
  Returns:
@@ -155,16 +153,7 @@ class LLMUsage(ScopedConfig):
155
153
  if isinstance(resp, CustomStreamWrapper):
156
154
  if not configs.debug.streaming_visible and (pack := stream_chunk_builder(await asyncstdlib.list())):
157
155
  return pack.choices
158
- chunks = []
159
- buffer = ""
160
- async for chunk in resp:
161
- chunks.append(chunk)
162
- buffer += chunk.choices[0].delta.content or ""
163
- if len(buffer) > stream_buffer_size:
164
- print(buffer, end="") # noqa: T201
165
- buffer = ""
166
- print(buffer) # noqa: T201
167
- if pack := stream_chunk_builder(chunks):
156
+ if pack := stream_chunk_builder(await asyncstdlib.list(resp)):
168
157
  return pack.choices
169
158
  logger.critical(err := f"Unexpected response type: {type(resp)}")
170
159
  raise ValueError(err)
@@ -310,10 +299,11 @@ class LLMUsage(ScopedConfig):
310
299
  for lap in range(max_validations):
311
300
  try:
312
301
  if ((validated := validator(response := await self.aask(question=q, **kwargs))) is not None) or (
313
- co_extractor
302
+ co_extractor is not None
303
+ and logger.debug("Co-extraction is enabled.") is None
314
304
  and (
315
305
  validated := validator(
316
- await self.aask(
306
+ response:=await self.aask(
317
307
  question=(
318
308
  TEMPLATE_MANAGER.render_template(
319
309
  configs.templates.co_validation_template,
@@ -330,12 +320,13 @@ class LLMUsage(ScopedConfig):
330
320
  return validated
331
321
 
332
322
  except RateLimitError as e:
333
- logger.warning(f"Rate limit error: {e}")
323
+ logger.warning(f"Rate limit error:\n{e}")
334
324
  continue
335
325
  except Exception as e: # noqa: BLE001
336
- logger.error(f"Error during validation: \n{e}")
326
+ logger.error(f"Error during validation:\n{e}")
337
327
  logger.debug(traceback.format_exc())
338
328
  break
329
+ logger.error(f"Failed to validate the response at {lap}th attempt:\n{response}")
339
330
  if not kwargs.get("no_cache"):
340
331
  kwargs["no_cache"] = True
341
332
  logger.debug("Closed the cache for the next attempt")
fabricatio/parser.py CHANGED
@@ -48,10 +48,10 @@ class Capture(BaseModel):
48
48
  case "json" if configs.general.use_json_repair:
49
49
  logger.debug("Applying json repair to text.")
50
50
  if isinstance(text, str):
51
- return repair_json(text, ensure_ascii=False)
52
- return [repair_json(item, ensure_ascii=False) for item in text]
51
+ return repair_json(text, ensure_ascii=False) # pyright: ignore [reportReturnType]
52
+ return [repair_json(item, ensure_ascii=False) for item in text] # pyright: ignore [reportReturnType, reportGeneralTypeIssues]
53
53
  case _:
54
- return text
54
+ return text # pyright: ignore [reportReturnType]
55
55
 
56
56
  def capture(self, text: str) -> Tuple[str, ...] | str | None:
57
57
  """Capture the first occurrence of the pattern in the given text.
@@ -88,7 +88,7 @@ class Capture(BaseModel):
88
88
  if (cap := self.capture(text)) is None:
89
89
  return None
90
90
  try:
91
- return convertor(cap)
91
+ return convertor(cap) # pyright: ignore [reportArgumentType]
92
92
  except (ValueError, SyntaxError, ValidationError) as e:
93
93
  logger.error(f"Failed to convert text using {convertor.__name__} to convert.\nerror: {e}\n {cap}")
94
94
  return None
@@ -120,7 +120,7 @@ class Capture(BaseModel):
120
120
  judges.append(lambda output_obj: len(output_obj) == length)
121
121
 
122
122
  if (out := self.convert_with(text, deserializer)) and all(j(out) for j in judges):
123
- return out
123
+ return out # pyright: ignore [reportReturnType]
124
124
  return None
125
125
 
126
126
  @classmethod
Binary file
fabricatio/rust.pyi CHANGED
@@ -1,3 +1,16 @@
1
+ """Python interface definitions for Rust-based functionality.
2
+
3
+ This module provides type stubs and documentation for Rust-implemented utilities,
4
+ including template rendering, cryptographic hashing, language detection, and
5
+ bibliography management. The actual implementations are provided by Rust modules.
6
+
7
+ Key Features:
8
+ - TemplateManager: Handles Handlebars template rendering and management.
9
+ - BibManager: Manages BibTeX bibliography parsing and querying.
10
+ - Cryptographic utilities: BLAKE3 hashing.
11
+ - Text utilities: Word boundary splitting and word counting.
12
+ """
13
+
1
14
  from pathlib import Path
2
15
  from typing import List, Optional
3
16
 
@@ -81,6 +94,26 @@ def blake3_hash(content: bytes) -> str:
81
94
  def detect_language(string: str) -> str:
82
95
  """Detect the language of a given string."""
83
96
 
97
+ def split_word_bounds(string: str) -> List[str]:
98
+ """Split the string into words based on word boundaries.
99
+
100
+ Args:
101
+ string: The input string to be split.
102
+
103
+ Returns:
104
+ A list of words extracted from the string.
105
+ """
106
+
107
+ def word_count(string: str) -> int:
108
+ """Count the number of words in the string.
109
+
110
+ Args:
111
+ string: The input string to count words from.
112
+
113
+ Returns:
114
+ The number of words in the string.
115
+ """
116
+
84
117
  class BibManager:
85
118
  """BibTeX bibliography manager for parsing and querying citation data."""
86
119
 
fabricatio/utils.py CHANGED
@@ -1,6 +1,6 @@
1
1
  """A collection of utility functions for the fabricatio package."""
2
2
 
3
- from typing import Any, Dict, List, Optional
3
+ from typing import Any, Dict, List, Mapping, Optional
4
4
 
5
5
  from questionary import text
6
6
 
@@ -25,16 +25,16 @@ async def ask_edit(
25
25
  return res
26
26
 
27
27
 
28
- def override_kwargs(kwargs: Dict[str,Any], **overrides) -> Dict[str, Any]:
28
+ def override_kwargs(kwargs: Mapping[str,Any], **overrides) -> Dict[str, Any]:
29
29
  """Override the values in kwargs with the provided overrides."""
30
- new_kwargs = kwargs.copy()
30
+ new_kwargs = dict(kwargs.items())
31
31
  new_kwargs.update({k: v for k, v in overrides.items() if v is not None})
32
32
  return new_kwargs
33
33
 
34
34
 
35
- def fallback_kwargs(kwargs: Dict[str, Any], **overrides) -> Dict[str, Any]:
35
+ def fallback_kwargs(kwargs: Mapping[str, Any], **overrides) -> Dict[str, Any]:
36
36
  """Fallback the values in kwargs with the provided overrides."""
37
- new_kwargs = kwargs.copy()
37
+ new_kwargs = dict(kwargs.items())
38
38
  new_kwargs.update({k: v for k, v in overrides.items() if k not in new_kwargs and v is not None})
39
39
  return new_kwargs
40
40
 
@@ -1,6 +1,6 @@
1
1
  """Store article essence in the database."""
2
2
 
3
- from fabricatio.actions.article import CorrectOutline, CorrectProposal, GenerateArticleProposal, GenerateOutline
3
+ from fabricatio.actions.article import GenerateArticleProposal, GenerateInitialOutline
4
4
  from fabricatio.actions.output import DumpFinalizedOutput
5
5
  from fabricatio.models.action import WorkFlow
6
6
 
@@ -9,7 +9,7 @@ WriteOutlineWorkFlow = WorkFlow(
9
9
  description="Generate an outline for an article. dump the outline to the given path. in typst format.",
10
10
  steps=(
11
11
  GenerateArticleProposal,
12
- GenerateOutline(output_key="to_dump"),
12
+ GenerateInitialOutline(output_key="article_outline"),
13
13
  DumpFinalizedOutput(output_key="task_output"),
14
14
  ),
15
15
  )
@@ -18,9 +18,7 @@ WriteOutlineCorrectedWorkFlow = WorkFlow(
18
18
  description="Generate an outline for an article. dump the outline to the given path. in typst format.",
19
19
  steps=(
20
20
  GenerateArticleProposal,
21
- CorrectProposal(output_key="article_proposal"),
22
- GenerateOutline,
23
- CorrectOutline(output_key="to_dump"),
21
+ GenerateInitialOutline(output_key="article_outline"),
24
22
  DumpFinalizedOutput(output_key="task_output"),
25
23
  ),
26
24
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fabricatio
3
- Version: 0.2.9.dev2
3
+ Version: 0.2.9.dev4
4
4
  Classifier: License :: OSI Approved :: MIT License
5
5
  Classifier: Programming Language :: Rust
6
6
  Classifier: Programming Language :: Python :: 3.12
@@ -1,61 +1,61 @@
1
- fabricatio-0.2.9.dev2.dist-info/METADATA,sha256=ElK7Y7uZngHDENVdObyZ5dxGFdvEt1tXligNdjKUKjc,5288
2
- fabricatio-0.2.9.dev2.dist-info/WHEEL,sha256=jABKVkLC9kJr8mi_er5jOqpiQUjARSLXDUIIxDqsS50,96
3
- fabricatio-0.2.9.dev2.dist-info/licenses/LICENSE,sha256=do7J7EiCGbq0QPbMAL_FqLYufXpHnCnXBOuqVPwSV8Y,1088
4
- fabricatio/actions/article.py,sha256=D-9aGLC1eW9w_aNICGNpdkUm7jx01h8nBcAPSW_Da7E,12788
5
- fabricatio/actions/article_rag.py,sha256=dkfskNqntVPi81Xm_NFdTQM8v2nR9FJIexzkK9rg-NU,4352
6
- fabricatio/actions/output.py,sha256=4b5fs_blwWDjm3qgEoHgOJV8Bb6YzE1uQH2J7KG3I8o,5761
1
+ fabricatio-0.2.9.dev4.dist-info/METADATA,sha256=qo6WjSrz5Br7ypVenUufk1zhMg9yW_Qzt_hoLuOPFKo,5288
2
+ fabricatio-0.2.9.dev4.dist-info/WHEEL,sha256=jABKVkLC9kJr8mi_er5jOqpiQUjARSLXDUIIxDqsS50,96
3
+ fabricatio-0.2.9.dev4.dist-info/licenses/LICENSE,sha256=do7J7EiCGbq0QPbMAL_FqLYufXpHnCnXBOuqVPwSV8Y,1088
4
+ fabricatio/actions/article.py,sha256=uwRXKCzTp5C-vwIMuCJOsTwCU_F2uJ3cVNKS74AABbo,12669
5
+ fabricatio/actions/article_rag.py,sha256=itGH-VCKTVFm7hrYIOOT4FyFXP8CbL042kpYNI9a2BE,4735
6
+ fabricatio/actions/output.py,sha256=gkC2u_VpMJ6jOnbyRAJN24UVK7iDAMzhItYukaW8Spk,6498
7
7
  fabricatio/actions/rag.py,sha256=5nSih3YUkdt1uU02hSAMW6sADq9mkMOR1wDv7zIrIGQ,2737
8
- fabricatio/actions/rules.py,sha256=pA6ADNgpPWBp2a3FTEuF--0INHg0QJxc0kfxF1zMDXQ,1541
8
+ fabricatio/actions/rules.py,sha256=SNvAvQx4xUare16Za_dEpYlYI_PJNnbiO-E0XDa5JT4,2857
9
9
  fabricatio/actions/__init__.py,sha256=wVENCFtpVb1rLFxoOFJt9-8smLWXuJV7IwA8P3EfFz4,48
10
10
  fabricatio/capabilities/advanced_judge.py,sha256=selB0Gwf1F4gGJlwBiRo6gI4KOUROgh3WnzO3mZFEls,706
11
- fabricatio/capabilities/censor.py,sha256=7LJrybFsv5yGjd_bfiempUw_YpmiYBze9XIzRLqH2CA,3787
12
- fabricatio/capabilities/check.py,sha256=9NTRyJ8FvK-cC4o0KUolhZu58JLeOU8Mz9HIoBuNxP4,8044
13
- fabricatio/capabilities/correct.py,sha256=b6GCcLzRruC6VjFS-uhC3m-7LGosr3Pso3cYLokQ03Y,9217
11
+ fabricatio/capabilities/censor.py,sha256=bBT5qy-kp7fh8g4Lz3labSwxwJ60gGd_vrkc6k1cZ1U,4719
12
+ fabricatio/capabilities/check.py,sha256=q12h9mQyGGjWiJp4r7JgYWeuWzj0fT3DxtL7s4n-0pY,8520
13
+ fabricatio/capabilities/correct.py,sha256=W_cInqlciNEhyMK0YI53jk4EvW9uAdge90IO9OElUmA,10420
14
14
  fabricatio/capabilities/propose.py,sha256=hkBeSlmcTdfYWT-ph6nlbtHXBozi_JXqXlWcnBy3W78,2007
15
15
  fabricatio/capabilities/rag.py,sha256=8TTJSV2Tz0naXyOQ5c_RQ4h9ZxyOOSE7BvyWxKkQMU0,17722
16
- fabricatio/capabilities/rating.py,sha256=5HjWGk-tFscnMo4cFTAE820yeOaXT9utNSRKVrSTbSA,17012
16
+ fabricatio/capabilities/rating.py,sha256=Wt_H5fA1H4XuZGIMI8pr0cp_6jnXJABlo8lfU_4Fp5A,17645
17
17
  fabricatio/capabilities/review.py,sha256=-EMZe0ADFPT6fPGmra16UPjJC1M3rAs6dPFdTZ88Fgg,5060
18
18
  fabricatio/capabilities/task.py,sha256=JahC61X233UIPsjovxJgc_yqj_BjWZJBCzJZq11M2Xk,4417
19
19
  fabricatio/capabilities/__init__.py,sha256=v1cHRHIJ2gxyqMLNCs6ERVcCakSasZNYzmMI4lqAcls,57
20
- fabricatio/config.py,sha256=fJHPY3LXSZWpEF17rAkY-IKeuB7oFlQrkRBIsModnlI,17687
20
+ fabricatio/config.py,sha256=gqhdKxoj4S0EmQKprAEWUARn7yJg-w5UJ7d7GPlyttw,17631
21
21
  fabricatio/core.py,sha256=VQ_JKgUGIy2gZ8xsTBZCdr_IP7wC5aPg0_bsOmjQ588,6458
22
22
  fabricatio/decorators.py,sha256=C0Gi7wcXC-0sWITqsSv3JdBGcgVJOlRvOt0FfO0aUsA,7554
23
23
  fabricatio/fs/curd.py,sha256=p8y0LGKgVDk-CWOlm37E6wg7RK6RCD6denKo-VsW28c,4763
24
- fabricatio/fs/readers.py,sha256=EZKN_AZdrp8DggJECP53QHw3uHeSDf-AwCAA_V7fNKU,1202
24
+ fabricatio/fs/readers.py,sha256=M5kojKWsJQMQpE4CBbYvas0JKmPaiaYSfWmiqJx1SP4,1884
25
25
  fabricatio/fs/__init__.py,sha256=PCf0s_9KDjVfNw7AfPoJzGt3jMq4gJOfbcT4pb0D0ZY,588
26
26
  fabricatio/journal.py,sha256=stnEP88aUBA_GmU9gfTF2EZI8FS2OyMLGaMSTgK4QgA,476
27
- fabricatio/models/action.py,sha256=N7h03z0fWSBVnSzc6uWRetrZluXr6Ibg4D5rD-vjUSU,9778
27
+ fabricatio/models/action.py,sha256=Kfa-zojgHQ1vPoC2lQp-thTTp0oySKn7k6I4ea6iYTs,9837
28
28
  fabricatio/models/adv_kwargs_types.py,sha256=dcYMLn6xcnWLZTLTBdtpgUZWi-VBeub721GzHRZFT1g,860
29
29
  fabricatio/models/events.py,sha256=QvlnS8FEELg6KNabcJMeh2GV_y0ZBzKOPphcteKYWYU,4183
30
- fabricatio/models/extra/advanced_judge.py,sha256=mi3KiB8FUuSYICzXPXKwVhCyRE1GL3gHLkwuc-4mh3c,999
31
- fabricatio/models/extra/article_base.py,sha256=suOcuvxGwnTDLRyiWDEhCsw2h2zrClBclGzsO3273XI,17112
30
+ fabricatio/models/extra/advanced_judge.py,sha256=x2FxicxqpN1eKD7PnL7--wYvxZsWnueAlCyHodRuFrU,1022
31
+ fabricatio/models/extra/article_base.py,sha256=WWfa8LJVjrs_yJGBCI81KF5VtW62rq_IcdFvBqZ2nq0,20075
32
32
  fabricatio/models/extra/article_essence.py,sha256=xd6j-PDqjhrMjgUmyfk6HqkyMLu-sS9feUo0sZ3QABY,2825
33
- fabricatio/models/extra/article_main.py,sha256=6ULNb6kHW6wlFs1P-4hJsQdB4fSKs2yTqwXMHEcTO1g,8202
33
+ fabricatio/models/extra/article_main.py,sha256=main-2eh-dH1SYN_zW2kFajMOrpatAVQVgQ-_7Yvsj4,11669
34
34
  fabricatio/models/extra/article_outline.py,sha256=w7O0SHgC7exbptWVbR62FMHAueMgBpyWKVYMGGl_oj8,1427
35
- fabricatio/models/extra/article_proposal.py,sha256=BLt0GBqrDDKSXy9ukrmYCM2HInYVGI5MVGkUYvoNBf8,2020
36
- fabricatio/models/extra/patches.py,sha256=-nBsse7g1astJh_IWZLXJdEQxpRla-DkHWqSHE-zbMU,989
37
- fabricatio/models/extra/problem.py,sha256=KwYkc7kjoEG7cwj9C8sWLoZgtBqJVuxlU_7KkvtSgO0,5828
38
- fabricatio/models/extra/rule.py,sha256=SDAPub17OzVJlPby358MQpKCyxmmojWucfuyr5zogeI,2091
35
+ fabricatio/models/extra/article_proposal.py,sha256=NbyjW-7UiFPtnVD9nte75re4xL2pD4qL29PpNV4Cg_M,1870
36
+ fabricatio/models/extra/patches.py,sha256=_WNCxtYzzsVfUxI16vu4IqsLahLYRHdbQN9er9tqhC0,997
37
+ fabricatio/models/extra/problem.py,sha256=RyvHQM8XgMVqDT7BCtXU0SEgODWGvTPBQIoHOURF5Oc,6656
38
+ fabricatio/models/extra/rule.py,sha256=ogJJYmV5F-CIRG2Dl95plgShskT8jzuh_0KWKHRonbA,2668
39
39
  fabricatio/models/extra/__init__.py,sha256=XlYnS_2B9nhLhtQkjE7rvvfPmAAtXVdNi9bSDAR-Ge8,54
40
- fabricatio/models/generic.py,sha256=Zfokr5BhIW2Rt6_cOfMoHPCsLDRSHENwqagdD-YqbEQ,30156
40
+ fabricatio/models/generic.py,sha256=7M1GZpgle7iwrSpzMmTBxpPx7zxCLH13l61h75woa_E,30237
41
41
  fabricatio/models/kwargs_types.py,sha256=sMDA85SoC1AOJ5k6qC8qUiUv0Ne0_5ThU9FZITRNen4,5673
42
42
  fabricatio/models/role.py,sha256=-CRcj5_M3_ciLPzwiNn92grBmwoSLQ-n4koVZiCNTBM,2953
43
43
  fabricatio/models/task.py,sha256=YXvO3upJkTqMQjPgUGfp0bIiSyZzek2f4IagHdMW5Ik,10491
44
44
  fabricatio/models/tool.py,sha256=jQ51g4lwTPfsMF1nbreDJtBczbxIHoXcPuLSOqHliq8,12506
45
- fabricatio/models/usages.py,sha256=atMrA1MlPthpKYjV5lIrvJwe-BFomOQXQAWAS85YFqw,32319
45
+ fabricatio/models/usages.py,sha256=PX13lUCYB9XSM5tKrpYK-ov5jKclWlF9xGmPgUoovLk,32030
46
46
  fabricatio/models/utils.py,sha256=Ac5g-8ic6q_w7dhNuh-iiofpL1sqOACxbjPPTljP2LY,4417
47
- fabricatio/parser.py,sha256=UOSvXigEXK-eXsr3m3b7glOhbBWs4kDJTeTNyuqA9ic,6315
47
+ fabricatio/parser.py,sha256=qN2godNsArmb90btOMxgqlol57166DyYsV2JlU8DlHs,6532
48
48
  fabricatio/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
- fabricatio/rust.pyi,sha256=DC4d8zQierX3J-M1oTaXyGBoBPus7N5uFt0hyGNl3P0,5212
49
+ fabricatio/rust.pyi,sha256=5xfla5dCACfKTkHztMc5_iCEmdDZtDH9HPG2YC92L8o,6266
50
50
  fabricatio/rust_instances.py,sha256=Byeo8KHW_dJiXujJq7YPGDLBX5bHNDYbBc4sY3uubVY,313
51
51
  fabricatio/toolboxes/arithmetic.py,sha256=WLqhY-Pikv11Y_0SGajwZx3WhsLNpHKf9drzAqOf_nY,1369
52
52
  fabricatio/toolboxes/fs.py,sha256=l4L1CVxJmjw9Ld2XUpIlWfV0_Fu_2Og6d3E13I-S4aE,736
53
53
  fabricatio/toolboxes/__init__.py,sha256=KBJi5OG_pExscdlM7Bnt_UF43j4I3Lv6G71kPVu4KQU,395
54
- fabricatio/utils.py,sha256=QJR00IuclL2nNTSfpTNBRYJmNjc_DNXGtrYWjatWpq8,1681
55
- fabricatio/workflows/articles.py,sha256=G5HGRr-DHuYuEcfhFdFAuDvTTJ9aSU_UQ2yYXEjTMtM,1047
54
+ fabricatio/utils.py,sha256=uy-W5b1d8oM1UTk2IT1lLGKIn_Pmo3XU5xbahjyDESE,1710
55
+ fabricatio/workflows/articles.py,sha256=ObYTFUqLUk_CzdmmnX6S7APfxcGmPFqnFr9pdjU7Z4Y,969
56
56
  fabricatio/workflows/rag.py,sha256=-YYp2tlE9Vtfgpg6ROpu6QVO8j8yVSPa6yDzlN3qVxs,520
57
57
  fabricatio/workflows/__init__.py,sha256=5ScFSTA-bvhCesj3U9Mnmi6Law6N1fmh5UKyh58L3u8,51
58
58
  fabricatio/__init__.py,sha256=Rmvq2VgdS2u68vnOi2i5RbeWbAwrJDbk8D8D883PJWE,1022
59
- fabricatio/rust.cp312-win_amd64.pyd,sha256=J7RO4JEsfwpgeZSsV2wWtlMd3TXL0a90AJdDLkqlX58,2170880
60
- fabricatio-0.2.9.dev2.data/scripts/tdown.exe,sha256=VvK4W6LYfgPzIEwegvpCKkmuhXkBR8MgzIQEYJhNIXQ,3395072
61
- fabricatio-0.2.9.dev2.dist-info/RECORD,,
59
+ fabricatio/rust.cp312-win_amd64.pyd,sha256=5rWQDW_NkAoojnwNoStr9qIfa-JMcNlhEf1RLYSHM2o,2193920
60
+ fabricatio-0.2.9.dev4.data/scripts/tdown.exe,sha256=bgxOSFt8NMWHddSQ27fn9f_AyO47PlYNcK1EuUJRYJo,3364864
61
+ fabricatio-0.2.9.dev4.dist-info/RECORD,,