greenpick 0.1.1__tar.gz → 0.1.3__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.1/src/greenpick.egg-info → greenpick-0.1.3}/PKG-INFO +45 -5
- {greenpick-0.1.1 → greenpick-0.1.3}/README.md +44 -4
- {greenpick-0.1.1 → greenpick-0.1.3}/pyproject.toml +1 -1
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/__init__.py +1 -1
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/server.py +1 -1
- {greenpick-0.1.1 → greenpick-0.1.3/src/greenpick.egg-info}/PKG-INFO +45 -5
- {greenpick-0.1.1 → greenpick-0.1.3}/LICENSE +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/setup.cfg +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/__main__.py +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/config.py +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/__init__.py +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/auto_repository.py +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/eia_repository.py +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/electricitymaps_repository.py +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/emission_factors.json +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/entsoe_repository.py +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/gpu_power.json +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/inference_energy.json +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/instance_families.json +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/mock_repository.py +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/network.json +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/power.json +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/pricing.json +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/regions.json +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/repository.py +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/static_data.py +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/models.py +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/__init__.py +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/carbon_service.py +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/cost_service.py +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/forecast_service.py +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/inference_service.py +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/instance_service.py +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/latency_service.py +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/locality_service.py +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/metric_scaffold_service.py +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/recommender.py +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/residency_service.py +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/rightsizing_service.py +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/scheduling_service.py +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/serving_service.py +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/training_service.py +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick.egg-info/SOURCES.txt +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick.egg-info/dependency_links.txt +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick.egg-info/entry_points.txt +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick.egg-info/requires.txt +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick.egg-info/top_level.txt +0 -0
- {greenpick-0.1.1 → greenpick-0.1.3}/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.3
|
|
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
|
|
@@ -193,8 +193,9 @@ See `docs/user-questions-backlog.md`.
|
|
|
193
193
|
- Instance-family efficiency: directional perf-per-watt multipliers (`data/instance_families.json`).
|
|
194
194
|
- Latency: great-circle distance from region coordinates to the user's location.
|
|
195
195
|
|
|
196
|
-
Set `EIA_API_KEY` and `ENTSOE_TOKEN`
|
|
197
|
-
selects the source (`auto` routes
|
|
196
|
+
Set `EIA_API_KEY` and `ENTSOE_TOKEN` (both free) for live carbon — see
|
|
197
|
+
[Turn on live data](#turn-on-live-data); `GREENPICK_CARBON_SOURCE` selects the source (`auto` routes
|
|
198
|
+
US→EIA, EU→ENTSO-E, else mock).
|
|
198
199
|
|
|
199
200
|
The data layer is a swappable repository (`MOCK` by default, works offline). Nothing here invents
|
|
200
201
|
numbers: the LLM writes the *rationale*, the code supplies the *figures*.
|
|
@@ -227,11 +228,50 @@ pytest # run tests
|
|
|
227
228
|
Connect it to an MCP client (e.g. Kiro / Claude Code / Cursor) by pointing the client at
|
|
228
229
|
`python -m greenpick` in this directory. See `.env.example` for switching the data source.
|
|
229
230
|
|
|
231
|
+
### Turn on live data
|
|
232
|
+
|
|
233
|
+
GreenPick runs on labelled mock data until you give it two free keys:
|
|
234
|
+
[EIA](https://www.eia.gov/opendata/register.php) (US grid) and
|
|
235
|
+
[ENTSO-E](https://transparency.entsoe.eu/) (EU grid). Pass them as environment variables.
|
|
236
|
+
(A `.env` file works for a source checkout; if you installed with `pip install greenpick`, use one
|
|
237
|
+
of the options below.)
|
|
238
|
+
|
|
239
|
+
**In an MCP client** (Kiro, Claude Desktop, Cursor…), add an `env` block to the server entry:
|
|
240
|
+
|
|
241
|
+
```json
|
|
242
|
+
{
|
|
243
|
+
"mcpServers": {
|
|
244
|
+
"greenpick": {
|
|
245
|
+
"command": "python",
|
|
246
|
+
"args": ["-m", "greenpick"],
|
|
247
|
+
"env": {
|
|
248
|
+
"GREENPICK_CARBON_SOURCE": "auto",
|
|
249
|
+
"EIA_API_KEY": "your-eia-key",
|
|
250
|
+
"ENTSOE_TOKEN": "your-entsoe-token"
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
**In a Jupyter notebook or Python script**, set them before you start (or import) the server:
|
|
258
|
+
|
|
259
|
+
```python
|
|
260
|
+
import os
|
|
261
|
+
os.environ["GREENPICK_CARBON_SOURCE"] = "auto"
|
|
262
|
+
os.environ["EIA_API_KEY"] = "your-eia-key"
|
|
263
|
+
os.environ["ENTSOE_TOKEN"] = "your-entsoe-token"
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
Every carbon figure includes a `quality` field: `live` means real grid data, `mock` means a
|
|
267
|
+
fallback value. Check it to confirm live data is on.
|
|
268
|
+
|
|
230
269
|
## FAQ
|
|
231
270
|
|
|
232
271
|
**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
|
|
272
|
+
carbon, set two free keys (`EIA_API_KEY` for US, `ENTSOE_TOKEN` for EU) and
|
|
273
|
+
`GREENPICK_CARBON_SOURCE=auto` — see [Turn on live data](#turn-on-live-data). Without them it still
|
|
274
|
+
works; it just says `quality: "mock"`.
|
|
235
275
|
|
|
236
276
|
**Why "directional" and not audited numbers?** Because it's for a *design-time decision*, not a
|
|
237
277
|
compliance report. "Stockholm is ~30× cleaner than Sydney" is what you need to pick a region in
|
|
@@ -163,8 +163,9 @@ See `docs/user-questions-backlog.md`.
|
|
|
163
163
|
- Instance-family efficiency: directional perf-per-watt multipliers (`data/instance_families.json`).
|
|
164
164
|
- Latency: great-circle distance from region coordinates to the user's location.
|
|
165
165
|
|
|
166
|
-
Set `EIA_API_KEY` and `ENTSOE_TOKEN`
|
|
167
|
-
selects the source (`auto` routes
|
|
166
|
+
Set `EIA_API_KEY` and `ENTSOE_TOKEN` (both free) for live carbon — see
|
|
167
|
+
[Turn on live data](#turn-on-live-data); `GREENPICK_CARBON_SOURCE` selects the source (`auto` routes
|
|
168
|
+
US→EIA, EU→ENTSO-E, else mock).
|
|
168
169
|
|
|
169
170
|
The data layer is a swappable repository (`MOCK` by default, works offline). Nothing here invents
|
|
170
171
|
numbers: the LLM writes the *rationale*, the code supplies the *figures*.
|
|
@@ -197,11 +198,50 @@ pytest # run tests
|
|
|
197
198
|
Connect it to an MCP client (e.g. Kiro / Claude Code / Cursor) by pointing the client at
|
|
198
199
|
`python -m greenpick` in this directory. See `.env.example` for switching the data source.
|
|
199
200
|
|
|
201
|
+
### Turn on live data
|
|
202
|
+
|
|
203
|
+
GreenPick runs on labelled mock data until you give it two free keys:
|
|
204
|
+
[EIA](https://www.eia.gov/opendata/register.php) (US grid) and
|
|
205
|
+
[ENTSO-E](https://transparency.entsoe.eu/) (EU grid). Pass them as environment variables.
|
|
206
|
+
(A `.env` file works for a source checkout; if you installed with `pip install greenpick`, use one
|
|
207
|
+
of the options below.)
|
|
208
|
+
|
|
209
|
+
**In an MCP client** (Kiro, Claude Desktop, Cursor…), add an `env` block to the server entry:
|
|
210
|
+
|
|
211
|
+
```json
|
|
212
|
+
{
|
|
213
|
+
"mcpServers": {
|
|
214
|
+
"greenpick": {
|
|
215
|
+
"command": "python",
|
|
216
|
+
"args": ["-m", "greenpick"],
|
|
217
|
+
"env": {
|
|
218
|
+
"GREENPICK_CARBON_SOURCE": "auto",
|
|
219
|
+
"EIA_API_KEY": "your-eia-key",
|
|
220
|
+
"ENTSOE_TOKEN": "your-entsoe-token"
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
**In a Jupyter notebook or Python script**, set them before you start (or import) the server:
|
|
228
|
+
|
|
229
|
+
```python
|
|
230
|
+
import os
|
|
231
|
+
os.environ["GREENPICK_CARBON_SOURCE"] = "auto"
|
|
232
|
+
os.environ["EIA_API_KEY"] = "your-eia-key"
|
|
233
|
+
os.environ["ENTSOE_TOKEN"] = "your-entsoe-token"
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
Every carbon figure includes a `quality` field: `live` means real grid data, `mock` means a
|
|
237
|
+
fallback value. Check it to confirm live data is on.
|
|
238
|
+
|
|
200
239
|
## FAQ
|
|
201
240
|
|
|
202
241
|
**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
|
|
242
|
+
carbon, set two free keys (`EIA_API_KEY` for US, `ENTSOE_TOKEN` for EU) and
|
|
243
|
+
`GREENPICK_CARBON_SOURCE=auto` — see [Turn on live data](#turn-on-live-data). Without them it still
|
|
244
|
+
works; it just says `quality: "mock"`.
|
|
205
245
|
|
|
206
246
|
**Why "directional" and not audited numbers?** Because it's for a *design-time decision*, not a
|
|
207
247
|
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.3"
|
|
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.3
|
|
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
|
|
@@ -193,8 +193,9 @@ See `docs/user-questions-backlog.md`.
|
|
|
193
193
|
- Instance-family efficiency: directional perf-per-watt multipliers (`data/instance_families.json`).
|
|
194
194
|
- Latency: great-circle distance from region coordinates to the user's location.
|
|
195
195
|
|
|
196
|
-
Set `EIA_API_KEY` and `ENTSOE_TOKEN`
|
|
197
|
-
selects the source (`auto` routes
|
|
196
|
+
Set `EIA_API_KEY` and `ENTSOE_TOKEN` (both free) for live carbon — see
|
|
197
|
+
[Turn on live data](#turn-on-live-data); `GREENPICK_CARBON_SOURCE` selects the source (`auto` routes
|
|
198
|
+
US→EIA, EU→ENTSO-E, else mock).
|
|
198
199
|
|
|
199
200
|
The data layer is a swappable repository (`MOCK` by default, works offline). Nothing here invents
|
|
200
201
|
numbers: the LLM writes the *rationale*, the code supplies the *figures*.
|
|
@@ -227,11 +228,50 @@ pytest # run tests
|
|
|
227
228
|
Connect it to an MCP client (e.g. Kiro / Claude Code / Cursor) by pointing the client at
|
|
228
229
|
`python -m greenpick` in this directory. See `.env.example` for switching the data source.
|
|
229
230
|
|
|
231
|
+
### Turn on live data
|
|
232
|
+
|
|
233
|
+
GreenPick runs on labelled mock data until you give it two free keys:
|
|
234
|
+
[EIA](https://www.eia.gov/opendata/register.php) (US grid) and
|
|
235
|
+
[ENTSO-E](https://transparency.entsoe.eu/) (EU grid). Pass them as environment variables.
|
|
236
|
+
(A `.env` file works for a source checkout; if you installed with `pip install greenpick`, use one
|
|
237
|
+
of the options below.)
|
|
238
|
+
|
|
239
|
+
**In an MCP client** (Kiro, Claude Desktop, Cursor…), add an `env` block to the server entry:
|
|
240
|
+
|
|
241
|
+
```json
|
|
242
|
+
{
|
|
243
|
+
"mcpServers": {
|
|
244
|
+
"greenpick": {
|
|
245
|
+
"command": "python",
|
|
246
|
+
"args": ["-m", "greenpick"],
|
|
247
|
+
"env": {
|
|
248
|
+
"GREENPICK_CARBON_SOURCE": "auto",
|
|
249
|
+
"EIA_API_KEY": "your-eia-key",
|
|
250
|
+
"ENTSOE_TOKEN": "your-entsoe-token"
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
**In a Jupyter notebook or Python script**, set them before you start (or import) the server:
|
|
258
|
+
|
|
259
|
+
```python
|
|
260
|
+
import os
|
|
261
|
+
os.environ["GREENPICK_CARBON_SOURCE"] = "auto"
|
|
262
|
+
os.environ["EIA_API_KEY"] = "your-eia-key"
|
|
263
|
+
os.environ["ENTSOE_TOKEN"] = "your-entsoe-token"
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
Every carbon figure includes a `quality` field: `live` means real grid data, `mock` means a
|
|
267
|
+
fallback value. Check it to confirm live data is on.
|
|
268
|
+
|
|
230
269
|
## FAQ
|
|
231
270
|
|
|
232
271
|
**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
|
|
272
|
+
carbon, set two free keys (`EIA_API_KEY` for US, `ENTSOE_TOKEN` for EU) and
|
|
273
|
+
`GREENPICK_CARBON_SOURCE=auto` — see [Turn on live data](#turn-on-live-data). Without them it still
|
|
274
|
+
works; it just says `quality: "mock"`.
|
|
235
275
|
|
|
236
276
|
**Why "directional" and not audited numbers?** Because it's for a *design-time decision*, not a
|
|
237
277
|
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
|