fabricatio 0.3.14.dev5__tar.gz → 0.3.14.dev7__tar.gz
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-0.3.14.dev5 → fabricatio-0.3.14.dev7}/.gitignore +1 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/PKG-INFO +1 -1
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/build.rs +8 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/proto/tei.proto +1 -1
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/pyproject.toml +1 -1
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/actions/article_rag.py +57 -66
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/capabilities/rag.py +30 -29
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/models/extra/aricle_rag.py +13 -10
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/models/extra/article_main.py +6 -9
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/rust.pyi +3 -2
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/src/config.rs +35 -47
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/src/tei_client.rs +2 -2
- fabricatio-0.3.14.dev7/templates.tar.gz +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/uv.lock +85 -69
- fabricatio-0.3.14.dev5/.python-version +0 -1
- fabricatio-0.3.14.dev5/templates.tar.gz +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/.github/workflows/build-package.yaml +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/.github/workflows/ruff.yaml +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/.github/workflows/tests.yaml +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/Cargo.lock +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/Cargo.toml +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/LICENSE +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/Makefile +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/README.md +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/correct/correct.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/correct/correct_loop.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/extract_and_inject/.gitignore +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/extract_and_inject/article_rag.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/extract_and_inject/ask.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/extract_and_inject/chunk_article.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/extract_and_inject/extract_and_inject.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/extract_article/extract.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/llm_usages/llm_usage.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/make_a_rating/rating.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/make_diary/commits.json +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/make_diary/diary.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/minor/hello_fabricatio.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/minor/write_a_poem.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/propose_task/.gitignore +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/propose_task/propose.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/reviewer/censor.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/reviewer/review.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/rules/.gitignore +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/rules/draft_ruleset.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/search_bibtex/.gitignore +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/search_bibtex/search.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/simple_chat/chat.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/simple_rag/simple_rag.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/task_handle/handle_task.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/write_article/.gitignore +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/write_article/article_rag.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/write_article/post_process.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/write_article/write_article.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/write_outline/.gitignore +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/write_outline/write_outline.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/examples/write_outline/write_outline_corrected.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/__init__.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/actions/__init__.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/actions/article.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/actions/fs.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/actions/output.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/actions/rag.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/actions/rules.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/capabilities/__init__.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/capabilities/advanced_judge.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/capabilities/advanced_rag.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/capabilities/censor.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/capabilities/check.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/capabilities/correct.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/capabilities/extract.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/capabilities/persist.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/capabilities/propose.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/capabilities/rating.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/capabilities/review.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/capabilities/task.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/decorators.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/emitter.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/fs/__init__.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/fs/curd.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/fs/readers.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/journal.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/models/action.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/models/adv_kwargs_types.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/models/extra/__init__.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/models/extra/advanced_judge.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/models/extra/article_base.py +1 -1
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/models/extra/article_essence.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/models/extra/article_outline.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/models/extra/article_proposal.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/models/extra/patches.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/models/extra/problem.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/models/extra/rag.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/models/extra/rule.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/models/generic.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/models/kwargs_types.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/models/role.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/models/task.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/models/tool.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/models/usages.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/parser.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/py.typed +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/toolboxes/__init__.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/toolboxes/arithmetic.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/toolboxes/fs.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/utils.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/workflows/__init__.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/workflows/articles.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/workflows/rag.py +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/src/bib_tools.rs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/src/event.rs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/src/hash.rs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/src/hbs_helpers.rs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/src/language.rs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/src/lib.rs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/src/macro_utils/Cargo.toml +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/src/macro_utils/src/lib.rs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/src/templates.rs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/src/typst_conversion/Cargo.toml +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/src/typst_conversion/src/lib.rs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/src/typst_tools.rs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/src/word_split.rs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/as_prompt.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/binary-exploitation-ctf-solver.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/chap_summary.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/check_string.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/claude-xml.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/clean-up-code.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/co_validation.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/create_json_obj.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/cryptography-ctf-solver.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/dependencies.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/document-the-code.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/draft_rating_criteria.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/draft_rating_manual.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/draft_rating_weights_klee.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/draft_tool_usage_code.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/extract.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/extract_criteria_from_reasons.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/extract_reasons_from_examples.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/find-security-vulnerabilities.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/fix-bugs.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/fix_troubled_obj.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/fix_troubled_string.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/generic_string.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/improve-performance.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/liststr.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/make_choice.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/make_judgment.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/pathstr.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/rate_fine_grind.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/refactor.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/refined_query.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/retrieved_display.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/reverse-engineering-ctf-solver.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/review_string.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/rule_requirement.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/ruleset_requirement_breakdown.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/task_briefing.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/web-ctf-solver.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/write-git-commit.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/write-github-pull-request.hbs +0 -0
- {fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/templates/built-in/write-github-readme.hbs +0 -0
@@ -1,3 +1,6 @@
|
|
1
|
+
use std::fs;
|
2
|
+
use std::path::Path;
|
3
|
+
|
1
4
|
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
2
5
|
tonic_build::configure()
|
3
6
|
.out_dir("src")
|
@@ -5,5 +8,10 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
5
8
|
.build_server(false)
|
6
9
|
.type_attribute(".", "#[derive(serde::Serialize,serde::Deserialize)]")
|
7
10
|
.compile_protos(&["proto/tei.proto"], &["proto"])
|
11
|
+
.map(|_| {
|
12
|
+
if Path::new("src/tei.v1.rs").exists() {
|
13
|
+
fs::rename("src/tei.v1.rs", "src/tei.rs").expect("Failed to rename file")
|
14
|
+
}
|
15
|
+
})
|
8
16
|
.map_err(|e| e.into())
|
9
17
|
}
|
@@ -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,
|
@@ -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
|
|
{fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/models/extra/aricle_rag.py
RENAMED
@@ -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()
|
{fabricatio-0.3.14.dev5 → fabricatio-0.3.14.dev7}/python/fabricatio/models/extra/article_main.py
RENAMED
@@ -1,5 +1,6 @@
|
|
1
1
|
"""ArticleBase and ArticleSubsection classes for managing hierarchical document components."""
|
2
2
|
|
3
|
+
from pydantic import Field, NonNegativeInt
|
3
4
|
from typing import ClassVar, Dict, Generator, List, Self, Tuple, Type, override
|
4
5
|
|
5
6
|
from fabricatio.capabilities.persist import PersistentAble
|
@@ -19,13 +20,11 @@ from fabricatio.models.extra.article_outline import (
|
|
19
20
|
)
|
20
21
|
from fabricatio.models.generic import Described, SequencePatch, SketchedAble, WithRef, WordCount
|
21
22
|
from fabricatio.rust import (
|
22
|
-
|
23
|
-
convert_all_inline_tex,
|
23
|
+
convert_all_tex_math,
|
24
24
|
fix_misplaced_labels,
|
25
25
|
split_out_metadata,
|
26
26
|
word_count,
|
27
27
|
)
|
28
|
-
from pydantic import Field, NonNegativeInt
|
29
28
|
|
30
29
|
PARAGRAPH_SEP = "// - - -"
|
31
30
|
|
@@ -82,8 +81,8 @@ class ArticleSubsection(SubSectionBase):
|
|
82
81
|
if len(self.paragraphs) == 0:
|
83
82
|
summary += f"`{self.__class__.__name__}` titled `{self.title}` have no paragraphs, You should add some!\n"
|
84
83
|
if (
|
85
|
-
|
86
|
-
|
84
|
+
abs((wc := self.word_count) - self.expected_word_count) / self.expected_word_count
|
85
|
+
> self._max_word_count_deviation
|
87
86
|
):
|
88
87
|
summary += f"`{self.__class__.__name__}` titled `{self.title}` have {wc} words, expected {self.expected_word_count} words!"
|
89
88
|
|
@@ -155,15 +154,13 @@ class Article(
|
|
155
154
|
if descriptions:
|
156
155
|
for a in self.iter_dfs():
|
157
156
|
a.description = fix_misplaced_labels(a.description)
|
158
|
-
a.description =
|
159
|
-
a.description = convert_all_block_tex(a.description)
|
157
|
+
a.description = convert_all_tex_math(a.description)
|
160
158
|
|
161
159
|
if paragraphs:
|
162
160
|
for _, _, subsec in self.iter_subsections():
|
163
161
|
for p in subsec.paragraphs:
|
164
162
|
p.content = fix_misplaced_labels(p.content)
|
165
|
-
p.content =
|
166
|
-
p.content = convert_all_block_tex(p.content)
|
163
|
+
p.content = convert_all_tex_math(p.content)
|
167
164
|
return self
|
168
165
|
|
169
166
|
@override
|
@@ -325,9 +325,10 @@ def tex_to_typst(string: str) -> str:
|
|
325
325
|
|
326
326
|
|
327
327
|
def convert_all_tex_math(string: str) -> str:
|
328
|
-
"""Unified function to convert all supported TeX math expressions in a string to Typst format.
|
328
|
+
r"""Unified function to convert all supported TeX math expressions in a string to Typst format.
|
329
329
|
|
330
330
|
Handles $...$, $$...$$, \\(...\\), and \\[...\\]
|
331
|
+
|
331
332
|
Args:
|
332
333
|
string: The input string containing TeX math expressions.
|
333
334
|
|
@@ -348,7 +349,7 @@ def fix_misplaced_labels(string: str) -> str:
|
|
348
349
|
|
349
350
|
|
350
351
|
def comment(string: str) -> str:
|
351
|
-
"""Add comment to the string.
|
352
|
+
r"""Add comment to the string.
|
352
353
|
|
353
354
|
Args:
|
354
355
|
string: The input string to which comments will be added.
|