fabricatio 0.2.0.dev19__cp312-cp312-manylinux_2_34_x86_64.whl → 0.2.0.dev20__cp312-cp312-manylinux_2_34_x86_64.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/_rust.cpython-312-x86_64-linux-gnu.so +0 -0
- fabricatio/_rust.pyi +3 -3
- fabricatio/config.py +12 -0
- fabricatio/journal.py +7 -2
- fabricatio/models/action.py +7 -1
- fabricatio/models/generic.py +2 -1
- fabricatio/models/task.py +9 -3
- fabricatio/models/usages.py +28 -13
- {fabricatio-0.2.0.dev19.data → fabricatio-0.2.0.dev20.data}/scripts/tdown +0 -0
- {fabricatio-0.2.0.dev19.dist-info → fabricatio-0.2.0.dev20.dist-info}/METADATA +118 -9
- {fabricatio-0.2.0.dev19.dist-info → fabricatio-0.2.0.dev20.dist-info}/RECORD +13 -13
- {fabricatio-0.2.0.dev19.dist-info → fabricatio-0.2.0.dev20.dist-info}/WHEEL +0 -0
- {fabricatio-0.2.0.dev19.dist-info → fabricatio-0.2.0.dev20.dist-info}/licenses/LICENSE +0 -0
Binary file
|
fabricatio/_rust.pyi
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
from pathlib import Path
|
2
|
-
from typing import Dict, List, Optional
|
2
|
+
from typing import Any, Dict, List, Optional
|
3
3
|
|
4
4
|
class TemplateManager:
|
5
5
|
"""TemplateManager class for managing handlebars templates."""
|
@@ -31,12 +31,12 @@ class TemplateManager:
|
|
31
31
|
def discover_templates(self) -> None:
|
32
32
|
"""Discover templates in the specified directories."""
|
33
33
|
|
34
|
-
def render_template(self, name: str, data: Dict[str,
|
34
|
+
def render_template(self, name: str, data: Dict[str, Any]) -> str:
|
35
35
|
"""Render a template with the given name and data.
|
36
36
|
|
37
37
|
Args:
|
38
38
|
name (str): The name of the template to render.
|
39
|
-
data (Dict[str,
|
39
|
+
data (Dict[str, Any]): The data to pass to the template.
|
40
40
|
|
41
41
|
Returns:
|
42
42
|
str: The rendered template.
|
fabricatio/config.py
CHANGED
@@ -115,6 +115,15 @@ class DebugConfig(BaseModel):
|
|
115
115
|
log_file: FilePath = Field(default=rf"{ROAMING_DIR}\fabricatio.log")
|
116
116
|
"""The log file of the application."""
|
117
117
|
|
118
|
+
rotation: int = Field(default=1)
|
119
|
+
"""The rotation of the log file. in weeks."""
|
120
|
+
|
121
|
+
retention: int = Field(default=2)
|
122
|
+
"""The retention of the log file. in weeks."""
|
123
|
+
|
124
|
+
streaming_visible: bool = Field(default=False)
|
125
|
+
"""Whether to print the llm output when streaming."""
|
126
|
+
|
118
127
|
|
119
128
|
class TemplateConfig(BaseModel):
|
120
129
|
"""Template configuration class."""
|
@@ -145,6 +154,9 @@ class TemplateConfig(BaseModel):
|
|
145
154
|
dependencies_template: str = Field(default="dependencies")
|
146
155
|
"""The name of the dependencies template which will be used to manage dependencies."""
|
147
156
|
|
157
|
+
task_briefing_template: str = Field(default="task_briefing")
|
158
|
+
"""The name of the task briefing template which will be used to brief a task."""
|
159
|
+
|
148
160
|
|
149
161
|
class MagikaConfig(BaseModel):
|
150
162
|
"""Magika configuration class."""
|
fabricatio/journal.py
CHANGED
@@ -3,17 +3,22 @@
|
|
3
3
|
import sys
|
4
4
|
|
5
5
|
from loguru import logger
|
6
|
-
from rich import traceback
|
6
|
+
from rich import pretty, traceback
|
7
7
|
|
8
8
|
from fabricatio.config import configs
|
9
9
|
|
10
|
+
pretty.install()
|
10
11
|
traceback.install()
|
11
12
|
logger.remove()
|
12
13
|
logger.add(
|
13
|
-
configs.debug.log_file,
|
14
|
+
configs.debug.log_file,
|
15
|
+
level=configs.debug.log_level,
|
16
|
+
rotation=f"{configs.debug.rotation} weeks",
|
17
|
+
retention=f"{configs.debug.retention} weeks",
|
14
18
|
)
|
15
19
|
logger.add(sys.stderr, level=configs.debug.log_level)
|
16
20
|
|
21
|
+
|
17
22
|
if __name__ == "__main__":
|
18
23
|
logger.debug("This is a trace message.")
|
19
24
|
logger.info("This is an information message.")
|
fabricatio/models/action.py
CHANGED
@@ -111,7 +111,13 @@ class WorkFlow[A: Union[Type[Action], Action]](WithBriefing, ToolBoxUsage):
|
|
111
111
|
await self._context.put(modified_ctx)
|
112
112
|
current_action = step.name
|
113
113
|
logger.info(f"Finished executing workflow: {self.name}")
|
114
|
-
|
114
|
+
final_ctx = await self._context.get()
|
115
|
+
if self.task_output_key not in final_ctx:
|
116
|
+
logger.warning(
|
117
|
+
f"Task output key: {self.task_output_key} not found in the context, None will be returned. You can check if `Action.output_key` is set the same as `WorkFlow.task_output_key`."
|
118
|
+
)
|
119
|
+
|
120
|
+
await task.finish(final_ctx.get(self.task_output_key, None))
|
115
121
|
except RuntimeError as e:
|
116
122
|
logger.error(f"Error during task: {current_action} execution: {e}") # Log the exception
|
117
123
|
logger.error(traceback.format_exc()) # Add this line to log the traceback
|
fabricatio/models/generic.py
CHANGED
@@ -109,7 +109,8 @@ class WithDependency(Base):
|
|
109
109
|
return template_manager.render_template(
|
110
110
|
configs.templates.dependencies_template,
|
111
111
|
{
|
112
|
-
(pth := Path(p)).
|
112
|
+
(pth := Path(p)).name: {
|
113
|
+
"path": pth.as_posix(),
|
113
114
|
"exists": pth.exists(),
|
114
115
|
"description": (identity := magika.identify_path(pth)).output.description,
|
115
116
|
"size": f"{pth.stat().st_size / (1024 * 1024) if pth.exists() and pth.is_file() else 0:.3f} MB",
|
fabricatio/models/task.py
CHANGED
@@ -7,6 +7,8 @@ from asyncio import Queue
|
|
7
7
|
from enum import Enum
|
8
8
|
from typing import Any, List, Optional, Self
|
9
9
|
|
10
|
+
from fabricatio._rust_instances import template_manager
|
11
|
+
from fabricatio.config import configs
|
10
12
|
from fabricatio.core import env
|
11
13
|
from fabricatio.journal import logger
|
12
14
|
from fabricatio.models.events import Event, EventLike
|
@@ -214,7 +216,7 @@ class Task[T](WithBriefing, WithJsonExample, WithDependency):
|
|
214
216
|
Returns:
|
215
217
|
Task: The running instance of the `Task` class.
|
216
218
|
"""
|
217
|
-
logger.info(f"Starting task {self.name}")
|
219
|
+
logger.info(f"Starting task `{self.name}`")
|
218
220
|
self._status = TaskStatus.Running
|
219
221
|
await env.emit_async(self.running_label, self)
|
220
222
|
return self
|
@@ -225,6 +227,7 @@ class Task[T](WithBriefing, WithJsonExample, WithDependency):
|
|
225
227
|
Returns:
|
226
228
|
Task: The cancelled instance of the `Task` class.
|
227
229
|
"""
|
230
|
+
logger.info(f"Cancelling task `{self.name}`")
|
228
231
|
self._status = TaskStatus.Cancelled
|
229
232
|
await env.emit_async(self.cancelled_label, self)
|
230
233
|
return self
|
@@ -235,7 +238,7 @@ class Task[T](WithBriefing, WithJsonExample, WithDependency):
|
|
235
238
|
Returns:
|
236
239
|
Task: The failed instance of the `Task` class.
|
237
240
|
"""
|
238
|
-
logger.
|
241
|
+
logger.info(f"Failing task `{self.name}`")
|
239
242
|
self._status = TaskStatus.Failed
|
240
243
|
await env.emit_async(self.failed_label, self)
|
241
244
|
return self
|
@@ -267,4 +270,7 @@ class Task[T](WithBriefing, WithJsonExample, WithDependency):
|
|
267
270
|
Returns:
|
268
271
|
str: The briefing of the task.
|
269
272
|
"""
|
270
|
-
return
|
273
|
+
return template_manager.render_template(
|
274
|
+
configs.templates.task_briefing_template,
|
275
|
+
self.model_dump(include={"name", "description", "dependencies", "goal"}),
|
276
|
+
)
|
fabricatio/models/usages.py
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
from typing import Callable, Dict, Iterable, List, Optional, Self, Set, Union, Unpack
|
4
4
|
|
5
|
+
import asyncstdlib
|
5
6
|
import litellm
|
6
7
|
import orjson
|
7
8
|
from fabricatio._rust_instances import template_manager
|
@@ -13,7 +14,13 @@ from fabricatio.models.task import Task
|
|
13
14
|
from fabricatio.models.tool import Tool, ToolBox
|
14
15
|
from fabricatio.models.utils import Messages
|
15
16
|
from fabricatio.parser import JsonCapture
|
16
|
-
from litellm
|
17
|
+
from litellm import stream_chunk_builder
|
18
|
+
from litellm.types.utils import (
|
19
|
+
Choices,
|
20
|
+
ModelResponse,
|
21
|
+
StreamingChoices,
|
22
|
+
)
|
23
|
+
from litellm.utils import CustomStreamWrapper
|
17
24
|
from pydantic import Field, HttpUrl, NonNegativeFloat, NonNegativeInt, PositiveInt, SecretStr
|
18
25
|
|
19
26
|
|
@@ -58,7 +65,7 @@ class LLMUsage(Base):
|
|
58
65
|
messages: List[Dict[str, str]],
|
59
66
|
n: PositiveInt | None = None,
|
60
67
|
**kwargs: Unpack[LLMKwargs],
|
61
|
-
) -> ModelResponse:
|
68
|
+
) -> ModelResponse | CustomStreamWrapper:
|
62
69
|
"""Asynchronously queries the language model to generate a response based on the provided messages and parameters.
|
63
70
|
|
64
71
|
Args:
|
@@ -105,13 +112,23 @@ class LLMUsage(Base):
|
|
105
112
|
Returns:
|
106
113
|
List[Choices | StreamingChoices]: A list of choices or streaming choices from the model response.
|
107
114
|
"""
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
+
resp = await self.aquery(
|
116
|
+
messages=Messages().add_system_message(system_message).add_user_message(question),
|
117
|
+
n=n,
|
118
|
+
**kwargs,
|
119
|
+
)
|
120
|
+
if isinstance(resp, ModelResponse):
|
121
|
+
return resp.choices
|
122
|
+
if isinstance(resp, CustomStreamWrapper):
|
123
|
+
if configs.debug.streaming_visible:
|
124
|
+
chunks = []
|
125
|
+
async for chunk in resp:
|
126
|
+
chunks.append(chunk)
|
127
|
+
print(chunk.choices[0].delta.content or "", end="") # noqa: T201
|
128
|
+
return stream_chunk_builder(chunks).choices
|
129
|
+
return stream_chunk_builder(await asyncstdlib.list()).choices
|
130
|
+
logger.critical(err := f"Unexpected response type: {type(resp)}")
|
131
|
+
raise ValueError(err)
|
115
132
|
|
116
133
|
async def aask(
|
117
134
|
self,
|
@@ -137,10 +154,8 @@ class LLMUsage(Base):
|
|
137
154
|
system_message=system_message,
|
138
155
|
**kwargs,
|
139
156
|
)
|
140
|
-
)
|
141
|
-
|
142
|
-
.message.content
|
143
|
-
)
|
157
|
+
).pop()
|
158
|
+
).message.content
|
144
159
|
|
145
160
|
async def aask_validate[T](
|
146
161
|
self,
|
Binary file
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: fabricatio
|
3
|
-
Version: 0.2.0.
|
3
|
+
Version: 0.2.0.dev20
|
4
4
|
Classifier: License :: OSI Approved :: MIT License
|
5
5
|
Classifier: Programming Language :: Rust
|
6
6
|
Classifier: Programming Language :: Python :: 3.12
|
@@ -10,6 +10,7 @@ Classifier: Framework :: Pydantic :: 2
|
|
10
10
|
Classifier: Typing :: Typed
|
11
11
|
Requires-Dist: appdirs>=1.4.4
|
12
12
|
Requires-Dist: asyncio>=3.4.3
|
13
|
+
Requires-Dist: asyncstdlib>=3.13.0
|
13
14
|
Requires-Dist: code2prompt
|
14
15
|
Requires-Dist: gitpython>=3.1.44
|
15
16
|
Requires-Dist: litellm>=1.60.0
|
@@ -47,26 +48,28 @@ Fabricatio is a powerful framework designed to facilitate the creation and manag
|
|
47
48
|
|
48
49
|
- [Installation](#installation)
|
49
50
|
- [Usage](#usage)
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
51
|
+
- [Defining a Task](#defining-a-task)
|
52
|
+
- [Creating an Action](#creating-an-action)
|
53
|
+
- [Assigning a Role](#assigning-a-role)
|
54
|
+
- [Logging](#logging)
|
54
55
|
- [Configuration](#configuration)
|
55
|
-
|
56
|
-
|
56
|
+
- [LLM Configuration](#llm-configuration)
|
57
|
+
- [Debug Configuration](#debug-configuration)
|
57
58
|
- [Examples](#examples)
|
58
|
-
|
59
|
-
|
59
|
+
- [Simple Task Example](#simple-task-example)
|
60
|
+
- [Complex Workflow Example](#complex-workflow-example)
|
60
61
|
- [Contributing](#contributing)
|
61
62
|
- [License](#license)
|
62
63
|
|
63
64
|
## Installation
|
65
|
+
|
64
66
|
To install Fabricatio, you can use pip:
|
65
67
|
|
66
68
|
```bash
|
67
69
|
pip install fabricatio
|
68
70
|
```
|
69
71
|
|
72
|
+
|
70
73
|
Alternatively, you can clone the repository and install it manually:
|
71
74
|
|
72
75
|
```bash
|
@@ -231,3 +234,109 @@ Contributions to Fabricatio are welcome! Please submit a pull request with your
|
|
231
234
|
|
232
235
|
Fabricatio is licensed under the MIT License. See the [LICENSE](LICENSE) file for more information.
|
233
236
|
|
237
|
+
---
|
238
|
+
|
239
|
+
### Additional Features and Modules
|
240
|
+
|
241
|
+
#### Advanced Models and Functionalities
|
242
|
+
|
243
|
+
The `advanced.py` module provides advanced models and functionalities for handling complex tasks and workflows.
|
244
|
+
|
245
|
+
```python
|
246
|
+
from fabricatio.models.advanced import ProposeTask, HandleTask
|
247
|
+
|
248
|
+
class ProposeTaskExample(ProposeTask):
|
249
|
+
pass
|
250
|
+
|
251
|
+
class HandleTaskExample(HandleTask):
|
252
|
+
pass
|
253
|
+
```
|
254
|
+
|
255
|
+
|
256
|
+
#### Toolboxes
|
257
|
+
|
258
|
+
Fabricatio includes various toolboxes for different types of operations. For example, the `arithmetic.py` toolbox provides arithmetic operations.
|
259
|
+
|
260
|
+
```python
|
261
|
+
from fabricatio.toolboxes.arithmetic import add, subtract, multiply, divide
|
262
|
+
|
263
|
+
result = add(1, 2)
|
264
|
+
print(result) # Output: 3
|
265
|
+
```
|
266
|
+
|
267
|
+
|
268
|
+
#### File System Operations
|
269
|
+
|
270
|
+
The `fs.py` toolbox offers tools for file system operations such as copying, moving, deleting files, and creating directories.
|
271
|
+
|
272
|
+
```python
|
273
|
+
from fabricatio.toolboxes.fs import copy_file, move_file, delete_file, create_directory
|
274
|
+
|
275
|
+
copy_file("source.txt", "destination.txt")
|
276
|
+
move_file("old_location.txt", "new_location.txt")
|
277
|
+
delete_file("file_to_delete.txt")
|
278
|
+
create_directory("new_directory")
|
279
|
+
```
|
280
|
+
|
281
|
+
|
282
|
+
#### Logging Setup
|
283
|
+
|
284
|
+
The logging setup in Fabricatio is handled by the `journal.py` module, which configures Loguru for logging.
|
285
|
+
|
286
|
+
```python
|
287
|
+
from fabricatio.journal import logger
|
288
|
+
|
289
|
+
logger.debug("This is a debug message.")
|
290
|
+
logger.info("This is an info message.")
|
291
|
+
logger.success("This is a success message.")
|
292
|
+
logger.warning("This is a warning message.")
|
293
|
+
logger.error("This is an error message.")
|
294
|
+
logger.critical("This is a critical message.")
|
295
|
+
```
|
296
|
+
|
297
|
+
|
298
|
+
#### Configuration Management
|
299
|
+
|
300
|
+
The configuration management in Fabricatio is handled by the `config.py` module, which uses Pydantic for defining and validating configurations.
|
301
|
+
|
302
|
+
```python
|
303
|
+
from fabricatio.config import Settings, LLMConfig, DebugConfig
|
304
|
+
|
305
|
+
settings = Settings()
|
306
|
+
llm_config = LLMConfig(api_endpoint="https://api.example.com")
|
307
|
+
debug_config = DebugConfig(log_level="DEBUG", log_file="fabricatio.log")
|
308
|
+
```
|
309
|
+
|
310
|
+
|
311
|
+
#### Testing
|
312
|
+
|
313
|
+
Fabricatio includes a suite of test cases to ensure the stability and correctness of the codebase. The tests are located in the `tests` directory and cover various modules and functionalities.
|
314
|
+
|
315
|
+
```python
|
316
|
+
# Example of a test case for the config module
|
317
|
+
import pytest
|
318
|
+
from fabricatio.config import DebugConfig
|
319
|
+
|
320
|
+
def test_debug_config_initialization():
|
321
|
+
temp_log_file = "fabricatio.log"
|
322
|
+
debug_config = DebugConfig(log_level="DEBUG", log_file=temp_log_file)
|
323
|
+
assert debug_config.log_level == "DEBUG"
|
324
|
+
assert str(debug_config.log_file) == temp_log_file
|
325
|
+
```
|
326
|
+
|
327
|
+
|
328
|
+
---
|
329
|
+
|
330
|
+
### Conclusion
|
331
|
+
|
332
|
+
Fabricatio is a versatile and powerful framework for managing tasks, actions, and workflows. It provides a robust set of tools and features to facilitate task automation and orchestration. Whether you're building a simple script or a complex application, Fabricatio has the capabilities to meet your needs.
|
333
|
+
|
334
|
+
For more detailed information and examples, please refer to the [official documentation](https://fabricatio.readthedocs.io).
|
335
|
+
|
336
|
+
---
|
337
|
+
|
338
|
+
If you have any questions or need further assistance, feel free to reach out to the community or open an issue on the GitHub repository.
|
339
|
+
|
340
|
+
Happy coding!
|
341
|
+
|
342
|
+
|
@@ -1,6 +1,6 @@
|
|
1
|
-
fabricatio-0.2.0.
|
2
|
-
fabricatio-0.2.0.
|
3
|
-
fabricatio-0.2.0.
|
1
|
+
fabricatio-0.2.0.dev20.dist-info/METADATA,sha256=8bFpdHeec5FaYeoDfkXRwqZ5TURu2M8C7TG_BxzWgyk,9363
|
2
|
+
fabricatio-0.2.0.dev20.dist-info/WHEEL,sha256=RIvmwLDYujv60MYBx2jxyP4vdn1DD7X0kBgz1TQvZuc,108
|
3
|
+
fabricatio-0.2.0.dev20.dist-info/licenses/LICENSE,sha256=yDZaTLnOi03bi3Dk6f5IjhLUc5old2yOsihHWU0z-i0,1067
|
4
4
|
fabricatio/fs/__init__.py,sha256=bYE9r8uR0dtknzbg_YaGv_6Wwa27ntkQt0Tl7Kb3HFI,117
|
5
5
|
fabricatio/fs/readers.py,sha256=Q-rqgXAsNcVu6WGFTvK70gZFyi088C3cuBdZOhn1oRI,527
|
6
6
|
fabricatio/fs/curd.py,sha256=n7Kj93Us201n0LMCKCJJFRDAeGBV9GrAoQgVGcljY_A,3453
|
@@ -10,26 +10,26 @@ fabricatio/toolboxes/task.py,sha256=9J3W-48CCEUh5PFz0XEC47Hv23Ugn1BEg-J_woQE1UA,
|
|
10
10
|
fabricatio/toolboxes/arithmetic.py,sha256=sSTPkKI6-mb278DwQKFO9jKyzc9kCx45xNH7V6bGBpE,1307
|
11
11
|
fabricatio/__init__.py,sha256=h0FgwSAdI2yhxYiuQi46uFvzqkK5LfJLt5XsHZ9rWIo,1063
|
12
12
|
fabricatio/core.py,sha256=apwXgI94DCWpGujGlsmXsTZQvJOQMB9llmuUo7ohd-4,5771
|
13
|
-
fabricatio/config.py,sha256=
|
13
|
+
fabricatio/config.py,sha256=9xwT_RBOuSKseYZSHv3Dpe6khVK4ikdEvStaF4bzwe8,9906
|
14
14
|
fabricatio/decorators.py,sha256=PQ_oItynybZ-snc3PYkPXgWZd4sVubRJoCIHmqRE6jA,2558
|
15
|
-
fabricatio/journal.py,sha256=
|
16
|
-
fabricatio/models/generic.py,sha256=
|
15
|
+
fabricatio/journal.py,sha256=bzxZay48ZWI0VIkkDXm4Wc_Cc9lBQYa2VGx3Hxy_PtA,753
|
16
|
+
fabricatio/models/generic.py,sha256=Lbjcr98nkcAUsfCvZQyeBEe8WE7uKh-zrR5DBwJf9Zk,3984
|
17
17
|
fabricatio/models/kwargs_types.py,sha256=INQIZiCOfGVkRbPmUMp-ZYtSkPwZmgFowid-D3A3TpE,875
|
18
|
-
fabricatio/models/action.py,sha256=
|
19
|
-
fabricatio/models/task.py,sha256
|
18
|
+
fabricatio/models/action.py,sha256=YJbPd4IVb9pcJXVWIsqnFNMU__KUIZbgKqEQG4Dtjqk,5519
|
19
|
+
fabricatio/models/task.py,sha256=-qYGdO5MT9grl1N12l9_va-1PdHSq2QSgDdyf4k5Hvo,8939
|
20
20
|
fabricatio/models/role.py,sha256=NaQ6cSrBmY4w-l_PSgefcCzjVANEzfKhH_xYdWwsGMg,1807
|
21
21
|
fabricatio/models/tool.py,sha256=pChgISB38r_Htkjd9XtJ_ph3iQKniP_Mzs7_u63wIm0,6213
|
22
22
|
fabricatio/models/events.py,sha256=TkMSJYSzRgurbfY2knWIc8gYw7rmaWqB7KeYzy5jeWU,2637
|
23
23
|
fabricatio/models/utils.py,sha256=u-eR_v-o0BSFSmCprP3mOyAO-WOyg_P68jjzLjyit_w,2457
|
24
|
-
fabricatio/models/usages.py,sha256=
|
24
|
+
fabricatio/models/usages.py,sha256=mCtvBePALA97Fgtdu1G5YlmR-u1MbbkIjSOiRqiA-xo,21312
|
25
25
|
fabricatio/models/advanced.py,sha256=UfvJBY31EXpKh9M1OLaFNHQiS3btVyptrglmS-Lx2x8,4606
|
26
26
|
fabricatio/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
27
27
|
fabricatio/_rust_instances.py,sha256=JAtO-vL8ihvduf1SHLNf0w7ZSVGCJeIv6zZ9Ekyy1hY,271
|
28
28
|
fabricatio/actions/__init__.py,sha256=eLa_5ACZ-FqdrLtOfCHk5nQBxzhIs1kgMIXWmkm2P8Y,110
|
29
29
|
fabricatio/actions/communication.py,sha256=Z266NQMB9C7-IDUhXXLT9-M3YKTvB_cRUfccmWYgDtg,473
|
30
30
|
fabricatio/actions/transmission.py,sha256=aXbrnVDj-eBtoWTiWvc6KHFV25jKwrCsZvnfFrmkjls,1206
|
31
|
-
fabricatio/_rust.pyi,sha256=
|
31
|
+
fabricatio/_rust.pyi,sha256=clhcURuiB9zlFo4m3VyoWQ8Xs4tvg6KNHXpF-ok9h4o,1703
|
32
32
|
fabricatio/parser.py,sha256=D_b59qn39Qz5oQhTZPRAmhESV4ccvG0tFaYg9AXFFO4,3269
|
33
|
-
fabricatio/_rust.cpython-312-x86_64-linux-gnu.so,sha256=
|
34
|
-
fabricatio-0.2.0.
|
35
|
-
fabricatio-0.2.0.
|
33
|
+
fabricatio/_rust.cpython-312-x86_64-linux-gnu.so,sha256=fEQZrSros6itNJCaBM_U-gm8BK1yik33Tkr6hxT-wmc,1337080
|
34
|
+
fabricatio-0.2.0.dev20.data/scripts/tdown,sha256=mAia7kc6d5zFaN5HJv5JUJJ1WKTk6rdR9-DxtV4Q44k,4554560
|
35
|
+
fabricatio-0.2.0.dev20.dist-info/RECORD,,
|
File without changes
|
File without changes
|