Pydantic AI చెల్లింపు ఇంటిగ్రేషన్.
Pydantic AI ప్యాకేజీ లేదు, మరియు మీకు ఒకటి అవసరం లేదు. @agent.tool_plainతో ఒక టైప్డ్ ఫంక్షన్ను నమోదు చేయండి, నిజమైన blockchain0x క్లయింట్ను కాల్ చేయండి, మరియు మీ ఏజెంట్ Baseలో USDCని కదిలించగలదు.
Pydantic AI కోసం ప్రత్యేక package లేదు, మీకు అది అవసరమూ లేదు. Pydantic AI తో function ను validated tool గా మారుస్తుంది, కాబట్టి మీరు నిజమైన Python client ను typed function లో wrap చేస్తారు, అప్పుడు agent USDC పంపగలదు, invoices settle చేయగలదు, wallets చదవగలదు. ఇది OpenAI, Anthropic, Google, Mistral, Groq, మరియు ఇతర అన్ని Pydantic AI providers లో పనిచేస్తుంది, ఎందుకంటే tool model ను కాకుండా HTTP API ను పిలుస్తుంది. Payments Base పై settle అవుతాయి.
Pydantic AI యొక్క టైపింగ్ విజయం. చెల్లింపుల కోసం కూడా దీన్ని ఉపయోగించండి.
Pydantic AI యొక్క మొత్తం ఉద్దేశ్యం బలమైన టైపింగ్: ఏజెంట్ ఇన్పుట్లు టైప్ చేయబడ్డాయి, అవుట్పుట్లు టైప్ చేయబడ్డాయి, ఆధారాలు టైప్ చేయబడ్డాయి, రీట్రీస్ టైప్ చేయబడ్డాయి. ఫ్రేమ్వర్క్ అసమర్థమైన డేటాను సరిహద్దులో తిరస్కరిస్తుంది, LLM కాల్ ద్వారా అది వ్యాప్తి చెందకుండా. మీ వాలెట్ సాధనం అచ్చంగా అదే మీద ఆధారపడుతుంది - ఆర్గ్యుమెంట్లను టైప్లతో ప్రకటించండి, మరియు Pydantic AI మోడల్ను కాల్ చేయడానికి అనుమతించబడే ముందు సంతకం మరియు డాక్స్ట్రింగ్ నుండి ధృవీకరించిన స్కీమాను నిర్మిస్తుంది.
ప్రాయోగిక ప్రయోజనం: మోడల్ base-unit స్ట్రింగ్ బదులు ఫ్లోట్తో send_usdcను కాల్ చేయడానికి ప్రయత్నిస్తే, విఫలం Pydantic యొక్క ధృవీకరణ స్థాయిలో జరుగుతుంది, మాకు ఏ HTTP కాల్కు ముందు. మీరు స్పష్టమైన ValidationErrorని ఉపయోగకరమైన సందేశంతో చూస్తారు, API నుండి గూఢమైన ఫీల్డ్ పాత్లతో 422 కంటే. ఇది మీకు ఇక్కడ క్లయింట్ను స్వయంగా చుట్టడానికి పూర్తి కారణం - మీరు వైర్కు మొత్తం టైపింగ్ను ఉంచుతారు.
Pydantic AI మరియు కోర్ SDKని ఇన్స్టాల్ చేయండి. రెండు కీలు.
చేర్చడానికి blockchain0x Pydantic AI ప్యాకేజీ లేదు. మీరు Pydantic AIని (Python 3.10+) మరియు నిజమైన blockchain0x కోర్ SDKని ఇన్స్టాల్ చేస్తారు, తరువాత క్రింద ఫంక్షన్ను రాస్తారు. అది మొత్తం ఆధారిత జాబితా.
pip install pydantic-ai blockchain0xexport OPENAI_API_KEY=sk-... export BLOCKCHAIN0X_API_KEY=sk_test_... # sk_test_ = Base Sepolia, sk_live_ = Base mainnet
OPENAI_API_KEY (లేదా మీరు use చేసే provider కి సమానమైనది). BLOCKCHAIN0X_API_KEY అనేది మీ dashboard నుంచి వచ్చిన sk_test_ testnet లేదా sk_live_ mainnet key; client దాన్ని environment నుండి reads చేస్తుంది. మీ agent కు money కూడా వస్తే, webhook handler కు అదనంగా BLOCKCHAIN0X_WEBHOOK_SECRET అవసరం.
చెల్లించే ఒక టైప్డ్ ఫంక్షన్, సాధనంగా నమోదు చేయబడింది.
ఇది మొత్తం integration. send_usdc real blockchain0x client ను call చేస్తుంది; @agent.tool_plain type hints మరియు docstring ఆధారంగా built schema తో దాన్ని register చేస్తుంది. దీన్ని run చేయండి, అప్పుడు agent Base లో USDC ను move చేస్తుంది, మరియు call ముందు arguments validate అవుతాయి.
from pydantic_ai import Agent from blockchain0x import Client blockchain0x = Client() # reads BLOCKCHAIN0X_API_KEY from the environment agent = Agent( "openai:gpt-4o", system_prompt="You pay vendor invoices in USDC within owner-set limits.", ) # Register a plain function as a tool. No dedicated package needed. @agent.tool_plain def send_usdc(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}) ) result = agent.run_sync( "Pay 0.01 USDC from agent agt_123 to 0xVendor for the dataset." ) print(result.output)
When the agent decides to pay, it 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_. Want a typed result object instead of a string? Set the agent's output_type to your own Pydantic model and return it from the tool. Add read and settle functions the same way.
సంతకం చేసిన వెబ్హుక్తో ఇన్బౌండ్ చెల్లింపులను నిర్ధారించండి.
మీ ఏజెంట్ కూడా USDCని అందుకుంటే, దాన్ని పోలింగ్ చేయకుండా వెబ్హుక్తో ధృవీకరించండి. ధృవీకరించు సహాయకుడు Node SDKలో షిప్పింగ్ చేస్తుంది; ఒక Python సేవలో మీరు డాక్యుమెంటెడ్ HMACకు వ్యతిరేకంగా చేతితో ధృవీకరించాలి. మీరు టైప్డ్ ఈవెంట్లను కావాలనుకుంటే, మీ స్వంత పాయ్డాంటిక్ మోడల్ను నిర్వచించండి మరియు సంతకం తనిఖీ చేసిన తర్వాత మోడల్_validate_json క/raw బాడీని చేయండి - టైపింగ్ జోడించడానికి మీది.
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}
అల్గోరిథం t.rawBody అనే స్ట్రింగ్పై HMAC-SHA256, స్థిర-సమయాన్ని పోల్చడం, మరియు 300-సెకన్ల రీప్లే విండో. సంతకం కవర్ చేసే బైట్స్ను మార్చడం వల్ల await request.body() ద్వారా కచ్చితమైన శరీరాన్ని చదవండి, ఎప్పుడూ request.json() మళ్లీ సీరియలైజ్ చేయకండి. పంపిన ఈవెంట్లు payment.received, payment.sent, wallet.deployed, మరియు webhook.test; విభజించడానికి X-Blockchain0x-Event-Type హెడ్డర్ పై కుదించండి.
మీరు ముడివేస్తున్న క్లయింట్ ఓపెన్ ఉంది. దీన్ని చదవండి.
clone చేయడానికి ప్రత్యేక Pydantic AI starter package లేదు - పై recipe నే integration. blockchain0x SDKs GitHub లో open source గా ఉన్నాయి; ఈ recipe Python SDK (blockchain0x-python) ను wrap చేస్తుంది, పూర్తి method surface docs లో ఉంది. function bodies కోసం reference గా చదవండి.
github.com/tosh-labs/blockchain0x-pythonపూర్తి SDK method surface మరియు scopes the docs లో documented గా ఉన్నాయి. Base Sepolia పై sk_test_ key తో start చేయండి, తర్వాత function మీరు ఆశించినట్లు పనిచేసినప్పుడు sk_live_ కి switch చేయండి.
గమనించాల్సిన ఐదు Pydantic AI-సంబంధిత చిక్కులు.
Pydantic AI యొక్క బలమైన టైపింగ్ చాలా ఇంటిగ్రేషన్ బగ్లను సరిహద్దులో పట్టుకుంటుంది; ఇవి కొన్ని మాత్రమే పరిగెత్తుతాయి.
Pydantic AI ప్యాకేజీ లేదు - మీరు ఒక సాధనాన్ని నమోదు చేస్తారు
Blockchain0x LangChain మరియు CrewAI కోసం అడాప్టర్లు మరియు MCP సర్వర్ను పంపిస్తుంది; ప్రత్యేకమైన Pydantic AI ప్యాకేజీ లేదు. పై వంటకం మార్గం: వాస్తవ blockchain0x క్లయింట్ను కాల్ చేసే @agent.tool_plain తో అలంకరించిన సాధారణ టైప్డ్ ఫంక్షన్. Pydantic AI సంతకం మరియు డాక్స్ట్రింగ్ను చదివి ఒక ధృవీకరించిన సాధనం స్కీమాను నిర్మిస్తుంది, ఇది మీరు Pydantic AI కోసం వచ్చిన టైపింగ్ విజయం.
మొత్తాన్ని ఒక స్ట్రింగ్గా ఉంచండి; Pydantic రేఖను పట్టుకోనివ్వండి
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 tool argument as str and Pydantic AI rejects a float at the boundary with a clear ValidationError, before any HTTP call. That is the whole point of doing this in Pydantic AI - the malformed value never reaches the API.
send_payment ముందుగా 503ను సమాధానం ఇవ్వవచ్చు
payments.create డిఫాల్ట్గా పునరావృతం చేయదు మరియు మీ నెట్వర్క్ కోసం చైన్ అడాప్టర్ కేబుల్ చేయబడేవరకు 503ను తిరిగి ఇవ్వవచ్చు. మీ టూల్లో పొరపాటును పట్టుకోండి మరియు మోడల్ చర్య తీసుకునే స్పష్టమైన సందేశాన్ని తిరిగి ఇవ్వండి, ఏజెంట్ చక్రం చేయకుండా. ఆటో-మింటెడ్ ఐడెంపోటెన్సీ కీ ఒక మాన్యువల్ రిట్రై డబుల్-చెల్లించదు.
ప్రొవైడర్-ప్రిఫిక్స్ మోడల్ స్ట్రింగ్స్
Pydantic AI ప్రొవైడర్-ప్రిఫిక్స్ మోడల్ స్ట్రింగ్స్ను ఉపయోగిస్తుంది: 'openai:gpt-4o', 'anthropic:claude-3-5-sonnet-latest', 'google-gla:gemini-1.5-pro'. ప్రిఫిక్స్ను వదిలిస్తే 'unknown model' అనే సంకేతం తప్పు వస్తుంది. మీ సాధనం ప్రొవైడర్-అగ్నోస్టిక్, ఎందుకంటే ఇది మోడల్ను కాకుండా HTTP APIని కాల్ చేస్తుంది - ప్రిఫిక్స్ను స్వేచ్ఛగా మార్చండి మరియు వాలెట్ ఫంక్షన్ మారదు.
tool_plain vs tool (RunContext)
@agent.tool_plain ను ఉపయోగించండి, ఫంక్షన్ రన్ నుండి ఏమీ అవసరం లేకపోతే, పై విధంగా. మీరు టూల్ లో ఏజెంట్ యొక్క ఆధారాలను (ప్రతి అభ్యర్థన క్లయింట్ ఐడి, ఖర్చు పరిమితి) కావాలనుకుంటే, @agent.tool ను ఉపయోగించి మొదటి ఆర్గుమెంట్ను ctx: RunContext[Deps] గా ప్రకటించండి, ctx.deps ను చదవడానికి. రెండింటిని కలపడం - tool_plain పై ctx ఆర్గుమెంట్ను ప్రకటించడం - నమోదు సమయంలో TypeError ను పెంచుతుంది.