geomind-ai 1.0.6__tar.gz → 1.0.8__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.
- {geomind_ai-1.0.6 → geomind_ai-1.0.8}/PKG-INFO +5 -2
- {geomind_ai-1.0.6 → geomind_ai-1.0.8}/README.md +5 -2
- {geomind_ai-1.0.6 → geomind_ai-1.0.8}/geomind/__init__.py +1 -1
- {geomind_ai-1.0.6 → geomind_ai-1.0.8}/geomind/cli.py +15 -10
- {geomind_ai-1.0.6 → geomind_ai-1.0.8}/geomind/tools/processing.py +8 -2
- {geomind_ai-1.0.6 → geomind_ai-1.0.8}/geomind_ai.egg-info/PKG-INFO +5 -2
- {geomind_ai-1.0.6 → geomind_ai-1.0.8}/pyproject.toml +1 -1
- {geomind_ai-1.0.6 → geomind_ai-1.0.8}/LICENSE +0 -0
- {geomind_ai-1.0.6 → geomind_ai-1.0.8}/MANIFEST.in +0 -0
- {geomind_ai-1.0.6 → geomind_ai-1.0.8}/geomind/agent.py +0 -0
- {geomind_ai-1.0.6 → geomind_ai-1.0.8}/geomind/config.py +0 -0
- {geomind_ai-1.0.6 → geomind_ai-1.0.8}/geomind/tools/__init__.py +0 -0
- {geomind_ai-1.0.6 → geomind_ai-1.0.8}/geomind/tools/geocoding.py +0 -0
- {geomind_ai-1.0.6 → geomind_ai-1.0.8}/geomind/tools/stac_search.py +0 -0
- {geomind_ai-1.0.6 → geomind_ai-1.0.8}/geomind_ai.egg-info/SOURCES.txt +0 -0
- {geomind_ai-1.0.6 → geomind_ai-1.0.8}/geomind_ai.egg-info/dependency_links.txt +0 -0
- {geomind_ai-1.0.6 → geomind_ai-1.0.8}/geomind_ai.egg-info/entry_points.txt +0 -0
- {geomind_ai-1.0.6 → geomind_ai-1.0.8}/geomind_ai.egg-info/requires.txt +0 -0
- {geomind_ai-1.0.6 → geomind_ai-1.0.8}/geomind_ai.egg-info/top_level.txt +0 -0
- {geomind_ai-1.0.6 → geomind_ai-1.0.8}/requirements.txt +0 -0
- {geomind_ai-1.0.6 → geomind_ai-1.0.8}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: geomind-ai
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.8
|
|
4
4
|
Summary: AI agent for geospatial analysis with Sentinel-2 satellite imagery
|
|
5
5
|
Author: Harsh Shinde
|
|
6
6
|
License-Expression: MIT
|
|
@@ -50,12 +50,15 @@ geomind
|
|
|
50
50
|
|
|
51
51
|
# Single query
|
|
52
52
|
geomind --query "Find recent imagery of Paris"
|
|
53
|
+
|
|
54
|
+
geomind --query "Create an RGB true-color composite visualization from the December 25th image"
|
|
55
|
+
|
|
56
|
+
geomind --query "Create an NDVI from the December 25th image"
|
|
53
57
|
```
|
|
54
58
|
|
|
55
59
|
## Example Queries
|
|
56
60
|
|
|
57
61
|
```
|
|
58
|
-
|
|
59
62
|
💬 "Create an RGB composite for the most recent image of London"
|
|
60
63
|
|
|
61
64
|
💬 "Calculate NDVI for Central Park, New York"
|
|
@@ -12,12 +12,15 @@ geomind
|
|
|
12
12
|
|
|
13
13
|
# Single query
|
|
14
14
|
geomind --query "Find recent imagery of Paris"
|
|
15
|
+
|
|
16
|
+
geomind --query "Create an RGB true-color composite visualization from the December 25th image"
|
|
17
|
+
|
|
18
|
+
geomind --query "Create an NDVI from the December 25th image"
|
|
15
19
|
```
|
|
16
20
|
|
|
17
21
|
## Example Queries
|
|
18
22
|
|
|
19
23
|
```
|
|
20
|
-
|
|
21
24
|
💬 "Create an RGB composite for the most recent image of London"
|
|
22
25
|
|
|
23
26
|
💬 "Calculate NDVI for Central Park, New York"
|
|
@@ -37,4 +40,4 @@ Full Scene Download → Local Storage → Process → Result
|
|
|
37
40
|
```
|
|
38
41
|
HTTP Range Request → Stream Chunks → Process in Memory → Result
|
|
39
42
|
~1-5 MB No disk Fast
|
|
40
|
-
```
|
|
43
|
+
```
|
|
@@ -86,9 +86,7 @@ Environment Variables:
|
|
|
86
86
|
parser.add_argument(
|
|
87
87
|
"--version", "-v", action="store_true", help="Show version and exit"
|
|
88
88
|
)
|
|
89
|
-
parser.add_argument(
|
|
90
|
-
"--clear-key", action="store_true", help="Clear saved API key"
|
|
91
|
-
)
|
|
89
|
+
parser.add_argument("--clear-key", action="store_true", help="Clear saved API key")
|
|
92
90
|
|
|
93
91
|
args = parser.parse_args()
|
|
94
92
|
|
|
@@ -109,8 +107,10 @@ Environment Variables:
|
|
|
109
107
|
# Start interactive or single-query mode
|
|
110
108
|
try:
|
|
111
109
|
if args.query:
|
|
112
|
-
# Single query mode -
|
|
113
|
-
|
|
110
|
+
# Single query mode - check API key in order: argument > env > saved file
|
|
111
|
+
from .config import OPENROUTER_API_KEY
|
|
112
|
+
|
|
113
|
+
api_key = args.api_key or OPENROUTER_API_KEY or get_saved_api_key()
|
|
114
114
|
if not api_key:
|
|
115
115
|
print("❌ No API key found. Run 'geomind' first to set up.")
|
|
116
116
|
sys.exit(1)
|
|
@@ -132,21 +132,26 @@ Environment Variables:
|
|
|
132
132
|
|
|
133
133
|
def run_interactive(model: Optional[str] = None, api_key: Optional[str] = None):
|
|
134
134
|
"""Run interactive CLI mode."""
|
|
135
|
+
from . import __version__
|
|
136
|
+
|
|
135
137
|
print("=" * 60)
|
|
136
138
|
print("🌍 GeoMind - Geospatial AI Agent")
|
|
137
139
|
print("=" * 60)
|
|
138
|
-
print("
|
|
140
|
+
print(f"Version: {__version__} | Author: Harsh Shinde")
|
|
139
141
|
print("Type 'quit' or 'exit' to end the session")
|
|
140
142
|
print("Type 'reset' to start a new conversation")
|
|
141
|
-
print("
|
|
143
|
+
print("Type 'geomind --help' for more options")
|
|
142
144
|
|
|
143
145
|
# Check for API key in order: argument > env > saved file
|
|
144
146
|
from .config import OPENROUTER_API_KEY
|
|
145
147
|
|
|
146
|
-
|
|
148
|
+
# Priority: command line arg > env variable > saved file
|
|
149
|
+
if api_key:
|
|
150
|
+
# Use provided argument
|
|
151
|
+
pass
|
|
152
|
+
elif OPENROUTER_API_KEY:
|
|
147
153
|
api_key = OPENROUTER_API_KEY
|
|
148
|
-
|
|
149
|
-
if not api_key:
|
|
154
|
+
else:
|
|
150
155
|
api_key = get_saved_api_key()
|
|
151
156
|
|
|
152
157
|
if not api_key:
|
|
@@ -8,6 +8,12 @@ from typing import Optional, List, Tuple
|
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
import numpy as np
|
|
10
10
|
|
|
11
|
+
# Use non-interactive backend BEFORE any other matplotlib imports
|
|
12
|
+
import matplotlib
|
|
13
|
+
|
|
14
|
+
matplotlib.use("Agg")
|
|
15
|
+
import matplotlib.pyplot as plt
|
|
16
|
+
|
|
11
17
|
from ..config import (
|
|
12
18
|
REFLECTANCE_SCALE,
|
|
13
19
|
REFLECTANCE_OFFSET,
|
|
@@ -109,7 +115,6 @@ def create_rgb_composite(
|
|
|
109
115
|
"""
|
|
110
116
|
try:
|
|
111
117
|
import xarray as xr
|
|
112
|
-
import matplotlib.pyplot as plt
|
|
113
118
|
import zarr
|
|
114
119
|
|
|
115
120
|
# Open the Zarr store
|
|
@@ -164,6 +169,7 @@ def create_rgb_composite(
|
|
|
164
169
|
# Save
|
|
165
170
|
plt.savefig(output_path, dpi=150, bbox_inches="tight", pad_inches=0.1)
|
|
166
171
|
plt.close(fig)
|
|
172
|
+
plt.close('all') # Ensure all figures are closed
|
|
167
173
|
|
|
168
174
|
return {
|
|
169
175
|
"success": True,
|
|
@@ -200,7 +206,6 @@ def calculate_ndvi(
|
|
|
200
206
|
"""
|
|
201
207
|
try:
|
|
202
208
|
import zarr
|
|
203
|
-
import matplotlib.pyplot as plt
|
|
204
209
|
from matplotlib.colors import LinearSegmentedColormap
|
|
205
210
|
|
|
206
211
|
# Open the Zarr store
|
|
@@ -261,6 +266,7 @@ def calculate_ndvi(
|
|
|
261
266
|
# Save
|
|
262
267
|
plt.savefig(output_path, dpi=150, bbox_inches="tight", pad_inches=0.1)
|
|
263
268
|
plt.close(fig)
|
|
269
|
+
plt.close('all') # Ensure all figures are closed
|
|
264
270
|
|
|
265
271
|
return {
|
|
266
272
|
"success": True,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: geomind-ai
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.8
|
|
4
4
|
Summary: AI agent for geospatial analysis with Sentinel-2 satellite imagery
|
|
5
5
|
Author: Harsh Shinde
|
|
6
6
|
License-Expression: MIT
|
|
@@ -50,12 +50,15 @@ geomind
|
|
|
50
50
|
|
|
51
51
|
# Single query
|
|
52
52
|
geomind --query "Find recent imagery of Paris"
|
|
53
|
+
|
|
54
|
+
geomind --query "Create an RGB true-color composite visualization from the December 25th image"
|
|
55
|
+
|
|
56
|
+
geomind --query "Create an NDVI from the December 25th image"
|
|
53
57
|
```
|
|
54
58
|
|
|
55
59
|
## Example Queries
|
|
56
60
|
|
|
57
61
|
```
|
|
58
|
-
|
|
59
62
|
💬 "Create an RGB composite for the most recent image of London"
|
|
60
63
|
|
|
61
64
|
💬 "Calculate NDVI for Central Park, New York"
|
|
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
|