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.
- fabricatio/actions/article.py +84 -107
- fabricatio/actions/article_rag.py +15 -10
- fabricatio/actions/output.py +20 -4
- fabricatio/actions/rules.py +37 -4
- fabricatio/capabilities/censor.py +21 -5
- fabricatio/capabilities/check.py +40 -22
- fabricatio/capabilities/correct.py +30 -11
- fabricatio/capabilities/rating.py +53 -47
- fabricatio/config.py +2 -2
- fabricatio/fs/readers.py +20 -1
- fabricatio/models/action.py +6 -6
- fabricatio/models/extra/advanced_judge.py +3 -3
- fabricatio/models/extra/article_base.py +117 -57
- fabricatio/models/extra/article_main.py +102 -14
- fabricatio/models/extra/article_proposal.py +15 -14
- fabricatio/models/extra/patches.py +6 -6
- fabricatio/models/extra/problem.py +20 -7
- fabricatio/models/extra/rule.py +16 -4
- fabricatio/models/generic.py +23 -6
- fabricatio/models/usages.py +7 -16
- fabricatio/parser.py +5 -5
- fabricatio/rust.cp312-win_amd64.pyd +0 -0
- fabricatio/rust.pyi +33 -0
- fabricatio/utils.py +5 -5
- fabricatio/workflows/articles.py +3 -5
- fabricatio-0.2.9.dev4.data/scripts/tdown.exe +0 -0
- {fabricatio-0.2.9.dev2.dist-info → fabricatio-0.2.9.dev4.dist-info}/METADATA +1 -1
- {fabricatio-0.2.9.dev2.dist-info → fabricatio-0.2.9.dev4.dist-info}/RECORD +30 -30
- fabricatio-0.2.9.dev2.data/scripts/tdown.exe +0 -0
- {fabricatio-0.2.9.dev2.dist-info → fabricatio-0.2.9.dev4.dist-info}/WHEEL +0 -0
- {fabricatio-0.2.9.dev2.dist-info → fabricatio-0.2.9.dev4.dist-info}/licenses/LICENSE +0 -0
fabricatio/models/extra/rule.py
CHANGED
@@ -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(
|
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
|
+
)
|
fabricatio/models/generic.py
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
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
|
|
fabricatio/models/usages.py
CHANGED
@@ -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
|
-
|
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
|
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
|
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:
|
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.
|
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:
|
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.
|
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
|
|
fabricatio/workflows/articles.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
"""Store article essence in the database."""
|
2
2
|
|
3
|
-
from fabricatio.actions.article import
|
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
|
-
|
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
|
-
|
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
|
)
|
Binary file
|
@@ -1,61 +1,61 @@
|
|
1
|
-
fabricatio-0.2.9.
|
2
|
-
fabricatio-0.2.9.
|
3
|
-
fabricatio-0.2.9.
|
4
|
-
fabricatio/actions/article.py,sha256=
|
5
|
-
fabricatio/actions/article_rag.py,sha256=
|
6
|
-
fabricatio/actions/output.py,sha256=
|
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=
|
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=
|
12
|
-
fabricatio/capabilities/check.py,sha256=
|
13
|
-
fabricatio/capabilities/correct.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
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=
|
31
|
-
fabricatio/models/extra/article_base.py,sha256=
|
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=
|
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=
|
36
|
-
fabricatio/models/extra/patches.py,sha256
|
37
|
-
fabricatio/models/extra/problem.py,sha256=
|
38
|
-
fabricatio/models/extra/rule.py,sha256=
|
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=
|
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=
|
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=
|
47
|
+
fabricatio/parser.py,sha256=qN2godNsArmb90btOMxgqlol57166DyYsV2JlU8DlHs,6532
|
48
48
|
fabricatio/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
49
|
-
fabricatio/rust.pyi,sha256=
|
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=
|
55
|
-
fabricatio/workflows/articles.py,sha256=
|
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=
|
60
|
-
fabricatio-0.2.9.
|
61
|
-
fabricatio-0.2.9.
|
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,,
|
Binary file
|
File without changes
|
File without changes
|