import gradio as gr import requests import json import os from datetime import datetime GATEWAY_URL = os.environ.get("NULLSTATE_GATEWAY_URL", "https://greensol.me/nullstate") def fetch_status(): try: r = requests.get(f"{GATEWAY_URL}/health", timeout=10, verify=False) data = r.json() return ( f"Tasks: {data.get('tasks', 'N/A')}\n" f"Ledger: {data.get('ledger', 'N/A')}\n" f"Balance: ${data.get('balance', '0.00')} USDC\n" f"AI: {data.get('ai_model', 'N/A')}\n" f"Pricing: {data.get('pricing', 'N/A')}" ) except Exception as e: return f"Gateway unreachable: {e}" def get_kya_challenge(): try: r = requests.get(f"{GATEWAY_URL}/kya/challenge", timeout=10, verify=False) return r.text except Exception as e: return f"Error: {e}" def submit_solution(task_id: str, solution: str): try: r = requests.post( f"{GATEWAY_URL}/mcp", json={ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "submit_solution", "arguments": {"task_id": task_id, "solution": solution}} }, timeout=15, verify=False ) return json.dumps(r.json(), indent=2) except Exception as e: return f"Error: {e}" def query_intelligence(prompt: str): try: r = requests.post( f"{GATEWAY_URL}/mcp", json={ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "get_intelligence", "arguments": {"prompt": prompt}} }, timeout=30, verify=False ) return json.dumps(r.json(), indent=2) except Exception as e: return f"Error: {e}" with gr.Blocks(theme=gr.themes.Soft(primary_hue="green"), title="NullState Gateway") as demo: gr.Markdown("""# ⚡ NullState Gateway **Payment Infrastructure for AI Agents** — x402 · AP2 · MCP · KYA """) with gr.Tab("Status"): status_btn = gr.Button("Refresh Status", variant="primary") status_output = gr.Textbox(label="Gateway Health", lines=6) status_btn.click(fn=fetch_status, outputs=status_output) with gr.Tab("KYA Challenge"): kya_btn = gr.Button("Get KYA Challenge", variant="primary") kya_output = gr.Textbox(label="Challenge Response", lines=8) kya_btn.click(fn=get_kya_challenge, outputs=kya_output) with gr.Tab("Submit Solution"): task_id = gr.Textbox(label="Task ID", placeholder="task_abc123") solution = gr.Textbox(label="Solution", lines=4, placeholder="Your solution here...") submit_btn = gr.Button("Submit", variant="primary") submit_output = gr.Textbox(label="Response", lines=6) submit_btn.click(fn=submit_solution, inputs=[task_id, solution], outputs=submit_output) with gr.Tab("Query AI"): prompt = gr.Textbox(label="Prompt", lines=3, placeholder="Ask NullState AI...") query_btn = gr.Button("Query", variant="primary") query_output = gr.Textbox(label="Response", lines=8) query_btn.click(fn=query_intelligence, inputs=[prompt], outputs=query_output) gr.Markdown("""--- Built with ❤️ by [NullState](https://greensol.me/nullstate) — Open-source MIT """) demo.launch()