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:
- The sender signs the current timestamp using their private key.
- The request is sent with the signed timestamp and wallet address in headers.
- 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_COUNTis enabled.
- 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_sanctum.ion.ion import Ion, ion_handler
from neurion_sanctum.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_sanctum.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_sanctum.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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file neurion_sanctum-0.1.0.tar.gz.
File metadata
- Download URL: neurion_sanctum-0.1.0.tar.gz
- Upload date:
- Size: 12.1 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cb25e8f3676941cf0da8eba29e17d85bd98cc35ff643c9dcf52f1941884ee255
|
|
| MD5 |
bd1fc11f36d7e855f3277265d06106fe
|
|
| BLAKE2b-256 |
568bf451a7fb40ce9f90bc753ff5b7ae741f653771efee58c7f6ff93e23dba3a
|
File details
Details for the file neurion_sanctum-0.1.0-py3-none-any.whl.
File metadata
- Download URL: neurion_sanctum-0.1.0-py3-none-any.whl
- Upload date:
- Size: 14.0 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b9b043e03537c6109d4d36ee0df8b75dbb5d8e0a5cdc9d53ae48093123f25f18
|
|
| MD5 |
1c71bcb754af32b6ec0e2b630534cad8
|
|
| BLAKE2b-256 |
f9172d486b4bac0d298c6343c9f169178d7a3ed63f69e807ac24cb63de7d9ab2
|