feat(v1.5): contribution CTA + MCP server + agent docs + SVG charts + GH Pages dashboard#12
Merged
howardpen9 merged 2 commits intoJun 7, 2026
Conversation
…Pages dashboard
Three additive feature groups on top of v1 price observatory:
A) Lower contribution friction
- README "Want your relay listed?" section (en/zh-TW/zh-CN) above price snapshot
Surfaces issue template + PR path; sets expectation that status=unverified is normal
- Enhanced .github/PULL_REQUEST_TEMPLATE.md with schema CI mention + operator
disclosure field
- New .github/workflows/pr-validate.yml runs scripts.validate on every PR
touching data/, fetchers/, scripts/, or pyproject.toml — catches typos before
human review
B) Agent integration layer
- New mcp/ package: awesome-ai-api-proxy-mcp (separate PyPI dist)
Six tools: list_providers, list_canonical_models, get_price, find_cheapest,
compare, tier_overview + data://prices/latest resource. FastMCP, stdio.
Branch override via AWESOME_AI_API_PROXY_REF env var for dev/staging.
- docs/agent-integration.md: one-page reference for MCP / OpenAI function
calling / LangChain / direct HTTP / pandas+DuckDB / n8n. Same question
("cheapest claude-sonnet-4.6") across all six examples for friction comparison.
- scripts/build_prices.py now also writes prices.latest.csv + prices.latest.parquet
for analyst-friendly access (gated on [charts] extra)
C) Visualization
- scripts/build_charts.py generates SVG via matplotlib:
- tier-ladder bar chart (input + output) with log y-axis and per-bar labels
- cost-spread heatmap (rows=canonical, cols=providers, log color scale)
- README embeds tier-ladder-input.svg inside the prices markers
- docs/index.html: GitHub Pages dashboard (vanilla HTML + Plotly CDN, no build
step) reads raw prices.latest.json, renders interactive grouped bars +
heatmap + filterable record table. docs/.nojekyll keeps it served raw.
- Weekly workflow now installs [charts] extra and runs build_charts after
build_prices, before validate.
All v1 fetchers still pass (3/3 fetchers, 1024 records, 47 canonical matches).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Re-ran scrape → build_prices → build_charts to produce:
- Refreshed data/snapshots/2026-06-07/ (new captured_at, same prices)
- data/prices.latest.{json,csv,parquet} (tabular exports added)
- assets/charts/tier-ladder-{input,output}.svg
- assets/charts/spread-heatmap-{input,output}.svg
The CSV/Parquet are committed (not gitignored) so the agent-integration.md
examples work via raw URL without running the pipeline locally.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Layered on top of #11. Once that lands on main, this PR's base auto-rebases.
Summary
Three additive feature groups addressing real pain points uncovered while reviewing the v1 PR:
A. Lower contribution friction
status: unverifiedis normal until canary.github/PULL_REQUEST_TEMPLATE.mdwith the schema CI mention + an optional operator-disclosure field.github/workflows/pr-validate.ymlrunsscripts.validateon every PR touchingdata/,fetchers/,scripts/, orpyproject.toml— catches typos before a human ever reads the PRB. Agent integration layer
mcp/—awesome-ai-api-proxy-mcp(separate PyPI package)Six tools:
list_providers,list_canonical_models,get_price,find_cheapest,compare,tier_overview+data://prices/latestresource. FastMCP, stdio. Branch override viaAWESOME_AI_API_PROXY_REFenv var for dev/staging.Drop in Claude Desktop / Cursor / Cline as
uvx awesome-ai-api-proxy-mcp— the model picks the right tool automatically.docs/agent-integration.md— one-page reference for MCP / OpenAI function calling / LangChain / direct HTTP / pandas+DuckDB / n8n. Same example question (cheapest claude-sonnet-4.6) across all six paths so friction is directly comparable.scripts/build_prices.py—data/prices.latest.csv(185KB, Excel/DuckDB-friendly) anddata/prices.latest.parquet(24KB, snappy). Gated on the new[charts]optional extra.C. Visualization
scripts/build_charts.pygenerates SVG via matplotlib:tier-ladder-input.svginside the prices markers — GitHub renders SVG natively + LLM screenshot tools can ingest it directlydocs/index.html— GitHub Pages dashboard (vanilla HTML + Plotly CDN, no build step). Reads rawprices.latest.json, renders interactive grouped bars + heatmap + filterable record table. Light/dark viaprefers-color-scheme. Tier + unit + free-text filter.docs/.nojekyllkeeps it served raw.Activate via repo Settings → Pages → Source: `main` /`docs`.
Pipeline changes
The weekly
price-refresh.ymlworkflow now installs[charts]extra and runsbuild_chartsafterbuild_prices, beforevalidate. So every weekly PR includes refreshed SVGs.Test plan
python -m scripts.scrape && python -m scripts.build_prices && python -m scripts.build_charts && python -m scripts.validateruns clean locallyassets/charts/, README embeds the input ladderfind_cheapest("grok-4.3")returns Relaydance $1.125 with full provenance;compare("grok-4.3")returns 3-row sorted list;tier_overview(2)returns 3 canonical modelsproviders.yamlwith a badtype→pr-validate.ymlshould red-lightOut of scope (v2)
docs/canary-prompts.md🤖 Generated with Claude Code