Allora Example
This example demonstrates how to use AgentiPy with the Allora protocol. It sets up a FastAPI service that provides continuous price predictions for BTC and ETH using the Allora Network.
The implementation showcases:
Real-time price predictions for BTC/ETH (5min and 8hr timeframes)
Asynchronous data fetching from Allora Network
Continuous background updates
REST API endpoint for prediction access
Production-grade error handling and logging
Code (main.py)
main.py)import asyncio
import os
import logging
from fastapi import FastAPI
from pydantic import BaseModel
from datetime import datetime
from typing import Optional
from agentipy.agent import SolanaAgentKit
from agentipy.tools.use_allora import (
AlloraManager,
PriceInferenceToken,
PriceInferenceTimeframe,
ChainSlug
)
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
SLEEP_INTERVAL = int(os.getenv("SLEEP_INTERVAL", 300))
API_ENV = os.getenv("ALLORA_ENV", "MAINNET")
CHAIN = ChainSlug.MAINNET if API_ENV.upper() == "MAINNET" else ChainSlug.TESTNET
class Predictions(BaseModel):
btc_5min: Optional[float] = None
eth_5min: Optional[float] = None
btc_8hour: Optional[float] = None
eth_8hour: Optional[float] = None
last_updated: Optional[datetime] = None
latest_predictions = Predictions()
allora = None
app = FastAPI()
async def fetch_predictions_loop():
global latest_predictions
while True:
try:
btc_5min = await allora.get_price_prediction(PriceInferenceToken.BTC, PriceInferenceTimeframe.FIVE_MIN)
eth_5min = await allora.get_price_prediction(PriceInferenceToken.ETH, PriceInferenceTimeframe.FIVE_MIN)
btc_8hour = await allora.get_price_prediction(PriceInferenceToken.BTC, PriceInferenceTimeframe.EIGHT_HOURS)
eth_8hour = await allora.get_price_prediction(PriceInferenceToken.ETH, PriceInferenceTimeframe.EIGHT_HOURS)
latest_predictions.btc_5min = btc_5min
latest_predictions.eth_5min = eth_5min
latest_predictions.btc_8hour = btc_8hour
latest_predictions.eth_8hour = eth_8hour
latest_predictions.last_updated = datetime.now()
logging.info(f"Updated predictions - BTC (5min): {btc_5min}, ETH (5min): {eth_5min}, "
f"BTC (8hour): {btc_8hour}, ETH (8hour): {eth_8hour}")
except Exception as e:
logging.error(f"Error fetching predictions: {str(e)}")
await asyncio.sleep(SLEEP_INTERVAL)
@app.on_event("startup")
async def startup_event():
global allora
api_key = os.getenv('ALLORA_API_KEY', 'UP-Allora_Api-key')
agent = SolanaAgentKit(allora_api_key=api_key)
allora = AlloraManager(agent=agent, chain=CHAIN)
asyncio.create_task(fetch_predictions_loop())
@app.get("/predictions", response_model=Predictions)
async def get_predictions():
return latest_predictions
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)Source Files
You can find the source files for this example (including readme.md with setup and usage instructions) on GitHub: https://github.com/niceberginc/agentipy/blob/main/examples/Allora/
