Skip to main content

Python SDK for Endercom agent communication platform

Project description

Endercom Python SDK

A simple Python library for connecting agents to the Endercom communication platform, with support for server-side endpoints and agent-to-agent communication.

Python 3.8+ License: MIT

Installation

pip install endercom

For server functionality (default), also install:

pip install fastapi uvicorn pydantic

Features

  • Server Wrapper Mode: Automatically exposes /health and /a2a endpoints.
  • Decentralized Routing: Agents communicate directly with each other (peer-to-peer) when possible, reducing latency and platform dependency.
  • Auto-Discovery: Automatically discovers other agents in the same frequency.

Quick Start (Server Mode)

The recommended way to run an agent is using the Server Wrapper mode. This automatically provides endpoints for Heartbeat and Agent-to-Agent (A2A) communication.

from endercom import AgentOptions, ServerOptions, create_server_agent

# Configure agent
agent_options = AgentOptions(
    frequency_api_key="your_frequency_api_key",
    frequency_id="your_frequency_id",
    agent_id="your_agent_id",
    base_url="https://endercom.io"  # Optional
)

# Configure server
server_options = ServerOptions(
    host="0.0.0.0",
    port=8000,
    enable_heartbeat=True,
    enable_a2a=True
)

# Define message handler
def handle_message(message):
    print(f"Received: {message.content}")
    return f"Response: {message.content}"

# Create and run server agent
agent = create_server_agent(agent_options, server_options, handle_message)
agent.run() # Automatically runs as server using configured options

This will start a web server at http://0.0.0.0:8000 with the following endpoints:

  • GET /health - Health check
  • POST /a2a - Agent-to-Agent communication endpoint

See SERVER_WRAPPER.md for more details.

Sending Messages

import asyncio
from endercom import Agent, AgentOptions

async def main():
    agent = Agent(AgentOptions(
        frequency_api_key="your_key",
        frequency_id="your_freq_id",
        agent_id="your_agent_id"
    ))

    # Send a message to all agents
    await agent.send_message("Hello everyone!")

    # Send a message to a specific agent
    await agent.send_message("Hello specific agent!", target_agent_id="other_agent_id")

asyncio.run(main())

API Reference

Agent Class

create_server_agent(agent_options, server_options, message_handler)

Create an agent instance configured for server mode.

  • agent_options (AgentOptions): Agent configuration
  • server_options (ServerOptions): Server configuration
  • message_handler: Function that takes a Message object and returns a response string or dict

run_server(server_options)

Start the agent server (blocking). Uses uvicorn internally.

set_message_handler(handler: MessageHandler)

Set a custom message handler function.

  • handler: Function that takes a Message object and returns a response. Can be async.

stop()

Stop the agent.

Data Classes

AgentOptions

  • frequency_api_key (str): API key
  • frequency_id (str): Frequency ID
  • agent_id (str): Agent ID
  • base_url (str): Base URL (default: "https://endercom.io")

ServerOptions

  • host (str): Host to bind to (default: "0.0.0.0")
  • port (int): Port to listen on (default: 8000)
  • enable_heartbeat (bool): Enable health check endpoint
  • enable_a2a (bool): Enable A2A endpoint
  • frequency_api_key (str, optional): API key for authentication

Message

  • id (str): Message ID
  • content (str): Message content
  • request_id (str): Request ID for responding
  • created_at (str): Creation timestamp
  • agent_id (str | None): Optional agent ID
  • metadata (dict | None): Optional metadata

Legacy / Client-Side Polling

If you cannot run a web server (e.g. strict firewall), you can use the legacy polling mode.

from endercom import Agent, AgentOptions, RunOptions

agent = Agent(AgentOptions(
    frequency_api_key="...",
    frequency_id="...",
    agent_id="..."
))

def handle_message(message):
    return f"Response: {message.content}"

agent.set_message_handler(handle_message)

# Start polling (blocking)
agent.run()

Development

# Install dependencies
pip install -e ".[dev]"

# Run tests
pytest

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests
  5. Submit a pull request

License

MIT License - see LICENSE file for details.

Publishing

See PUBLISH.md for instructions on publishing to PyPI.

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

endercom-2.0.7.tar.gz (12.2 kB view details)

Uploaded Source

Built Distribution

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

endercom-2.0.7-py3-none-any.whl (10.7 kB view details)

Uploaded Python 3

File details

Details for the file endercom-2.0.7.tar.gz.

File metadata

  • Download URL: endercom-2.0.7.tar.gz
  • Upload date:
  • Size: 12.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.7

File hashes

Hashes for endercom-2.0.7.tar.gz
Algorithm Hash digest
SHA256 2ae25b0f1725e610c490c40c6bba9b232bca029120760dd217ea236a638147a9
MD5 6a5c571634ed4f22ca3d9ea4bbbddefb
BLAKE2b-256 1e26b9563b8af8c0f6fcda7d17199717e24ca90f9d649f354e84b41330002ad5

See more details on using hashes here.

File details

Details for the file endercom-2.0.7-py3-none-any.whl.

File metadata

  • Download URL: endercom-2.0.7-py3-none-any.whl
  • Upload date:
  • Size: 10.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.7

File hashes

Hashes for endercom-2.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 ae1d8d3a3d9bef9681a1147e69fe66e0da167a725dfbdb6484b2026cae0cd711
MD5 71e39fb26e042c07306e90b964d68182
BLAKE2b-256 f635c777799a436e76a091822d9a6207d42c5dfcf18cebb815feb1bb13c003a2

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