From 07ff41d6f20d08f3793eaf654c58d1776751f5ab Mon Sep 17 00:00:00 2001 From: MervinPraison Date: Fri, 27 Dec 2024 12:52:00 +0000 Subject: [PATCH] Documentation update --- docs/{api.md => api.mdx} | 5 +- docs/{auto.md => auto.mdx} | 17 +- docs/{call.md => call.mdx} | 5 +- docs/{contributing.md => contributing.mdx} | 5 +- docs/{deploy.md => deploy.mdx} | 5 +- ...agents-playbook.md => agents-playbook.mdx} | 5 + ...lecolab-tools.md => googlecolab-tools.mdx} | 7 +- .../{googlecolab.md => googlecolab.mdx} | 7 +- docs/developers/test.md | 5 - docs/developers/test.mdx | 10 + .../{wrapper-tools.md => wrapper-tools.mdx} | 5 + docs/developers/{wrapper.md => wrapper.mdx} | 5 + docs/{firecrawl.md => firecrawl.mdx} | 5 + docs/framework/{autogen.md => autogen.mdx} | 5 + docs/framework/{crewai.md => crewai.mdx} | 5 + docs/framework/praisonaiagents.mdx | 206 ++++++++++++++++++ docs/{home.md => home.mdx} | 5 + docs/images/praisonai-logo-large-dark.png | Bin 0 -> 24357 bytes docs/images/praisonai-logo-large-light.png | Bin 0 -> 21286 bytes docs/images/praisonai-logo-light.png | Bin 0 -> 8666 bytes docs/{index.md => index.mdx} | 63 ++++-- docs/{initialise.md => initialise.mdx} | 5 +- docs/{installation.md => installation.mdx} | 11 +- docs/{introduction.md => introduction.mdx} | 4 +- mint.json => docs/mint.json | 7 +- docs/{models.md => models.mdx} | 5 +- docs/models/{anthropic.md => anthropic.mdx} | 5 + docs/models/{cohere.md => cohere.mdx} | 5 + docs/models/{google.md => google.mdx} | 5 + docs/models/{groq.md => groq.mdx} | 5 + docs/models/{mistral.md => mistral.mdx} | 5 + docs/models/{ollama.md => ollama.mdx} | 5 + docs/models/{openai.md => openai.mdx} | 5 + docs/models/{openrouter.md => openrouter.mdx} | 5 + docs/models/{other.md => other.mdx} | 5 +- docs/monitoring/{agentops.md => agentops.mdx} | 5 + docs/{run.md => run.mdx} | 5 +- docs/{tldr.md => tldr.mdx} | 23 +- docs/{tools.md => tools.mdx} | 5 +- docs/tools/{composio.md => composio.mdx} | 5 + docs/tools/{crawl4ai.md => crawl4ai.mdx} | 5 + docs/tools/{custom.md => custom.mdx} | 5 + docs/tools/{duckduckgo.md => duckduckgo.mdx} | 5 + .../{googlecalendar.md => googlecalendar.mdx} | 5 + docs/tools/gpt.md | 3 - docs/tools/gpt.mdx | 8 + docs/tools/{langchain.md => langchain.mdx} | 5 + docs/tools/{mem0.md => mem0.mdx} | 5 + docs/tools/{reddit.md => reddit.mdx} | 5 + docs/tools/{tavily.md => tavily.mdx} | 5 + docs/tools/{wikipedia.md => wikipedia.mdx} | 5 + docs/tools/{you.com.md => you.com.mdx} | 5 + docs/tools/{youtube.md => youtube.mdx} | 5 + docs/{train.md => train.mdx} | 5 +- docs/ui/{chat.md => chat.mdx} | 5 +- docs/ui/{code.md => code.mdx} | 5 +- docs/ui/{realtime.md => realtime.mdx} | 5 +- docs/ui/{ui.md => ui.mdx} | 12 +- 58 files changed, 532 insertions(+), 56 deletions(-) rename docs/{api.md => api.mdx} (91%) rename docs/{auto.md => auto.mdx} (63%) rename docs/{call.md => call.mdx} (94%) rename docs/{contributing.md => contributing.mdx} (72%) rename docs/{deploy.md => deploy.mdx} (89%) rename docs/developers/{agents-playbook.md => agents-playbook.mdx} (92%) rename docs/developers/{googlecolab-tools.md => googlecolab-tools.mdx} (98%) rename docs/developers/{googlecolab.md => googlecolab.mdx} (98%) delete mode 100644 docs/developers/test.md create mode 100644 docs/developers/test.mdx rename docs/developers/{wrapper-tools.md => wrapper-tools.mdx} (88%) rename docs/developers/{wrapper.md => wrapper.mdx} (90%) rename docs/{firecrawl.md => firecrawl.mdx} (89%) rename docs/framework/{autogen.md => autogen.mdx} (79%) rename docs/framework/{crewai.md => crewai.mdx} (79%) create mode 100644 docs/framework/praisonaiagents.mdx rename docs/{home.md => home.mdx} (96%) create mode 100644 docs/images/praisonai-logo-large-dark.png create mode 100644 docs/images/praisonai-logo-large-light.png create mode 100644 docs/images/praisonai-logo-light.png rename docs/{index.md => index.mdx} (76%) rename docs/{initialise.md => initialise.mdx} (72%) rename docs/{installation.md => installation.mdx} (78%) rename docs/{introduction.md => introduction.mdx} (92%) rename mint.json => docs/mint.json (91%) rename docs/{models.md => models.mdx} (92%) rename docs/models/{anthropic.md => anthropic.mdx} (86%) rename docs/models/{cohere.md => cohere.mdx} (86%) rename docs/models/{google.md => google.mdx} (86%) rename docs/models/{groq.md => groq.mdx} (85%) rename docs/models/{mistral.md => mistral.mdx} (87%) rename docs/models/{ollama.md => ollama.mdx} (84%) rename docs/models/{openai.md => openai.mdx} (93%) rename docs/models/{openrouter.md => openrouter.mdx} (84%) rename docs/models/{other.md => other.mdx} (79%) rename docs/monitoring/{agentops.md => agentops.mdx} (54%) rename docs/{run.md => run.mdx} (63%) rename docs/{tldr.md => tldr.mdx} (63%) rename docs/{tools.md => tools.mdx} (89%) rename docs/tools/{composio.md => composio.mdx} (87%) rename docs/tools/{crawl4ai.md => crawl4ai.mdx} (92%) rename docs/tools/{custom.md => custom.mdx} (95%) rename docs/tools/{duckduckgo.md => duckduckgo.mdx} (78%) rename docs/tools/{googlecalendar.md => googlecalendar.mdx} (97%) delete mode 100644 docs/tools/gpt.md create mode 100644 docs/tools/gpt.mdx rename docs/tools/{langchain.md => langchain.mdx} (91%) rename docs/tools/{mem0.md => mem0.mdx} (93%) rename docs/tools/{reddit.md => reddit.mdx} (81%) rename docs/tools/{tavily.md => tavily.mdx} (73%) rename docs/tools/{wikipedia.md => wikipedia.mdx} (87%) rename docs/tools/{you.com.md => you.com.mdx} (85%) rename docs/tools/{youtube.md => youtube.mdx} (80%) rename docs/{train.md => train.mdx} (91%) rename docs/ui/{chat.md => chat.mdx} (96%) rename docs/ui/{code.md => code.mdx} (96%) rename docs/ui/{realtime.md => realtime.mdx} (90%) rename docs/ui/{ui.md => ui.mdx} (91%) diff --git a/docs/api.md b/docs/api.mdx similarity index 91% rename from docs/api.md rename to docs/api.mdx index 311cf544..d2b636ad 100644 --- a/docs/api.md +++ b/docs/api.mdx @@ -1,4 +1,7 @@ -# API Reference +--- +title: "API Reference" +description: "Complete API reference for PraisonAI, including core modules, installation options, and framework-specific features" +--- ## Core Modules diff --git a/docs/auto.md b/docs/auto.mdx similarity index 63% rename from docs/auto.md rename to docs/auto.mdx index 3c1edf94..2b8df464 100644 --- a/docs/auto.md +++ b/docs/auto.mdx @@ -1,12 +1,18 @@ -# Auto Generation Mode +--- +title: "Auto Generation Mode" +description: "Guide to PraisonAI's automatic agent generation feature, supporting both CrewAI and AutoGen frameworks for automated task execution" +--- -PraisonAI supports automatic agent generation with both CrewAI and AutoGen frameworks. +PraisonAI supports automatic agent generation with PraisonAI Agents, CrewAI and AutoGen frameworks. ## Installation Choose your preferred framework: ```bash +# For PraisonAI Agents +pip install praisonai + # For CrewAI pip install "praisonai[crewai]" @@ -19,11 +25,16 @@ pip install "praisonai[crewai,autogen]" ## Usage -### With CrewAI (Default) +### With PraisonAI Agents ```bash praisonai --auto "create a movie script about Dog in Moon" ``` +### With CrewAI +```bash +praisonai --framework crewai --auto "create a movie script about Dog in Moon" +``` + ### With AutoGen ```bash praisonai --framework autogen --auto "create a movie script about Dog in Moon" diff --git a/docs/call.md b/docs/call.mdx similarity index 94% rename from docs/call.md rename to docs/call.mdx index 77e084ee..26415129 100644 --- a/docs/call.md +++ b/docs/call.mdx @@ -1,4 +1,7 @@ -# PraisonAI Call +--- +title: "PraisonAI Call" +description: "Guide to PraisonAI's voice-based interaction feature enabling AI customer service through phone calls, including setup and tool integration" +--- diff --git a/docs/contributing.md b/docs/contributing.mdx similarity index 72% rename from docs/contributing.md rename to docs/contributing.mdx index d1f42857..a7503cc1 100644 --- a/docs/contributing.md +++ b/docs/contributing.mdx @@ -1,4 +1,7 @@ -# Contributing +--- +title: "Contributing" +description: "Guide for contributing to PraisonAI through GitHub, including forking, cloning, and submitting pull requests" +--- - Fork on GitHub: Use the "Fork" button on the repository page. - Clone your fork: `git clone https://github.com/yourusername/praisonAI.git` diff --git a/docs/deploy.md b/docs/deploy.mdx similarity index 89% rename from docs/deploy.md rename to docs/deploy.mdx index 091d02f0..f4c1f52c 100644 --- a/docs/deploy.md +++ b/docs/deploy.mdx @@ -1,4 +1,7 @@ -# Deploy +--- +title: "Deploy" +description: "Guide for deploying PraisonAI to cloud platforms, with detailed instructions for Google Cloud deployment" +--- ## Google Cloud diff --git a/docs/developers/agents-playbook.md b/docs/developers/agents-playbook.mdx similarity index 92% rename from docs/developers/agents-playbook.md rename to docs/developers/agents-playbook.mdx index 9f8611e3..116f42d4 100644 --- a/docs/developers/agents-playbook.md +++ b/docs/developers/agents-playbook.mdx @@ -1,3 +1,8 @@ +--- +title: "Agents Playbook" +description: "Examples and templates for creating PraisonAI agent playbooks, from simple to detailed configurations with multiple roles and tasks" +--- + # Agents Playbook ## Simple Playbook Example diff --git a/docs/developers/googlecolab-tools.md b/docs/developers/googlecolab-tools.mdx similarity index 98% rename from docs/developers/googlecolab-tools.md rename to docs/developers/googlecolab-tools.mdx index 19b9146f..7a2192f8 100644 --- a/docs/developers/googlecolab-tools.md +++ b/docs/developers/googlecolab-tools.mdx @@ -1,4 +1,9 @@ --- +title: "Google Colab Tools" +description: "Guide for implementing and using custom tools in PraisonAI with Google Colab, including examples of internet search and data processing tools" +--- + +``` jupyter: accelerator: GPU colab: @@ -10,7 +15,7 @@ jupyter: name: python nbformat: 4 nbformat_minor: 0 ---- +``` ``` python !pip install -Uq praisonai duckduckgo_search diff --git a/docs/developers/googlecolab.md b/docs/developers/googlecolab.mdx similarity index 98% rename from docs/developers/googlecolab.md rename to docs/developers/googlecolab.mdx index 0e1c886c..d0626572 100644 --- a/docs/developers/googlecolab.md +++ b/docs/developers/googlecolab.mdx @@ -1,4 +1,9 @@ --- +title: "Google Colab Integration" +description: "Guide for using PraisonAI in Google Colab environments, with example code and configurations for agent-based tasks" +--- + +``` jupyter: accelerator: GPU colab: @@ -10,7 +15,7 @@ jupyter: name: python nbformat: 4 nbformat_minor: 0 ---- +``` ``` python diff --git a/docs/developers/test.md b/docs/developers/test.md deleted file mode 100644 index 0e07cddf..00000000 --- a/docs/developers/test.md +++ /dev/null @@ -1,5 +0,0 @@ -# Test - -```bash -python -m unittest tests.test -``` \ No newline at end of file diff --git a/docs/developers/test.mdx b/docs/developers/test.mdx new file mode 100644 index 00000000..833b2e96 --- /dev/null +++ b/docs/developers/test.mdx @@ -0,0 +1,10 @@ +--- +title: "Test" +description: "Instructions for running and writing tests for PraisonAI components, including unit tests and test automation" +--- + +# Test + +```bash +python -m unittest tests.test +``` \ No newline at end of file diff --git a/docs/developers/wrapper-tools.md b/docs/developers/wrapper-tools.mdx similarity index 88% rename from docs/developers/wrapper-tools.md rename to docs/developers/wrapper-tools.mdx index 98aacd0c..279fa49f 100644 --- a/docs/developers/wrapper-tools.md +++ b/docs/developers/wrapper-tools.mdx @@ -1,3 +1,8 @@ +--- +title: "Integrate with Tools" +description: "Guide for integrating external tools and APIs with PraisonAI, including examples of custom tool creation and implementation" +--- + # Integrate with Tools ```python diff --git a/docs/developers/wrapper.md b/docs/developers/wrapper.mdx similarity index 90% rename from docs/developers/wrapper.md rename to docs/developers/wrapper.mdx index a629d9bf..1e0d3001 100644 --- a/docs/developers/wrapper.md +++ b/docs/developers/wrapper.mdx @@ -1,3 +1,8 @@ +--- +title: "PraisonAI Package Integration" +description: "Guide for integrating the PraisonAI package into your Python projects, including YAML configuration and different execution modes" +--- + # Include praisonai package in your project ## Option 1: Using RAW YAML diff --git a/docs/firecrawl.md b/docs/firecrawl.mdx similarity index 89% rename from docs/firecrawl.md rename to docs/firecrawl.mdx index ca0eb6f0..0bc26796 100644 --- a/docs/firecrawl.md +++ b/docs/firecrawl.mdx @@ -1,3 +1,8 @@ +--- +title: "Firecrawl PraisonAI Integration" +description: "Guide for integrating Firecrawl web scraping capabilities with PraisonAI, including custom tool implementation for web page content extraction" +--- + # Firecrawl PraisonAI Integration diff --git a/docs/framework/autogen.md b/docs/framework/autogen.mdx similarity index 79% rename from docs/framework/autogen.md rename to docs/framework/autogen.mdx index 6340523b..3ade691e 100644 --- a/docs/framework/autogen.md +++ b/docs/framework/autogen.mdx @@ -1,3 +1,8 @@ +--- +title: "AutoGen with PraisonAI" +description: "Guide for using AutoGen framework with PraisonAI, including installation, setup, and multi-agent conversation capabilities" +--- + # AutoGen with PraisonAI Low-code solution to run AutoGen with integrated tools and features. diff --git a/docs/framework/crewai.md b/docs/framework/crewai.mdx similarity index 79% rename from docs/framework/crewai.md rename to docs/framework/crewai.mdx index 60609f4b..9694f93f 100644 --- a/docs/framework/crewai.md +++ b/docs/framework/crewai.mdx @@ -1,3 +1,8 @@ +--- +title: "CrewAI with PraisonAI" +description: "Guide for using CrewAI framework with PraisonAI, including installation, setup, and execution of agent-based tasks" +--- + # CrewAI with PraisonAI Low-code solution to run CrewAI with integrated tools and features. diff --git a/docs/framework/praisonaiagents.mdx b/docs/framework/praisonaiagents.mdx new file mode 100644 index 00000000..eae0fdbd --- /dev/null +++ b/docs/framework/praisonaiagents.mdx @@ -0,0 +1,206 @@ +--- +title: "PraisonAI Agents" +description: "Guide for using PraisonAI Agents framework, a lightweight package for creating and managing AI agents with advanced capabilities" +--- + +A lightweight package dedicated to creating and managing AI agents with advanced capabilities. + +## Installation + +```bash +pip install praisonaiagents +export OPENAI_API_KEY=xxxxxxxxxxxxxxxxxxxxxx +``` + +## Quick Start + +Create `app.py` and add the following code: + +```python +from praisonaiagents import Agent, Task, PraisonAIAgents + +# Create agents +researcher = Agent( + name="Researcher", + role="Senior Research Analyst", + goal="Uncover cutting-edge developments in AI and data science", + backstory="""You are an expert at a technology research group, + skilled in identifying trends and analyzing complex data.""", + verbose=True, + llm="gpt-4o", + markdown=True +) + +writer = Agent( + name="Writer", + role="Tech Content Strategist", + goal="Craft compelling content on tech advancements", + backstory="""You are a content strategist known for + making complex tech topics interesting and easy to understand.""", + llm="gpt-4o", + markdown=True +) + +# Create tasks +research_task = Task( + description="Research the latest developments in AI and data science", + expected_output="A comprehensive report on recent AI trends and breakthroughs", + agent=researcher +) + +writing_task = Task( + description="Create an engaging blog post about the research findings", + expected_output="A well-structured blog post explaining AI developments", + agent=writer, + context=[research_task] # This task depends on research_task output +) + +# Create and run the agents +agents = PraisonAIAgents( + agents=[researcher, writer], + tasks=[research_task, writing_task], + verbose=True +) + +result = agents.start() +print(result) +``` + +## Agent Configuration + +### Core Attributes +- `name`: Agent's identifier +- `role`: Agent's function/expertise +- `goal`: Individual objective +- `backstory`: Context and personality +- `llm`: Language model (default: OpenAI's GPT-4) +- `verbose`: Enable detailed logs (default: False) +- `markdown`: Enable markdown formatting (default: True) + +### Optional Attributes +- `tools`: List of available tools +- `memory`: Enable conversation history (default: True) +- `max_iter`: Maximum iterations (default: 20) +- `max_rpm`: Rate limit for API calls +- `allow_delegation`: Enable task delegation (default: False) + +## Task Configuration + +### Core Attributes +- `description`: Task details +- `expected_output`: Desired outcome +- `agent`: Assigned agent + +### Optional Attributes +- `context`: Dependencies on other tasks +- `tools`: Task-specific tools +- `async_execution`: Run asynchronously (default: False) +- `output_file`: Save output to file +- `callback`: Post-task function + +## Advanced Features + +### Tool Integration +```python +from duckduckgo_search import DDGS + +def search_tool(query: str) -> list: + """ + Perform a web search using DuckDuckGo and return relevant results. + + Args: + query (str): The search query string to look up information about. + + Returns: + list: A list of dictionaries containing search results with the following keys: + - title (str): The title of the search result + - url (str): The URL of the search result + - snippet (str): A brief excerpt or description of the search result + """ + results = [] + ddgs = DDGS() + for result in ddgs.text(keywords=query, max_results=10): + results.append({ + "title": result.get("title", ""), + "url": result.get("href", ""), + "snippet": result.get("body", ""), + }) + return results + +agent = Agent( + name="Researcher", + tools=[search_tool] +) +``` + +### Custom Callbacks +```python +def task_completed(output): + print(f"Task completed: {output.description}") + print(f"Output: {output.raw}") + +task = Task( + description="Analysis task", + callback=task_completed +) +``` + +## Error Handling + +The framework includes built-in error handling for: +- API rate limits +- Token limits +- Task timeouts +- Tool execution failures + +## Best Practices + +1. **Agent Design** + - Give clear, specific roles and goals + - Provide detailed backstories + - Use appropriate tools for tasks + +2. **Task Management** + - Break complex tasks into subtasks + - Set clear dependencies + - Use async execution for independent tasks + +3. **Resource Optimization** + - Enable caching when appropriate + - Set reasonable max_iter limits + - Use rate limiting for API calls + +4. **Error Handling** + - Implement task callbacks + - Set appropriate timeouts + - Monitor execution logs + +### Parallel Execution (Upcoming) +```python +task1 = Task( + description="Research task 1", + async_execution=True +) + +task2 = Task( + description="Research task 2", + async_execution=True +) + +final_task = Task( + description="Compile results", + context=[task1, task2] # Waits for both tasks +) +``` + +### Memory Management (Upcoming) +```python +agent = Agent( + name="Analyst", + memory=True, # Enable memory + memory_config={ + "type": "short_term", + "max_tokens": 4000 + } +) +``` diff --git a/docs/home.md b/docs/home.mdx similarity index 96% rename from docs/home.md rename to docs/home.mdx index e9669b8a..91e7c67c 100644 --- a/docs/home.md +++ b/docs/home.mdx @@ -1,3 +1,8 @@ +--- +title: "Praison AI" +description: "Home page for PraisonAI documentation, featuring installation options, user interfaces, and quick start guides for multi-agent LLM systems" +--- + # Home diff --git a/docs/images/praisonai-logo-large-dark.png b/docs/images/praisonai-logo-large-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..5fda586b90c192f0604809f2761a4ade1161c8e8 GIT binary patch literal 24357 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 HY##p)jUq4a literal 0 HcmV?d00001 diff --git a/docs/images/praisonai-logo-large-light.png b/docs/images/praisonai-logo-large-light.png new file mode 100644 index 0000000000000000000000000000000000000000..00129ea576c518cf3b627993f41cd2629b18546b GIT binary patch literal 21286 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 P0PfOO*Hx=gv5Wa%QVIe@ literal 0 HcmV?d00001 diff --git a/docs/index.md b/docs/index.mdx similarity index 76% rename from docs/index.md rename to docs/index.mdx index 03bd7aaa..f97f7ace 100644 --- a/docs/index.md +++ b/docs/index.mdx @@ -1,14 +1,43 @@ -# Praison AI +--- +title: "Praison AI" +description: "Comprehensive guide to PraisonAI - an AI Agents Framework with Self Reflection, combining PraisonAI Agents, AutoGen, and CrewAI for building multi-agent LLM systems" +--- + + + +
+ PraisonAI Logo in Light Mode + PraisonAI Logo in Dark Mode +
- +
-PraisonAI Logo -

-Total Downloads -Latest Stable Version -License -

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. @@ -134,14 +163,20 @@ Advanced logging: export LOGLEVEL=debug ``` -
- - - - PraisonAI Architecture - +
+ PraisonAI Architecture in Light Mode + PraisonAI Architecture in Dark Mode
+ ## Different User Interfaces: | Interface | Description | URL | diff --git a/docs/initialise.md b/docs/initialise.mdx similarity index 72% rename from docs/initialise.md rename to docs/initialise.mdx index 5ad98f4d..d549592a 100644 --- a/docs/initialise.md +++ b/docs/initialise.mdx @@ -1,4 +1,7 @@ -# Initialise +--- +title: "Initialise" +description: "Instructions for initializing PraisonAI with API keys and creating the initial agents configuration file" +--- ```bash export OPENAI_API_KEY="Enter your API key" diff --git a/docs/installation.md b/docs/installation.mdx similarity index 78% rename from docs/installation.md rename to docs/installation.mdx index e62e77c4..d7b9e85c 100644 --- a/docs/installation.md +++ b/docs/installation.mdx @@ -1,4 +1,7 @@ -# Installation +--- +title: "Installation" +description: "Guide for installing PraisonAI and its various components including framework support and additional features" +--- ## Basic Installation ```bash @@ -7,6 +10,12 @@ pip install praisonai ## Framework-specific Installation +### PraisonAI Agents Support (Default) + +```bash +pip install praisonai +``` + ### CrewAI Support ```bash pip install "praisonai[crewai]" diff --git a/docs/introduction.md b/docs/introduction.mdx similarity index 92% rename from docs/introduction.md rename to docs/introduction.mdx index 00bece1a..8c9bfbbe 100644 --- a/docs/introduction.md +++ b/docs/introduction.mdx @@ -1,10 +1,8 @@ --- -title: 'Introduction to PraisonAI' +title: 'Introduction' description: 'Get started with PraisonAI, an intelligent AI-powered tool' --- -# Introduction to PraisonAI - Welcome to PraisonAI documentation! PraisonAI is a low-code, centralized 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. ## Key Features diff --git a/mint.json b/docs/mint.json similarity index 91% rename from mint.json rename to docs/mint.json index 412c8192..9e30c298 100644 --- a/mint.json +++ b/docs/mint.json @@ -1,10 +1,10 @@ { "name": "PraisonAI Documentation", "logo": { - "light": "/docs/images/praisonai-logo-black-large.png", - "dark": "/docs/images/praisonai-logo-large.png" + "light": "/images/praisonai-logo-large-dark.png", + "dark": "/images/praisonai-logo-large-light.png" }, - "favicon": "/docs/images/favicon.png", + "favicon": "/images/praisonai-android-chrome-192x192.png", "colors": { "primary": "#0069ED", "light": "#4D9CFF", @@ -45,6 +45,7 @@ "group": "Core Concepts", "pages": [ "train", + "framework/praisonaiagents", "framework/crewai", "framework/autogen" ] diff --git a/docs/models.md b/docs/models.mdx similarity index 92% rename from docs/models.md rename to docs/models.mdx index b5700546..cafb2642 100644 --- a/docs/models.md +++ b/docs/models.mdx @@ -1,4 +1,7 @@ -# Models in PraisonAI +--- +title: "Models in PraisonAI" +description: "Overview of supported language models in PraisonAI, including OpenAI, Groq, Google Gemini, Anthropic Claude, and configuration examples" +--- | PraisonAI Chat | PraisonAI Code | PraisonAI (Multi-Agents) | | --- | --- | --- | diff --git a/docs/models/anthropic.md b/docs/models/anthropic.mdx similarity index 86% rename from docs/models/anthropic.md rename to docs/models/anthropic.mdx index 60331500..a38005aa 100644 --- a/docs/models/anthropic.md +++ b/docs/models/anthropic.mdx @@ -1,3 +1,8 @@ +--- +title: "Anthropic" +description: "Instructions for integrating Anthropic's Claude models with PraisonAI, including API setup and agent configuration" +--- + # Add Anthropic to Praison AI ```bash diff --git a/docs/models/cohere.md b/docs/models/cohere.mdx similarity index 86% rename from docs/models/cohere.md rename to docs/models/cohere.mdx index 69b9f782..82b5e2ef 100644 --- a/docs/models/cohere.md +++ b/docs/models/cohere.mdx @@ -1,3 +1,8 @@ +--- +title: "Cohere" +description: "Guide for integrating Cohere's language models with PraisonAI, including API setup and configuration examples" +--- + # Add COHERE to Praison AI ```bash diff --git a/docs/models/google.md b/docs/models/google.mdx similarity index 86% rename from docs/models/google.md rename to docs/models/google.mdx index 874b32d1..f2d4326e 100644 --- a/docs/models/google.md +++ b/docs/models/google.mdx @@ -1,3 +1,8 @@ +--- +title: "Google Gemini" +description: "Instructions for integrating Google's Gemini models with PraisonAI, including API setup and configuration details" +--- + # Add Google Gemini to Praison AI ```bash diff --git a/docs/models/groq.md b/docs/models/groq.mdx similarity index 85% rename from docs/models/groq.md rename to docs/models/groq.mdx index 2f387696..f93f869f 100644 --- a/docs/models/groq.md +++ b/docs/models/groq.mdx @@ -1,3 +1,8 @@ +--- +title: "Groq" +description: "Guide for integrating Groq's high-performance language models with PraisonAI, including API setup and configuration" +--- + # Add GROQ to Praison AI ```bash diff --git a/docs/models/mistral.md b/docs/models/mistral.mdx similarity index 87% rename from docs/models/mistral.md rename to docs/models/mistral.mdx index 490928d7..755239c1 100644 --- a/docs/models/mistral.md +++ b/docs/models/mistral.mdx @@ -1,3 +1,8 @@ +--- +title: "Mistral" +description: "Guide for integrating Mistral AI's language models with PraisonAI, including API configuration and usage instructions" +--- + # Add Mistral to Praison AI Note: If you want to use Mistral via Ollama, please refer to Ollama document. This is for using Mistral from https://mistral.ai diff --git a/docs/models/ollama.md b/docs/models/ollama.mdx similarity index 84% rename from docs/models/ollama.md rename to docs/models/ollama.mdx index 5d6ecb13..6d79b896 100644 --- a/docs/models/ollama.md +++ b/docs/models/ollama.mdx @@ -1,3 +1,8 @@ +--- +title: "Ollama" +description: "Instructions for integrating Ollama's open-source language models with PraisonAI, including configuration and usage examples" +--- + # Add Ollama to Praison AI ### agents.yaml file diff --git a/docs/models/openai.md b/docs/models/openai.mdx similarity index 93% rename from docs/models/openai.md rename to docs/models/openai.mdx index e45fd950..7ed11e69 100644 --- a/docs/models/openai.md +++ b/docs/models/openai.mdx @@ -1,3 +1,8 @@ +--- +title: "OpenAI ChatGPT" +description: "Guide for integrating OpenAI's ChatGPT models with PraisonAI, including configuration for both single and multi-agent setups" +--- + # Add OPENAI ChatGPT to Praison AI ## Using Single Agent diff --git a/docs/models/openrouter.md b/docs/models/openrouter.mdx similarity index 84% rename from docs/models/openrouter.md rename to docs/models/openrouter.mdx index fe4ea210..e7093826 100644 --- a/docs/models/openrouter.md +++ b/docs/models/openrouter.mdx @@ -1,3 +1,8 @@ +--- +title: "OpenRouter" +description: "Guide for integrating OpenRouter's unified API access to various language models with PraisonAI, including setup and configuration" +--- + # Add OpenRouter to Praison AI ```bash diff --git a/docs/models/other.md b/docs/models/other.mdx similarity index 79% rename from docs/models/other.md rename to docs/models/other.mdx index 16792878..81c18f5f 100644 --- a/docs/models/other.md +++ b/docs/models/other.mdx @@ -1,4 +1,7 @@ -# Other Models +--- +title: "Other Models" +description: "Configuration examples for various other language models with PraisonAI, including Ollama, FastChat, LM Studio, and Mistral API" +--- ```bash # Ollama diff --git a/docs/monitoring/agentops.md b/docs/monitoring/agentops.mdx similarity index 54% rename from docs/monitoring/agentops.md rename to docs/monitoring/agentops.mdx index 21f0d688..a7b6ce77 100644 --- a/docs/monitoring/agentops.md +++ b/docs/monitoring/agentops.mdx @@ -1,3 +1,8 @@ +--- +title: "AgentOps PraisonAI Monitoring" +description: "Guide for setting up and using AgentOps monitoring with PraisonAI, including installation and dashboard configuration" +--- + # AgentOps PraisonAI Monitoring ```bash diff --git a/docs/run.md b/docs/run.mdx similarity index 63% rename from docs/run.md rename to docs/run.mdx index 0120d7d4..8d121396 100644 --- a/docs/run.md +++ b/docs/run.mdx @@ -1,4 +1,7 @@ -# Run +--- +title: "Run" +description: "Instructions for running PraisonAI from the command line, including framework selection and automatic mode" +--- ```bash praisonai diff --git a/docs/tldr.md b/docs/tldr.mdx similarity index 63% rename from docs/tldr.md rename to docs/tldr.mdx index 0875455b..b9c37c34 100644 --- a/docs/tldr.md +++ b/docs/tldr.mdx @@ -1,10 +1,13 @@ -# TL;DR +--- +title: "TL;DR" +description: "Quick start guide for PraisonAI with CrewAI, AutoGen, and UI setup instructions" +--- -## Quick Start with CrewAI (Default) +## Quick Start with PraisonAI Agents ```bash # Install with CrewAI support -pip install "praisonai[crewai]" +pip install praisonai # Set your API key export OPENAI_API_KEY="Enter your API key" @@ -14,6 +17,20 @@ praisonai --init "create a movie script about dog in moon" praisonai ``` +## Quick Start with CrewAI + +```bash +# Install with CrewAI support +pip install "praisonai[crewai]" + +# Set your API key +export OPENAI_API_KEY="Enter your API key" + +# Initialize and run +praisonai --framework crewai --init "create a movie script about dog in moon" +praisonai --framework crewai +``` + ## Quick Start with AutoGen ```bash diff --git a/docs/tools.md b/docs/tools.mdx similarity index 89% rename from docs/tools.md rename to docs/tools.mdx index 2c3af5ac..652726e8 100644 --- a/docs/tools.md +++ b/docs/tools.mdx @@ -1,4 +1,7 @@ -# Tools +--- +title: "Tools" +description: "Overview of PraisonAI's built-in tools for data search, analysis, and web scraping capabilities" +--- diff --git a/docs/tools/composio.md b/docs/tools/composio.mdx similarity index 87% rename from docs/tools/composio.md rename to docs/tools/composio.mdx index 53ca666b..ed94935a 100644 --- a/docs/tools/composio.md +++ b/docs/tools/composio.mdx @@ -1,3 +1,8 @@ +--- +title: "Composio PraisonAI Integration" +description: "Guide for integrating Composio's extensive tool ecosystem with PraisonAI agents, enabling access to GitHub, Gmail, and other external services" +--- + # Composio PraisonAI Integration [Composio](https://composio.dev/) allows AI agents and LLMs to easily integrate with 100+ tools (GitHub, Gmail, CodeExecution and more) to perform actions and subscribe to triggers. This example will show how to integrate Composio with PraisonAI agents to let them seamlessly interact with external apps. diff --git a/docs/tools/crawl4ai.md b/docs/tools/crawl4ai.mdx similarity index 92% rename from docs/tools/crawl4ai.md rename to docs/tools/crawl4ai.mdx index 23b37558..ba8b82c3 100644 --- a/docs/tools/crawl4ai.md +++ b/docs/tools/crawl4ai.mdx @@ -1,3 +1,8 @@ +--- +title: "Crawl4AI PraisonAI Integration" +description: "Guide for integrating Crawl4AI web scraping capabilities with PraisonAI agents, enabling structured data extraction from websites" +--- + # Crawl4AI Praison AI Integration diff --git a/docs/tools/custom.md b/docs/tools/custom.mdx similarity index 95% rename from docs/tools/custom.md rename to docs/tools/custom.mdx index e0b914ff..b3fadfd0 100644 --- a/docs/tools/custom.md +++ b/docs/tools/custom.mdx @@ -1,3 +1,8 @@ +--- +title: "Create Custom Tools" +description: "Step-by-step guide for creating and implementing custom tools in PraisonAI, including examples and configuration instructions" +--- + # Create Custom Tools diff --git a/docs/tools/duckduckgo.md b/docs/tools/duckduckgo.mdx similarity index 78% rename from docs/tools/duckduckgo.md rename to docs/tools/duckduckgo.mdx index 4349549d..5e121aef 100644 --- a/docs/tools/duckduckgo.md +++ b/docs/tools/duckduckgo.mdx @@ -1,3 +1,8 @@ +--- +title: "DuckDuckGo PraisonAI Integration" +description: "Guide for integrating DuckDuckGo search capabilities with PraisonAI agents for web search functionality" +--- + # DuckDuckGo Praison AI Integration ```bash diff --git a/docs/tools/googlecalendar.md b/docs/tools/googlecalendar.mdx similarity index 97% rename from docs/tools/googlecalendar.md rename to docs/tools/googlecalendar.mdx index 6e8a12c1..7e20cad6 100644 --- a/docs/tools/googlecalendar.md +++ b/docs/tools/googlecalendar.mdx @@ -1,3 +1,8 @@ +--- +title: "Google Calendar Tools" +description: "Comprehensive guide for integrating Google Calendar functionality with PraisonAI agents, including event management and scheduling features" +--- + # Google Calendar Tools diff --git a/docs/tools/gpt.md b/docs/tools/gpt.md deleted file mode 100644 index 6a1343a9..00000000 --- a/docs/tools/gpt.md +++ /dev/null @@ -1,3 +0,0 @@ -# PraisonAI Tools Creator GPT - -Use [PraisonAI Tools Creator GPT](https://chatgpt.com/g/g-LrJH1K6Ao-praisonai-tools-creator) to get started quickly. diff --git a/docs/tools/gpt.mdx b/docs/tools/gpt.mdx new file mode 100644 index 00000000..47804a26 --- /dev/null +++ b/docs/tools/gpt.mdx @@ -0,0 +1,8 @@ +--- +title: "PraisonAI Tools Creator GPT" +description: "Guide for using the PraisonAI Tools Creator GPT to quickly develop and implement custom tools for PraisonAI" +--- + +# PraisonAI Tools Creator GPT + +Use [PraisonAI Tools Creator GPT](https://chatgpt.com/g/g-LrJH1K6Ao-praisonai-tools-creator) to get started quickly. diff --git a/docs/tools/langchain.md b/docs/tools/langchain.mdx similarity index 91% rename from docs/tools/langchain.md rename to docs/tools/langchain.mdx index 90671da7..bb0ad56a 100644 --- a/docs/tools/langchain.md +++ b/docs/tools/langchain.mdx @@ -1,3 +1,8 @@ +--- +title: "Langchain Tools" +description: "Guide for integrating Langchain tools and utilities with PraisonAI, including direct tool integration and wrapper implementations" +--- + # Langchain Tools ## Integrate Langchain Direct Tools diff --git a/docs/tools/mem0.md b/docs/tools/mem0.mdx similarity index 93% rename from docs/tools/mem0.md rename to docs/tools/mem0.mdx index 2ef46de6..865a51e2 100644 --- a/docs/tools/mem0.md +++ b/docs/tools/mem0.mdx @@ -1,3 +1,8 @@ +--- +title: "Mem0 and PraisonAI Integration" +description: "Guide for integrating Mem0 (formerly EmbedChain) memory management system with PraisonAI, including tools for storing, retrieving, and managing memories" +--- + # Mem0 and PaisonAI Integration diff --git a/docs/tools/reddit.md b/docs/tools/reddit.mdx similarity index 81% rename from docs/tools/reddit.md rename to docs/tools/reddit.mdx index c7427d64..e859886a 100644 --- a/docs/tools/reddit.md +++ b/docs/tools/reddit.mdx @@ -1,3 +1,8 @@ +--- +title: "Reddit PraisonAI Integration" +description: "Guide for integrating Reddit search capabilities with PraisonAI agents, including API setup and configuration" +--- + # Reddit PraisonAI Integration ```bash diff --git a/docs/tools/tavily.md b/docs/tools/tavily.mdx similarity index 73% rename from docs/tools/tavily.md rename to docs/tools/tavily.mdx index 3564385b..25a80ad8 100644 --- a/docs/tools/tavily.md +++ b/docs/tools/tavily.mdx @@ -1,3 +1,8 @@ +--- +title: "Tavily PraisonAI Integration" +description: "Guide for integrating Tavily's search API with PraisonAI agents for enhanced web search capabilities" +--- + # Tavily PraisonAI Integration ```python diff --git a/docs/tools/wikipedia.md b/docs/tools/wikipedia.mdx similarity index 87% rename from docs/tools/wikipedia.md rename to docs/tools/wikipedia.mdx index 372ddd62..d9b84f19 100644 --- a/docs/tools/wikipedia.md +++ b/docs/tools/wikipedia.mdx @@ -1,3 +1,8 @@ +--- +title: "Wikipedia PraisonAI Integration" +description: "Guide for integrating Wikipedia search capabilities with PraisonAI agents using the Wikipedia API wrapper" +--- + # Wikipedia PraisonAI Integration ```bash diff --git a/docs/tools/you.com.md b/docs/tools/you.com.mdx similarity index 85% rename from docs/tools/you.com.md rename to docs/tools/you.com.mdx index 07d430b4..04f87c40 100644 --- a/docs/tools/you.com.md +++ b/docs/tools/you.com.mdx @@ -1,3 +1,8 @@ +--- +title: "You.com PraisonAI Integration" +description: "Guide for integrating You.com search capabilities with PraisonAI agents using the You.com Search API" +--- + # You.com PraisonAI Integration ```bash diff --git a/docs/tools/youtube.md b/docs/tools/youtube.mdx similarity index 80% rename from docs/tools/youtube.md rename to docs/tools/youtube.mdx index 26ad39f2..24ed871d 100644 --- a/docs/tools/youtube.md +++ b/docs/tools/youtube.mdx @@ -1,3 +1,8 @@ +--- +title: "YouTube Search PraisonAI Integration" +description: "Guide for integrating YouTube search capabilities with PraisonAI agents using the YouTube Search API" +--- + # YouTube Search PraisonAI Integration ```bash diff --git a/docs/train.md b/docs/train.mdx similarity index 91% rename from docs/train.md rename to docs/train.mdx index 59488df6..153b2469 100644 --- a/docs/train.md +++ b/docs/train.mdx @@ -1,4 +1,7 @@ -# PraisonAI Train +--- +title: "PraisonAI Train" +description: "Guide for training and deploying models with PraisonAI, including Hugging Face and Ollama integration with detailed configuration options" +--- diff --git a/docs/ui/chat.md b/docs/ui/chat.mdx similarity index 96% rename from docs/ui/chat.md rename to docs/ui/chat.mdx index daa52814..4601b219 100644 --- a/docs/ui/chat.md +++ b/docs/ui/chat.mdx @@ -1,4 +1,7 @@ -# PraisonAI Chat +--- +title: "PraisonAI Chat" +description: "Guide to PraisonAI's chat interface with support for 100+ LLMs, internet search, vision models, and custom database configurations" +--- diff --git a/docs/ui/code.md b/docs/ui/code.mdx similarity index 96% rename from docs/ui/code.md rename to docs/ui/code.mdx index 066b4399..b48ebdf8 100644 --- a/docs/ui/code.md +++ b/docs/ui/code.mdx @@ -1,4 +1,7 @@ -# PraisonAI Code +--- +title: "PraisonAI Code" +description: "Guide to PraisonAI's code interface for interacting with your codebase using AI, including file management, model configuration, and advanced features" +--- diff --git a/docs/ui/realtime.md b/docs/ui/realtime.mdx similarity index 90% rename from docs/ui/realtime.md rename to docs/ui/realtime.mdx index 4acd1a29..cb378d76 100644 --- a/docs/ui/realtime.md +++ b/docs/ui/realtime.mdx @@ -1,4 +1,7 @@ -# Realtime Voice Interface +--- +title: "Realtime Voice Interface" +description: "Guide to PraisonAI's real-time voice interaction feature with text-to-speech, voice input processing, and financial data integration" +--- diff --git a/docs/ui/ui.md b/docs/ui/ui.mdx similarity index 91% rename from docs/ui/ui.md rename to docs/ui/ui.mdx index 09d7c4d9..7dd2861e 100644 --- a/docs/ui/ui.md +++ b/docs/ui/ui.mdx @@ -1,4 +1,7 @@ -# PraisonAI User Interface (UI) +--- +title: "PraisonAI User Interface (UI)" +description: "Comprehensive guide to PraisonAI's user interfaces, including Chainlit, Gradio, and Streamlit integrations with step-by-step setup instructions" +--- @@ -10,7 +13,8 @@ | **Chat** | Chat with 100+ LLMs, single AI Agent | [https://docs.praison.ai/ui/chat](https://docs.praison.ai/ui/chat) | | **Code** | Chat with entire Codebase, single AI Agent | [https://docs.praison.ai/ui/code](https://docs.praison.ai/ui/code) | -## Chainlit```bash +## Chainlit +```bash pip install -U "praisonai[ui]" export OPENAI_API_KEY="Enter your API key" chainlit create-secret @@ -90,7 +94,3 @@ streamlit run app.py ### Manual Model Output ![Manual Model Output](../images/ui-step-11.png) - -## PraisonAI Call - -To use the PraisonAI Call feature: