feat(v1.5): contribution CTA + auto-gen tables + MCP server + agent docs + charts#13
Merged
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>
…table)
Fixes the Notes-column squeeze in the China relays table (was 7 cols, now 5)
and the contribution-friction root cause: every prior provider PR had to edit
three READMEs alongside providers.yaml. Now PRs only touch providers.yaml;
tables regenerate via scripts/build_provider_tables.py.
Changes:
- New scripts/build_provider_tables.py renders 4 sections × 3 languages
between <!-- providers:<section>:start/end --> markers. Sections supported:
china_relays, global_gateways, self_hosted_alternatives, comparison_tools.
- China table reduced from 7 → 5 columns: Station / Type / Payment / Trust / Notes
Trust combines status + last_verified + (· registered when entity is visible).
Last-verified date and entity-registered info still live in providers.yaml
for completeness; just no longer take dedicated columns.
- providers.yaml notes can now be a string OR a bilingual {en, zh-TW, zh-CN}
dict. All 19 existing entries migrated to bilingual; new entries can be
English-only.
- data/schema.md documents the new notes shape.
- scripts/validate.py accepts both string and dict notes; rejects dicts
missing 'en' key.
- price-refresh.yml workflow runs build_provider_tables after build_charts so
the weekly PR includes regenerated provider tables alongside prices/charts.
- CONTRIBUTING.md updated to say "edit providers.yaml only" (was technically
wrong before — tables WERE hand-maintained).
Side effect: re-render after merging this means future Atlas Cloud / Relaydance
edits to providers.yaml auto-propagate to all three READMEs.
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.
Re-do of PR #12 — that one was auto-marked MERGED by GitHub when its parent PR #11 landed, but the actual v1.5 commits never made it to main. This branch is rebased onto current main and adds two new things on top of v1.5: auto-generated provider tables and bilingual notes schema.
Three feature groups + Notes-column squeeze fix
A) Lower contribution friction
status: unverifiedis normal until canary.github/PULL_REQUEST_TEMPLATE.mdwith schema CI mention + operator-disclosure field.github/workflows/pr-validate.ymlrunsscripts.validateon every PR touchingdata/,fetchers/,scripts/,pyproject.tomlB) Agent integration layer
mcp/—awesome-ai-api-proxy-mcp(separate PyPI package): 6 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.docs/agent-integration.md— MCP / OpenAI function calling / LangChain / direct HTTP / pandas+DuckDB / n8n examples, same example question across all six pathsbuild_prices.py— gated on[charts]extraC) Visualization
scripts/build_charts.py— matplotlib SVG: tier-ladder bar chart (input + output) + cost-spread heatmap (rows × cols × log color)tier-ladder-input.svginside prices markersdocs/index.html— GitHub Pages dashboard (vanilla HTML + Plotly CDN, no build step). Reads rawprices.latest.json, renders interactive grouped bars + heatmap + filterable record table.docs/.nojekyllkeeps it served raw.D) Auto-generated provider tables (NEW vs PR #12)
Fixes the Notes-column squeeze (China relays table was 7 cols, now 5: Station / Type / Payment / Trust / Notes). Last-verified date and entity-registered info fold into the new
Trustcolumn asactive · 2026-05-26 · registered.Solves the contribution friction root cause: every prior provider PR (#1, #2, #5, #6, #8, #9) had to hand-edit three READMEs alongside
providers.yaml. Now PRs only touchproviders.yaml; tables auto-regenerate via the newscripts/build_provider_tables.py.providers.yamlnotescan now be string OR bilingual dict{en, zh-TW, zh-CN}. All 19 existing entries migrated to bilingual; new entries can be English-only.schema.mdandvalidate.pyupdated to enforce the new shape.Pipeline
Weekly
price-refresh.ymlnow installs[charts]extra and runs in order:scrape → build_prices → build_charts → build_provider_tables → validateTest plan
assets/charts/, README embeds input ladderfind_cheapest("grok-4.3")→ Relaydance $1.125build_provider_tablesrenders 12 section blocks (4 sections × 3 langs)scripts.validateexits 0providers.yamlwith a badtype→pr-validate.ymlred-lightsOut of scope (v2)
🤖 Generated with Claude Code