fabricatio 0.3.14.dev4__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.
Files changed (163) hide show
  1. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/.gitignore +1 -0
  2. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/Cargo.lock +11 -1
  3. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/Cargo.toml +4 -1
  4. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/Makefile +1 -1
  5. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/PKG-INFO +1 -1
  6. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/build.rs +8 -0
  7. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/proto/tei.proto +1 -1
  8. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/pyproject.toml +1 -1
  9. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/actions/article_rag.py +57 -66
  10. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/capabilities/rag.py +30 -29
  11. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/models/extra/aricle_rag.py +13 -10
  12. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/models/extra/article_base.py +4 -4
  13. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/models/extra/article_main.py +9 -13
  14. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/rust.pyi +66 -25
  15. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/src/config.rs +35 -47
  16. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/src/tei_client.rs +2 -2
  17. fabricatio-0.3.14.dev7/src/typst_conversion/Cargo.toml +11 -0
  18. fabricatio-0.3.14.dev7/src/typst_conversion/src/lib.rs +74 -0
  19. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/src/typst_tools.rs +53 -99
  20. fabricatio-0.3.14.dev7/templates.tar.gz +0 -0
  21. fabricatio-0.3.14.dev7/uv.lock +1930 -0
  22. fabricatio-0.3.14.dev4/.python-version +0 -1
  23. fabricatio-0.3.14.dev4/templates.tar.gz +0 -0
  24. fabricatio-0.3.14.dev4/uv.lock +0 -1914
  25. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/.github/workflows/build-package.yaml +0 -0
  26. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/.github/workflows/ruff.yaml +0 -0
  27. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/.github/workflows/tests.yaml +0 -0
  28. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/LICENSE +0 -0
  29. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/README.md +0 -0
  30. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/correct/correct.py +0 -0
  31. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/correct/correct_loop.py +0 -0
  32. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/extract_and_inject/.gitignore +0 -0
  33. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/extract_and_inject/article_rag.py +0 -0
  34. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/extract_and_inject/ask.py +0 -0
  35. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/extract_and_inject/chunk_article.py +0 -0
  36. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/extract_and_inject/extract_and_inject.py +0 -0
  37. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/extract_article/extract.py +0 -0
  38. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/llm_usages/llm_usage.py +0 -0
  39. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/make_a_rating/rating.py +0 -0
  40. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/make_diary/commits.json +0 -0
  41. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/make_diary/diary.py +0 -0
  42. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/minor/hello_fabricatio.py +0 -0
  43. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/minor/write_a_poem.py +0 -0
  44. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/propose_task/.gitignore +0 -0
  45. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/propose_task/propose.py +0 -0
  46. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/reviewer/censor.py +0 -0
  47. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/reviewer/review.py +0 -0
  48. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/rules/.gitignore +0 -0
  49. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/rules/draft_ruleset.py +0 -0
  50. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/search_bibtex/.gitignore +0 -0
  51. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/search_bibtex/search.py +0 -0
  52. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/simple_chat/chat.py +0 -0
  53. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/simple_rag/simple_rag.py +0 -0
  54. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/task_handle/handle_task.py +0 -0
  55. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/write_article/.gitignore +0 -0
  56. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/write_article/article_rag.py +0 -0
  57. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/write_article/post_process.py +0 -0
  58. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/write_article/write_article.py +0 -0
  59. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/write_outline/.gitignore +0 -0
  60. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/write_outline/write_outline.py +0 -0
  61. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/examples/write_outline/write_outline_corrected.py +0 -0
  62. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/__init__.py +0 -0
  63. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/actions/__init__.py +0 -0
  64. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/actions/article.py +0 -0
  65. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/actions/fs.py +0 -0
  66. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/actions/output.py +0 -0
  67. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/actions/rag.py +0 -0
  68. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/actions/rules.py +0 -0
  69. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/capabilities/__init__.py +0 -0
  70. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/capabilities/advanced_judge.py +0 -0
  71. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/capabilities/advanced_rag.py +0 -0
  72. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/capabilities/censor.py +0 -0
  73. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/capabilities/check.py +0 -0
  74. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/capabilities/correct.py +0 -0
  75. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/capabilities/extract.py +0 -0
  76. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/capabilities/persist.py +0 -0
  77. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/capabilities/propose.py +0 -0
  78. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/capabilities/rating.py +0 -0
  79. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/capabilities/review.py +0 -0
  80. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/capabilities/task.py +0 -0
  81. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/decorators.py +0 -0
  82. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/emitter.py +0 -0
  83. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/fs/__init__.py +0 -0
  84. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/fs/curd.py +0 -0
  85. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/fs/readers.py +0 -0
  86. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/journal.py +0 -0
  87. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/models/action.py +0 -0
  88. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/models/adv_kwargs_types.py +0 -0
  89. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/models/extra/__init__.py +0 -0
  90. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/models/extra/advanced_judge.py +0 -0
  91. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/models/extra/article_essence.py +0 -0
  92. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/models/extra/article_outline.py +0 -0
  93. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/models/extra/article_proposal.py +0 -0
  94. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/models/extra/patches.py +0 -0
  95. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/models/extra/problem.py +0 -0
  96. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/models/extra/rag.py +0 -0
  97. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/models/extra/rule.py +0 -0
  98. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/models/generic.py +0 -0
  99. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/models/kwargs_types.py +0 -0
  100. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/models/role.py +0 -0
  101. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/models/task.py +0 -0
  102. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/models/tool.py +3 -3
  103. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/models/usages.py +0 -0
  104. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/parser.py +0 -0
  105. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/py.typed +0 -0
  106. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/toolboxes/__init__.py +0 -0
  107. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/toolboxes/arithmetic.py +0 -0
  108. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/toolboxes/fs.py +0 -0
  109. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/utils.py +0 -0
  110. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/workflows/__init__.py +0 -0
  111. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/workflows/articles.py +0 -0
  112. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/python/fabricatio/workflows/rag.py +0 -0
  113. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/src/bib_tools.rs +0 -0
  114. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/src/event.rs +0 -0
  115. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/src/hash.rs +0 -0
  116. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/src/hbs_helpers.rs +0 -0
  117. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/src/language.rs +0 -0
  118. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/src/lib.rs +0 -0
  119. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/src/macro_utils/Cargo.toml +0 -0
  120. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/src/macro_utils/src/lib.rs +0 -0
  121. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/src/templates.rs +0 -0
  122. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/src/word_split.rs +0 -0
  123. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/as_prompt.hbs +0 -0
  124. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/binary-exploitation-ctf-solver.hbs +0 -0
  125. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/chap_summary.hbs +0 -0
  126. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/check_string.hbs +0 -0
  127. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/claude-xml.hbs +0 -0
  128. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/clean-up-code.hbs +0 -0
  129. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/co_validation.hbs +0 -0
  130. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/create_json_obj.hbs +0 -0
  131. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/cryptography-ctf-solver.hbs +0 -0
  132. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/dependencies.hbs +0 -0
  133. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/document-the-code.hbs +0 -0
  134. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/draft_rating_criteria.hbs +0 -0
  135. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/draft_rating_manual.hbs +0 -0
  136. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/draft_rating_weights_klee.hbs +0 -0
  137. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/draft_tool_usage_code.hbs +0 -0
  138. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/extract.hbs +0 -0
  139. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/extract_criteria_from_reasons.hbs +0 -0
  140. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/extract_reasons_from_examples.hbs +0 -0
  141. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/find-security-vulnerabilities.hbs +0 -0
  142. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/fix-bugs.hbs +0 -0
  143. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/fix_troubled_obj.hbs +0 -0
  144. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/fix_troubled_string.hbs +0 -0
  145. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/generic_string.hbs +0 -0
  146. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/improve-performance.hbs +0 -0
  147. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/liststr.hbs +0 -0
  148. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/make_choice.hbs +0 -0
  149. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/make_judgment.hbs +0 -0
  150. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/pathstr.hbs +0 -0
  151. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/rate_fine_grind.hbs +0 -0
  152. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/refactor.hbs +0 -0
  153. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/refined_query.hbs +0 -0
  154. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/retrieved_display.hbs +0 -0
  155. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/reverse-engineering-ctf-solver.hbs +0 -0
  156. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/review_string.hbs +0 -0
  157. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/rule_requirement.hbs +0 -0
  158. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/ruleset_requirement_breakdown.hbs +0 -0
  159. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/task_briefing.hbs +0 -0
  160. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/web-ctf-solver.hbs +0 -0
  161. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/write-git-commit.hbs +0 -0
  162. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/write-github-pull-request.hbs +0 -0
  163. {fabricatio-0.3.14.dev4 → fabricatio-0.3.14.dev7}/templates/built-in/write-github-readme.hbs +0 -0
@@ -169,3 +169,4 @@ output/
169
169
  templates/customed
170
170
  *.typ
171
171
  /src/tei.rs
172
+ .python-version
@@ -607,6 +607,7 @@ dependencies = [
607
607
  "tex2typst-rs",
608
608
  "tonic",
609
609
  "tonic-build",
610
+ "typst_conversion",
610
611
  "unicode-segmentation",
611
612
  "validator",
612
613
  "walkdir",
@@ -2578,11 +2579,11 @@ dependencies = [
2578
2579
  "clap",
2579
2580
  "dirs",
2580
2581
  "flate2",
2581
- "regex",
2582
2582
  "reqwest",
2583
2583
  "serde_json",
2584
2584
  "tar",
2585
2585
  "tex2typst-rs",
2586
+ "typst_conversion",
2586
2587
  ]
2587
2588
 
2588
2589
  [[package]]
@@ -2659,6 +2660,15 @@ version = "1.18.0"
2659
2660
  source = "registry+https://github.com/rust-lang/crates.io-index"
2660
2661
  checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
2661
2662
 
2663
+ [[package]]
2664
+ name = "typst_conversion"
2665
+ version = "0.1.0"
2666
+ dependencies = [
2667
+ "log",
2668
+ "regex",
2669
+ "tex2typst-rs",
2670
+ ]
2671
+
2662
2672
  [[package]]
2663
2673
  name = "ucd-trie"
2664
2674
  version = "0.1.7"
@@ -27,13 +27,15 @@ dotenvy = "0.15.7"
27
27
  directories-next = "2.0.0"
28
28
  log = "0.4.27"
29
29
  pyo3-log = "0.12.3"
30
- macro_utils = { path = "src/macro_utils" }
31
30
  strum = { version = "0.27.1", features = ["derive"] }
32
31
  bincode = { version = "2.0.1", features = ["serde"] }
33
32
 
34
33
  tonic = "0.13.0"
35
34
  prost = "0.13.5"
36
35
  pyo3-async-runtimes = { version = "0.24.0", features = ["tokio-runtime"] }
36
+ macro_utils = { path = "src/macro_utils" }
37
+ typst_conversion = { path = "src/typst_conversion" }
38
+
37
39
 
38
40
 
39
41
  [build-dependencies]
@@ -43,3 +45,4 @@ tonic-build = "0.13.0"
43
45
  [workspace.package]
44
46
  authors = ["Whth <zettainspector@foxmail.com>"]
45
47
  license-file = "LICENSE"
48
+
@@ -1,6 +1,6 @@
1
1
  DIST:=dist
2
2
  DATA:=extra
3
- PY:=3.12
3
+ PY:=3.13
4
4
 
5
5
 
6
6
  all:bdist
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fabricatio
3
- Version: 0.3.14.dev4
3
+ Version: 0.3.14.dev7
4
4
  Classifier: License :: OSI Approved :: MIT License
5
5
  Classifier: Programming Language :: Rust
6
6
  Classifier: Programming Language :: Python :: 3.12
@@ -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,6 +1,6 @@
1
1
  syntax = "proto3";
2
2
 
3
- package tei;
3
+ package tei.v1;
4
4
 
5
5
  service Info {
6
6
  rpc Info (InfoRequest) returns (InfoResponse) {
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fabricatio"
3
- version = "0.3.14-dev4"
3
+ version = "0.3.14-dev7"
4
4
  description = "A LLM multi-agent framework."
5
5
  readme = "README.md"
6
6
  license = { file = "LICENSE" }
@@ -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
- convert_all_block_tex,
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
- self,
82
- article_outline: ArticleOutline,
83
- collection_name: Optional[str] = None,
84
- supervisor: Optional[bool] = None,
85
- **cxt,
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
- self,
107
- article: Article,
108
- article_outline: ArticleOutline,
109
- chap: ArticleChapter,
110
- sec: ArticleSection,
111
- subsec: ArticleSubsection,
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 = convert_all_inline_tex(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
- self,
141
- article: Article,
142
- article_outline: ArticleOutline,
143
- chap: ArticleChapter,
144
- sec: ArticleSection,
145
- subsec: ArticleSubsection,
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 = convert_all_inline_tex(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
- self, subsec: ArticleSubsection, raw_paras: str, cm: CitationManager
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
- self,
186
- article: Article,
187
- article_outline: ArticleOutline,
188
- chap: ArticleChapter,
189
- sec: ArticleSection,
190
- subsec: ArticleSubsection,
191
- cm: CitationManager,
192
- extra_instruction: str = "",
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
- self,
209
- article: Article,
210
- article_outline: ArticleOutline,
211
- chap: ArticleChapter,
212
- sec: ArticleSection,
213
- subsec: ArticleSubsection,
214
- cm: CitationManager,
215
- extra_instruction: str = "",
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 = convert_to_block_formula(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 = convert_all_inline_tex(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
- self,
325
- article: Article,
326
- collection_name: str = "article_essence",
327
- twk_rag_ruleset: Optional[RuleSet] = None,
328
- parallel: bool = False,
329
- **cxt,
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
- f"You can use Reference above to rewrite the `{subsec.__class__.__name__}`.\n"
385
- f"You should Always use `{subsec.language}` as written language, "
386
- f"which is the original language of the `{subsec.title}`. "
387
- f"since rewrite a `{subsec.__class__.__name__}` in a different language is usually a bad choice",
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
- self,
403
- article_path: str | Path,
404
- bib_manager: BibManager,
405
- max_chunk_size: Optional[int] = None,
406
- max_overlapping_rate: Optional[float] = None,
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
- self,
55
- milvus_uri: Optional[str] = None,
56
- milvus_token: Optional[str] = None,
57
- milvus_timeout: Optional[float] = None,
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
- or (token.get_secret_value() if (token := (self.milvus_token or CONFIG.rag.milvus_token)) else ""),
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
- self, collection_name: Optional[str], create: bool = False, **kwargs: Unpack[CollectionConfigKwargs]
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
- self, data: List[D] | D, collection_name: Optional[str] = None, flush: bool = False
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
- 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 = "",
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
- self,
218
- query: List[str] | str,
219
- document_model: Type[D],
220
- max_accepted: int = 20,
221
- **kwargs: Unpack[FetchKwargs],
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
- await self.afetch_document(
239
- query=query,
240
- document_model=document_model,
241
- **kwargs,
242
- )
243
- )[:max_accepted]
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
- self, question: List[str] | str, **kwargs: Unpack[ChooseKwargs[Optional[List[str]]]]
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
- cls, path: P | List[P], bib_mgr: BibManager, **kwargs: Unpack[ChunkKwargs]
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
- bib_mgr.get_cite_key_by_title(title_seg)
89
- or bib_mgr.get_cite_key_by_title_fuzzy(title_seg)
90
- or bib_mgr.get_cite_key_fuzzy(path.stem)
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] = Field(default_factory=list)
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
- self, article_chunks: List[ArticleChunk], set_cite_number: bool = True, dedup: bool = True
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, inplace_update, split_out_metadata, to_metadata, word_count
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
- self,
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 := inplace_update(string, ARTICLE_WRAPPER, self.to_typst_code()):
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 = convert_all_inline_tex(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 = convert_all_inline_tex(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