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.
- {greenpick-0.6.3/src/greenpick.egg-info → greenpick-0.8.0}/PKG-INFO +14 -9
- {greenpick-0.6.3 → greenpick-0.8.0}/README.md +342 -337
- {greenpick-0.6.3 → greenpick-0.8.0}/pyproject.toml +59 -59
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/__init__.py +15 -15
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/auto_repository.py +55 -50
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/emission_factors.json +48 -40
- greenpick-0.8.0/src/greenpick/data/japan_repository.py +177 -0
- greenpick-0.8.0/src/greenpick/data/power.json +21 -0
- greenpick-0.8.0/src/greenpick/data/pricing.json +65 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/regions.json +35 -35
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/typical.json +1106 -2
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/typical_repository.py +120 -120
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/server.py +571 -524
- greenpick-0.8.0/src/greenpick/services/carbon_service.py +51 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/data_hint.py +191 -189
- greenpick-0.8.0/src/greenpick/services/serverless_service.py +144 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/sources.py +131 -101
- {greenpick-0.6.3 → greenpick-0.8.0/src/greenpick.egg-info}/PKG-INFO +14 -9
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick.egg-info/SOURCES.txt +2 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/tests/test_services.py +2233 -2093
- greenpick-0.6.3/src/greenpick/data/power.json +0 -7
- greenpick-0.6.3/src/greenpick/data/pricing.json +0 -31
- greenpick-0.6.3/src/greenpick/services/carbon_service.py +0 -28
- {greenpick-0.6.3 → greenpick-0.8.0}/LICENSE +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/setup.cfg +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/__main__.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/config.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/__init__.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/_net.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/annual.json +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/canada_repository.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/eia_repository.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/electricitymaps_repository.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/entsoe_repository.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/gpu_power.json +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/inference_energy.json +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/instance_families.json +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/mock_repository.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/network.json +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/repository.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/data/static_data.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/models.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/__init__.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/cost_service.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/forecast_service.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/inference_service.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/instance_service.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/justification_service.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/latency_service.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/locality_service.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/metric_scaffold_service.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/migration_service.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/offhours_service.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/recommender.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/residency_service.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/rightsizing_service.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/scheduling_service.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/serving_service.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/training_service.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick/services/typical_ranking_service.py +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick.egg-info/dependency_links.txt +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick.egg-info/entry_points.txt +0 -0
- {greenpick-0.6.3 → greenpick-0.8.0}/src/greenpick.egg-info/requires.txt +0 -0
- {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.
|
|
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-
|
|
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 —
|
|
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 `
|
|
142
|
+
See `CHANGELOG.md` for what has shipped in each version.
|
|
143
143
|
|
|
144
144
|
## MCP tools
|
|
145
145
|
|
|
146
|
-
|
|
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
|
|
201
|
-
|
|
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,
|
|
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.
|