PraisonAI 0.0.50__py3-none-any.whl → 0.0.53__py3-none-any.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.
Potentially problematic release.
This version of PraisonAI might be problematic. Click here for more details.
- praisonai/deploy.py +1 -1
- praisonai/ui/context.py +98 -69
- {praisonai-0.0.50.dist-info → praisonai-0.0.53.dist-info}/METADATA +58 -23
- {praisonai-0.0.50.dist-info → praisonai-0.0.53.dist-info}/RECORD +7 -7
- {praisonai-0.0.50.dist-info → praisonai-0.0.53.dist-info}/LICENSE +0 -0
- {praisonai-0.0.50.dist-info → praisonai-0.0.53.dist-info}/WHEEL +0 -0
- {praisonai-0.0.50.dist-info → praisonai-0.0.53.dist-info}/entry_points.txt +0 -0
praisonai/deploy.py
CHANGED
|
@@ -56,7 +56,7 @@ class CloudDeployer:
|
|
|
56
56
|
file.write("FROM python:3.11-slim\n")
|
|
57
57
|
file.write("WORKDIR /app\n")
|
|
58
58
|
file.write("COPY . .\n")
|
|
59
|
-
file.write("RUN pip install flask praisonai==0.0.
|
|
59
|
+
file.write("RUN pip install flask praisonai==0.0.53 gunicorn markdown\n")
|
|
60
60
|
file.write("EXPOSE 8080\n")
|
|
61
61
|
file.write('CMD ["gunicorn", "-b", "0.0.0.0:8080", "api:app"]\n')
|
|
62
62
|
|
praisonai/ui/context.py
CHANGED
|
@@ -2,7 +2,9 @@ import os
|
|
|
2
2
|
import fnmatch
|
|
3
3
|
import re
|
|
4
4
|
import yaml
|
|
5
|
+
from pathlib import Path
|
|
5
6
|
import logging
|
|
7
|
+
|
|
6
8
|
# Set up logging
|
|
7
9
|
logger = logging.getLogger(__name__)
|
|
8
10
|
log_level = os.getenv("LOGLEVEL", "INFO").upper()
|
|
@@ -20,69 +22,107 @@ logger.setLevel(log_level)
|
|
|
20
22
|
|
|
21
23
|
class ContextGatherer:
|
|
22
24
|
def __init__(self, directory='.', output_file='context.txt',
|
|
23
|
-
relevant_extensions=None, max_file_size=1_000_000, max_tokens=
|
|
25
|
+
relevant_extensions=None, max_file_size=1_000_000, max_tokens=900000):
|
|
24
26
|
self.directory = directory
|
|
25
27
|
self.output_file = output_file
|
|
26
|
-
self.relevant_extensions = relevant_extensions or [
|
|
28
|
+
self.relevant_extensions = relevant_extensions or [
|
|
29
|
+
'.py', '.js', '.ts', '.java', '.rb', '.php', '.pl', '.pm', '.c', '.h',
|
|
30
|
+
'.cpp', '.hpp', '.cs', '.vb', '.swift', '.kt', '.m', '.mm', '.go', '.rs',
|
|
31
|
+
'.hs', '.r', '.lua', '.sh', '.bat', '.clj', '.scala', '.erl', '.ex',
|
|
32
|
+
'.ml', '.fs', '.groovy', '.jsm', '.jsx', '.tsx', '.yaml'
|
|
33
|
+
]
|
|
27
34
|
self.max_file_size = max_file_size
|
|
28
35
|
self.max_tokens = int(os.getenv("PRAISONAI_MAX_TOKENS", max_tokens))
|
|
29
36
|
self.ignore_patterns = self.get_ignore_patterns()
|
|
30
37
|
|
|
31
38
|
def get_ignore_patterns(self):
|
|
32
|
-
"""
|
|
33
|
-
|
|
39
|
+
"""
|
|
40
|
+
Loads ignore patterns from various sources, prioritizing them in
|
|
41
|
+
the following order:
|
|
42
|
+
1. .praisonignore
|
|
43
|
+
2. settings.yaml (under code.ignore_files)
|
|
44
|
+
3. PRAISONAI_IGNORE_FILES environment variable
|
|
45
|
+
4. .gitignore
|
|
46
|
+
5. Default patterns
|
|
47
|
+
"""
|
|
48
|
+
ignore_patterns = []
|
|
49
|
+
|
|
50
|
+
def load_from_file(filepath):
|
|
51
|
+
if os.path.exists(filepath):
|
|
52
|
+
with open(filepath, 'r') as f:
|
|
53
|
+
ignore_patterns.extend(
|
|
54
|
+
line.strip() for line in f
|
|
55
|
+
if line.strip() and not line.startswith('#')
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
# 1. Load from .praisonignore
|
|
59
|
+
load_from_file(os.path.join(self.directory, '.praisonignore'))
|
|
60
|
+
|
|
61
|
+
# 2. Load from settings.yaml
|
|
34
62
|
settings_path = os.path.join(self.directory, 'settings.yaml')
|
|
35
63
|
if os.path.exists(settings_path):
|
|
36
64
|
with open(settings_path, 'r') as f:
|
|
37
65
|
settings = yaml.safe_load(f)
|
|
38
66
|
if 'code' in settings and 'ignore_files' in settings['code']:
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
# If settings.yaml doesn't exist, get from env variable
|
|
67
|
+
ignore_patterns.extend(settings['code']['ignore_files'])
|
|
68
|
+
|
|
69
|
+
# 3. Load from environment variable
|
|
43
70
|
ignore_files_env = os.getenv("PRAISONAI_IGNORE_FILES")
|
|
44
71
|
if ignore_files_env:
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
72
|
+
ignore_patterns.extend(ignore_files_env.split(","))
|
|
73
|
+
|
|
74
|
+
# 4. Load from .gitignore
|
|
75
|
+
load_from_file(os.path.join(self.directory, '.gitignore'))
|
|
76
|
+
|
|
77
|
+
# 5. Default patterns (only if no patterns loaded from above sources)
|
|
78
|
+
if not ignore_patterns:
|
|
79
|
+
ignore_patterns = [
|
|
80
|
+
".*", "*.pyc", "__pycache__", ".git", ".gitignore", ".vscode",
|
|
81
|
+
".idea", ".DS_Store", "*.lock", "*.pyc", ".env", "docs", "tests",
|
|
82
|
+
"test", "tmp", "temp", "*.txt", "*.md", "*.json", "*.csv", "*.tsv",
|
|
83
|
+
"public", "*.sql", "*.sqlite", "*.db", "*.db3", "*.sqlite3",
|
|
84
|
+
"*.log", "*.zip", "*.gz", "*.tar", "*.rar", "*.7z", "*.pdf",
|
|
85
|
+
"*.jpg", "*.jpeg", "*.png", "*.gif", "*.svg", "cookbooks",
|
|
86
|
+
"assets", "__pycache__", "dist", "build", "node_modules", "venv"
|
|
87
|
+
]
|
|
88
|
+
logger.debug(f"Using default ignore patterns: {ignore_patterns}")
|
|
89
|
+
|
|
90
|
+
# Modify patterns to match directories and add leading '*' if necessary
|
|
91
|
+
modified_ignore_patterns = [
|
|
92
|
+
'*' + pattern if not pattern.startswith('.') and not pattern.startswith('*') else pattern
|
|
93
|
+
for pattern in ignore_patterns
|
|
94
|
+
]
|
|
95
|
+
logger.debug(f"Final ignore patterns: {modified_ignore_patterns}")
|
|
96
|
+
return modified_ignore_patterns
|
|
62
97
|
|
|
63
98
|
def should_ignore(self, file_path):
|
|
64
|
-
"""
|
|
99
|
+
"""
|
|
100
|
+
Check if a file or directory should be ignored based on patterns.
|
|
101
|
+
Handles both file names and directory names for more comprehensive filtering.
|
|
102
|
+
"""
|
|
65
103
|
relative_path = os.path.relpath(file_path, self.directory)
|
|
66
104
|
if relative_path.startswith('.'):
|
|
67
105
|
return True
|
|
68
106
|
for pattern in self.ignore_patterns:
|
|
69
|
-
if fnmatch.fnmatch(relative_path, pattern)
|
|
107
|
+
if fnmatch.fnmatch(relative_path, pattern) or \
|
|
108
|
+
fnmatch.fnmatch(os.path.basename(file_path), pattern):
|
|
70
109
|
return True
|
|
71
110
|
return False
|
|
72
111
|
|
|
73
112
|
def is_relevant_file(self, file_path):
|
|
74
113
|
"""Determine if a file is relevant for the context."""
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
114
|
+
return os.path.isfile(file_path) and \
|
|
115
|
+
os.path.getsize(file_path) <= self.max_file_size and \
|
|
116
|
+
any(file_path.endswith(ext) for ext in self.relevant_extensions)
|
|
78
117
|
|
|
79
118
|
def gather_context(self):
|
|
80
|
-
"""Gather context from relevant files
|
|
119
|
+
"""Gather context from relevant files, respecting ignore patterns."""
|
|
81
120
|
context = []
|
|
82
|
-
total_files =
|
|
121
|
+
total_files = 0
|
|
83
122
|
processed_files = 0
|
|
84
123
|
|
|
85
124
|
for root, dirs, files in os.walk(self.directory):
|
|
125
|
+
total_files += len(files)
|
|
86
126
|
dirs[:] = [d for d in dirs if not self.should_ignore(os.path.join(root, d))]
|
|
87
127
|
for file in files:
|
|
88
128
|
file_path = os.path.join(root, file)
|
|
@@ -92,57 +132,54 @@ class ContextGatherer:
|
|
|
92
132
|
content = f.read()
|
|
93
133
|
context.append(f"File: {file_path}\n\n{content}\n\n{'='*50}\n")
|
|
94
134
|
except Exception as e:
|
|
95
|
-
|
|
135
|
+
logger.error(f"Error reading {file_path}: {e}")
|
|
96
136
|
processed_files += 1
|
|
97
137
|
print(f"\rProcessed {processed_files}/{total_files} files", end="", flush=True)
|
|
98
138
|
print() # New line after progress indicator
|
|
99
139
|
return '\n'.join(context)
|
|
100
140
|
|
|
101
141
|
def count_tokens(self, text):
|
|
102
|
-
"""Count
|
|
103
|
-
|
|
104
|
-
tokens = re.findall(r'\b\w+\b|[^\w\s]', text)
|
|
105
|
-
return len(tokens)
|
|
142
|
+
"""Count tokens using a simple whitespace-based tokenizer."""
|
|
143
|
+
return len(text.split())
|
|
106
144
|
|
|
107
145
|
def truncate_context(self, context):
|
|
108
|
-
"""Truncate context to
|
|
109
|
-
tokens =
|
|
146
|
+
"""Truncate context to stay within the token limit."""
|
|
147
|
+
tokens = context.split()
|
|
110
148
|
if len(tokens) > self.max_tokens:
|
|
111
|
-
|
|
112
|
-
|
|
149
|
+
truncated_context = ' '.join(tokens[:self.max_tokens])
|
|
150
|
+
logger.warning("Context truncated due to token limit.")
|
|
151
|
+
return truncated_context
|
|
113
152
|
return context
|
|
114
153
|
|
|
115
154
|
def save_context(self, context):
|
|
116
155
|
"""Save the gathered context to a file."""
|
|
117
156
|
with open(self.output_file, 'w', encoding='utf-8') as f:
|
|
118
157
|
f.write(context)
|
|
119
|
-
|
|
158
|
+
|
|
120
159
|
def get_context_tree(self):
|
|
121
|
-
"""Generate a formatted tree structure of
|
|
160
|
+
"""Generate a formatted tree structure of included files and folders."""
|
|
122
161
|
tree = []
|
|
123
|
-
start_dir =
|
|
124
|
-
|
|
162
|
+
start_dir = Path(self.directory)
|
|
163
|
+
|
|
125
164
|
def add_to_tree(path, prefix=''):
|
|
126
|
-
contents = sorted(
|
|
165
|
+
contents = sorted(path.iterdir())
|
|
127
166
|
pointers = [('└── ' if i == len(contents) - 1 else '├── ') for i in range(len(contents))]
|
|
128
|
-
for pointer,
|
|
129
|
-
|
|
130
|
-
if self.should_ignore(
|
|
167
|
+
for pointer, item in zip(pointers, contents):
|
|
168
|
+
# Use should_ignore for consistency
|
|
169
|
+
if self.should_ignore(item):
|
|
131
170
|
continue
|
|
132
|
-
|
|
133
|
-
rel_path =
|
|
134
|
-
tree.append(f"{prefix}{pointer}{
|
|
135
|
-
|
|
136
|
-
if
|
|
137
|
-
add_to_tree(
|
|
138
|
-
elif self.is_relevant_file(full_path):
|
|
139
|
-
continue # We've already added the file to the tree
|
|
171
|
+
|
|
172
|
+
rel_path = item.relative_to(start_dir)
|
|
173
|
+
tree.append(f"{prefix}{pointer}{rel_path}")
|
|
174
|
+
|
|
175
|
+
if item.is_dir():
|
|
176
|
+
add_to_tree(item, prefix + (' ' if pointer == '└── ' else '│ '))
|
|
140
177
|
|
|
141
178
|
add_to_tree(start_dir)
|
|
142
179
|
return '\n'.join(tree)
|
|
143
180
|
|
|
144
181
|
def run(self):
|
|
145
|
-
"""
|
|
182
|
+
"""Execute the context gathering, truncation, and reporting."""
|
|
146
183
|
context = self.gather_context()
|
|
147
184
|
context = self.truncate_context(context)
|
|
148
185
|
token_count = self.count_tokens(context)
|
|
@@ -150,23 +187,15 @@ class ContextGatherer:
|
|
|
150
187
|
print(f"Total number of tokens (estimated): {token_count}")
|
|
151
188
|
# self.save_context(context)
|
|
152
189
|
context_tree = self.get_context_tree()
|
|
153
|
-
|
|
154
|
-
print(context_tree)
|
|
155
|
-
|
|
190
|
+
logger.debug(f"Context tree:\n{context_tree}")
|
|
156
191
|
return context, token_count, context_tree
|
|
157
192
|
|
|
158
193
|
def main():
|
|
159
|
-
gatherer = ContextGatherer(
|
|
160
|
-
directory='.',
|
|
161
|
-
output_file='context.txt',
|
|
162
|
-
relevant_extensions=['.py'],
|
|
163
|
-
max_file_size=500_000, # 500KB
|
|
164
|
-
max_tokens=60000
|
|
165
|
-
)
|
|
194
|
+
gatherer = ContextGatherer()
|
|
166
195
|
context, token_count, context_tree = gatherer.run()
|
|
167
196
|
print(f"\nThe context contains approximately {token_count} tokens.")
|
|
168
197
|
print("First 500 characters of context:")
|
|
169
198
|
print(context[:500] + "...")
|
|
170
199
|
|
|
171
200
|
if __name__ == "__main__":
|
|
172
|
-
main()
|
|
201
|
+
main()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: PraisonAI
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.53
|
|
4
4
|
Summary: PraisonAI application combines AutoGen and CrewAI or similar frameworks into a low-code solution for building and managing multi-agent LLM systems, focusing on simplicity, customization, and efficient human-agent collaboration.
|
|
5
5
|
Author: Mervin Praison
|
|
6
6
|
Requires-Python: >=3.10,<3.13
|
|
@@ -24,6 +24,7 @@ Requires-Dist: chainlit (>=1.1.301,<2.0.0) ; extra == "ui" or extra == "chat" or
|
|
|
24
24
|
Requires-Dist: crewai (>=0.32.0)
|
|
25
25
|
Requires-Dist: flask (>=3.0.0) ; extra == "api"
|
|
26
26
|
Requires-Dist: gradio (>=4.26.0) ; extra == "gradio"
|
|
27
|
+
Requires-Dist: greenlet (>=3.0.3) ; extra == "code"
|
|
27
28
|
Requires-Dist: langchain-anthropic (>=0.1.13) ; extra == "anthropic"
|
|
28
29
|
Requires-Dist: langchain-cohere (>=0.1.4) ; extra == "cohere"
|
|
29
30
|
Requires-Dist: langchain-google-genai (>=1.0.4) ; extra == "google"
|
|
@@ -45,6 +46,13 @@ Description-Content-Type: text/markdown
|
|
|
45
46
|
<img alt="PraisonAI Logo" src="docs/images/praisonai-logo-black-large.png">
|
|
46
47
|
</picture>
|
|
47
48
|
</p>
|
|
49
|
+
|
|
50
|
+
<p align="center">
|
|
51
|
+
<a href="https://github.com/MervinPraison/PraisonAI"><img src="https://static.pepy.tech/badge/PraisonAI" alt="Total Downloads"></a>
|
|
52
|
+
<a href="https://github.com/MervinPraison/PraisonAI"><img src="https://img.shields.io/github/v/release/MervinPraison/PraisonAI" alt="Latest Stable Version"></a>
|
|
53
|
+
<a href="https://github.com/MervinPraison/PraisonAI"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License"></a>
|
|
54
|
+
</p>
|
|
55
|
+
|
|
48
56
|
<div align="center">
|
|
49
57
|
|
|
50
58
|
# Praison AI
|
|
@@ -53,12 +61,13 @@ Description-Content-Type: text/markdown
|
|
|
53
61
|
|
|
54
62
|
Praison AI, leveraging both AutoGen and CrewAI or any other agent framework, represents a low-code, centralised framework designed to simplify the creation and orchestration of multi-agent systems for various LLM applications, emphasizing ease of use, customization, and human-agent interaction.
|
|
55
63
|
|
|
56
|
-
|
|
|
57
|
-
|
|
|
58
|
-
| Basic
|
|
64
|
+
| | Cookbook | Open in Colab |
|
|
65
|
+
| ------------- | --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
66
|
+
| Basic | PraisonAI | <a target="_blank" href="https://colab.research.google.com/github/MervinPraison/PraisonAI/blob/main/cookbooks/praisonai-googlecolab.ipynb"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/></a> |
|
|
59
67
|
| Include Tools | PraisonAI Tools | <a target="_blank" href="https://colab.research.google.com/github/MervinPraison/PraisonAI/blob/main/cookbooks/praisonai-tools-googlecolab.ipynb"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/></a> |
|
|
60
68
|
|
|
61
69
|
## TL;DR
|
|
70
|
+
|
|
62
71
|
```bash
|
|
63
72
|
pip install praisonai
|
|
64
73
|
export OPENAI_API_KEY="Enter your API key"
|
|
@@ -66,6 +75,14 @@ praisonai --init create a movie script about dog in moon
|
|
|
66
75
|
praisonai
|
|
67
76
|
```
|
|
68
77
|
|
|
78
|
+
## Different User Interfaces:
|
|
79
|
+
|
|
80
|
+
| Interface | Description | URL |
|
|
81
|
+
|---|---|---|
|
|
82
|
+
| **UI** | Multi Agents such as CrewAI or AutoGen | [https://docs.praison.ai/ui/ui](https://docs.praison.ai/ui/ui) |
|
|
83
|
+
| **Chat** | Chat with 100+ LLMs, single AI Agent | [https://docs.praison.ai/ui/chat](https://docs.praison.ai/ui/chat) |
|
|
84
|
+
| **Code** | Chat with entire Codebase, single AI Agent | [https://docs.praison.ai/ui/code](https://docs.praison.ai/ui/code) |
|
|
85
|
+
|
|
69
86
|
## Table of Contents
|
|
70
87
|
|
|
71
88
|
- [Installation](#installation)
|
|
@@ -97,13 +114,14 @@ export OPENAI_API_KEY="Enter your API key"
|
|
|
97
114
|
Generate your OPENAI API KEY from here: https://platform.openai.com/api-keys
|
|
98
115
|
|
|
99
116
|
Note: You can use other providers such as Ollama, Mistral ... etc. Details are provided at the bottom.
|
|
100
|
-
|
|
117
|
+
|
|
101
118
|
```bash
|
|
102
119
|
praisonai --init create a movie script about dog in moon
|
|
103
120
|
```
|
|
121
|
+
|
|
104
122
|
This will automatically create agents.yaml file in the current directory.
|
|
105
123
|
|
|
106
|
-
### To
|
|
124
|
+
### To initialise with a specific agent framework (Optional):
|
|
107
125
|
|
|
108
126
|
```bash
|
|
109
127
|
praisonai --framework autogen --init create movie script about cat in mars
|
|
@@ -115,8 +133,8 @@ praisonai --framework autogen --init create movie script about cat in mars
|
|
|
115
133
|
praisonai
|
|
116
134
|
```
|
|
117
135
|
|
|
118
|
-
or
|
|
119
|
-
|
|
136
|
+
or
|
|
137
|
+
|
|
120
138
|
```bash
|
|
121
139
|
python -m praisonai
|
|
122
140
|
```
|
|
@@ -135,6 +153,14 @@ praisonai --auto create a movie script about Dog in Moon
|
|
|
135
153
|
|
|
136
154
|
## User Interface
|
|
137
155
|
|
|
156
|
+
## PraisonAI User Interfaces:
|
|
157
|
+
|
|
158
|
+
| Interface | Description | URL |
|
|
159
|
+
| --------- | ------------------------------------------ | --------------------------------------------------------------------- |
|
|
160
|
+
| **UI** | Multi Agents such as CrewAI or AutoGen | [https://docs.praisonai.com/ui/ui](https://docs.praison.ai/ui/ui) |
|
|
161
|
+
| **Chat** | Chat with 100+ LLMs, single AI Agent | [https://docs.praisonai.com/ui/chat](https://docs.praison.ai/ui/chat) |
|
|
162
|
+
| **Code** | Chat with entire Codebase, single AI Agent | [https://docs.praisonai.com/ui/code](https://docs.praison.ai/ui/code) |
|
|
163
|
+
|
|
138
164
|
```bash
|
|
139
165
|
pip install -U "praisonai[ui]"
|
|
140
166
|
export OPENAI_API_KEY="Enter your API key"
|
|
@@ -143,7 +169,7 @@ export CHAINLIT_AUTH_SECRET=xxxxxxxx
|
|
|
143
169
|
praisonai ui
|
|
144
170
|
```
|
|
145
171
|
|
|
146
|
-
or
|
|
172
|
+
or
|
|
147
173
|
|
|
148
174
|
```
|
|
149
175
|
python -m praisonai ui
|
|
@@ -151,7 +177,7 @@ python -m praisonai ui
|
|
|
151
177
|
|
|
152
178
|
## Praison AI Chat
|
|
153
179
|
|
|
154
|
-
|
|
180
|
+
- https://docs.praison.ai/chat/
|
|
155
181
|
|
|
156
182
|
```bash
|
|
157
183
|
pip install "praisonai[chat]"
|
|
@@ -161,10 +187,11 @@ praisonai chat
|
|
|
161
187
|
|
|
162
188
|
## Create Custom Tools
|
|
163
189
|
|
|
164
|
-
|
|
190
|
+
- https://docs.praison.ai/tools/custom/
|
|
165
191
|
|
|
166
192
|
### Step 1: Pre-requisite to Create a Custom Tool
|
|
167
|
-
|
|
193
|
+
|
|
194
|
+
`agents.yaml` file should be present in the current directory.
|
|
168
195
|
|
|
169
196
|
If it doesn't exist, create it by running the command `praisonai --init research about the latest AI News and prepare a detailed report`.
|
|
170
197
|
|
|
@@ -201,14 +228,15 @@ roles:
|
|
|
201
228
|
role: Research Analyst
|
|
202
229
|
tasks:
|
|
203
230
|
gather_data:
|
|
204
|
-
description:
|
|
231
|
+
description:
|
|
232
|
+
Conduct in-depth research on the latest AI News trends from reputable
|
|
205
233
|
sources.
|
|
206
234
|
expected_output: Comprehensive report on current AI News trends.
|
|
207
235
|
tools:
|
|
208
|
-
|
|
236
|
+
- InternetSearchTool
|
|
209
237
|
```
|
|
210
238
|
|
|
211
|
-
## Agents Playbook
|
|
239
|
+
## Agents Playbook
|
|
212
240
|
|
|
213
241
|
### Simple Playbook Example
|
|
214
242
|
|
|
@@ -217,23 +245,23 @@ framework: crewai
|
|
|
217
245
|
topic: Artificial Intelligence
|
|
218
246
|
roles:
|
|
219
247
|
screenwriter:
|
|
220
|
-
backstory:
|
|
248
|
+
backstory: "Skilled in crafting scripts with engaging dialogue about {topic}."
|
|
221
249
|
goal: Create scripts from concepts.
|
|
222
250
|
role: Screenwriter
|
|
223
251
|
tasks:
|
|
224
252
|
scriptwriting_task:
|
|
225
|
-
description:
|
|
226
|
-
expected_output:
|
|
253
|
+
description: "Develop scripts with compelling characters and dialogue about {topic}."
|
|
254
|
+
expected_output: "Complete script ready for production."
|
|
227
255
|
```
|
|
228
256
|
|
|
229
257
|
## Use 100+ Models
|
|
230
258
|
|
|
231
|
-
|
|
259
|
+
- https://docs.praison.ai/models/
|
|
232
260
|
|
|
233
261
|
## Include praisonai package in your project
|
|
234
262
|
|
|
235
|
-
|
|
236
|
-
|
|
263
|
+
- https://docs.praison.ai/developers/wrapper
|
|
264
|
+
- https://docs.praison.ai/developers/wrapper-tools/
|
|
237
265
|
|
|
238
266
|
## Option 1: Using RAW YAML
|
|
239
267
|
|
|
@@ -268,8 +296,7 @@ print(result)
|
|
|
268
296
|
|
|
269
297
|
## Option 2: Using separate agents.yaml file
|
|
270
298
|
|
|
271
|
-
|
|
272
|
-
Note: Please create agents.yaml file before hand.
|
|
299
|
+
Note: Please create agents.yaml file before hand.
|
|
273
300
|
|
|
274
301
|
```python
|
|
275
302
|
from praisonai import PraisonAI
|
|
@@ -285,16 +312,19 @@ if __name__ == "__main__":
|
|
|
285
312
|
## Commands to Install Dependencies:
|
|
286
313
|
|
|
287
314
|
1. **Install all dependencies, including dev dependencies:**
|
|
315
|
+
|
|
288
316
|
```sh
|
|
289
317
|
poetry install
|
|
290
318
|
```
|
|
291
319
|
|
|
292
320
|
2. **Install only documentation dependencies:**
|
|
321
|
+
|
|
293
322
|
```sh
|
|
294
323
|
poetry install --with docs
|
|
295
324
|
```
|
|
296
325
|
|
|
297
326
|
3. **Install only test dependencies:**
|
|
327
|
+
|
|
298
328
|
```sh
|
|
299
329
|
poetry install --with test
|
|
300
330
|
```
|
|
@@ -319,3 +349,8 @@ This configuration ensures that your development dependencies are correctly cate
|
|
|
319
349
|
## Star History
|
|
320
350
|
|
|
321
351
|
[](https://docs.praison.ai)
|
|
352
|
+
|
|
353
|
+
## License
|
|
354
|
+
|
|
355
|
+
Praison AI is an open-sourced software licensed under the **[MIT license](https://opensource.org/licenses/MIT)**.
|
|
356
|
+
|
|
@@ -4,7 +4,7 @@ praisonai/agents_generator.py,sha256=8d1WRbubvEkBrW1HZ7_xnGyqgJi0yxmXa3MgTIqef1c
|
|
|
4
4
|
praisonai/auto.py,sha256=9spTXqj47Hmmqv5QHRYE_RzSVHH_KoPbaZjskUj2UcE,7895
|
|
5
5
|
praisonai/chainlit_ui.py,sha256=bNR7s509lp0I9JlJNvwCZRUZosC64qdvlFCt8NmFamQ,12216
|
|
6
6
|
praisonai/cli.py,sha256=VaVEJlc8c_aE2SBY6xN7WIbHrqNcXGR2xrDzFAsD2B8,14504
|
|
7
|
-
praisonai/deploy.py,sha256=
|
|
7
|
+
praisonai/deploy.py,sha256=K27eI4Qhptov8NKD_El414VZtxxuVYmUXX-jvLck1kg,6028
|
|
8
8
|
praisonai/inbuilt_tools/__init__.py,sha256=mUKnbL6Gram9c9f2m8wJwEzURBLmPEOcHzwySBH89YA,74
|
|
9
9
|
praisonai/inbuilt_tools/autogen_tools.py,sha256=svYkM2N7DVFvbiwgoAS7U_MqTOD8rHf8VD3BaFUV5_Y,14907
|
|
10
10
|
praisonai/inc/__init__.py,sha256=sPDlYBBwdk0VlWzaaM_lG0_LD07lS2HRGvPdxXJFiYg,62
|
|
@@ -24,7 +24,7 @@ praisonai/public/thriller.svg,sha256=2dYY72EcgbEyTxS4QzjAm37Y4srtPWEW4vCMFki98ZI
|
|
|
24
24
|
praisonai/test.py,sha256=RZKq3UEFb6AnFFiHER3zBXfNmlteSLBlrTmOvnpnZLo,4092
|
|
25
25
|
praisonai/ui/chat.py,sha256=S3a5u0mI7RO5QFbKckz4z8b32gRTiX8kauSHvQBTMco,9238
|
|
26
26
|
praisonai/ui/code.py,sha256=KLJir8sfzNnZRm2mlAVprGBsZ6wId6yDLsSfN3A2Qdk,10012
|
|
27
|
-
praisonai/ui/context.py,sha256=
|
|
27
|
+
praisonai/ui/context.py,sha256=4Rn0BZg9IKMtkKk3s784dStvbMMogW8fMU4xb1gQ9dY,8484
|
|
28
28
|
praisonai/ui/public/fantasy.svg,sha256=4Gs3kIOux-pjGtw6ogI_rv5_viVJxnE5gRwGilsSg0o,1553
|
|
29
29
|
praisonai/ui/public/game.svg,sha256=y2QMaA01m8XzuDjTOBWzupOC3-TpnUl9ah89mIhviUw,2406
|
|
30
30
|
praisonai/ui/public/logo_dark.png,sha256=frHz1zkrnivGssJgk9iy1cabojkVgm8B4MllFwL_CnI,17050
|
|
@@ -33,8 +33,8 @@ praisonai/ui/public/movie.svg,sha256=aJ2EQ8vXZusVsF2SeuAVxP4RFJzQ14T26ejrGYdBgzk
|
|
|
33
33
|
praisonai/ui/public/thriller.svg,sha256=2dYY72EcgbEyTxS4QzjAm37Y4srtPWEW4vCMFki98ZI,3163
|
|
34
34
|
praisonai/ui/sql_alchemy.py,sha256=HsyeRq-G9qbQobHWpTJHHKQiT4FvYw_7iuv-2PNh0IU,27419
|
|
35
35
|
praisonai/version.py,sha256=ugyuFliEqtAwQmH4sTlc16YXKYbFWDmfyk87fErB8-8,21
|
|
36
|
-
praisonai-0.0.
|
|
37
|
-
praisonai-0.0.
|
|
38
|
-
praisonai-0.0.
|
|
39
|
-
praisonai-0.0.
|
|
40
|
-
praisonai-0.0.
|
|
36
|
+
praisonai-0.0.53.dist-info/LICENSE,sha256=kqvFysVlnFxYOu0HxCe2HlmZmJtdmNGOxWRRkT9TsWc,1035
|
|
37
|
+
praisonai-0.0.53.dist-info/METADATA,sha256=h20mwjB5fkGUjRvHQB_r66zt_tpKH-1uPLntxj7qFCk,11707
|
|
38
|
+
praisonai-0.0.53.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
39
|
+
praisonai-0.0.53.dist-info/entry_points.txt,sha256=Qg41eW3A1-dvdV5tF7LqChfYof8Rihk2rN1fiEE3vnk,53
|
|
40
|
+
praisonai-0.0.53.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|