Upload demo.py
Browse files
demo.py
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""
|
| 3 |
+
BuilderBrain Hackathon Demo
|
| 4 |
+
============================
|
| 5 |
+
|
| 6 |
+
Run this script to demonstrate the full BuilderBrain pipeline:
|
| 7 |
+
1. Fetch live Polymarket data
|
| 8 |
+
2. Generate reasoning traces with Kelly sizing
|
| 9 |
+
3. Route via builder codes
|
| 10 |
+
4. Settle via Arc nanopayments
|
| 11 |
+
|
| 12 |
+
Usage:
|
| 13 |
+
python demo.py
|
| 14 |
+
|
| 15 |
+
Expected output:
|
| 16 |
+
- 20-50 trade signals with reasoning traces
|
| 17 |
+
- Portfolio stats with risk metrics
|
| 18 |
+
- Audit log ready for on-chain anchoring
|
| 19 |
+
"""
|
| 20 |
+
|
| 21 |
+
import json
|
| 22 |
+
from builderbrain import BuilderBrain
|
| 23 |
+
|
| 24 |
+
|
| 25 |
+
def main():
|
| 26 |
+
print("=" * 70)
|
| 27 |
+
print(" BuilderBrain — Agentic Prediction Market Intelligence")
|
| 28 |
+
print(" Agora Agents Hackathon | Canteen × Circle")
|
| 29 |
+
print("=" * 70)
|
| 30 |
+
|
| 31 |
+
# Initialize with $10k paper bankroll
|
| 32 |
+
brain = BuilderBrain(
|
| 33 |
+
bankroll_usd=10000,
|
| 34 |
+
paper_trade=True,
|
| 35 |
+
builder_code="builderbrain_demo_v1",
|
| 36 |
+
min_edge=0.03, # 3% minimum edge
|
| 37 |
+
max_positions=15,
|
| 38 |
+
)
|
| 39 |
+
|
| 40 |
+
# Run 3 cycles to simulate 48h of operation
|
| 41 |
+
for i in range(3):
|
| 42 |
+
print(f"\n{'─' * 70}")
|
| 43 |
+
print(f" Cycle {i+1}/3 — Simulating live market scanning...")
|
| 44 |
+
print(f"{'─' * 70}")
|
| 45 |
+
|
| 46 |
+
signals = brain.run_cycle()
|
| 47 |
+
|
| 48 |
+
# Print top signal from this cycle
|
| 49 |
+
if signals:
|
| 50 |
+
top = max(signals, key=lambda s: s.expected_return)
|
| 51 |
+
print(f"\n 🎯 Top Signal:")
|
| 52 |
+
print(f" Market: {top.market_id}")
|
| 53 |
+
print(f" Side: {top.side} | Size: {top.size_fraction:.2%} bankroll")
|
| 54 |
+
print(f" Expected Return: {top.expected_return:.4f}")
|
| 55 |
+
print(f" Confidence: {top.confidence:.1%}")
|
| 56 |
+
print(f" Urgency: {top.urgency}")
|
| 57 |
+
print(f" Trace Hash: {top.reasoning_trace.reasoning_hash}")
|
| 58 |
+
|
| 59 |
+
# Final stats
|
| 60 |
+
print(f"\n{'=' * 70}")
|
| 61 |
+
print(" FINAL PORTFOLIO STATS")
|
| 62 |
+
print(f"{'=' * 70}")
|
| 63 |
+
|
| 64 |
+
stats = brain.get_portfolio_stats()
|
| 65 |
+
print(json.dumps(stats, indent=2, default=str))
|
| 66 |
+
|
| 67 |
+
# Export audit log
|
| 68 |
+
audit_file = brain.export_audit_log("builderbrain_audit.json")
|
| 69 |
+
print(f"\n 📄 Audit log exported: {audit_file}")
|
| 70 |
+
|
| 71 |
+
# Print top 5 signals
|
| 72 |
+
print(f"\n{'=' * 70}")
|
| 73 |
+
print(" TOP 5 SIGNALS (by expected return)")
|
| 74 |
+
print(f"{'=' * 70}")
|
| 75 |
+
|
| 76 |
+
for i, sig in enumerate(brain.get_top_signals(5), 1):
|
| 77 |
+
print(f"\n #{i} {sig.market_id}")
|
| 78 |
+
print(f" {sig.side} @ {sig.size_fraction:.2%} bankroll")
|
| 79 |
+
print(f" E[return]: {sig.expected_return:.4f} | Conf: {sig.confidence:.1%}")
|
| 80 |
+
print(f" Trace: {sig.reasoning_trace.reasoning_hash}")
|
| 81 |
+
print(f" Arguments: {len(sig.reasoning_trace.arguments)}")
|
| 82 |
+
print(f" Risks: {len(sig.reasoning_trace.risk_factors)}")
|
| 83 |
+
|
| 84 |
+
print(f"\n{'=' * 70}")
|
| 85 |
+
print(" Demo complete. Ready for hackathon submission.")
|
| 86 |
+
print(f"{'=' * 70}")
|
| 87 |
+
|
| 88 |
+
|
| 89 |
+
if __name__ == "__main__":
|
| 90 |
+
main()
|