geoai-py 0.15.0__tar.gz → 0.17.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.
Files changed (56) hide show
  1. {geoai_py-0.15.0 → geoai_py-0.17.0}/.gitignore +1 -0
  2. {geoai_py-0.15.0 → geoai_py-0.17.0}/.pre-commit-config.yaml +1 -1
  3. {geoai_py-0.15.0 → geoai_py-0.17.0}/PKG-INFO +2 -1
  4. {geoai_py-0.15.0 → geoai_py-0.17.0}/geoai/__init__.py +1 -1
  5. {geoai_py-0.15.0 → geoai_py-0.17.0}/geoai/agents/__init__.py +4 -0
  6. geoai_py-0.17.0/geoai/agents/catalog_models.py +51 -0
  7. geoai_py-0.17.0/geoai/agents/catalog_tools.py +907 -0
  8. geoai_py-0.17.0/geoai/agents/geo_agents.py +1479 -0
  9. geoai_py-0.17.0/geoai/agents/stac_models.py +67 -0
  10. geoai_py-0.17.0/geoai/agents/stac_tools.py +435 -0
  11. {geoai_py-0.15.0 → geoai_py-0.17.0}/geoai/change_detection.py +16 -6
  12. {geoai_py-0.15.0 → geoai_py-0.17.0}/geoai/download.py +5 -1
  13. {geoai_py-0.15.0 → geoai_py-0.17.0}/geoai/geoai.py +3 -0
  14. {geoai_py-0.15.0 → geoai_py-0.17.0}/geoai/train.py +573 -31
  15. {geoai_py-0.15.0 → geoai_py-0.17.0}/geoai/utils.py +752 -208
  16. {geoai_py-0.15.0 → geoai_py-0.17.0}/geoai_py.egg-info/PKG-INFO +2 -1
  17. {geoai_py-0.15.0 → geoai_py-0.17.0}/geoai_py.egg-info/SOURCES.txt +4 -0
  18. {geoai_py-0.15.0 → geoai_py-0.17.0}/geoai_py.egg-info/requires.txt +1 -0
  19. {geoai_py-0.15.0 → geoai_py-0.17.0}/mkdocs.yml +3 -0
  20. {geoai_py-0.15.0 → geoai_py-0.17.0}/pyproject.toml +4 -4
  21. {geoai_py-0.15.0 → geoai_py-0.17.0}/requirements_docs.txt +1 -1
  22. geoai_py-0.15.0/geoai/agents/geo_agents.py +0 -595
  23. {geoai_py-0.15.0 → geoai_py-0.17.0}/.dockerignore +0 -0
  24. {geoai_py-0.15.0 → geoai_py-0.17.0}/.editorconfig +0 -0
  25. {geoai_py-0.15.0 → geoai_py-0.17.0}/CITATION.cff +0 -0
  26. {geoai_py-0.15.0 → geoai_py-0.17.0}/Dockerfile +0 -0
  27. {geoai_py-0.15.0 → geoai_py-0.17.0}/LICENSE +0 -0
  28. {geoai_py-0.15.0 → geoai_py-0.17.0}/MANIFEST.in +0 -0
  29. {geoai_py-0.15.0 → geoai_py-0.17.0}/README.md +0 -0
  30. {geoai_py-0.15.0 → geoai_py-0.17.0}/geoai/agents/map_tools.py +0 -0
  31. {geoai_py-0.15.0 → geoai_py-0.17.0}/geoai/classify.py +0 -0
  32. {geoai_py-0.15.0 → geoai_py-0.17.0}/geoai/detectron2.py +0 -0
  33. {geoai_py-0.15.0 → geoai_py-0.17.0}/geoai/dinov3.py +0 -0
  34. {geoai_py-0.15.0 → geoai_py-0.17.0}/geoai/extract.py +0 -0
  35. {geoai_py-0.15.0 → geoai_py-0.17.0}/geoai/hf.py +0 -0
  36. {geoai_py-0.15.0 → geoai_py-0.17.0}/geoai/map_widgets.py +0 -0
  37. {geoai_py-0.15.0 → geoai_py-0.17.0}/geoai/sam.py +0 -0
  38. {geoai_py-0.15.0 → geoai_py-0.17.0}/geoai/segment.py +0 -0
  39. {geoai_py-0.15.0 → geoai_py-0.17.0}/geoai/segmentation.py +0 -0
  40. {geoai_py-0.15.0 → geoai_py-0.17.0}/geoai/timm_segment.py +0 -0
  41. {geoai_py-0.15.0 → geoai_py-0.17.0}/geoai/timm_train.py +0 -0
  42. {geoai_py-0.15.0 → geoai_py-0.17.0}/geoai_py.egg-info/dependency_links.txt +0 -0
  43. {geoai_py-0.15.0 → geoai_py-0.17.0}/geoai_py.egg-info/entry_points.txt +0 -0
  44. {geoai_py-0.15.0 → geoai_py-0.17.0}/geoai_py.egg-info/top_level.txt +0 -0
  45. {geoai_py-0.15.0 → geoai_py-0.17.0}/pytest.ini +0 -0
  46. {geoai_py-0.15.0 → geoai_py-0.17.0}/requirements.txt +0 -0
  47. {geoai_py-0.15.0 → geoai_py-0.17.0}/setup.cfg +0 -0
  48. {geoai_py-0.15.0 → geoai_py-0.17.0}/tests/__init__.py +0 -0
  49. {geoai_py-0.15.0 → geoai_py-0.17.0}/tests/create_test_data.py +0 -0
  50. {geoai_py-0.15.0 → geoai_py-0.17.0}/tests/test_classify.py +0 -0
  51. {geoai_py-0.15.0 → geoai_py-0.17.0}/tests/test_download.py +0 -0
  52. {geoai_py-0.15.0 → geoai_py-0.17.0}/tests/test_extract.py +0 -0
  53. {geoai_py-0.15.0 → geoai_py-0.17.0}/tests/test_fixtures.py +0 -0
  54. {geoai_py-0.15.0 → geoai_py-0.17.0}/tests/test_geoai.py +0 -0
  55. {geoai_py-0.15.0 → geoai_py-0.17.0}/tests/test_segment.py +0 -0
  56. {geoai_py-0.15.0 → geoai_py-0.17.0}/tests/test_utils.py +0 -0
@@ -7,6 +7,7 @@ private/
7
7
  tests/data/
8
8
  CLAUDE.md
9
9
  AI_AGENTS.md
10
+ AGENTS.md
10
11
  docs/examples/timm_output/
11
12
  docs/examples/timm_seg_output/
12
13
  docs/examples/timm_buildings/
@@ -11,7 +11,7 @@ repos:
11
11
  - id: check-added-large-files
12
12
  args: ["--maxkb=500"]
13
13
 
14
- - repo: https://github.com/psf/black
14
+ - repo: https://github.com/psf/black-pre-commit-mirror
15
15
  rev: 25.9.0
16
16
  hooks:
17
17
  - id: black-jupyter
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: geoai-py
3
- Version: 0.15.0
3
+ Version: 0.17.0
4
4
  Summary: A Python package for using Artificial Intelligence (AI) with geospatial data
5
5
  Author-email: Qiusheng Wu <giswqs@gmail.com>
6
6
  License: MIT License
@@ -47,6 +47,7 @@ Requires-Dist: transformers
47
47
  Provides-Extra: extra
48
48
  Requires-Dist: overturemaps; extra == "extra"
49
49
  Requires-Dist: torchange; extra == "extra"
50
+ Requires-Dist: lightly-train; extra == "extra"
50
51
  Provides-Extra: agents
51
52
  Requires-Dist: strands-agents; extra == "agents"
52
53
  Requires-Dist: strands-agents-tools; extra == "agents"
@@ -2,7 +2,7 @@
2
2
 
3
3
  __author__ = """Qiusheng Wu"""
4
4
  __email__ = "giswqs@gmail.com"
5
- __version__ = "0.15.0"
5
+ __version__ = "0.17.0"
6
6
 
7
7
 
8
8
  import os
@@ -1,8 +1,12 @@
1
+ from .catalog_tools import CatalogTools
1
2
  from .geo_agents import (
3
+ CatalogAgent,
2
4
  GeoAgent,
5
+ STACAgent,
3
6
  create_ollama_model,
4
7
  create_anthropic_model,
5
8
  create_openai_model,
6
9
  create_bedrock_model,
7
10
  )
8
11
  from .map_tools import MapTools
12
+ from .stac_tools import STACTools
@@ -0,0 +1,51 @@
1
+ """Structured output models for catalog search results."""
2
+
3
+ from typing import Any, Dict, List, Optional
4
+
5
+ from pydantic import BaseModel, Field
6
+
7
+
8
+ class CatalogDatasetInfo(BaseModel):
9
+ """Information about a catalog dataset."""
10
+
11
+ id: str = Field(..., description="Dataset identifier")
12
+ title: str = Field(..., description="Dataset title")
13
+ type: Optional[str] = Field(
14
+ None, description="Dataset type (e.g., image, image_collection, table)"
15
+ )
16
+ provider: Optional[str] = Field(None, description="Data provider")
17
+ description: Optional[str] = Field(None, description="Dataset description")
18
+ keywords: Optional[str] = Field(None, description="Keywords/tags")
19
+ snippet: Optional[str] = Field(
20
+ None, description="Code snippet to access the dataset"
21
+ )
22
+ start_date: Optional[str] = Field(None, description="Start date of coverage")
23
+ end_date: Optional[str] = Field(None, description="End date of coverage")
24
+ bbox: Optional[str] = Field(None, description="Bounding box")
25
+ license: Optional[str] = Field(None, description="License information")
26
+ url: Optional[str] = Field(None, description="Documentation URL")
27
+ catalog: Optional[str] = Field(None, description="Catalog URL")
28
+ deprecated: Optional[str] = Field(None, description="Deprecated status")
29
+
30
+
31
+ class CatalogSearchResult(BaseModel):
32
+ """Container for catalog search results."""
33
+
34
+ query: str = Field(..., description="Original search query")
35
+ dataset_count: int = Field(..., description="Number of datasets found")
36
+ datasets: List[CatalogDatasetInfo] = Field(
37
+ default_factory=list, description="List of catalog datasets"
38
+ )
39
+ filters: Optional[Dict[str, Any]] = Field(
40
+ None, description="Filters applied to search"
41
+ )
42
+
43
+
44
+ class LocationInfo(BaseModel):
45
+ """Geographic location information."""
46
+
47
+ name: str = Field(..., description="Location name")
48
+ bbox: List[float] = Field(
49
+ ..., description="Bounding box [west, south, east, north]"
50
+ )
51
+ center: List[float] = Field(..., description="Center coordinates [lon, lat]")