Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
254 commits
Select commit Hold shift + click to select a range
4e3391d
Add security documentation about private key handling
1bcMax Dec 29, 2025
806fc77
docs: fix model naming format and add arbitrage example
1bcMax Dec 30, 2025
a38c5fa
fix: remove free tier model from README
1bcMax Dec 30, 2025
4833da9
fix: rename BLOCKRUN_WALLET_KEY to BASE_CHAIN_WALLET_KEY
1bcMax Dec 30, 2025
ff21848
chore: rename env var to BASE_CHAIN_WALLET_KEY
1bcMax Dec 30, 2025
bac9f55
Fix GitHub repository URL (blockrun → BlockRunAI)
1bcMax Dec 31, 2025
cda152f
Update env var to BLOCKRUN_WALLET_KEY for consistency
1bcMax Jan 5, 2026
0bdf81e
Update model list with all available providers
1bcMax Jan 5, 2026
1881ede
Add GitHub Actions to run test suite (#1)
achiurizo Jan 7, 2026
e06a159
Add wallet management with EIP-681 QR codes
1bcMax Jan 13, 2026
e9099c5
Fix black formatting
1bcMax Jan 13, 2026
e65d410
Add standalone list_models() and list_image_models() functions
1bcMax Jan 13, 2026
81553d1
Fix UX issues: auto-create wallet, add get_balance(), export generate…
1bcMax Jan 15, 2026
8a7a9b2
Fix black formatting
1bcMax Jan 15, 2026
59a6118
Remove unused SearchParameters import
1bcMax Jan 15, 2026
af2557f
v0.3.5: Add setup_agent_wallet(), remove auto-wallet from LLMClient
1bcMax Jan 15, 2026
a816e4d
Add status() function for one-command verification
1bcMax Jan 15, 2026
4e05c5a
Fix CI: formatting and test alignment
1bcMax Jan 15, 2026
ebaaf3b
v0.3.7: Add RPC fallback for reliable balance checks
1bcMax Jan 18, 2026
69528ce
Add AGENTS.md for AI coding agents
1bcMax Jan 20, 2026
1514539
Increase timeout for Live Search requests
1bcMax Jan 20, 2026
1888e32
Fix black formatting for CI compatibility
1bcMax Jan 21, 2026
b1a54c1
Pin black version for consistent CI formatting
1bcMax Jan 21, 2026
b833a87
Update model list to match actual supported models
1bcMax Jan 22, 2026
827a2af
Add testnet support for Base Sepolia
1bcMax Jan 23, 2026
670b17b
Add testnet support for Base Sepolia (chain 84532)
1bcMax Jan 23, 2026
3f3b540
Add network-specific EIP-712 domain name for USDC
1bcMax Jan 23, 2026
8998604
Fix testnet network fallback in payment creation
1bcMax Jan 27, 2026
20c2e13
Bump version to 0.3.8
1bcMax Jan 27, 2026
c33b27a
Remove breakdown field from cost types
1bcMax Jan 28, 2026
c284a96
Add XRPL chain support via xrpl_client() convenience functions
1bcMax Jan 28, 2026
8a78a2d
Update README: Base as primary chain, add XRPL support docs
1bcMax Jan 28, 2026
2ecc719
Bump version to 0.3.9 - XRPL chain support
1bcMax Jan 28, 2026
c3302de
Fix black formatting in __init__.py
1bcMax Jan 28, 2026
69c3385
feat: add User-Agent header for client tracking in server logs
1bcMax Feb 3, 2026
4d5cd55
fix: resolve circular import for User-Agent version string
1bcMax Feb 4, 2026
372da60
fix: format client.py with black
1bcMax Feb 5, 2026
9f15120
fix: remove unused Field import (ruff F401)
1bcMax Feb 5, 2026
ae72313
feat: add smart_chat() with ClawRouter integration
1bcMax Feb 14, 2026
ad71358
docs: add Claude Opus 4.6, GPT-5.2 Codex, and Moonshot Kimi K2.5 to v…
1bcMax Feb 15, 2026
0342d5b
feat: sync models with API - add xai/moonshot/nvidia providers, updat…
1bcMax Feb 18, 2026
646ec15
fix: format router.py with black
1bcMax Feb 18, 2026
2d82bfb
Remove XRPL support - use blockrun-llm-xrpl instead
1bcMax Feb 20, 2026
32913ef
Fix black formatting and ruff linting
1bcMax Feb 20, 2026
bdbdb07
Update to Gemini 3.1 models in ClawRouter
1bcMax Feb 21, 2026
5033a88
chore: sync models with API — rename gemini-3.1-pro-preview, add mini…
1bcMax Feb 27, 2026
7abbb19
feat: add optional Solana dependencies to pyproject.toml
1bcMax Feb 27, 2026
79003ba
feat: add Solana wallet utilities
1bcMax Feb 27, 2026
3879d49
feat: add create_solana_payment_payload to x402
1bcMax Feb 27, 2026
cfde6e5
feat: add SolanaLLMClient for Solana USDC payments
1bcMax Feb 27, 2026
6762554
feat: export SolanaLLMClient and bump to 0.5.0
1bcMax Feb 27, 2026
5d36413
docs: add Solana section to README
1bcMax Feb 27, 2026
929dd94
feat: add search, image editing, and X/Twitter endpoints (v0.6.0)
1bcMax Mar 12, 2026
7c81645
fix: resolve ruff lint errors (split multi-imports)
1bcMax Mar 12, 2026
ef25678
ci: install solana extras to fix Solana test failures
1bcMax Mar 12, 2026
b8cd834
docs: clarify install extras in README
1bcMax Mar 12, 2026
cb8787d
feat: export Solana wallet utilities and bump to v0.6.1
1bcMax Mar 12, 2026
78b9a0c
feat: add 12 new X/Twitter endpoints from AttentionVC (v0.7.0)
1bcMax Mar 13, 2026
14632ee
style: fix black formatting
1bcMax Mar 13, 2026
dcb1985
fix: resolve ruff F821 with TYPE_CHECKING import
1bcMax Mar 13, 2026
32931f8
fix: use persistent httpx client and add 502/503 auto-retry
1bcMax Mar 13, 2026
0a171e3
chore: bump version to 0.7.1
1bcMax Mar 13, 2026
be73e2f
feat: add get_balance() to SolanaLLMClient for API parity with LLMClient
1bcMax Mar 13, 2026
987a8a8
feat: local response archive + cost logging for all paid calls (v0.7.4)
1bcMax Mar 13, 2026
7cd81c0
fix: correct Associated Token Program ID for Solana payments (#2)
notorious-d-e-v Mar 13, 2026
0f8e234
chore: bump to v0.7.5 (includes Solana ATA + v0 signing fix)
1bcMax Mar 13, 2026
517355d
feat: replace manual Solana x402 with official x402 SDK (v0.8.0)
1bcMax Mar 13, 2026
8315a1e
ci: fix Python 3.9 CI failures (x402 requires >=3.10)
1bcMax Mar 13, 2026
173d906
fix: resolve black and ruff lint errors in CI
1bcMax Mar 13, 2026
9f2503c
fix: remove base58 dependency, use solders native encoding
1bcMax Mar 13, 2026
ab71c77
chore: bump to v0.8.1
1bcMax Mar 13, 2026
f6d6181
fix: support 32-byte seed keys and scan third-party wallet providers
Mar 14, 2026
2e3d603
feat: add Predexon prediction market methods (pm, pm_query) with GET …
1bcMax Mar 17, 2026
0573d69
docs: add MiniMax M2.7 to model pricing table
1bcMax Mar 19, 2026
73d1f77
feat: GEO optimize README with definition, badges, and FAQ
1bcMax Mar 21, 2026
21a8c8f
docs: add agent setup, wallet scanning, caching, cost logging sections
1bcMax Mar 23, 2026
25a701e
feat: add AnthropicClient — use official Anthropic SDK with BlockRun …
1bcMax Mar 23, 2026
7ea5d7b
feat: add AnthropicClient with x402 payments, bump 0.9.0
1bcMax Mar 23, 2026
f20a33e
docs: add GPT-5.4 Nano, Gemini 3.1 Flash Lite to model tables
1bcMax Mar 23, 2026
62f75de
feat: v0.10.0 — major model overhaul, 10 NVIDIA free models, router u…
1bcMax Mar 24, 2026
5105dd6
feat: v0.11.0 — add Exa web search methods to SolanaLLMClient
1bcMax Mar 31, 2026
f41d88b
docs: add Exa web search section to README
1bcMax Mar 31, 2026
b0d9483
test: add Solana/Exa E2E integration tests
1bcMax Mar 31, 2026
53bb6ed
docs: add Exa E2E test note for QA
1bcMax Mar 31, 2026
0f44625
fix: black/ruff formatting in test_production_api.py
1bcMax Mar 31, 2026
c7599f0
add gstack-style project docs: CLAUDE.md, CONTRIBUTING.md, CHANGELOG.…
1bcMax Apr 6, 2026
3965f0b
feat: add MusicClient and cogview-4 support
1bcMax Apr 7, 2026
e8837b7
feat: VideoClient + Grok Imagine models + GCS-backed image response f…
1bcMax Apr 17, 2026
0646f99
style: apply black formatting (CI-required)
1bcMax Apr 20, 2026
b19f6dc
docs: add Kimi K2.6 to model table
1bcMax Apr 20, 2026
50c96da
feat: 0.14.0 — SearchClient, XClient, PriceClient + type additions
1bcMax Apr 21, 2026
9651230
docs: correct PriceClient gating — only stocks are paid
1bcMax Apr 21, 2026
55432d4
docs: add SearchClient, PriceClient sections to README
1bcMax Apr 21, 2026
e3de878
feat: NVIDIA free-tier refresh (0.14.1)
1bcMax Apr 22, 2026
078563c
docs(router): fix stale model ID in smart_chat docstring example
1bcMax Apr 23, 2026
164b37d
feat: add gpt-image-2 + 3 Seedance video models (0.15.0)
1bcMax Apr 23, 2026
e784977
feat(video): async submit + poll flow (0.16.0)
1bcMax Apr 23, 2026
491d0fb
fix(image): bump default timeout 120s -> 200s to match server cap (#5)
1bcMax Apr 25, 2026
c85fcef
feat: promote openai/gpt-5.5 to flagship (0.17.0)
1bcMax Apr 25, 2026
b7235e0
feat(router): promote moonshot/kimi-k2.6 to AUTO/ECO Simple primary (…
1bcMax Apr 29, 2026
8797b8a
docs: prominently feature 8 free NVIDIA models in README + AGENTS
1bcMax Apr 29, 2026
89fb4b6
docs: list free models as a proper table in Quick Start (not inline)
1bcMax Apr 29, 2026
cae7c09
docs: correct free model list — gpt-oss retired 2026-04-28, add v4-pr…
1bcMax Apr 29, 2026
d3082aa
feat(pm): expose Predexon v2 endpoints via typed helpers
1bcMax May 8, 2026
1729e66
feat(test): add chat-LLM sweep script for end-to-end model validation
1bcMax May 9, 2026
3aacbc1
docs: reconcile model lists with 2026-05-09 chat-LLM sweep findings
1bcMax May 9, 2026
6f1370d
feat: Exa on Base + router pricing/primary fixes from 2026-05-09 sweep
1bcMax May 9, 2026
8bae0d0
feat: chat()/chat_completion() walk fallback_models on transient errors
1bcMax May 9, 2026
0d37396
feat(test): media sweep + 2026-05-09 findings (9/11 ok, $0.55)
1bcMax May 9, 2026
ee0d98e
chore: sync SDK with backend fixes (Exa, /v1/images/models, flux remo…
1bcMax May 9, 2026
9e8b5aa
docs: trim internal-process notes from README/AGENTS/CHANGELOG
1bcMax May 9, 2026
e4209d3
feat(pm): mirror Predexon v2 typed helpers on Async + Solana clients
1bcMax May 9, 2026
151ca6b
feat(pm): add 7 more v2 endpoints — Polymarket positions/trades/leade…
1bcMax May 9, 2026
bc2ca1e
docs(pm): align README with full v2 typed-helper surface
1bcMax May 9, 2026
67f3c67
feat(billing): enrich cost log schema + filterable summary/export
1bcMax May 10, 2026
1eed289
feat(billing): add `python -m blockrun_llm.billing` CLI + docs
1bcMax May 10, 2026
55efb36
docs(billing): add real example output to README billing section
1bcMax May 10, 2026
d916ea5
docs: remove dead X/Twitter (AttentionVC) section from README
1bcMax May 10, 2026
c129968
feat: SSE streaming for chat completions (sync + async) — v0.20.0
1bcMax May 12, 2026
6dac9dd
feat(streaming): 5xx retry policy + fallback_models — v0.20.1
1bcMax May 12, 2026
7449051
feat(solana): streaming chat_completion_stream — v0.21.0
1bcMax May 12, 2026
68ed907
feat: AsyncSolanaLLMClient + paid-stream cost_log/archive — v0.22.0
1bcMax May 12, 2026
7998777
fix(solana): tools / tool_choice now supported — v0.22.1
1bcMax May 12, 2026
75e1005
feat(solana): custom RPC endpoint + header-auth gateways — v0.23.0
1bcMax May 14, 2026
615d778
feat(solana): default RPC → BlockRun proxy; deprecate XClient — v0.24.0
1bcMax May 14, 2026
ffdbda4
chore(sdist): exclude sweep artifacts, .claude/, .ruff_cache from PyP…
1bcMax May 14, 2026
8a44051
fix(client): raise httpx connection pool limit to 200 for high-concur…
1bcMax May 15, 2026
34fd76c
feat(voice): add VoiceClient for AI-powered outbound phone calls
1bcMax May 16, 2026
e55e34f
feat: add PhoneClient + SurfClient — v0.26.0
1bcMax May 18, 2026
108202f
feat(tx-log): opt-in per-call transaction log with on-chain hash — v0…
1bcMax May 22, 2026
0d2b6ca
feat(video): real_face_asset_id + resolution + generate_audio — v0.28.0
1bcMax May 23, 2026
d277be6
feat(portrait): PortraitClient + Seedance docs realignment — v0.28.1
1bcMax May 23, 2026
a435953
feat(realface): RealFaceClient + Seedance real-person docs — v0.29.0
1bcMax May 25, 2026
4d37bd2
fix(portrait): correct enrollment price $0.50 → $0.01 USDC
1bcMax May 25, 2026
36a16b0
docs(changelog): annotate 0.28.1 RealFace entry as reversed in 0.29.0
1bcMax May 25, 2026
7bca3f7
feat(image): multi-image fusion for edit/image_edit — v0.30.0
1bcMax May 26, 2026
d98ef6d
feat(image): default edit model to gpt-image-2 (0.30.1)
1bcMax May 26, 2026
13b4901
feat(models): add google/gemini-3.5-flash — v0.31.0
1bcMax May 27, 2026
7675a42
feat(solana): add SolanaLLMClient.image() text-to-image — v0.31.1
1bcMax May 28, 2026
7a3d826
fix(image,error): preserve gateway 402 body + add 202 poll loop — v0.…
1bcMax May 29, 2026
a3137bd
feat(models): add anthropic/claude-opus-4.8 as COMPLEX primary — v0.33.0
1bcMax May 29, 2026
14ec09f
fix(solana): per-use-case timeouts + per-call override + permanent-er…
1bcMax May 29, 2026
14276eb
feat(chat): response_format (JSON mode) + stop sequences — v0.35.0
1bcMax May 31, 2026
f571688
feat(chat): verbatim param passthrough + response extra-fields + nest…
1bcMax Jun 1, 2026
9f54330
fix(solana): thread-safe payment signing for concurrent requests
1bcMax Jun 2, 2026
5448b1c
fix(solana): whole-request payment retry → ~100% under concurrent load
1bcMax Jun 2, 2026
c19d470
chore(release): 0.37.0 — concurrency-safe Solana payments
1bcMax Jun 2, 2026
f18b5ac
test: add Claude/Gemini/GPT E2E benchmark (TTFT, throughput, latency …
1bcMax Jun 2, 2026
85b43a5
feat(speech): SpeechClient — BlockRun Voice (ElevenLabs TTS + sound e…
1bcMax Jun 6, 2026
73d2ac7
docs: drop XRPL pointer (gateway decommissioned 2026-06-06) + fix sta…
1bcMax Jun 6, 2026
aac018c
docs: annotate o1-mini + gemini-3-pro-preview upstream delistings (20…
1bcMax Jun 6, 2026
b49aeda
docs: delist o1-mini + gemini-3-pro-preview from the SDK surface
1bcMax Jun 6, 2026
ad19eec
fix(router,docs): GLM flat pricing fully retired — glm-5 $0.60/$1.92,…
1bcMax Jun 6, 2026
d62779d
feat(rpc): RpcClient — multi-chain JSON-RPC (40+ chains) + Seedance v…
1bcMax Jun 7, 2026
d11419b
feat!: remove XClient + X/Twitter (AttentionVC) surface — v1.0.0
1bcMax Jun 7, 2026
4a0a205
feat: DefiLlama + 0x DEX + Modal passthroughs (coverage backfill) — v…
1bcMax Jun 7, 2026
7bfaad3
feat: AsyncSolanaLLMClient passthrough parity + VideoClient.generate_…
1bcMax Jun 8, 2026
46f39c8
feat: AsyncSolanaLLMClient.search — async standalone search parity (1…
1bcMax Jun 9, 2026
7de16c1
fix(video): key terminal success on status==completed, not HTTP 200 (…
1bcMax Jun 9, 2026
17b209b
feat: AsyncSolanaLLMClient image/image_edit/get_balance — complete as…
1bcMax Jun 9, 2026
854de18
feat(video): 15min poll budget + mid-poll re-signing + recoverable ti…
1bcMax Jun 11, 2026
aecd03f
Add Claude Fable 5; promote to PREMIUM COMPLEX primary
1bcMax Jun 11, 2026
61df7f2
feat: Coinbase Onramp client + clear payment-flow docs (1.4.0)
1bcMax Jun 11, 2026
e719e35
fix(stream): parse streamed tool-call chunks (fixes 'dict' object has…
KillerQueen-Z Jun 14, 2026
6e0278f
release: 1.4.1 — streamed tool-call fix; remove sunset Fable 5
1bcMax Jun 14, 2026
996f50d
fix(solana): auto-load wallet from ~/.blockrun/.solana-session (parit…
KillerQueen-Z Jun 14, 2026
42487d8
release: 1.4.2 — Solana wallet auto-load (parity with Base)
1bcMax Jun 15, 2026
30ce72e
fix(solana): clear error when a Solana base58 key is passed to the Ba…
1bcMax Jun 17, 2026
2f7494d
release: 1.4.4 — add zai/glm-5.2 flagship; SmartChat SIMPLE → kimi-k2.7
1bcMax Jun 18, 2026
6388ccd
fix(image): add parameter validation with helpful error messages
1bcMax Jun 19, 2026
aa72696
release: 1.4.5 — ImageClient parameter validation fix
1bcMax Jun 19, 2026
b8b5819
feat(cost): attach real per-call x402 charge to ChatResponse (#11)
KillerQueen-Z Jun 24, 2026
0bfe5bd
fix(cost): race-free settlement attach + unblock CI formatting (#12)
VickyXAI Jun 24, 2026
e2a72fb
release: 1.4.6 — ChatResponse.cost_usd + settlement (real x402 charge…
1bcMax Jun 24, 2026
34ba985
fix: sync __version__ to 1.4.6
1bcMax Jun 24, 2026
188823d
test: assert pyproject and __init__ versions stay in sync (#13)
VickyXAI Jun 24, 2026
5194711
fix(timeout): raise default chat timeout 120s→600s, env-configurable …
KillerQueen-Z Jun 26, 2026
e4e5345
fix(timeout): AnthropicClient default 120→600 + black-format solana_c…
VickyXAI Jun 26, 2026
30521bd
feat(stream): attach real per-call x402 cost to stream chunks (1.4.7)
1bcMax Jun 26, 2026
32399a1
feat(solana): add video/music/speech/portrait/realface/price/rpc medi…
KillerQueen-Z Jul 4, 2026
01b9b29
fix(cache): tolerate list bodies from JSON-RPC batch — save_to_cache …
VickyXAI Jul 4, 2026
67a9c08
fix(deps): pin solana<0.40 in solana extra — 0.40.0 removed solana.rp…
VickyXAI Jul 4, 2026
32e54ec
feat(solana): harden media surface + wire mid-poll re-sign payment gu…
VickyXAI Jul 4, 2026
5d07eaa
fix(solana): async re-sign payment guard + poll_url host pinning (#20)
VickyXAI Jul 5, 2026
9289d48
release: 1.5.0 — Solana media surface (video/music/speech/portrait/re…
1bcMax Jul 6, 2026
c3a32cb
fix(solana): keep video settlement blockhash fresh via proactive re-s…
KillerQueen-Z Jul 8, 2026
6b6deeb
release: 1.5.1 — proactive video settlement re-sign keeps blockhash f…
1bcMax Jul 8, 2026
573acb8
feat(x402): attach BlockRun builder-code service code to payments (#21)
KillerQueen-Z Jul 8, 2026
3756dc5
release: 1.6.0 — tag Base-chain payments with BlockRun x402 builder s…
1bcMax Jul 8, 2026
09f5c6c
fix(solana): fail fast when the payer has no USDC token account (#23)
VickyXAI Jul 15, 2026
13a376f
release: 1.6.1 — fail fast when the payer has no USDC token account (…
1bcMax Jul 15, 2026
81a6f9f
feat(media): forward video input_type + Solana image quality (1.7.0) …
VickyXAI Jul 15, 2026
128455e
fix(errors): stop claiming payment was taken when nothing settled (#25)
VickyXAI Jul 16, 2026
ffacad2
fix: preserve canonical wallet selection
KillerQueen-Z Jul 19, 2026
d8097a1
fix(wallet): warn on migration and restore legacy wallet.key parity
1bcMax Jul 19, 2026
7e7f1bb
merge main into wallet migration fix; release as 1.7.2
1bcMax Jul 19, 2026
74c49e6
feat(wallet): adopt a discovered wallet deliberately (1.8.0)
1bcMax Jul 19, 2026
5fc5bd2
fix(validation): stop capping max_tokens below what models actually s…
VickyXAI Jul 21, 2026
0f209b4
test: assert the error names the SDK's own number, not a model's (#28)
VickyXAI Jul 21, 2026
a762ab3
release: 1.8.1 — max_tokens no longer capped below real model ceilings
1bcMax Jul 21, 2026
82312bb
fix(release): finish the 1.8.1 bump — VERSION and __init__.py were le…
VickyXAI Jul 21, 2026
6f45d88
fix(payments): stop double-settling on paid failures, disclose gatewa…
VickyXAI Jul 21, 2026
a94d964
fix(validation): apply the max_tokens guard on Solana, reject bool ac…
VickyXAI Jul 21, 2026
1f77d4a
feat(payments): client-side spend limits (1.9.0) (#34)
VickyXAI Jul 21, 2026
8c39a3b
fix(ci): pin ruff — an unpinned linter broke CI with no code change (…
VickyXAI Jul 26, 2026
fb26607
docs: bind the routing numbers to the published artifact (#35)
VickyXAI Jul 26, 2026
62d6785
chore: resync sync-brand-numbers.mjs with the source copy (#37)
VickyXAI Jul 27, 2026
8c94eaa
fix: bind the last two stale numbers (#38)
VickyXAI Jul 27, 2026
7682f9f
chore: adopt ruff 0.16 — 1631 typing fixes, verified against Python 3…
VickyXAI Jul 28, 2026
d0ab609
feat(solana): accept CLI JSON-array and hex key formats, name the key…
1bcMax Jul 28, 2026
05d2833
style: satisfy black on solana_wallet.py
1bcMax Jul 28, 2026
3c5d896
fix(solana): drop the dead 32-byte-seed fallback that leaked ModuleNo…
1bcMax Jul 28, 2026
21d8804
fix(pm): make the retired canonical-market helpers fail fast (#40)
VickyXAI Aug 4, 2026
9cbf26a
chore(brand): refresh the snapshot — the markers were rendering a sta…
VickyXAI Aug 5, 2026
45cebfa
chore(brand): refresh the snapshot — the markers were rendering a sta…
VickyXAI Aug 8, 2026
e824cc4
docs: free tier refresh — deepseek-v4-flash hit NVIDIA EOL 2026-08-12…
VickyXAI Aug 12, 2026
1d580fa
chore(brand): sync markers to live numbers.json — 70 chat / 93 total …
VickyXAI Aug 12, 2026
de04695
release: 1.10.1 — docs-only patch; free-tier docs refreshed after dee…
VickyXAI Aug 12, 2026
70f01e9
release: VERSION file to 1.10.1 — the tag guard caught pyproject/__in…
VickyXAI Aug 12, 2026
0fcec98
feat(router): port Router Core into the Python SDK, replacing the loc…
VickyXAI Aug 16, 2026
b02ef7c
feat(routing): same routing surface on all four clients — Solana, mes…
VickyXAI Aug 19, 2026
8aaa960
fix(router): imperativeVerbs was weighted zero — restore the dimensio…
VickyXAI Aug 19, 2026
40ad83b
release: 1.13.0 — re-sync Router Core to d7bc10c: live free rungs, ki…
1bcMax Aug 21, 2026
b01444b
release: 1.13.0 — carry the bump into __init__.py and VERSION
1bcMax Aug 21, 2026
76ac26d
chore: brand-sync workflow + refresh brand numbers
1bcMax Aug 21, 2026
a1cc169
fix(solana): gate paid-leg re-sign on payment phase, not staleness (#54)
KillerQueen-Z Aug 26, 2026
dc62d50
docs: changelog for the 1.13.0 Solana re-sign phase gate
1bcMax Aug 26, 2026
61310a0
chore: sync brand numbers from blockrun.ai/brand/numbers.json
github-actions[bot] Aug 31, 2026
33276f2
fix(routing): re-sync Router Core to 5ee7c23, and rebuild the free ti…
VickyXAI Aug 31, 2026
f317890
release: 1.14.0 — Router Core 5ee7c23, free tier rebuilt from probed ids
1bcMax Aug 31, 2026
7a27ec4
chore(brand): sync sync-brand-numbers.mjs from blockrun (#56)
VickyXAI Sep 2, 2026
82959b2
fix(pricing): sync Grok rates to xAI's published rate (blockrun#503) …
VickyXAI Sep 4, 2026
44c8e9a
feat(apikey): a BlockRun API key works everywhere a wallet key does (…
VickyXAI Sep 5, 2026
687738d
fix: preserve explicit payment selection and complete account clients…
KillerQueen-Z Sep 5, 2026
3cb95ae
feat(sdk): type reasoning token usage (#42)
KillerQueen-Z Sep 5, 2026
b7e54a6
chore(brand): refresh the snapshot from the published artifact
1bcMax Sep 5, 2026
1e4dbbf
fix(routing): pin the credential-to-host rule with a table over every…
1bcMax Sep 5, 2026
af15d34
fix(errors): carry Retry-After on APIError, at every raise site
1bcMax Sep 5, 2026
c3ed89b
fix(errors): let the gateway's explanation reach str(exc)
1bcMax Sep 6, 2026
9baee30
chore: sync brand numbers from blockrun.ai/brand/numbers.json
github-actions[bot] Sep 7, 2026
d80b5ec
fix(music): poll the job the gateway hands back, on both rails (#63)
VickyXAI Sep 8, 2026
ca492f6
release: 1.16.0 (#64)
VickyXAI Sep 8, 2026
1a35952
style: black-format the music poll tests, which the release gate chec…
VickyXAI Sep 8, 2026
9fe1432
chore(brand): refresh the snapshot — the markers were rendering a sta…
VickyXAI Sep 9, 2026
07f5421
chore(brand): refresh the snapshot — the markers were rendering a sta…
VickyXAI Sep 9, 2026
854ef27
chore: sync brand numbers from blockrun.ai/brand/numbers.json
github-actions[bot] Sep 14, 2026
98525df
chore(brand): vendor the hardened sync-brand-numbers.mjs (assertRende…
VickyXAI Sep 15, 2026
8a18227
feat(x402): the signed domain follows the 402's network — Arc, Base, …
VickyXAI Sep 16, 2026
ebaef91
chore: sync brand numbers from blockrun.ai/brand/numbers.json
github-actions[bot] Sep 21, 2026
64bb1c4
feat(video): expose Seedance reference media and output controls
KillerQueen-Z Sep 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Normalize line endings in the repository. Without this the working tree's
# native endings leak into commits: 3 files were converted CRLF->LF inside an
# unrelated behavioural fix, inflating that diff from 51 real lines to 1045 and
# burying the change under formatting noise. 14 other tracked files were still
# CRLF, so the next contributor would have regenerated it.
* text=auto

# Binary formats git must not touch.
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
*.pdf binary
*.woff binary
*.woff2 binary
*.mp3 binary
*.mp4 binary
*.wav binary
51 changes: 51 additions & 0 deletions .github/workflows/brand-sync.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# Vendored into every repo listed in blockrun's brand/consumers.json — the
# fan-out half of the brand-numbers system. The vendored sync script keeps PR
# CI deterministic and offline (--check never fetches); THIS workflow is where
# freshness comes from: it re-fetches the canonical artifact weekly and lands
# the marker rewrites, so numbers can't silently rot behind green CI again
# (they did: 14 of 15 consumers sat stale, one 70→71 sweep touched 8 files in
# this repo alone).
#
# Direct push to the default branch on purpose: these are docs/marker rewrites
# generated from blockrun.ai/brand/numbers.json by the audited script in
# scripts/. A PR queue nobody tends is how the staleness happened. If the
# branch is protected the push fails and the fallback opens a PR instead.
# No third-party actions beyond actions/checkout — supply-chain surface stays
# at one GitHub-owned action.
name: brand-sync
on:
schedule:
- cron: "17 6 * * 1" # Mondays 06:17 UTC, offset from the top-of-hour crunch
workflow_dispatch:
permissions:
contents: write
pull-requests: write
jobs:
sync:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Refresh brand numbers from the canonical artifact
run: node scripts/sync-brand-numbers.mjs --refresh
- name: Land the rewrite
env:
GH_TOKEN: ${{ github.token }}
run: |
if git diff --quiet; then
echo "already in sync"
exit 0
fi
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add -A
git commit -m "chore: sync brand numbers from blockrun.ai/brand/numbers.json"
if git push origin "HEAD:${GITHUB_REF_NAME}"; then
echo "pushed to ${GITHUB_REF_NAME}"
else
BR="brand-sync/$(date +%Y%m%d)"
git push -f origin "HEAD:${BR}"
gh pr create --head "$BR" \
--title "chore: sync brand numbers" \
--body "Automated marker refresh from https://blockrun.ai/brand/numbers.json (scripts/sync-brand-numbers.mjs --refresh). Opened as a PR because the default branch is protected." \
|| echo "PR creation unavailable — branch ${BR} pushed, needs manual PR"
fi
58 changes: 58 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: CI

on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:

jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.9', '3.11', '3.12']

steps:
- uses: actions/checkout@v4

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Install dependencies
run: |
if python3 -c "import sys; exit(0 if sys.version_info >= (3, 10) else 1)"; then
pip install -e ".[dev,solana,anthropic]"
else
pip install -e ".[dev,anthropic]"
fi

- name: Check formatting
run: black --check .

- name: Lint
run: ruff check .

- name: Run unit tests
run: |
if python3 -c "import sys; exit(0 if sys.version_info >= (3, 10) else 1)"; then
pytest tests/unit
else
pytest tests/unit --ignore=tests/unit/test_solana_client.py --ignore=tests/unit/test_solana_wallet.py -k "not SolanaX402"
fi

# Fails when a number in the docs disagrees with brand-numbers.json.
# Offline by design: it reads the committed snapshot and never fetches, so a
# blockrun.ai deploy in progress cannot fail this repo's CI. Its own job
# rather than a step, so it does not run three times across the Python matrix.
brand-numbers:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- run: node scripts/sync-brand-numbers.mjs --check
76 changes: 76 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
name: Publish to PyPI

on:
release:
types: [published]

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'

# 1.8.1 shipped with VERSION and __init__.py still reading 1.8.0. The
# guard test caught it, but only on the push-triggered CI run, after the
# release had been cut and published. PyPI does not allow overwriting a
# published file, so that artifact is permanently wrong.
#
# These steps run ci.yml's checks on the 3.11 leg only — black, ruff and
# the unit suite. They are NOT full CI: the 3.9 and 3.12 legs still run
# only on push, so version-incompatible syntax is caught there, not here.
# Extras match the 3.11 CI job so the gate covers the Solana paths; with
# the plain extra those tests importorskip and pass silently.
- name: Install package and test deps
run: pip install -e ".[dev,solana]" build

# A release tag that disagrees with the package version means the wrong
# tree is being published. PyPI would reject a duplicate version, but
# only after the release is cut; fail here instead.
- name: Verify the release tag matches VERSION
run: |
tag="${{ github.event.release.tag_name }}"
declared="v$(tr -d '[:space:]' < VERSION)"
if [ "$tag" != "$declared" ]; then
echo "Release tag $tag does not match VERSION ($declared)." >&2
exit 1
fi
echo "Release tag $tag matches VERSION."

- name: Check formatting
run: black --check blockrun_llm/ tests/

- name: Lint
run: ruff check blockrun_llm/ tests/

- name: Verify the release is publishable
run: pytest tests/unit -q

- name: Build package
run: python -m build

- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: dist
path: dist/

publish:
needs: build
runs-on: ubuntu-latest
environment: pypi
permissions:
id-token: write
steps:
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: dist
path: dist/

- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
122 changes: 66 additions & 56 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,56 +1,66 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# Virtual environments
venv/
env/
.venv/
.env/

# Environment files
.env
.env.local
.env.*.local

# IDE
.vscode/
.idea/
*.swp
*.swo

# OS
.DS_Store
Thumbs.db

# Test / coverage
.coverage
.pytest_cache/
htmlcov/
.tox/
.nox/

# mypy
.mypy_cache/

# Jupyter
.ipynb_checkpoints/
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# Virtual environments
venv/
env/
.venv/
.env/

# Environment files
.env
.env.local
.env.*.local

# IDE
.vscode/
.idea/
*.swp
*.swo

# OS
.DS_Store
Thumbs.db

# Test / coverage
.coverage
.pytest_cache/
htmlcov/
.tox/
.nox/

# mypy
.mypy_cache/

# Jupyter
.ipynb_checkpoints/

# Local Claude Code config (machine-specific allowlists)
.claude/settings.local.json

# Sweep / test-run artifacts
sweep-*.json
sweep-*.log

# Ruff cache
.ruff_cache/
Loading
Loading