greenpick 0.1.0__tar.gz → 0.1.2__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.1.0/src/greenpick.egg-info → greenpick-0.1.2}/PKG-INFO +44 -5
- {greenpick-0.1.0 → greenpick-0.1.2}/README.md +43 -4
- {greenpick-0.1.0 → greenpick-0.1.2}/pyproject.toml +1 -1
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/__init__.py +1 -1
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/server.py +1 -1
- {greenpick-0.1.0 → greenpick-0.1.2/src/greenpick.egg-info}/PKG-INFO +44 -5
- {greenpick-0.1.0 → greenpick-0.1.2}/LICENSE +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/setup.cfg +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/__main__.py +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/config.py +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/data/__init__.py +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/data/auto_repository.py +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/data/eia_repository.py +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/data/electricitymaps_repository.py +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/data/emission_factors.json +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/data/entsoe_repository.py +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/data/gpu_power.json +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/data/inference_energy.json +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/data/instance_families.json +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/data/mock_repository.py +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/data/network.json +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/data/power.json +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/data/pricing.json +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/data/regions.json +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/data/repository.py +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/data/static_data.py +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/models.py +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/services/__init__.py +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/services/carbon_service.py +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/services/cost_service.py +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/services/forecast_service.py +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/services/inference_service.py +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/services/instance_service.py +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/services/latency_service.py +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/services/locality_service.py +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/services/metric_scaffold_service.py +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/services/recommender.py +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/services/residency_service.py +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/services/rightsizing_service.py +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/services/scheduling_service.py +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/services/serving_service.py +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick/services/training_service.py +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick.egg-info/SOURCES.txt +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick.egg-info/dependency_links.txt +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick.egg-info/entry_points.txt +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick.egg-info/requires.txt +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/src/greenpick.egg-info/top_level.txt +0 -0
- {greenpick-0.1.0 → greenpick-0.1.2}/tests/test_services.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: greenpick
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
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
|
|
@@ -29,7 +29,7 @@ Requires-Dist: ijson>=3.0; extra == "dev"
|
|
|
29
29
|
Dynamic: license-file
|
|
30
30
|
|
|
31
31
|
<p align="center">
|
|
32
|
-
<img src="docs/img/logo.svg" alt="GreenPick logo — a leaf whose veins are circuit traces" width="120" />
|
|
32
|
+
<img src="https://raw.githubusercontent.com/bithug01/greenpick/master/docs/img/logo.svg" alt="GreenPick logo — a leaf whose veins are circuit traces" width="120" />
|
|
33
33
|
</p>
|
|
34
34
|
|
|
35
35
|
<h1 align="center">GreenPick</h1>
|
|
@@ -58,7 +58,7 @@ seconds. (It responds when you ask; auto-nudging on infra-code changes is on the
|
|
|
58
58
|
> checks — all shipped. Falls back to clearly-labelled mock data offline or without API keys.
|
|
59
59
|
|
|
60
60
|
<p align="center">
|
|
61
|
-
<img src="docs/img/region-carbon-30x.svg" alt="Same H100 training run, ~30× the carbon depending only on region (Stockholm vs Sydney)" width="560" />
|
|
61
|
+
<img src="https://raw.githubusercontent.com/bithug01/greenpick/master/docs/img/region-carbon-30x.svg" alt="Same H100 training run, ~30× the carbon depending only on region (Stockholm vs Sydney)" width="560" />
|
|
62
62
|
</p>
|
|
63
63
|
|
|
64
64
|
*The same 40-GPU-hour training run emits ~0.7 kg CO₂ in Stockholm vs ~19 kg in Sydney — a ~30×
|
|
@@ -227,11 +227,50 @@ pytest # run tests
|
|
|
227
227
|
Connect it to an MCP client (e.g. Kiro / Claude Code / Cursor) by pointing the client at
|
|
228
228
|
`python -m greenpick` in this directory. See `.env.example` for switching the data source.
|
|
229
229
|
|
|
230
|
+
### Turn on live data
|
|
231
|
+
|
|
232
|
+
GreenPick runs on labelled mock data until you give it two free keys:
|
|
233
|
+
[EIA](https://www.eia.gov/opendata/register.php) (US grid) and
|
|
234
|
+
[ENTSO-E](https://transparency.entsoe.eu/) (EU grid). Pass them as environment variables.
|
|
235
|
+
(A `.env` file works for a source checkout; if you installed with `pip install greenpick`, use one
|
|
236
|
+
of the options below.)
|
|
237
|
+
|
|
238
|
+
**In an MCP client** (Kiro, Claude Desktop, Cursor…), add an `env` block to the server entry:
|
|
239
|
+
|
|
240
|
+
```json
|
|
241
|
+
{
|
|
242
|
+
"mcpServers": {
|
|
243
|
+
"greenpick": {
|
|
244
|
+
"command": "python",
|
|
245
|
+
"args": ["-m", "greenpick"],
|
|
246
|
+
"env": {
|
|
247
|
+
"GREENPICK_CARBON_SOURCE": "auto",
|
|
248
|
+
"EIA_API_KEY": "your-eia-key",
|
|
249
|
+
"ENTSOE_TOKEN": "your-entsoe-token"
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
**In a Jupyter notebook or Python script**, set them before you start (or import) the server:
|
|
257
|
+
|
|
258
|
+
```python
|
|
259
|
+
import os
|
|
260
|
+
os.environ["GREENPICK_CARBON_SOURCE"] = "auto"
|
|
261
|
+
os.environ["EIA_API_KEY"] = "your-eia-key"
|
|
262
|
+
os.environ["ENTSOE_TOKEN"] = "your-entsoe-token"
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
Every carbon figure includes a `quality` field: `live` means real grid data, `mock` means a
|
|
266
|
+
fallback value. Check it to confirm live data is on.
|
|
267
|
+
|
|
230
268
|
## FAQ
|
|
231
269
|
|
|
232
270
|
**Do I need API keys?** No — GreenPick runs on clearly-labelled mock data out of the box. For *live*
|
|
233
|
-
carbon, set two free keys
|
|
234
|
-
`GREENPICK_CARBON_SOURCE=auto
|
|
271
|
+
carbon, set two free keys (`EIA_API_KEY` for US, `ENTSOE_TOKEN` for EU) and
|
|
272
|
+
`GREENPICK_CARBON_SOURCE=auto` — see [Turn on live data](#turn-on-live-data). Without them it still
|
|
273
|
+
works; it just says `quality: "mock"`.
|
|
235
274
|
|
|
236
275
|
**Why "directional" and not audited numbers?** Because it's for a *design-time decision*, not a
|
|
237
276
|
compliance report. "Stockholm is ~30× cleaner than Sydney" is what you need to pick a region in
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<img src="docs/img/logo.svg" alt="GreenPick logo — a leaf whose veins are circuit traces" width="120" />
|
|
2
|
+
<img src="https://raw.githubusercontent.com/bithug01/greenpick/master/docs/img/logo.svg" alt="GreenPick logo — a leaf whose veins are circuit traces" width="120" />
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
<h1 align="center">GreenPick</h1>
|
|
@@ -28,7 +28,7 @@ seconds. (It responds when you ask; auto-nudging on infra-code changes is on the
|
|
|
28
28
|
> checks — all shipped. Falls back to clearly-labelled mock data offline or without API keys.
|
|
29
29
|
|
|
30
30
|
<p align="center">
|
|
31
|
-
<img src="docs/img/region-carbon-30x.svg" alt="Same H100 training run, ~30× the carbon depending only on region (Stockholm vs Sydney)" width="560" />
|
|
31
|
+
<img src="https://raw.githubusercontent.com/bithug01/greenpick/master/docs/img/region-carbon-30x.svg" alt="Same H100 training run, ~30× the carbon depending only on region (Stockholm vs Sydney)" width="560" />
|
|
32
32
|
</p>
|
|
33
33
|
|
|
34
34
|
*The same 40-GPU-hour training run emits ~0.7 kg CO₂ in Stockholm vs ~19 kg in Sydney — a ~30×
|
|
@@ -197,11 +197,50 @@ pytest # run tests
|
|
|
197
197
|
Connect it to an MCP client (e.g. Kiro / Claude Code / Cursor) by pointing the client at
|
|
198
198
|
`python -m greenpick` in this directory. See `.env.example` for switching the data source.
|
|
199
199
|
|
|
200
|
+
### Turn on live data
|
|
201
|
+
|
|
202
|
+
GreenPick runs on labelled mock data until you give it two free keys:
|
|
203
|
+
[EIA](https://www.eia.gov/opendata/register.php) (US grid) and
|
|
204
|
+
[ENTSO-E](https://transparency.entsoe.eu/) (EU grid). Pass them as environment variables.
|
|
205
|
+
(A `.env` file works for a source checkout; if you installed with `pip install greenpick`, use one
|
|
206
|
+
of the options below.)
|
|
207
|
+
|
|
208
|
+
**In an MCP client** (Kiro, Claude Desktop, Cursor…), add an `env` block to the server entry:
|
|
209
|
+
|
|
210
|
+
```json
|
|
211
|
+
{
|
|
212
|
+
"mcpServers": {
|
|
213
|
+
"greenpick": {
|
|
214
|
+
"command": "python",
|
|
215
|
+
"args": ["-m", "greenpick"],
|
|
216
|
+
"env": {
|
|
217
|
+
"GREENPICK_CARBON_SOURCE": "auto",
|
|
218
|
+
"EIA_API_KEY": "your-eia-key",
|
|
219
|
+
"ENTSOE_TOKEN": "your-entsoe-token"
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
**In a Jupyter notebook or Python script**, set them before you start (or import) the server:
|
|
227
|
+
|
|
228
|
+
```python
|
|
229
|
+
import os
|
|
230
|
+
os.environ["GREENPICK_CARBON_SOURCE"] = "auto"
|
|
231
|
+
os.environ["EIA_API_KEY"] = "your-eia-key"
|
|
232
|
+
os.environ["ENTSOE_TOKEN"] = "your-entsoe-token"
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
Every carbon figure includes a `quality` field: `live` means real grid data, `mock` means a
|
|
236
|
+
fallback value. Check it to confirm live data is on.
|
|
237
|
+
|
|
200
238
|
## FAQ
|
|
201
239
|
|
|
202
240
|
**Do I need API keys?** No — GreenPick runs on clearly-labelled mock data out of the box. For *live*
|
|
203
|
-
carbon, set two free keys
|
|
204
|
-
`GREENPICK_CARBON_SOURCE=auto
|
|
241
|
+
carbon, set two free keys (`EIA_API_KEY` for US, `ENTSOE_TOKEN` for EU) and
|
|
242
|
+
`GREENPICK_CARBON_SOURCE=auto` — see [Turn on live data](#turn-on-live-data). Without them it still
|
|
243
|
+
works; it just says `quality: "mock"`.
|
|
205
244
|
|
|
206
245
|
**Why "directional" and not audited numbers?** Because it's for a *design-time decision*, not a
|
|
207
246
|
compliance report. "Stockholm is ~30× cleaner than Sydney" is what you need to pick a region in
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "greenpick"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.2"
|
|
4
4
|
description = "Design-time sustainability co-pilot (MCP server): greener, cheaper cloud infrastructure decisions with carbon + cost + latency tradeoffs."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
@@ -345,5 +345,5 @@ def explain_methodology_and_limits() -> dict:
|
|
|
345
345
|
"forecast": "Day-ahead forecast is RELATIVE: upcoming hours ranked by forecast wind+solar output (ENTSO-E A69), not an absolute gCO2/kWh forecast. EU only; US/uncovered zones degrade to the recent historical pattern (labelled 'historical').",
|
|
346
346
|
"data_residency": "GreenPick flags when a recommended move CROSSES a jurisdiction (esp. leaving the EEA) as a geographic heads-up only. It does NOT assess legal/GDPR compliance, does not encode adequacy decisions, and is not legal advice — confirm with your own data governance.",
|
|
347
347
|
"ignored": "Embodied/hardware carbon and provider renewable-energy certificates.",
|
|
348
|
-
"data_sources": "
|
|
348
|
+
"data_sources": "GREENPICK_CARBON_SOURCE=auto routes US regions to EIA-930 and EU regions to ENTSO-E (both free, live); other regions, or any region without a key, use clearly-labelled mock data. Electricity Maps is available when selected explicitly (GREENPICK_CARBON_SOURCE=electricitymaps).",
|
|
349
349
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: greenpick
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
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
|
|
@@ -29,7 +29,7 @@ Requires-Dist: ijson>=3.0; extra == "dev"
|
|
|
29
29
|
Dynamic: license-file
|
|
30
30
|
|
|
31
31
|
<p align="center">
|
|
32
|
-
<img src="docs/img/logo.svg" alt="GreenPick logo — a leaf whose veins are circuit traces" width="120" />
|
|
32
|
+
<img src="https://raw.githubusercontent.com/bithug01/greenpick/master/docs/img/logo.svg" alt="GreenPick logo — a leaf whose veins are circuit traces" width="120" />
|
|
33
33
|
</p>
|
|
34
34
|
|
|
35
35
|
<h1 align="center">GreenPick</h1>
|
|
@@ -58,7 +58,7 @@ seconds. (It responds when you ask; auto-nudging on infra-code changes is on the
|
|
|
58
58
|
> checks — all shipped. Falls back to clearly-labelled mock data offline or without API keys.
|
|
59
59
|
|
|
60
60
|
<p align="center">
|
|
61
|
-
<img src="docs/img/region-carbon-30x.svg" alt="Same H100 training run, ~30× the carbon depending only on region (Stockholm vs Sydney)" width="560" />
|
|
61
|
+
<img src="https://raw.githubusercontent.com/bithug01/greenpick/master/docs/img/region-carbon-30x.svg" alt="Same H100 training run, ~30× the carbon depending only on region (Stockholm vs Sydney)" width="560" />
|
|
62
62
|
</p>
|
|
63
63
|
|
|
64
64
|
*The same 40-GPU-hour training run emits ~0.7 kg CO₂ in Stockholm vs ~19 kg in Sydney — a ~30×
|
|
@@ -227,11 +227,50 @@ pytest # run tests
|
|
|
227
227
|
Connect it to an MCP client (e.g. Kiro / Claude Code / Cursor) by pointing the client at
|
|
228
228
|
`python -m greenpick` in this directory. See `.env.example` for switching the data source.
|
|
229
229
|
|
|
230
|
+
### Turn on live data
|
|
231
|
+
|
|
232
|
+
GreenPick runs on labelled mock data until you give it two free keys:
|
|
233
|
+
[EIA](https://www.eia.gov/opendata/register.php) (US grid) and
|
|
234
|
+
[ENTSO-E](https://transparency.entsoe.eu/) (EU grid). Pass them as environment variables.
|
|
235
|
+
(A `.env` file works for a source checkout; if you installed with `pip install greenpick`, use one
|
|
236
|
+
of the options below.)
|
|
237
|
+
|
|
238
|
+
**In an MCP client** (Kiro, Claude Desktop, Cursor…), add an `env` block to the server entry:
|
|
239
|
+
|
|
240
|
+
```json
|
|
241
|
+
{
|
|
242
|
+
"mcpServers": {
|
|
243
|
+
"greenpick": {
|
|
244
|
+
"command": "python",
|
|
245
|
+
"args": ["-m", "greenpick"],
|
|
246
|
+
"env": {
|
|
247
|
+
"GREENPICK_CARBON_SOURCE": "auto",
|
|
248
|
+
"EIA_API_KEY": "your-eia-key",
|
|
249
|
+
"ENTSOE_TOKEN": "your-entsoe-token"
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
**In a Jupyter notebook or Python script**, set them before you start (or import) the server:
|
|
257
|
+
|
|
258
|
+
```python
|
|
259
|
+
import os
|
|
260
|
+
os.environ["GREENPICK_CARBON_SOURCE"] = "auto"
|
|
261
|
+
os.environ["EIA_API_KEY"] = "your-eia-key"
|
|
262
|
+
os.environ["ENTSOE_TOKEN"] = "your-entsoe-token"
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
Every carbon figure includes a `quality` field: `live` means real grid data, `mock` means a
|
|
266
|
+
fallback value. Check it to confirm live data is on.
|
|
267
|
+
|
|
230
268
|
## FAQ
|
|
231
269
|
|
|
232
270
|
**Do I need API keys?** No — GreenPick runs on clearly-labelled mock data out of the box. For *live*
|
|
233
|
-
carbon, set two free keys
|
|
234
|
-
`GREENPICK_CARBON_SOURCE=auto
|
|
271
|
+
carbon, set two free keys (`EIA_API_KEY` for US, `ENTSOE_TOKEN` for EU) and
|
|
272
|
+
`GREENPICK_CARBON_SOURCE=auto` — see [Turn on live data](#turn-on-live-data). Without them it still
|
|
273
|
+
works; it just says `quality: "mock"`.
|
|
235
274
|
|
|
236
275
|
**Why "directional" and not audited numbers?** Because it's for a *design-time decision*, not a
|
|
237
276
|
compliance report. "Stockholm is ~30× cleaner than Sydney" is what you need to pick a region in
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|