greenpick 0.6.3__tar.gz → 0.8.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. {greenpick-0.6.3/src/greenpick.egg-info → greenpick-0.8.0}/PKG-INFO +14 -9
  2. {greenpick-0.6.3 → greenpick-0.8.0}/README.md +342 -337
  3. {greenpick-0.6.3 → greenpick-0.8.0}/pyproject.toml +59 -59
  4. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/__init__.py +15 -15
  5. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/auto_repository.py +55 -50
  6. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/emission_factors.json +48 -40
  7. greenpick-0.8.0/src/greenpick/data/japan_repository.py +177 -0
  8. greenpick-0.8.0/src/greenpick/data/power.json +21 -0
  9. greenpick-0.8.0/src/greenpick/data/pricing.json +65 -0
  10. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/regions.json +35 -35
  11. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/typical.json +1106 -2
  12. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/typical_repository.py +120 -120
  13. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/server.py +571 -524
  14. greenpick-0.8.0/src/greenpick/services/carbon_service.py +51 -0
  15. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/data_hint.py +191 -189
  16. greenpick-0.8.0/src/greenpick/services/serverless_service.py +144 -0
  17. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/sources.py +131 -101
  18. {greenpick-0.6.3 → greenpick-0.8.0/src/greenpick.egg-info}/PKG-INFO +14 -9
  19. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick.egg-info/SOURCES.txt +2 -0
  20. {greenpick-0.6.3 → greenpick-0.8.0}/tests/test_services.py +2233 -2093
  21. greenpick-0.6.3/src/greenpick/data/power.json +0 -7
  22. greenpick-0.6.3/src/greenpick/data/pricing.json +0 -31
  23. greenpick-0.6.3/src/greenpick/services/carbon_service.py +0 -28
  24. {greenpick-0.6.3 → greenpick-0.8.0}/LICENSE +0 -0
  25. {greenpick-0.6.3 → greenpick-0.8.0}/setup.cfg +0 -0
  26. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/__main__.py +0 -0
  27. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/config.py +0 -0
  28. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/__init__.py +0 -0
  29. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/_net.py +0 -0
  30. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/annual.json +0 -0
  31. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/canada_repository.py +0 -0
  32. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/eia_repository.py +0 -0
  33. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/electricitymaps_repository.py +0 -0
  34. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/entsoe_repository.py +0 -0
  35. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/gpu_power.json +0 -0
  36. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/inference_energy.json +0 -0
  37. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/instance_families.json +0 -0
  38. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/mock_repository.py +0 -0
  39. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/network.json +0 -0
  40. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/repository.py +0 -0
  41. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/static_data.py +0 -0
  42. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/models.py +0 -0
  43. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/__init__.py +0 -0
  44. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/cost_service.py +0 -0
  45. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/forecast_service.py +0 -0
  46. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/inference_service.py +0 -0
  47. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/instance_service.py +0 -0
  48. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/justification_service.py +0 -0
  49. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/latency_service.py +0 -0
  50. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/locality_service.py +0 -0
  51. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/metric_scaffold_service.py +0 -0
  52. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/migration_service.py +0 -0
  53. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/offhours_service.py +0 -0
  54. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/recommender.py +0 -0
  55. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/residency_service.py +0 -0
  56. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/rightsizing_service.py +0 -0
  57. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/scheduling_service.py +0 -0
  58. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/serving_service.py +0 -0
  59. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/training_service.py +0 -0
  60. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/typical_ranking_service.py +0 -0
  61. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick.egg-info/dependency_links.txt +0 -0
  62. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick.egg-info/entry_points.txt +0 -0
  63. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick.egg-info/requires.txt +0 -0
  64. {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: greenpick
3
- Version: 0.6.3
3
+ Version: 0.8.0
4
4
  Summary: Design-time sustainability co-pilot (MCP server): greener, cheaper cloud infrastructure decisions with carbon + cost + latency tradeoffs.
5
5
  Author-email: "Data Science Advisers, LLC" <info@datascienceadvisers.com>
6
6
  License-Expression: MIT
@@ -44,7 +44,7 @@ Dynamic: license-file
44
44
  <img src="https://img.shields.io/badge/license-MIT-green" alt="License: MIT" />
45
45
  <img src="https://img.shields.io/badge/tests-passing-brightgreen" alt="Tests: passing" />
46
46
  <img src="https://img.shields.io/badge/python-3.11%2B-blue" alt="Python 3.11+" />
47
- <img src="https://img.shields.io/badge/MCP%20tools-19-0ea5e9" alt="MCP tools: 19" />
47
+ <img src="https://img.shields.io/badge/MCP%20tools-20-0ea5e9" alt="MCP tools: 20" />
48
48
  </p>
49
49
 
50
50
  A **design-time sustainability co-pilot** that runs as an MCP server inside your vibe-coding
@@ -52,8 +52,8 @@ environment (Cursor / Claude Code / Kiro). Ask it where to deploy, when to run a
52
52
  right-size — and it answers with an honest **carbon + cost + latency** tradeoff, in-editor, in
53
53
  seconds. (It responds when you ask; auto-nudging on infra-code changes is on the roadmap.)
54
54
 
55
- > **Status: working — 19 tools.** Live carbon for US (EIA-930), EU (ENTSO-E) and Canada (Hydro-Québec,
56
- > IESO — no key needed), cross-cloud cost
55
+ > **Status: working — 20 tools.** Live carbon for US (EIA-930), EU (ENTSO-E), Canada (Hydro-Québec,
56
+ > IESO — no key needed) and Tokyo (TEPCO — no key needed), cross-cloud cost
57
57
  > parity (Vantage-refreshed), per-axis R/Y/G ratings, carbon-aware scheduling + day-ahead forecast,
58
58
  > GPU-training **and LLM-inference** carbon, right-sizing, serving-pattern and data-locality/residency
59
59
  > checks — all shipped. Offline or without API keys, falls back to clearly-labelled *typical* values:
@@ -139,11 +139,11 @@ backfire guards** — is the part nothing else puts together.
139
139
  - **Free data only.** No flow-traced consumption accounting; carbon forecast is relative, not absolute.
140
140
 
141
141
  Roadmap: data-format/engine efficiency advice, sub-national grid zones, CI/CD integration.
142
- See `docs/user-questions-backlog.md`.
142
+ See `CHANGELOG.md` for what has shipped in each version.
143
143
 
144
144
  ## MCP tools
145
145
 
146
- 19 tools, grouped by what you're trying to do.
146
+ 20 tools, grouped by what you're trying to do.
147
147
 
148
148
  ### Pick a region
149
149
 
@@ -176,6 +176,7 @@ See `docs/user-questions-backlog.md`.
176
176
  |------|--------------|
177
177
  | `greener_instance_family` | A greener same-size family in the same region via perf-per-watt (newer generation / ARM Graviton-class does the same work on less energy). |
178
178
  | `rightsizing_check` | Right-sizing (the #1 FinOps win) with a carbon twin: if you're over-provisioned, a smaller size cuts **both** cost and carbon → the right-sized target with monthly $ and kg CO₂ saving. |
179
+ | `serverless_check` | For a mostly idle or spiky service: an always-on server vs. paying per request (AWS Lambda, Cloud Run). Monthly cost of each, the break-even request count, and estimated carbon (serverless as a lower bound). |
179
180
  | `offhours_check` | For dev/test/staging that doesn't need to run 24/7: the monthly $ and kg CO2 saved by running it only N hours a week. Compute only, directional. |
180
181
  | `data_locality_egress_check` | Warn when running compute away from where your data lives backfires: directional egress $ + coarse transfer carbon, and whether a greener-region move is still a net win. |
181
182
  | `migration_payoff` | Does moving the **data** to the compute's region pay off? Payback in months, one-off vs monthly egress and transfer carbon, net over 12 months. Egress only. |
@@ -196,11 +197,15 @@ See `docs/user-questions-backlog.md`.
196
197
  - **Hydro-Québec** (Montreal / Québec City regions) and **IESO** (Toronto regions) — live hourly
197
198
  generation by source, public, **no key needed**. Hydro-Québec figures arrive 1.5–6 h late, so the
198
199
  latest complete hour is used and its timestamp shown.
200
+ - **Tokyo** (the three Tokyo regions) — the Tokyo area's half-hourly generation by source, about an
201
+ hour behind, **no key needed**. Source: [Tokyo Electric Power Company Holdings, Inc.](https://www.tepco.co.jp/forecast/html/area_data-j.html). Used with TEPCO's
202
+ permission; GreenPick shows only the carbon intensity it calculates from the mix (never TEPCO's own
203
+ figures), credits TEPCO on every Tokyo result, and fetches at most once every 30 minutes.
199
204
  - **Typical** — the offline default and fallback: for each region, this calendar month's average
200
- intensity and average hour-of-day profile (UTC), computed from 12 months of real hourly EIA-930 /
201
- ENTSO-E data (`data/typical.json`, refreshed by `scripts/refresh_typical.py`). Labelled
205
+ intensity and average hour-of-day profile (UTC), computed from 12 months of real hourly data from
206
+ the live sources above (`data/typical.json`, refreshed by `scripts/refresh_typical.py`). Labelled
202
207
  `quality: "typical"` — a realistic norm, never presented as a current reading.
203
- - **Annual** — for Singapore, Tokyo, Mumbai/Pune and Sydney, where no free hourly data exists: the country's
208
+ - **Annual** — for Singapore, Mumbai/Pune and Sydney, where no free hourly data exists: the country's
204
209
  yearly lifecycle grid intensity from [Ember](https://ember-energy.org/) (via Our World in Data,
205
210
  CC BY 4.0), with source and year (`data/annual.json`). Labelled `quality: "annual_average"`; fine for
206
211
  comparing regions, but carries no timing signal.