Skip to main content

Customizable AI Agent Communication Framework with pluggable message improvement logic

Project description

NANDA Agent Framework

A customizable improvement logic for your agents, and easily get registered into NANDA registry

Features

  • Pluggable Message Improvement: Easily customize how your agents improve messages
  • Multiple AI Frameworks: Support for LangChain, CrewAI, and custom logic
  • Agent-to-Agent Communication: Built-in A2A communication system
  • Registry System: Automatic agent discovery and registration
  • SSL Support: Production-ready with Let's Encrypt certificates
  • Example Agents: Ready-to-use examples for common use cases

Installation

Basic Installation

pip install nanda-agent

Quick Start

1. Set Your API Key (For running your personal hosted agents, need API key and your own domain)

export ANTHROPIC_API_KEY="your-api-key-here"\
export DOMAIN_NAME="your-domain.com"

2. Create Your Own Agent

2.1 Write your improvement logic using the framework you like. Here it is a simple moduule without any llm call. 
2.2 In the main(), create your improvement function, initialize NANDA using the improvement function, and start the server with Anthropic key and domain using nanda.start_server_api().
2.3 In the requirements.txt file add nanda-agent along with other requirements 
2.4 Move this file into your server(the domain should match to the IP address) and run this python file in background 

if langchain_pirate.py is python file name, use the below instructions to run in the background: 
nohup python3 langchain_pirate.py > out.log 2>&1 &
#!/usr/bin/env python3
from nanda_agent import NANDA
import os

def create_custom_improvement():
    """Create your custom improvement function"""
    
    def custom_improvement_logic(message_text: str) -> str:
        """Transform messages according to your logic"""
        try:
            # Your custom transformation logic here
            improved_text = message_text.replace("hello", "greetings")
            improved_text = improved_text.replace("goodbye", "farewell")
            
            return improved_text
        except Exception as e:
            print(f"Error in improvement: {e}")
            return message_text  # Fallback to original
    
    return custom_improvement_logic

def main():
    # Create your improvement function
    my_improvement = create_custom_improvement()
    
    # Initialize NANDA with your custom logic
    nanda = NANDA(my_improvement)
    
    # Start the server
    anthropic_key = os.getenv("ANTHROPIC_API_KEY")
    domain = os.getenv("DOMAIN_NAME")
    
    nanda.start_server_api(anthropic_key, domain)

if __name__ == "__main__":
    main()

Using with LangChain

from nanda_agent import NANDA
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_anthropic import ChatAnthropic

def create_langchain_improvement():
    llm = ChatAnthropic(
        api_key=os.getenv("ANTHROPIC_API_KEY"),
        model="claude-3-haiku-20240307"
    )
    
    prompt = PromptTemplate(
        input_variables=["message"],
        template="Make this message more professional: {message}"
    )
    
    chain = prompt | llm | StrOutputParser()
    
    def langchain_improvement(message_text: str) -> str:
        return chain.invoke({"message": message_text})
    
    return langchain_improvement

# Use it
nanda = NANDA(create_langchain_improvement())
# Start the server
anthropic_key = os.getenv("ANTHROPIC_API_KEY")
domain = os.getenv("DOMAIN_NAME")

nanda.start_server_api(anthropic_key, domain)

Using with CrewAI

from nanda_agent import NANDA
from crewai import Agent, Task, Crew
from langchain_anthropic import ChatAnthropic

def create_crewai_improvement():
    llm = ChatAnthropic(
        api_key=os.getenv("ANTHROPIC_API_KEY"),
        model="claude-3-haiku-20240307"
    )
    
    improvement_agent = Agent(
        role="Message Improver",
        goal="Improve message clarity and professionalism",
        backstory="You are an expert communicator.",
        llm=llm
    )
    
    def crewai_improvement(message_text: str) -> str:
        task = Task(
            description=f"Improve this message: {message_text}",
            agent=improvement_agent,
            expected_output="An improved version of the message"
        )
        
        crew = Crew(agents=[improvement_agent], tasks=[task])
        result = crew.kickoff()
        return str(result)
    
    return crewai_improvement

# Use it
nanda = NANDA(create_crewai_improvement())
# Start the server
anthropic_key = os.getenv("ANTHROPIC_API_KEY")
domain = os.getenv("DOMAIN_NAME")

nanda.start_server_api(anthropic_key, domain)

Checkout the examples folder for more details

Configuration

Environment Variables

  • ANTHROPIC_API_KEY: Your Anthropic API key (required)
  • DOMAIN_NAME: Domain name for SSL certificates
  • AGENT_ID: Custom agent ID (optional, auto-generated if not provided)
  • PORT: Agent bridge port (default: 6000)
  • IMPROVE_MESSAGES: Enable/disable message improvement (default: true)

Production Deployment

For production deployment with SSL:

export ANTHROPIC_API_KEY="your-api-key"
export DOMAIN_NAME="your-domain.com"
nanda-pirate

The framework will automatically:

  • Generate SSL certificates using Let's Encrypt
  • Set up proper agent registration
  • Configure production-ready logging

API Endpoints

When running with start_server_api(), the following endpoints are available:

  • GET /api/health - Health check
  • POST /api/send - Send message to agent
  • GET /api/agents/list - List registered agents
  • POST /api/receive_message - Receive message from agent
  • GET /api/render - Get latest message

Agent Communication

Agents can communicate with each other using the @agent_id syntax:

@agent123 Hello there!

The message will be improved using your custom logic before being sent.

Command Line Tools

# Show help
nanda-agent --help

# List available examples
nanda-agent --list-examples

# Run specific examples
nanda-pirate              # Simple pirate agent
nanda-pirate-langchain    # LangChain pirate agent
nanda-sarcastic           # CrewAI sarcastic agent

Architecture

The NANDA framework consists of:

  1. AgentBridge: Core communication handler
  2. Message Improvement System: Pluggable improvement logic
  3. Registry System: Agent discovery and registration
  4. A2A Communication: Agent-to-agent messaging
  5. Flask API: External communication interface

Development

Creating Custom Agents

  1. Create your improvement function
  2. Initialize NANDA with your function
  3. Start the server
  4. Your agent is ready to communicate!

Examples

The framework includes several example agents:

  • Simple Pirate Agent: Basic string replacement
  • LangChain Pirate Agent: AI-powered pirate transformation
  • CrewAI Sarcastic Agent: Team-based sarcastic responses

License

MIT License - see LICENSE file for details.

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.

Support

For issues and questions:

Changelog

v1.0.0

  • Initial release
  • Basic NANDA framework
  • LangChain integration
  • CrewAI integration
  • Example agents
  • Production deployment support

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nanda_agent-1.0.0.tar.gz (26.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nanda_agent-1.0.0-py3-none-any.whl (28.7 kB view details)

Uploaded Python 3

File details

Details for the file nanda_agent-1.0.0.tar.gz.

File metadata

  • Download URL: nanda_agent-1.0.0.tar.gz
  • Upload date:
  • Size: 26.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.0

File hashes

Hashes for nanda_agent-1.0.0.tar.gz
Algorithm Hash digest
SHA256 44d54f60526b31ef61132e15832a213401ea897f8e0c0e8dcc6a63eb4ff6f7d0
MD5 adc76612dbc33e6a87751ba3d5f769a6
BLAKE2b-256 b08161613c4853ee79c54cdd54165cde9d8e1ba43f4eaf34ce6e8cea81b43fde

See more details on using hashes here.

File details

Details for the file nanda_agent-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: nanda_agent-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 28.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.0

File hashes

Hashes for nanda_agent-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 119f1c54dce124cdf80f84f9aaf41c7629596974ecc27bc501d0a30fa92b9b91
MD5 5dddff112273f67cc7a73e8e24cef565
BLAKE2b-256 f6bd107c0438a3b56aebf7b2c47cac4ca4b46cc5cbc234253620fca8b5ab7a2b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page