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.
Files changed (48) hide show
  1. {greenpick-0.1.1/src/greenpick.egg-info → greenpick-0.1.3}/PKG-INFO +45 -5
  2. {greenpick-0.1.1 → greenpick-0.1.3}/README.md +44 -4
  3. {greenpick-0.1.1 → greenpick-0.1.3}/pyproject.toml +1 -1
  4. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/__init__.py +1 -1
  5. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/server.py +1 -1
  6. {greenpick-0.1.1 → greenpick-0.1.3/src/greenpick.egg-info}/PKG-INFO +45 -5
  7. {greenpick-0.1.1 → greenpick-0.1.3}/LICENSE +0 -0
  8. {greenpick-0.1.1 → greenpick-0.1.3}/setup.cfg +0 -0
  9. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/__main__.py +0 -0
  10. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/config.py +0 -0
  11. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/__init__.py +0 -0
  12. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/auto_repository.py +0 -0
  13. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/eia_repository.py +0 -0
  14. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/electricitymaps_repository.py +0 -0
  15. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/emission_factors.json +0 -0
  16. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/entsoe_repository.py +0 -0
  17. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/gpu_power.json +0 -0
  18. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/inference_energy.json +0 -0
  19. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/instance_families.json +0 -0
  20. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/mock_repository.py +0 -0
  21. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/network.json +0 -0
  22. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/power.json +0 -0
  23. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/pricing.json +0 -0
  24. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/regions.json +0 -0
  25. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/repository.py +0 -0
  26. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/data/static_data.py +0 -0
  27. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/models.py +0 -0
  28. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/__init__.py +0 -0
  29. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/carbon_service.py +0 -0
  30. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/cost_service.py +0 -0
  31. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/forecast_service.py +0 -0
  32. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/inference_service.py +0 -0
  33. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/instance_service.py +0 -0
  34. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/latency_service.py +0 -0
  35. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/locality_service.py +0 -0
  36. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/metric_scaffold_service.py +0 -0
  37. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/recommender.py +0 -0
  38. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/residency_service.py +0 -0
  39. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/rightsizing_service.py +0 -0
  40. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/scheduling_service.py +0 -0
  41. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/serving_service.py +0 -0
  42. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick/services/training_service.py +0 -0
  43. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick.egg-info/SOURCES.txt +0 -0
  44. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick.egg-info/dependency_links.txt +0 -0
  45. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick.egg-info/entry_points.txt +0 -0
  46. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick.egg-info/requires.txt +0 -0
  47. {greenpick-0.1.1 → greenpick-0.1.3}/src/greenpick.egg-info/top_level.txt +0 -0
  48. {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.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` in `.env` (both free) for live carbon; `GREENPICK_CARBON_SOURCE`
197
- selects the source (`auto` routes US→EIA, EU→ENTSO-E, else mock).
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 in `.env` (`EIA_API_KEY` for US, `ENTSOE_TOKEN` for EU) and
234
- `GREENPICK_CARBON_SOURCE=auto`. Without them it still works; it just says `quality: "mock"`.
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` in `.env` (both free) for live carbon; `GREENPICK_CARBON_SOURCE`
167
- selects the source (`auto` routes US→EIA, EU→ENTSO-E, else mock).
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 in `.env` (`EIA_API_KEY` for US, `ENTSOE_TOKEN` for EU) and
204
- `GREENPICK_CARBON_SOURCE=auto`. Without them it still works; it just says `quality: "mock"`.
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.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"
@@ -4,4 +4,4 @@ Greener cloud-region choices with honest carbon + cost + latency tradeoffs,
4
4
  delivered inside the vibe-coding loop. Directional guidance, not audited accounting.
5
5
  """
6
6
 
7
- __version__ = "0.1.1"
7
+ __version__ = "0.1.3"
@@ -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": "Electricity Maps free tier (primary); ENTSO-E / EIA / NESO fallbacks; annual averages offline.",
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.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` in `.env` (both free) for live carbon; `GREENPICK_CARBON_SOURCE`
197
- selects the source (`auto` routes US→EIA, EU→ENTSO-E, else mock).
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 in `.env` (`EIA_API_KEY` for US, `ENTSOE_TOKEN` for EU) and
234
- `GREENPICK_CARBON_SOURCE=auto`. Without them it still works; it just says `quality: "mock"`.
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