Swarms / docs /swarms /agents /external_party_agents.md
harshalmore31's picture
Synced repo using 'sync_with_huggingface' Github Action
d8d14f1 verified

A newer version of the Gradio SDK is available: 5.22.0

Upgrade

Swarms External Agent Integration

Integrating external agents from other frameworks like Langchain, Griptape, and more is straightforward using Swarms. Below are step-by-step guides on how to bring these agents into Swarms by creating a new class, implementing the required methods, and ensuring compatibility.


Quick Overview

  • Step 1: Create a new class that inherits the Agent class from Swarms.
  • Step 2: Override the .run(task: str) -> str method that will execute the agent and return a string response.
  • Step 3: Optionally, add methods to save outputs to other formats like JSON, logs, or databases.

Agent Class

The primary structure you'll need to integrate any external agent is the Agent class from Swarms. Here’s a template for how your new agent class should be structured:

from swarms import Agent

class ExternalAgent(Agent):
    def run(self, task: str) -> str:
        # Implement logic to run external agent
        pass

    def save_to_json(self, output: str, filepath: str):
        # Optionally save the result to a JSON file
        with open(filepath, "w") as file:
            json.dump({"response": output}, file)

Griptape Agent Integration Example

In this example, we will create a Griptape agent by inheriting from the Swarms Agent class and implementing the run method.

Griptape Integration Steps:

  1. Inherit from Swarms Agent: Inherit from the SwarmsAgent class.
  2. Create Griptape Agent: Initialize the Griptape agent inside your class and provide it with the necessary tools.
  3. Override the run() method: Implement logic to process a task string and execute the Griptape agent.

Griptape Example Code:

from swarms import (
    Agent as SwarmsAgent,
)  # Import the base Agent class from Swarms
from griptape.structures import Agent as GriptapeAgent
from griptape.tools import (
    WebScraperTool,
    FileManagerTool,
    PromptSummaryTool,
)

# Create a custom agent class that inherits from SwarmsAgent
class GriptapeSwarmsAgent(SwarmsAgent):
    def __init__(self, *args, **kwargs):
        # Initialize the Griptape agent with its tools
        self.agent = GriptapeAgent(
            input="Load {{ args[0] }}, summarize it, and store it in a file called {{ args[1] }}.",
            tools=[
                WebScraperTool(off_prompt=True),
                PromptSummaryTool(off_prompt=True),
                FileManagerTool(),
            ],
            *args,
            **kwargs,
        )

    # Override the run method to take a task and execute it using the Griptape agent
    def run(self, task: str) -> str:
        # Extract URL and filename from task
        url, filename = task.split(",")  # Example task string: "https://example.com, output.txt"
        # Execute the Griptape agent
        result = self.agent.run(url.strip(), filename.strip())
        # Return the final result as a string
        return str(result)


# Example usage:
griptape_swarms_agent = GriptapeSwarmsAgent()
output = griptape_swarms_agent.run("https://griptape.ai, griptape.txt")
print(output)

Explanation:

  1. GriptapeSwarmsAgent: The custom class that integrates Griptape into Swarms.
  2. run(task: str): This method extracts inputs from the task string and runs the agent using Griptape tools.
  3. Tools: The Griptape agent is equipped with web scraping, summarization, and file management tools.

Additional Features:

You can enhance your external agents with additional features such as:

  • Saving outputs to JSON, databases, or logs.

  • Handling errors and retry mechanisms for robustness.

  • Custom logging with tools like Loguru for extensive debugging.


Langchain Agent Integration Example

Next, we demonstrate how to integrate a Langchain agent with Swarms by following similar steps.

Langchain Integration Steps:

  1. Inherit from Swarms Agent: Inherit from the SwarmsAgent class.
  2. Create Langchain Agent: Initialize a Langchain agent with the necessary components (like language models or memory modules).
  3. Override the run() method: Pass tasks to the Langchain agent and return the response.

Langchain Example Code:

from swarms import Agent as SwarmsAgent
from langchain import LLMChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate

# Create a custom agent class that inherits from SwarmsAgent
class LangchainSwarmsAgent(SwarmsAgent):
    def __init__(self, *args, **kwargs):
        # Initialize the Langchain agent with LLM and prompt
        prompt_template = PromptTemplate(template="Answer the question: {question}")
        llm = OpenAI(model="gpt-3.5-turbo")
        self.chain = LLMChain(llm=llm, prompt=prompt_template)
        super().__init__(*args, **kwargs)

    # Override the run method to take a task and execute it using the Langchain agent
    def run(self, task: str) -> str:
        # Pass the task to the Langchain agent
        result = self.chain.run({"question": task})
        # Return the final result as a string
        return result

# Example usage:
langchain_swarms_agent = LangchainSwarmsAgent()
output = langchain_swarms_agent.run("What is the capital of France?")
print(output)

Explanation:

  1. LangchainSwarmsAgent: The custom class integrates Langchain into Swarms.
  2. run(task: str): The task is passed to a language model via Langchain and returns a result.

Additional Examples from other providers

1. OpenAI Function Calling Agents

  • Description: OpenAI models like GPT-4 can now call functions programmatically. This makes it possible to create agents that execute external functions, APIs, or code snippets.

    Example Integration:

    from swarms import Agent as SwarmsAgent
    import openai
    
    # Custom OpenAI Function Calling Agent
    class OpenAIFunctionAgent(SwarmsAgent):
        def __init__(self, *args, **kwargs):
            # Initialize OpenAI API credentials and settings
            self.api_key = "your_openai_api_key"
            super().__init__(*args, **kwargs)
    
        def run(self, task: str) -> str:
            # Example task: "summarize, 'Provide a short summary of this text...'"
            command, input_text = task.split(", ")
            response = openai.Completion.create(
                model="gpt-4",
                prompt=f"{command}: {input_text}",
                temperature=0.5,
                max_tokens=100,
            )
            return response.choices[0].text.strip()
    
    # Example usage:
    openai_agent = OpenAIFunctionAgent()
    output = openai_agent.run("summarize, Provide a short summary of this text...")
    print(output)
    

2. Rasa Agents

  • Description: Rasa is a popular open-source framework for building conversational AI agents. You can integrate Rasa to build dialogue-based agents with Swarms.

    Example Integration:

    from swarms import Agent as SwarmsAgent
    from rasa.core.agent import Agent as RasaAgent
    from rasa.core.interpreter import RasaNLUInterpreter
    
    # Custom Rasa Swarms Agent
    class RasaSwarmsAgent(SwarmsAgent):
        def __init__(self, model_path: str, *args, **kwargs):
            # Initialize the Rasa agent with a pre-trained model
            self.agent = RasaAgent.load(model_path)
            super().__init__(*args, **kwargs)
    
        def run(self, task: str) -> str:
            # Pass user input to the Rasa agent
            result = self.agent.handle_text(task)
            # Return the final response from the agent
            return result[0]["text"] if result else "No response."
    
    # Example usage:
    rasa_swarms_agent = RasaSwarmsAgent("path/to/rasa_model")
    output = rasa_swarms_agent.run("Hello, how can I get a refund?")
    print(output)
    

3. Hugging Face Transformers

  • Description: Hugging Face offers a variety of pre-trained models, including transformers for NLP tasks. These can be easily integrated into Swarms for various tasks like text generation, question answering, and more.

    Example Integration:

    from swarms import Agent as SwarmsAgent
    from transformers import pipeline
    
    # Custom Hugging Face Agent
    class HuggingFaceSwarmsAgent(SwarmsAgent):
        def __init__(self, model_name: str, *args, **kwargs):
            # Initialize a pre-trained pipeline from Hugging Face
            self.pipeline = pipeline("text-generation", model=model_name)
            super().__init__(*args, **kwargs)
    
        def run(self, task: str) -> str:
            # Generate text based on the task input
            result = self.pipeline(task, max_length=50)
            return result[0]["generated_text"]
    
    # Example usage:
    hf_swarms_agent = HuggingFaceSwarmsAgent("gpt2")
    output = hf_swarms_agent.run("Once upon a time in a land far, far away...")
    print(output)
    

4. AutoGPT or BabyAGI

  • Description: AutoGPT and BabyAGI are agent frameworks designed to be autonomous, where agents can recursively execute tasks and create new tasks based on previous outputs.

    Example Integration:

    from swarms import Agent as SwarmsAgent
    from autogpt import AutoGPT
    
    # Custom AutoGPT Agent
    class AutoGPTSwarmsAgent(SwarmsAgent):
        def __init__(self, config, *args, **kwargs):
            # Initialize AutoGPT with configuration
            self.agent = AutoGPT(config)
            super().__init__(*args, **kwargs)
    
        def run(self, task: str) -> str:
            # Execute task recursively using AutoGPT
            result = self.agent.run(task)
            return result
    
    # Example usage:
    autogpt_swarms_agent = AutoGPTSwarmsAgent({"goal": "Solve world hunger"})
    output = autogpt_swarms_agent.run("Develop a plan to solve world hunger.")
    print(output)
    

5. DialogFlow Agents

  • Description: DialogFlow by Google is used to build conversational agents. These agents can process user intents and deliver responses based on predefined conversation flows.

    Example Integration:

    from swarms import Agent as SwarmsAgent
    from google.cloud import dialogflow
    
    # Custom DialogFlow Agent
    class DialogFlowSwarmsAgent(SwarmsAgent):
        def __init__(self, project_id: str, session_id: str, *args, **kwargs):
            # Initialize DialogFlow session client
            self.session_client = dialogflow.SessionsClient()
            self.project_id = project_id
            self.session_id = session_id
            super().__init__(*args, **kwargs)
    
        def run(self, task: str) -> str:
            session = self.session_client.session_path(self.project_id, self.session_id)
            text_input = dialogflow.TextInput(text=task, language_code="en-US")
            query_input = dialogflow.QueryInput(text=text_input)
            response = self.session_client.detect_intent(
                request={"session": session, "query_input": query_input}
            )
            return response.query_result.fulfillment_text
    
    # Example usage:
    dialogflow_swarms_agent = DialogFlowSwarmsAgent("your_project_id", "your_session_id")
    output = dialogflow_swarms_agent.run("Book me a flight to Paris.")
    print(output)
    

6. ChatterBot Agents

  • Description: ChatterBot is a Python-based machine-learning conversational agent. It learns from previous conversations to generate intelligent responses.

    Example Integration:

    from swarms import Agent as SwarmsAgent
    from chatterbot import ChatBot
    
    # Custom ChatterBot Agent
    class ChatterBotSwarmsAgent(SwarmsAgent):
        def __init__(self, name: str, *args, **kwargs):
            # Initialize ChatterBot
            self.agent = ChatBot(name)
            super().__init__(*args, **kwargs)
    
        def run(self, task: str) -> str:
            # Get a response from ChatterBot based on user input
            response = self.agent.get_response(task)
            return str(response)
    
    # Example usage:
    chatterbot_swarms_agent = ChatterBotSwarmsAgent("Assistant")
    output = chatterbot_swarms_agent.run("What is the capital of Italy?")
    print(output)
    

7. Custom APIs as Agents

  • Description: You can create agents that integrate with any REST or GraphQL API by defining them as a task runner within Swarms. This allows for interaction with third-party services.

    Example Integration:

    from swarms import Agent as SwarmsAgent
    import requests
    
    # Custom API Agent
    class APIAgent(SwarmsAgent):
        def run(self, task: str) -> str:
            # Parse task for API endpoint and parameters
            endpoint, params = task.split(", ")
            response = requests.get(endpoint, params={"q": params})
            return response.text
    
    # Example usage:
    api_swarms_agent = APIAgent()
    output = api_swarms_agent.run("https://api.example.com/search, python")
    print(output)
    

Summary of Integrations:

  • Griptape: Integrate with tools for web scraping, summarization, etc.

  • Langchain: Use powerful language model orchestration.

  • OpenAI Function Calling: Directly run OpenAI API-based agents.

  • Rasa: Build and integrate conversational agents.

  • Hugging Face: Leverage transformer models.

  • AutoGPT/BabyAGI: Recursive, autonomous task execution.

  • DialogFlow: Integrate conversational flows for voice/chat-based systems.

  • ChatterBot: Machine-learning conversational agents.

  • Custom APIs: Leverage external APIs as agents for custom workflows.


Conclusion:

By following the steps outlined above, you can seamlessly integrate external agent frameworks like Griptape and Langchain into Swarms. This makes Swarms a highly versatile platform for orchestrating various agentic workflows and leveraging the unique capabilities of different frameworks.

For more examples and use cases, please refer to the official Swarms documentation site.