Agno ಪಾವತಿ ಏಕೀಕರಣ.
Agno ಪ್ಯಾಕೇಜ್ ಇಲ್ಲ, ಮತ್ತು ನಿಮಗೆ ಒಂದು ಅಗತ್ಯವಿಲ್ಲ. ವಾಸ್ತವ blockchain0x ಕ್ಲೈಂಟ್ ಅನ್ನು ಒಂದು ಸಣ್ಣ ಟೂಲ್ಕಿಟ್ನಲ್ಲಿ ಲುಪ್ತಗೊಳಿಸಿ ಮತ್ತು ನಿಮ್ಮ ಏಜೆಂಟ್ USDC ಅನ್ನು Base ನಲ್ಲಿ ಚಲಾಯಿಸಬಹುದು - ಕನಿಷ್ಠ ಅಬ್ಸ್ಟ್ರಾಕ್ಷನ್, Agno ಶ್ರೇಣಿಯಲ್ಲಿ.
Agno-specific package ಇಲ್ಲ, ಮತ್ತು ನಿಮಗೆ ಅದು ಬೇಕಾಗಿಲ್ಲ. Agno ಒಂದು method ಅನ್ನು tool ಆಗಿ ಪರಿವರ್ತಿಸುತ್ತದೆ, ಆದ್ದರಿಂದ ನೀವು ನಿಜವಾದ Python client ಅನ್ನು ಒಂದು ಚಿಕ್ಕ toolkit ನಲ್ಲಿ wrap ಮಾಡಿ ನಿಮ್ಮ ಗೆ ಸೇರಿಸುತ್ತೀರಿ. agent ಎಲ್ಲಾ Agno models (OpenAI, Anthropic, DeepSeek, Llama, Mistral) across ನಲ್ಲಿ USDC ಕಳುಹಿಸಬಹುದು, invoices settle ಮಾಡಬಹುದು, ಮತ್ತು wallets ಓದಬಹುದು. Payments Base ನಲ್ಲಿ settle ಆಗುತ್ತವೆ.
ಹಲವಾರು ತೂಕದ Python ಚೌಕಟ್ಟಿನ. ಯಾವುದೇ ಅಬ್ಸ್ಟ್ರಾಕ್ಷನ್ ತೆರಿಗೆ ಇಲ್ಲ.
Agno (ಹಿಂದಿನ Phidata) ನೀವು ಕನಿಷ್ಠ ಸಮಾರಂಭವನ್ನು ಬಯಸಿದಾಗ ನೀವು ಬಳಸುವ ಏಜೆಂಟ್ ಫ್ರೇಮ್ವರ್ಕ್. ಗ್ರಾಫ್ ನಿರ್ಮಾಪಕ, ಕ್ರೂ, ಕಾರ್ಯಪ್ರವಾಹವಿಲ್ಲ - ಕೇವಲ ಏಜೆಂಟ್, ಸಾಧನಗಳು ಮತ್ತು run() ವಿಧಾನವೇ ಇದೆ. ಸಾಧನಗಳು ಪೈಥಾನ್ callable ಗಳು. ಈ ಫ್ರೇಮ್ವರ್ಕ್ ಸಾಧನ ಬೆಂಬಲದೊಂದಿಗೆ LLMಗಳನ್ನು ಕರೆ ಮಾಡಲು, ಮೆಮೊರಿಯನ್ನು ನಿರ್ವಹಿಸಲು ಮತ್ತು ಸ್ಟ್ರೀಮಿಂಗ್ ಔಟ್ಪುಟ್ ಅನ್ನು ಉತ್ಪಾದಿಸಲು ಸಾಕಷ್ಟು ಸ್ಕಾಫೋಲ್ಡಿಂಗ್ ಅನ್ನು ಸೇರಿಸುತ್ತದೆ, ನಂತರ ನಿಮ್ಮ ಮಾರ್ಗದಿಂದ ಹೊರಗೆ ಹೋಗುತ್ತದೆ.
ಈ recipe ಕೂಡ ಅದೇ ತತ್ತ್ವವನ್ನು ಅನುಸರಿಸುತ್ತದೆ. ನಿಜವಾದ client ಅನ್ನು ಕರೆಯುವ ಒಂದು method ಅನ್ನು register ಮಾಡುವ ಸಣ್ಣ Toolkit subclass ಅನ್ನು ನೀವು ಬರೆಯುತ್ತೀರಿ - ಅದು ಇತರ ಎಲ್ಲ Agno tool ಗಳಂತೆ ಕಾಣುತ್ತದೆ ಮತ್ತು ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. instantiation ಹೊರತುಪಡಿಸಿ special setup ಏನೂ ಇಲ್ಲ, wire ಮಾಡಲು graph ಇಲ್ಲ, track ಮಾಡಲು adapter version ಇಲ್ಲ. ಸರಳತೆವೇ ಮುಖ್ಯ: graphs ಬೇಕಿದ್ದರೆ ನೀವು LangGraph ನಲ್ಲಿ ಇರುತ್ತಿದ್ದಿರಿ.
Agno ಅನ್ನು ಮತ್ತು ಕೋರ್ SDK ಅನ್ನು ಸ್ಥಾಪಿಸಿ. ಎರಡು ಕೀಗಳು.
ಜೋಡಿಸಲು blockchain0x Agno ಪ್ಯಾಕೇಜ್ ಇಲ್ಲ. ನೀವು Agno ಅನ್ನು (Python 3.10+, Phidata ಪುನಾಮೀಕರಣದ ನಂತರ 1.0+ ಸಾಲು) ಮತ್ತು ವಾಸ್ತವ blockchain0x ಕೋರ್ SDK ಅನ್ನು ಸ್ಥಾಪಿಸುತ್ತೀರಿ, ನಂತರ ಕೆಳಗಿನ ಟೂಲ್ಕಿಟ್ ಅನ್ನು ಬರೆಯುತ್ತೀರಿ. ನೀವು ಇನ್ನೂ phi.* ಆಮದುಗಳಲ್ಲಿ ಇದ್ದರೆ, ಮೊದಲಿಗೆ pip install -U agno ಅನ್ನು ಚಲಾಯಿಸಿ.
pip install agno blockchain0xexport OPENAI_API_KEY=sk-... export BLOCKCHAIN0X_API_KEY=sk_test_... # sk_test_ = Base Sepolia, sk_live_ = Base mainnet
OPENAI_API_KEY (ಅಥವಾ ನೀವು ಬಳಸುವ Agno-supported model ಗೆ ಸಮಾನವಾದುದು). BLOCKCHAIN0X_API_KEY ನಿಮ್ಮ dashboard ನಿಂದ ಬಂದಿರುವ sk_test_ testnet ಅಥವಾ sk_live_ mainnet key ಆಗಿದೆ; client ಇದನ್ನು environment ನಿಂದ ಓದುತ್ತದೆ. ನಿಮ್ಮ agent ಗೆ ಹಣವೂ ಬರುತ್ತಿದ್ದರೆ, webhook handler ಗೆ ಹೆಚ್ಚುವರಿಯಾಗಿ BLOCKCHAIN0X_WEBHOOK_SECRET ಬೇಕಾಗುತ್ತದೆ.
ಪಾವತಿ ಮಾಡುವ Toolkit, ಒಂದು Agent ಗೆ ಒಪ್ಪಿಸಲಾಗಿದೆ.
ಕೆಳಗೆ ಸಂಪೂರ್ಣ ಏಕೀಕರಣವಿದೆ. WalletTools send_usdc ಅನ್ನು ನೋಂದಾಯಿಸುವ Toolkit ಉಪವರ್ಗವಾಗಿದೆ, ಇದು ವಾಸ್ತವ blockchain0x ಕ್ಲೈಂಟ್ ಅನ್ನು ಕರೆ ಮಾಡುತ್ತದೆ. ಇದನ್ನು ಏಜೆಂಟ್ಗೆ ಸೇರಿಸಿ ಮತ್ತು run() ಕರೆ ಸಾಧನವನ್ನು ಕರೆದೊಯ್ಯುತ್ತದೆ. Agno ವಿಧಾನ ಸಹಿ ಮತ್ತು ಡಾಕ್ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಓದುತ್ತದೆ ಮತ್ತು ಶ್ರೇಣಿಯನ್ನು ನಿರ್ಮಿಸುತ್ತದೆ.
from agno.agent import Agent from agno.models.openai import OpenAIChat from agno.tools import Toolkit from blockchain0x import Client blockchain0x = Client() # reads BLOCKCHAIN0X_API_KEY from the environment # Wrap the real client in an Agno Toolkit. No dedicated package needed. class WalletTools(Toolkit): def __init__(self): super().__init__(name="wallet_tools") self.register(self.send_usdc) def send_usdc(self, agent_id: str, to: str, amount_wei: str) -> str: """Send a USDC payment from an agent wallet. amount_wei is USDC base units (6 decimals), so "10000" is 0.01 USDC. """ return str( blockchain0x.payments.create(body={"agentId": agent_id, "to": to, "amountWei": amount_wei}) ) agent = Agent( model=OpenAIChat(id="gpt-4o"), tools=[WalletTools()], instructions=["You pay vendor invoices in USDC within owner-set limits."], ) result = agent.run("Pay 0.01 USDC from agent agt_123 to 0xVendor for the dataset.") print(result.content)
When agent.run() executes, the model decides to pay, calls send_usdc, the SDK submits the transfer, and you get a transaction hash back. amount_wei is base units, so 0.01 USDC is "10000". A sk_test_ key keeps it on Base Sepolia until you switch to sk_live_. Register more methods on the toolkit - read a wallet, settle an invoice - the same way.
ಒಪ್ಪಿಗೆಯ ವೆಬ್ಹುಕ್ನೊಂದಿಗೆ ಒಳನೋಡುವ ಪಾವತಿಗಳನ್ನು ದೃಢೀಕರಿಸಿ.
ನಿಮ್ಮ ಏಜೆಂಟ್ USDC ಅನ್ನು RECEIVES ಮಾಡಿದರೆ, polling ಬದಲು ವೆಬ್ಹುಕ್ ಮೂಲಕ ದೃಢೀಕರಿಸಿ. ಪರಿಶೀಲನೆ ಸಹಾಯಕವು Node SDK ನಲ್ಲಿ ಸಾಗುತ್ತದೆ; Python ಸೇವೆಯಲ್ಲಿ ನೀವು ದಾಖಲೆ ಮಾಡಿದ HMAC ವಿರುದ್ಧ ಕೈಯಿಂದ ಪರಿಶೀಲಿಸುತ್ತೀರಿ, ಇದು ಸಹಾಯಕವು ಮಾಡುವುದೆಲ್ಲ. ಕೆಳಗಿನ FastAPI ಉದಾಹರಣೆ; ಒಂದೇ ಕೋಡ್ ಯಾವುದೇ ಅಸಿಂಕ್ Python ಫ್ರೇಮ್ವರ್ಕ್ನಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ.
import hmac, hashlib, os, time from fastapi import FastAPI, Request, HTTPException app = FastAPI() SECRET = os.environ["BLOCKCHAIN0X_WEBHOOK_SECRET"].encode() @app.post("/webhooks/payment") async def receive(request: Request): raw = await request.body() # RAW bytes - do not parse first sig = request.headers.get("X-Blockchain0x-Signature", "") ts = request.headers.get("X-Blockchain0x-Timestamp", "") parts = dict(p.split("=", 1) for p in sig.split(",") if "=" in p) t, v1 = parts.get("t", ts), parts.get("v1", sig) want = hmac.new(SECRET, t.encode() + b"." + raw, hashlib.sha256).hexdigest() if not hmac.compare_digest(want, v1) or abs(time.time() - int(t)) > 300: raise HTTPException(status_code=401) if request.headers.get("X-Blockchain0x-Event-Type") == "payment.received": await trigger_followup() # USDC landed - run the next step return {"ok": True}
algorithm ಎಂದರೆ t.rawBody string ಮೇಲೆ HMAC-SHA256, constant-time compare, ಮತ್ತು 300-second replay window. raw body ಅನ್ನು await request.body() ಮೂಲಕ read ಮಾಡಿ, ಎಂದಿಗೂ request.json() ಅನ್ನು re-serialized ಮಾಡಬೇಡಿ, ಏಕೆಂದರೆ ಅದು signature ಒಳಗೊಂಡ bytes ಅನ್ನು ಬದಲಾಯಿಸುತ್ತದೆ. ship ಮಾಡಲಾದ events payment.received, payment.sent, wallet.deployed, ಮತ್ತು webhook.test. ಹೆಚ್ಚಿನ follow-up ಕೆಲಸಕ್ಕಾಗಿ, job ಅನ್ನು enqueue ಮಾಡಿ (Celery, arq) ಮತ್ತು handler ಅನ್ನು block ಮಾಡದೇ ತಕ್ಷಣ 200 respond ಮಾಡಿ.
ನೀವು wrap ಮಾಡುತ್ತಿರುವ client open ಆಗಿದೆ. ಅದನ್ನು read ಮಾಡಿ.
ಕ್ಲೋನ್ ಮಾಡಲು ಯಾವುದೇ Agno starter package ಇಲ್ಲ - ಮೇಲಿನ recipe ಯೇ integration. blockchain0x SDKs GitHub ನಲ್ಲಿ open source ಆಗಿವೆ; ಈ recipe Python SDK (blockchain0x-python) ಅನ್ನು wrap ಮಾಡುತ್ತದೆ, ಮತ್ತು ಪೂರ್ಣ method surface docs ನಲ್ಲಿ ಇದೆ. toolkit methods ಗಾಗಿ reference ಆಗಿ ಅದನ್ನು ಓದಿ.
github.com/tosh-labs/blockchain0x-pythonಪೂರ್ಣ SDK method surface ಮತ್ತು scopes ಗಳನ್ನು the docs ನಲ್ಲಿ document ಮಾಡಲಾಗಿದೆ. Base Sepolia ವಿರುದ್ಧ sk_test_ key ನಿಂದ ಆರಂಭಿಸಿ, toolkit ನೀವು ನಿರೀಕ್ಷಿಸುವಂತೆ ಕೆಲಸ ಮಾಡಿದಾಗ sk_live_ ಗೆ switch ಮಾಡಿ.
ಆಗ್ನೋ-ನಿರ್ದಿಷ್ಟವಾಗಿ ಗಮನಿಸುವ ಐದು ವಿಷಯಗಳು.
Agno ಅನ್ನು ಏಕೀಕರಿಸಲು ಹೆಚ್ಚು ಶುದ್ಧ ಏಜೆಂಟ್ ಫ್ರೇಮ್ವರ್ಕ್ಗಳಲ್ಲಿ ಒಂದಾಗಿದೆ, ಆದರೆ ಇದಕ್ಕೆ ತನ್ನದೇ ಆದ ಸಮಸ್ಯೆಗಳಿವೆ - ವಿಶೇಷವಾಗಿ Phidata ಪುನಾಮಕರಣ ಮತ್ತು ಮಾರ್ಕ್ಡೌನ್ ರೆಂಡರಿಂಗ್ ಬಗ್ಗೆ.
Agno ಪ್ಯಾಕೇಜ್ ಇಲ್ಲ - ನೀವು SDK ಅನ್ನು ಟೂಲ್ಕಿಟ್ನಲ್ಲಿ ಲುಪ್ತಗೊಳಿಸುತ್ತೀರಿ
Blockchain0x LangChain ಮತ್ತು CrewAI ಗೆ ಅಡಾಪ್ಟರ್ಗಳನ್ನು ಮತ್ತು MCP ಸರ್ವರ್ ಅನ್ನು ಕಳುಹಿಸುತ್ತದೆ; ವಿಶೇಷ Agno ಪ್ಯಾಕೇಜ್ ಇಲ್ಲ. ಮೇಲಿನ ವಿಧಾನವು ಮಾರ್ಗವಾಗಿದೆ: ವಾಸ್ತವ blockchain0x ಕ್ಲೈಂಟ್ ಅನ್ನು ಕರೆ ಮಾಡುವ ವಿಧಾನವನ್ನು ನೋಂದಾಯಿಸುವ Toolkit ಉಪವರ್ಗ. Agno ವಿಧಾನದ ಸಹಿ ಮತ್ತು ಡಾಕ್ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಓದುತ್ತದೆ ಮತ್ತು ಸಾಧನದ ಶ್ರೇಣಿಯನ್ನು ನಿರ್ಮಿಸುತ್ತದೆ, ಆದ್ದರಿಂದ ಡಾಕ್ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಶುದ್ಧವಾಗಿರಿಸಿ.
Phidata to Agno ಸ್ಥಳಾಂತರ ಗೊಂದಲ
Agno 2024ರಲ್ಲಿ Phidata ನಿಂದ ಪುನರ್ನಾಮೀಕರಣಗೊಂಡಿತು. phi.agent ಅಥವಾ phi.tools ನಿಂದ ಆಮದು ಮಾಡುತ್ತಿರುವ ಹಳೆಯ ಕೋಡ್ಬೇಸ್ಗಳು ಇನ್ನೂ ಹೊಂದಾಣಿಕೆಯ ಶಿಮ್ ಮೂಲಕ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ, ಆದರೆ agno.* ಆಮದುಗಳು ಪ್ರಸ್ತುತವು. ಈ ರೆಸಿಪಿ agno.* ಅನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ಬಳಸುತ್ತದೆ; ನಿಮ್ಮ ಕೋಡ್ ಇನ್ನೂ phi.* ಆಮದುಗಳಲ್ಲಿ ಇದ್ದರೆ, pip install -U agno ಅನ್ನು ನಿರ್ವಹಿಸಿ ಮತ್ತು Toolkit ಅನ್ನು ಸೇರಿಸುವ ಮೊದಲು ಆಮದು ಮಾರ್ಗಗಳನ್ನು ಬದಲಾಯಿಸಿ.
ಮೌಲ್ಯಗಳು USDC ಆಧಾರ ಘಟಕಗಳಾಗಿವೆ, ಸ್ಟ್ರಿಂಗ್ಗಳಂತೆ
payments.create takes amountWei: a string of USDC base units (6 decimals), so 0.01 USDC is "10000" and 5 USDC is "5000000". Type the method argument as str. It also does not retry by default and can answer 503 until the chain adapter is wired for your network - return a clear message rather than letting the agent loop.
ಸಿಂಕ್ ವಿರುದ್ಧ ಅಸಿಂಕ್ ಓಡಿಸು
Agno agent.run() (sync) ಮತ್ತು agent.arun() (async) ಅನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ. ಪ್ರತಿ ಏಜೆಂಟ್ಗಾಗಿ ಒಂದೇ ಮೋಡ್ ಆಯ್ಕೆ ಮಾಡಿ - agent.run() ಅನ್ನು ಕರೆ ಮಾಡಿ ಮತ್ತು ಫಲಿತಾಂಶವನ್ನು ನಿರೀಕ್ಷಿಸಲು ಪ್ರಯತ್ನಿಸಿ, ನೀವು ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ನಿರೀಕ್ಷಿಸುತ್ತಿದ್ದಾಗ ನೀವು ಒಂದು coroutine ಅನ್ನು ಪಡೆಯುತ್ತೀರಿ. Toolkit ಒಳಗೆ blockchain0x ಕರೆ ಸಮಕಾಲಿಕವಾಗಿದೆ; ನೀವು ಅಸಿಂಕ್ರೋನಸ್ ಮಾರ್ಗದಲ್ಲಿ ಇದ್ದರೆ ಮತ್ತು ವಾಸ್ತವ ಪ್ರಮಾಣವನ್ನು ಚಲಿಸುತ್ತಿದ್ದರೆ, ಘಟನೆ ಲೂಪ್ ಪ್ರತಿಕ್ರಿಯಾತ್ಮಕವಾಗಿರಲು asyncio.to_thread ಅನ್ನು ಬಳಸಿಕೊಳ್ಳಿ.
Webhooks ಅನ್ನು raw body ವಿರುದ್ಧ verify ಮಾಡಿ
ನಿಮ್ಮ ಏಜೆಂಟ್ USDC ಅನ್ನು RECEIVES ಮಾಡಿದರೆ, polling ಮೂಲಕ ಅಲ್ಲ, ವೆಬ್ಹುಕ್ ಮೂಲಕ ದೃಢೀಕರಿಸಿ. RAW ವಿನಂತಿ ಬೈಟ್ಸ್ (await request.body()) ಮೇಲೆ ಸಹಿ ಪರಿಶೀಲಿಸಿ, request.json() ಪುನಃ ಪುನರ್ಸೇರಿಸಲಾಗುವುದಿಲ್ಲ, ಏಕೆಂದರೆ HMAC ನಿಖರವಾದ ಬೈಟ್ಸ್ ಅನ್ನು ಒಳಗೊಂಡಿದೆ. ಇದು 300-ಸೆಕೆಂಡು ಪುನರಾವೃತ್ತ ಕಿಟಕಿಯೊಂದಿಗೆ HMAC-SHA256 ಆಗಿದೆ. ಕೆಳಗಿನ ಹ್ಯಾಂಡ್ಲರ್ ಸಂಪೂರ್ಣ ವಿಷಯ.