Compare commits

...
2 Commits
Author SHA1 Message Date
Mervin Praison b869bbc346 Merge pull request #357 from MervinPraison/develop
Enhance CLI with Direct Prompt Handling and Framework Flexibility
2025-02-01 00:01:27 +00:00
MervinPraison 5492be4412 Enhance CLI with Direct Prompt Handling and Framework Flexibility
- Added direct prompt handling in CLI for immediate task execution
- Implemented fallback mechanism to support multiple AI agent frameworks (PraisonAI, CrewAI, AutoGen)
- Updated CLI parsing to handle various input scenarios
- Simplified agent initialization for direct prompts
- Improved error messaging for framework installation
- Bumped package version to 2.0.62
2025-02-01 00:01:12 +00:00
8 changed files with 83 additions and 1896 deletions

No files matched your search

+8 -1885
View File
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -1,6 +1,6 @@
FROM python:3.11-slim
WORKDIR /app
COPY . .
RUN pip install flask praisonai==2.0.61 gunicorn markdown
RUN pip install flask praisonai==2.0.62 gunicorn markdown
EXPOSE 8080
CMD ["gunicorn", "-b", "0.0.0.0:8080", "api:app"]
+1 -1
View File
@@ -110,7 +110,7 @@ Loads environment variables from .env file or system and sets them.</p>
file.write(&#34;FROM python:3.11-slim\n&#34;)
file.write(&#34;WORKDIR /app\n&#34;)
file.write(&#34;COPY . .\n&#34;)
file.write(&#34;RUN pip install flask praisonai==2.0.61 gunicorn markdown\n&#34;)
file.write(&#34;RUN pip install flask praisonai==2.0.62 gunicorn markdown\n&#34;)
file.write(&#34;EXPOSE 8080\n&#34;)
file.write(&#39;CMD [&#34;gunicorn&#34;, &#34;-b&#34;, &#34;0.0.0.0:8080&#34;, &#34;api:app&#34;]\n&#39;)
+1 -1
View File
@@ -3,7 +3,7 @@ class Praisonai < Formula
desc "AI tools for various AI applications"
homepage "https://github.com/MervinPraison/PraisonAI"
url "https://github.com/MervinPraison/PraisonAI/archive/refs/tags/2.0.61.tar.gz"
url "https://github.com/MervinPraison/PraisonAI/archive/refs/tags/2.0.62.tar.gz"
sha256 "1828fb9227d10f991522c3f24f061943a254b667196b40b1a3e4a54a8d30ce32" # Replace with actual SHA256 checksum
license "MIT"
+68 -4
View File
@@ -148,8 +148,16 @@ class PraisonAI:
if args.command:
if args.command.startswith("tests.test"): # Argument used for testing purposes
print("test")
return "test"
else:
self.agent_file = args.command
elif hasattr(args, 'direct_prompt') and args.direct_prompt:
result = self.handle_direct_prompt(args.direct_prompt)
print(result)
return result
else:
# Default to agents.yaml if no command provided
self.agent_file = "agents.yaml"
if args.deploy:
from .deploy import CloudDeployer
@@ -285,12 +293,15 @@ class PraisonAI:
"""
Parse the command-line arguments for the PraisonAI CLI.
"""
# Define special commands
special_commands = ['chat', 'code', 'call', 'realtime', 'train', 'ui']
parser = argparse.ArgumentParser(prog="praisonai", description="praisonAI command-line interface")
parser.add_argument("--framework", choices=["crewai", "autogen", "praisonai"], help="Specify the framework")
parser.add_argument("--ui", choices=["chainlit", "gradio"], help="Specify the UI framework (gradio or chainlit).")
parser.add_argument("--auto", nargs=argparse.REMAINDER, help="Enable auto mode and pass arguments for it")
parser.add_argument("--init", nargs=argparse.REMAINDER, help="Initialize agents with optional topic")
parser.add_argument("command", nargs="?", help="Command to run")
parser.add_argument("command", nargs="?", help="Command to run or direct prompt")
parser.add_argument("--deploy", action="store_true", help="Deploy the application")
parser.add_argument("--model", type=str, help="Model name")
parser.add_argument("--hf", type=str, help="Hugging Face model name")
@@ -301,6 +312,7 @@ class PraisonAI:
parser.add_argument("--public", action="store_true", help="Use ngrok to expose the server publicly (only with --call)")
args, unknown_args = parser.parse_known_args()
# Handle special cases first
if unknown_args and unknown_args[0] == '-b' and unknown_args[1] == 'api:app':
args.command = 'agents.yaml'
if args.command == 'api:app' or args.command == '/app/api:app':
@@ -331,9 +343,7 @@ class PraisonAI:
call_module.main(call_args)
sys.exit(0)
# Handle special commands first
special_commands = ['chat', 'code', 'call', 'realtime', 'train', 'ui']
# Handle special commands
if args.command in special_commands:
if args.command == 'chat':
if not CHAINLIT_AVAILABLE:
@@ -402,8 +412,62 @@ class PraisonAI:
print("pip install praisonaiagents # For PraisonAIAgents\n")
sys.exit(1)
# Handle direct prompt if command is not a special command or file
if args.command and not args.command.endswith('.yaml') and args.command not in special_commands:
args.direct_prompt = args.command
args.command = None
return args
def handle_direct_prompt(self, prompt):
"""
Handle direct prompt by creating a single agent and running it.
"""
if PRAISONAI_AVAILABLE:
agent = PraisonAgent(
name="DirectAgent",
role="Assistant",
goal="Complete the given task",
backstory="You are a helpful AI assistant"
)
agent.start(prompt)
return ""
elif CREWAI_AVAILABLE:
agent = Agent(
name="DirectAgent",
role="Assistant",
goal="Complete the given task",
backstory="You are a helpful AI assistant"
)
task = Task(
description=prompt,
agent=agent
)
crew = Crew(
agents=[agent],
tasks=[task]
)
return crew.kickoff()
elif AUTOGEN_AVAILABLE:
config_list = self.config_list
assistant = autogen.AssistantAgent(
name="DirectAgent",
llm_config={"config_list": config_list}
)
user_proxy = autogen.UserProxyAgent(
name="UserProxy",
code_execution_config={"work_dir": "coding"}
)
user_proxy.initiate_chat(assistant, message=prompt)
return "Task completed"
else:
print("[red]ERROR: No framework is installed. Please install at least one framework:[/red]")
print("\npip install \"praisonai\\[crewai]\" # For CrewAI")
print("pip install \"praisonai\\[autogen]\" # For AutoGen")
print("pip install \"praisonai\\[crewai,autogen]\" # For both frameworks\n")
print("pip install praisonaiagents # For PraisonAIAgents\n")
sys.exit(1)
def create_chainlit_chat_interface(self):
"""
Create a Chainlit interface for the chat application.
+1 -1
View File
@@ -56,7 +56,7 @@ class CloudDeployer:
file.write("FROM python:3.11-slim\n")
file.write("WORKDIR /app\n")
file.write("COPY . .\n")
file.write("RUN pip install flask praisonai==2.0.61 gunicorn markdown\n")
file.write("RUN pip install flask praisonai==2.0.62 gunicorn markdown\n")
file.write("EXPOSE 8080\n")
file.write('CMD ["gunicorn", "-b", "0.0.0.0:8080", "api:app"]\n')
+2 -2
View File
@@ -1,6 +1,6 @@
[project]
name = "PraisonAI"
version = "2.0.61"
version = "2.0.62"
description = "PraisonAI is an AI Agents Framework with Self Reflection. PraisonAI application combines PraisonAI Agents, AutoGen, and CrewAI into a low-code solution for building and managing multi-agent LLM systems, focusing on simplicity, customisation, and efficient human-agent collaboration."
readme = "README.md"
license = ""
@@ -84,7 +84,7 @@ autogen = ["pyautogen>=0.2.19", "praisonai-tools>=0.0.7", "crewai"]
[tool.poetry]
name = "PraisonAI"
version = "2.0.61"
version = "2.0.62"
description = "PraisonAI is an AI Agents Framework with Self Reflection. PraisonAI application combines PraisonAI Agents, AutoGen, and CrewAI into a low-code solution for building and managing multi-agent LLM systems, focusing on simplicity, customisation, and efficient human–agent collaboration."
authors = ["Mervin Praison"]
license = ""
Generated
+1 -1
View File
@@ -3060,7 +3060,7 @@ wheels = [
[[package]]
name = "praisonai"
version = "2.0.61"
version = "2.0.62"
source = { editable = "." }
dependencies = [
{ name = "instructor" },