fabricatio 0.3.14.dev4__cp313-cp313-win_amd64.whl → 0.3.14.dev7__cp313-cp313-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_rag.py +57 -66
- fabricatio/capabilities/rag.py +30 -29
- fabricatio/models/extra/aricle_rag.py +13 -10
- fabricatio/models/extra/article_base.py +4 -4
- fabricatio/models/extra/article_main.py +9 -13
- fabricatio/models/tool.py +3 -3
- fabricatio/rust.cp313-win_amd64.pyd +0 -0
- fabricatio/rust.pyi +66 -25
- fabricatio-0.3.14.dev7.data/scripts/tdown.exe +0 -0
- fabricatio-0.3.14.dev7.data/scripts/ttm.exe +0 -0
- {fabricatio-0.3.14.dev4.dist-info → fabricatio-0.3.14.dev7.dist-info}/METADATA +1 -1
- {fabricatio-0.3.14.dev4.dist-info → fabricatio-0.3.14.dev7.dist-info}/RECORD +21 -21
- {fabricatio-0.3.14.dev4.dist-info → fabricatio-0.3.14.dev7.dist-info}/WHEEL +1 -1
- fabricatio-0.3.14.dev4.data/scripts/tdown.exe +0 -0
- fabricatio-0.3.14.dev4.data/scripts/ttm.exe +0 -0
- {fabricatio-0.3.14.dev4.dist-info → fabricatio-0.3.14.dev7.dist-info}/licenses/LICENSE +0 -0
@@ -1,10 +1,10 @@
|
|
1
1
|
"""A module for writing articles using RAG (Retrieval-Augmented Generation) capabilities."""
|
2
2
|
|
3
3
|
from asyncio import gather
|
4
|
-
from pathlib import Path
|
5
|
-
from typing import ClassVar, List, Optional
|
6
4
|
|
5
|
+
from pathlib import Path
|
7
6
|
from pydantic import Field, PositiveInt
|
7
|
+
from typing import ClassVar, List, Optional
|
8
8
|
|
9
9
|
from fabricatio.capabilities.advanced_rag import AdvancedRAG
|
10
10
|
from fabricatio.capabilities.censor import Censor
|
@@ -21,10 +21,7 @@ from fabricatio.models.extra.rule import RuleSet
|
|
21
21
|
from fabricatio.models.kwargs_types import ChooseKwargs, LLMKwargs
|
22
22
|
from fabricatio.rust import (
|
23
23
|
BibManager,
|
24
|
-
|
25
|
-
convert_all_inline_tex,
|
26
|
-
convert_to_block_formula,
|
27
|
-
convert_to_inline_formula,
|
24
|
+
convert_all_tex_math,
|
28
25
|
fix_misplaced_labels,
|
29
26
|
)
|
30
27
|
from fabricatio.utils import ok
|
@@ -78,11 +75,11 @@ class WriteArticleContentRAG(Action, Extract, AdvancedRAG):
|
|
78
75
|
tei_endpoint: Optional[str] = None
|
79
76
|
|
80
77
|
async def _execute(
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
78
|
+
self,
|
79
|
+
article_outline: ArticleOutline,
|
80
|
+
collection_name: Optional[str] = None,
|
81
|
+
supervisor: Optional[bool] = None,
|
82
|
+
**cxt,
|
86
83
|
) -> Article:
|
87
84
|
article = Article.from_outline(article_outline).update_ref(article_outline)
|
88
85
|
self.target_collection = collection_name or self.safe_target_collection
|
@@ -103,12 +100,12 @@ class WriteArticleContentRAG(Action, Extract, AdvancedRAG):
|
|
103
100
|
"questionary", "`questionary` is required for supervisor mode, please install it by `fabricatio[qa]`"
|
104
101
|
)
|
105
102
|
async def _supervisor_inner(
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
103
|
+
self,
|
104
|
+
article: Article,
|
105
|
+
article_outline: ArticleOutline,
|
106
|
+
chap: ArticleChapter,
|
107
|
+
sec: ArticleSection,
|
108
|
+
subsec: ArticleSubsection,
|
112
109
|
) -> ArticleSubsection:
|
113
110
|
from questionary import confirm, text
|
114
111
|
from rich import print as r_print
|
@@ -129,20 +126,19 @@ class WriteArticleContentRAG(Action, Extract, AdvancedRAG):
|
|
129
126
|
raw_paras = edt
|
130
127
|
|
131
128
|
raw_paras = fix_misplaced_labels(raw_paras)
|
132
|
-
raw_paras =
|
133
|
-
raw_paras = convert_all_block_tex(raw_paras)
|
129
|
+
raw_paras = convert_all_tex_math(raw_paras)
|
134
130
|
|
135
131
|
r_print(raw_paras)
|
136
132
|
|
137
133
|
return await self.extract_new_subsec(subsec, raw_paras, cm)
|
138
134
|
|
139
135
|
async def _inner(
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
136
|
+
self,
|
137
|
+
article: Article,
|
138
|
+
article_outline: ArticleOutline,
|
139
|
+
chap: ArticleChapter,
|
140
|
+
sec: ArticleSection,
|
141
|
+
subsec: ArticleSubsection,
|
146
142
|
) -> ArticleSubsection:
|
147
143
|
cm = CitationManager()
|
148
144
|
|
@@ -153,13 +149,12 @@ class WriteArticleContentRAG(Action, Extract, AdvancedRAG):
|
|
153
149
|
raw_paras = "\n".join(p for p in raw_paras.splitlines() if p and not p.endswith("**") and not p.startswith("#"))
|
154
150
|
|
155
151
|
raw_paras = fix_misplaced_labels(raw_paras)
|
156
|
-
raw_paras =
|
157
|
-
raw_paras = convert_all_block_tex(raw_paras)
|
152
|
+
raw_paras = convert_all_tex_math(raw_paras)
|
158
153
|
|
159
154
|
return await self.extract_new_subsec(subsec, raw_paras, cm)
|
160
155
|
|
161
156
|
async def extract_new_subsec(
|
162
|
-
|
157
|
+
self, subsec: ArticleSubsection, raw_paras: str, cm: CitationManager
|
163
158
|
) -> ArticleSubsection:
|
164
159
|
"""Extract the new subsec."""
|
165
160
|
new_subsec = ok(
|
@@ -182,14 +177,14 @@ class WriteArticleContentRAG(Action, Extract, AdvancedRAG):
|
|
182
177
|
return subsec
|
183
178
|
|
184
179
|
async def write_raw(
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
180
|
+
self,
|
181
|
+
article: Article,
|
182
|
+
article_outline: ArticleOutline,
|
183
|
+
chap: ArticleChapter,
|
184
|
+
sec: ArticleSection,
|
185
|
+
subsec: ArticleSubsection,
|
186
|
+
cm: CitationManager,
|
187
|
+
extra_instruction: str = "",
|
193
188
|
) -> str:
|
194
189
|
"""Write the raw paragraphs of the subsec."""
|
195
190
|
return await self.aask(
|
@@ -205,14 +200,14 @@ class WriteArticleContentRAG(Action, Extract, AdvancedRAG):
|
|
205
200
|
)
|
206
201
|
|
207
202
|
async def search_database(
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
203
|
+
self,
|
204
|
+
article: Article,
|
205
|
+
article_outline: ArticleOutline,
|
206
|
+
chap: ArticleChapter,
|
207
|
+
sec: ArticleSection,
|
208
|
+
subsec: ArticleSubsection,
|
209
|
+
cm: CitationManager,
|
210
|
+
extra_instruction: str = "",
|
216
211
|
) -> None:
|
217
212
|
"""Search database for related references."""
|
218
213
|
search_req = (
|
@@ -261,8 +256,6 @@ class ArticleConsultRAG(Action, AdvancedRAG):
|
|
261
256
|
from questionary import confirm, text
|
262
257
|
from rich import print as r_print
|
263
258
|
|
264
|
-
from fabricatio.rust import convert_all_block_tex, convert_all_inline_tex, fix_misplaced_labels
|
265
|
-
|
266
259
|
self.target_collection = collection_name or self.safe_target_collection
|
267
260
|
|
268
261
|
cm = CitationManager()
|
@@ -272,8 +265,7 @@ class ArticleConsultRAG(Action, AdvancedRAG):
|
|
272
265
|
if await confirm("Empty the cm?").ask_async():
|
273
266
|
cm.empty()
|
274
267
|
|
275
|
-
req =
|
276
|
-
req = convert_to_inline_formula(req)
|
268
|
+
req = convert_all_tex_math(req)
|
277
269
|
|
278
270
|
await self.clued_search(
|
279
271
|
req,
|
@@ -289,8 +281,7 @@ class ArticleConsultRAG(Action, AdvancedRAG):
|
|
289
281
|
ret = await self.aask(f"{cm.as_prompt()}\n{self.req}\n{req}")
|
290
282
|
|
291
283
|
ret = fix_misplaced_labels(ret)
|
292
|
-
ret =
|
293
|
-
ret = convert_all_block_tex(ret)
|
284
|
+
ret = convert_all_tex_math(ret)
|
294
285
|
ret = cm.apply(ret)
|
295
286
|
|
296
287
|
r_print(ret)
|
@@ -321,12 +312,12 @@ class TweakArticleRAG(Action, RAG, Censor):
|
|
321
312
|
"""The limit of references to be retrieved"""
|
322
313
|
|
323
314
|
async def _execute(
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
315
|
+
self,
|
316
|
+
article: Article,
|
317
|
+
collection_name: str = "article_essence",
|
318
|
+
twk_rag_ruleset: Optional[RuleSet] = None,
|
319
|
+
parallel: bool = False,
|
320
|
+
**cxt,
|
330
321
|
) -> Article:
|
331
322
|
"""Write an article based on the provided outline.
|
332
323
|
|
@@ -381,10 +372,10 @@ class TweakArticleRAG(Action, RAG, Censor):
|
|
381
372
|
subsec,
|
382
373
|
ruleset=ruleset,
|
383
374
|
reference=f"{'\n\n'.join(d.display() for d in await self.aretrieve(refind_q, document_model=ArticleEssence, max_accepted=self.ref_limit))}\n\n"
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
375
|
+
f"You can use Reference above to rewrite the `{subsec.__class__.__name__}`.\n"
|
376
|
+
f"You should Always use `{subsec.language}` as written language, "
|
377
|
+
f"which is the original language of the `{subsec.title}`. "
|
378
|
+
f"since rewrite a `{subsec.__class__.__name__}` in a different language is usually a bad choice",
|
388
379
|
)
|
389
380
|
|
390
381
|
|
@@ -399,12 +390,12 @@ class ChunkArticle(Action):
|
|
399
390
|
"""The maximum overlapping rate between chunks."""
|
400
391
|
|
401
392
|
async def _execute(
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
393
|
+
self,
|
394
|
+
article_path: str | Path,
|
395
|
+
bib_manager: BibManager,
|
396
|
+
max_chunk_size: Optional[int] = None,
|
397
|
+
max_overlapping_rate: Optional[float] = None,
|
398
|
+
**_,
|
408
399
|
) -> List[ArticleChunk]:
|
409
400
|
return ArticleChunk.from_file(
|
410
401
|
article_path,
|
fabricatio/capabilities/rag.py
CHANGED
@@ -51,16 +51,16 @@ class RAG(EmbeddingUsage, ABC):
|
|
51
51
|
return self._client
|
52
52
|
|
53
53
|
def init_client(
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
54
|
+
self,
|
55
|
+
milvus_uri: Optional[str] = None,
|
56
|
+
milvus_token: Optional[str] = None,
|
57
|
+
milvus_timeout: Optional[float] = None,
|
58
58
|
) -> Self:
|
59
59
|
"""Initialize the Milvus client."""
|
60
60
|
self._client = create_client(
|
61
61
|
uri=milvus_uri or ok(self.milvus_uri or CONFIG.rag.milvus_uri),
|
62
62
|
token=milvus_token
|
63
|
-
|
63
|
+
or (token.get_secret_value() if (token := (self.milvus_token or CONFIG.rag.milvus_token)) else ""),
|
64
64
|
timeout=milvus_timeout or self.milvus_timeout or CONFIG.rag.milvus_timeout,
|
65
65
|
)
|
66
66
|
return self
|
@@ -74,7 +74,7 @@ class RAG(EmbeddingUsage, ABC):
|
|
74
74
|
return self
|
75
75
|
|
76
76
|
def view(
|
77
|
-
|
77
|
+
self, collection_name: Optional[str], create: bool = False, **kwargs: Unpack[CollectionConfigKwargs]
|
78
78
|
) -> Self:
|
79
79
|
"""View the specified collection.
|
80
80
|
|
@@ -116,7 +116,7 @@ class RAG(EmbeddingUsage, ABC):
|
|
116
116
|
return ok(self.target_collection, "No collection is being viewed. Have you called `self.view()`?")
|
117
117
|
|
118
118
|
async def add_document[D: MilvusDataBase](
|
119
|
-
|
119
|
+
self, data: List[D] | D, collection_name: Optional[str] = None, flush: bool = False
|
120
120
|
) -> Self:
|
121
121
|
"""Adds a document to the specified collection.
|
122
122
|
|
@@ -143,15 +143,15 @@ class RAG(EmbeddingUsage, ABC):
|
|
143
143
|
return self
|
144
144
|
|
145
145
|
async def afetch_document[D: MilvusDataBase](
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
146
|
+
self,
|
147
|
+
query: List[str],
|
148
|
+
document_model: Type[D],
|
149
|
+
collection_name: Optional[str] = None,
|
150
|
+
similarity_threshold: float = 0.37,
|
151
|
+
result_per_query: int = 10,
|
152
|
+
tei_endpoint: Optional[str] = None,
|
153
|
+
reranker_threshold: float = 0.7,
|
154
|
+
filter_expr: str = "",
|
155
155
|
) -> List[D]:
|
156
156
|
"""Asynchronously fetches documents from a Milvus database based on input vectors.
|
157
157
|
|
@@ -192,7 +192,8 @@ class RAG(EmbeddingUsage, ABC):
|
|
192
192
|
retrieved_id.update(res["id"] for res in g)
|
193
193
|
if not models:
|
194
194
|
continue
|
195
|
-
rank_scores = await reranker.arerank(q, [m.prepare_vectorization() for m in models], truncate=True
|
195
|
+
rank_scores = await reranker.arerank(q, [m.prepare_vectorization() for m in models], truncate=True,
|
196
|
+
truncation_direction="Left")
|
196
197
|
raw_result.extend((models[idx], scr) for (idx, scr) in rank_scores if scr > reranker_threshold)
|
197
198
|
|
198
199
|
raw_result_sorted = sorted(raw_result, key=lambda x: x[1], reverse=True)
|
@@ -214,11 +215,11 @@ class RAG(EmbeddingUsage, ABC):
|
|
214
215
|
return document_model.from_sequence(resp)
|
215
216
|
|
216
217
|
async def aretrieve[D: MilvusDataBase](
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
218
|
+
self,
|
219
|
+
query: List[str] | str,
|
220
|
+
document_model: Type[D],
|
221
|
+
max_accepted: int = 20,
|
222
|
+
**kwargs: Unpack[FetchKwargs],
|
222
223
|
) -> List[D]:
|
223
224
|
"""Retrieve data from the collection.
|
224
225
|
|
@@ -235,15 +236,15 @@ class RAG(EmbeddingUsage, ABC):
|
|
235
236
|
query = [query]
|
236
237
|
|
237
238
|
return (
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
239
|
+
await self.afetch_document(
|
240
|
+
query=query,
|
241
|
+
document_model=document_model,
|
242
|
+
**kwargs,
|
243
|
+
)
|
244
|
+
)[:max_accepted]
|
244
245
|
|
245
246
|
async def arefined_query(
|
246
|
-
|
247
|
+
self, question: List[str] | str, **kwargs: Unpack[ChooseKwargs[Optional[List[str]]]]
|
247
248
|
) -> Optional[List[str]]:
|
248
249
|
"""Refines the given question using a template.
|
249
250
|
|
@@ -1,8 +1,13 @@
|
|
1
1
|
"""A Module containing the article rag models."""
|
2
2
|
|
3
|
-
import re
|
4
3
|
from itertools import groupby
|
4
|
+
|
5
|
+
import re
|
6
|
+
from dataclasses import dataclass, field
|
7
|
+
from more_itertools.more import first
|
8
|
+
from more_itertools.recipes import flatten, unique
|
5
9
|
from pathlib import Path
|
10
|
+
from pydantic import Field
|
6
11
|
from typing import ClassVar, Dict, List, Optional, Self, Unpack
|
7
12
|
|
8
13
|
from fabricatio.fs import safe_text_read
|
@@ -12,9 +17,6 @@ from fabricatio.models.generic import AsPrompt
|
|
12
17
|
from fabricatio.models.kwargs_types import ChunkKwargs
|
13
18
|
from fabricatio.rust import BibManager, blake3_hash, split_into_chunks
|
14
19
|
from fabricatio.utils import ok, wrapp_in_block
|
15
|
-
from more_itertools.more import first
|
16
|
-
from more_itertools.recipes import flatten, unique
|
17
|
-
from pydantic import Field
|
18
20
|
|
19
21
|
|
20
22
|
class ArticleChunk(MilvusDataBase):
|
@@ -68,7 +70,7 @@ class ArticleChunk(MilvusDataBase):
|
|
68
70
|
|
69
71
|
@classmethod
|
70
72
|
def from_file[P: str | Path](
|
71
|
-
|
73
|
+
cls, path: P | List[P], bib_mgr: BibManager, **kwargs: Unpack[ChunkKwargs]
|
72
74
|
) -> List[Self]:
|
73
75
|
"""Load the article chunks from the file."""
|
74
76
|
if isinstance(path, list):
|
@@ -85,9 +87,9 @@ class ArticleChunk(MilvusDataBase):
|
|
85
87
|
title_seg = path.stem.split(" - ").pop()
|
86
88
|
|
87
89
|
key = (
|
88
|
-
|
89
|
-
|
90
|
-
|
90
|
+
bib_mgr.get_cite_key_by_title(title_seg)
|
91
|
+
or bib_mgr.get_cite_key_by_title_fuzzy(title_seg)
|
92
|
+
or bib_mgr.get_cite_key_fuzzy(path.stem)
|
91
93
|
)
|
92
94
|
if key is None:
|
93
95
|
logger.warning(f"no cite key found for {path.as_posix()}, skip.")
|
@@ -165,10 +167,11 @@ class ArticleChunk(MilvusDataBase):
|
|
165
167
|
return self
|
166
168
|
|
167
169
|
|
170
|
+
@dataclass
|
168
171
|
class CitationManager(AsPrompt):
|
169
172
|
"""Citation manager."""
|
170
173
|
|
171
|
-
article_chunks: List[ArticleChunk] =
|
174
|
+
article_chunks: List[ArticleChunk] = field(default_factory=list)
|
172
175
|
"""Article chunks."""
|
173
176
|
|
174
177
|
pat: str = r"(\[\[([\d\s,-]*)]])"
|
@@ -179,7 +182,7 @@ class CitationManager(AsPrompt):
|
|
179
182
|
"""Separator for abbreviated citation numbers."""
|
180
183
|
|
181
184
|
def update_chunks(
|
182
|
-
|
185
|
+
self, article_chunks: List[ArticleChunk], set_cite_number: bool = True, dedup: bool = True
|
183
186
|
) -> Self:
|
184
187
|
"""Update article chunks."""
|
185
188
|
self.article_chunks.clear()
|
@@ -3,6 +3,7 @@
|
|
3
3
|
from abc import ABC
|
4
4
|
from enum import StrEnum
|
5
5
|
from pathlib import Path
|
6
|
+
from pydantic import Field
|
6
7
|
from typing import ClassVar, Generator, List, Optional, Self, Tuple, Type
|
7
8
|
|
8
9
|
from fabricatio.capabilities.persist import PersistentAble
|
@@ -21,9 +22,8 @@ from fabricatio.models.generic import (
|
|
21
22
|
Titled,
|
22
23
|
WordCount,
|
23
24
|
)
|
24
|
-
from fabricatio.rust import extract_body,
|
25
|
+
from fabricatio.rust import extract_body, replace_thesis_body, split_out_metadata, to_metadata, word_count
|
25
26
|
from fabricatio.utils import fallback_kwargs, ok
|
26
|
-
from pydantic import Field
|
27
27
|
|
28
28
|
ARTICLE_WRAPPER = "// =-=-=-=-=-=-=-=-=-="
|
29
29
|
|
@@ -275,7 +275,7 @@ class ArticleBase[T: ChapterBase](FinalizedDumpAble, AsPrompt, FromTypstCode, To
|
|
275
275
|
)
|
276
276
|
|
277
277
|
def iter_dfs_rev(
|
278
|
-
|
278
|
+
self,
|
279
279
|
) -> Generator[ArticleOutlineBase, None, None]:
|
280
280
|
"""Performs a depth-first search (DFS) through the article structure in reverse order.
|
281
281
|
|
@@ -405,7 +405,7 @@ class ArticleBase[T: ChapterBase](FinalizedDumpAble, AsPrompt, FromTypstCode, To
|
|
405
405
|
"""Update the article file."""
|
406
406
|
file = Path(file)
|
407
407
|
string = safe_text_read(file)
|
408
|
-
if updated :=
|
408
|
+
if updated := replace_thesis_body(string, ARTICLE_WRAPPER, self.to_typst_code()):
|
409
409
|
dump_text(file, updated)
|
410
410
|
logger.success(f"Successfully updated {file.as_posix()}.")
|
411
411
|
else:
|
@@ -1,15 +1,7 @@
|
|
1
1
|
"""ArticleBase and ArticleSubsection classes for managing hierarchical document components."""
|
2
2
|
|
3
|
-
from typing import ClassVar, Dict, Generator, List, Self, Tuple, Type, override
|
4
|
-
|
5
|
-
from fabricatio.rust import (
|
6
|
-
convert_all_block_tex,
|
7
|
-
convert_all_inline_tex,
|
8
|
-
fix_misplaced_labels,
|
9
|
-
split_out_metadata,
|
10
|
-
word_count,
|
11
|
-
)
|
12
3
|
from pydantic import Field, NonNegativeInt
|
4
|
+
from typing import ClassVar, Dict, Generator, List, Self, Tuple, Type, override
|
13
5
|
|
14
6
|
from fabricatio.capabilities.persist import PersistentAble
|
15
7
|
from fabricatio.decorators import precheck_package
|
@@ -27,6 +19,12 @@ from fabricatio.models.extra.article_outline import (
|
|
27
19
|
ArticleSubsectionOutline,
|
28
20
|
)
|
29
21
|
from fabricatio.models.generic import Described, SequencePatch, SketchedAble, WithRef, WordCount
|
22
|
+
from fabricatio.rust import (
|
23
|
+
convert_all_tex_math,
|
24
|
+
fix_misplaced_labels,
|
25
|
+
split_out_metadata,
|
26
|
+
word_count,
|
27
|
+
)
|
30
28
|
|
31
29
|
PARAGRAPH_SEP = "// - - -"
|
32
30
|
|
@@ -156,15 +154,13 @@ class Article(
|
|
156
154
|
if descriptions:
|
157
155
|
for a in self.iter_dfs():
|
158
156
|
a.description = fix_misplaced_labels(a.description)
|
159
|
-
a.description =
|
160
|
-
a.description = convert_all_block_tex(a.description)
|
157
|
+
a.description = convert_all_tex_math(a.description)
|
161
158
|
|
162
159
|
if paragraphs:
|
163
160
|
for _, _, subsec in self.iter_subsections():
|
164
161
|
for p in subsec.paragraphs:
|
165
162
|
p.content = fix_misplaced_labels(p.content)
|
166
|
-
p.content =
|
167
|
-
p.content = convert_all_block_tex(p.content)
|
163
|
+
p.content = convert_all_tex_math(p.content)
|
168
164
|
return self
|
169
165
|
|
170
166
|
@override
|
fabricatio/models/tool.py
CHANGED
@@ -3,18 +3,18 @@
|
|
3
3
|
This module provides classes for defining tools and toolboxes, which can be used to manage and execute callable functions
|
4
4
|
with additional functionalities such as logging, execution info, and briefing.
|
5
5
|
"""
|
6
|
+
|
6
7
|
from importlib.machinery import ModuleSpec
|
7
8
|
from importlib.util import module_from_spec
|
8
9
|
from inspect import iscoroutinefunction, signature
|
9
10
|
from types import CodeType, ModuleType
|
10
11
|
from typing import Any, Callable, Dict, List, Optional, Self, cast, overload
|
11
12
|
|
12
|
-
from fabricatio.rust import CONFIG
|
13
|
-
from pydantic import Field
|
14
|
-
|
15
13
|
from fabricatio.decorators import logging_execution_info, use_temp_module
|
16
14
|
from fabricatio.journal import logger
|
17
15
|
from fabricatio.models.generic import Base, WithBriefing
|
16
|
+
from fabricatio.rust import CONFIG
|
17
|
+
from pydantic import Field
|
18
18
|
|
19
19
|
|
20
20
|
class Tool[**P, R](WithBriefing):
|
Binary file
|
fabricatio/rust.pyi
CHANGED
@@ -12,9 +12,9 @@ Key Features:
|
|
12
12
|
"""
|
13
13
|
|
14
14
|
from enum import StrEnum
|
15
|
+
from pydantic import JsonValue
|
15
16
|
from typing import Any, Dict, List, Literal, Optional, Self, Tuple, Union, overload
|
16
17
|
|
17
|
-
from pydantic import JsonValue
|
18
18
|
|
19
19
|
class TemplateManager:
|
20
20
|
"""Template rendering engine using Handlebars templates.
|
@@ -47,8 +47,10 @@ class TemplateManager:
|
|
47
47
|
|
48
48
|
@overload
|
49
49
|
def render_template(self, name: str, data: Dict[str, Any]) -> str: ...
|
50
|
+
|
50
51
|
@overload
|
51
52
|
def render_template(self, name: str, data: List[Dict[str, Any]]) -> List[str]: ...
|
53
|
+
|
52
54
|
def render_template(self, name: str, data: Dict[str, Any] | List[Dict[str, Any]]) -> str | List[str]:
|
53
55
|
"""Render a template with context data.
|
54
56
|
|
@@ -65,8 +67,10 @@ class TemplateManager:
|
|
65
67
|
|
66
68
|
@overload
|
67
69
|
def render_template_raw(self, template: str, data: Dict[str, Any]) -> str: ...
|
70
|
+
|
68
71
|
@overload
|
69
72
|
def render_template_raw(self, template: str, data: List[Dict[str, Any]]) -> List[str]: ...
|
73
|
+
|
70
74
|
def render_template_raw(self, template: str, data: Dict[str, Any] | List[Dict[str, Any]]) -> str | List[str]:
|
71
75
|
"""Render a template with context data.
|
72
76
|
|
@@ -78,6 +82,7 @@ class TemplateManager:
|
|
78
82
|
Rendered template content as string or list of strings
|
79
83
|
"""
|
80
84
|
|
85
|
+
|
81
86
|
class BibManager:
|
82
87
|
"""BibTeX bibliography manager for parsing and querying citation data."""
|
83
88
|
|
@@ -186,6 +191,7 @@ class BibManager:
|
|
186
191
|
Field value if found, None otherwise
|
187
192
|
"""
|
188
193
|
|
194
|
+
|
189
195
|
def blake3_hash(content: bytes) -> str:
|
190
196
|
"""Calculate the BLAKE3 cryptographic hash of data.
|
191
197
|
|
@@ -196,9 +202,11 @@ def blake3_hash(content: bytes) -> str:
|
|
196
202
|
Hex-encoded BLAKE3 hash string
|
197
203
|
"""
|
198
204
|
|
205
|
+
|
199
206
|
def detect_language(string: str) -> str:
|
200
207
|
"""Detect the language of a given string."""
|
201
208
|
|
209
|
+
|
202
210
|
def split_word_bounds(string: str) -> List[str]:
|
203
211
|
"""Split the string into words based on word boundaries.
|
204
212
|
|
@@ -209,6 +217,7 @@ def split_word_bounds(string: str) -> List[str]:
|
|
209
217
|
A list of words extracted from the string.
|
210
218
|
"""
|
211
219
|
|
220
|
+
|
212
221
|
def split_sentence_bounds(string: str) -> List[str]:
|
213
222
|
"""Split the string into sentences based on sentence boundaries.
|
214
223
|
|
@@ -219,6 +228,7 @@ def split_sentence_bounds(string: str) -> List[str]:
|
|
219
228
|
A list of sentences extracted from the string.
|
220
229
|
"""
|
221
230
|
|
231
|
+
|
222
232
|
def split_into_chunks(string: str, max_chunk_size: int, max_overlapping_rate: float = 0.3) -> List[str]:
|
223
233
|
"""Split the string into chunks of a specified size.
|
224
234
|
|
@@ -231,6 +241,7 @@ def split_into_chunks(string: str, max_chunk_size: int, max_overlapping_rate: fl
|
|
231
241
|
A list of chunks extracted from the string.
|
232
242
|
"""
|
233
243
|
|
244
|
+
|
234
245
|
def word_count(string: str) -> int:
|
235
246
|
"""Count the number of words in the string.
|
236
247
|
|
@@ -241,51 +252,67 @@ def word_count(string: str) -> int:
|
|
241
252
|
The number of words in the string.
|
242
253
|
"""
|
243
254
|
|
255
|
+
|
244
256
|
def is_chinese(string: str) -> bool:
|
245
257
|
"""Check if the given string is in Chinese."""
|
246
258
|
|
259
|
+
|
247
260
|
def is_english(string: str) -> bool:
|
248
261
|
"""Check if the given string is in English."""
|
249
262
|
|
263
|
+
|
250
264
|
def is_japanese(string: str) -> bool:
|
251
265
|
"""Check if the given string is in Japanese."""
|
252
266
|
|
267
|
+
|
253
268
|
def is_korean(string: str) -> bool:
|
254
269
|
"""Check if the given string is in Korean."""
|
255
270
|
|
271
|
+
|
256
272
|
def is_arabic(string: str) -> bool:
|
257
273
|
"""Check if the given string is in Arabic."""
|
258
274
|
|
275
|
+
|
259
276
|
def is_russian(string: str) -> bool:
|
260
277
|
"""Check if the given string is in Russian."""
|
261
278
|
|
279
|
+
|
262
280
|
def is_german(string: str) -> bool:
|
263
281
|
"""Check if the given string is in German."""
|
264
282
|
|
283
|
+
|
265
284
|
def is_french(string: str) -> bool:
|
266
285
|
"""Check if the given string is in French."""
|
267
286
|
|
287
|
+
|
268
288
|
def is_hindi(string: str) -> bool:
|
269
289
|
"""Check if the given string is in Hindi."""
|
270
290
|
|
291
|
+
|
271
292
|
def is_italian(string: str) -> bool:
|
272
293
|
"""Check if the given string is in Italian."""
|
273
294
|
|
295
|
+
|
274
296
|
def is_dutch(string: str) -> bool:
|
275
297
|
"""Check if the given string is in Dutch."""
|
276
298
|
|
299
|
+
|
277
300
|
def is_portuguese(string: str) -> bool:
|
278
301
|
"""Check if the given string is in Portuguese."""
|
279
302
|
|
303
|
+
|
280
304
|
def is_swedish(string: str) -> bool:
|
281
305
|
"""Check if the given string is in Swedish."""
|
282
306
|
|
307
|
+
|
283
308
|
def is_turkish(string: str) -> bool:
|
284
309
|
"""Check if the given string is in Turkish."""
|
285
310
|
|
311
|
+
|
286
312
|
def is_vietnamese(string: str) -> bool:
|
287
313
|
"""Check if the given string is in Vietnamese."""
|
288
314
|
|
315
|
+
|
289
316
|
def tex_to_typst(string: str) -> str:
|
290
317
|
"""Convert TeX to Typst.
|
291
318
|
|
@@ -296,26 +323,20 @@ def tex_to_typst(string: str) -> str:
|
|
296
323
|
The converted Typst string.
|
297
324
|
"""
|
298
325
|
|
299
|
-
def convert_all_inline_tex(string: str) -> str:
|
300
|
-
"""Convert all inline TeX code in the string.
|
301
|
-
|
302
|
-
Args:
|
303
|
-
string: The input string containing inline TeX code wrapped in $code$.
|
304
326
|
|
305
|
-
|
306
|
-
|
307
|
-
"""
|
327
|
+
def convert_all_tex_math(string: str) -> str:
|
328
|
+
r"""Unified function to convert all supported TeX math expressions in a string to Typst format.
|
308
329
|
|
309
|
-
|
310
|
-
"""Convert all block TeX code in the string.
|
330
|
+
Handles $...$, $$...$$, \\(...\\), and \\[...\\]
|
311
331
|
|
312
332
|
Args:
|
313
|
-
string: The input string containing
|
333
|
+
string: The input string containing TeX math expressions.
|
314
334
|
|
315
335
|
Returns:
|
316
|
-
The
|
336
|
+
The string with TeX math expressions converted to Typst format.
|
317
337
|
"""
|
318
338
|
|
339
|
+
|
319
340
|
def fix_misplaced_labels(string: str) -> str:
|
320
341
|
"""A func to fix labels in a string.
|
321
342
|
|
@@ -326,8 +347,9 @@ def fix_misplaced_labels(string: str) -> str:
|
|
326
347
|
The fixed string with labels properly placed.
|
327
348
|
"""
|
328
349
|
|
350
|
+
|
329
351
|
def comment(string: str) -> str:
|
330
|
-
"""Add comment to the string.
|
352
|
+
r"""Add comment to the string.
|
331
353
|
|
332
354
|
Args:
|
333
355
|
string: The input string to which comments will be added.
|
@@ -336,6 +358,7 @@ def comment(string: str) -> str:
|
|
336
358
|
The string with each line prefixed by '// '.
|
337
359
|
"""
|
338
360
|
|
361
|
+
|
339
362
|
def uncomment(string: str) -> str:
|
340
363
|
"""Remove comment from the string.
|
341
364
|
|
@@ -346,6 +369,7 @@ def uncomment(string: str) -> str:
|
|
346
369
|
The string with comments (lines starting with '// ' or '//') removed.
|
347
370
|
"""
|
348
371
|
|
372
|
+
|
349
373
|
def split_out_metadata(string: str) -> Tuple[Optional[JsonValue], str]:
|
350
374
|
"""Split out metadata from a string.
|
351
375
|
|
@@ -356,6 +380,7 @@ def split_out_metadata(string: str) -> Tuple[Optional[JsonValue], str]:
|
|
356
380
|
A tuple containing the metadata as a Python object (if parseable) and the remaining string.
|
357
381
|
"""
|
358
382
|
|
383
|
+
|
359
384
|
def to_metadata(data: JsonValue) -> str:
|
360
385
|
"""Convert a Python object to a YAML string.
|
361
386
|
|
@@ -366,13 +391,8 @@ def to_metadata(data: JsonValue) -> str:
|
|
366
391
|
The YAML string representation of the input data.
|
367
392
|
"""
|
368
393
|
|
369
|
-
def convert_to_inline_formula(string: str) -> str:
|
370
|
-
r"""Convert `$...$` to inline formula `\(...\)` and trim spaces."""
|
371
394
|
|
372
|
-
def
|
373
|
-
r"""Convert `$$...$$` to block formula `\[...\]` and trim spaces."""
|
374
|
-
|
375
|
-
def inplace_update(string: str, wrapper: str, new_body: str) -> Optional[str]:
|
395
|
+
def replace_thesis_body(string: str, wrapper: str, new_body: str) -> Optional[str]:
|
376
396
|
"""Replace content between wrapper strings.
|
377
397
|
|
378
398
|
Args:
|
@@ -385,6 +405,7 @@ def inplace_update(string: str, wrapper: str, new_body: str) -> Optional[str]:
|
|
385
405
|
|
386
406
|
"""
|
387
407
|
|
408
|
+
|
388
409
|
def extract_body(string: str, wrapper: str) -> Optional[str]:
|
389
410
|
"""Extract the content between two occurrences of a wrapper string.
|
390
411
|
|
@@ -396,6 +417,7 @@ def extract_body(string: str, wrapper: str) -> Optional[str]:
|
|
396
417
|
The content between the first two occurrences of the wrapper string if found, otherwise None.
|
397
418
|
"""
|
398
419
|
|
420
|
+
|
399
421
|
class LLMConfig:
|
400
422
|
"""LLM configuration structure.
|
401
423
|
|
@@ -447,6 +469,7 @@ class LLMConfig:
|
|
447
469
|
frequency_penalty: Optional[float]
|
448
470
|
"""Penalizes new tokens based on their frequency in text so far (-2.0-2.0)."""
|
449
471
|
|
472
|
+
|
450
473
|
class EmbeddingConfig:
|
451
474
|
"""Embedding configuration structure."""
|
452
475
|
|
@@ -471,6 +494,7 @@ class EmbeddingConfig:
|
|
471
494
|
api_key: Optional[SecretStr]
|
472
495
|
"""The API key."""
|
473
496
|
|
497
|
+
|
474
498
|
class RagConfig:
|
475
499
|
"""RAG (Retrieval Augmented Generation) configuration structure."""
|
476
500
|
|
@@ -486,12 +510,14 @@ class RagConfig:
|
|
486
510
|
milvus_dimensions: Optional[int]
|
487
511
|
"""The dimensions for Milvus vectors."""
|
488
512
|
|
513
|
+
|
489
514
|
class DebugConfig:
|
490
515
|
"""Debug configuration structure."""
|
491
516
|
|
492
517
|
log_level: Optional[str]
|
493
518
|
"""The logging level to use."""
|
494
519
|
|
520
|
+
|
495
521
|
class TemplateManagerConfig:
|
496
522
|
"""Template manager configuration structure."""
|
497
523
|
|
@@ -504,6 +530,7 @@ class TemplateManagerConfig:
|
|
504
530
|
template_suffix: Optional[str]
|
505
531
|
"""The suffix of the templates."""
|
506
532
|
|
533
|
+
|
507
534
|
class TemplateConfig:
|
508
535
|
"""Template configuration structure."""
|
509
536
|
|
@@ -588,6 +615,7 @@ class TemplateConfig:
|
|
588
615
|
chap_summary_template: str
|
589
616
|
"""The name of the chap summary template which will be used to generate a chapter summary."""
|
590
617
|
|
618
|
+
|
591
619
|
class RoutingConfig:
|
592
620
|
"""Routing configuration structure for controlling request dispatching behavior."""
|
593
621
|
|
@@ -603,6 +631,7 @@ class RoutingConfig:
|
|
603
631
|
cooldown_time: Optional[int]
|
604
632
|
"""Time to cooldown a deployment after failure in seconds."""
|
605
633
|
|
634
|
+
|
606
635
|
class GeneralConfig:
|
607
636
|
"""General configuration structure for application-wide settings."""
|
608
637
|
|
@@ -612,6 +641,7 @@ class GeneralConfig:
|
|
612
641
|
use_json_repair: bool
|
613
642
|
"""Whether to automatically repair malformed JSON."""
|
614
643
|
|
644
|
+
|
615
645
|
class ToolBoxConfig:
|
616
646
|
"""Configuration for toolbox functionality."""
|
617
647
|
|
@@ -621,6 +651,7 @@ class ToolBoxConfig:
|
|
621
651
|
data_module_name: str
|
622
652
|
"""The name of the module containing the data."""
|
623
653
|
|
654
|
+
|
624
655
|
class PymitterConfig:
|
625
656
|
"""Pymitter configuration structure for controlling event emission and listener behavior."""
|
626
657
|
|
@@ -633,6 +664,7 @@ class PymitterConfig:
|
|
633
664
|
max_listeners: int
|
634
665
|
"""The maximum number of listeners per event. -1 means unlimited."""
|
635
666
|
|
667
|
+
|
636
668
|
class Config:
|
637
669
|
"""Configuration structure containing all system components."""
|
638
670
|
|
@@ -666,17 +698,22 @@ class Config:
|
|
666
698
|
pymitter: PymitterConfig
|
667
699
|
"""Pymitter configuration."""
|
668
700
|
|
701
|
+
|
669
702
|
CONFIG: Config
|
670
703
|
|
704
|
+
|
671
705
|
class SecretStr:
|
672
706
|
"""A string that should not be exposed."""
|
673
707
|
|
674
708
|
def __init__(self, source: str) -> None: ...
|
709
|
+
|
675
710
|
def get_secret_value(self) -> str:
|
676
711
|
"""Expose the secret string."""
|
677
712
|
|
713
|
+
|
678
714
|
TEMPLATE_MANAGER: TemplateManager
|
679
715
|
|
716
|
+
|
680
717
|
class Event:
|
681
718
|
"""Event class that represents a hierarchical event with segments.
|
682
719
|
|
@@ -788,9 +825,12 @@ class Event:
|
|
788
825
|
"""
|
789
826
|
|
790
827
|
def __hash__(self) -> int: ...
|
828
|
+
|
791
829
|
def __eq__(self, other: object) -> bool: ...
|
830
|
+
|
792
831
|
def __ne__(self, other: object) -> bool: ...
|
793
832
|
|
833
|
+
|
794
834
|
class TaskStatus(StrEnum, str):
|
795
835
|
"""Enumeration of possible task statuses."""
|
796
836
|
|
@@ -809,6 +849,7 @@ class TaskStatus(StrEnum, str):
|
|
809
849
|
Cancelled: TaskStatus
|
810
850
|
"""Task has been cancelled."""
|
811
851
|
|
852
|
+
|
812
853
|
class TEIClient:
|
813
854
|
"""Client for TEI reranking service.
|
814
855
|
|
@@ -824,11 +865,11 @@ class TEIClient:
|
|
824
865
|
"""
|
825
866
|
|
826
867
|
async def arerank(
|
827
|
-
|
828
|
-
|
829
|
-
|
830
|
-
|
831
|
-
|
868
|
+
self,
|
869
|
+
query: str,
|
870
|
+
texts: List[str],
|
871
|
+
truncate: bool = False,
|
872
|
+
truncation_direction: Literal["Left", "Right"] = "Left",
|
832
873
|
) -> List[Tuple[int, float]]:
|
833
874
|
"""Rerank texts based on relevance to query.
|
834
875
|
|
Binary file
|
Binary file
|
@@ -1,13 +1,17 @@
|
|
1
|
-
fabricatio-0.3.14.
|
2
|
-
fabricatio-0.3.14.
|
3
|
-
fabricatio-0.3.14.
|
1
|
+
fabricatio-0.3.14.dev7.data/scripts/tdown.exe,sha256=lHV09r-4UOiWlzHyfYV6iq1iXdXP8FbwtMwjGiPKaqU,3450880
|
2
|
+
fabricatio-0.3.14.dev7.data/scripts/ttm.exe,sha256=JYT1OR7umACb3xXHjQZ9JzoILYX-atkSZ-ENFBo4Gcw,2561536
|
3
|
+
fabricatio-0.3.14.dev7.dist-info/METADATA,sha256=btu_bPIYHocy_FeY8gF0BZ1qx60Td8eujW1SGyEQOr8,5116
|
4
|
+
fabricatio-0.3.14.dev7.dist-info/WHEEL,sha256=aR9tSjQsZDIcSIX9Ihx1Vyf9toUnjsKopg6qQPYNdi8,96
|
5
|
+
fabricatio-0.3.14.dev7.dist-info/licenses/LICENSE,sha256=do7J7EiCGbq0QPbMAL_FqLYufXpHnCnXBOuqVPwSV8Y,1088
|
6
|
+
fabricatio/__init__.py,sha256=w7ObFg6ud4pQuC1DhVyQI9x9dtp05QrcJAEk643iJmc,761
|
7
|
+
fabricatio/actions/__init__.py,sha256=wVENCFtpVb1rLFxoOFJt9-8smLWXuJV7IwA8P3EfFz4,48
|
4
8
|
fabricatio/actions/article.py,sha256=TPS2fOqCymKv2hK2c_WmMRMKNBkvN8M91QkB9ar8-bg,12507
|
5
|
-
fabricatio/actions/article_rag.py,sha256=
|
9
|
+
fabricatio/actions/article_rag.py,sha256=81668J2A_v00ODc01T-4FBEAtla6SB55VwSDO7DuRR4,18213
|
6
10
|
fabricatio/actions/fs.py,sha256=gJR14U4ln35nt8Z7OWLVAZpqGaLnED-r1Yi-lX22tkI,959
|
7
11
|
fabricatio/actions/output.py,sha256=jZL72D5uFobKNiVFapnVxBcjSNqGEThYNlCUKQvZwz8,9935
|
8
12
|
fabricatio/actions/rag.py,sha256=vgCzIfbSd3_vL3QxB12PY4h12V9Pe3sZRsWme0KC6X8,3583
|
9
13
|
fabricatio/actions/rules.py,sha256=dkvCgNDjt2KSO1VgPRsxT4YBmIIMeetZb5tiz-slYkU,3640
|
10
|
-
fabricatio/
|
14
|
+
fabricatio/capabilities/__init__.py,sha256=v1cHRHIJ2gxyqMLNCs6ERVcCakSasZNYzmMI4lqAcls,57
|
11
15
|
fabricatio/capabilities/advanced_judge.py,sha256=jQ_Gsn6L8EKb6KQi3j0G0GSUz2j8D2220C1hIhrAeU8,682
|
12
16
|
fabricatio/capabilities/advanced_rag.py,sha256=DYh-imLQkjVOgKd__OEbwGzqwNeTtX_6NBGx_bCiFs8,2539
|
13
17
|
fabricatio/capabilities/censor.py,sha256=e0tHll4J_-TT8-Vn1OZ1innVZbJfx55oyGtDoEI99r8,4745
|
@@ -16,49 +20,45 @@ fabricatio/capabilities/correct.py,sha256=-JR8ZUAtagmNXepVyY679MBUyFCZwtKPjv8dAN
|
|
16
20
|
fabricatio/capabilities/extract.py,sha256=E7CLZflWzJ6C6DVLEWysYZ_48g_-F93gZJVU56k2-XA,2523
|
17
21
|
fabricatio/capabilities/persist.py,sha256=9XnKoeZ62YjXVDpYnkbDFf62B_Mz46WVsq1dTr2Wvvc,3421
|
18
22
|
fabricatio/capabilities/propose.py,sha256=v8OiUHc8GU7Jg1zAUghYhrI-AKgmBeUvQMo22ZAOddw,2030
|
19
|
-
fabricatio/capabilities/rag.py,sha256=
|
23
|
+
fabricatio/capabilities/rag.py,sha256=lwFrC96tL3uJ4keJ6n46vrvrdF6bARg1Yn6y6pQn7VQ,11194
|
20
24
|
fabricatio/capabilities/rating.py,sha256=cm-s2YJMYcS36mR9b7XNwRQ1x0h0uWxLHCapoAORv8I,17815
|
21
25
|
fabricatio/capabilities/review.py,sha256=l06BYcQzPi7VKmWdplj9L6WvZEscZqW1Wx9OhR-UnNw,5061
|
22
26
|
fabricatio/capabilities/task.py,sha256=-b92cGi7b3B30kOSS-90_H6BjA0VF_cjc1BzPbO5MkI,4401
|
23
|
-
fabricatio/capabilities/__init__.py,sha256=v1cHRHIJ2gxyqMLNCs6ERVcCakSasZNYzmMI4lqAcls,57
|
24
27
|
fabricatio/decorators.py,sha256=OohwKgc5dUjybv70D-J2lA0C9zjUuq8-gzU5O8JPl8w,8962
|
25
28
|
fabricatio/emitter.py,sha256=n4vH6E7lcT57qVve_3hUAdfvj0mQUDkWu6iU5aNztB8,6341
|
29
|
+
fabricatio/fs/__init__.py,sha256=USoMI_HcIr3Yc77_JQYYsXrsplYPXtFTaNB9YgFfC4s,713
|
26
30
|
fabricatio/fs/curd.py,sha256=652nHulbJ3gwt0Z3nywtPMmjhEyglDvEfc3p7ieJNNA,4777
|
27
31
|
fabricatio/fs/readers.py,sha256=UXvcJO3UCsxHu9PPkg34Yh55Zi-miv61jD_wZQJgKRs,1751
|
28
|
-
fabricatio/fs/__init__.py,sha256=USoMI_HcIr3Yc77_JQYYsXrsplYPXtFTaNB9YgFfC4s,713
|
29
32
|
fabricatio/journal.py,sha256=mnbdB1Dw-mhEKIgWlPKn7W07ssg-6dmxMXilIGQMFV8,216
|
30
33
|
fabricatio/models/action.py,sha256=RhjHaEJILiCZux5hzxSZVt_7Evcu3TnFHNuJN8rzgq8,10052
|
31
34
|
fabricatio/models/adv_kwargs_types.py,sha256=IBV3ZcsNLvvEjO_2hBpYg_wLSpNKaMx6Ndam3qXJCw8,2097
|
35
|
+
fabricatio/models/extra/__init__.py,sha256=XlYnS_2B9nhLhtQkjE7rvvfPmAAtXVdNi9bSDAR-Ge8,54
|
32
36
|
fabricatio/models/extra/advanced_judge.py,sha256=INUl_41C8jkausDekkjnEmTwNfLCJ23TwFjq2cM23Cw,1092
|
33
|
-
fabricatio/models/extra/aricle_rag.py,sha256=
|
34
|
-
fabricatio/models/extra/article_base.py,sha256=
|
37
|
+
fabricatio/models/extra/aricle_rag.py,sha256=K2ceihjIJFfkE82ykNH8hwTLDbXfFRZAXhz1NkdVZSA,12011
|
38
|
+
fabricatio/models/extra/article_base.py,sha256=1azdvRfT9lKiPT3xVTlP26FfzJOTwMlueJQDee3TgOU,16783
|
35
39
|
fabricatio/models/extra/article_essence.py,sha256=z3Qz6xVsB9k-K-c4Y2CoKzxZrXaUd4oyt2Mb6hGDYdg,2793
|
36
|
-
fabricatio/models/extra/article_main.py,sha256=
|
40
|
+
fabricatio/models/extra/article_main.py,sha256=7fH_pVjIDtaz4Gw885FU1m29puKgm3nHoowrVeWdMIE,11106
|
37
41
|
fabricatio/models/extra/article_outline.py,sha256=P0T-1DGCzoNmQ3iQVwSmOul0nwS6qLgr0FF8jDdD7F0,1673
|
38
42
|
fabricatio/models/extra/article_proposal.py,sha256=OQIKoJkmJv0ogYVk7eGK_TOtANVYcBPA_HeV1nuG0Vo,1909
|
39
43
|
fabricatio/models/extra/patches.py,sha256=_WNCxtYzzsVfUxI16vu4IqsLahLYRHdbQN9er9tqhC0,997
|
40
44
|
fabricatio/models/extra/problem.py,sha256=8tTU-3giFHOi5j7NJsvH__JJyYcaGrcfsRnkzQNm0Ew,7216
|
41
45
|
fabricatio/models/extra/rag.py,sha256=C7ptZCuGJmT8WikjpF9KhZ0Bw-VicdB-s8EqEAgMLKE,3967
|
42
46
|
fabricatio/models/extra/rule.py,sha256=WKahNiaIp8s_l2r_FG21F_PP3_hgNm4hfSVCSFyfoBE,2669
|
43
|
-
fabricatio/models/extra/__init__.py,sha256=XlYnS_2B9nhLhtQkjE7rvvfPmAAtXVdNi9bSDAR-Ge8,54
|
44
47
|
fabricatio/models/generic.py,sha256=OJrYClooL2XnyalWTyyLgorycA1d_JNW8VqOYNDJdXc,27873
|
45
48
|
fabricatio/models/kwargs_types.py,sha256=Ik8-Oi_NmwfkvC9B8K4NsoZc_vSWV85xKCSthA1Xv_k,3403
|
46
49
|
fabricatio/models/role.py,sha256=b3zg96YKDsMBqa7SIe9LQHc-IVs2fGWqoQeRQYQIl4o,3856
|
47
50
|
fabricatio/models/task.py,sha256=XZ1l1P-iS02ZF9P8cXv8gEfJKBa17PFPNJ1SbhyhT4Q,11033
|
48
|
-
fabricatio/models/tool.py,sha256=
|
51
|
+
fabricatio/models/tool.py,sha256=q2wDtZAebWMZlsFifgmJq8N3XvAhVNMb0aUIKkdruGc,12419
|
49
52
|
fabricatio/models/usages.py,sha256=q2jLqa0vJ7ho9ZUkC-2uPuFpK8uClBLIS6TEEYHUotY,33041
|
50
53
|
fabricatio/parser.py,sha256=dYFri9pDlsiwVpEJ-a5jmVU2nFuKN3uBHC8VsVpdEm8,4642
|
51
54
|
fabricatio/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
52
|
-
fabricatio/rust.
|
55
|
+
fabricatio/rust.cp313-win_amd64.pyd,sha256=fMFlamARxZ3hNaXJGCkFN6C2BYuPgZI1poi3QE9JIys,7830016
|
56
|
+
fabricatio/rust.pyi,sha256=PK9KfYSUto6nZ2KaCmF5sEVWCNizdtgOLhJhc1E7w20,25962
|
57
|
+
fabricatio/toolboxes/__init__.py,sha256=KBJi5OG_pExscdlM7Bnt_UF43j4I3Lv6G71kPVu4KQU,395
|
53
58
|
fabricatio/toolboxes/arithmetic.py,sha256=WLqhY-Pikv11Y_0SGajwZx3WhsLNpHKf9drzAqOf_nY,1369
|
54
59
|
fabricatio/toolboxes/fs.py,sha256=l4L1CVxJmjw9Ld2XUpIlWfV0_Fu_2Og6d3E13I-S4aE,736
|
55
|
-
fabricatio/toolboxes/__init__.py,sha256=KBJi5OG_pExscdlM7Bnt_UF43j4I3Lv6G71kPVu4KQU,395
|
56
60
|
fabricatio/utils.py,sha256=WYhFB4tHk6jKmjZgAsYhRmg1ZvBjn4X2y4n7yz25HjE,5454
|
61
|
+
fabricatio/workflows/__init__.py,sha256=5ScFSTA-bvhCesj3U9Mnmi6Law6N1fmh5UKyh58L3u8,51
|
57
62
|
fabricatio/workflows/articles.py,sha256=ObYTFUqLUk_CzdmmnX6S7APfxcGmPFqnFr9pdjU7Z4Y,969
|
58
63
|
fabricatio/workflows/rag.py,sha256=-YYp2tlE9Vtfgpg6ROpu6QVO8j8yVSPa6yDzlN3qVxs,520
|
59
|
-
fabricatio
|
60
|
-
fabricatio/__init__.py,sha256=w7ObFg6ud4pQuC1DhVyQI9x9dtp05QrcJAEk643iJmc,761
|
61
|
-
fabricatio/rust.cp313-win_amd64.pyd,sha256=-Xps_ojYfsRw7s4AWzvPcftvF2bwbhluP_KXKTJAMns,7819776
|
62
|
-
fabricatio-0.3.14.dev4.data/scripts/tdown.exe,sha256=rcQpG_q-9J97Dg_hgHJhUiMdfXBvSwbbrOXHYpx8xoo,3448320
|
63
|
-
fabricatio-0.3.14.dev4.data/scripts/ttm.exe,sha256=PkRspfDbHwEkKoBkgftRPu_GGCBOCsuuv61IwV4lJTw,2555392
|
64
|
-
fabricatio-0.3.14.dev4.dist-info/RECORD,,
|
64
|
+
fabricatio-0.3.14.dev7.dist-info/RECORD,,
|
Binary file
|
Binary file
|
File without changes
|