Skip to main content

No project description provided

Project description

Neurion Ganglion - Ion Framework

Overview

Neurion Ganglion provides a framework for defining, deploying, and managing Ions – decentralized computational units that operate within the Neurion ecosystem. This repository offers a streamlined way to create and register Ions, either as self-hosted services or pre-existing services ready for registration.

Features

  • Define input and output schemas using Pydantic.
  • Register Ions with Neurion automatically or manually.
  • Health-check endpoints for ensuring service availability.
  • Auto-recovery mechanism for self-hosted Ions.
  • Easy-to-use decorators for defining execution logic.
  • Integrated Ganglion Server for managing pathways and processing Ion calls.
  • Support for localnet, alphanet, betanet, and mainnet environments.

Installation

pip install neurion-ganglion

Environment Variables

Neurion Ganglion relies on several environment variables for configuration:

Variable Description
NEURION_PRIVATE_KEY The private key used for authentication and transaction signing.
NEURION_MNEMONIC Mnemonic phrase for wallet recovery and authentication.
NEURION_NETWORK Network selection: localnet, alphanet, betanet, or mainnet.
DATABASE_URL PostgreSQL database URL for storing Ion and Pathway usage records.
ENABLE_CALLS_COUNT Boolean flag (true/false) to enable or disable call metering.
FREE_ION_CALLS Number of free calls allowed for an Ion before requiring payment.

You can configure these by setting them in your .env file or export them as environment variables.


Network Configuration

Neurion supports multiple networks. To configure the appropriate network:

import os
from functools import lru_cache
from neurionpy.synapse.config import NetworkConfig

@lru_cache()
def get_network() -> NetworkConfig:
    network = os.getenv("NEURION_NETWORK", "alphanet")
    if network.lower() == "mainnet":
        return NetworkConfig.neurion_mainnet()
    elif network.lower() == "alphanet":
        return NetworkConfig.neurion_alpha_testnet()
    elif network.lower() == "betanet":
        return NetworkConfig.neurion_beta_testnet()
    elif network.lower() == "localnet":
        return NetworkConfig.neurion_localnet()
    return NetworkConfig.neurion_alpha_testnet()

Authentication Flow

To ensure security, every request to the Ganglion server must be authenticated using the following headers:

  • X-Neurion-Timestamp: The UNIX timestamp of the request.
  • X-Neurion-Sender: The sender's wallet address.
  • X-Neurion-Signature: The signature of the sender over the timestamp.

How Authentication Works:

  1. The sender signs the current timestamp using their private key.
  2. The request is sent with the signed timestamp and wallet address in headers.
  3. The server verifies:
    • The timestamp is within the allowed expiry window.
    • The signature is valid using the sender's public key.
    • The sender has enough balance if ENABLE_CALLS_COUNT is enabled.
  4. If validation passes, the request is processed.

Example Signature Verification in Middleware:

from neurionpy.crypto.keypairs import PublicKey

def verify_signature(timestamp: str, sender: str, signature: str) -> bool:
    try:
        recovered_pubkey = PublicKey.from_signature_hex(timestamp, signature)
        return recovered_pubkey.to_address() == sender
    except Exception as e:
        print(f"Signature verification failed: {e}")
        return False

Creating an Ion

You can create an Ion in two different ways:

1. Self-Hosting Ion (Auto-Registering)

from pydantic import BaseModel
from neurion_ganglion.ion.ion import Ion, ion_handler
from neurion_ganglion.custom_types.capacity import Capacity

description = "My Ion Server"
stake = 20000000
fee_per_thousand_calls = 1
capacities = [Capacity.SCRAPER, Capacity.AI_AGENT]

# Define Input/Output Schemas
class MyInputSchema(BaseModel):
    task_id: str
    parameters: int

class MyOutputSchema(BaseModel):
    message: str
    result: float

@ion_handler(MyInputSchema, MyOutputSchema)
def my_ion_handler(data: MyInputSchema) -> MyOutputSchema:
    return MyOutputSchema(message="Success", result=12)

if __name__ == "__main__":
    Ion.create_self_hosting_ion(description, stake, fee_per_thousand_calls, capacities, my_ion_handler).start()

2. Pure Ion Server & Manual Registration

Step 1: Start the Pure Ion Server

Ion.start_pure_ion_server(my_ion_handler)

Step 2: Register the Running Ion Server

endpoints = ["http://<public-ip>:8000"]
Ion.create_server_ready_ion(description, stake, fee_per_thousand_calls, capacities, MyInputSchema, MyOutputSchema, endpoints).register_ion()

Using Pathways

A Pathway defines a structured flow between multiple Ions.

from neurion_ganglion.ion.pathway import Pathway

pathway = Pathway.of(1)
response = pathway.call({"task_id": "1234", "parameters": 100})
print(response)

Ganglion Server

The Ganglion Server routes requests to the appropriate Ion or Pathway.

from neurion_ganglion.server.server import GanglionServer
GanglionServer.start()

Health Check

All Ions expose a /health endpoint for availability checking.

curl http://localhost:8000/health

License

This project is licensed under the MIT License.

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

neurion_ganglion-0.11.0.tar.gz (19.5 kB view details)

Uploaded Source

Built Distribution

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

neurion_ganglion-0.11.0-py3-none-any.whl (25.7 kB view details)

Uploaded Python 3

File details

Details for the file neurion_ganglion-0.11.0.tar.gz.

File metadata

  • Download URL: neurion_ganglion-0.11.0.tar.gz
  • Upload date:
  • Size: 19.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.1 CPython/3.9.21 Linux/6.8.0-1021-azure

File hashes

Hashes for neurion_ganglion-0.11.0.tar.gz
Algorithm Hash digest
SHA256 53f858d745345e1213967e6fc4e9e06d47676a46067b148287ec2543f4fb7aea
MD5 7041fc57af069c992583dded6370b06e
BLAKE2b-256 a24d7d63a1e296ad90141fc335dd11d91b17e7ea72bed0ec645949c131d3f1ca

See more details on using hashes here.

File details

Details for the file neurion_ganglion-0.11.0-py3-none-any.whl.

File metadata

  • Download URL: neurion_ganglion-0.11.0-py3-none-any.whl
  • Upload date:
  • Size: 25.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.1 CPython/3.9.21 Linux/6.8.0-1021-azure

File hashes

Hashes for neurion_ganglion-0.11.0-py3-none-any.whl
Algorithm Hash digest
SHA256 63e67b0d5d969b4bad0ca203aec523ce0cf567c1e80bf23091ab87e9d82d421d
MD5 96dec250a45574ec145dfb91f0da7122
BLAKE2b-256 645cbc20a5878943740fc47ba630d9cdd62cfbef0bb968457b2e948c71069319

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