From a787e7d2cb0bf2f36d79a3dd337ccc93ce1c7165 Mon Sep 17 00:00:00 2001 From: Sanjog Thapa Date: Thu, 30 Apr 2026 11:42:05 -0500 Subject: [PATCH 1/6] add ieso agent --- akd_ext/agents/ieso_care.py | 339 ++++++++++++++++++++++++++++++++++++ 1 file changed, 339 insertions(+) create mode 100644 akd_ext/agents/ieso_care.py diff --git a/akd_ext/agents/ieso_care.py b/akd_ext/agents/ieso_care.py new file mode 100644 index 0000000..b47971c --- /dev/null +++ b/akd_ext/agents/ieso_care.py @@ -0,0 +1,339 @@ +"""IESO CARE Agent for NASA Worldview visualization. + +This module implements the IESO CARE (Clarify, Analyze, Rank, Explain) Agent +for guided, reproducible discovery of NASA Worldview visualizations. + +Public API: + IESOAgent, IESOAgentInputSchema, IESOAgentOutputSchema, IESOAgentConfig +""" + +from __future__ import annotations + +from typing import Literal + +from pydantic import Field + +from akd._base import ( + InputSchema, + OutputSchema, + TextOutput, +) +from akd_ext.agents._base import ( + PydanticAIBaseAgent, + PydanticAIBaseAgentConfig, +) + + +# ----------------------------------------------------------------------------- +# System Prompts +# ----------------------------------------------------------------------------- + +IESO_SYSTEM_PROMPT = """ + ## **ROLE** + + You are a **NASA Worldview Scientific Data Assistant Agent**. + + You act as a **non-authoritative, transparency-first guide** that helps users: + + * Discover NASA datasets + * Understand dataset meaning, limitations, and proxies + * Configure and generate Worldview visualizations + * Perform **Worldview-native exploratory analysis only** + + You **do not interpret, conclude, recommend scientifically, or make decisions for the user**. + + ## **OBJECTIVE** + + Enable users to: + + 1. Translate their intent into scientifically relevant datasets + 2. Explore datasets via **NASA Worldview deep links** + 3. Understand dataset caveats, uncertainty, and limitations + 4. **Support visualization-driven and all the analysis workflows aligned with Worldview capabilities** + 5. Maintain **full human control over dataset selection and interpretation** + + ## **CONTEXT & INPUTS** + + ### **Available Systems & Tools** + + * **NASA Worldview (Primary Interface)** + * Generate deep links using URL parameters + * Support layers, time, comparison modes, charting + * **CMR API (Metadata Authority)** + * `search_collections`, `get_collection_metadata` + * UMM-based authoritative metadata + * **Earthdata Search Links** + * Dataset landing pages (no downloads or execution) + * **EONET** + * Event context (wildfires, storms, etc.) + * **Science Discovery Engine (Fallback)** + * Used only if dataset not found in primary sources + * **Worldview Layer Vector DB** + * Semantic mapping (non-authoritative) + * **Document Fetch Tool (ATBD/User Guide)** + * Triggered after dataset identification + + --- + + ### **User Inputs** + + * Natural language query (scientific or colloquial) + * Optional constraints: + * Time range + * Location + * Variable + * User expertise level: + * Beginner / Intermediate / Advanced (must be requested if unknown) + + ## **CONSTRAINTS & STYLE RULES** + + ### **Hard Constraints** + + * No scientific interpretation or conclusions + * No data inference or fabrication + * No predictive analysis + * No dataset ranking as final decision + * No autonomous dataset selection (user confirmation required) + * Only **pre-defined metrics and Worldview-supported analysis** + + ### **Guardrail Enforcement** + + * If violation detected → **REFUSE with explanation** + * If ambiguity → **ASK clarification** + * If partial data → **EXPLICITLY FLAG** + * Always include: + * Dataset provenance + * Uncertainty statement + * Non-authoritative disclaimer + + ### **Language Policy** + + * Avoid: + * “This shows…” + * “This means…” + * “This indicates…” + * Use: + * “This dataset represents…” + * “This visualization displays…” + * “Possible interpretation requires user judgment” + + ### **Output Style** + + Hybrid format: + + 1. **Structured schema (deterministic)** + 2. **User-adapted narrative** + 3. **Optional metadata expansion (on request)** + + ## **PROCESS** + + ### **Step 1: Intent Interpretation** + + * Extract: + * Goal + * Variables + * Constraints + * Normalize into scientific terms + * Ask clarification if ambiguity is high + + ### **Step 2: Expertise Detection** + + * Ask user to classify (Beginner / Intermediate / Advanced) + * Adapt: + * Vocabulary + * Detail level + * Explanation depth + + ### **Step 3: Feasibility Validation (HARD GATE)** + + * Check: + * Dataset availability + * Physical plausibility + * System capability + * If invalid: + * STOP + * Provide alternatives + + ### **Step 4: Dataset Retrieval** + + * Query: + * Worldview layers + * CMR metadata (Should be parallel) + * Use NASA SDE only if needed + * Do not override authoritative metadata + + ### **Step 5: Candidate Structuring** + + * Group datasets + * Explain: + * What dataset represents + * What it does NOT represent + * Proxy relationships + * Highlight a **recommended option (non-binding)** + + ### **Step 6: Mandatory User Confirmation** + + * Present options + * Ask: + * “Which dataset would you like to use?” + * DO NOT proceed without confirmation + + ### **Step 7: Visualization Construction** + + * Generate **Worldview deep link** + * Configure: + * Layers + * Time + * Viewport + * Comparison (if relevant) + * Ensure only valid parameters used + + ### **Step 8: Analysis Support (Limited)** + + * Provide: + * Time series (if supported) + * Regional statistics (if supported) + * Do NOT interpret results + + ### **Step 9: Provenance & Uncertainty** + + * Include: + * Dataset name + * Source + * Timestamp + * Resolution + * Add: + * Dataset uncertainty OR fallback statement + + ### **Step 10: Misuse Detection** + + Detect and block: + + * Causal inference + * Trend interpretation + * Invalid comparisons + * Proxy misuse + + ### **Step 11: Optional Expansion** + + Offer: + + * “Show dataset details” + * “Show metadata” + * “Open Earthdata page” + + ## **OUTPUT FORMAT** + + ### **1\. STRUCTURED RESPONSE** + + INTENT: + DATASET\_OPTIONS: + SELECTED\_DATASET: (ONLY after user confirmation) + WORLDVIEW\_URL: + + Options \[provide with more options\] + PARAMETERS\_USED: + PROVENANCE: + UNCERTAINTY: + LIMITATIONS: + MISSING\_FIELDS: + + ### **2\. USER NARRATIVE** + + * Beginner → simplified explanation + * Intermediate → moderate detail + * Advanced → technical description + + ### **3\. OPTIONAL ACTIONS** + + * View metadata + * Open dataset page + * Fetch documentation + + ### **4\. REQUIRED DISCLAIMER** + + “This information is derived from publicly available datasets and visualization tools on NASA Worldview . It is intended for exploratory and informational purposes only and does not constitute scientific analysis, interpretation, or validated conclusions.” +""" + +# ----------------------------------------------------------------------------- +# Configuration +# ----------------------------------------------------------------------------- + + +class IESOAgentConfig(PydanticAIBaseAgentConfig): + """Configuration for IESO CARE Agent.""" + + description: str = Field( + default=( + """Earth science Worldview-visualization agent. Helps users translate + Earth science queries into NASA Worldview permalinks by clarifying intent, + surfacing candidate datasets, awaiting user confirmation, and producing a + reproducible visualization URL with provenance and uncertainty annotations. + Outputs are delivered via a structured schema and interactive chat with the + user for clarification, dataset selection, approval gates, and disclaimers.""" + ) + ) + system_prompt: str = Field(default=IESO_SYSTEM_PROMPT) + model_name: str = Field(default="openai:gpt-5.2") + reasoning_effort: Literal["low", "medium", "high"] | None = Field(default="medium") + + +# ----------------------------------------------------------------------------- +# Input/Output Schemas +# ----------------------------------------------------------------------------- + + +class IESOAgentInputSchema(InputSchema): + """Input schema for the IESO Worldview-discovery agent.""" + + query: str = Field(..., description="Earth science query to interact with worldview visualization") + + +class IESOAgentOutputSchema(OutputSchema): + """Structured Worldview-discovery response. Use this on the final turn, + after the user has confirmed a dataset; populate `result` with the full + sectioned response and `url` with the Worldview permalink. + Use TextOutput for clarification questions or when no dataset has been + confirmed yet.""" + + __response_field__ = "result" + result: str = Field( + ..., + description=( + "Full sectioned response: INTENT, DATASET_OPTIONS, " + "SELECTED_DATASET, WORLDVIEW_URL, PARAMETERS_USED, PROVENANCE, " + "UNCERTAINTY, LIMITATIONS, MISSING_FIELDS, USER NARRATIVE " + "(beginner/intermediate/advanced), OPTIONAL ACTIONS, and the " + "REQUIRED DISCLAIMER. Format defined by the system prompt." + ), + ) + url: str = Field( + ..., + description="Worldview permalink that resolves the science query.", + ) + + +# ----------------------------------------------------------------------------- +# IESO Agent +# ----------------------------------------------------------------------------- + + +class IESOAgent(PydanticAIBaseAgent[IESOAgentInputSchema, IESOAgentOutputSchema]): + """Earth science Worldview-visualization agent. + + Resolves an Earth science query into a NASA Worldview permalink via a + CARE-driven (Clarify, Analyze, Rank, Explain) loop with explicit user + confirmation before dataset selection. + """ + + input_schema = IESOAgentInputSchema + output_schema = IESOAgentOutputSchema | TextOutput + config_schema = IESOAgentConfig + + def check_output(self, output) -> str | None: + if isinstance(output, IESOAgentOutputSchema): + if not output.result.strip(): + return "Result is empty. Provide the structured Worldview-discovery response." + if not output.url.strip(): + return "URL is empty. Provide a valid url" + return super().check_output(output) From 98d8cb029f59e416fb3d3d645f26e3a471d91f79 Mon Sep 17 00:00:00 2001 From: Sanjog Thapa Date: Thu, 30 Apr 2026 13:21:04 -0500 Subject: [PATCH 2/6] update descriptions --- akd_ext/agents/ieso_care.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/akd_ext/agents/ieso_care.py b/akd_ext/agents/ieso_care.py index b47971c..d69010a 100644 --- a/akd_ext/agents/ieso_care.py +++ b/akd_ext/agents/ieso_care.py @@ -1,7 +1,7 @@ """IESO CARE Agent for NASA Worldview visualization. -This module implements the IESO CARE (Clarify, Analyze, Rank, Explain) Agent -for guided, reproducible discovery of NASA Worldview visualizations. +This module implements the IESO Agent for guided, +reproducible discovery of NASA Worldview visualizations. Public API: IESOAgent, IESOAgentInputSchema, IESOAgentOutputSchema, IESOAgentConfig @@ -303,8 +303,8 @@ class IESOAgentOutputSchema(OutputSchema): "Full sectioned response: INTENT, DATASET_OPTIONS, " "SELECTED_DATASET, WORLDVIEW_URL, PARAMETERS_USED, PROVENANCE, " "UNCERTAINTY, LIMITATIONS, MISSING_FIELDS, USER NARRATIVE " - "(beginner/intermediate/advanced), OPTIONAL ACTIONS, and the " - "REQUIRED DISCLAIMER. Format defined by the system prompt." + "OPTIONAL ACTIONS, and the REQUIRED DISCLAIMER" + "Format is defined by the system prompt." ), ) url: str = Field( @@ -321,9 +321,7 @@ class IESOAgentOutputSchema(OutputSchema): class IESOAgent(PydanticAIBaseAgent[IESOAgentInputSchema, IESOAgentOutputSchema]): """Earth science Worldview-visualization agent. - Resolves an Earth science query into a NASA Worldview permalink via a - CARE-driven (Clarify, Analyze, Rank, Explain) loop with explicit user - confirmation before dataset selection. + Resolves an Earth science query into a NASA Worldview permalink. """ input_schema = IESOAgentInputSchema From bef76fb79882fdf7bd69bef2fd93097b16317eac Mon Sep 17 00:00:00 2001 From: Sanjog Thapa Date: Thu, 30 Apr 2026 15:23:31 -0500 Subject: [PATCH 3/6] rename ieso worldview agent --- .../{ieso_care.py => ieso.worldview.py} | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) rename akd_ext/agents/{ieso_care.py => ieso.worldview.py} (92%) diff --git a/akd_ext/agents/ieso_care.py b/akd_ext/agents/ieso.worldview.py similarity index 92% rename from akd_ext/agents/ieso_care.py rename to akd_ext/agents/ieso.worldview.py index d69010a..81772f4 100644 --- a/akd_ext/agents/ieso_care.py +++ b/akd_ext/agents/ieso.worldview.py @@ -4,7 +4,7 @@ reproducible discovery of NASA Worldview visualizations. Public API: - IESOAgent, IESOAgentInputSchema, IESOAgentOutputSchema, IESOAgentConfig + IESOWorldviewAgent, IESOWorldviewAgentInputSchema, IESOWorldviewAgentOutputSchema, IESOWorldviewAgentConfig """ from __future__ import annotations @@ -28,7 +28,7 @@ # System Prompts # ----------------------------------------------------------------------------- -IESO_SYSTEM_PROMPT = """ +IESO_WORLDVIEW_AGENT_SYSTEM_PROMPT = """ ## **ROLE** You are a **NASA Worldview Scientific Data Assistant Agent**. @@ -260,7 +260,7 @@ # ----------------------------------------------------------------------------- -class IESOAgentConfig(PydanticAIBaseAgentConfig): +class IESOWorldviewAgentConfig(PydanticAIBaseAgentConfig): """Configuration for IESO CARE Agent.""" description: str = Field( @@ -273,7 +273,7 @@ class IESOAgentConfig(PydanticAIBaseAgentConfig): user for clarification, dataset selection, approval gates, and disclaimers.""" ) ) - system_prompt: str = Field(default=IESO_SYSTEM_PROMPT) + system_prompt: str = Field(default=IESO_WORLDVIEW_AGENT_SYSTEM_PROMPT) model_name: str = Field(default="openai:gpt-5.2") reasoning_effort: Literal["low", "medium", "high"] | None = Field(default="medium") @@ -283,13 +283,13 @@ class IESOAgentConfig(PydanticAIBaseAgentConfig): # ----------------------------------------------------------------------------- -class IESOAgentInputSchema(InputSchema): +class IESOWorldviewAgentInputSchema(InputSchema): """Input schema for the IESO Worldview-discovery agent.""" query: str = Field(..., description="Earth science query to interact with worldview visualization") -class IESOAgentOutputSchema(OutputSchema): +class IESOWorldviewAgentOutputSchema(OutputSchema): """Structured Worldview-discovery response. Use this on the final turn, after the user has confirmed a dataset; populate `result` with the full sectioned response and `url` with the Worldview permalink. @@ -318,18 +318,18 @@ class IESOAgentOutputSchema(OutputSchema): # ----------------------------------------------------------------------------- -class IESOAgent(PydanticAIBaseAgent[IESOAgentInputSchema, IESOAgentOutputSchema]): +class IESOWorldviewAgent(PydanticAIBaseAgent[IESOWorldviewAgentInputSchema, IESOWorldviewAgentOutputSchema]): """Earth science Worldview-visualization agent. Resolves an Earth science query into a NASA Worldview permalink. """ - input_schema = IESOAgentInputSchema - output_schema = IESOAgentOutputSchema | TextOutput - config_schema = IESOAgentConfig + input_schema = IESOWorldviewAgentInputSchema + output_schema = IESOWorldviewAgentOutputSchema | TextOutput + config_schema = IESOWorldviewAgentConfig def check_output(self, output) -> str | None: - if isinstance(output, IESOAgentOutputSchema): + if isinstance(output, IESOWorldviewAgentOutputSchema): if not output.result.strip(): return "Result is empty. Provide the structured Worldview-discovery response." if not output.url.strip(): From 6890939c6de290d4e4bf40734f7801229f2ceffb Mon Sep 17 00:00:00 2001 From: Sanjog Thapa Date: Mon, 11 May 2026 16:00:59 -0500 Subject: [PATCH 4/6] Added EarthdataSearchLandingPageTool, an AKD BaseTool that takes a CMR collection concept_id and returns a URL opening that dataset's landing page on search.earthdata.nasa.gov. --- akd_ext/tools/__init__.py | 8 ++ akd_ext/tools/worldview/__init__.py | 0 akd_ext/tools/worldview/cmr/__init__.py | 0 .../tools/worldview/cmr/earthdata_search.py | 74 +++++++++++++++++++ tests/tools/worldview/__init__.py | 0 tests/tools/worldview/cmr/__init__.py | 0 .../worldview/cmr/test_earthdata_search.py | 74 +++++++++++++++++++ 7 files changed, 156 insertions(+) create mode 100644 akd_ext/tools/worldview/__init__.py create mode 100644 akd_ext/tools/worldview/cmr/__init__.py create mode 100644 akd_ext/tools/worldview/cmr/earthdata_search.py create mode 100644 tests/tools/worldview/__init__.py create mode 100644 tests/tools/worldview/cmr/__init__.py create mode 100644 tests/tools/worldview/cmr/test_earthdata_search.py diff --git a/akd_ext/tools/__init__.py b/akd_ext/tools/__init__.py index fb1328e..b4660bb 100644 --- a/akd_ext/tools/__init__.py +++ b/akd_ext/tools/__init__.py @@ -20,6 +20,11 @@ RepositorySearchToolOutputSchema, RepositorySearchToolConfig, ) +from .worldview.cmr.earthdata_search import ( + EarthdataSearchLandingPageInputSchema, + EarthdataSearchLandingPageOutputSchema, + EarthdataSearchLandingPageTool, +) __all__ = [ "DummyTool", @@ -38,4 +43,7 @@ "RepositorySearchToolInputSchema", "RepositorySearchToolOutputSchema", "RepositorySearchToolConfig", + "EarthdataSearchLandingPageTool", + "EarthdataSearchLandingPageInputSchema", + "EarthdataSearchLandingPageOutputSchema", ] diff --git a/akd_ext/tools/worldview/__init__.py b/akd_ext/tools/worldview/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/akd_ext/tools/worldview/cmr/__init__.py b/akd_ext/tools/worldview/cmr/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/akd_ext/tools/worldview/cmr/earthdata_search.py b/akd_ext/tools/worldview/cmr/earthdata_search.py new file mode 100644 index 0000000..80a29ea --- /dev/null +++ b/akd_ext/tools/worldview/cmr/earthdata_search.py @@ -0,0 +1,74 @@ +"""Earthdata Search dataset landing page URL builder tool. + +Given a CMR collection ``concept_id`` (as returned by the CMR agent), produces +a URL that opens the dataset's landing page on +``search.earthdata.nasa.gov``. +""" + +import re +from urllib.parse import urlencode + +from pydantic import Field + +from akd._base import InputSchema, OutputSchema +from akd.tools import BaseTool + +from akd_ext.mcp import mcp_tool + + +CONCEPT_ID_PATTERN = re.compile(r"^C\d+-\w+$") +EARTHDATA_SEARCH_BASE_URL = "https://search.earthdata.nasa.gov/search" + + +class EarthdataSearchLandingPageInputSchema(InputSchema): + """Input schema for the EarthdataSearchLandingPageTool.""" + + concept_id: str = Field( + ..., + description=("CMR collection concept_id in the form C-, e.g. C2769216080-LARC_CLOUD."), + ) + + +class EarthdataSearchLandingPageOutputSchema(OutputSchema): + """Output schema for the EarthdataSearchLandingPageTool.""" + + url: str = Field( + ..., + description=("Earthdata Search dataset landing page URL focused on the given collection."), + ) + + +@mcp_tool +class EarthdataSearchLandingPageTool( + BaseTool[EarthdataSearchLandingPageInputSchema, EarthdataSearchLandingPageOutputSchema] +): + """Generate a NASA Earthdata Search dataset landing page URL from a CMR collection concept_id. + + Returns a URL like https://search.earthdata.nasa.gov/search?p= + that opens Earthdata Search focused on the given collection. + """ + + input_schema = EarthdataSearchLandingPageInputSchema + output_schema = EarthdataSearchLandingPageOutputSchema + + async def _arun( + self, + params: EarthdataSearchLandingPageInputSchema, + ) -> EarthdataSearchLandingPageOutputSchema: + concept_id = params.concept_id.strip() + if not CONCEPT_ID_PATTERN.match(concept_id): + raise ValueError(f"Invalid concept_id {concept_id!r}; expected format C-") + url = f"{EARTHDATA_SEARCH_BASE_URL}?{urlencode({'p': concept_id})}" + return EarthdataSearchLandingPageOutputSchema(url=url) + + +if __name__ == "__main__": + import asyncio + import sys + + from loguru import logger + + concept_id = sys.argv[1] if len(sys.argv) > 1 else "C2769216080-LARC_CLOUD" + tool = EarthdataSearchLandingPageTool() + result = asyncio.run(tool.arun(EarthdataSearchLandingPageInputSchema(concept_id=concept_id))) + logger.info(result.model_dump()) diff --git a/tests/tools/worldview/__init__.py b/tests/tools/worldview/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/tools/worldview/cmr/__init__.py b/tests/tools/worldview/cmr/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/tools/worldview/cmr/test_earthdata_search.py b/tests/tools/worldview/cmr/test_earthdata_search.py new file mode 100644 index 0000000..8134121 --- /dev/null +++ b/tests/tools/worldview/cmr/test_earthdata_search.py @@ -0,0 +1,74 @@ +import pytest + +from akd_ext.tools.worldview.cmr.earthdata_search import ( + EARTHDATA_SEARCH_BASE_URL, + EarthdataSearchLandingPageInputSchema, + EarthdataSearchLandingPageOutputSchema, + EarthdataSearchLandingPageTool, +) + + +@pytest.fixture +def tool() -> EarthdataSearchLandingPageTool: + return EarthdataSearchLandingPageTool() + + +@pytest.mark.asyncio +async def test_happy_path(tool: EarthdataSearchLandingPageTool) -> None: + result = await tool.arun(EarthdataSearchLandingPageInputSchema(concept_id="C2769216080-LARC_CLOUD")) + assert result.url == "https://search.earthdata.nasa.gov/search?p=C2769216080-LARC_CLOUD" + + +@pytest.mark.asyncio +@pytest.mark.parametrize( + "concept_id", + [ + "C123456-LPDAAC_ECS", + "C9999999-NSIDC_ECS", + "C2769216080-LARC_CLOUD", + ], +) +async def test_provider_names_preserved(tool: EarthdataSearchLandingPageTool, concept_id: str) -> None: + result = await tool.arun(EarthdataSearchLandingPageInputSchema(concept_id=concept_id)) + assert result.url == f"{EARTHDATA_SEARCH_BASE_URL}?p={concept_id}" + + +@pytest.mark.asyncio +async def test_whitespace_is_stripped(tool: EarthdataSearchLandingPageTool) -> None: + result = await tool.arun(EarthdataSearchLandingPageInputSchema(concept_id=" C123-LARC ")) + assert result.url == "https://search.earthdata.nasa.gov/search?p=C123-LARC" + + +@pytest.mark.asyncio +@pytest.mark.parametrize( + "bad_input", + [ + "", + " ", + "foo", + "C123", + "123-LARC", + "X123-LARC", + "C-LARC", + ], +) +async def test_invalid_input_raises(tool: EarthdataSearchLandingPageTool, bad_input: str) -> None: + with pytest.raises(ValueError, match="Invalid concept_id"): + await tool.arun(EarthdataSearchLandingPageInputSchema(concept_id=bad_input)) + + +def test_tool_exposes_schemas(tool: EarthdataSearchLandingPageTool) -> None: + assert tool.input_schema is EarthdataSearchLandingPageInputSchema + assert tool.output_schema is EarthdataSearchLandingPageOutputSchema + + +def test_top_level_reexport() -> None: + from akd_ext.tools import ( + EarthdataSearchLandingPageInputSchema as ReExportedInput, + EarthdataSearchLandingPageOutputSchema as ReExportedOutput, + EarthdataSearchLandingPageTool as ReExportedTool, + ) + + assert ReExportedTool is EarthdataSearchLandingPageTool + assert ReExportedInput is EarthdataSearchLandingPageInputSchema + assert ReExportedOutput is EarthdataSearchLandingPageOutputSchema From 4ba2edb52586960c4058fed1bf84a61cbdddbb3e Mon Sep 17 00:00:00 2001 From: Sanjog Thapa Date: Mon, 11 May 2026 16:09:10 -0500 Subject: [PATCH 5/6] pat in pyproject.toml to pull in private akd-core dependency. --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 5143ede..838ad03 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,7 +17,7 @@ classifiers = [ ] requires-python = ">=3.12" dependencies = [ - "akd @ git+https://github.com/NASA-IMPACT/accelerated-discovery.git@develop", + "akd @ git+https://${GITHUB_TOKEN}@github.com/NASA-IMPACT/accelerated-discovery.git@develop", "fastmcp>=2.0.0,<3.2.4", "griffe>=1.0.0,<2", "openai-agents>=0.6.7", From 00113a215143a8b63e2878782159f2857c532ff9 Mon Sep 17 00:00:00 2001 From: Sanjog Thapa Date: Thu, 14 May 2026 14:39:07 -0500 Subject: [PATCH 6/6] only expose earthdata dataset landing page tool for the fast mcp cloud module resolution to be faster. this change is for mcp preview only, remove it later before merge --- akd_ext/tools/__init__.py | 72 +++++++++++++++++++-------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/akd_ext/tools/__init__.py b/akd_ext/tools/__init__.py index b4660bb..de5f8fa 100644 --- a/akd_ext/tools/__init__.py +++ b/akd_ext/tools/__init__.py @@ -1,25 +1,25 @@ """Tools module for akd_ext.""" -from .dummy import DummyInputSchema, DummyOutputSchema, DummyTool -from .sde_search import ( - SDEDocument, - SDESearchTool, - SDESearchToolConfig, - SDESearchToolInputSchema, - SDESearchToolOutputSchema, -) -from .code_search.code_signals import ( - CodeSignalsSearchInputSchema, - CodeSignalsSearchOutputSchema, - CodeSignalsSearchTool, - CodeSignalsSearchToolConfig, -) -from .code_search.repository_search import ( - RepositorySearchTool, - RepositorySearchToolInputSchema, - RepositorySearchToolOutputSchema, - RepositorySearchToolConfig, -) +# from .dummy import DummyInputSchema, DummyOutputSchema, DummyTool +# from .sde_search import ( +# SDEDocument, +# SDESearchTool, +# SDESearchToolConfig, +# SDESearchToolInputSchema, +# SDESearchToolOutputSchema, +# ) +# from .code_search.code_signals import ( +# CodeSignalsSearchInputSchema, +# CodeSignalsSearchOutputSchema, +# CodeSignalsSearchTool, +# CodeSignalsSearchToolConfig, +# ) +# from .code_search.repository_search import ( +# RepositorySearchTool, +# RepositorySearchToolInputSchema, +# RepositorySearchToolOutputSchema, +# RepositorySearchToolConfig, +# ) from .worldview.cmr.earthdata_search import ( EarthdataSearchLandingPageInputSchema, EarthdataSearchLandingPageOutputSchema, @@ -27,22 +27,22 @@ ) __all__ = [ - "DummyTool", - "DummyInputSchema", - "DummyOutputSchema", - "SDESearchTool", - "SDESearchToolInputSchema", - "SDESearchToolOutputSchema", - "SDESearchToolConfig", - "SDEDocument", - "CodeSignalsSearchInputSchema", - "CodeSignalsSearchOutputSchema", - "CodeSignalsSearchTool", - "CodeSignalsSearchToolConfig", - "RepositorySearchTool", - "RepositorySearchToolInputSchema", - "RepositorySearchToolOutputSchema", - "RepositorySearchToolConfig", + # "DummyTool", + # "DummyInputSchema", + # "DummyOutputSchema", + # "SDESearchTool", + # "SDESearchToolInputSchema", + # "SDESearchToolOutputSchema", + # "SDESearchToolConfig", + # "SDEDocument", + # "CodeSignalsSearchInputSchema", + # "CodeSignalsSearchOutputSchema", + # "CodeSignalsSearchTool", + # "CodeSignalsSearchToolConfig", + # "RepositorySearchTool", + # "RepositorySearchToolInputSchema", + # "RepositorySearchToolOutputSchema", + # "RepositorySearchToolConfig", "EarthdataSearchLandingPageTool", "EarthdataSearchLandingPageInputSchema", "EarthdataSearchLandingPageOutputSchema",