fabricatio 0.2.6.dev3__cp39-cp39-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- fabricatio/__init__.py +60 -0
- fabricatio/_rust.cp39-win_amd64.pyd +0 -0
- fabricatio/_rust.pyi +116 -0
- fabricatio/_rust_instances.py +10 -0
- fabricatio/actions/article.py +81 -0
- fabricatio/actions/output.py +19 -0
- fabricatio/actions/rag.py +25 -0
- fabricatio/capabilities/correct.py +115 -0
- fabricatio/capabilities/propose.py +49 -0
- fabricatio/capabilities/rag.py +369 -0
- fabricatio/capabilities/rating.py +339 -0
- fabricatio/capabilities/review.py +278 -0
- fabricatio/capabilities/task.py +113 -0
- fabricatio/config.py +400 -0
- fabricatio/core.py +181 -0
- fabricatio/decorators.py +179 -0
- fabricatio/fs/__init__.py +29 -0
- fabricatio/fs/curd.py +149 -0
- fabricatio/fs/readers.py +46 -0
- fabricatio/journal.py +21 -0
- fabricatio/models/action.py +158 -0
- fabricatio/models/events.py +120 -0
- fabricatio/models/extra.py +171 -0
- fabricatio/models/generic.py +406 -0
- fabricatio/models/kwargs_types.py +158 -0
- fabricatio/models/role.py +48 -0
- fabricatio/models/task.py +299 -0
- fabricatio/models/tool.py +189 -0
- fabricatio/models/usages.py +682 -0
- fabricatio/models/utils.py +167 -0
- fabricatio/parser.py +149 -0
- fabricatio/py.typed +0 -0
- fabricatio/toolboxes/__init__.py +15 -0
- fabricatio/toolboxes/arithmetic.py +62 -0
- fabricatio/toolboxes/fs.py +31 -0
- fabricatio/workflows/articles.py +15 -0
- fabricatio/workflows/rag.py +11 -0
- fabricatio-0.2.6.dev3.data/scripts/tdown.exe +0 -0
- fabricatio-0.2.6.dev3.dist-info/METADATA +432 -0
- fabricatio-0.2.6.dev3.dist-info/RECORD +42 -0
- fabricatio-0.2.6.dev3.dist-info/WHEEL +4 -0
- fabricatio-0.2.6.dev3.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,432 @@
|
|
1
|
+
Metadata-Version: 2.4
|
2
|
+
Name: fabricatio
|
3
|
+
Version: 0.2.6.dev3
|
4
|
+
Classifier: License :: OSI Approved :: MIT License
|
5
|
+
Classifier: Programming Language :: Rust
|
6
|
+
Classifier: Programming Language :: Python :: 3.12
|
7
|
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
8
|
+
Classifier: Framework :: AsyncIO
|
9
|
+
Classifier: Framework :: Pydantic :: 2
|
10
|
+
Classifier: Typing :: Typed
|
11
|
+
Requires-Dist: appdirs>=1.4.4
|
12
|
+
Requires-Dist: asyncio>=3.4.3
|
13
|
+
Requires-Dist: asyncstdlib>=3.13.0
|
14
|
+
Requires-Dist: json-repair>=0.39.1
|
15
|
+
Requires-Dist: litellm>=1.60.0
|
16
|
+
Requires-Dist: loguru>=0.7.3
|
17
|
+
Requires-Dist: magika>=0.5.1
|
18
|
+
Requires-Dist: more-itertools>=10.6.0
|
19
|
+
Requires-Dist: orjson>=3.10.15
|
20
|
+
Requires-Dist: pydantic>=2.10.6
|
21
|
+
Requires-Dist: pydantic-settings>=2.7.1
|
22
|
+
Requires-Dist: pymitter>=1.0.0
|
23
|
+
Requires-Dist: questionary>=2.1.0
|
24
|
+
Requires-Dist: regex>=2024.11.6
|
25
|
+
Requires-Dist: rich>=13.9.4
|
26
|
+
Requires-Dist: pymilvus>=2.5.4 ; extra == 'rag'
|
27
|
+
Requires-Dist: fabricatio[rag] ; extra == 'full'
|
28
|
+
Provides-Extra: rag
|
29
|
+
Provides-Extra: full
|
30
|
+
License-File: LICENSE
|
31
|
+
Summary: A LLM multi-agent framework.
|
32
|
+
Keywords: ai,agents,multi-agent,llm,pyo3
|
33
|
+
Author-email: Whth <zettainspector@foxmail.com>
|
34
|
+
Requires-Python: >=3.12, <3.13
|
35
|
+
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
|
36
|
+
Project-URL: Homepage, https://github.com/Whth/fabricatio
|
37
|
+
Project-URL: Repository, https://github.com/Whth/fabricatio
|
38
|
+
Project-URL: Issues, https://github.com/Whth/fabricatio/issues
|
39
|
+
|
40
|
+
# Fabricatio
|
41
|
+
|
42
|
+

|
43
|
+

|
44
|
+

|
45
|
+
|
46
|
+
## Overview
|
47
|
+
|
48
|
+
Fabricatio is a Python library designed for building LLM (Large Language Model) applications using an event-based agent structure. It integrates Rust for performance-critical tasks, utilizes Handlebars for templating, and employs PyO3 for Python bindings.
|
49
|
+
|
50
|
+
## Features
|
51
|
+
|
52
|
+
- **Event-Based Architecture**: Utilizes an EventEmitter pattern for robust task management.
|
53
|
+
- **LLM Integration**: Supports interactions with large language models for intelligent task processing.
|
54
|
+
- **Templating Engine**: Uses Handlebars for dynamic content generation.
|
55
|
+
- **Toolboxes**: Provides predefined toolboxes for common operations like file manipulation and arithmetic.
|
56
|
+
- **Async Support**: Fully asynchronous for efficient execution.
|
57
|
+
- **Extensible**: Easy to extend with custom actions, workflows, and tools.
|
58
|
+
|
59
|
+
## Installation
|
60
|
+
|
61
|
+
### Using UV (Recommended)
|
62
|
+
|
63
|
+
To install Fabricatio using `uv` (a package manager for Python):
|
64
|
+
|
65
|
+
```bash
|
66
|
+
# Install uv if not already installed
|
67
|
+
pip install uv
|
68
|
+
|
69
|
+
# Clone the repository
|
70
|
+
git clone https://github.com/Whth/fabricatio.git
|
71
|
+
cd fabricatio
|
72
|
+
|
73
|
+
# Install the package in development mode with uv
|
74
|
+
uv --with-editable . maturin develop --uv -r
|
75
|
+
```
|
76
|
+
|
77
|
+
### Building Distribution
|
78
|
+
|
79
|
+
For production builds:
|
80
|
+
|
81
|
+
```bash
|
82
|
+
# Build distribution packages
|
83
|
+
make bdist
|
84
|
+
```
|
85
|
+
|
86
|
+
This will generate distribution files in the `dist` directory.
|
87
|
+
|
88
|
+
## Usage
|
89
|
+
|
90
|
+
### Basic Example
|
91
|
+
|
92
|
+
#### Simple Hello World Program
|
93
|
+
|
94
|
+
```python
|
95
|
+
import asyncio
|
96
|
+
from fabricatio import Action, Role, Task, logger, WorkFlow
|
97
|
+
from typing import Any
|
98
|
+
|
99
|
+
class Hello(Action):
|
100
|
+
name: str = "hello"
|
101
|
+
output_key: str = "task_output"
|
102
|
+
|
103
|
+
async def _execute(self, task_input: Task[str], **_) -> Any:
|
104
|
+
ret = "Hello fabricatio!"
|
105
|
+
logger.info("executing talk action")
|
106
|
+
return ret
|
107
|
+
|
108
|
+
async def main() -> None:
|
109
|
+
role = Role(
|
110
|
+
name="talker",
|
111
|
+
description="talker role",
|
112
|
+
registry={Task.pending_label: WorkFlow(name="talk", steps=(Hello,))}
|
113
|
+
)
|
114
|
+
|
115
|
+
task = Task(name="say hello", goals="say hello", description="say hello to the world")
|
116
|
+
result = await task.delegate()
|
117
|
+
logger.success(f"Result: {result}")
|
118
|
+
|
119
|
+
if __name__ == "__main__":
|
120
|
+
asyncio.run(main())
|
121
|
+
```
|
122
|
+
|
123
|
+
### Advanced Examples
|
124
|
+
|
125
|
+
#### Simple Chat
|
126
|
+
|
127
|
+
Demonstrates a basic chat application.
|
128
|
+
|
129
|
+
```python
|
130
|
+
"""Simple chat example."""
|
131
|
+
import asyncio
|
132
|
+
from fabricatio import Action, Role, Task, WorkFlow, logger
|
133
|
+
from fabricatio.models.events import Event
|
134
|
+
from questionary import text
|
135
|
+
|
136
|
+
class Talk(Action):
|
137
|
+
"""Action that says hello to the world."""
|
138
|
+
|
139
|
+
output_key: str = "task_output"
|
140
|
+
|
141
|
+
async def _execute(self, task_input: Task[str], **_) -> int:
|
142
|
+
counter = 0
|
143
|
+
try:
|
144
|
+
while True:
|
145
|
+
user_say = await text("User: ").ask_async()
|
146
|
+
gpt_say = await self.aask(
|
147
|
+
user_say,
|
148
|
+
system_message=f"You have to answer to user obeying task assigned to you:\n{task_input.briefing}",
|
149
|
+
)
|
150
|
+
print(f"GPT: {gpt_say}") # noqa: T201
|
151
|
+
counter += 1
|
152
|
+
except KeyboardInterrupt:
|
153
|
+
logger.info(f"executed talk action {counter} times")
|
154
|
+
return counter
|
155
|
+
|
156
|
+
async def main() -> None:
|
157
|
+
"""Main function."""
|
158
|
+
role = Role(
|
159
|
+
name="talker",
|
160
|
+
description="talker role",
|
161
|
+
registry={Event.instantiate_from("talk").push_wildcard().push("pending"): WorkFlow(name="talk", steps=(Talk,))},
|
162
|
+
)
|
163
|
+
|
164
|
+
task = await role.propose_task(
|
165
|
+
"you have to act as a helpful assistant, answer to all user questions properly and patiently"
|
166
|
+
)
|
167
|
+
_ = await task.delegate("talk")
|
168
|
+
|
169
|
+
if __name__ == "__main__":
|
170
|
+
asyncio.run(main())
|
171
|
+
```
|
172
|
+
|
173
|
+
#### Simple RAG
|
174
|
+
|
175
|
+
Demonstrates Retrieval-Augmented Generation (RAG).
|
176
|
+
|
177
|
+
```python
|
178
|
+
"""Simple chat example."""
|
179
|
+
import asyncio
|
180
|
+
from fabricatio import RAG, Action, Role, Task, WorkFlow, logger
|
181
|
+
from fabricatio.models.events import Event
|
182
|
+
from questionary import text
|
183
|
+
|
184
|
+
class Talk(Action, RAG):
|
185
|
+
"""Action that says hello to the world."""
|
186
|
+
|
187
|
+
output_key: str = "task_output"
|
188
|
+
|
189
|
+
async def _execute(self, task_input: Task[str], **_) -> int:
|
190
|
+
counter = 0
|
191
|
+
|
192
|
+
self.init_client().view("test_collection", create=True)
|
193
|
+
await self.consume_string(
|
194
|
+
[
|
195
|
+
"Company policy clearly stipulates that all employees must arrive at the headquarters building located at 88 Jianguo Road, Chaoyang District, Beijing before 9 AM daily.",
|
196
|
+
"According to the latest revised health and safety guidelines, employees must wear company-provided athletic gear when using the company gym facilities.",
|
197
|
+
"Section 3.2.1 of the employee handbook states that pets are not allowed in the office area under any circumstances.",
|
198
|
+
"To promote work efficiency, the company has quiet workspaces at 100 Century Avenue, Pudong New District, Shanghai, for employees who need high concentration for their work.",
|
199
|
+
"According to the company's remote work policy, employees can apply for a maximum of 5 days of working from home per month, but must submit the application one week in advance.",
|
200
|
+
"The company has strict regulations on overtime. Unless approved by direct supervisors, no form of work is allowed after 9 PM.",
|
201
|
+
"Regarding the new regulations for business travel reimbursement, all traveling personnel must submit detailed expense reports within five working days after returning.",
|
202
|
+
"Company address: 123 East Sports Road, Tianhe District, Guangzhou, Postal Code: 510620.",
|
203
|
+
"Annual team building activities will be held in the second quarter of each year, usually at a resort within a two-hour drive from the Guangzhou headquarters.",
|
204
|
+
"Employees who are late more than three times will receive a formal warning, which may affect their year-end performance evaluation.",
|
205
|
+
]
|
206
|
+
)
|
207
|
+
try:
|
208
|
+
while True:
|
209
|
+
user_say = await text("User: ").ask_async()
|
210
|
+
if user_say is None:
|
211
|
+
break
|
212
|
+
gpt_say = await self.aask_retrieved(
|
213
|
+
user_say,
|
214
|
+
user_say,
|
215
|
+
extra_system_message=f"You have to answer to user obeying task assigned to you:\n{task_input.briefing}",
|
216
|
+
)
|
217
|
+
print(f"GPT: {gpt_say}") # noqa: T201
|
218
|
+
counter += 1
|
219
|
+
except KeyboardInterrupt:
|
220
|
+
logger.info(f"executed talk action {counter} times")
|
221
|
+
return counter
|
222
|
+
|
223
|
+
async def main() -> None:
|
224
|
+
"""Main function."""
|
225
|
+
role = Role(
|
226
|
+
name="talker",
|
227
|
+
description="talker role but with rag",
|
228
|
+
registry={Event.instantiate_from("talk").push_wildcard().push("pending"): WorkFlow(name="talk", steps=(Talk,))},
|
229
|
+
)
|
230
|
+
|
231
|
+
task = await role.propose_task(
|
232
|
+
"you have to act as a helpful assistant, answer to all user questions properly and patiently"
|
233
|
+
)
|
234
|
+
_ = await task.delegate("talk")
|
235
|
+
|
236
|
+
if __name__ == "__main__":
|
237
|
+
asyncio.run(main())
|
238
|
+
```
|
239
|
+
|
240
|
+
#### Extract Article
|
241
|
+
|
242
|
+
Demonstrates extracting the essence of an article from a file.
|
243
|
+
|
244
|
+
```python
|
245
|
+
"""Example of proposing a task to a role."""
|
246
|
+
import asyncio
|
247
|
+
from typing import List
|
248
|
+
|
249
|
+
from fabricatio import ArticleEssence, Event, ExtractArticleEssence, Role, Task, WorkFlow, logger
|
250
|
+
|
251
|
+
async def main() -> None:
|
252
|
+
"""Main function."""
|
253
|
+
role = Role(
|
254
|
+
name="Researcher",
|
255
|
+
description="Extract article essence",
|
256
|
+
registry={
|
257
|
+
Event.quick_instantiate("article"): WorkFlow(
|
258
|
+
name="extract",
|
259
|
+
steps=(ExtractArticleEssence(output_key="task_output"),),
|
260
|
+
)
|
261
|
+
},
|
262
|
+
)
|
263
|
+
task: Task[List[ArticleEssence]] = await role.propose_task(
|
264
|
+
"Extract the essence of the article from the file at './7.md'"
|
265
|
+
)
|
266
|
+
ess = (await task.delegate("article")).pop()
|
267
|
+
logger.success(f"Essence:\n{ess.display()}")
|
268
|
+
|
269
|
+
if __name__ == "__main__":
|
270
|
+
asyncio.run(main())
|
271
|
+
```
|
272
|
+
|
273
|
+
#### Propose Task
|
274
|
+
|
275
|
+
Demonstrates proposing a task to a role.
|
276
|
+
|
277
|
+
```python
|
278
|
+
"""Example of proposing a task to a role."""
|
279
|
+
import asyncio
|
280
|
+
from typing import Any
|
281
|
+
|
282
|
+
from fabricatio import Action, Event, Role, Task, WorkFlow, logger
|
283
|
+
|
284
|
+
class Talk(Action):
|
285
|
+
"""Action that says hello to the world."""
|
286
|
+
|
287
|
+
output_key: str = "task_output"
|
288
|
+
|
289
|
+
async def _execute(self, **_) -> Any:
|
290
|
+
ret = "Hello fabricatio!"
|
291
|
+
logger.info("executing talk action")
|
292
|
+
return ret
|
293
|
+
|
294
|
+
async def main() -> None:
|
295
|
+
"""Main function."""
|
296
|
+
role = Role(
|
297
|
+
name="talker",
|
298
|
+
description="talker role",
|
299
|
+
registry={Event.quick_instantiate("talk"): WorkFlow(name="talk", steps=(Talk,))},
|
300
|
+
)
|
301
|
+
logger.info(f"Task example:\n{Task.formated_json_schema()}")
|
302
|
+
logger.info(f"proposed task: {await role.propose_task('write a rust clap cli that can download a html page')}")
|
303
|
+
|
304
|
+
if __name__ == "__main__":
|
305
|
+
asyncio.run(main())
|
306
|
+
```
|
307
|
+
|
308
|
+
#### Review
|
309
|
+
|
310
|
+
Demonstrates reviewing code.
|
311
|
+
|
312
|
+
```python
|
313
|
+
"""Example of review usage."""
|
314
|
+
import asyncio
|
315
|
+
|
316
|
+
from fabricatio import Role, logger
|
317
|
+
|
318
|
+
async def main() -> None:
|
319
|
+
"""Main function."""
|
320
|
+
role = Role(
|
321
|
+
name="Reviewer",
|
322
|
+
description="A role that reviews the code.",
|
323
|
+
)
|
324
|
+
|
325
|
+
code = await role.aask(
|
326
|
+
"write a cli app using rust with clap which can generate a basic manifest of a standard rust project, output code only,no extra explanation"
|
327
|
+
)
|
328
|
+
|
329
|
+
logger.success(f"Code: \n{code}")
|
330
|
+
res = await role.review_string(code, "If the cli app is of good design")
|
331
|
+
logger.success(f"Review: \n{res.display()}")
|
332
|
+
await res.supervisor_check()
|
333
|
+
logger.success(f"Review: \n{res.display()}")
|
334
|
+
|
335
|
+
if __name__ == "__main__":
|
336
|
+
asyncio.run(main())
|
337
|
+
```
|
338
|
+
|
339
|
+
#### Write Outline
|
340
|
+
|
341
|
+
Demonstrates writing an outline for an article in Typst format.
|
342
|
+
|
343
|
+
```python
|
344
|
+
"""Example of using the library."""
|
345
|
+
import asyncio
|
346
|
+
|
347
|
+
from fabricatio import Event, Role, WriteOutlineWorkFlow, logger
|
348
|
+
|
349
|
+
async def main() -> None:
|
350
|
+
"""Main function."""
|
351
|
+
role = Role(
|
352
|
+
name="Undergraduate Researcher",
|
353
|
+
description="Write an outline for an article in typst format.",
|
354
|
+
registry={Event.quick_instantiate(ns := "article"): WriteOutlineWorkFlow},
|
355
|
+
)
|
356
|
+
|
357
|
+
proposed_task = await role.propose_task(
|
358
|
+
"You need to read the `./article_briefing.txt` file and write an outline for the article in typst format. The outline should be saved in the `./out.typ` file.",
|
359
|
+
)
|
360
|
+
path = await proposed_task.delegate(ns)
|
361
|
+
logger.success(f"The outline is saved in:\n{path}")
|
362
|
+
|
363
|
+
if __name__ == "__main__":
|
364
|
+
asyncio.run(main())
|
365
|
+
```
|
366
|
+
|
367
|
+
## Configuration
|
368
|
+
|
369
|
+
The configuration for Fabricatio is managed via environment variables or TOML files. The default configuration file (`config.toml`) can be overridden by specifying a custom path.
|
370
|
+
|
371
|
+
Example `config.toml`:
|
372
|
+
|
373
|
+
```toml
|
374
|
+
[llm]
|
375
|
+
api_endpoint = "https://api.openai.com"
|
376
|
+
api_key = "your_openai_api_key"
|
377
|
+
timeout = 300
|
378
|
+
max_retries = 3
|
379
|
+
model = "gpt-3.5-turbo"
|
380
|
+
temperature = 1.0
|
381
|
+
stop_sign = ["\n\n\n", "User:"]
|
382
|
+
top_p = 0.35
|
383
|
+
generation_count = 1
|
384
|
+
stream = false
|
385
|
+
max_tokens = 8192
|
386
|
+
```
|
387
|
+
|
388
|
+
## Development Setup
|
389
|
+
|
390
|
+
To set up a development environment for Fabricatio:
|
391
|
+
|
392
|
+
1. **Clone the Repository**:
|
393
|
+
```bash
|
394
|
+
git clone https://github.com/Whth/fabricatio.git
|
395
|
+
cd fabricatio
|
396
|
+
```
|
397
|
+
|
398
|
+
2. **Install Dependencies**:
|
399
|
+
```bash
|
400
|
+
uv --with-editable . maturin develop --uv -r
|
401
|
+
```
|
402
|
+
|
403
|
+
3. **Run Tests**:
|
404
|
+
```bash
|
405
|
+
make test
|
406
|
+
```
|
407
|
+
|
408
|
+
4. **Build Documentation**:
|
409
|
+
```bash
|
410
|
+
make docs
|
411
|
+
```
|
412
|
+
|
413
|
+
## Contributing
|
414
|
+
|
415
|
+
Contributions are welcome! Please follow these guidelines when contributing:
|
416
|
+
|
417
|
+
1. Fork the repository.
|
418
|
+
2. Create your feature branch (`git checkout -b feature/new-feature`).
|
419
|
+
3. Commit your changes (`git commit -am 'Add new feature'`).
|
420
|
+
4. Push to the branch (`git push origin feature/new-feature`).
|
421
|
+
5. Create a new Pull Request.
|
422
|
+
|
423
|
+
## License
|
424
|
+
|
425
|
+
Fabricatio is licensed under the MIT License. See [LICENSE](LICENSE) for more details.
|
426
|
+
|
427
|
+
## Acknowledgments
|
428
|
+
|
429
|
+
Special thanks to the contributors and maintainers of:
|
430
|
+
- [PyO3](https://github.com/PyO3/pyo3)
|
431
|
+
- [Maturin](https://github.com/PyO3/maturin)
|
432
|
+
- [Handlebars.rs](https://github.com/sunng87/handlebars-rust)
|
@@ -0,0 +1,42 @@
|
|
1
|
+
fabricatio-0.2.6.dev3.dist-info/METADATA,sha256=KJbkh6wKtq_I4DU82JI7ZNWDKL6lCV3bz1yFcEr1gX4,14085
|
2
|
+
fabricatio-0.2.6.dev3.dist-info/WHEEL,sha256=SmPT9fUKPAPiE6hwAZ9_NHUVRjWSQ_RENTrzrvPx4p0,94
|
3
|
+
fabricatio-0.2.6.dev3.dist-info/licenses/LICENSE,sha256=do7J7EiCGbq0QPbMAL_FqLYufXpHnCnXBOuqVPwSV8Y,1088
|
4
|
+
fabricatio/actions/article.py,sha256=yzRwgc203vI3MW_oWyFybDxTz6kaBBvUgN2zOJJ9Amc,2825
|
5
|
+
fabricatio/actions/output.py,sha256=KSSLvEvXsA10ACN2mbqGo98QwKLVUAoMUJNKYk6HhGc,645
|
6
|
+
fabricatio/actions/rag.py,sha256=GpT7YlqOYznZyaT-6Y84_33HtZGT-5s71ZK8iroQA9g,813
|
7
|
+
fabricatio/capabilities/correct.py,sha256=0BYhjo9WrLwKsXQR8bTPvdQITbrMs7RX1xpzhuQt_yY,5222
|
8
|
+
fabricatio/capabilities/propose.py,sha256=y3kge5g6bb8HYuV8e9h4MdqOMTlsfAIZpqE_cagWPTY,1593
|
9
|
+
fabricatio/capabilities/rag.py,sha256=OebdGps8LGniN_HkRAOuwZd1ZQsyQe3WrduNAmBSxLM,15773
|
10
|
+
fabricatio/capabilities/rating.py,sha256=R9otyZVE2E3kKxrOCTZMeesBCPbC-fSb7bXgZPMQzfU,14406
|
11
|
+
fabricatio/capabilities/review.py,sha256=XYzpSnFCT9HS2XytQT8HDgV4SjXehexoJgucZFMx6P8,11102
|
12
|
+
fabricatio/capabilities/task.py,sha256=nVsC8smZRM5kGnIDiQtgP9kiGkz5KB1S9NXhMvwY2CQ,4607
|
13
|
+
fabricatio/config.py,sha256=bpj8i0KT8HQ9ka2kX3lcILBWh4S5_PenCas9wu_Ueg0,16302
|
14
|
+
fabricatio/core.py,sha256=VQ_JKgUGIy2gZ8xsTBZCdr_IP7wC5aPg0_bsOmjQ588,6458
|
15
|
+
fabricatio/decorators.py,sha256=uzsP4tFKQNjDHBkofsjjoJA0IUAaYOtt6YVedoyOqlo,6551
|
16
|
+
fabricatio/fs/curd.py,sha256=N6l2MncjrFfnXBRtteRouXp5Rjy8EAKC_i29_G-zz98,4618
|
17
|
+
fabricatio/fs/readers.py,sha256=EZKN_AZdrp8DggJECP53QHw3uHeSDf-AwCAA_V7fNKU,1202
|
18
|
+
fabricatio/fs/__init__.py,sha256=PCf0s_9KDjVfNw7AfPoJzGt3jMq4gJOfbcT4pb0D0ZY,588
|
19
|
+
fabricatio/journal.py,sha256=stnEP88aUBA_GmU9gfTF2EZI8FS2OyMLGaMSTgK4QgA,476
|
20
|
+
fabricatio/models/action.py,sha256=25kaph3csV0VQtxVPQCyRAusgwp6E1R1g4KBs7H9T2c,6448
|
21
|
+
fabricatio/models/events.py,sha256=QvlnS8FEELg6KNabcJMeh2GV_y0ZBzKOPphcteKYWYU,4183
|
22
|
+
fabricatio/models/extra.py,sha256=O8ncZVsaNmlR5f8c_b2HJc-yVZQ2YhB6ddDbfT0Ysh4,7412
|
23
|
+
fabricatio/models/generic.py,sha256=IdPJMf3qxZFq8yqd6OuAYKfCM0wBlJkozgxvxQZVEEc,14025
|
24
|
+
fabricatio/models/kwargs_types.py,sha256=Q-dTKfh-_FddyVCI13FzLBlgVjYrRtzXpZoQdy-G9I4,4573
|
25
|
+
fabricatio/models/role.py,sha256=7S3HSjFLaSTZ5bzgTJLeZ3PpAQDEGBxPhou5Mp8ONpQ,1842
|
26
|
+
fabricatio/models/task.py,sha256=8NaR7ojQWyM740EDTqt9stwHKdrD6axCRpLKo0QzS-I,10492
|
27
|
+
fabricatio/models/tool.py,sha256=4b-v4WIC_LuLOKzzXL9bvKXr8vmGZ8O2uAFv5-1KRA0,7052
|
28
|
+
fabricatio/models/usages.py,sha256=hR4OU4sjQ2jKaH5_kkN83vG58n3kcKnt9osND0BYi0Q,28634
|
29
|
+
fabricatio/models/utils.py,sha256=1bCqeB6za7ecCAM3cU1raNWuN56732m45rXtlIlc3I4,5017
|
30
|
+
fabricatio/parser.py,sha256=SzyVzbKj5L_0IcI5Z5ILpopJxE-1hGhmomskTWdcc68,6194
|
31
|
+
fabricatio/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
32
|
+
fabricatio/toolboxes/arithmetic.py,sha256=WLqhY-Pikv11Y_0SGajwZx3WhsLNpHKf9drzAqOf_nY,1369
|
33
|
+
fabricatio/toolboxes/fs.py,sha256=l4L1CVxJmjw9Ld2XUpIlWfV0_Fu_2Og6d3E13I-S4aE,736
|
34
|
+
fabricatio/toolboxes/__init__.py,sha256=KBJi5OG_pExscdlM7Bnt_UF43j4I3Lv6G71kPVu4KQU,395
|
35
|
+
fabricatio/workflows/articles.py,sha256=RebdC_BzSXC-xsck5I9ccC_XIgfhtoeM8FZuhtVDn3U,580
|
36
|
+
fabricatio/workflows/rag.py,sha256=-YYp2tlE9Vtfgpg6ROpu6QVO8j8yVSPa6yDzlN3qVxs,520
|
37
|
+
fabricatio/_rust.pyi,sha256=xWLrjRw4mOxehy61IkaSXCAPoAT6XSZPg99RgRk12vw,3493
|
38
|
+
fabricatio/_rust_instances.py,sha256=2GwF8aVfYNemRI2feBzH1CZfBGno-XJJE5imJokGEYw,314
|
39
|
+
fabricatio/__init__.py,sha256=wTPzKLGztMr7orV-KizHRXJFhPGncvAHE7BPeSmBVDU,1926
|
40
|
+
fabricatio/_rust.cp39-win_amd64.pyd,sha256=i5KBa8RtgD5i6c2eHDoevqClBvzDbYmg22FFSJ2w4UA,1824768
|
41
|
+
fabricatio-0.2.6.dev3.data/scripts/tdown.exe,sha256=gEr6Y6FaEEAjGcO1mehImF99ygg07XumvGFOqa52Cvs,3398144
|
42
|
+
fabricatio-0.2.6.dev3.dist-info/RECORD,,
|
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2025 Whth Yotta
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|