fabricatio 0.3.15.dev5__cp313-cp313-win_amd64.whl → 0.4.0__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.
Files changed (56) hide show
  1. fabricatio/__init__.py +9 -8
  2. fabricatio/actions/rules.py +83 -83
  3. fabricatio/rust.cp313-win_amd64.pyd +0 -0
  4. fabricatio/workflows/rag.py +2 -1
  5. fabricatio-0.4.0.data/scripts/tdown.exe +0 -0
  6. {fabricatio-0.3.15.dev5.dist-info → fabricatio-0.4.0.dist-info}/METADATA +17 -16
  7. fabricatio-0.4.0.dist-info/RECORD +18 -0
  8. fabricatio/actions/article.py +0 -415
  9. fabricatio/actions/article_rag.py +0 -407
  10. fabricatio/capabilities/__init__.py +0 -1
  11. fabricatio/capabilities/advanced_judge.py +0 -20
  12. fabricatio/capabilities/advanced_rag.py +0 -61
  13. fabricatio/capabilities/censor.py +0 -105
  14. fabricatio/capabilities/check.py +0 -212
  15. fabricatio/capabilities/correct.py +0 -228
  16. fabricatio/capabilities/extract.py +0 -74
  17. fabricatio/capabilities/propose.py +0 -65
  18. fabricatio/capabilities/rag.py +0 -264
  19. fabricatio/capabilities/rating.py +0 -404
  20. fabricatio/capabilities/review.py +0 -114
  21. fabricatio/capabilities/task.py +0 -113
  22. fabricatio/decorators.py +0 -253
  23. fabricatio/emitter.py +0 -177
  24. fabricatio/fs/__init__.py +0 -35
  25. fabricatio/fs/curd.py +0 -153
  26. fabricatio/fs/readers.py +0 -61
  27. fabricatio/journal.py +0 -12
  28. fabricatio/models/action.py +0 -263
  29. fabricatio/models/adv_kwargs_types.py +0 -63
  30. fabricatio/models/extra/__init__.py +0 -1
  31. fabricatio/models/extra/advanced_judge.py +0 -32
  32. fabricatio/models/extra/aricle_rag.py +0 -286
  33. fabricatio/models/extra/article_base.py +0 -488
  34. fabricatio/models/extra/article_essence.py +0 -98
  35. fabricatio/models/extra/article_main.py +0 -285
  36. fabricatio/models/extra/article_outline.py +0 -45
  37. fabricatio/models/extra/article_proposal.py +0 -52
  38. fabricatio/models/extra/patches.py +0 -20
  39. fabricatio/models/extra/problem.py +0 -165
  40. fabricatio/models/extra/rag.py +0 -98
  41. fabricatio/models/extra/rule.py +0 -51
  42. fabricatio/models/generic.py +0 -904
  43. fabricatio/models/kwargs_types.py +0 -121
  44. fabricatio/models/role.py +0 -156
  45. fabricatio/models/task.py +0 -310
  46. fabricatio/models/tool.py +0 -328
  47. fabricatio/models/usages.py +0 -791
  48. fabricatio/parser.py +0 -114
  49. fabricatio/rust.pyi +0 -846
  50. fabricatio/utils.py +0 -156
  51. fabricatio/workflows/articles.py +0 -24
  52. fabricatio-0.3.15.dev5.data/scripts/tdown.exe +0 -0
  53. fabricatio-0.3.15.dev5.data/scripts/ttm.exe +0 -0
  54. fabricatio-0.3.15.dev5.dist-info/RECORD +0 -63
  55. {fabricatio-0.3.15.dev5.dist-info → fabricatio-0.4.0.dist-info}/WHEEL +0 -0
  56. {fabricatio-0.3.15.dev5.dist-info → fabricatio-0.4.0.dist-info}/licenses/LICENSE +0 -0
fabricatio/parser.py DELETED
@@ -1,114 +0,0 @@
1
- """A module for capturing patterns in text using regular expressions."""
2
-
3
- import re
4
- from dataclasses import dataclass, field
5
- from functools import lru_cache
6
- from typing import Any, Callable, Iterable, List, Optional, Self, Tuple, Type, Union
7
-
8
- import ujson
9
- from json_repair import repair_json
10
-
11
- from fabricatio.journal import logger
12
- from fabricatio.rust import CONFIG
13
-
14
-
15
- @dataclass(frozen=True)
16
- class Capture:
17
- """A class to capture patterns in text using regular expressions.
18
-
19
- Attributes:
20
- target_groups (Tuple[int, ...]): The target groups to extract from the match.
21
- pattern (str): The regex pattern to search for.
22
- flags (int): Flags to apply when compiling the regex.
23
- capture_type (Optional[str]): Optional hint for post-processing (e.g., 'json').
24
- """
25
-
26
- pattern: str = field()
27
- """The regular expression pattern to search for."""
28
- flags: int = re.DOTALL | re.MULTILINE | re.IGNORECASE
29
- """Flags to control regex behavior (DOTALL, MULTILINE, IGNORECASE by default)."""
30
- capture_type: Optional[str] = None
31
- """Optional type identifier for post-processing (e.g., 'json' for JSON repair)."""
32
- target_groups: Tuple[int, ...] = field(default_factory=tuple)
33
- """Tuple of group indices to extract from the match (1-based indexing)."""
34
-
35
- def fix(self, text: Union[str, Iterable[str], Any]) -> Union[str, List[str], Any]:
36
- """Fix the text based on capture_type (e.g., JSON repair)."""
37
- match self.capture_type:
38
- case "json" if CONFIG.general.use_json_repair:
39
- logger.debug("Applying JSON repair to text.")
40
- if isinstance(text, str):
41
- return repair_json(text, ensure_ascii=False)
42
- return [repair_json(item, ensure_ascii=False) for item in text]
43
- case _:
44
- return text
45
-
46
- def capture(self, text: str) -> Optional[Union[str, Tuple[str, ...]]]:
47
- """Capture the first match of the pattern in the text."""
48
- compiled = re.compile(self.pattern, self.flags)
49
- match = compiled.match(text) or compiled.search(text)
50
- if match is None:
51
- logger.debug(f"Capture Failed: {text}")
52
- return None
53
-
54
- groups = self.fix(match.groups())
55
- if self.target_groups:
56
- cap = tuple(groups[g - 1] for g in self.target_groups)
57
- logger.debug(f"Captured texts: {'\n==\n'.join(cap)}")
58
- return cap
59
- cap = groups[0]
60
- logger.debug(f"Captured text: \n{cap}")
61
- return cap
62
-
63
- def convert_with(
64
- self,
65
- text: str,
66
- convertor: Callable[[Union[str, Tuple[str, ...]]], Any],
67
- ) -> Optional[Any]:
68
- """Convert captured text using a provided function."""
69
- if (cap := self.capture(text)) is None:
70
- return None
71
- try:
72
- return convertor(cap)
73
- except Exception as e: # noqa: BLE001
74
- logger.error(f"Failed to convert text using {convertor.__name__}: {e}\n{cap}")
75
- return None
76
-
77
- def validate_with[T, K, E](
78
- self,
79
- text: str,
80
- target_type: Type[T],
81
- elements_type: Optional[Type[E]] = None,
82
- length: Optional[int] = None,
83
- deserializer: Callable[[Union[str, Tuple[str, ...]]], K] = lambda x: ujson.loads(x) if isinstance(x, str) else ujson.loads(x[0]),
84
- ) -> Optional[T]:
85
- """Deserialize and validate the captured text against expected types."""
86
- judges = [lambda obj: isinstance(obj, target_type)]
87
- if elements_type:
88
- judges.append(lambda obj: all(isinstance(e, elements_type) for e in obj))
89
- if length:
90
- judges.append(lambda obj: len(obj) == length)
91
-
92
- if (out := self.convert_with(text, deserializer)) and all(j(out) for j in judges):
93
- return out # type: ignore
94
- return None
95
-
96
- @classmethod
97
- @lru_cache(32)
98
- def capture_code_block(cls, language: str) -> Self:
99
- """Capture a code block of the given language."""
100
- return cls(pattern=f"```{language}(.*?)```", capture_type=language)
101
-
102
- @classmethod
103
- @lru_cache(32)
104
- def capture_generic_block(cls, language: str) -> Self:
105
- """Capture a generic block of the given language."""
106
- return cls(
107
- pattern=f"--- Start of {language} ---(.*?)--- End of {language} ---",
108
- capture_type=language,
109
- )
110
-
111
-
112
- JsonCapture = Capture.capture_code_block("json")
113
- PythonCapture = Capture.capture_code_block("python")
114
- GenericCapture = Capture.capture_generic_block("String")