diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 0000000..ea85969 --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,120 @@ +# GitHub Copilot instructions for goat-nlp + +## Project structure + +``` +src/mcp-server/ + server.py # FastMCP server entry point + config.py # Imports from config_site.py (not tracked) or config_example.py + config_example.py # Edit this to create config_site.py for local config + prompts/ + system.py # Multi-stage system prompt (get_multi_stage_prompt) + query_parser.py # Legacy and default single-stage prompts + tools/ + __init__.py # Registers all tool modules via register_tools(mcp) + attributes.py # get_attribute_info, get_attribute_selection_context → return str + attribute_guide.py # get_attribute_guide → returns str + utilities.py # choose_search_index, check_taxon_exists, get_valid_ranks + process_identifiers.py # process_identifiers → returns artifact dict + process_attributes.py # process_attributes → returns artifact dict + process_axis.py # process_axis → returns artifact dict + query_parser.py # submit_query → returns result dict + report.py # get_report → returns result dict + helpers/ + api.py # make_api_request — ONLY place for HTTP calls + fetch.py # fetch_valid_types — attribute metadata cache + query.py # URL/query string construction + urls.py # URL update utilities + constants.py # FIELD_CACHE (module-level attribute cache) + validation.py # validate_attributes, validate_attribute_name + errors.py # ToolExecutionError and error message helpers + formatting.py # process_result_table, format_result_table + search_index.py # infer_index_from_query + processor_common.py # finalise_and_store (artifact store writes) + tests/ + smoke_histogram.py + smoke_submit_query_and_advanced_search.py + test_histogram_assert.py + test_local_model_integration_scaffold.py +``` + +## Return type convention + +- **Helper tools** (`get_attribute_info`, `get_attribute_selection_context`, + `get_attribute_guide`) return `str` (markdown). FastMCP serialises these as + `TextContent` — the LLM reads them directly. +- **Pipeline tools** (`process_*`, `submit_query`, `get_report`) return `dict` + with a structured envelope. FastMCP serialises these as `structured_content` + alongside `TextContent`. + +## Hard constraints + +**No new API calls outside the helpers layer.** +All HTTP is done through `make_api_request()` in `tools/helpers/api.py`. +A planned SDK migration will replace all direct API interactions. Until it +lands, do not add new `make_api_request` calls, new endpoints, or new +response-parsing logic anywhere outside `helpers/api.py`, `helpers/fetch.py`, +and `tools/utilities.py`. + +**No new URL construction.** +All query URL building goes through `tools/helpers/query.py`. Do not construct +API or web URLs inline in tool functions. + +**Config constants only — no hardcoded site values.** +Use `DATASTORE_NAME`, `API_BASE`, `WEB_URL`, etc. from `config.py`. Never +write `"GoaT"`, `"goat.genomehubs.org"`, or similar strings in tool code. + +**Tool registration via `register_tools`.** +Each tool module exposes `register_tools(mcp)`. Import and call it from +`tools/__init__.py`. Do not decorate tool functions with `@mcp.tool()` inline. + +**Every public tool must call `log_tool_usage()`.** +Both success and failure paths. Required fields: `tool_name`, `params`, +`duration_ms`, `success`. Failure paths also pass `error=` and optionally +`exc=`. + +## Prompt editing rules + +LLM instructions live as `TOOL_NAME_PROMPT` string constants in the same file +as the tool, assigned to the function's `__doc__`. When editing them: + +1. **Fix the instruction, not the example.** If a query fails, find the missing + or ambiguous rule and fix it. Do not add the failing query as a new example. + +2. **One example per concept.** A single case is enough to demonstrate a + pattern. Remove examples that duplicate a rule shown elsewhere in the prompt. + +3. **Domain terms are fine; specific instances are not.** Attribute names + (`genome_size`, `assembly_level`) and rank names (`phylum`, `species`) are + unavoidable. Specific taxon names, accession numbers, and project codes + should be replaced with placeholders unless they are the clearest way to + show a structural point. + +4. **Positive over prohibitive.** Write "pass values as a list" rather than + "do not pass as a string". Prohibitions accumulate; positive rules compose. + +5. **Rewrite bullets, don't append to them.** If a bullet is unclear, rewrite + it. Do not add a sub-bullet or parenthetical caveat. + +6. **Prompts must not grow without reason.** Check line count before and after. + A fix should not increase length unless it adds support for a new concept. + +## Testing + +No automated runner. After any change: + +1. Run the smoke tests: + ``` + python src/mcp-server/tests/smoke_histogram.py + python src/mcp-server/tests/smoke_submit_query_and_advanced_search.py + python src/mcp-server/tests/test_histogram_assert.py + ``` +2. Verify README examples manually against a running server. These are the + regression baseline. + +## Known bugs (do not duplicate the root causes) + +- `get_report` registered twice in `tools/report.py` `register_tools()`. +- `get_valid_ranks` registered twice in `tools/utilities.py` `register_tools()`. +- `attribute_guide.register_tools` not called from `tools/__init__.py` — + `get_attribute_guide` is currently unreachable as an MCP tool. diff --git a/.vscode/mcp.json b/.vscode/mcp.json new file mode 100644 index 0000000..2b61657 --- /dev/null +++ b/.vscode/mcp.json @@ -0,0 +1,7 @@ +{ + "servers": { + "goat": { + "url": "http://127.0.0.1:8008/mcp" + } + } +} diff --git a/.vscode/settings.json b/.vscode/settings.json index fb1df91..fa9e7e8 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,14 +1,34 @@ { "git.ignoreLimitWarning": true, - "editor.formatOnSave": true, - "flake8.args": [ - "--max-line-length=118" - ], + + // Enable formatting and linting for Python "[python]": { - "editor.codeActionsOnSave": { - "source.organizeImports.python": "explicit" - }, - "editor.defaultFormatter": "ms-python.black-formatter", "editor.formatOnSave": true, - } -} \ No newline at end of file + "editor.formatOnType": true, + "editor.defaultFormatter": "ms-python.black-formatter", + "editor.codeActionsOnSave": { + "source.organizeImports": "explicit" + } + }, + + // Python specific + "python.formatting.provider": "black", + "python.formatting.blackArgs": ["--line-length", "88"], + "python.linting.flake8Enabled": true, + "python.linting.enabled": true, + "python.linting.flake8Args": ["--max-line-length=88"], + "python.sortImports.args": ["--profile", "black"], + + // Enable error lens + "errorLens.enabled": true, + + // iSort will respect Black style + "isort.args": ["--profile", "black"], + + // Enable auto save + "files.autoSave": "onFocusChange", + "cSpell.words": ["Kinfin", "proteome"], + "python-envs.defaultEnvManager": "ms-python.python:conda", + "python-envs.defaultPackageManager": "ms-python.python:conda", + "python-envs.pythonProjects": [] +} diff --git a/AB_TESTING.md b/AB_TESTING.md new file mode 100644 index 0000000..5cd7de5 --- /dev/null +++ b/AB_TESTING.md @@ -0,0 +1,194 @@ +# A/B Testing: Parsing vs Simple Search Approach + +## Overview + +Two different approaches for LLM interaction with GoaT: + +1. **Simple Search (Default)** - LLM chooses simple_search or search_goat tools directly +2. **Parse Query (Experimental)** - LLM extracts structured intent, backend processes + +## Switching Between Approaches + +### MCP Server + +Set the `GOAT_PROMPT_STYLE` environment variable: + +```bash +# Use default simple_search approach +export GOAT_PROMPT_STYLE=simple +python -m mcp-server + +# Use experimental parse_user_query approach +export GOAT_PROMPT_STYLE=parser +python -m mcp-server +``` + +### Public API + +The public API exposes both approaches. LLMs can use either: + +- `goat_parse_user_query` (experimental parsing approach) +- `goat_simple_search` (simple approach) +- `goat_search_goat` (advanced approach) + +## Key Differences + +### Simple Search Approach (Current Default) + +**LLM Responsibilities:** + +- Choose between simple_search and search_goat +- Map "families" → what_to_count parameter +- Translate common names to scientific names +- Identify specific_attribute names +- Handle missing vs present logic + +**Backend Responsibilities:** + +- Construct GoaT API URL +- Execute query +- Format results + +**Pros:** + +- Clear, straightforward tool interface +- Works well for most queries +- Easy to understand + +**Cons:** + +- LLMs struggle with edge cases: + - Missing rank extraction + - long_list vs sequencing_status confusion + - Handling "missing" data (exclusions) + - Direct vs ancestral vs estimated modifiers + +### Parse Query Approach (Experimental) + +**LLM Responsibilities:** + +- Extract intent (count/table/histogram/record) +- Extract taxon (if mentioned) +- Extract rank (if mentioned - backend handles if missed) +- Extract attributes with modifiers + +**Backend Responsibilities:** + +- Infer search_index from user_query (taxon/assembly/sample) +- Handle missing rank extraction from user_query +- Disambiguate long_list vs sequencing_status +- Convert "missing" modifier to exclusions +- Handle "direct" modifier (exclude ancestral/estimated) +- Process aggregate modifiers (min/max/median) +- Construct GoaT API URL +- Execute query +- Format results + +**Pros:** + +- Separates understanding from implementation +- Backend handles complex edge cases +- More robust to LLM capability differences +- Extensible to new modifiers + +**Cons:** + +- More complex backend processing required +- Currently incomplete implementation +- Experimental status + +## Modifier System + +The parse_user_query approach introduces attribute modifiers: + +### Data Availability Modifiers + +- `"missing"` - Species WITHOUT this attribute + + - Example: `{"name": "genome_size", "modifier": "missing"}` + - Backend converts to exclusions: `exclude=["Direct", "Ancestral", "Estimated"]` + +- `"direct"` - Only directly measured values + + - Example: `{"name": "genome_size", "modifier": "direct"}` + - Backend excludes: `exclude=["Ancestral", "Estimated"]` + +- `"ancestral"` - Include ancestral values + + - Backend includes both direct and ancestral + +- `"estimated"` - Include estimated values + +### Aggregate Function Modifiers + +- `"min"`, `"max"`, `"median"`, `"length"` - Aggregate functions + - Example: `{"name": "genome_size", "modifier": "max"}` + - Backend maps to GoaT API aggregate parameters + +## Implementation Status + +### ✅ Completed + +- parse_user_query tool created +- MCP server prompt switching (GOAT_PROMPT_STYLE env var) +- Public API tool definition (goat_parse_user_query) +- Parser-based system prompt +- Modifier parameter structure +- Automatic search_index inference using choose_search_index + +### 🚧 In Progress + +- Backend processing of modifiers +- Automatic rank extraction from user_query +- long_list vs sequencing_status disambiguation +- Exclusion handling for "missing" modifier + +### 📋 To Do + +- Complete backend processing implementation +- Add tests comparing both approaches +- Measure accuracy differences +- Performance comparison +- Documentation of modifier extensions + +## Testing + +To test both approaches: + +```bash +# Terminal 1: Run with simple approach +export GOAT_PROMPT_STYLE=simple +python -m mcp-server + +# Terminal 2: Run with parser approach +export GOAT_PROMPT_STYLE=parser +python -m mcp-server + +# Compare results for the same queries +``` + +## Extending Modifiers + +The modifier system can be extended to support additional GoaT API features: + +- `"summary"` - For GoaT summary parameters +- `"binned"` - For histogram binning +- Custom aggregate functions +- Field-specific modifiers + +Add new modifiers to the enum in: + +- `tools/query_parser.py` (docstring) +- `public-api/app/services/goat_tools.py` (input_schema) +- Backend processing logic + +## Recommendation + +Start with the **simple search approach** (default) since it's fully implemented and tested. + +Use **parse query approach** for: + +- Testing LLMs with varying capabilities +- Queries with complex "missing" semantics +- Queries requiring aggregate functions +- Research into separation of concerns diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..8612f81 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,77 @@ +# Agent instructions for goat-nlp + +## What this project is + +A [FastMCP](https://gofastmcp.com) server that exposes genomic metadata search +as structured tools for LLMs. Tools query [GoaT (Genomes on a Tree)](https://goat.genomehubs.org) +through a pipeline of validation, artifact production, and query execution. +The server is designed to be redeployed against other GenomeHubs instances by +updating `src/mcp-server/config_site.py`. + +## Before making any change + +Read `src/mcp-server/tools/__init__.py` to understand which tool modules are +registered. Read the relevant tool file before editing it. Read +`src/mcp-server/config_example.py` to understand available config constants. + +## Hard rules — do not violate these + +- **No new HTTP calls.** All HTTP goes through `make_api_request()` in + `src/mcp-server/tools/helpers/api.py`. A planned SDK migration will replace + all direct API interactions; do not add new ones. +- **No new URL construction.** All URL building goes through + `src/mcp-server/tools/helpers/query.py`. Do not construct URLs inline. +- **No hardcoded site values.** Use `DATASTORE_NAME`, `API_BASE`, `WEB_URL`, + etc. from `src/mcp-server/config.py`. Never write `"GoaT"` or + `"goat.genomehubs.org"` in tool code. +- **No new tool registration patterns.** Each tool module exposes + `register_tools(mcp)` and is called from `tools/__init__.py`. Do not use + `@mcp.tool()` decorators inline. +- **`log_tool_usage()` on every path.** Every public tool must call + `log_tool_usage()` from `logging_config.py` on both success and failure paths, + with `tool_name`, `params`, `duration_ms`, and `success`. + +## Return types + +- Tools that help the LLM choose parameters (`get_attribute_selection_context`, + `get_attribute_info`, `get_attribute_guide`) return `str` (markdown). +- Pipeline tools (`process_identifiers`, `process_attributes`, `process_axis`, + `submit_query`, `get_report`) return `dict` with a structured envelope + including an `artifact_id` token for chaining. + +## Prompt constants + +LLM instructions are `TOOL_NAME_PROMPT` string constants in the same file as +the tool function. Rules for editing them: + +- Do not add a failing query as a new example. Fix the instruction instead. +- One example per concept. Remove examples that duplicate a rule shown + elsewhere in the same prompt. +- Attribute and rank names (`genome_size`, `phylum`) are acceptable domain + terms. Specific taxon names, accession numbers, and project codes should be + replaced with placeholders. +- Write positive instructions. Avoid `DO NOT` bullets where the positive + equivalent is clear. +- Do not add sub-bullets or caveats to existing bullets. Rewrite the bullet. +- A prompt must not be longer after a fix than before unless a new concept is + being added. Check line counts. + +## Testing + +There is no automated test runner. After any change: + +```bash +python src/mcp-server/tests/smoke_histogram.py +python src/mcp-server/tests/smoke_submit_query_and_advanced_search.py +python src/mcp-server/tests/test_histogram_assert.py +``` + +Also verify the README examples manually against a running server — these are +the regression baseline. + +## Known bugs — do not duplicate the root causes + +- `get_report` is registered twice in `tools/report.py` `register_tools()`. +- `get_valid_ranks` is registered twice in `tools/utilities.py` `register_tools()`. +- `attribute_guide.register_tools` is never called from `tools/__init__.py`, + so `get_attribute_guide` is unreachable as an MCP tool. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..e6b36b3 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,192 @@ +# Contributing to GoaT-NLP + +## Architecture overview + +The project exposes a [FastMCP](https://gofastmcp.com) server that lets LLMs query +[GoaT (Genomes on a Tree)](https://goat.genomehubs.org) through a structured tool pipeline: + +``` +choose_search_index / check_taxon_exists / get_attribute_selection_context + ↓ +process_identifiers + process_attributes (parallel) + ↓ +submit_query or get_report +``` + +Helper tools (`get_attribute_selection_context`, `get_attribute_info`, +`get_attribute_guide`) return plain markdown strings — the LLM reads them +as text. Pipeline tools (`process_*`, `submit_query`, `get_report`) return +structured dicts for machine-readable chaining via artifact tokens. + +Site-specific configuration (API base URL, site name, branding) lives in +`src/mcp-server/config_site.py` which is not tracked by git. Copy +`config_example.py` as a starting point: + +```bash +cp src/mcp-server/config_example.py src/mcp-server/config_site.py +``` + +To run the server: + +```bash +pip install -r requirements.txt +python -m src.mcp-server.server +``` + +--- + +## Where contributor effort has most impact right now + +**Prompt refinement is the highest-value area.** The LLM instructions embedded +in each tool docstring (`PROCESS_ATTRIBUTES_PROMPT`, `PROCESS_IDENTIFIERS_PROMPT`, +etc.) directly control query quality. A well-targeted prompt edit can fix a +class of failures for all users and all LLMs. + +### Known prompt issues to address + +- **`LLM_PROMPT_DEFAULT`** (`prompts/query_parser.py`): the three JSON examples + at the end use specific taxa (`Mammalia`) and accessions (`GCF_000002305.6`, + `SRR1234567`). The first two examples could be made more abstract; the third + is acceptable as a minimal illustration. + +- **`PROCESS_IDENTIFIERS_PROMPT`** (`tools/process_identifiers.py`): repeats + common-name mappings (`mammal→Mammalia`, `cat→Felis`) already in the system + prompt. Remove the duplication. The end example shares the same + `genome_size < 3G` / `Felis` scenario as `PROCESS_ATTRIBUTES_PROMPT` — one + of them should use a different illustrative query. + +- **`PROCESS_ATTRIBUTES_PROMPT`** (`tools/process_attributes.py`): the name + filter examples in section 3 use `'Canis'` as a value — replace with a + generic placeholder. Convert any remaining `DO NOT` / `MUST NOT` bullets to + positive instructions where the intent can be expressed that way. + +- **`GET_REPORT_PROMPT`** (`tools/report.py`): `api_url` in the return envelope + description is hardcoded as "The GoaT API URL" — use `DATASTORE_NAME` for + generality. The `report` backward-compatibility key should carry a + deprecation note. + +- **`SUBMIT_QUERY_PROMPT`** (`tools/query_parser.py`): `response_format="full"` + is marked `(future)` inside the prompt — move this to a code comment or + remove it from the prompt entirely. Replace the `⚠️` emoji with plain text. + +- **`system.py` → `get_multi_stage_prompt()`**: add a signal for when to use + `get_report` vs `submit_query` (currently the distinction is only implied). + Deduplicate the `choose_search_index` guidance which appears in both the + numbered steps and the NOTES section. + +- **`PROCESS_AXIS_PROMPT`** (`tools/process_axis.py`): references + `process_axis_complex()` as an alternative in two places; this tool does not + exist yet. Replace with a note that complex axes are not currently supported, + or remove the references until the tool is implemented. + +--- + +## Prompt editing rules + +These rules exist to keep prompts effective and prevent gradual bloat: + +1. **Fix the instruction, not the example.** If a query fails, identify the + missing or ambiguous rule and restate it clearly. Do not add the failing + query as a new example to the prompt. + +2. **One example per concept.** A single illustrative case is enough to + demonstrate a pattern. Remove examples that duplicate a rule already shown + elsewhere in the same prompt. + +3. **Real-world examples only when unavoidable.** Attribute and rank names + (`genome_size`, `phylum`) are domain terms that must appear. Specific taxon + names, accession numbers, and project names should be replaced with + placeholders (``, ``) unless they are genuinely the + clearest way to illustrate a structural point. + +4. **Prefer positive instructions.** Write "pass values as a list" rather than + "do not pass as a string". Prohibitions accumulate; instructions get + overwritten. + +5. **Rewrite, don't append.** If an existing bullet is unclear, rewrite it. + Do not add a clarifying sub-bullet or parenthetical caveat — the prompt will + grow with each iteration. + +6. **Measure prompt length.** Note the line count before and after your edit. + A prompt should not be longer after a fix than before, except when adding + support for a genuinely new concept. + +--- + +## Testing + +There is no automated test runner. Regression testing is manual: + +1. Run the smoke tests: + + ```bash + python src/mcp-server/tests/smoke_histogram.py + python src/mcp-server/tests/smoke_submit_query_and_advanced_search.py + python src/mcp-server/tests/test_histogram_assert.py + ``` + +2. Verify the mcp-server/README examples manually against a running server. These are the + canonical regression baseline. Any prompt change that causes a previously + correct README example to produce a wrong result is a regression. + +3. For local model testing (requires `mcphost` and a running Ollama instance, this is incomplete): + ```bash + export LOCAL_MODEL_CMD="~/go/bin/mcphost --quiet --provider-url http://localhost:11434 \ + --config src/mcp-server/tests/mcp-host.yml -m {model} -p {prompt}" + export LOCAL_MODEL_NAME="ollama:llama3.1:8b" + python3 src/mcp-server/tests/test_local_model_integration_scaffold.py + ``` + +--- + +## Architecture constraints — read before adding code + +**No new API interactions until the SDK is in place.** +A major refactor is planned to move all API calls and URL construction into a +dedicated SDK module. Until that is merged: + +- Do not add new calls to `make_api_request()` outside `tools/helpers/api.py`, + `tools/helpers/fetch.py`, or `tools/utilities.py`. +- Do not add new URL construction patterns. All URL building goes through + `tools/helpers/query.py` (`build_query_string`, `build_user_facing_url`, + `params_dict_to_url`). +- Do not add new endpoints or new result-field parsing logic. + +**Configuration is site-scoped.** +All site-specific values (`API_BASE`, `WEB_URL`, `DATASTORE_NAME`, etc.) come +from `config_site.py` → `config_example.py`. Never hardcode GoaT-specific +values into tool code; use the config constants. + +**Tool registration follows a fixed pattern.** +Each tool module defines a `register_tools(mcp)` function and is imported in +`tools/__init__.py`. Do not register tools inline in `server.py`. + +**Caching uses the established TTL pattern.** +Attribute types and taxon ranks are cached with a 24-hour TTL using +module-level dicts/lists + timestamps (`FIELD_CACHE`, `RANK_CACHE`). Do not +introduce new cache implementations. + +**Every public tool must call `log_tool_usage()`.** +Both success and failure paths must log via `log_tool_usage()` from +`logging_config.py`. The call must include `tool_name`, `params`, +`duration_ms`, and `success`. + +--- + +## Known bugs (help welcome) + +- `get_report` is registered twice in `tools/report.py` `register_tools()`. +- `get_valid_ranks` is registered twice in `tools/utilities.py` `register_tools()`. +- `attribute_guide.register_tools` is never called from `tools/__init__.py`, + so `get_attribute_guide` is currently unreachable as an MCP tool. + +--- + +## PR checklist + +- [ ] Smoke tests pass +- [ ] README examples still produce correct output when tested manually +- [ ] No new `make_api_request` calls outside the helpers layer +- [ ] No hardcoded site-specific values (use config constants) +- [ ] Prompt changes do not increase line count without adding a new concept +- [ ] `log_tool_usage()` called on all paths in any new or modified tool diff --git a/INSTALL.md b/INSTALL.md index 396c77e..b959c2e 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -1,4 +1,3 @@ - # Installation Guide This guide provides step-by-step instructions to set up the project after cloning the repository. @@ -69,3 +68,21 @@ python -m flask run The UI will be available at `http://localhost:5000/` +# Testing guide + +Install dev dependencies + +``` +pip install -r requirements-dev.txt +``` + +Run `pytest` + +``` +export OLLAMA_HOST_URL=http://127.0.0.1:11434 +export RETRY_COUNT=5 +export GOAT_BASE_URL=https://goat.genomehubs.org/api/v2 +export ATTRIBUTE_API_TTL=172800 + +pytest -W ignore::DeprecationWarning -k test_intent_module +``` diff --git a/LICENSE b/LICENSE index c1002fc..3cfb5cb 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright 2024 Genome Research Limited +Copyright 2024-2025 Genome Research Limited Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/pyproject.toml b/pyproject.toml index 6153753..21181c0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,9 +1,8 @@ [tool.black] -line-length = 118 +line-length = 120 target-version = ['py39', 'py310', 'py311', 'py312'] include = '\.pyi?$' required-version = '24.4.2' [tool.isort] profile = "black" - diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 0000000..c7764ac --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1,2 @@ +-r requirements.txt +pytest diff --git a/requirements.txt b/requirements.txt index a971ef4..10b2ef5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,14 +1,4 @@ -Flask -llama-index -llama-index-llms-ollama -llama-index-llms-replicate -llama-index-embeddings-huggingface -llama-parse -Werkzeug==2.2.2 -python-dotenv -arize-phoenix -openinference-instrumentation-llama-index -opentelemetry-sdk -opentelemetry-exporter-otlp -opentelemetry-proto>=1.12.0 -llama-index-callbacks-arize-phoenix +fastmcp +httpx +jinja2 +starlette \ No newline at end of file diff --git a/src/.gitignore b/src/.gitignore new file mode 100644 index 0000000..505a3b1 --- /dev/null +++ b/src/.gitignore @@ -0,0 +1,10 @@ +# Python-generated files +__pycache__/ +*.py[oc] +build/ +dist/ +wheels/ +*.egg-info + +# Virtual environments +.venv diff --git a/src/README.md b/src/README.md index 8667041..05422fc 100644 --- a/src/README.md +++ b/src/README.md @@ -1 +1,112 @@ # Source code directory + +Install uv to `$HOME/.local/bin` + +``` +curl -LsSf https://astral.sh/uv/install.sh | sh +source $HOME/.local/bin/env +``` + +Setup directory for querying GoaT MCP server + +``` +cd src + +# Create virtual environment and activate it +uv venv +source .venv/bin/activate + +# Install dependencies +uv add fastmcp httpx +``` + +Run GoaT MCP server + +``` +uv run python goat.py +``` + +connect with copilot (uses repository `mcp.json` file) + +Try a query: + +- how many species are in goat? +- which species are on both the DToL and CANBP long lists? +- which species with chromosomal or better assemblies have over 10Mb contiguity? - not gemini + - what about for scaffold n50? +- how many bat families are targeted by the vgp? - not gemini +- which attributes support ordered keyword searches? - not gemini +- how many cat species are missing genome size data? +- which species are on the DTOL target list? +- how many species have a tolid prefix beginning ilLys? +- how many have tolid prefixes ending cori? +- what are the bioprojects for bats? + - how many bat species have bioprojects beginning prjeb4? +- what is the lineage for the banded snail? +- how many assemblies are there for species in the cat and dog families? - not gpt4.1 +- show me a table of contig and scaffold n50 for all cat assemblies, sorted by contig n50 +- can you give me a table of genome size and chromosome count for the nematode groups shown in [this tree](link died) +- give me a table of current sequencing status for species on both the CANBP and DTOL lists +- what is the protected status of meles meles - not quite +- which species of insect have protected status - not quite + - can you give me a table of the conservation statuses + +report based queries - not currently available + +- get me a histogram of assembly_span values across all species + - give me the version with estimated values as well + +other test queries + +- how many ungulates, spiders and lizards have directly measured genome sizes over 1G and less than 2.5G with a chromosome number over 10, excluding snakes + - can I have a table of the largest 5 genome sizes in that list + - can you include a list of projects targeting each species in the table + - can you filter the table to only include rows where bioproject is present + - I mean apply that filter to the full query + +- give me the first 10 rows of a table of crab species targeted by any project. Include common name and family in the table + - can you sort the table and give me the top 10 by largest genome size + - can you restrict that to non-ancestral values for genome size + - can you expand the search to all crustaceans + +- what is the sequencing status for bat species found in the UK + +- which whale species are on the dtol list + - are any of these also on the canbp list? + - which of these have an assembly? + - are these direct values? + - can you give me a table sorted by largest to smallest + - can you include whether the assembly is contig, scaffolf or chromosome in that table + - can you also add columns for common name family and haploid chromosome number + +- are there any crab genomes? + - which of these are scaffold or worse + - what is the status for these species in ongoing projects + - how many projects can you show me the status in? + - can you check across all these projects and just show me the ones with those crab species listed + - give me the full status + +- can you include a list of projects targeting each species in the table + - can you use genome_size_kmer field instead of genome_size + - can you filter out missing values in the projects columns using goat rather than after the table is returned + - can you reverse the sort order + - what about sorting by most chromosomes instead + - what is the status of these species? + - do any have busco scores + +- have any squirrels been sequenced under a bioproject starting prjeb4 + +- how many stony corals are there excluding names that contain sp. or cf. + +- what is the contig and scaffold n50 for assemblies GCA_964273405.1 and GCA_964273435.1? + +- how many lepidoptera assemblies were sequenced between may and october 2024 + - can you give me the top 10 by assembly span + - what was the lowest and highest scaffold n50 for assemblies in that period + - what about for only project psyche + - the project psyche bioproject is PRJEB71705 + +- give me a histogram of chromosome counts for spiders + - can you remake the histogram using a log scale with country as a category showing the top ten plus other + +- what is the distribution of genome sizes for species on the dtol long list that have chromosomal genome assemblies? diff --git a/src/agent/component_helpers.py b/src/agent/component_helpers.py deleted file mode 100644 index 69b7b41..0000000 --- a/src/agent/component_helpers.py +++ /dev/null @@ -1,220 +0,0 @@ -import json -import logging -import os -import urllib -from datetime import datetime -from typing import Any, Dict - -import cachetools.func -import requests -from llama_index.core import Settings -from llama_index.core.output_parsers.utils import extract_json_str - -from prompt import ( - ATTRIBUTE_PROMPT, - ENTITY_PROMPT, - INDEX_PROMPT, - INTENT_PROMPT, - LINEAGE_PROMPT, - RANK_PROMPT, - RECORD_PROMPT, - TIME_PROMPT, -) - -logger = logging.getLogger("goat_nlp.component_helpers") - - -def identify_index(input: str, state: Dict[str, Any]): - index_response = Settings.llm.complete(INDEX_PROMPT.format(query=input)).text - state["index"] = json.loads(extract_json_str(index_response)) - - if "classification" not in state["index"] or "explanation" not in state["index"]: - raise ValueError("Invalid response from model at index identification stage.") - - -def identify_entity(input: str, state: Dict[str, Any]): - entity_response = Settings.llm.complete(ENTITY_PROMPT.format(query=input)).text - state["entity"] = json.loads(extract_json_str(entity_response)) - - if "entities" not in state["entity"] or "explanation" not in state["entity"]: - raise ValueError("Invalid response from model at entity identification stage.") - - -def identify_rank(input: str, state: Dict[str, Any]): - cleaned_taxons = query_entity(state, query_operator="tax_tree", include_sub_species=False) - rank_response = Settings.llm.complete( - RANK_PROMPT.format(query=input, results=json.dumps(cleaned_taxons, indent=4)) - ).text - state["rank"] = json.loads(extract_json_str(rank_response)) - - if "rank" not in state["rank"] or "explanation" not in state["rank"]: - raise ValueError("Invalid response from model at rank identification stage.") - - -def identify_time_frame(input: str, state: Dict[str, Any]): - time_response = Settings.llm.complete( - TIME_PROMPT.format(query=input, time=datetime.now().strftime("%Y-%m-%d %H:%M:%S")) - ).text - state["timeframe"] = json.loads(extract_json_str(time_response)) - - if ( - "from_date" not in state["timeframe"] - or "to_date" not in state["timeframe"] - or "explanation" not in state["timeframe"] - ): - raise ValueError("Invalid response from model at timeframe identification stage.") - - -def identify_intent(input: str, state: Dict[str, Any]): - intent_response = Settings.llm.complete(INTENT_PROMPT.format(query=input)).text - state["intent"] = json.loads(extract_json_str(intent_response)) - - if "intent" not in state["intent"] or "explanation" not in state["intent"]: - raise ValueError("Invalid response from model at intent identification stage.") - - -@cachetools.func.ttl_cache(ttl=int(os.getenv("ATTRIBUTE_API_TTL", 2 * 24 * 60 * 60))) -def attribute_api_call(index: str): - response = requests.get(f'{os.getenv("GOAT_BASE_URL")}/resultFields?result={index}&taxonomy=ncbi') - - logger.info(f"Made API call for {index} endpoint") - - response_parsed = response.json() - return response_parsed if response_parsed["status"]["success"] else None - - -def identify_attributes(input: str, state: Dict[str, Any]): - - attributes = attribute_api_call(state["index"]["classification"]) - cleaned_attributes = [ - { - "name": name, - "description": (attribute["description"] if "description" in attribute else None), - "constraint": (attribute["constraint"] if "constraint" in attribute else None), - "value_metadata": (attribute["value_metadata"] if "value_metadata" in attribute else None), - } - for name, attribute in attributes["fields"].items() - ] - - attribute_response = Settings.llm.complete( - ATTRIBUTE_PROMPT.format( - attribute_metadata=json.dumps(cleaned_attributes, indent=4), - query=input, - ) - ).text - state["attributes"] = json.loads(extract_json_str(attribute_response)) - - if "attributes" not in state["attributes"] or "explanation" not in state["attributes"]: - raise ValueError("Invalid response from model at attribute identification stage.") - - -def construct_query(input: str, state: Dict[str, Any]): - query = "" - - if state["rank"]["rank"] != "": - if "taxon_id" in state["rank"] and state["rank"]["taxon_id"]: - taxon_id_filter = f"tax_name({str(state['rank']['taxon_id'])})" - query_url = f"{os.getenv('GOAT_BASE_URL')}/search?query={urllib.parse.quote(taxon_id_filter)}" - query_url += f"&result={state['index']['classification']}" - - response = requests.get(query_url) - response_parsed = response.json() - - if not response_parsed["status"]["success"]: - raise ValueError("Error querying API to fetch taxon lineage details.") - - parent_taxon_id_response = Settings.llm.complete( - LINEAGE_PROMPT.format( - query=input, lineage=json.dumps(response_parsed["results"][0]["result"]["lineage"], indent=4) - ) - ).text - try: - parent_taxon_id = json.loads(extract_json_str(parent_taxon_id_response))["taxon_id"] - state["lineage"] = parent_taxon_id_response - except Exception as e: - raise ValueError("Error fetching parent taxon id from lineage details from model.") from e - query += f"tax_tree({parent_taxon_id}) AND " - query += f"tax_rank({state['rank']['rank']}) AND " - - if state["timeframe"]["from_date"] != "" or state["timeframe"]["to_date"] != "": - state["index"]["classification"] = "assembly" - if state["timeframe"]["from_date"] != "": - query += f"last_updated>={state['timeframe']['from_date']} AND " - if state["timeframe"]["to_date"] != "": - query += f"last_updated<={state['timeframe']['to_date']} AND " - - if state["attributes"]["attributes"] != []: - for attribute in state["attributes"]["attributes"]: - if attribute["condition"] is None or attribute["value"] is None: - continue - condition = attribute["condition"] - if condition == "in": - query += f'{attribute["attribute"]}({",".join(attribute["value"])}) AND ' - else: - query += f'{attribute["attribute"]}' + f'{attribute["condition"]}' + f'{attribute["value"]} AND ' - - query = query.removesuffix(" AND ") - - state["query"] = query - - -def construct_url(input: str, state: Dict[str, Any]): - base_url = "https://goat.genomehubs.org/" - endpoint = state["intent"]["intent"] + "?" - suffix = f'&result={state["index"]["classification"]}&summaryValues=count&taxonomy=ncbi&offset=0' - suffix += "&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2C" - suffix += "haploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - - state["final_url"] = base_url + endpoint + "query=" + urllib.parse.quote(state["query"]) + suffix - - -def identify_record(input: str, state: Dict[str, Any]): - cleaned_taxons = query_entity(state) - - for taxon in cleaned_taxons: - taxon.pop("lineage", None) - - taxon_response = Settings.llm.complete( - RECORD_PROMPT.format(query=input, results=json.dumps(cleaned_taxons, indent=4)) - ).text - state["record"] = json.loads(extract_json_str(taxon_response)) - - if "taxon_id" not in state["record"] or "explanation" not in state["record"]: - raise ValueError("Invalid response from model at record identification stage.") - - state["final_url"] = ( - "https://goat.genomehubs.org/record?recordId=" - + str(state["record"]["taxon_id"]) - + f"&result={state['index']['classification']}" - ) - - -def query_entity(state: Dict[str, Any], query_operator="tax_name", include_sub_species=True) -> list: - if "entities" not in state["entity"] or state["entity"]["entities"] == []: - return [] - entities = "" - for entity in state["entity"]["entities"]: - entities += f"{entity['singular_form']}," - entities += f"{entity['plural_form']}," - entities += f"{entity['scientific_name']}," - if include_sub_species: - entities += f"* {entity['singular_form']}," - entities += f"* {entity['plural_form']}," - - query_url = f'{os.getenv("GOAT_BASE_URL")}/search?query={urllib.parse.quote(f"{query_operator}({entities})")}' - query_url += f"&result={state['index']['classification']}" - - response = requests.get(query_url) - response_parsed = response.json() - return [ - { - "taxon_id": res["result"]["taxon_id"], - "taxon_rank": res["result"]["taxon_rank"], - "scientific_name": res["result"]["scientific_name"], - "taxon_names": ( - [x["name"] for x in res["result"]["taxon_names"]] if "taxon_names" in res["result"] else None - ), - "lineage": res["result"]["lineage"], - } - for res in response_parsed["results"] - ] diff --git a/src/agent/goat_query_component.py b/src/agent/goat_query_component.py deleted file mode 100644 index 43e803e..0000000 --- a/src/agent/goat_query_component.py +++ /dev/null @@ -1,36 +0,0 @@ -from typing import Any, Callable, Dict - -from llama_index.core.query_pipeline import CustomQueryComponent -from pydantic import Field - - -class GoatQueryComponent(CustomQueryComponent): - fn: Callable = Field(..., description="Function to run") - - @property - def _input_keys(self) -> set: - """Input keys dict.""" - return {"input"} - - @property - def _output_keys(self) -> set: - return {"output"} - - def _run_component(self, **kwargs) -> Dict[str, Any]: - """Run the component.""" - error = False - exception = None - try: - self.fn(kwargs["input"]["input"], kwargs["input"]["state"]) - except Exception as e: - error = True - exception = str(e) - - return { - "output": { - "error": error, - "exception": exception, - "input": kwargs["input"]["input"], - "state": kwargs["input"]["state"], - } - } diff --git a/src/agent/query_pipeline.py b/src/agent/query_pipeline.py deleted file mode 100644 index 09af2b5..0000000 --- a/src/agent/query_pipeline.py +++ /dev/null @@ -1,44 +0,0 @@ -from llama_index.core.query_pipeline import QueryPipeline as QP - -from agent.component_helpers import ( - construct_query, - construct_url, - identify_attributes, - identify_entity, - identify_index, - identify_intent, - identify_rank, - identify_record, - identify_time_frame, -) -from agent.goat_query_component import GoatQueryComponent - -qp = QP(verbose=True) - -qp.add_modules( - { - "index": GoatQueryComponent(fn=identify_index), - "entity": GoatQueryComponent(fn=identify_entity), - "rank": GoatQueryComponent(fn=identify_rank), - "intent": GoatQueryComponent(fn=identify_intent), - "attribute": GoatQueryComponent(fn=identify_attributes), - "time": GoatQueryComponent(fn=identify_time_frame), - "query": GoatQueryComponent(fn=construct_query), - "url": GoatQueryComponent(fn=construct_url), - "record": GoatQueryComponent(fn=identify_record), - } -) - - -qp.add_chain(["intent", "index", "entity"]) - -qp.add_link( - "entity", - "record", - condition_fn=lambda x: x["state"]["intent"]["intent"] == "record", -) -qp.add_link( - "entity", "rank", condition_fn=lambda x: x["state"]["intent"]["intent"] != "record" -) -qp.add_chain(["rank", "attribute", "time", "query", "url"]) -# qp.add_chain(["intent", "index", "entity", "rank", "time", "query", "url"]) diff --git a/src/app.py b/src/app.py deleted file mode 100644 index 54890c3..0000000 --- a/src/app.py +++ /dev/null @@ -1,61 +0,0 @@ -import logging -import os -import sys - -import llama_index.core -import phoenix as px -from flask import Flask, render_template, request -from llama_index.core import Settings -from llama_index.llms.ollama import Ollama -from openinference.instrumentation.llama_index import LlamaIndexInstrumentor -from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter -from opentelemetry.sdk import trace as trace_sdk -from opentelemetry.sdk.trace.export import SimpleSpanProcessor - -from agent.query_pipeline import qp - -Settings.llm = Ollama( - model="llama3", - base_url=os.getenv("OLLAMA_HOST_URL", "http://127.0.0.1:11434"), - request_timeout=36000.0, -) - -px.launch_app() -llama_index.core.set_global_handler("arize_phoenix") -endpoint = "http://127.0.0.1:6006/v1/traces" -tracer_provider = trace_sdk.TracerProvider() -tracer_provider.add_span_processor(SimpleSpanProcessor(OTLPSpanExporter(endpoint))) - -LlamaIndexInstrumentor().instrument(tracer_provider=tracer_provider) - -app = Flask("goat_nlp") - -handler = logging.StreamHandler(sys.stdout) -handler.setFormatter(logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")) -app.logger.addHandler(handler) -app.logger.setLevel(logging.INFO) - -logger = logging.getLogger("goat_nlp.app") - - -@app.route("/") -def home(): - return render_template("chat.html") - - -@app.route("/chat", methods=["POST"]) -def chat(): - # agent.reset() - for _ in range(os.getenv("RETRY_LIMIT", 3)): - try: - # response = agent.chat(request.form["user_input"]) - response = qp.run(input={"input": request.form["user_input"], "state": {}}) - logger.info(response) - return {"url": str(response["state"]["final_url"]), "json_debug": ""} - except Exception: - continue - return {"url": "", "json_debug": ""} - - -if __name__ == "__main__": - app.run(debug=True) diff --git a/src/mcp-server/CUSTOMISATION.md b/src/mcp-server/CUSTOMISATION.md new file mode 100644 index 0000000..4fda69e --- /dev/null +++ b/src/mcp-server/CUSTOMISATION.md @@ -0,0 +1,71 @@ +# Browser Page Customization Guide + +The MCP server includes a user-friendly browser page that can be fully customised for different sites. + +## Quick Start + +1. **Copy the example configuration:** + + ```bash + cp config_example.py config_site.py + ``` + +2. **Edit `config_site.py` to customize your site:** + + ```python + BROWSER_PAGE_CONFIG = { + "site_name": "Your Site Name", + "logo_path": "/site_logo.png", + "description": "Your site description", + # ... more options + } + + LOGO_FILE = "your_logo.png" + ``` + +3. **Add your logo file** to the `mcp-server/` directory with the name specified in `LOGO_FILE` + +4. **Restart the server** - it will automatically use your custom configuration + +## Configuration Options + +### `BROWSER_PAGE_CONFIG` Dictionary + +- **`site_name`** (str): Display name for your site (appears in title and header) +- **`logo_path`** (str): URL path to serve the logo (keep as `/site_logo.png`) +- **`description`** (str): Main description paragraph +- **`endpoint_description`** (str): Description of the MCP endpoint purpose +- **`tools`** (list): List of tool dictionaries with `name` and `description` +- **`links`** (list): List of link dictionaries with `name` and `url` +- **`mcp_info`** (dict): Protocol and header information for AI agents + +### `LOGO_FILE` Variable + +The filename of your logo image in the `mcp-server/` directory. Should be a PNG file. + +LOGO_FILE = "custom_logo.png" + +## Template Variables + +The `browser_page.html` template uses Jinja2 syntax. Available variables: + +- `{{ site_name }}` +- `{{ logo_path }}` +- `{{ description }}` +- `{{ endpoint_description }}` +- `{% for tool in tools %}` ... `{% endfor %}` +- `{% for link in links %}` ... `{% endfor %}` +- `{{ mcp_info.protocol }}` +- `{{ mcp_info.accept_header }}` + +## Customizing Styles + +To customize colors, fonts, or layout, edit `browser_page.html` directly. The CSS is embedded in the ` + + + +
+

{{ site_name }}

+
✓ Server is running
+ +

{{ description }}

+ +
+

This endpoint is for AI agents

+

{{ endpoint_description }}

+

If you're a developer or curious user, see the links below for more information.

+
+ +
+

Available Tools

+

This MCP server provides tools for querying {{ datastore_name }}:

+
    + {% for tool in tools %} +
  • {{ tool.name }} - {{ tool.description }}
  • + {% endfor %} +
  • And more...
  • +
+
+ +
+

For Developers

+ +
+ +
+

For AI Agents

+

To connect as an MCP client:

+
    +
  • Protocol: {{ mcp_info.protocol }}
  • +
  • Accept header: {{ mcp_info.accept_header }}
  • +
  • See GitHub repository for integration examples
  • +
+
+
+ + + \ No newline at end of file diff --git a/src/mcp-server/config.py b/src/mcp-server/config.py new file mode 100644 index 0000000..c56897f --- /dev/null +++ b/src/mcp-server/config.py @@ -0,0 +1,54 @@ +"""Configuration for the MCP server, including constants and browser page settings.""" + +# DO NOT EDIT THIS FILE DIRECTLY. Instead, copy this to config_site.py and customize for your site. + +try: + from .config_site import ( + API_BASE, + BROWSER_PAGE_CONFIG, + DATASTORE_DESCRIPTION, + DATASTORE_FULL_DESCRIPTION, + DATASTORE_FULL_NAME, + DATASTORE_NAME, + ISSUE_TEMPLATE_UNHANDLED_ERROR, + ISSUE_URL, + LOGO_FILE, + MCP_DESCRIPTION, + SITE_NAME, + USER_AGENT, + WEB_URL, + ) +except ImportError: + # Fallback to example config if custom config is not provided + from .config_example import ( + API_BASE, + BROWSER_PAGE_CONFIG, + DATASTORE_DESCRIPTION, + DATASTORE_FULL_DESCRIPTION, + DATASTORE_FULL_NAME, + DATASTORE_NAME, + ISSUE_TEMPLATE_UNHANDLED_ERROR, + ISSUE_URL, + LOGO_FILE, + MCP_DESCRIPTION, + SITE_NAME, + USER_AGENT, + WEB_URL, + ) + +# export constants for use in other modules +__all__ = ( + "DATASTORE_DESCRIPTION", + "DATASTORE_FULL_NAME", + "DATASTORE_FULL_DESCRIPTION", + "DATASTORE_NAME", + "MCP_DESCRIPTION", + "WEB_URL", + "API_BASE", + "ISSUE_URL", + "ISSUE_TEMPLATE_UNHANDLED_ERROR", + "LOGO_FILE", + "SITE_NAME", + "USER_AGENT", + "BROWSER_PAGE_CONFIG", +) diff --git a/src/mcp-server/config_example.py b/src/mcp-server/config_example.py new file mode 100644 index 0000000..03a2c1e --- /dev/null +++ b/src/mcp-server/config_example.py @@ -0,0 +1,61 @@ +# Constants +DATASTORE_NAME = "GoaT" # Full name of the database (for prompts) +SITE_NAME = f"{DATASTORE_NAME} MCP Server" # Used in browser page and prompts +DATASTORE_FULL_NAME = "Genomes on a Tree" # Full name of the database (for prompts) +DATASTORE_DESCRIPTION = "a searchable datastore of genomic and sequencing project metadata" +DATASTORE_FULL_DESCRIPTION = ( + f"{DATASTORE_NAME} ({DATASTORE_FULL_NAME}): {DATASTORE_DESCRIPTION}" +) +WEB_URL = f"https://{DATASTORE_NAME.lower()}.genomehubs.org" # Base URL for the web interface +API_BASE = f"https://{DATASTORE_NAME.lower()}.genomehubs.org/api/v2" # Base URL for API +USER_AGENT = f"{DATASTORE_NAME.lower()}-app/1.0" # User agent string for API requests +LOGO_FILE = "site_logo.png" # Logo file path (on filesystem) +MCP_DESCRIPTION = ( + f"The {SITE_NAME} (Model Context Protocol) server is an AI-powered " + f"interface for querying {DATASTORE_FULL_NAME}." +) +ISSUE_URL = "https://github.com/genomehubs/goat-nlp/issues" # URL for users to report issues +ISSUE_TEMPLATE_UNHANDLED_ERROR = ( + "Unhandled error in tool '{tool_name}': {error_message}\n\n" + "Please investigate the error and consider adding handling for this case in the tool implementation." +) + +BROWSER_PAGE_CONFIG = { + # Site branding + "datastore_name": DATASTORE_NAME, + "datastore_full_name": DATASTORE_FULL_NAME, + "datastore_description": DATASTORE_DESCRIPTION, + "site_name": SITE_NAME, + + # Main description + "description": MCP_DESCRIPTION, + + # Endpoint description + "endpoint_description": ( + "This URL is configured for machine-to-machine communication " + "using the Model Context Protocol (MCP)." + ), + + # List of tools to display + "tools": [ + {"name": "process_identifiers", "description": "Extract and validate taxa, assemblies, samples"}, + {"name": "process_attributes", "description": "Validate attribute filters and fields"}, + {"name": "submit_query", "description": f"Execute searches against {DATASTORE_FULL_NAME}"}, + {"name": "check_taxon_exists", "description": "Validate taxonomic names"}, + ], + + # Developer links + "links": [ + {"name": "GitHub Repository", "url": "https://github.com/genomehubs/goat-nlp"}, + {"name": f"{DATASTORE_NAME} Database", "url": WEB_URL}, + {"name": f"{DATASTORE_NAME} API Documentation", "url": f"{WEB_URL}/api-docs"}, + {"name": "View registered tools", "url": "/debug/tools"}, + {"name": "Report an Issue", "url": ISSUE_URL}, + ], + + # MCP connection info + "mcp_info": { + "protocol": "MCP with SSE (Server-Sent Events)", + "accept_header": "text/event-stream", + } +} diff --git a/src/mcp-server/config_site.py b/src/mcp-server/config_site.py new file mode 100644 index 0000000..03a2c1e --- /dev/null +++ b/src/mcp-server/config_site.py @@ -0,0 +1,61 @@ +# Constants +DATASTORE_NAME = "GoaT" # Full name of the database (for prompts) +SITE_NAME = f"{DATASTORE_NAME} MCP Server" # Used in browser page and prompts +DATASTORE_FULL_NAME = "Genomes on a Tree" # Full name of the database (for prompts) +DATASTORE_DESCRIPTION = "a searchable datastore of genomic and sequencing project metadata" +DATASTORE_FULL_DESCRIPTION = ( + f"{DATASTORE_NAME} ({DATASTORE_FULL_NAME}): {DATASTORE_DESCRIPTION}" +) +WEB_URL = f"https://{DATASTORE_NAME.lower()}.genomehubs.org" # Base URL for the web interface +API_BASE = f"https://{DATASTORE_NAME.lower()}.genomehubs.org/api/v2" # Base URL for API +USER_AGENT = f"{DATASTORE_NAME.lower()}-app/1.0" # User agent string for API requests +LOGO_FILE = "site_logo.png" # Logo file path (on filesystem) +MCP_DESCRIPTION = ( + f"The {SITE_NAME} (Model Context Protocol) server is an AI-powered " + f"interface for querying {DATASTORE_FULL_NAME}." +) +ISSUE_URL = "https://github.com/genomehubs/goat-nlp/issues" # URL for users to report issues +ISSUE_TEMPLATE_UNHANDLED_ERROR = ( + "Unhandled error in tool '{tool_name}': {error_message}\n\n" + "Please investigate the error and consider adding handling for this case in the tool implementation." +) + +BROWSER_PAGE_CONFIG = { + # Site branding + "datastore_name": DATASTORE_NAME, + "datastore_full_name": DATASTORE_FULL_NAME, + "datastore_description": DATASTORE_DESCRIPTION, + "site_name": SITE_NAME, + + # Main description + "description": MCP_DESCRIPTION, + + # Endpoint description + "endpoint_description": ( + "This URL is configured for machine-to-machine communication " + "using the Model Context Protocol (MCP)." + ), + + # List of tools to display + "tools": [ + {"name": "process_identifiers", "description": "Extract and validate taxa, assemblies, samples"}, + {"name": "process_attributes", "description": "Validate attribute filters and fields"}, + {"name": "submit_query", "description": f"Execute searches against {DATASTORE_FULL_NAME}"}, + {"name": "check_taxon_exists", "description": "Validate taxonomic names"}, + ], + + # Developer links + "links": [ + {"name": "GitHub Repository", "url": "https://github.com/genomehubs/goat-nlp"}, + {"name": f"{DATASTORE_NAME} Database", "url": WEB_URL}, + {"name": f"{DATASTORE_NAME} API Documentation", "url": f"{WEB_URL}/api-docs"}, + {"name": "View registered tools", "url": "/debug/tools"}, + {"name": "Report an Issue", "url": ISSUE_URL}, + ], + + # MCP connection info + "mcp_info": { + "protocol": "MCP with SSE (Server-Sent Events)", + "accept_header": "text/event-stream", + } +} diff --git a/src/mcp-server/logging_config.py b/src/mcp-server/logging_config.py new file mode 100644 index 0000000..e40de59 --- /dev/null +++ b/src/mcp-server/logging_config.py @@ -0,0 +1,208 @@ +"""Shared logging configuration for GenomeHubs MCP server.""" + +import glob +import gzip +import json +import logging +import logging.handlers +import os +import sys +import traceback +import uuid +from contextvars import ContextVar +from datetime import datetime +from pathlib import Path +from typing import Any + +from .config import DATASTORE_NAME + +# Create logs directory +LOG_DIR = Path.home() / ".goat-nlp" / "logs" +LOG_DIR.mkdir(parents=True, exist_ok=True) + +# Log files +GENERAL_LOG = LOG_DIR / f"{DATASTORE_NAME.lower()}-mcp.log" +USAGE_LOG = LOG_DIR / f"{DATASTORE_NAME.lower()}-usage.jsonl" # JSON Lines for analysis +ERROR_LOG = LOG_DIR / f"{DATASTORE_NAME.lower()}-errors.log" + +# Thread-safe context var for the current trace +_trace_id_var: ContextVar[str] = ContextVar('trace_id', default=None) + + +def set_trace_id(tid: str): + """Set the correlation ID for this request chain.""" + _trace_id_var.set(tid) + + +def get_trace_id() -> str: + """Get current trace ID.""" + tid = _trace_id_var.get() + if tid is None: + tid = str(uuid.uuid4()) + _trace_id_var.set(tid) + return tid + + +class GzipTimedRotatingFileHandler(logging.handlers.TimedRotatingFileHandler): + """TimedRotatingFileHandler that gzips rotated log files for disk savings. + + After rollover, any rotated files that are not already gzipped are compressed + with gzip and the original is removed. + """ + + def doRollover(self): + super().doRollover() + # Compress any rotated files for this base filename + pattern = f"{self.baseFilename}.*" + for fname in glob.glob(pattern): + if fname.endswith(".gz"): + continue + # Skip the current active log file + if os.path.abspath(fname) == os.path.abspath(self.baseFilename): + continue + try: + with (open(fname, "rb") as f_in, gzip.open(f"{fname}.gz", "wb") as f_out): + f_out.writelines(f_in) + os.remove(fname) + except Exception: + # Fail silently - logging shouldn't crash the app + logging.getLogger(__name__).exception("Failed to compress rotated log %s", fname) + + +class UsageLogger: + """Structured logger for tracking tool usage patterns using a rotating file handler.""" + + def __init__(self): + # Use a dedicated logger for usage entries so rotation can be applied separately + self.logger = logging.getLogger("goat.usage") + # If no handlers configured for this logger, add one + if not any(isinstance(h, (logging.handlers.TimedRotatingFileHandler, GzipTimedRotatingFileHandler)) + for h in self.logger.handlers): + handler = GzipTimedRotatingFileHandler(str(USAGE_LOG), when="midnight", backupCount=30, utc=False) + handler.suffix = "%Y-%m-%d" + handler.setLevel(logging.INFO) + # The logger will write raw JSON lines, so use a simple message formatter + handler.setFormatter(logging.Formatter("%(message)s")) + self.logger.addHandler(handler) + self.logger.propagate = False + + def log_tool_call( + self, + tool_name: str, + params: dict[str, Any], + duration_ms: float | None = None, + success: bool = True, + error: str | None = None, + result_summary: dict[str, Any] | None = None, + error_details: dict[str, Any] | None = None, + ): + """Log a tool invocation with structured JSON data (one JSON object per line). + + This writes a single JSON object per line to the usage log via the dedicated + usage logger, which handles rotation and compression. + """ + entry = { + "timestamp": datetime.now().isoformat(), + "trace_id": get_trace_id(), + "tool": tool_name, + "params": self._sanitize_params(params), + "duration_ms": duration_ms, + "success": success, + "error": error, + "error_details": error_details or {}, + "result_summary": result_summary or {} + } + # Write JSON line via logger so it benefits from rotation/compression + try: + self.logger.info(json.dumps(entry, default=str)) + except Exception: + # Last-resort fallback to append (avoid losing logs) + try: + with open(USAGE_LOG, "a") as f: + f.write(json.dumps(entry, default=str) + "\n") + except Exception: + logging.getLogger(__name__).exception("Failed to write usage log entry") + + def _sanitize_params(self, params: dict) -> dict: + """Remove sensitive data from params before logging.""" + return params.copy() + + +general_handler = logging.FileHandler(GENERAL_LOG) +general_handler.setLevel(logging.INFO) + +error_handler = logging.FileHandler(ERROR_LOG) +error_handler.setLevel(logging.ERROR) + +stdout_handler = logging.StreamHandler(sys.stdout) +stdout_handler.setLevel(logging.INFO) + +logging.basicConfig( + level=logging.INFO, + format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", + handlers=[general_handler, error_handler, stdout_handler], +) + + +# Global usage logger instance +usage_logger = UsageLogger() + + +def get_logger(name: str) -> logging.Logger: + """Get a logger instance with the given name. + + Args: + name: Logger name, typically __name__ from the calling module + + Returns: + Configured logger instance + """ + return logging.getLogger(name) + + +def log_tool_usage( + tool_name: str, + params: dict[str, Any], + duration_ms: float | None = None, + success: bool = True, + error: str | None = None, + result_summary: dict[str, Any] | None = None, + exc: BaseException | None = None, +): + """Convenience function for logging tool usage. + + Args: + tool_name: Name of the tool called + params: Parameters passed to the tool + duration_ms: Execution time in milliseconds + success: Whether the call succeeded + error: Error message if failed + result_summary: Summary stats about the result + """ + error_details: dict[str, Any] = {} + + # If an explicit exception isn't provided, use active exception in the current except block. + # This keeps existing call sites working while still capturing line number details. + active_exc = exc if exc is not None else sys.exc_info()[1] + + if active_exc is not None and hasattr(active_exc, "__traceback__"): + tb = active_exc.__traceback__ + if tb is not None: + if frames := traceback.extract_tb(tb): + last = frames[-1] + error_details = { + "type": type(active_exc).__name__, + "file": last.filename, + "line": last.lineno, + "function": last.name, + } + + usage_logger.log_tool_call( + tool_name=tool_name, + params=params, + duration_ms=duration_ms, + success=success, + error=error, + result_summary=result_summary, + error_details=error_details, + ) diff --git a/src/mcp-server/prompts/__init__.py b/src/mcp-server/prompts/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/mcp-server/prompts/query_parser.py b/src/mcp-server/prompts/query_parser.py new file mode 100644 index 0000000..1296209 --- /dev/null +++ b/src/mcp-server/prompts/query_parser.py @@ -0,0 +1,219 @@ +# LLM_PROMPT_ORIGINAL removed — was never imported or used at runtime. +# The default single-stage prompt below (LLM_PROMPT_DEFAULT) is kept for +# reference but is also superseded by the multi-stage system prompt in +# prompts/system.py (get_multi_stage_prompt), which is what the server uses. + +_REMOVED_PLACEHOLDER = """IMPORTANT: pass the original user query string as `user_query`. The LLM MUST NOT modify this! + + Extract as many of the following parameters as possible. If a parameter is absent pass an empty list or string. + + Most importantly determine which IDs are being queried and which attributes. + + IDs can be taxon names/IDs (**taxa**), assembly accessions (**assemblies**), or sample accessions (**samples**). + A single query can have one or two of these ID types, i.e., taxa and assemblies or taxa and samples. + + Attributes are fields to use as query filters + For each attribute pass a dict of "name", "operator", "value", and optional "modifier" + - Valid operators are =, !=, <, <=, >, >=, exists + - Modifiers can be summary statistics ("min", "max", "median", "length") or status modifiers + ("missing", "direct", "ancestral", "descendant", "estimated") + - To combine attributes with AND logic, include multiple attribute dicts in the list. + - To combine with OR logic, a list of keywords may be passed as the value to a single attribute. + + Fields are attribute names to return as columns in the result + For each field pass a dict of "name" and optional "modifier" + If an attribute used for filtering is also required as a field, include it in both lists. + + 1. **taxa**: If query is about species/families/genera/orders + - Translate common names: "mammal"→"Mammalia", "cat"→"Felis", "dog"→"Canis" + - Each taxon name may be a prefix or partial match if the query implies it. + Use wildcards (*) as needed. + - Examples: + * "How many mammal species..." → taxa=["Mammalia"] + * "List cat families..." → taxa=["Felis"] + * "Tell me about Canis familiaris" → taxa=["Canis familiaris"] + * "... for humans and mice" → taxa=["Homo sapiens", "Mus musculus"] + + 2. **assemblies**: If query is about genome assemblies + - Provide assembly accession(s) (e.g., "GCF_000002305.6") + - Examples: + * "Details on assembly GCF_000002305.6" → assemblies=["GCF_000002305.6"] + * "... for assemblies GCF_000002305.6 and GCA_000001405.28" → + assemblies=["GCF_000002305.6", "GCA_000001405.28"] + + 3. **samples**: If query is about DNA/RNA samples + - Provide sample accession(s) (e.g., "SRR1234567") + - Examples: + * "Show sample SRR1234567" → samples=["SRR1234567"] + * "... for samples SRR1234567 and SRR7654321" → samples=["SRR1234567", "SRR7654321"] + + 4. **attributes**: Attribute names , values and modifiers to filter on or return + - Example: "genome_size < 3G" → [{"name": "genome_size", "operator": "<", "value": "3000000000"}] + - Combined modifiers: [{"name": "genome_size", "modifier": ["min", "direct"], "operator": "<", "value": "3G"}] + - Summary modifiers: "min", "max", "median", "length" + - Status modifiers (converted to exclusions): "missing", "direct", "ancestral", "descendant", "estimated" + + 5. **fields**: Attribute names that should be returned as columns (if applicable) + - Examples: + * "Show genome_size and assembly_level" → [{"name": "genome_size"}, + {"name": "assembly_level"}] + * "Show minimum genome_size and directly measured assembly_level" → [{"name": "genome_size", "modifier": + ["min"]}, {"name": "assembly_level", "modifier": ["direct"]}] + + 6. **rank**: Taxonomic rank if mentioned + - Examples: "species", "family", "genus", "order", "class" + - Only for queries that include a list of one or more taxa + + 7. **intent**: What kind of result + - "count": Just the count ("How many...") + - "table": List of results ("Which...", "List...") + + 8. **taxon_filter_type**: Infer the type of taxon filter to apply (if taxa provided) + - Examples: + * "families in Felis" → "children" + * "matching Canis*", "for species A, species B and species C" → "matching" + * "lineage of Mammalia", "parent taxa" → "lineage" + + 9. **user_query**: Copy the original question for context. DO NOT modify this! + + For table results, you can also specify: + 10. **sort_by**: Optional field to sort results by (e.g., "genome_size") + 11. **sort_order**: Optional sort order - "asc" or "desc" + 12. **size**: Optional result size limit (default 10 for tables, None for counts) + Maximum size is 1000, but larger sizes may be slow. + 13. **page**: Optional page number for pagination (default 1) +""" + +# Built-in LLM instruction prompt (default) +LLM_PROMPT_DEFAULT = """Follow these instructions exactly. Produce only a single JSON object as the +output (no prose). Do NOT modify the original `user_query`. + +Output schema (exact keys): +- `user_query`: string (original query, unchanged) +- `taxa`: list of strings or [] +- `assemblies`: list of strings or [] +- `samples`: list of strings or [] +- `rank`: string or null +- `attributes`: list of objects {"name","operator","value"(or null),"modifier"(optional list)} + - `operator`: one of: `=`, `!=`, `<`, `<=`, `>`, `>=`, `exists` + - `modifier`: allowed modifiers are the union of: + - summary: `min`, `max`, `median`, `length` + - status: `missing`, `direct`, `ancestral`, `descendant`, `estimated` +- `fields`: list of objects {"name", "modifier"(optional list)} +- `intent`: one of: `count`, `table`, `histogram`, `record` +- `taxon_filter_type`: one of: `children`, `matching`, `lineage` or null +- `search_index`: one of: `taxon`, `assembly`, `sample` or null +- `sort_by`: string or null +- `sort_order`: `asc`, `desc` or null +- `size`: integer or null +- `page`: integer (default 1) +- `parse_warnings`: list of short strings (optional) + +Rules (strict): +- Use only the allowed values for `operator`, `modifier`, `intent`, `taxon_filter_type`, + `search_index`, and `sort_order`. +- Do not invent IDs, taxa, attribute names, or numeric values. If ambiguous, return empty + lists or `null` and add a concise `parse_warnings` entry explaining the ambiguity. +- Map common names when unambiguous: `mammal` → `Mammalia`, `cat` → `Felis`, `dog` → + `Canis`. If ambiguous, leave `taxa` empty and add a `parse_warnings` entry. +- Recognize assembly accessions (prefixes `GCF_`, `GCA_`) and sample accessions (prefixes + `SRR`, `ERR`, `SRX`, `SRS`, etc.) as literal tokens; do not invent or normalize + accessions. +- Convert human-readable sizes when straightforward (examples: `3G` → 3000000000, + `1.5M` → 1500000). If you convert, put the numeric value (integer) into `value` and add + a `parse_warnings` note exactly like: `converted '3G' -> 3000000000`. +- For existence checks use `operator: "exists"` and set `value` to `null`. +- Combine OR by placing multiple values in `value` as a list; combine AND by creating + separate attribute objects. +- Set `intent` from phrasing heuristics: phrases starting with or containing `How many` + → `count`; `List`, `Which`, `Show` → `table`; `Histogram of` → `histogram`; `Record for` + or a lone accession lookup → `record`. +- Infer `search_index`: prefer `taxon` if `taxa` present; else `assembly` if `assemblies` + present; else `sample` if `samples` present. If `search_index` is inferred from wording + without explicit IDs, add a `parse_warnings` entry explaining the inference. +- Do not hallucinate facts or create IDs. When uncertain, prefer empty values and a + clear `parse_warnings` message. + +Output requirements: +- Return exactly one valid JSON object and nothing else. +- Use `null` (not the string "null") for missing scalar values. +- Use empty lists `[]` for missing list values. +- Keep `page` as an integer (default to `1` if absent). + +Examples (input -> required JSON): + +1) Input: `How many mammal species have genome_size < 3G?` +Output (required): +```json +{ + "user_query": "How many mammal species have genome_size < 3G?", + "taxa": ["Mammalia"], + "assemblies": [], + "samples": [], + "rank": "species", + "attributes": [ + {"name": "genome_size", "operator": "<", "value": 3000000000} + ], + "fields": [], + "intent": "count", + "taxon_filter_type": "children", + "search_index": "taxon", + "sort_by": null, + "sort_order": null, + "size": null, + "page": 1, + "parse_warnings": ["converted '3G' -> 3000000000"] +} +``` + +2) Input: `Show assemblies GCF_000002305.6 and GCA_000001405.28; include genome_size and +assembly_level; sort by genome_size desc; size 5` +Output (required): +```json +{ + "user_query": "Show assemblies GCF_000002305.6 and GCA_000001405.28; include genome_size +and assembly_level; sort by genome_size desc; size 5", + "taxa": [], + "assemblies": ["GCF_000002305.6", "GCA_000001405.28"], + "samples": [], + "rank": null, + "attributes": [], + "fields": [{"name": "genome_size"}, {"name": "assembly_level"}], + "intent": "table", + "taxon_filter_type": null, + "search_index": "assembly", + "sort_by": "genome_size", + "sort_order": "desc", + "size": 5, + "page": 1 +} +``` + +3) Input: `Show SRR1234567` +Output (required): +```json +{ + "user_query": "Show SRR1234567", + "taxa": [], + "assemblies": [], + "samples": ["SRR1234567"], + "rank": null, + "attributes": [], + "fields": [], + "intent": "record", + "taxon_filter_type": null, + "search_index": "sample", + "sort_by": null, + "sort_order": null, + "size": null, + "page": 1 +} +``` + +If a choice is uncertain, prefer leaving fields empty and provide a clear `parse_warnings` +entry. +""" + +prompts = { + "default": LLM_PROMPT_DEFAULT, +} diff --git a/src/mcp-server/prompts/system.py b/src/mcp-server/prompts/system.py new file mode 100644 index 0000000..9431bf6 --- /dev/null +++ b/src/mcp-server/prompts/system.py @@ -0,0 +1,30 @@ +def get_multi_stage_prompt() -> str: + """System prompt for the multi-stage approach.""" + return """Use tools in correct sequence to answer questions about genomic data. + +CRITICAL: ALWAYS run tools in the correct order. Steps 2 and 3 can be run in parallel as they +prepare parameters for step 4. + +IMPORTANT WORKFLOW: +1. Prefer running choose_search_index(user_query) early to determine the best index. + - choose_search_index will return: search_index (taxon|assembly|sample), reasoning. + - check reasoning matches query intent or explicitly ask for clarification. + - Default fallback is "taxon" only when no better signal exists. + +2. Run process_identifiers(...) to prepare taxa, assemblies, and/or samples. + - Run once for all identifiers. Validate taxon names with check_taxon_exists() if needed. + +3. Run process_attributes(...) to prepare attribute filters and fields. + - Run once for all attributes. Pass the same search_index throughout. + +4. Run submit_query(...) or get_report(...) using the artifact IDs returned from steps 2 and 3. + - Provide the exact artifact IDs as returned. Do not reconstruct artifacts manually. + - If the intent is to get a count, simple table, list or list of sources, use submit_query(...). + - For visualisations or complex reports, use get_report(...). + +NOTES: +- Use choose_search_index when the intent is ambiguous (e.g., mentions both taxa and assemblies). +- Always propagate search_index and its reasoning through the pipeline to avoid mismatches. +- Always return the search url to the user in the final response, even if showing a table or + count, so they can explore further. +""" diff --git a/src/mcp-server/resources.py b/src/mcp-server/resources.py new file mode 100644 index 0000000..e6f9665 --- /dev/null +++ b/src/mcp-server/resources.py @@ -0,0 +1,16 @@ +from .config import DATASTORE_FULL_DESCRIPTION, SITE_NAME + + +async def get_datastore_description() -> str: + """Get a description of the datastore.""" + return DATASTORE_FULL_DESCRIPTION + + +def register_resources(mcp) -> None: + """Register resources with the FastMCP instance. + + Args: + mcp: FastMCP instance to register resources with + """ + + mcp.resource(f"resource://{SITE_NAME}/description")(get_datastore_description) diff --git a/src/mcp-server/scripts/analyse_usage.py b/src/mcp-server/scripts/analyse_usage.py new file mode 100644 index 0000000..03498f6 --- /dev/null +++ b/src/mcp-server/scripts/analyse_usage.py @@ -0,0 +1,102 @@ +#!/usr/bin/env python3 +"""Analyse MCP server usage patterns.""" + + +import json +from collections import Counter, defaultdict +from datetime import datetime, timedelta, timezone +from pathlib import Path + +from .config import DATASTORE_NAME + +LOG_FILE = Path.home() / ".goat-nlp" / "logs" / f"{DATASTORE_NAME}-usage.jsonl" + + +def reconstruct_chain(trace_id: str): + """Show all tool calls in a single reasoning chain.""" + chain = [] + + with open(LOG_FILE) as f: + for line in f: + entry = json.loads(line) + if entry.get("trace_id") == trace_id: + chain.append({ + "tool": entry["tool"], + "params": entry["params"], + "success": entry["success"], + "duration_ms": entry["duration_ms"], + "timestamp": entry["timestamp"] + }) + + print(f"\n=== Trace {trace_id} ===") + for i, call in enumerate(chain, 1): + status = "✓" if call["success"] else "✗" + print(f"\n{i}. {status} {call['tool']} ({call['duration_ms']:.0f}ms)") + print(f" Params: {call['params']}") + + +def find_error_chains(): + """Find all traces that had errors.""" + traces_with_errors = set() + + with open(LOG_FILE) as f: + for line in f: + entry = json.loads(line) + if not entry["success"]: + traces_with_errors.add(entry["trace_id"]) + + print(f"Found {len(traces_with_errors)} chains with errors") + for tid in list(traces_with_errors)[:5]: + reconstruct_chain(tid) + + +def analyse_usage(days=7): + """Analyse usage patterns from logs.""" + cutoff = datetime.now(timezone.utc) - timedelta(days=days) + + tool_counts = Counter() + tool_errors = Counter() + tool_durations = defaultdict(list) + param_patterns = defaultdict(Counter) + + with open(LOG_FILE) as f: + for line in f: + entry = json.loads(line) + timestamp = datetime.fromisoformat(entry["timestamp"]) + + if timestamp < cutoff: + continue + + tool = entry["tool"] + tool_counts[tool] += 1 + + if not entry["success"]: + tool_errors[tool] += 1 + + if entry.get("duration_ms"): + tool_durations[tool].append(entry["duration_ms"]) + + # Track parameter patterns + for key, value in entry["params"].items(): + param_patterns[f"{tool}.{key}"][str(value)] += 1 + + print(f"\n=== Usage Analysis (last {days} days) ===\n") + + print("Most used tools:") + for tool, count in tool_counts.most_common(10): + error_rate = (tool_errors[tool] / count * 100) if count else 0 + avg_duration = sum(tool_durations[tool]) / len(tool_durations[tool]) if tool_durations[tool] else 0 + print(f" {tool}: {count} calls, {error_rate:.1f}% errors, {avg_duration:.0f}ms avg") + + print("\nCommon parameter patterns:") + for param, values in list(param_patterns.items())[:10]: + top_value = values.most_common(1)[0] + print(f" {param}: '{top_value[0]}' ({top_value[1]} times)") + + print("\nPotential workflow patterns:") + # Add sequence analysis here + + +if __name__ == "__main__": + analyse_usage() + find_error_chains() diff --git a/src/mcp-server/server.py b/src/mcp-server/server.py new file mode 100644 index 0000000..19b891b --- /dev/null +++ b/src/mcp-server/server.py @@ -0,0 +1,187 @@ +import inspect +import uuid +from pathlib import Path +from typing import Any, Dict + +from fastmcp import FastMCP +from fastmcp.server.middleware.caching import ResponseCachingMiddleware +from fastmcp.server.middleware.timing import DetailedTimingMiddleware, TimingMiddleware +from httpx import Request +from jinja2 import Template +from starlette.middleware.base import BaseHTTPMiddleware +from starlette.responses import FileResponse, HTMLResponse, JSONResponse + +from .config import BROWSER_PAGE_CONFIG, LOGO_FILE, SITE_NAME +from .logging_config import get_logger, set_trace_id +from .prompts.system import get_multi_stage_prompt +from .tools import register_all_tools + +logger = get_logger(__name__) + +# Load browser page template +_BROWSER_PAGE_TEMPLATE = None + + +def get_browser_page_template() -> Template: + """Load and cache the browser page template.""" + global _BROWSER_PAGE_TEMPLATE + if _BROWSER_PAGE_TEMPLATE is None: + html_file = Path(__file__).parent / "browser_page.html" + template_str = html_file.read_text(encoding="utf-8") + _BROWSER_PAGE_TEMPLATE = Template(template_str) + return _BROWSER_PAGE_TEMPLATE + + +def render_browser_page(config: Dict[str, Any] = None) -> str: + """Render the browser page with custom configuration.""" + template = get_browser_page_template() + config = config or BROWSER_PAGE_CONFIG + # Add logo_path derived from logo filename + render_config = {**config, "logo_path": f"/{LOGO_FILE}"} + return template.render(**render_config) + + +# Middleware to serve HTML for browser GET requests to /mcp +class BrowserFriendlyMCPMiddleware(BaseHTTPMiddleware): + async def dispatch(self, request: Request, call_next): + # Only intercept GET requests to /mcp + if request.method == "GET" and request.url.path == "/mcp": + accept_header = request.headers.get("accept", "").lower() + user_agent = request.headers.get("user-agent", "").lower() + + # Check if this is a browser + is_browser = ( + "text/html" in accept_header or + ("text/event-stream" not in accept_header and + any(ua in user_agent for ua in ["mozilla", "chrome", "safari", "edge", "opera"])) + ) + + if is_browser: + return HTMLResponse(render_browser_page()) + + # For everything else, continue to next middleware/handler + return await call_next(request) + + +# Middleware to set trace_id for all requests (if not already set by client) +class TraceIDMiddleware(BaseHTTPMiddleware): + """Middleware to set trace_id for each request.""" + + async def dispatch(self, request: Request, call_next): + # Extract trace_id from request headers, or generate new one + trace_id = request.headers.get("X-Trace-ID") + if not trace_id: + trace_id = str(uuid.uuid4()) + + # Set in context for all downstream tool calls + set_trace_id(trace_id) + + response = await call_next(request) + # Optionally include trace_id in response headers + response.headers["X-Trace-ID"] = trace_id + return response + + +# Initialize FastMCP server +mcp = FastMCP(SITE_NAME) + +# Register tools +register_all_tools(mcp) + +# Basic timing for all requests +mcp.add_middleware(TimingMiddleware()) + +# Detailed per-operation timing (tools, resources, prompts) +mcp.add_middleware(DetailedTimingMiddleware()) + +# Caching middleware to cache responses +mcp.add_middleware(ResponseCachingMiddleware()) + +# NOTE: Browser-friendly middleware is added in main() by wrapping the ASGI app + + +@mcp.prompt() +async def query_workflow() -> str: + """System prompt describing the proper workflow for querying GenomeHubs.""" + return get_multi_stage_prompt() + + +async def list_registered_tools(mcp) -> list: + tm = getattr(mcp, "_tool_manager", None) + if tm and hasattr(tm, "get_tools"): + try: + maybe = tm.get_tools() + maybe = await maybe if inspect.isawaitable(maybe) else maybe + except Exception as exc: # pragma: no cover - defensive + logger.exception("Failed to get tools from tool_manager: %s", exc) + return [] + + # Normalize common shapes into a list of tool descriptors + if maybe is None: + return [] + if isinstance(maybe, list): + return maybe + if isinstance(maybe, dict): + # MCP-style response: {"tools": [...]} -> return the list + if "tools" in maybe and isinstance(maybe["tools"], list): + return maybe["tools"] + # mapping of name->info: convert to list of dicts with name + # e.g., {"toolA": {...}, "toolB": {...}} + try: + return [ + (v if isinstance(v, dict) else {"name": k, "info": v}) + for k, v in maybe.items() + ] + except Exception: + return [maybe] + # Anything else: wrap as single-item list + return [maybe] + # fallback: return empty list or raise a clear error + return [] + + +@mcp.custom_route("/debug/tools", methods=["GET"]) +async def list_tools_debug(request: Request): + tools = await list_registered_tools(mcp) + tool_names: list[str] = [] + for tool in tools or []: + if isinstance(tool, str): + tool_names.append(tool) + elif isinstance(tool, dict): + # common shapes: {"name": ...} or {"tool": ...} + name = tool.get("name") or tool.get("tool") or tool.get("id") + tool_names.append(name or str(tool)) + else: + tool_names.append(getattr(tool, "__name__", str(tool))) + + return JSONResponse({"registered_tools": tool_names}) + + +@mcp.custom_route("/site_logo.png", methods=["GET"]) +async def serve_logo(request: Request): + """Serve the site logo image.""" + logo_path = Path(__file__).parent / LOGO_FILE + if logo_path.exists(): + return FileResponse(logo_path, media_type="image/png") + else: + return JSONResponse({"error": "Logo not found"}, status_code=404) + + +def main(): + # Get the underlying Starlette app and add our middleware directly + # This ensures it runs before FastMCP's internal routing + app = mcp.http_app(transport="streamable-http") + + # Wrap with middlewares in order (outermost first) + # TraceIDMiddleware runs first, setting trace_id in context + wrapped_app = TraceIDMiddleware(app) + # BrowserFriendlyMCPMiddleware runs second, can use trace_id if needed + wrapped_app = BrowserFriendlyMCPMiddleware(wrapped_app) + + # Run the wrapped app + import uvicorn + uvicorn.run(wrapped_app, host="0.0.0.0", port=8008) + + +if __name__ == "__main__": + main() diff --git a/src/mcp-server/site_logo.png b/src/mcp-server/site_logo.png new file mode 100644 index 0000000..9d1d9c3 Binary files /dev/null and b/src/mcp-server/site_logo.png differ diff --git a/src/mcp-server/tests/smoke_histogram.py b/src/mcp-server/tests/smoke_histogram.py new file mode 100644 index 0000000..f6ad8e0 --- /dev/null +++ b/src/mcp-server/tests/smoke_histogram.py @@ -0,0 +1,66 @@ +# Import formatter from server.py +import importlib.util +import sys +from pathlib import Path + +SERVER_PATH = Path(__file__).resolve().parents[1] / "server.py" +spec = importlib.util.spec_from_file_location("server_module", SERVER_PATH) +mod = importlib.util.module_from_spec(spec) +sys.modules[spec.name] = mod +spec.loader.exec_module(mod) + +SAMPLE_JSON = { + "status": {"success": True}, + "report": { + "status": {"success": True}, + "report": { + "histogram": { + "histograms": { + "buckets": [ + 2, 3.7306715, 6.958955, 12.980788, 24.213528, + 45.166359, 84.250425, 157.15533, 293.14746, + 546.81844, 1020 + ], + "allValues": [ + 18523, 125304, 481016, 561095, 366611, + 266440, 29735, 10105, 28, 58, 1 + ], + "valueType": "integer", + "zDomain": [1, 561095], + "params": {}, + "fields": ["chromosome_number"], + "xLabel": "chromosome_number" + }, + "field": "chromosome_number", + "summary": "value", + "scale": "log2", + "query": "tax_tree%28Magnoliopsida%29%20AND%20tax_rank%28species%29", + "stats": { + "count": 1858916, + "min": 2, + "max": 1020, + "avg": 26.1936, + "sum": 48691704 + }, + "type": "short", + "domain": [2, 1020], + "tickCount": 11, + "showOther": False, + "bounds": {}, + "xQuery": {"result": "taxon"}, + "x": 1858916 + }, + "name": "histogram" + } + } +} + + +def main(): + # Pass the full sample JSON to ensure both parsing paths work + text = mod.format_histogram_report(SAMPLE_JSON) + print(text) + + +if __name__ == "__main__": + main() diff --git a/src/mcp-server/tests/smoke_submit_query_and_advanced_search.py b/src/mcp-server/tests/smoke_submit_query_and_advanced_search.py new file mode 100644 index 0000000..aa8c37d --- /dev/null +++ b/src/mcp-server/tests/smoke_submit_query_and_advanced_search.py @@ -0,0 +1,237 @@ +"""Zero-dependency smoke tests for submit_query and advanced_search. + +Run with: + python mcp-server/tests/smoke_submit_query_and_advanced_search.py +""" + +import asyncio +import importlib +import sys +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[2] +if str(ROOT) not in sys.path: + sys.path.insert(0, str(ROOT)) + + +search_mod = importlib.import_module("mcp-server.tools.search") +query_mod = importlib.import_module("mcp-server.tools.query_parser") +errors_mod = importlib.import_module("mcp-server.tools.helpers.errors") + + +class Patcher: + def __init__(self): + self._patches = [] + + def set(self, module, name, value): + original = getattr(module, name) + self._patches.append((module, name, original)) + setattr(module, name, value) + + def restore(self): + while self._patches: + module, name, original = self._patches.pop() + setattr(module, name, original) + + +async def test_advanced_search_core_data(): + patch = Patcher() + try: + async def fake_fetch_valid_types(_search_index): + return {} + + def fake_validate_attributes(values, *_args, **_kwargs): + return values + + def fake_validate_attribute_name(value, *_args, **_kwargs): + return value + + async def fake_build_search_params(**_kwargs): + return {"query": "tax_tree(Mollusca)"} + + def fake_params_dict_to_url(_base, _params): + return "https://api.example/count" + + async def fake_make_api_request(_url): + return {"count": 42} + + def fake_build_user_facing_url(_url): + return "https://example/search?query=tax_tree(Mollusca)" + + patch.set(search_mod, "fetch_valid_types", fake_fetch_valid_types) + patch.set(search_mod, "validate_attributes", fake_validate_attributes) + patch.set(search_mod, "validate_attribute_name", fake_validate_attribute_name) + patch.set(search_mod, "build_search_params", fake_build_search_params) + patch.set(search_mod, "params_dict_to_url", fake_params_dict_to_url) + patch.set(search_mod, "make_api_request", fake_make_api_request) + patch.set(search_mod, "build_user_facing_url", fake_build_user_facing_url) + + result = await search_mod.advanced_search( + search_index="taxon", + taxa=["Mollusca"], + rank="species", + user_query="How many mollusca species are there?", + show_table=False, + ) + + assert result["count"] == 42 + assert result["search_index"] == "taxon" + assert "markdown" not in result + assert "csv" not in result + print("✓ test_advanced_search_core_data") + finally: + patch.restore() + + +async def test_advanced_search_handled_error(): + patch = Patcher() + try: + async def fake_fetch_valid_types(_search_index): + return {} + + async def fake_build_search_params(**_kwargs): + return {"query": "x"} + + def fake_params_dict_to_url(_base, _params): + return "https://api.example/search" + + async def fake_make_api_request(_url): + return {"status": {"hits": 0}} + + patch.set(search_mod, "fetch_valid_types", fake_fetch_valid_types) + patch.set(search_mod, "build_search_params", fake_build_search_params) + patch.set(search_mod, "params_dict_to_url", fake_params_dict_to_url) + patch.set(search_mod, "make_api_request", fake_make_api_request) + + try: + await search_mod.advanced_search( + search_index="taxon", + user_query="show table", + show_table=True, + ) + except errors_mod.ToolExecutionError: + print("✓ test_advanced_search_handled_error") + return + + raise AssertionError("Expected ToolExecutionError was not raised") + finally: + patch.restore() + + +async def test_submit_query_formatting_and_handled_error(): + patch = Patcher() + try: + identifiers = { + "taxa": ["Mollusca"], + "assemblies": [], + "samples": [], + "taxon_filter_type": "children", + "rank": "species", + "user_query": "give me mollusca chromosome level genomes", + "search_index": "taxon", + } + attributes = { + "attributes": [{"name": "assembly_level", "operator": "=", "value": "chromosome"}], + "fields": [{"name": "genome_size"}, {"name": "scientific_name"}], + "names": [], + "ranks": [], + "search_index": "assembly", + } + + def fake_retrieve(artifact_id): + if artifact_id == "id-artifact": + return identifiers + if artifact_id == "attr-artifact": + return attributes + return None + + def fake_resolve_index(_search_index, _identifiers_output, _attributes_output): + return "assembly" + + async def fake_advanced_search(**_kwargs): + return { + "count": 1, + "description": "1 assembly", + "url": "https://example/search?x", + "search_index": "assembly", + "results": [ + { + "result": { + "scientific_name": "Octopus vulgaris", + "fields": {"genome_size": {"value": 1000}}, + } + } + ], + "api_response": {"results": []}, + } + + patch.set(query_mod, "retrieve", fake_retrieve) + patch.set(query_mod, "resolve_index", fake_resolve_index) + + search_module = importlib.import_module("mcp-server.tools.search") + patch.set(search_module, "advanced_search", fake_advanced_search) + + patch.set( + query_mod, + "process_result_table", + lambda *_args, **_kwargs: { + "columns": ["scientific_name"], + "rows": [ + { + "scientific_name": { + "value": "Octopus vulgaris", + "raw_value": "Octopus vulgaris", + "flag": False, + } + } + ], + "flags": 0, + }, + ) + patch.set( + query_mod, + "format_result_table", + lambda **kwargs: "formatted-csv" if kwargs.get("format") == "csv" else "formatted-markdown", + ) + patch.set(query_mod, "set_search_tips", lambda *_args, **_kwargs: "tips") + + result = await query_mod.submit_query( + identifiers_artifact_id="id-artifact", + attributes_artifact_id="attr-artifact", + intent="table", + search_index="assembly", + size=5, + page=1, + ) + + assert result["result"]["csv"] == "formatted-csv" + assert result["result"]["markdown"] == "formatted-markdown" + + async def fake_advanced_search_error(**_kwargs): + raise errors_mod.ToolExecutionError("advanced_search", "handled failure") + + patch.set(search_module, "advanced_search", fake_advanced_search_error) + + handled = await query_mod.submit_query( + identifiers_artifact_id="id-artifact", + attributes_artifact_id="attr-artifact", + intent="count", + search_index="assembly", + ) + + assert handled["error_type"] == "handled" + assert handled["error_tool"] == "advanced_search" + print("✓ test_submit_query_formatting_and_handled_error") + finally: + patch.restore() + + +async def main(): + await test_advanced_search_core_data() + await test_advanced_search_handled_error() + await test_submit_query_formatting_and_handled_error() + print("\nAll smoke tests passed.") + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/src/mcp-server/tests/test_histogram_assert.py b/src/mcp-server/tests/test_histogram_assert.py new file mode 100644 index 0000000..0ca2fe0 --- /dev/null +++ b/src/mcp-server/tests/test_histogram_assert.py @@ -0,0 +1,74 @@ +import importlib.util +import sys +from pathlib import Path + +SERVER_PATH = Path(__file__).resolve().parents[1] / "server.py" +spec = importlib.util.spec_from_file_location("server_module", SERVER_PATH) +mod = importlib.util.module_from_spec(spec) +sys.modules[spec.name] = mod +spec.loader.exec_module(mod) + +SAMPLE_JSON = { + "status": {"success": True}, + "report": { + "status": {"success": True}, + "report": { + "histogram": { + "histograms": { + "buckets": [ + 2, 3.7306715, 6.958955, 12.980788, 24.213528, + 45.166359, 84.250425, 157.15533, 293.14746, + 546.81844, 1020 + ], + "allValues": [ + 18523, 125304, 481016, 561095, 366611, + 266440, 29735, 10105, 28, 58, 1 + ], + "valueType": "integer", + "zDomain": [1, 561095], + "fields": ["chromosome_number"], + "xLabel": "chromosome_number" + }, + "field": "chromosome_number", + "summary": "value", + "scale": "log2", + "query": "tax_tree%28Magnoliopsida%29%20AND%20tax_rank%28species%29", + "stats": { + "count": 1858916, + "min": 2, + "max": 1020, + "avg": 26.1936, + "sum": 48691704 + }, + "type": "short", + "domain": [2, 1020], + "tickCount": 11, + "showOther": False, + "bounds": {}, + "xQuery": {"result": "taxon"}, + "x": 1858916 + }, + "name": "histogram" + } + } +} + + +def test_histogram_output_contains_summary(): + text = mod.format_histogram_report(SAMPLE_JSON) + assert "## Histogram Summary" in text + assert "Total species" in text + assert "Field" in text and "chromosome_number" in text + assert "Statistics" in text + + +def test_histogram_output_has_distribution_rows(): + text = mod.format_histogram_report(SAMPLE_JSON) + # Expect at least one distribution row present + assert "### Distribution" in text + assert "| 2 | 4 |" in text or "| 2 |" in text + + +def test_histogram_output_non_empty(): + text = mod.format_histogram_report(SAMPLE_JSON) + assert len(text.strip()) > 50 diff --git a/src/mcp-server/tools/__init__.py b/src/mcp-server/tools/__init__.py new file mode 100644 index 0000000..3964e79 --- /dev/null +++ b/src/mcp-server/tools/__init__.py @@ -0,0 +1,22 @@ +# Tools package for GenomeHubs MCP server + +def register_all_tools(mcp): + """Register all tools with the given MCP server instance.""" + from . import ( # record + attributes, + process_attributes, + process_axis, + process_identifiers, + query_parser, + report, + utilities, + ) + + attributes.register_tools(mcp) + process_attributes.register_tools(mcp) + process_axis.register_tools(mcp) + process_identifiers.register_tools(mcp) + query_parser.register_tools(mcp) + # record.register_tools(mcp) + report.register_tools(mcp) + utilities.register_tools(mcp) diff --git a/src/mcp-server/tools/artifact_store.py b/src/mcp-server/tools/artifact_store.py new file mode 100644 index 0000000..5f285dd --- /dev/null +++ b/src/mcp-server/tools/artifact_store.py @@ -0,0 +1,108 @@ +"""In-memory artifact store for MCP tool outputs. + +This store keeps authoritative structured objects server-side and returns opaque +artifact tokens to tools. Tokens are HMAC-signed to prevent forgery. Entries +expire after a TTL (default 300 seconds). + +Usage: + from .artifact_store import store, retrieve + token = store(obj) + obj = retrieve(token) +""" +import hashlib +import hmac +import os +import time +import uuid +from contextlib import suppress +from threading import Lock +from typing import Any, Optional + +_SECRET = os.environ.get("GOAT_ARTIFACT_SECRET", None) +if _SECRET is None: + # Use a deterministic fallback in dev; prefer setting GOAT_ARTIFACT_SECRET in prod + _SECRET = "dev-secret-change-me" +_SECRET_BYTES = _SECRET.encode("utf-8") + +# Default TTL (seconds) +DEFAULT_TTL = int(os.environ.get("GOAT_ARTIFACT_TTL_SECONDS", "300")) + +# In-memory store: uid -> {data, created, ttl} +_STORE: dict[str, dict[str, Any]] = {} +_LOCK = Lock() + + +def _sign(uid: str) -> str: + return hmac.new(_SECRET_BYTES, uid.encode("utf-8"), hashlib.sha256).hexdigest() + + +def _make_token(uid: str) -> str: + return f"{uid}:{_sign(uid)}" + + +def _verify_token(token: str) -> Optional[str]: + try: + uid, sig = token.split(":", 1) + except ValueError: + return None + expected = _sign(uid) + return uid if hmac.compare_digest(expected, sig) else None + + +def store(obj: Any, ttl: int | None = None) -> str: + """Store an object and return an opaque artifact token. + + Args: + obj: JSON-serializable object to store + ttl: optional TTL in seconds (defaults to DEFAULT_TTL) + Returns: + token string for later retrieval + """ + uid = str(uuid.uuid4()) + entry = {"data": obj, "created": time.time(), "ttl": ttl or DEFAULT_TTL} + with _LOCK: + _STORE[uid] = entry + return _make_token(uid) + + +def retrieve(token: str, consume: bool = False) -> Optional[Any]: + """Retrieve a stored object by token. + + Args: + token: the token returned by `store` + consume: if True, remove the entry after retrieval + Returns: + The stored object or None if not found/expired/invalid + """ + uid = _verify_token(token) + if not uid: + return None + with _LOCK: + entry = _STORE.get(uid) + if not entry: + return None + if time.time() - entry["created"] > entry["ttl"]: + # expired + with suppress(KeyError): + del _STORE[uid] + return None + data = entry["data"] + if consume: + with suppress(KeyError): + del _STORE[uid] + return data + + +def cleanup() -> None: + """Remove expired entries from the store.""" + now = time.time() + with _LOCK: + for uid in list(_STORE.keys()): + if now - _STORE[uid]["created"] > _STORE[uid]["ttl"]: + del _STORE[uid] + + +def stats() -> dict[str, Any]: + """Return simple stats about the store.""" + with _LOCK: + return {"count": len(_STORE)} diff --git a/src/mcp-server/tools/attribute_guide.py b/src/mcp-server/tools/attribute_guide.py new file mode 100644 index 0000000..30c7725 --- /dev/null +++ b/src/mcp-server/tools/attribute_guide.py @@ -0,0 +1,115 @@ +"""Guidance tool to help LLMs choose the correct attribute type.""" + +import time + +from ..logging_config import get_logger, log_tool_usage + +logger = get_logger(__name__) + + +async def get_attribute_guide(query_type: str) -> str: + """Get guidance on which attributes to use for CONFUSING query types. + + Scope: This tool handles four cases: target_list, sequencing_status, + protected_status, conservation_status. For other attributes use + `get_attribute_selection_context`. + + Args: + query_type: Type of query (one of: "target_list", "sequencing_status", + "protected_status", "conservation_status") + + Returns: + Formatted guidance string for the given query type. + """ + start = time.time() + guidance = { + "target_list": """TARGET LIST ATTRIBUTES (which species are ON a list): + +Attribute name: long_list +Values: dtol, canbp, vgp, psyche, ... + +Use when query asks: +✓ "How many species are ON the DToL target list?" +✓ "Which species are targeted by VGP?" +✓ "Species on both DToL AND CANBP lists?" +✓ "Count of CANBP long list species" + +DO NOT use sequencing_status_dtol, sequencing_status_canbp, etc. +(Those are for sequencing progress, not list membership) +""", + "sequencing_status": """SEQUENCING STATUS ATTRIBUTES (progress of data generation): + +Attribute names: sequencing_status, sequencing_status_dtol, sequencing_status_canbp, etc. +Values: completed, in_progress, planned, ... + +Use when query asks: +✓ "How many DToL species have completed sequencing?" +✓ "Species with sequencing data available?" +✓ "Count of species in sequencing progress for CANBP" + +DO NOT use long_list (that's for target list membership, not progress) +""", + "protected_status": """PROTECTED STATUS ATTRIBUTES (legal/conservation protection): + +Attribute name: protected_status +Values: Yes, No, Protected, Unprotected, ... + +Use when query asks: +✓ "Which species have protected status?" +✓ "Count of protected species" +✓ "Unprotected species in group X?" +""", + "conservation_status": """CONSERVATION STATUS ATTRIBUTES (threat level): + +Attribute name: conservation_status +Values: Endangered, Vulnerable, Threatened, Least Concern, ... + +Use when query asks: +✓ "Which species are endangered?" +✓ "Count of threatened species" +✓ "Species with conservation concern?" +""", + } + + query_lower = query_type.lower().strip() + try: + if query_lower in guidance: + duration_ms = (time.time() - start) * 1000 + log_tool_usage( + tool_name="get_attribute_guide", + params={"query_type": query_type}, + duration_ms=duration_ms, + success=True, + result_summary={"provided": True}, + ) + return guidance[query_lower] + duration_ms = (time.time() - start) * 1000 + log_tool_usage( + tool_name="get_attribute_guide", + params={"query_type": query_type}, + duration_ms=duration_ms, + success=False, + error="unknown_query_type", + result_summary={"provided": False}, + ) + return f"Unknown query type: '{query_type}'\n\nValid types:\n- target_list\n- sequencing_status\n- protected_status\n- conservation_status\nCall get_attribute_guide with one of these types for detailed guidance." + except Exception as e: + duration_ms = (time.time() - start) * 1000 + log_tool_usage( + tool_name="get_attribute_guide", + params={"query_type": query_type}, + duration_ms=duration_ms, + success=False, + error=str(e), + exc=e, + ) + raise + + +def register_tools(mcp) -> None: + """Register attribute guide tool with the FastMCP instance. + + Args: + mcp: FastMCP instance to register tools with + """ + mcp.tool()(get_attribute_guide) diff --git a/src/mcp-server/tools/attributes.py b/src/mcp-server/tools/attributes.py new file mode 100644 index 0000000..3cfc15a --- /dev/null +++ b/src/mcp-server/tools/attributes.py @@ -0,0 +1,459 @@ +import re +import time +from typing import Any + +from ..config import DATASTORE_NAME +from ..logging_config import get_logger, log_tool_usage +from .helpers.fetch import fetch_valid_types +from .utilities import fetch_valid_ranks + +logger = get_logger(__name__) + + +async def get_valid_types(search_index: str = "taxon") -> dict[str, Any]: + f"""Fetch valid attribute types from {DATASTORE_NAME} API. + + Args: + search_index: Index type (default: taxon) + """ + return await fetch_valid_types(search_index) + + +async def get_attribute_info( + attribute: str, search_index: str = "taxon" +) -> str: + f"""Get metadata for a specific attribute in {DATASTORE_NAME}. + + ONLY use this to get detailed information about a single attribute, such + as its description, type, and possible values. If you are unsure if an attribute exists or + which attributes to use for filtering, use get_attribute_selection_context(). + + DO NOT use this tool to guess attribute names or validate multiple attributes at once. + + Returns: + Formatted markdown string with attribute metadata, or an error message if not found. + + Args: + attribute: Name of the attribute to get metadata for + search_index: Index type (default: taxon) + """ + start = time.time() + try: + fields = await fetch_valid_types(search_index) or {} + if attribute in fields: + processed = process_attribute(fields[attribute]) + formatted = format_processed_attribute(processed, "exact", 1, 1) + duration_ms = (time.time() - start) * 1000 + log_tool_usage( + tool_name="get_attribute_info", + params={"attribute": attribute, "search_index": search_index}, + duration_ms=duration_ms, + success=True, + result_summary={ + "found": True, + "processed_type": fields[attribute].get("processed_type"), + }, + ) + return formatted + + duration_ms = (time.time() - start) * 1000 + msg = f"Attribute '{attribute}' not found." + log_tool_usage( + tool_name="get_attribute_info", + params={"attribute": attribute, "search_index": search_index}, + duration_ms=duration_ms, + success=False, + error=msg, + ) + return msg + except Exception as e: + duration_ms = (time.time() - start) * 1000 + log_tool_usage( + tool_name="get_attribute_info", + params={"attribute": attribute, "search_index": search_index}, + duration_ms=duration_ms, + success=False, + error=str(e), + exc=e, + ) + raise + + +def extract_modifiers_and_operators(attribute: dict[str, Any]) -> dict[str, Any]: + """Extract modifiers from an attribute dict.""" + modifiers = ["missing"] + operators = ["=", "!=", "exists", "missing"] + mods = attribute.get("summary", []) + if isinstance(mods, str): + mods = [mods] + for mod in mods: + if mod == "primary": + continue + if mod == "enum": + operators.extend(["<", ">", "<=", ">="]) + continue + if mod == "list" and "enum" not in mods: + modifiers.append("length") + # operators.extend(["in", "not in"]) + else: + modifiers.append(mod) + if not attribute.get("processed_type", "").endswith("keyword"): + operators.extend(["<", ">", "<=", ">="]) + traverse_direction = attribute.get("traverse_direction") + if traverse_direction in {"up", "both", "down"}: + if traverse_direction in {"up", "both"}: + modifiers.append("descendant") + elif traverse_direction in {"down", "both"}: + modifiers.extend(("ancestral", "estimate")) + return modifiers, operators + + +def process_attribute(attribute: dict[str, Any]) -> dict[str, Any]: + """Process a single attribute dict to extract modifiers and operators.""" + modifiers, operators = extract_modifiers_and_operators(attribute) + description = attribute.get("description", "No description available.") + if long_description := attribute.get("long_description", ""): + description += f" {long_description}" + constraint = attribute.get("constraint", {}) + value_metadata = attribute.get("value_metadata", {}) + if value_metadata: + entries = [] + for key, value in value_metadata.items(): + if desc := value.get("description"): + # Remove any text in brackets from the description + desc = re.sub(r"\s*\(.*?\)", "", desc) + entries.append(f" {key}: {desc.strip()}") + value_metadata = entries + return { + "name": attribute.get("name", "unknown"), + "description": description, + "processed_type": attribute.get("processed_type", "unknown"), + "display_group": attribute.get("display_group", ""), + "unit": attribute.get("unit"), + "possible_values": ", ".join(constraint.get("enum", [])), + "minimum": constraint.get("min"), + "maximum": constraint.get("max"), + "value_metadata": value_metadata, + # "translations": attribute.get("translate", {}), + "valid_modifiers": ", ".join(modifiers), + "valid_operators": ", ".join(operators), + } + + +def format_processed_attribute( + processed_attribute: dict[str, Any], + match_type: str, + match_index: int, + match_count: int, + ) -> str: + """Format attribute dict into a readable string.""" + lines = [ + (f"Keyword match to {processed_attribute['name']} based on a {match_type} match " + f"at index {match_index}, with {match_count} matching words:"), + "", + f"Name: {processed_attribute['name']}", + "- Name Type: attribute", + f"- Description: {processed_attribute['description']}", + f"- Type: {processed_attribute['processed_type']}", + ] + if display_group := processed_attribute.get("display_group"): + lines.append(f"- Display Group: {display_group}") + if unit := processed_attribute.get("unit"): + lines.append(f"- Unit: {unit}") + if possible_values := processed_attribute.get("possible_values", ""): + lines.append(f"- Possible Values: {possible_values}") + if minimum := processed_attribute.get("minimum"): + lines.append(f"- Minimum: {minimum}") + if maximum := processed_attribute.get("maximum"): + lines.append(f"- Maximum: {maximum}") + if modifiers := processed_attribute.get("valid_modifiers", ""): + lines.append(f"- Valid Modifiers: {modifiers}") + if operators := processed_attribute.get("valid_operators", ""): + lines.append(f"- Valid Operators: {operators}") + if value_metadata := processed_attribute.get("value_metadata", []): + lines.append("- Value Metadata:") + lines.extend(iter(value_metadata)) + return "\n".join(lines) + + +def find_matches( + keyword_lower: str, + keyword_words: set[str], + name_search_text: str, +) -> None: + """Find matches for a keyword in attribute text.""" + match_type = None + match_index = -1 + match_count = 0 + # Check for complete phrase match first (higher priority) + if keyword_lower in name_search_text: + match_type = "whole phrase" + match_index = name_search_text.index(keyword_lower) + # If no phrase match, check if any individual words match + elif keyword_words and any(word in name_search_text for word in keyword_words if len(word) > 2): + match_type = "individual word" + match_index = min( + (name_search_text.index(word) for word in keyword_words if word in name_search_text), + default=-1 + ) + if match_type: + match_count = sum(word in name_search_text for word in keyword_words) + + return match_type, match_index, match_count + + +async def _get_attribute_context_internal( + keyword: str, search_index: str = "taxon" +) -> dict[str, Any]: + """Internal function to get attribute selection context. + + This is called by both the resource and the tool. + Returns a dict with keys: 'matches' (list of match dicts) and 'markdown' (formatted string). + """ + + # Split keyword into individual words for matching + keyword_lower = keyword.lower() + keyword_words = set(keyword_lower.replace("_", " ").split()) + + fields = await fetch_valid_types(search_index) + title_attributes = [] + title_processed: list[dict[str, Any]] = [] + value_attributes = [] + value_processed: list[dict[str, Any]] = [] + name_attributes = [] + rank_attributes = [] + attributes = [] + for name, field in fields.items(): + # Get searchable text fields + processed_attribute = process_attribute(field) + name_lower = name.lower() + description = processed_attribute.get("description", "").lower() + display_group = processed_attribute.get("display_group", "").lower() + possible_values = processed_attribute.get("possible_values", "").lower() + value_metadata = ", ".join(processed_attribute.get("value_metadata", [])).lower() + + # Create combined search text + name_search_text = f"{name_lower} {display_group} {description}" + value_search_text = f"{possible_values} {value_metadata}" + + name_match_type, name_match_index, name_match_count = find_matches( + keyword_lower, keyword_words, name_search_text + ) + if name_match_type: + title_attributes.append( + format_processed_attribute(processed_attribute, name_match_type, + name_match_index, name_match_count) + ) + title_processed.append({ + "type": "attribute", + "name": processed_attribute.get("name"), + "match_type": name_match_type, + "match_index": name_match_index, + "match_count": name_match_count, + "processed": processed_attribute, + }) + value_match_type, value_match_index, value_match_count = find_matches( + keyword_lower, keyword_words, value_search_text + ) + if value_match_type: + value_attributes.append( + format_processed_attribute(processed_attribute, value_match_type, + value_match_index, value_match_count) + ) + value_processed.append({ + "type": "attribute_value", + "name": processed_attribute.get("name"), + "match_type": value_match_type, + "match_index": value_match_index, + "match_count": value_match_count, + "processed": processed_attribute, + }) + + # Also check valid names + valid_names = { + "scientific name": "scientific_name", + "common name": "common_name", + "synonym": "synonym", + "tolid prefix": "tolid_prefix", + "tolid": "tolid_prefix", + "authority": "authority"} + if keyword_lower.replace("_", " ") in valid_names: + attr_info = [ + f"Name: {valid_names[keyword_lower.replace('_', ' ')]}\n" + "Name Type: name" + ] + name_attributes.append("\n".join(attr_info)) + + # Also check valid ranks + valid_ranks = await fetch_valid_ranks() + if keyword_lower in (rank.lower() for rank in valid_ranks): + attr_info = [f"Name: {keyword_lower}", "Name Type: rank"] + rank_attributes.append("\n".join(attr_info)) + + if not (title_attributes or value_attributes or name_attributes or rank_attributes): + markdown = ( + f"No attributes, names, or ranks found matching keyword '{keyword}'.\n\n" + "Try different keywords or use a descriptive phrase to expand your search." + ) + return {"matches": [], "markdown": markdown} + + if name_attributes: + attributes.extend( + ( + "=== Name Matches ===", + f"These can be used as name columns in {DATASTORE_NAME} tables.", + "The following name matches your keyword:", + ) + ) + attributes.extend(name_attributes) + if rank_attributes: + attributes.extend( + ( + "=== Rank Matches ===", + f"These can be used as rank columns in {DATASTORE_NAME} tables.", + "The following rank matches your keyword:", + ) + ) + attributes.extend(rank_attributes) + if title_attributes: + title_len = len(title_attributes) + title_count = f" {title_len}" if title_len > 1 else "" + plural = "s" if title_len > 1 else "" + match_plural = "" if title_len > 1 else "es" + attributes.extend( + ( + "=== Attribute Matches ===", + f"These can be used as attribute filters or fields in {DATASTORE_NAME} queries.", + f"The following{title_count} attribute{plural} match{match_plural} your keyword:", + ) + ) + attributes.extend(title_attributes) + if value_attributes: + value_len = len(value_attributes) + value_count = f" {value_len}" if value_len > 1 else "" + plural = "s" if value_len > 1 else "" + match_plural = "" if value_len > 1 else "es" + has_plural = "have" if value_len > 1 else "has a" + attributes.extend( + ( + "=== Attribute value Matches ===", + f"The keyword you provided matches possible values to be passed to these attribute " + f"filters in {DATASTORE_NAME} queries.", + (f"The following{value_count} attribute{plural} {has_plural} value{plural} " + f"that match{match_plural} your keyword:"), + ) + ) + attributes.extend(value_attributes) + + taxon_note = "" + if search_index == "taxon": + taxon_note = ( + "Note: If a user wants to know 'which species have ...', the LLM should choose an attribute " + "that DOES NOT support an \"ancestral\" modifier, if available, to avoid including ancestral data " + "in the results. Example: 'which species have assemblies?' -> use 'assembly_level' instead of " + "'assembly_span'.\n" + ) + + # Build markdown (preserve previous formatted output) + markdown = f"""{DATASTORE_NAME} Attribute Selection Context: + +Choose from the following attributes, names, and ranks to filter {DATASTORE_NAME} data based on your query. + +The following attributes, names, and ranks match the keyword '{keyword}': +{taxon_note} +{"\n".join(attributes)} +""" + + # Build structured matches list + matches: list[dict[str, Any]] = [] + matches.extend(title_processed) + matches.extend(value_processed) + # name_attributes are strings like 'Name: scientific_name\nName Type: name' + for na in name_attributes: + # attempt to parse the name line + first_line = na.splitlines()[0] + name_val = first_line.replace('Name: ', '').strip() if first_line.startswith('Name:') else na + matches.append({"type": "name", "name": name_val, "detail": na}) + for ra in rank_attributes: + first_line = ra.splitlines()[0] + name_val = first_line.replace('Name: ', '').strip() if first_line.startswith('Name:') else ra + matches.append({"type": "rank", "name": name_val, "detail": ra}) + + return {"matches": matches, "markdown": markdown} + + +async def get_attribute_selection_context( + keyword: str, + comparison: str | None = None, + search_index: str = "taxon" + ) -> str: + """Get context information for attribute selection. + + An LLM MUST use this to choose appropriate attributes to filter by + based on a user query. The LLM MUST always check whether an attribute + exists before using it in a query. + + The LLM must check the returned 'Name type' for each attribute to + determine whether it is an 'attribute', a 'name', or a 'rank'. + + THE LLM MUST NOT make assumptions about attribute names or types + without checking this tool first. + + THE LLM MUST use the information provided for each attribute + to understand how to use it correctly in a query. + + IMPORTANT: If you do not get results with a keyword search, try different + keywords or use a descriptive phrase to expand your search. + + + IMPORTANT: If the user wants to know about chromosome count, it is better to also + return chromosome number as this is more likely to be the required field. + + IMPORTANT: for questions about a project, bioproject is only the correct attribute + if the user specifically mentions bioproject or if the value begins with "PRJ". + + Args: + keyword: Keyword or phrase to guide attribute selection + comparison: Comparison context to guide attribute selection + search_index: Index type (default: taxon) + + Returns: + Formatted markdown string listing matching attributes, names, and ranks. + """ + start = time.time() + logger.info(f"get_attribute_selection_context called: keyword='{keyword}', " + f"comparison='{comparison}', search_index={search_index}") + try: + result = await _get_attribute_context_internal(keyword, search_index) + duration_ms = (time.time() - start) * 1000 + # Log tool usage with match count + log_tool_usage( + tool_name="get_attribute_selection_context", + params={"keyword": keyword, "comparison": comparison, "search_index": search_index}, + duration_ms=duration_ms, + success=True, + result_summary={"matches": len(result.get("matches", [])) if isinstance(result, dict) else 0}, + ) + return result["markdown"] + except Exception as e: + duration_ms = (time.time() - start) * 1000 + log_tool_usage( + tool_name="get_attribute_selection_context", + params={"keyword": keyword, "comparison": comparison, "search_index": search_index}, + duration_ms=duration_ms, + success=False, + error=str(e), + exc=e, + ) + raise + + +def register_tools(mcp) -> None: + """Register attribute tools with the FastMCP instance. + + Args: + mcp: FastMCP instance to register tools with + """ + # mcp.tool()(get_valid_types) + mcp.tool()(get_attribute_info) + mcp.tool()(get_attribute_selection_context) diff --git a/src/mcp-server/tools/helpers/__init__.py b/src/mcp-server/tools/helpers/__init__.py new file mode 100644 index 0000000..84ad3f7 --- /dev/null +++ b/src/mcp-server/tools/helpers/__init__.py @@ -0,0 +1,71 @@ +"""Helper functions and utilities for GenomeHubs MCP server tools. + +This module re-exports all utilities from submodules for backward compatibility. +Individual submodules can be imported directly for more focused imports. +""" + +# Re-export API utilities +from .api import make_api_request + +# Re-export formatting functions +from .formatting import ( + format_attribute_value, + format_count, + format_histogram_report, + format_lineage, + format_record, + format_result_table, + format_sources_report, + rank_description, +) + +# Re-export query building functions +from .query import ( + build_query_string, + format_attributes, + set_exclusions, + set_search_tips, +) + +# Re-export URL utilities +from .urls import update_query_string + +# Re-export validation functions +from .validation import ( + validate_attribute, + validate_attribute_name, + validate_attribute_names, + validate_attribute_value, + validate_attributes, + validate_operator, +) + +__all__ = [ + # API utilities + "make_api_request", + # Constants + "USER_AGENT", + # Formatting + "rank_description", + "format_count", + "format_lineage", + "format_attribute_value", + "format_record", + "format_result_table", + "format_sources_report", + "format_histogram_report", + # Query building + "build_query_string", + "format_attributes", + "set_exclusions", + "set_search_tips", + # URL utilities + "update_query_string", + # Validation + "validate_operator", + "validate_attribute_value", + "validate_attribute_name", + "validate_attribute", + "validate_attributes", + "validate_attribute_names", +] diff --git a/src/mcp-server/tools/helpers/api.py b/src/mcp-server/tools/helpers/api.py new file mode 100644 index 0000000..c23b3fe --- /dev/null +++ b/src/mcp-server/tools/helpers/api.py @@ -0,0 +1,34 @@ +"""API request utilities for GenomeHubs MCP server.""" + +from typing import Any + +import httpx + +from ...config import USER_AGENT +from ...logging_config import get_logger + +logger = get_logger(__name__) + + +async def make_api_request(url: str) -> dict[str, Any] | None: + """Make a request to the GenomeHubs API with proper error handling.""" + logger.info(f"API Request: {url}") + headers = {"User-Agent": USER_AGENT, "Accept": "application/json"} + async with httpx.AsyncClient(follow_redirects=True) as client: + try: + response = await client.get(url, headers=headers, timeout=30.0) + response.raise_for_status() + result = response.json() + logger.info(f"API Response: HTTP {response.status_code}, {len(str(result))} bytes") + return result + except httpx.HTTPStatusError as e: + logger.error(f"HTTP Error {e.response.status_code}: {url}") + logger.error(f"Response: {e.response.text[:500]}") + return None + except httpx.TimeoutException: + logger.error(f"Timeout after 30s: {url}") + return None + except Exception as e: + logger.error(f"Request failed: {url}") + logger.error(f"Error: {type(e).__name__}: {str(e)}") + return None diff --git a/src/mcp-server/tools/helpers/axis.py b/src/mcp-server/tools/helpers/axis.py new file mode 100644 index 0000000..becfd97 --- /dev/null +++ b/src/mcp-server/tools/helpers/axis.py @@ -0,0 +1,19 @@ +def axis_opts_to_string(axis_opts: dict, is_cat: bool) -> str: + """ + Convert axis options dict to string for query parameters. + + Args: + axis_opts: Dict containing axis options like min_value, max_value, bin_count, scale. + is_cat: Boolean indicating if the axis is categorical. + Returns: + String representation of axis options for query parameters. + """ + if is_cat and axis_opts.get("bin_count") is not None: + return ( + f"[{axis_opts['bin_count']}]" + ) + # Include all values in order: min, max, bin_count, scale (empty string for None) + return ";".join( + str(axis_opts.get(key)) if axis_opts.get(key) is not None else "" + for key in ["min_value", "max_value", "bin_count", "scale"] + ) diff --git a/src/mcp-server/tools/helpers/constants.py b/src/mcp-server/tools/helpers/constants.py new file mode 100644 index 0000000..47286c2 --- /dev/null +++ b/src/mcp-server/tools/helpers/constants.py @@ -0,0 +1,5 @@ +"""Constants for GenomeHubs MCP server.""" + +from typing import Any + +FIELD_CACHE: dict[str, Any] = {} diff --git a/src/mcp-server/tools/helpers/errors.py b/src/mcp-server/tools/helpers/errors.py new file mode 100644 index 0000000..39808dc --- /dev/null +++ b/src/mcp-server/tools/helpers/errors.py @@ -0,0 +1,147 @@ +from .validation import validate_attribute_value + +# helpers/errors.py +"""Centralized error messages for LLM-facing tools.""" + +import urllib.parse + +from ...config import ISSUE_TEMPLATE_UNHANDLED_ERROR, ISSUE_URL + + +class LLMError(Exception): + """Base class for LLM-facing errors with helpful messages.""" + pass + + +class ToolExecutionError(LLMError): + """Handled tool error that callers can distinguish from unexpected exceptions.""" + + def __init__(self, tool_name: str, message: str): + super().__init__(message) + self.tool_name = tool_name + self.message = message + + +# Artifact errors +def artifact_retrieval_error(artifact_type: str, tool_name: str) -> str: + """Reusable message for invalid artifact retrieval.""" + return f"""Invalid {artifact_type}_artifact_id provided to {tool_name}(). +Ensure you pass the EXACT key from process_{artifact_type}() +WITHOUT modification. + +Note that artifact keys are only valid for ~5 minutes after creation. +If expired, re-run process_{artifact_type}() to get a new key.""" + + +# Intent/operation errors +def invalid_intent_error(intent: str, valid_intents: set[str], tool_name: str) -> str: + """Reusable message for invalid intent.""" + return f"""Invalid intent '{intent}' provided to {tool_name}(). +Valid intents are: {', '.join(sorted(valid_intents))}.""" + + +def unsupported_intent_error(intent: str, tool_name: str, suggested_tool: str) -> str: + """Reusable message for intents that require a different tool.""" + return f"""Intent '{intent}' is not supported by {tool_name}(). +Use {suggested_tool}() instead.""" + + +# Parameter validation errors +def invalid_option_error(param_name: str, value: str, valid_options: set[str]) -> str: + """For axis_name, scale, show_other type parameters.""" + return f"""Invalid {param_name} '{value}'. +Valid options are: {', '.join(sorted(valid_options))}.""" + + +def invalid_attribute_error(attr_name: str, attr_type: str, valid_attrs: list[str] | set[str]) -> str: + """For names, ranks, fields validation.""" + return f"""Invalid {attr_type} '{attr_name}'. +Valid options are: {', '.join(sorted(valid_attrs))}.""" + + +def parsing_error(field_name: str, field_value: str, expected_format: str) -> str: + """For format/parsing errors in axis_definition, etc.""" + return f"""Could not parse {field_name}: '{field_value}'. +Expected format: {expected_format}.""" + + +def validation_error(tool_name: str, validation_msg: str) -> str: + """Wrapper for general validation errors from called functions.""" + return f"""Validation error in {tool_name}(): {validation_msg}""" + +# Value errors + + +def invalid_count_error(param_name: str, value: int, min_allowed: int = 1) -> str: + """For bin_count, page, size validation.""" + return f"""Invalid {param_name}: {value}. +{param_name} must be {min_allowed} or greater. +Examples: {param_name}={min_allowed}, {param_name}={min_allowed * 10}""" + + +def invalid_range_error( + field_name: str, + min_value: float | None, + max_value: float | None, + field_meta: dict +) -> str | None: + """Validate min/max range values against field metadata. + + Calls validate_attribute_value for numeric constraints. + Returns error message if invalid, None if valid. + """ + # Basic range logic errors + if min_value is not None and max_value is not None: + if min_value == max_value: + return f"""Invalid range: min_value and max_value cannot be equal ({min_value}). +To filter a single value, use process_attributes() instead.""" + if min_value > max_value: + return f"""Invalid range: min_value ({min_value}) cannot be greater than max_value ({max_value}). +Please check your values and try again.""" + + if field_meta.get("type") in {"integer", "float"}: + # Validate against field constraints using validate_attribute_value + try: + if min_value is not None: + validate_attribute_value(min_value, field_meta) + if max_value is not None: + validate_attribute_value(max_value, field_meta) + except ValueError as e: + return str(e) + + return None + + +def format_unhandled_error_for_issue(tool_name: str, error_message: str) -> dict: + """Format an unhandled error for user-facing response with issue reporting guidance. + + Returns a dict with: + - user_message: Safe, friendly message to return to the user + - issue_body: Pre-formatted issue body for bug tracking + - issue_url: URL to issues page + - issue_create_url: URL pre-filled with issue title and body (for convenient reporting) + """ + # Format the issue body using the configured template + issue_body = ISSUE_TEMPLATE_UNHANDLED_ERROR.format( + tool_name=tool_name, + error_message=error_message, + ) + + # Create a pre-filled GitHub issue URL + issue_title = f"Unhandled error in {tool_name}" + quoted_title = urllib.parse.quote(issue_title) + quoted_body = urllib.parse.quote(issue_body) + issue_create_url = f"{ISSUE_URL}/new?title={quoted_title}&body={quoted_body}" + + # User-facing message (doesn't expose raw error) + user_message = ( + f"An unexpected error occurred in {tool_name}. " + f"Please help us improve by reporting this issue." + ) + + return { + "user_message": user_message, + "issue_body": issue_body, + "issue_url": ISSUE_URL, + "issue_create_url": issue_create_url, + } diff --git a/src/mcp-server/tools/helpers/fetch.py b/src/mcp-server/tools/helpers/fetch.py new file mode 100644 index 0000000..a9bff73 --- /dev/null +++ b/src/mcp-server/tools/helpers/fetch.py @@ -0,0 +1,41 @@ +"""Constants for GenomeHubs MCP server.""" + +import time +from typing import Any + +from ...config import API_BASE, DATASTORE_NAME +from . import constants +from .api import make_api_request + +_FIELD_CACHE_TIMESTAMP: dict[str, float] = {} +_FIELD_CACHE_TTL_SECONDS = 24 * 60 * 60 # 24 hours + + +async def fetch_valid_types(search_index: str = "taxon") -> dict[str, Any]: + f"""Internal function to fetch valid attribute types from {DATASTORE_NAME} API. + + Uses in-memory cache with 24-hour TTL to avoid repeated API calls. + + Args: + search_index: Index type (default: taxon) + """ + global _FIELD_CACHE_TIMESTAMP + # Check if we have a valid cached response + current_time = time.time() + if search_index in constants.FIELD_CACHE and search_index in _FIELD_CACHE_TIMESTAMP: + cache_age = current_time - _FIELD_CACHE_TIMESTAMP[search_index] + if cache_age < _FIELD_CACHE_TTL_SECONDS: + return constants.FIELD_CACHE[search_index] + + # Cache miss or expired - fetch from API + url = f"{API_BASE}/resultFields?result={search_index}" + data = await make_api_request(url) + if not data or "fields" not in data: + return {} + + # Store in cache + fields = data["fields"] + constants.FIELD_CACHE[search_index] = fields + _FIELD_CACHE_TIMESTAMP[search_index] = current_time + + return fields diff --git a/src/mcp-server/tools/helpers/formatting.py b/src/mcp-server/tools/helpers/formatting.py new file mode 100644 index 0000000..ac3844d --- /dev/null +++ b/src/mcp-server/tools/helpers/formatting.py @@ -0,0 +1,442 @@ +"""Formatting utilities for GenomeHubs MCP server.""" + +from ...config import DATASTORE_FULL_DESCRIPTION, DATASTORE_NAME +from ...logging_config import get_logger + +logger = get_logger(__name__) + + +def rank_description(rank: str) -> str: + """Return a human-readable description for a given taxonomic rank.""" + return { + "subspecies": "subspecies", + "species": "species", + "genus": "genera", + "family": "families", + "order": "orders", + "class": "classes", + "phylum": "phyla", + "kingdom": "kingdoms", + "domain": "domains", + }.get(rank, f"{rank} level taxa") + + +def format_count(result: dict, taxa: list[str] | None = None, rank: str = "", url: str = "") -> str: + f"""Format count into a readable string with {DATASTORE_NAME} context.""" + count = result.get("count", 0) + + search_url = url.replace("/api/v2", "") + search_url = ( + search_url.replace("count?", "search?") + "&size=10&report=sources" + ) + return f""" +According to {DATASTORE_FULL_DESCRIPTION}, there are {count} {rank_description(rank)} \ +within {', '.join(taxa) if taxa else "all taxa"}. + +This count is based on taxa with sequence data from the NCBI taxonomy, +supplemented by additional metadata from the {DATASTORE_NAME} database. + +Explore these results in the {DATASTORE_NAME} web interface: +{search_url} +""" + + +def format_lineage(lineage: list[dict]) -> str: + """Format a taxonomic lineage into a readable string.""" + lineage_parts = [] + for taxon in reversed(lineage): + name = taxon.get("scientific_name", "Unknown") + rank = taxon.get("taxon_rank") + anc_str = name + if rank is not None: + anc_str += f" ({rank})" + lineage_parts.append(anc_str) + return " > ".join(lineage_parts) + + +def format_attribute_value(name: str, attribute: dict, truncate: bool = True) -> str: + """Format a single attribute value into a readable string.""" + value = attribute.get("value") + summary = attribute.get("summary") + min_value = attribute.get("min") + max_value = attribute.get("max") + aggregation_source = attribute.get("aggregation_source") + if isinstance(value, list): + attr_len = len(value) + if truncate and attr_len > 10: + last_item = value[-1] if attr_len > 0 else "" + value = ", ".join(str(v) for v in value[:10]) # Limit to first 10 values + more = attr_len - 10 + value += f", {last_item}" if (more == 1) else f", ... ({more} more)" + else: + value = ", ".join(str(v) for v in value) + attr_str = f"{name}: {value}" + if summary is not None: + attr_str += f" (Summary: {summary})" + if min_value is not None and max_value is not None and min_value != max_value: + attr_str += f" (Range: {min_value}-{max_value})" + if aggregation_source is not None: + attr_str += f" (Source: {aggregation_source})" + return attr_str + + +def format_record(record: dict, url: str, attributes: list[str] | None = None, truncate: bool = True) -> str: + f"""Format a {DATASTORE_NAME} record into a readable string.""" + lineage_str = format_lineage(record.get("lineage", [])) + + lines = [ + f"Scientific Name: {record.get('scientific_name', 'Unknown')}", + f"Taxon ID: {record.get('taxon_id', 'Unknown')}", + f"Rank: {record.get('taxon_rank', 'Unknown')}", + f"{DATASTORE_NAME} URL: {url.replace('/api/v2', '')}", + f"Lineage: {lineage_str}" + ] + + for attr_name, attr in record.get("attributes", {}).items(): + if attributes is None or attr_name in attributes: + lines.append(format_attribute_value(attr_name, attr, truncate=truncate)) + return "\n".join(lines) + + +def process_result_table( + results: list[dict], + search_fields: list[str], + search_names: list[str], + search_ranks: list[str], +) -> dict: + """Process a search results table ready for formatting. + + Args: + results: List of result records + search_fields: List of fields to include in the table + search_names: List of taxon name classes to include + search_ranks: List of taxonomic ranks to include + + Returns: + Dict with processed table data ready for formatting + {{ + "columns": [...], + "rows": [{{column_name: {{"value": processed_value, "raw_value": value, "flag": flag}}, ...}}, ...] + }} + """ + if not results: + return {"columns": [], "rows": []} + + columns = [] + + # Build rows + rows = [] + flags = 0 + for result in results: + record = result.get("result", {}) + row_values = {} + if not columns: + # Determine columns from first record + columns.extend(key for key in record.keys() if key.endswith("_id")) + if record.get("scientific_name") is not None: + columns.append("scientific_name") + if record.get("taxon_rank") is not None: + columns.append("taxon_rank") + if "fields" in record: + columns.extend(record["fields"].keys()) + if search_fields: + # Ensure requested fields are included + for field in search_fields: + field_name = field.get("name") + if field_name is None: + continue + if field_name not in columns: + columns.append(field_name) + if modifiers := field.get("modifier", []): + for mod in modifiers: + full_field = f"{field_name}:{mod}" + if full_field not in columns: + columns.append(full_field) + if search_names: + columns.extend(iter(search_names)) + if search_ranks: + columns.extend(iter(search_ranks)) + + fields = record.get("fields", {}) + names = record.get("names", {}) + ranks = record.get("ranks", {}) + for col in columns: + flag = False + # Handle different field types + value = None + raw_value = None + if record.get(col) is not None: + value = record.get(col) + raw_value = value + elif col in fields and fields[col] is not None: + raw_value = fields[col].get("value") + attr_value = raw_value or "N/A" + if "ancestor" in fields[col].get("aggregation_source", []): + flag = True + flags += 1 + # Format lists concisely + if isinstance(attr_value, list): + value = ( + f"{', '.join(str(v) for v in attr_value[:3])}... (+{len(attr_value) - 3})" + if len(attr_value) > 3 + else ", ".join(str(v) for v in attr_value) + ) + else: + value = str(attr_value) + elif col in search_names: + raw_value = names.get(col, {}).get("name",) + value = ", ".join(raw_value) if raw_value else "N/A" + elif col in search_ranks: + raw_value = ranks.get(col, {}).get("scientific_name") + value = raw_value or "N/A" + else: + value = "N/A" + + # Truncate long values + if len(str(value)) > 50: + value = f"{str(value)[:47]}..." + + row_values[col] = {"value": value, "raw_value": raw_value, "flag": flag} + + rows.append(row_values) + + return {"columns": columns, "rows": rows, "flags": flags} + + +def format_result_table( + processed_table: dict, + search_url: str, + format: str = "markdown", +) -> str: + f"""Format processed search results as a table with context. + + Args: + processed_table: Dict with processed table data from process_result_table() + search_url: {DATASTORE_NAME} web interface URL + format: Output format - "markdown" or "csv" + + Returns: + Formatted table + """ + columns = processed_table.get("columns", []) + rows = processed_table.get("rows", []) + flags = processed_table.get("flags", 0) + if not columns or not rows: + return "No results to display." + if format not in {"markdown", "csv"}: + return "Invalid format specified for result table." + if format == "markdown": + # Build header + header = "| " + " | ".join(columns) + " |" + separator = "| " + " | ".join(["---"] * len(columns)) + " |" + + # Build rows + row_strings = [] + for row in rows: + row_values = [] + for col in columns: + cell = row.get(col, {}) + value = cell.get("value", "N/A") + flag = cell.get("flag", False) + if flag: + value = f"{value} (Ancestral)" + row_values.append(str(value)) + row_strings.append("| " + " | ".join(row_values) + " |") + + table = "\n".join([header, separator] + row_strings) + flag_note = ( + "\n\n(Note: Values marked with '(Ancestral)' are inferred from ancestral data.)" + if flags > 0 + else "" + ) + return f"""Here are the top results: +{table}{flag_note} +Explore these results in the {DATASTORE_NAME} web interface: +{search_url} +""" + elif format == "csv": + import csv + import io + + output = io.StringIO() + writer = csv.writer(output) + writer.writerow(columns) + for row in rows: + row_values = [] + for col in columns: + cell = row.get(col, {}) + value = cell.get("raw_value", "N/A") + flag = cell.get("flag", False) + if flag: + value = f"{value} (Ancestral)" + row_values.append(str(value)) + writer.writerow(row_values) + return output.getvalue() + + +def format_sources_report(report_data: dict, search_url: str) -> str: + f"""Format a sources report for LLM interpretation and user presentation. + + Args: + report_data: The sources report from {DATASTORE_NAME} API + + Returns: + Formatted markdown string with source attribution + """ + if not report_data or "report" not in report_data: + return "No source information available." + + sources = report_data.get("report", {}).get("report", {}).get("sources", {}) + + if not sources: + return "No source information available." + + lines = ["## Sources\n"] + + for source_name, source_data in sources.items(): + # Extract basic fields + count = source_data.get("record_count", 0) + attributes = source_data.get("attributes", []) + url = source_data.get("source_url", "") + date = source_data.get("date_accessed", "") + + lines.extend((f"### {source_name}", f"**Records contributed:** {count:,}")) + # Attributes provided + if attributes: + attr_list = ", ".join(f"`{attr}`" for attr in attributes) + lines.append(f"**Attributes:** {attr_list}") + + # URL and date + if url: + lines.append(f"**URL:** {url}") + if date: + lines.append(f"**Last updated:** {date}") + + lines.append("") # Empty line between sources + + result = "\n".join(lines) + return f"""{result} + +{DATASTORE_NAME} URL: {search_url}""" + + +def format_histogram_report(report_data: dict, url: str, logger_instance=None) -> str: + f"""Format a histogram report for LLM interpretation and user presentation. + + Args: + report_data: The histogram report from {DATASTORE_NAME} API + logger_instance: Optional logger instance for debugging + + Returns: + Formatted markdown string with histogram summary and distribution + """ + if logger_instance is None: + logger_instance = logger + + if not report_data or "report" not in report_data: + logger_instance.warning("Histogram report missing 'report' key or empty.") + return "No histogram information available." + + # Accept either full API response or nested 'report' object + histogram_data = {} + if isinstance(report_data, dict): + histogram_data = report_data.get("report", {}).get("report", {}).get("histogram", {}) + if not histogram_data: + logger_instance.warning("Histogram report missing 'histogram' key or empty.") + return "No histogram information available." + + # In current API, structure is: + # histogram_data: { field, scale, stats, query, x, histograms: { buckets, allValues, ... } } + histograms = histogram_data.get("histograms", {}) + if not histograms: + logger_instance.warning("Histogram report missing 'histograms' sub-object.") + + # Extract key information from the correct levels + field = histogram_data.get("field", "unknown") + scale = histogram_data.get("scale", "linear") + query = histogram_data.get("query", "") + total_count = histogram_data.get("x", 0) + stats = histogram_data.get("stats", {}) + buckets = histograms.get("buckets", []) + counts = histograms.get("allValues", []) + + # Determine index label for totals + result_index = ( + histogram_data.get("xQuery", {}).get("result") + or report_data.get("report", {}).get("report", {}).get("histogram", {}).get("xQuery", {}).get("result") + ) + total_label = { + "taxon": "Total species", + "assembly": "Total assemblies", + "sample": "Total samples", + }.get(result_index, "Total records") + + # Build the summary + lines = [ + "## Histogram Summary", + f"- **{total_label}**: {total_count}", + f"- **Field**: `{field}`", + f"- **Scale**: {scale}", + f"- **Query**: `{query}`", + "", + "### Statistics", + ] + + # Add statistics if available + if stats: + try: + format_stats_and_buckets(stats, lines, buckets, counts) + except Exception as e: + logger_instance.error(f"Error formatting stats and buckets: {e}") + format_buckets(lines, buckets, counts) + else: + format_buckets(lines, buckets, counts) + result = "\n".join(lines) + return f"""{result} + +{DATASTORE_NAME} URL: {url}""" + + +def format_stats_and_buckets(stats, lines, buckets, counts): + min_val = stats.get("min", 0) + max_val = stats.get("max", 0) + avg_val = stats.get("avg", 0) + sum_val = stats.get("sum", 0) + + lines.extend([ + f"- **Min**: {min_val:,}", + f"- **Max**: {max_val:,}", + f"- **Average**: {avg_val:,.2f}", + f"- **Sum**: {sum_val:,}", + "", + ]) + + # Build distribution table + if buckets and counts and len(buckets) > 1: + lines.extend([ + "### Distribution (bucket ranges and counts)", + "", + "| Bucket Min | Bucket Max | Count |", + "|-------------------:|-------------------:|------:|", + ]) + + # Create rows for each bucket + for i in range(len(buckets) - 1): + bucket_min = buckets[i] + bucket_max = buckets[i + 1] + count = counts[i] if i < len(counts) else 0 + + lines.append(f"| {bucket_min:,.0f} | {bucket_max:,.0f} | {count} |") + + +def format_buckets(lines, buckets, counts): + lines.extend([ + "### Distribution (value counts)", + "", + "| Value | Count |", + "|------:|------:|", + ]) + for i, count in enumerate(counts): + value = buckets[i] if i < len(buckets) else "N/A" + lines.append(f"| {value} | {count} |") + lines.append("") diff --git a/src/mcp-server/tools/helpers/normalisation.py b/src/mcp-server/tools/helpers/normalisation.py new file mode 100644 index 0000000..2d836af --- /dev/null +++ b/src/mcp-server/tools/helpers/normalisation.py @@ -0,0 +1,75 @@ +"""Normalisation utilities for processor tools. + +This module provides common input normalisation functions used by +process_* tools to ensure consistent handling of inputs. +""" + +from typing import Callable + + +def normalise_to_list(value: list[str] | str | None) -> list[str]: + """Normalise input to a list of strings. + + Handles three cases: + 1. None -> empty list + 2. Single string -> list with one element + 3. Already a list -> return as-is + + Args: + value: Input value that may be None, a string, or a list of strings + + Returns: + A list of strings (may be empty) + + Examples: + >>> normalise_to_list(None) + [] + >>> normalise_to_list("Mammalia") + ['Mammalia'] + >>> normalise_to_list(["Felis", "Canis"]) + ['Felis', 'Canis'] + """ + if value is None: + return [] + elif isinstance(value, str): + return [value] + return value + + +def normalise_string_list( + value: list[str] | str | None, + strip: bool = True, + remove_empty: bool = True, + transform: Callable | None = None, +) -> list[str]: + """Normalise input to a list of strings with optional transformations. + + Args: + value: Input value that may be None, a string, or a list of strings + strip: Whether to strip whitespace from each string + remove_empty: Whether to remove empty strings after stripping + transform: Optional function to apply to each string (e.g., str.lower) + + Returns: + A normalised list of strings + + Examples: + >>> normalise_string_list([" Felis ", "", "Canis"]) + ['Felis', 'Canis'] + >>> normalise_string_list(" Mammalia ") + ['Mammalia'] + >>> normalise_string_list(["Felis", "Canis"], transform=str.upper) + ['FELIS', 'CANIS'] + """ + items = normalise_to_list(value) + + if strip: + items = [item.strip() for item in items] + + if transform: + items = [transform(item) for item in items] + + if remove_empty: + items = [item for item in items if item != ""] + + return items diff --git a/src/mcp-server/tools/helpers/processor_common.py b/src/mcp-server/tools/helpers/processor_common.py new file mode 100644 index 0000000..66aa071 --- /dev/null +++ b/src/mcp-server/tools/helpers/processor_common.py @@ -0,0 +1,36 @@ +"""Common utilities for processor tools. + +This module provides shared functionality for process_* tools like +process_identifiers, process_attributes, and process_axes. +""" + +from typing import Any + +from ...logging_config import get_logger +from ..artifact_store import store +from .validation import hash_dict + +logger = get_logger(__name__) + + +def finalise_and_store(data: dict[str, Any]) -> dict[str, str]: + """Finalise processor output by hashing, adding unique_id, and storing. + + This common pattern is used by all process_* tools: + 1. Hash the data dictionary to create a unique identifier + 2. Add the hash as 'unique_id' to the data + 3. Store the data in the artifact store + 4. Return the artifact token + + Args: + data: Dictionary containing processed parameters + + Returns: + Dictionary with single key 'artifact_id' containing the artifact token + """ + dict_hash = hash_dict(data) + data["unique_id"] = dict_hash + + # Store canonical result and return an artifact token + token = store(data) + return {"artifact_id": token} diff --git a/src/mcp-server/tools/helpers/query.py b/src/mcp-server/tools/helpers/query.py new file mode 100644 index 0000000..aaf118e --- /dev/null +++ b/src/mcp-server/tools/helpers/query.py @@ -0,0 +1,500 @@ +"""Query building utilities for GenomeHubs MCP server.""" + +from urllib.parse import quote + +from ...config import DATASTORE_NAME +from ...logging_config import get_logger + +logger = get_logger(__name__) + + +def convert_size_to_bytes(value: str | int | float) -> int | str: + """Convert human-readable size formats (e.g., '3G', '500M') to bytes. + + Supports: G (gigabytes), M (megabytes), K (kilobytes), B (bytes) + + Args: + value: Size string like "3G", "500M", "1K" or numeric value + + Returns: + Integer byte count or original value if not a size format + """ + if isinstance(value, (int, float)): + return int(value) + + if not isinstance(value, str): + return value + + value_upper = value.upper().strip() + + # Check for size suffixes + multipliers = {"G": 1_000_000_000, "M": 1_000_000, "K": 1_000, "B": 1} + + for suffix, multiplier in multipliers.items(): + if value_upper.endswith(suffix): + try: + numeric_part = float(value_upper[:-1]) + return int(numeric_part * multiplier) + except ValueError: + return value # If conversion fails, return original + + # No suffix found, try to parse as plain number + try: + return int(value) + except ValueError: + return value # Return original if not a number + + +def build_query_string( + taxa: list[str] | None = None, + rank: str | None = None, + attributes: list[dict] | None = None, + assemblies: list[str] | None = None, + samples: list[str] | None = None, + taxon_filter_type: str = "children", +) -> str: + f"""Build a {DATASTORE_NAME} query string from optional components. + + Args: + taxon: Optional taxonomic scope + rank: Optional rank filter + attributes: Optional attribute filters + """ + query_parts = [] + escaped_taxa = [] + + for taxon in taxa or []: + escaped_taxon = ( + taxon.replace('*', '%2A') + .replace(":", "%3A") + .replace("!", "%21") + .replace(",", "%2C") + .replace("[", "%5B") + .replace("]", "%5D") + ) + escaped_taxa.append(escaped_taxon) + if escaped_taxa: + taxon_filters = { + "children": "tax_tree", + "matching": "tax_name", + "lineage": "tax_lineage", + } + query_parts.append(f"{taxon_filters.get(taxon_filter_type, 'tax_tree')}%28{'%2C'.join(escaped_taxa)}%29") + + if rank: + query_parts.append(f"tax_rank%28{rank}%29") + + if assemblies: + escaped_assemblies = [ + assembly.replace('*', '%2A').replace(":", "%3A").replace("!", "%21") for assembly in assemblies + ] + query_parts.append(f"assembly_id%3D{'%2C'.join(escaped_assemblies)}") + + if samples: + escaped_samples = [ + sample.replace('*', '%2A').replace(":", "%3A").replace("!", "%21") for sample in samples + ] + query_parts.append(f"sample_id%3D{'%2C'.join(escaped_samples)}") + + if attributes: + if attr_string := format_attributes(attributes): + # Remove leading %20AND%20 + query_parts.append(attr_string.replace("%20AND%20", "", 1)) + + return "%20AND%20".join(query_parts) if query_parts else "" + + +async def build_search_params( + search_index: str, + taxa: list[str] | None = None, + taxon_filter_type: str = "children", + assemblies: list[str] | None = None, + samples: list[str] | None = None, + rank: str | None = None, + attributes: list[dict] | None = None, + fields: list[dict] | None = None, + names: list[str] | None = None, + ranks: list[str] | None = None, +) -> dict: + """Build base search params as a dict from validated parameters. + + Does NOT include pagination (size/offset), sorting, or report-specific params. + Returns a dict that can be extended with additional params before serialisation. + + Args: + search_index: "taxon", "assembly", or "sample" + taxa: List of taxon names/IDs + taxon_filter_type: "children", "matching", or "lineage" + assemblies: List of assembly accessions + samples: List of sample accessions + rank: Taxonomic rank + attributes: List of attribute filter dicts + fields: List of field dicts to return + names: List of taxon name classes + ranks: List of rank names to return + + Returns: + Dict with keys: query_string, result, exclusions, fields, names, ranks + Ready for additional report params or pagination/sorting. + """ + # Build base query string + query_string = build_query_string(taxa, rank, attributes, assemblies, samples, taxon_filter_type) + exclusions = set_exclusions(attributes) + + # Start with core params + params = { + "result": search_index, + "includeEstimates": "true", + "taxonomy": "ncbi", + "report": "sources", + } + + # Add query if present + if query_string: + params["query"] = query_string + + # Add exclusions (note: exclusions are already URL-encoded in set_exclusions) + if exclusions: + params["_exclusions_raw"] = exclusions # Mark for special handling during serialisation + + # Add fields + if fields: + parsed_fields = [] + for field in fields: + name = field.get("name") + if not name: + continue + parsed_fields.append(name) + if "modifier" in field: + parsed_fields.extend( + f"{name}:{mod}" + for mod in field.get("modifier", []) + if mod + in { + "min", + "max", + "mean", + "median", + "mode", + "length", + "direct", + "descendant", + "ancestral", + "missing", + } + ) + if parsed_fields: + params["fields"] = parsed_fields + + # Add names + if names: + params["names"] = names + + # Add ranks + if ranks: + params["ranks"] = ranks + + return params + + +def params_dict_to_url(base_url: str, params: dict) -> str: + """Convert a params dict to a URL query string. + + Handles special cases like URL-encoded exclusions and list values. + + Args: + base_url: Base URL (e.g., "https://api.genomehubs.org/v2/search") + params: Dict of parameters with special handling for: + - "_exclusions_raw": already URL-encoded exclusion string (not converted) + - list values: converted to comma-separated + - string values: URL-encoded + + Returns: + Full URL with query string + """ + query_parts = [] + + for key, value in params.items(): + # Skip special internal keys + if key == "_exclusions_raw": + continue + + if value is None: + continue + + # Handle list values (fields, names, ranks) + if isinstance(value, list): + # Use safe="%" to avoid double-encoding already-encoded values + value_str = "%2C".join(quote(str(v), safe="%") for v in value) + else: + # Use safe="%" to avoid double-encoding already-encoded values (e.g., query strings) + value_str = quote(str(value), safe="%") + + query_parts.append(f"{key}={value_str}") + + # Add exclusions if present (already URL-encoded) + if "_exclusions_raw" in params: + if exclusions := params["_exclusions_raw"]: + # Remove leading "&" if present + exclusions = exclusions.lstrip("&") + query_parts.append(exclusions) + + url = base_url + if query_parts: + url += "?" + "&".join(query_parts) + + return url + + +def build_user_facing_url(api_url: str, web_base: str = "") -> str: + """Convert an API URL to a user-facing web URL. + + Replaces /api/v2 with web base and converts endpoint if needed. + + Args: + api_url: API URL from search + web_base: Base URL for user-facing interface (default: remove /api/v2) + + Returns: + User-facing URL + """ + url = api_url.replace("/api/v2", web_base) + + return url.replace("count?", "search?") + + +def merge_params_dicts(base_params: dict, additional_params: dict) -> dict: + """Merge additional params into base params dict. + + Handles: + - Overwriting existing keys + - Extending list values (for fields, names, ranks) + - Preserving special keys like "_exclusions_raw" + + Args: + base_params: Base parameters dict + additional_params: Additional/override parameters + + Returns: + Merged dict + """ + merged = base_params.copy() + + for key, value in additional_params.items(): + if key in {"fields", "names", "ranks"}: + # Extend lists instead of replacing + if key in merged and isinstance(merged[key], list): + existing = merged[key] + new_values = value if isinstance(value, list) else [value] + # Add only new values not already in the list + merged[key] = existing + [v for v in new_values if v not in existing] + else: + merged[key] = value + else: + # Override other keys + merged[key] = value + + return merged + + +def format_attributes(attributes: list[dict]) -> str: + f"""Format a list of attribute filters into a {DATASTORE_NAME} query string.""" + formatted_attrs = [] + for attr in attributes: + name = attr.get("name") + operator = attr.get("operator", "=") + value = attr.get("value") + summary_modifier = attr.get("summary_modifier") + + if not name: + continue + + if summary_modifier: + name = f"{summary_modifier}%28{name}%29" + + if value is None: + formatted_attrs.append(f"{name}") + continue + + # Convert size formats (e.g., "3G" -> 3000000000) to bytes + if isinstance(value, str): + value_converted = convert_size_to_bytes(value) + value_str = str(value_converted) + elif isinstance(value, list): + value_str = "%2C".join(str(v) for v in value) + else: + value_str = str(value) + + formatted_attrs.append(f"{name}{quote(operator)}{value_str.replace(' ', '%20').replace("*", '%2A')}") + + if formatted_attrs: + return "%20AND%20" + "%20AND%20".join(formatted_attrs) + return "" + + +def set_exclusions(attributes: list[dict] | None) -> str: + """Determine exclusion filters based on attribute status. + + Args: + attributes: List of attribute filters + """ + exclude_statuses = {} + + if not attributes: + return "" + + for attr in attributes: + if "exclude" in attr: + for status in attr["exclude"]: + if f"exclude{status}" not in exclude_statuses: + exclude_statuses[f"exclude{status}"] = [] + exclude_statuses[f"exclude{status}"].append(attr["name"]) + + exclusion_str = "" + for key, values in exclude_statuses.items(): + for i, value in enumerate(list(set(values))): + exclusion_str += f"&{key}%5B{i}%5D={value}" + + if exclusion_str: + exclusion_str = f"&{exclusion_str}" + + return exclusion_str + + +def process_modifiers(attributes: list[dict] | None) -> list[dict]: + """Process modifiers into exclusions and summary statistics. + + Converts status-based modifiers (missing, direct, ancestral, descendant, estimated) + into exclusion filters, while keeping summary modifiers (min, max, median, length, optional) + as a field in the attribute dict for use in query string formatting. + + Supports both single modifier (string) and multiple modifiers (list). + Example: {"name": "genome_size", "modifier": ["min", "direct"]} + + Args: + attributes: List of attribute filters with optional modifiers + + Returns: + List of processed attributes with: + - Status modifiers converted to exclude lists + - Summary modifiers preserved in a "summary_modifier" field + """ + if not attributes: + return [] + + processed_attrs = [] + + for attr in attributes: + modifier = attr.get("modifier") + if not modifier: + processed_attrs.append(attr) + continue + + attr_copy = {k: v for k, v in attr.items() if k != "modifier"} + + # Handle both single modifier (string) and multiple (list) + modifiers = [modifier] if isinstance(modifier, str) else modifier + + # Separate status modifiers from summary modifiers + status_set = {"missing", "direct", "ancestral", "descendant", "estimated"} + status_modifiers = [m for m in modifiers if m in status_set] + summary_modifiers = [m for m in modifiers if m in {"min", "max", "median", "length", "optional"}] + + # Process status modifiers - convert first one to exclusion + if status_modifiers: + status_mod = status_modifiers[0] # Use first status modifier + if status_mod == "missing": + attr_copy["exclude"] = ["Direct", "Descendant"] + elif status_mod == "direct": + attr_copy["exclude"] = ["Ancestral", "Descendant", "Estimated", "Missing"] + elif status_mod == "ancestral": + attr_copy["exclude"] = ["Direct", "Descendant", "Estimated", "Missing"] + elif status_mod == "descendant": + attr_copy["exclude"] = ["Direct", "Ancestral", "Estimated", "Missing"] + elif status_mod == "estimated": + attr_copy["exclude"] = ["Direct", "Missing"] + if "exclude" in attr_copy and not isinstance(attr_copy["exclude"], list): + attr_copy["exclude"] = list(attr_copy["exclude"]) + + # Process summary modifiers - store first one + if summary_modifiers: + attr_copy["summary_modifier"] = summary_modifiers[0] # Use first summary modifier + + processed_attrs.append(attr_copy) + + logger.debug(f"Processed attributes with modifiers: {processed_attrs}") + + return processed_attrs + + +def set_search_tips(attributes: list[dict] | None, fields: list[dict] | None, intent: str | None) -> str: + """Generate search tips based on selected attributes. + + Args: + attributes: List of attribute filters + fields: List of attribute fields to return + intent: Search intent (e.g., "count", "table", "histogram") + + Returns: + String of search tips for the LLM + """ + tips = [] + if not attributes: + tips.append( + f"No specific attributes selected. You can ask about various attributes " + f"available in {DATASTORE_NAME}." + ) + + if intent == "table" and not fields: + tips.append( + "You have requested a table of results but have not specified any fields to include. " + "Consider selecting specific attributes to display in the table." + ) + + attr_names = {attr["name"]: attr for attr in attributes or []} + field_names = {} + if fields: + field_names = {field["name"]: field for field in fields} + for field in fields: + field_name = field.get("name") + if not field_name: + continue + field_modifier = field.get("modifier") + if not field_modifier: + continue + status_set = {"missing", "direct", "ancestral", "descendant", "estimated"} + field_modifiers = [field_modifier] if isinstance(field_modifier, str) else field_modifier + status_modifiers = [ + m for m in field_modifiers if m in status_set + ] + if ( + status_modifiers + and len(status_modifiers) == 1 + and ( + field_name not in attr_names + or "modifier" not in attr_names[field_name] + or status_modifiers[0] not in attr_names[field_name].get("modifier", []) + ) + ): + tips.append( + f"You have selected the field '{field_name}' with modifier(s) {status_modifiers}. " + f"Consider adding a corresponding attribute filter to refine your search results." + ) + if attr_names: + if missing_fields := [ + attr["name"] + for attr in attributes + if "name" in attr and attr["name"] not in field_names + ]: + tips.append( + f"The following attributes are selected but not included in the fields: {', '.join(missing_fields)}. " + "Consider adding them to the fields list to see their values in the results." + ) + + tips.append( + "When querying, consider using summary statistics like min, max, median, or length " + "to refine your results. Also, be aware of attribute statuses such as missing, direct, " + "ancestral, descendant, and estimated to filter your data effectively." + ) + + return "\n".join(tips) diff --git a/src/mcp-server/tools/helpers/search_index.py b/src/mcp-server/tools/helpers/search_index.py new file mode 100644 index 0000000..2f8ee7a --- /dev/null +++ b/src/mcp-server/tools/helpers/search_index.py @@ -0,0 +1,118 @@ +import re + +from ...logging_config import get_logger + +logger = get_logger(__name__) + + +def infer_index_from_query(query: str) -> dict[str, str]: + """Infer the most appropriate search index based on the user query. + + This function analyzes the user query to determine whether it is most + relevant to the "taxon", "assembly", or "sample" search index. It uses + keyword detection and contextual clues to make this inference. + + Args: + query: The original user query as a string. + + Returns: + dict with keys: search_index (one of "taxon", "assembly", "sample"), + reasoning (explanation of choice) + """ + query_lower = query.lower() + + # Look for what is being counted/listed + # Assembly index: explicitly counting assemblies + # Patterns for assembly index, including those with words between "how many"/"count"/etc. and "assemblies" + assembly_patterns = [ + "how many assemblies", + "count assemblies", + "list assemblies", + "which assemblies", + "show assemblies", + "assemblies for", + "assemblies with", + ] + + # Regex patterns to catch phrases like "how many ___ assemblies", "count the ___ assemblies", etc. + assembly_regexes = [ + r"how many\s+\w+(?:\s+\w+){0,5}?\s+assemblies", # up to 5 words between + r"count(?: the)?\s+\w+(?:\s+\w+){0,5}?\s+assemblies", + r"list(?: the)?\s+\w+(?:\s+\w+){0,5}?\s+assemblies", + r"which\s+\w+(?:\s+\w+){0,5}?\s+assemblies", + r"show(?: me)?(?: the)?\s+\w+(?:\s+\w+){0,5}?\s+assemblies", + ] + if any(pattern in query_lower for pattern in assembly_patterns): + return {"search_index": "assembly", "reasoning": "Query explicitly asks about counting or listing assemblies"} + if any(re.search(regex, query_lower) for regex in assembly_regexes): + return {"search_index": "assembly", "reasoning": "Query contains pattern indicating assembly-level counting"} + if any(pattern in query_lower for pattern in assembly_patterns): + return {"search_index": "assembly", "reasoning": "Query contains pattern indicating assembly-level counting"} + + # Sample index: explicitly counting samples + sample_patterns = [ + "how many samples", + "count samples", + "list samples", + "which samples", + "show samples", + "samples for", + "samples with", + ] + if any(pattern in query_lower for pattern in sample_patterns): + return {"search_index": "sample", "reasoning": "Query explicitly asks about counting or listing samples"} + # Regex patterns to catch phrases like "how many ___ samples", "count the ___ samples", etc. + sample_regexes = [ + r"how many\s+\w+(?:\s+\w+){0,5}?\s+samples", # up to 5 words between + r"count(?: the)?\s+\w+(?:\s+\w+){0,5}?\s+samples", + r"list(?: the)?\s+\w+(?:\s+\w+){0,5}?\s+samples", + r"which\s+\w+(?:\s+\w+){0,5}?\s+samples", + r"show(?: me)?(?: the)?\s+\w+(?:\s+\w+){0,5}?\s+samples", + ] + if any(re.search(regex, query_lower) for regex in sample_regexes): + return {"search_index": "sample", "reasoning": "Query contains pattern indicating sample-level counting"} + + return { + "search_index": "taxon", + "reasoning": ( + "Leave search_index setting to LLM/user judgement based on query and " + "intent, but default to taxon index if uncertain" + ), + } + + +def resolve_index( + search_index: str, + identifiers_output: dict, + attributes_output: dict, +) -> str: + """Determine the search index to use based on provided identifiers and attributes.""" + attr_index = attributes_output.get("search_index", {}) + if attr_index and isinstance(attr_index, dict): + attr_index = attr_index.get("search_index") + id_index = identifiers_output.get("search_index", {}) + if id_index and isinstance(id_index, dict): + id_index = id_index.get("search_index") + + if search_index is not None: + resolved_index = search_index + source = "arg" + elif attr_index: + resolved_index = attr_index + source = "attributes_artifact" + elif id_index: + resolved_index = id_index + source = "identifiers_artifact" + else: + resolved_index = "taxon" + source = "default" + + if attr_index and search_index and attr_index != search_index: + raise ValueError(f"search_index mismatch: attributes={attr_index}, submit_query={search_index}") + if id_index and search_index and id_index != search_index: + raise ValueError(f"search_index mismatch: identifiers={id_index}, submit_query={search_index}") + + search_index = resolved_index + logger.info("search_index resolved to '%s' from %s", search_index, source) + + return search_index diff --git a/src/mcp-server/tools/helpers/urls.py b/src/mcp-server/tools/helpers/urls.py new file mode 100644 index 0000000..156aab5 --- /dev/null +++ b/src/mcp-server/tools/helpers/urls.py @@ -0,0 +1,19 @@ +"""URL utilities for GenomeHubs MCP server.""" + + +def update_query_string(search_url: str, parameter: str, value: str) -> str: + """Update the search URL to include the desired report type.""" + if f"{parameter}=" in search_url: + base_url, query_params = search_url.split("?", 1) + params = query_params.split("&") + updated_params = [] + for param in params: + if param.startswith(f"{parameter}="): + updated_params.append(f"{parameter}={value}") + else: + updated_params.append(param) + updated_query = "&".join(updated_params) + return f"{base_url}?{updated_query}" + else: + separator = "&" if "?" in search_url else "?" + return f"{search_url}{separator}{parameter}={value}" diff --git a/src/mcp-server/tools/helpers/validation.py b/src/mcp-server/tools/helpers/validation.py new file mode 100644 index 0000000..f7e6858 --- /dev/null +++ b/src/mcp-server/tools/helpers/validation.py @@ -0,0 +1,495 @@ +"""Validation utilities for GenomeHubs MCP server.""" + +import hashlib +import json + +# import secrets +from typing import Any + +from ...config import DATASTORE_NAME +from ...logging_config import get_logger + +logger = get_logger(__name__) + +SALT_FOR_HASHING = "FIXED_FOR_DEBUGGING" # secrets.token_urlsafe(32) + + +def validate_modifier(modifier: str | list[str], meta: dict, search_index: str) -> str | list[str]: + """Validate modifier(s) against attribute metadata. + + Supports both a single modifier (string) or multiple modifiers (list). + If a list is provided, typically one status modifier + one summary modifier. + Also handles comma-separated strings like "min, direct" and auto-converts to list. + + Args: + modifier: The modifier (string, comma-separated string, or list of modifiers) + meta: Attribute metadata from FIELD_CACHE + search_index: The search index (taxon, assembly, sample) + + Returns: + The validated modifier(s) as string or list + + Raises: + ValueError: If any modifier is invalid for this attribute/index combination + """ + if modifier is None: + return None + + # Handle comma-separated string: "min, direct" → ["min", "direct"] + if isinstance(modifier, str) and "," in modifier: + modifier = [m.strip() for m in modifier.split(",") if m.strip()] + + # Handle both single modifier (string) and multiple modifiers (list) + modifiers_to_check = [modifier] if isinstance(modifier, str) else modifier + + # Determine valid modifiers from metadata + summary = meta.get("summary", []) + summary_mods = [summary] if isinstance(summary, str) else list(summary) + if "list" in summary_mods: + summary_mods.append("length") + if "primary" in summary_mods: + summary_mods.remove("primary") # Remove 'primary' if present + + valid_modifiers = {"missing", "direct", "ancestral", "descendant", "estimated"} | set(summary_mods) + for m in modifiers_to_check: + if m not in valid_modifiers: + raise ValueError(f"Invalid modifier '{m}'. Must be one of {valid_modifiers}.") + + # "missing" is always valid for any attribute + if "missing" in modifiers_to_check: + return modifier # Return as-is + + # Check status modifiers (direct, ancestral, descendant, estimated) + status_modifiers = {m for m in modifiers_to_check if m in {"direct", "ancestral", "descendant", "estimated"}} + for status_mod in status_modifiers: + if status_mod in {"ancestral", "estimated"}: + if search_index != "taxon": + raise ValueError( + f"Modifier '{status_mod}' is only valid for taxon index, not {search_index}." + ) + traverse_direction = meta.get("traverse_direction") + if status_mod == "ancestral": + if traverse_direction not in {"down", "both"}: + raise ValueError( + f"Modifier 'ancestral' not valid for '{meta.get('name', 'unknown')}': " + f"traverse_direction is {traverse_direction}, needs 'down' or 'both'." + ) + elif status_mod == "estimated": + if traverse_direction is None: + raise ValueError( + f"Modifier 'estimated' not valid for '{meta.get('name', 'unknown')}': " + f"traverse_direction is None." + ) + elif status_mod == "descendant": + if search_index != "taxon": + raise ValueError( + f"Modifier 'descendant' is only valid for taxon index, not {search_index}." + ) + traverse_direction = meta.get("traverse_direction") + if traverse_direction not in {"up", "both"}: + raise ValueError( + f"Modifier 'descendant' not valid for '{meta.get('name', 'unknown')}': " + f"traverse_direction is {traverse_direction}, needs 'up' or 'both'." + ) + elif status_mod == "direct": + if search_index != "taxon": + raise ValueError( + f"Modifier 'direct' is only valid for taxon index, not {search_index}." + ) + + # Check summary modifiers (min, max, median, length) + summary_modifiers = {m for m in modifiers_to_check if m in {"min", "max", "median", "length"}} + for summary_mod in summary_modifiers: + if summary_mod in {"min", "max", "median"}: + summary = meta.get("summary") + if summary is None or summary_mod not in summary: + raise ValueError( + f"Modifier '{summary_mod}' not valid for '{meta.get('name', 'unknown')}': " + f"this attribute does not support a {summary_mod} summary." + ) + elif summary_mod == "length": + processed_type = meta.get("processed_type", "") + if processed_type != "keyword": + raise ValueError( + f"Modifier 'length' is only valid for keyword (list) attributes, " + f"not '{meta.get('name', 'unknown')}' (type: {processed_type})." + ) + + return modifier + + +def validate_operator(operator: str, meta: dict) -> str: + f"""Validate and return a proper {DATASTORE_NAME} operator.""" + if operator is None or not isinstance(operator, str) or not operator.strip(): + return None + valid_operators = { + "=": "=", + "!=": "!=", + ">": ">", + "<": "<", + ">=": ">=", + "<=": "<=", + "==": "=", + "eq": "=", + "equals": "=", + "equal": "=", + "is": "=", + "in": "=", + "contains": "=", + "contains any": "=", + "!=": "!=", + "<>": "!=", + "not": "!=", + "neq": "!=", + "not equals": "!=", + "not equal": "!=", + "is not": "!=", + "not in": "!=", + "excludes": "!=", + "does not contain": "!=", + "doesn't contain": "!=", + "exists": "exists", + "status": "exists", + "missing": "missing", + "not exists": "missing", + "!exists": "missing", + } + if meta.get("processed_type") != "keyword": + valid_operators |= { + ">": ">", + "<": "<", + ">=": ">=", + "<=": "<=", + "greater than": ">", + "less than": "<", + "greater than or equal to": ">=", + "less than or equal to": "<=", + } + if operator.lower() not in valid_operators: + raise ValueError(f"Invalid operator '{operator}'. Must be one of {list(valid_operators.keys())}.") + return valid_operators[operator.lower()] + + +def validate_attribute_value(value: Any, meta: dict) -> str: + f"""Validate and format an attribute value for {DATASTORE_NAME} query. + + For numeric fields, also validates min/max constraints from metadata. + """ + processed_type = meta.get("processed_type", "") + constraint = meta.get("constraint", {}) + + # Keyword/enum validation + if processed_type.endswith("keyword") and constraint.get("enum"): + valid_values = [v.lower() for v in constraint["enum"]] + if isinstance(value, str): + values = [v.strip().lower() for v in value.split(",")] + elif isinstance(value, list): + values = [str(v).strip().lower() for v in value] + for v in values: + if v.lstrip("!") not in valid_values: + raise ValueError(f"Invalid value '{v}' for attribute. Must be one of {valid_values}.") + return "%2C".join(values) + + # Numeric field validation + if "number" in processed_type or "integer" in processed_type: + # Convert to numeric if string + if isinstance(value, str): + try: + numeric_value = float(value) if "." in value else int(value) + except ValueError as e: + raise ValueError( + f"Expected numeric value for {processed_type} field, got '{value}'." + ) from e + else: + numeric_value = value + + # Check against field constraints + if "minimum" in constraint and numeric_value < constraint["minimum"]: + raise ValueError( + f"Value {numeric_value} is below minimum constraint of {constraint['minimum']} " + f"for this field." + ) + + if "maximum" in constraint and numeric_value > constraint["maximum"]: + raise ValueError( + f"Value {numeric_value} exceeds maximum constraint of {constraint['maximum']} " + f"for this field." + ) + + return value + + +def validate_attribute_name(name: str, search_index: str, field_cache: dict) -> str: + f"""Validate attribute name for {DATASTORE_NAME} query.""" + if name is None or not isinstance(name, str) or not name.strip(): + raise ValueError("Attribute name must be a non-empty string.") + if name not in field_cache.get(search_index, {}): + raise ValueError(f"Attribute name '{name}' not found in {DATASTORE_NAME} for index '{search_index}'.") + return name + + +def validate_attribute(attr: dict, search_index: str, field_cache: dict) -> dict: + f"""Validate attribute name, operator, value, and modifier for {DATASTORE_NAME} query. + + Also preserves modifier field if present for backend processing. + Valid modifiers: "missing", "direct", "ancestral", "descendant", "estimated", "min", "max", "median", "length" + """ + name = attr.get("name") + if name is None: + raise ValueError("Attribute dictionary must have a 'name' field.") + parts = name.split(":") + name = parts[0] + modifier = attr.get("modifier") + if len(parts) > 1: + if modifier is not None: + raise ValueError(f"Attribute '{name}' has modifier specified both in name " + f"({parts[1]}) and modifier field ({modifier}).") + modifier = parts[1] + name = validate_attribute_name(name, search_index, field_cache) + meta = field_cache.get(search_index, {}).get(name, {}) + operator = attr.get("operator") + value = attr.get("value") + + # Check for invalid pattern: using >0 or >=0 to test for presence + if operator in {">", ">="} and isinstance(value, (int, float)) and value == 0: + raise ValueError( + f"Invalid filter pattern for '{name}': Using {operator}{value} to test for attribute " + f"presence is not supported. To filter for records with any value for this attribute, " + f"use only the attribute name without operator or value: {{\"name\": \"{name}\"}}, " + f"or use the 'exists' operator: {{\"name\": \"{name}\", \"operator\": \"exists\"}}." + ) + + if operator is not None: + if ( + (isinstance(value, str) and value in {"ancestral", "descendant", "estimated", "direct", "missing"}) + or ( + isinstance(value, list) + and all(v in {"ancestral", "descendant", "estimated", "direct", "missing"} for v in value) + ) + ): + modifier = value + operator = None + value = None + elif operator.lower() == "exists": + operator = None + value = None + elif operator.lower() == "missing": + operator = None + value = None + modifier = "missing" + else: + operator = validate_operator(operator, meta) + if value is not None: + value = validate_attribute_value(value, meta) + if operator is None: + operator = "=" + + # Validate modifier if present + if modifier is not None: + # Handle both single modifier (string) and multiple modifiers (list) + if isinstance(modifier, list): + modifier = [validate_modifier(m, meta, search_index) for m in modifier] + else: + modifier = validate_modifier(modifier, meta, search_index) + + validated = {**attr, "name": name, "operator": operator, "value": value} + # Preserve modifier if present + if modifier is not None: + validated["modifier"] = modifier + return validated + + +def validate_attributes( + attributes: list[dict] | None, + search_index: str, + field_cache: dict, + is_field: bool = False, +) -> list[dict] | None: + f"""Validate a list of attribute filters for {DATASTORE_NAME} query. + + Special validation: Detects if same attribute appears multiple times with + summary modifiers (min/max) on one and status modifiers (direct/ancestral) + on another, and raises error instructing to combine them in one dict. + """ + if not attributes: + return None + + # Check for split summary+status modifiers pattern + attr_by_name = {} + for attr in attributes: + name = attr.get("name") + if name not in attr_by_name: + attr_by_name[name] = [] + attr_by_name[name].append(attr) + + # If same attribute appears multiple times, check if modifiers should be combined + for name, attrs in attr_by_name.items(): + if len(attrs) > 1: + # Check each pair of attributes with same name + for i, attr1 in enumerate(attrs): + for attr2 in attrs[i+1:]: + mod1 = attr1.get("modifier") + mod2 = attr2.get("modifier") + + if mod1 is None or mod2 is None: + continue + + # Flatten to lists + mods1 = [mod1] if isinstance(mod1, str) else mod1 + mods2 = [mod2] if isinstance(mod2, str) else mod2 + + # Check if one has summary and other has status + summary_set = {"min", "max", "median", "length"} + status_set = {"missing", "direct", "ancestral", "descendant", "estimated"} + + summary1 = [m for m in mods1 if m in summary_set] + status1 = [m for m in mods1 if m in status_set] + summary2 = [m for m in mods2 if m in summary_set] + status2 = [m for m in mods2 if m in status_set] + + # Error only if: + # - One dict has ONLY summary modifier(s) and other has ONLY status modifier(s) + # - AND they have the same summary modifier (e.g., both "min") + # This catches: [{modifier: "min"}, {modifier: "direct"}] + # But allows: [{modifier: ["min", "direct"]}, {modifier: ["max", "direct"]}] + if summary1 and status2 and not status1 and not summary2: + if summary1 == summary2: # Same summary modifier split + raise ValueError( + f"ERROR: Attribute '{name}' appears twice with split modifiers.\n" + f"Found: summary modifier '{summary1[0]}' in one dict " + f"AND status modifier '{status2[0]}' in another.\n" + f"These MUST be combined in ONE dict:\n" + f" {{\n" + f" \"name\": \"{name}\",\n" + f" \"modifier\": [\"{summary1[0]}\", \"{status2[0]}\"]\n" + f" }}\n" + ) + elif summary2 and status1 and not status2 and not summary1: + if summary2 == summary1: # Same summary modifier split + raise ValueError( + f"ERROR: Attribute '{name}' appears twice with split modifiers.\n" + f"Found: summary modifier '{summary2[0]}' in one dict " + f"AND status modifier '{status1[0]}' in another.\n" + f"These MUST be combined in ONE dict:\n" + f" {{\n" + f" \"name\": \"{name}\",\n" + f" \"modifier\": [\"{summary2[0]}\", \"{status1[0]}\"]\n" + f" }}\n" + ) + + # Validate each attribute + validated_attrs = [] + for attr in attributes: + if is_field and "value" not in attr and "operator" not in attr: + attr_name = attr.get("name") + if attr_name is not None: + if attr_name.endswith("_id") or attr_name in {"scientific_name", "taxon_rank"}: + continue + if attr_name.endswith("_name") and search_index == "taxon": + continue + validated_attr = validate_attribute(attr, search_index, field_cache) + validated_attrs.append(validated_attr) + return validated_attrs + + +def validate_attribute_names( + names: list[str] | None, + search_index: str, + field_cache: dict, +) -> list[str] | None: + f"""Validate a list of attribute names for {DATASTORE_NAME} query.""" + if not names: + return None + validated_names = [] + other_names = [] + for name in names: + try: + validated_name = validate_attribute_name(name, search_index, field_cache) + validated_names.append(validated_name) + except ValueError: + if name.endswith("_id") or name in {"scientific_name", "taxon_rank"}: + other_names.append(name) + if name.endswith("_name") and search_index == "taxon": + other_names.append(name) + validated_names.extend(other_names) + return validated_names or None + + +def hash_dict(input_dict: dict) -> str: + """Generate a short, consistent hash for a dictionary. + + Args: + input_dict: Dictionary to hash + + Returns: + A short hexadecimal hash string representing the input dictionary. + """ + dict_str = json.dumps(input_dict, sort_keys=True) + salted_str = SALT_FOR_HASHING + dict_str + hash_obj = hashlib.sha256(salted_str.encode("utf-8")) + # Return only the first 8 characters for shortness + return hash_obj.hexdigest()[:8] + + +def validate_dict(input_dict: Any) -> bool: + """Check if input is a valid non-empty dictionary. + + Args: + input_dict: Input to check + Returns: + True if input is a valid dictionary, False otherwise. + """ + if not isinstance(input_dict, dict) or not input_dict: + return False + hash_str = input_dict.pop("unique_id", None) + if hash_str is None or not isinstance(hash_str, str) or len(hash_str) < 8: + return False + expected_hash = hash_dict(input_dict) + return hash_str == expected_hash + + +async def set_search_index( + taxa: list[str] | None, + assemblies: list[str] | None, + samples: list[str] | None, + user_query: str +) -> None: + """Set the search index for validation purposes. + + Args: + taxa: List of taxon names or IDs + assemblies: List of assembly accessions + samples: List of sample accessions + user_query: The original user question + """ + search_index = None + + if assemblies: + search_index = "assembly" + elif samples: + search_index = "sample" + elif taxa: + search_index = "taxon" + else: + # Try to infer from query + from ..utilities import choose_search_index + search_index = await choose_search_index(user_query) + logger.info(f"Inferred search_index from query: {search_index}") + return search_index + + +def validate_prefixes(prefixes: list, kind: str) -> bool: + """Check if a string starts with a valid prefix.""" + if not isinstance(prefixes, list): + prefixes = [prefixes] + for prefix in prefixes: + if not isinstance(prefix, str): + return False + if kind == "assemblies": + valid_prefixes = ["gca_", "gcf_", "gcs_", "gcn_", "gcp_", "gcr_", "gcs_", "wgs", "asm"] + elif kind == "samples": + valid_prefixes = ["srs", "srr", "srx", "sam", "ers", "erp", "erx", "drr", "drx", "samea", "sameg"] + else: + return True # No specific prefix requirements for taxon index + clean_string = prefix.replace("!", "").strip().lower() + return any(clean_string.startswith(valid_prefix) for valid_prefix in valid_prefixes) diff --git a/src/mcp-server/tools/process_attributes.py b/src/mcp-server/tools/process_attributes.py new file mode 100644 index 0000000..d037d33 --- /dev/null +++ b/src/mcp-server/tools/process_attributes.py @@ -0,0 +1,471 @@ +"""Process attributes tool for preparing attribute-related query parameters.""" + +import time +from typing import Any + +from ..config import DATASTORE_NAME +from ..logging_config import get_logger, log_tool_usage +from .helpers.constants import FIELD_CACHE +from .helpers.errors import invalid_attribute_error +from .helpers.fetch import fetch_valid_types +from .helpers.processor_common import finalise_and_store +from .helpers.search_index import infer_index_from_query +from .helpers.validation import validate_attributes +from .utilities import fetch_valid_ranks + +logger = get_logger(__name__) + +PROCESS_ATTRIBUTES_PROMPT = ( + f"""Process and validate attribute-related query parameters for {DATASTORE_NAME} API queries. + +Follow the procedure below to extract and format the attributes correctly. Ignore any other information, this +will be handled in other steps. + +Call choose_search_index() first when index is not explicitly clear from the user query. + +If successful, this tool returns an artifact token that can be passed to submit_query(). + +IMPORTANT: names passed to attributes, fields and sortby MUST be valid attribute names. +You can check attribute names using get_attribute_selection_context() if needed. + +REMEMBER: A user query may request multiple attributes, fields, names, and ranks. +An LLM MUST be decide if a name is an attribute filter, a field to return, a taxon name class, or a taxonomic rank +based on the context of the user query. + +IMPORTANT: names and ranks MUST NOT be passed as attributes or fields. + +REMEMBER: chaining attributes to see if any have 'exists' will join them with AND logic such that only records with + values for ALL specified attributes will be returned. If this is not the desired behaviour, pass such + attributes as fields instead to retrieve their values without filtering. + +DISAMBIGUATION: +- "found in" suggests a regional list attribute filter + +FOLLOW THESE STEPS EXACTLY: + +1. **attributes**: List of attribute filter dicts with 'name' and optional 'operator', 'value', 'modifier' + and 'type'. DO NOT include names or ranks here. + Examples: + - "genome_size < 3G" → [{{"name": "genome_size", "operator": "<", "value": "3000000000"}}] + - With modifiers: "minimum directly measured genome_size" + → [{{"name": "genome_size", "modifier": ["min", "direct"]}}] + + VALID OPERATORS: + - Comparison: =, !=, <, <=, >, >= + - Set membership: in, not in (value as comma-separated list) + - Existence: exists, missing (no value needed) + - Ordered keyword attributes can be searched using <, <=, >, >= operators. + * Example: "assembly_level is chromosomal or better" → + [{{"name": "assembly_level", "operator": ">=", "value": "chromosome"}}] + + VALID MODIFIERS: + - Summary: min, max, median, mean, sum, list + - Status: direct, ancestral, descendant, estimated, missing + - MODIFIERS RULE: + If query mentions BOTH summary (min/max/median) AND status (direct/ancestral): + → Combine in ONE dict: modifier: ["min", "direct"] + → NOT two separate dicts! + + VALID VALUE FORMATTING: + - Numeric values: integers or decimals (e.g., 3000000000 for 3G) + - String values: exact strings or patterns (e.g., "high", "medium", "low", "GCF_*") + - valid values depend on the datatype of the attribute being filtered. + * Use get_attribute_selection_context() to check. + + LOGICAL COMBINATIONS: + - Combine multiple attribute filters using AND logic by including multiple dicts in the list. + * Example: "genome_size < 3G AND assembly_level = 'complete genome'" → + [{{"name": "genome_size", "operator": "<", "value": "3000000000"}}, + {{"name": "assembly_level", "operator": "=", "value": "complete genome"}}] + * Example: "on the long_list for DTOL and CANBP" → + [{{"name": "long_list", "operator": "=", "value": ["DTOL"]}}, + {{"name": "long_list", "operator": "=", "value": ["CANBP"]}}] + - For OR logic, pass a list of values. + * example: "assembly_level in ('complete genome', 'chromosome')" → + [{{"name": "assembly_level", "operator": "in", "value": ["complete genome","chromosome"]}}] + +2. **fields**: + Attribute names that should be returned as columns. If a field used for filtering is also required as a field, + include it in both lists: + Examples: + - "Show genome_size and assembly_level" → [{{"name": "genome_size"}}, {{"name": "assembly_level"}}] + - "Give me minimum genome_size and directly measured assembly_level" → [{{"name": "genome_size", "modifier": + ["min"]}}, {{"name": "assembly_level", "modifier": ["direct"]}}] + +3. **names**: Taxon name classes to include in the response. + Can contain values from: scientific_name, common_name, synonym, tolid_prefix, authority. + Examples: + - "show scientific names ..." → ["scientific_name"] + - "return common name and synonym for ..." → ["common_name", "synonym"] + - "list the tolid prefix and authority for ..." → ["tolid_prefix", "other_name"] + - "common name contains 'bat'" → ["common_name:*bat*"] + - "synonym is 'Canis'" → ["synonym:Canis"] + - "authority ends with 'Linnaeus'" → ["authority:*Linnaeus"] + - "tolip_prefix does not start with ilLys" → ["tolid_prefix:!ilLys*"] + +4. **ranks**: Taxonomic ranks to include in the response. + These are ranks that the user request to be returned as fields. + There is no need to include a rank used for filtering unless it is also requested as a field. + IMPORTANT these MUST be valid rank names (Use get_valid_ranks() to check) for unusual ranks. + Always use singular forms. + Examples: + - "return the species ..." → ["species"] + - "get me the genus and family ..." → ["genus", "family"] + +5. **user_query**: Copy the original question EXACTLY. DO NOT MODIFY IT. + +EXAMPLE: +Query: "How many mammal species have minimum directly measured genome size < 3G?" + +Step 1: Attributes → [ + {{"name": "genome_size", "operator": "<", "value": "3000000000", + "modifier": ["min", "direct"]}}] +Step 2: Fields → [] +Step 3: Names → [] +Step 4: Ranks → [] +Step 5: user_query → Copy exactly + +THEN CALL: +process_attributes( + attributes=[{{"name": "genome_size", "operator": "<", "value": "3000000000", "modifier": ["min", "direct"]}}], + fields=[], + names=[], + ranks=[], + user_query="How many mammal species have minimum directly measured genome size < 3G?" +) + +DO NOT CALL unless you've completed all 5 steps above! +""") + + +async def process_attributes( + attributes: list[dict[str, Any]], + fields: list[dict[str, Any]], + user_query: str, + names: list[str] | None = None, + ranks: list[str] | None = None, + search_index: str | None = None, + trace_id: str | None = None, +) -> dict[str, Any]: + """Process and validate attribute-related query parameters. + + Args: + attributes: List of attribute filter dicts with 'name' and optional 'operator', 'value', and 'modifier'. + fields: List of attribute field dicts with 'name' and optional 'modifier'. + user_query: The original user question + names: Optional list of taxon name classes to include in the response. + ranks: Optional list of taxonomic ranks to include in the response. + search_index: The search index to use ("taxon", "assembly", or "sample") + + Returns: + A dictionary with processed attributes for {DATASTORE_NAME} API queries. +""" + + start = time.time() + + try: + if not search_index: + search_index_dict = infer_index_from_query(user_query) + search_index = search_index_dict["search_index"] + logger.info(f"Inferred search index '{search_index}' from user query: {search_index_dict['reasoning']}") + else: + search_index_dict = {"search_index": search_index, "reasoning": "Explicitly provided as argument"} + logger.info(f"Using provided search index '{search_index}' for processing attributes.") + + valid_names = {"scientific_name", "common_name", "synonym", "tolid_prefix", "authority"} + if names: + for name in names: + prefix = name.split(":", 1)[0] if ":" in name else name + if prefix not in valid_names: + raise ValueError(invalid_attribute_error(name, "name", valid_names)) + + if ranks: + valid_ranks = await fetch_valid_ranks() + for rank in ranks: + if rank not in valid_ranks: + raise ValueError(invalid_attribute_error(rank, "rank", valid_ranks)) + + filtered_fields = [] + names = names or [] + ranks = ranks or [] + for f in fields: + name = f.get("name") + if name and name not in names and name not in ranks: + filtered_fields.append(f) + fields = filtered_fields + + # Populate FIELD_CACHE before validation + await fetch_valid_types(search_index) + + try: + if attributes: + nameless_attributes = [] + for attr in attributes: + if attr.get("name", "") in valid_names: + if attr.get("value") is not None: + values = attr["value"] + if not isinstance(values, list): + values = [values] + values = [str(v).replace("* ", "*").replace(" *", "*") for v in values] + if attr.get("operator", "") in {"not in", "!="}: + # prepend '!' to each value for negation + values = [f"!{v}" for v in values] + names.append(f"{attr['name']}:{','.join(values)}") + else: + names.append(attr["name"]) + elif attr.get("name", "") in ranks: + ranks.append(attr["name"]) + else: + nameless_attributes.append(attr) + attributes = nameless_attributes + validate_attributes(attributes, search_index=search_index, field_cache=FIELD_CACHE) + if fields: + attr_fields = [ + f for f in (fields or []) + if f.get("name") not in valid_names and f.get("name") not in ranks + ] + validate_attributes(attr_fields, search_index=search_index, field_cache=FIELD_CACHE) + except ValueError as e: + raise ValueError( + f"""Validation error in process_attributes(): {e} + +Ensure attribute and field names are valid for the '{search_index}' index. +You can check valid attribute names using get_attribute_selection_context().""" + ) from e + + # Ensure fields is a list + fields = fields or [] + + # Build a map of existing fields by name to avoid duplicates and preserve order + fields_by_name: dict[str, dict[str, Any]] = {} + ordered_field_names: list[str] = [] + for f in fields: + name = f.get("name") + if not name: + continue + mods = f.get("modifier", []) + if isinstance(mods, str): + mods = [mods] + # preserve order and uniqueness + mods = list(dict.fromkeys(mods)) + fields_by_name[name] = {"name": name, "modifier": mods} + ordered_field_names.append(name) + + # Merge attributes into fields, adding modifiers without creating duplicates + for attr in attributes or []: + name = attr.get("name") + if not name: + continue + mods = attr.get("modifier", []) + if isinstance(mods, str): + mods = [mods] + + if name not in fields_by_name: + fields_by_name[name] = {"name": name, "modifier": []} + ordered_field_names.append(name) + + existing_mods = fields_by_name[name].setdefault("modifier", []) + for m in mods: + if m not in existing_mods: + existing_mods.append(m) + + # Rebuild the fields list preserving original order, then new fields + new_fields: list[dict[str, Any]] = [fields_by_name[name] for name in ordered_field_names] + + result: dict[str, Any] = { + "attributes": attributes, + "fields": new_fields, + "user_query": user_query, + "names": names or [], + "ranks": ranks or [], + "search_index": search_index_dict, + } + + stored_result = finalise_and_store(result) + + # Log successful call + duration_ms = (time.time() - start) * 1000 + log_tool_usage( + tool_name="process_attributes", + params={ + "search_index": search_index, + "has_names": bool(names), + "has_ranks": bool(ranks), + "num_names": len(names) if names else 0, + "num_ranks": len(ranks) if ranks else 0, + "num_attributes": len(attributes) if attributes else 0, + "num_fields": len(fields) if fields else 0, + "attribute_names": [attr.get("name") for attr in (attributes or [])], + "field_names": [f.get("name") for f in (fields or [])], + }, + duration_ms=duration_ms, + success=True, + result_summary={ + "artifact_id": result.get("artifact_id"), + "processed_attributes": len(result.get("attributes", [])), + "processed_fields": len(new_fields), + "total_names": len(names or []), + "total_ranks": len(ranks or []), + } + ) + + return {**result, "artifact_id": stored_result["artifact_id"]} + + except Exception as e: + duration_ms = (time.time() - start) * 1000 + logger.exception("Error in process_attributes") + log_tool_usage( + tool_name="process_attributes", + params={ + "search_index": search_index, + "has_names": bool(names), + "has_ranks": bool(ranks), + "num_attributes": len(attributes) if attributes else 0, + "num_fields": len(fields) if fields else 0, + "attribute_names": [attr.get("name") for attr in (attributes or [])], + "field_names": [f.get("name") for f in (fields or [])], + }, + duration_ms=duration_ms, + success=False, + error=str(e) + ) + return {"error": str(e), + "user_query": user_query or "unknown"} + + +process_attributes.__doc__ = PROCESS_ATTRIBUTES_PROMPT + + +def register_tools(mcp) -> None: + """Register process attributes tools with the FastMCP instance. + Args: + mcp: FastMCP instance to register tools with + """ + mcp.tool()(process_attributes) + + +if __name__ == "__main__": + import asyncio + + from .artifact_store import retrieve + + async def test_process_attributes(): + """Test examples for process_attributes.""" + print("=" * 60) + print("Testing process_attributes") + print("=" * 60) + + # Test 1: Basic attribute filter + print("\n[Test 1] Basic attribute filter") + result1 = await process_attributes( + user_query="Species with genome_size < 3000000000", + attributes=[{"name": "genome_size", "operator": "<", "value": "3000000000"}], + fields=[] + ) + print(f" Artifact ID: {result1['artifact_id']}") + data1 = retrieve(result1['artifact_id']) + print(f" Attributes: {data1['attributes']}") + print(f" Fields: {data1['fields']}") + + # Test 2: Attributes with modifiers + print("\n[Test 2] Attributes with modifiers") + result2 = await process_attributes( + user_query="Show minimum directly measured genome_size", + attributes=[{"name": "genome_size", "modifier": ["min", "direct"]}], + fields=[{"name": "genome_size", "modifier": ["min", "direct"]}] + ) + print(f" Artifact ID: {result2['artifact_id']}") + data2 = retrieve(result2['artifact_id']) + print(f" Attributes: {data2['attributes']}") + print(f" Fields (merged): {data2['fields']}") + + # Test 3: Multiple attributes (AND logic) + print("\n[Test 3] Multiple attributes (AND logic)") + result3 = await process_attributes( + user_query="genome_size < 3G AND assembly_level = complete genome", + attributes=[ + {"name": "genome_size", "operator": "<", "value": "3000000000"}, + {"name": "assembly_level", "operator": "=", "value": "complete genome"} + ], + fields=[] + ) + print(f" Artifact ID: {result3['artifact_id']}") + data3 = retrieve(result3['artifact_id']) + print(f" Attributes (AND): {data3['attributes']}") + + # Test 4: Names and ranks + print("\n[Test 4] Names and ranks") + result4 = await process_attributes( + user_query="Show scientific_name and common_name for genus and family", + attributes=[], + fields=[], + names=["scientific_name", "common_name"], + ranks=["genus", "family"] + ) + print(f" Artifact ID: {result4['artifact_id']}") + data4 = retrieve(result4['artifact_id']) + print(f" Names: {data4['names']}") + print(f" Ranks: {data4['ranks']}") + + # Test 5: Name with filter pattern + print("\n[Test 5] Name with filter pattern") + result5 = await process_attributes( + user_query="common_name contains 'bat'", + attributes=[{"name": "common_name", "value": "*bat*"}], + fields=[] + ) + print(f" Artifact ID: {result5['artifact_id']}") + data5 = retrieve(result5['artifact_id']) + print(f" Names: {data5['names']}") + print(f" Attributes: {data5['attributes']}") + + # Test 6: Field deduplication + print("\n[Test 6] Field deduplication and merging") + result6 = await process_attributes( + user_query="Test field merging", + attributes=[ + {"name": "genome_size", "modifier": ["min"]}, + {"name": "genome_size", "modifier": ["max"]} + ], + fields=[{"name": "genome_size", "modifier": ["median"]}] + ) + print(f" Artifact ID: {result6['artifact_id']}") + data6 = retrieve(result6['artifact_id']) + print(f" Fields (merged modifiers): {data6['fields']}") + print(" Expected: min, max, median all in one field") + + # Test 7: Existence check + print("\n[Test 7] Existence check") + result7 = await process_attributes( + user_query="Records that have genome_size", + attributes=[{"name": "genome_size", "operator": "exists"}], + fields=[] + ) + print(f" Artifact ID: {result7['artifact_id']}") + data7 = retrieve(result7['artifact_id']) + print(f" Attributes: {data7['attributes']}") + + # Test 8: Hash consistency + print("\n[Test 8] Hash consistency") + result8a = await process_attributes( + user_query="Test", + attributes=[{"name": "genome_size", "operator": "<", "value": "1000"}], + fields=[] + ) + result8b = await process_attributes( + user_query="Test", + attributes=[{"name": "genome_size", "operator": "<", "value": "1000"}], + fields=[] + ) + data8a = retrieve(result8a['artifact_id']) + data8b = retrieve(result8b['artifact_id']) + print(f" Hash A: {data8a['unique_id'][:16]}...") + print(f" Hash B: {data8b['unique_id'][:16]}...") + print(f" Hashes match: {data8a['unique_id'] == data8b['unique_id']}") + + print("\n" + "=" * 60) + print("✅ All tests completed successfully!") + print("=" * 60) + + asyncio.run(test_process_attributes()) + asyncio.run(test_process_attributes()) diff --git a/src/mcp-server/tools/process_axis.py b/src/mcp-server/tools/process_axis.py new file mode 100644 index 0000000..5d9bed3 --- /dev/null +++ b/src/mcp-server/tools/process_axis.py @@ -0,0 +1,398 @@ +"""Process axis tool for preparing simple axis definitions for report visualisations.""" + +import time +from typing import Any + +from ..config import DATASTORE_NAME +from ..logging_config import get_logger, log_tool_usage +from .helpers.constants import FIELD_CACHE +from .helpers.errors import ( + invalid_attribute_error, + invalid_count_error, + invalid_option_error, + invalid_range_error, + parsing_error, +) +from .helpers.fetch import fetch_valid_types +from .helpers.processor_common import finalise_and_store +from .helpers.validation import validate_attribute_name +from .utilities import fetch_valid_ranks + +logger = get_logger(__name__) + +PROCESS_AXIS_PROMPT = ( + f"""Process and validate simple axis definitions for {DATASTORE_NAME} report visualisations. + +This tool handles SIMPLE axis definitions: field names, ranks, or fields with modifiers. +For COMPLEX axes (with operators, value filters, or identifier constraints), use process_axis_complex() instead. + +If successful, this tool returns the processed axis payload and an artifact token (dict with `artifact_id`) that can +be passed to `get_report()`. + +WHEN TO USE THIS TOOL: +- Axis is a field name: "genome_size", "assembly_level" +- Axis is a rank name: "phylum", "genus", "family" +- Axis is a field with modifiers: "minimum genome_size", "directly measured chromosome_number" + +WHEN TO USE process_axis_complex() INSTEAD: +- Axis has operators/filters: "genome_size > 3G", "assembly_level = chromosome" +- Axis has identifier constraints: "for Mammalia", "excluding Felis" +- Axis has complex attribute combinations + +FOLLOW THESE STEPS EXACTLY: + +1. **axis_name**: Which axis this definition applies to + Options: "x", "y", or "category" + Examples: + - Histogram x-axis: axis_name="x" + - Scatter plot axes: axis_name="x" (first call), axis_name="y" (second call) + - Tree data bars: axis_name="y" + - Grouping/category: axis_name="category" + +2. **axis_definition**: The field or rank name, optionally with modifiers + Format: "[modifier] field_name" or "rank_name" + Examples: + - Simple field: "genome_size" + - With modifier: "minimum genome_size", "median chromosome_number" + - Multiple modifiers: "minimum directly measured genome_size" + - Rank: "phylum", "genus", "family" + + VALID MODIFIERS: + - Summary: min, max, median, mean, sum, list + - Status: direct, ancestral, descendant, estimated, missing + +3. **bin_count**: Number of bins/categories to display (optional) + - For numeric axes: groups values into N bins (e.g., 20 bins for genome size) + - For category axes: limits display to top N categories (e.g., 10 most common phyla) + - For keyword axes: limits results to N groups + Examples: 10, 20, 50 + If specified, must be > 0. If not specified, API will choose appropriate default. + APPLIES TO: histogram (x-axis), scatter (x/y axes), category grouping + +4. **show_other**: Whether to include an "Other" bin/category for low-frequency groups (optional, default: False) + Example: show_other=True + APPLIES TO: category axes and keyword axes in histogram and scatter reports. + +5. **scale**: Scale type for numeric/keyword axes (optional) + Options: "linear" (default), "sqrt", "log", "log2", "log10" + Examples: + - Linear scale: scale="linear" or omit + - Log scale: scale="log" + - Sqrt scale: scale="sqrt" + APPLIES TO: numeric and keyword-based axes in histogram, scatter, and tree reports. + NOT applicable for pure category/rank axes. + +6. **min_value**: Minimum value for numeric/keyword axis range (optional) + Example: min_value=1000000 (1Mb for genome_size) + APPLIES TO: numeric and keyword-based axes in histogram and scatter reports. + NOT applicable for category/rank axes. + +7. **max_value**: Maximum value for numeric/keyword axis range (optional) + Example: max_value=10000000000 (10Gb for genome_size) + APPLIES TO: numeric and keyword-based axes in histogram and scatter reports. + NOT applicable for category/rank axes. + +8. **user_query**: Copy the original question EXACTLY. DO NOT MODIFY IT. + +EXAMPLES: + +Example 1: Simple histogram +Query: "What is the distribution of genome sizes?" +→ process_axis( + axis_name="x", + axis_definition="genome_size", + user_query="What is the distribution of genome sizes?" + ) + +Example 2: Histogram with modifiers and options +Query: "Show minimum genome_size distribution with 20 bins on log scale" +→ process_axis( + axis_name="x", + axis_definition="minimum genome_size", + bin_count=20, + scale="log", + user_query="Show minimum genome_size distribution with 20 bins on log scale" + ) + +Example 3: Scatter plot (two calls) +Query: "How do genome size and chromosome number compare?" +→ Call 1: process_axis(axis_name="x", axis_definition="genome_size", ...) +→ Call 2: process_axis(axis_name="y", axis_definition="chromosome_number", ...) + +Example 4: Grouped by rank +Query: "Histogram of genome sizes grouped by phylum" +→ Call 1: process_axis(axis_name="x", axis_definition="genome_size", ...) +→ Call 2: process_axis(axis_name="category", axis_definition="phylum", ...) + +Example 5: Tree with data bars +Query: "Show taxonomy tree with genome sizes at leaves" +→ process_axis(axis_name="y", axis_definition="genome_size", ...) + +DO NOT CALL unless you've completed all steps above! +If the axis has operators or filters, use process_axis_complex() instead! +""" +) + + +async def process_axis( + axis_name: str, + axis_definition: str, + user_query: str, + bin_count: int | None = None, + show_other: bool = False, + scale: str | None = None, + min_value: float | None = None, + max_value: float | None = None, + search_index: str = "taxon", +) -> dict[str, Any]: + f"""Process and validate a simple axis definition. + + Args: + axis_name: Which axis this applies to ("x", "y", "z", or "category") + axis_definition: Field or rank name, optionally with modifiers (e.g., "minimum genome_size") + user_query: The original user question + bin_count: Optional number of bins/categories (for all axis types: numeric, category, keyword) + show_other: Whether to include an "Other" category for low-frequency groups (optional, default: False) + scale: Optional scale type ("linear", "sqrt", "log", "log2", "log10") - numeric/keyword axes only + min_value: Optional minimum value for axis range - numeric/keyword axes only + max_value: Optional maximum value for axis range - numeric/keyword axes only + search_index: The search index to use ("taxon", "assembly", or "sample") + + Returns: + A dictionary with the processed axis definition for {DATASTORE_NAME} API queries, plus: + - `artifact_id`: artifact token string to retrieve the stored axis via the artifact store + Example: {"axis_name": "x", "field_or_rank": "genome_size", ..., "artifact_id": "tok_..."} + """ + # Validate axis_name + valid_axis_names = {"x", "y", "z", "category"} + if axis_name not in valid_axis_names: + raise ValueError(invalid_option_error("axis_name", axis_name, valid_axis_names)) + + # Validate scale if provided + if scale: + valid_scales = {"linear", "sqrt", "log", "log2", "log10"} + if scale not in valid_scales: + raise ValueError(invalid_option_error("scale", scale, valid_scales)) + + # Parse axis_definition to extract field/rank and modifiers + # Format: "[modifier...] field_name" + parts = axis_definition.strip().split() + + # Known modifiers + valid_modifiers = { + "min", "minimum", + "max", "maximum", + "median", "mean", "sum", "list", + "direct", "directly", + "ancestral", "descendant", "estimated", "missing" + } + + modifiers = [] + field_or_rank = None + + # Extract modifiers from the start + for part in parts: + part_lower = part.lower() + if part_lower in valid_modifiers: + # Normalise modifier names + if part_lower == "minimum": + modifiers.append("min") + elif part_lower == "maximum": + modifiers.append("max") + elif part_lower == "directly": + modifiers.append("direct") + else: + modifiers.append(part_lower) + else: + # First non-modifier word is the field/rank + # Join remaining parts in case field name has underscores that got split + field_or_rank = "_".join(parts[parts.index(part):]) + break + + if not field_or_rank: + raise ValueError(parsing_error("axis_definition", axis_definition, "[modifier...] field_name")) + + # Check if it's a rank or a field + valid_ranks = await fetch_valid_ranks() + is_rank = field_or_rank in valid_ranks + + if not is_rank: + # Validate as a field + await fetch_valid_types(search_index) + try: + validate_attribute_name(field_or_rank, search_index, FIELD_CACHE) + except ValueError as e: + valid_ranks = await fetch_valid_ranks() + raise ValueError( + invalid_attribute_error(field_or_rank, "field or rank", valid_ranks) + ) from e + if min_value is not None or max_value is not None: + field_meta = FIELD_CACHE.get(search_index, {}).get(field_or_rank, {}) + if range_error := invalid_range_error( + field_or_rank, min_value, max_value, field_meta + ): + raise ValueError(range_error) + + if bin_count is not None and bin_count < 1: + raise ValueError(invalid_count_error("bin_count", bin_count, 1)) + + if show_other: + bin_count = f"{bin_count or 5}+" + + # Build the result + result: dict[str, Any] = { + "axis_name": axis_name, + "field_or_rank": field_or_rank, + "is_rank": is_rank, + "modifiers": modifiers, + "bin_count": bin_count, + "show_other": show_other, + "scale": scale, + "min_value": min_value, + "max_value": max_value, + "user_query": user_query, + } + + # Finalise and store the axis artifact, then log usage + start = time.time() + try: + stored = finalise_and_store(result) + duration_ms = (time.time() - start) * 1000 + try: + log_tool_usage( + tool_name="process_axis", + params={"axis_name": axis_name, "axis_definition": axis_definition}, + duration_ms=duration_ms, + success=True, + result_summary={ + "is_rank": is_rank, + "artifact_id": stored.get("artifact_id") if isinstance(stored, dict) else None, + }, + ) + except Exception: + logger.exception("Failed to log process_axis usage") + # Return the processed payload plus artifact_id (consistent with other process_* tools) + return {**result, "artifact_id": stored.get("artifact_id")} + except Exception as e: + duration_ms = (time.time() - start) * 1000 + try: + log_tool_usage( + tool_name="process_axis", + params={"axis_name": axis_name, "axis_definition": axis_definition}, + duration_ms=duration_ms, + success=False, + error=str(e), + exc=e, + ) + except Exception: + logger.exception("Failed to log process_axis error") + raise + + +process_axis.__doc__ = PROCESS_AXIS_PROMPT + + +def register_tools(mcp) -> None: + """Register process axis tools with the FastMCP instance. + + Args: + mcp: FastMCP instance to register tools with + """ + mcp.tool()(process_axis) + + +if __name__ == "__main__": + import asyncio + + from .artifact_store import retrieve + + async def test_process_axis(): + """Test examples for process_axis.""" + print("=" * 60) + print("Testing process_axis") + print("=" * 60) + + # Test 1: Simple field + print("\n[Test 1] Simple field (genome_size)") + result1 = await process_axis( + axis_name="x", + axis_definition="genome_size", + user_query="What is the distribution of genome sizes?" + ) + print(f" Artifact ID: {result1['artifact_id']}") + data1 = retrieve(result1['artifact_id']) + print(f" Field/Rank: {data1['field_or_rank']}") + print(f" Is Rank: {data1['is_rank']}") + print(f" Modifiers: {data1['modifiers']}") + + # Test 2: Field with single modifier + print("\n[Test 2] Field with single modifier (minimum genome_size)") + result2 = await process_axis( + axis_name="x", + axis_definition="minimum genome_size", + user_query="Show minimum genome sizes" + ) + print(f" Artifact ID: {result2['artifact_id']}") + data2 = retrieve(result2['artifact_id']) + print(f" Field/Rank: {data2['field_or_rank']}") + print(f" Modifiers: {data2['modifiers']}") + + # Test 3: Rank (category) + print("\n[Test 3] Rank as category (phylum)") + result3 = await process_axis( + axis_name="category", + axis_definition="phylum", + user_query="Group by phylum" + ) + print(f" Artifact ID: {result3['artifact_id']}") + data3 = retrieve(result3['artifact_id']) + print(f" Field/Rank: {data3['field_or_rank']}") + print(f" Is Rank: {data3['is_rank']}") + print(f" Modifiers: {data3['modifiers']}") + + # Test 4: With options (bin_count, scale) + print("\n[Test 4] With options (bin_count=20, scale=log)") + result4 = await process_axis( + axis_name="x", + axis_definition="genome_size", + bin_count=20, + scale="log", + user_query="Distribution with 20 bins on log scale" + ) + print(f" Artifact ID: {result4['artifact_id']}") + data4 = retrieve(result4['artifact_id']) + print(f" Field/Rank: {data4['field_or_rank']}") + print(f" Bin count: {data4['bin_count']}") + print(f" Scale: {data4['scale']}") + + # Test 5: With min/max range + print("\n[Test 5] With min/max range") + result5 = await process_axis( + axis_name="x", + axis_definition="genome_size", + min_value=1000000, + max_value=10000000000, + user_query="Genome sizes between 1Mb and 10Gb" + ) + print(f" Artifact ID: {result5['artifact_id']}") + data5 = retrieve(result5['artifact_id']) + print(f" Min value: {data5['min_value']}") + print(f" Max value: {data5['max_value']}") + + # Test 6: Y-axis for scatter + print("\n[Test 6] Y-axis for scatter plot") + result6 = await process_axis( + axis_name="y", + axis_definition="chromosome_number", + user_query="Compare genome size and chromosome number" + ) + print(f" Artifact ID: {result6['artifact_id']}") + data6 = retrieve(result6['artifact_id']) + print(f" Axis name: {data6['axis_name']}") + print(f" Field/Rank: {data6['field_or_rank']}") + + print("\n" + "=" * 60) + print("✅ All tests completed successfully!") + print("=" * 60) + + asyncio.run(test_process_axis()) diff --git a/src/mcp-server/tools/process_identifiers.py b/src/mcp-server/tools/process_identifiers.py new file mode 100644 index 0000000..ea39b71 --- /dev/null +++ b/src/mcp-server/tools/process_identifiers.py @@ -0,0 +1,313 @@ +"""Process identifiers tool for preparing identifier-related query parameters.""" + +import time +from typing import Any + +from ..config import DATASTORE_NAME +from ..logging_config import get_logger, log_tool_usage +from .helpers.normalisation import normalise_to_list +from .helpers.processor_common import finalise_and_store +from .helpers.search_index import infer_index_from_query +from .helpers.validation import validate_prefixes + +logger = get_logger(__name__) + +PROCESS_IDENTIFIERS_PROMPT = ( + f"""Process and validate identifier-related query parameters for """ + f"""{DATASTORE_NAME} API queries. + +Follow the procedure below to extract and format the identifiers correctly. Ignore any other information, this +will be handled in a subsequent step. + +If successful, this tool returns an artifact token that can be passed to submit_query(). + +IMPORTANT: values passed to taxa MUST be valid SCIENTIFIC NAMES or IDs. +You can check taxon names using check_taxon_exists() if needed. + +Partial identifiers are allowed for taxa, assemblies, and samples using a wildcard (*) at the beginning or end. + +A NOT filter can be applied to exclude specific taxa, assemblies, and samples by prefixing an exclamation mark (!). + +FOLLOW THESE STEPS EXACTLY: + +1. **Identify the ID TYPE and extract it**: + - TAXA (species/families/genera): Translate organism names + Examples: "mammal"→"Mammalia", "cat"→"Felis", "dog"→"Canis" + Pass as: taxa="Mammalia" OR as a list, e.g. taxa=["Felis", "Canis"] + For NOT filters, prefix with !, e.g. taxa=["Mammalia", "!Felis"] + If no taxa are mentioned, pass an empty list: taxa=[] + + - ASSEMBLIES (genome): Extract accession like "GCF_000002305.6" + Pass as: assemblies="GCF_000002305.6" OR as a list, e.g. assemblies=["GCF_000002305.6", "GCA_000001405.28"] + For NOT filters, prefix with !, e.g. assemblies=["GCF_000002305.6", "!GCA_000001405.28"] + If no assemblies are mentioned, pass an empty list: assemblies=[] + + - SAMPLES (DNA/RNA): Extract accession like "SRR1234567" + Pass as: samples="SRR1234567" OR as a list, e.g. samples=["SRR1234567", "SRR7654321"] + For NOT filters, prefix with !, e.g. samples=["SRR1234567", "!SRR7654321"] + If no samples are mentioned, pass an empty list: samples=[] + + If an identifier does not match any of the above types, consider that it may be an attribute that should be + processed with process_attributes() instead. + +2. **rank** (if applicable): The taxonomic rank + Examples: "species", "family", "genus", "order" + If no rank is mentioned, pass as: rank="" + +3. **taxon_filter_type**: Type of taxon filter to apply if taxa provided + Options: + - "children" (default): e.g. "families in Mammalia", "species under Felis" + - "matching": e.g. "matching Canis*", "for Nymphalidae" + - "lineage": e.g. "lineage of Mammalia", "parent taxa of Felis" + +4. **user_query**: Copy the original question EXACTLY. DO NOT MODIFY IT. + +EXAMPLE: +Query: "How many mammal species, excluding Felis have minimum directly measured genome size < 3G?" + +Step 1: ID TYPE → "mammal", "Felis" = taxa → ["Mammalia", "!Felis"] +Step 2: Rank → "species" +Step 3: taxon_filter_type → "children" +Step 4: user_query → Copy exactly +THEN CALL: +process_identifiers( + user_query="How many mammal species, excluding Felis have minimum directly measured genome size < 3G?", + taxa=["Mammalia", "!Felis"], + rank="species", + taxon_filter_type="children" +) + +DO NOT CALL unless you've completed all 4 steps above! +""") + + +async def process_identifiers( + user_query: str, + taxa: list[str] | None = None, + assemblies: list[str] | None = None, + samples: list[str] | None = None, + rank: str | None = None, + taxon_filter_type: str = "children", + search_index: str | None = None, + trace_id: str | None = None, +) -> dict[str, Any]: + f"""Process and validate identifier-related query parameters. + + Args: + user_query: The original user question + taxa: List of taxon names or IDs + assemblies: List of assembly accessions + samples: List of sample accessions + rank: Taxonomic rank if applicable + taxon_filter_type: Type of taxon filter to apply if taxa provided + Options: "children" (default), "matching", "lineage" + search_index: The search index to use ("taxon", "assembly", or "sample") + + Returns: + A dictionary with processed identifiers for {DATASTORE_NAME} API queries. +""" + start = time.time() + + try: + # Normalise all inputs to lists + taxa = normalise_to_list(taxa) + assemblies = normalise_to_list(assemblies) + samples = normalise_to_list(samples) + + if not search_index: + search_index_dict = infer_index_from_query(user_query) + search_index = search_index_dict["search_index"] + logger.info(f"Inferred search index '{search_index}' from user query: {search_index_dict['reasoning']}") + else: + search_index_dict = {"search_index": search_index, "reasoning": "Explicitly provided as argument"} + logger.info(f"Using provided search index '{search_index}' for processing attributes.") + + if taxa and not validate_prefixes(taxa, "taxa"): + raise ValueError("Taxa identifiers must be valid scientific names or IDs.") + if assemblies and not validate_prefixes(assemblies, "assemblies"): + raise ValueError("Assembly identifiers must be valid accessions like GCF_000002305.6.") + if samples and not validate_prefixes(samples, "samples"): + raise ValueError("Sample identifiers must be valid accessions like SRR1234567.") + + # Clean and encode taxa (handle exclamation marks for NOT filters) + taxa = [t.strip().replace("!", "%21") for t in taxa if t.strip() != ""] + + if search_index != "taxon" and rank is not None and rank not in {"", "subspecies", "species"}: + raise ValueError( + f"The rank '{rank}' is not valid for search index '{search_index}'. " + f"The {search_index} search_index only supports 'subspecies' and 'species' ranks.") + + result: dict[str, Any] = { + "taxa": taxa, + "assemblies": assemblies, + "samples": samples, + "rank": rank if rank is not None else "", + "taxon_filter_type": taxon_filter_type, + "user_query": user_query, + "search_index": search_index, + } + + stored_result = finalise_and_store(result) + log_tool_usage( + tool_name="process_identifiers", + params=result, + duration_ms=None, + success=True, + error=None, + result_summary={"artifact_id": stored_result["artifact_id"]} + ) + + # Log successful call + duration_ms = (time.time() - start) * 1000 + log_tool_usage( + tool_name="process_identifiers", + params={ + "search_index": search_index, + "taxon_filter_type": taxon_filter_type, + "has_taxa": bool(taxa), + "has_assemblies": bool(assemblies), + "has_samples": bool(samples), + "num_taxa": len(taxa) if taxa else 0, + "num_assemblies": len(assemblies) if assemblies else 0, + "num_samples": len(samples) if samples else 0, + }, + duration_ms=duration_ms, + success=True, + result_summary={ + "artifact_id": result.get("artifact_id"), + "num_identifiers": (len(taxa or []) + len(assemblies or []) + len(samples or [])), + } + ) + + return {**result, "artifact_id": stored_result["artifact_id"]} + + except Exception as e: + duration_ms = (time.time() - start) * 1000 + logger.exception("Error in process_identifiers") + log_tool_usage( + tool_name="process_identifiers", + params={ + "search_index": search_index, + "has_taxa": bool(taxa), + "has_assemblies": bool(assemblies), + "has_samples": bool(samples), + }, + duration_ms=duration_ms, + success=False, + error=str(e) + ) + return { + "error": str(e), + "user_query": user_query or "unknown", + } + + +process_identifiers.__doc__ = PROCESS_IDENTIFIERS_PROMPT + + +def register_tools(mcp) -> None: + """Register process identifiers tools with the FastMCP instance. + + Args: + mcp: FastMCP instance to register tools with + """ + mcp.tool()(process_identifiers) + + +if __name__ == "__main__": + import asyncio + + from .artifact_store import retrieve + + async def test_process_identifiers(): + """Test examples for process_identifiers.""" + print("=" * 60) + print("Testing process_identifiers") + print("=" * 60) + + # Test 1: Basic taxa query + print("\n[Test 1] Basic taxa query") + result1 = await process_identifiers( + user_query="How many mammal species are there?", + taxa=["Mammalia"], + rank="species", + taxon_filter_type="children" + ) + print(f" Artifact ID: {result1['artifact_id']}") + data1 = retrieve(result1['artifact_id']) + print(f" Taxa: {data1['taxa']}") + print(f" Rank: {data1['rank']}") + print(f" Filter type: {data1['taxon_filter_type']}") + print(f" Unique ID: {data1['unique_id'][:16]}...") + + # Test 2: Multiple taxa with NOT filter + print("\n[Test 2] Multiple taxa with NOT filter") + result2 = await process_identifiers( + user_query="Species in Mammalia excluding Felis", + taxa=["Mammalia", "!Felis"], + rank="species" + ) + print(f" Artifact ID: {result2['artifact_id']}") + data2 = retrieve(result2['artifact_id']) + print(f" Taxa (with NOT): {data2['taxa']}") + print(f" Note: '!' encoded as '%21': {data2['taxa'][1]}") + + # Test 3: String normalisation (single string instead of list) + print("\n[Test 3] String normalisation") + result3 = await process_identifiers( + user_query="Get assembly GCF_000002305.6", + assemblies="GCF_000002305.6" # String, not list + ) + print(f" Artifact ID: {result3['artifact_id']}") + data3 = retrieve(result3['artifact_id']) + print(f" Assemblies: {data3['assemblies']}") + print(f" Type: {type(data3['assemblies'])}") + + # Test 4: None normalisation + print("\n[Test 4] None normalisation") + result4 = await process_identifiers( + user_query="Count all species", + rank="species" + # taxa, assemblies, samples all None + ) + print(f" Artifact ID: {result4['artifact_id']}") + data4 = retrieve(result4['artifact_id']) + print(f" Taxa: {data4['taxa']} (empty list from None)") + print(f" Assemblies: {data4['assemblies']}") + print(f" Samples: {data4['samples']}") + + # Test 5: Wildcard and lineage filter + print("\n[Test 5] Wildcard and lineage filter") + result5 = await process_identifiers( + user_query="Lineage of Canis*", + taxa="Canis*", + taxon_filter_type="lineage" + ) + print(f" Artifact ID: {result5['artifact_id']}") + data5 = retrieve(result5['artifact_id']) + print(f" Taxa: {data5['taxa']}") + print(f" Filter type: {data5['taxon_filter_type']}") + + # Test 6: Hash consistency check + print("\n[Test 6] Hash consistency (same input = same hash)") + result6a = await process_identifiers( + user_query="Test", + taxa=["Mammalia"], + rank="species" + ) + result6b = await process_identifiers( + user_query="Test", + taxa=["Mammalia"], + rank="species" + ) + data6a = retrieve(result6a['artifact_id']) + data6b = retrieve(result6b['artifact_id']) + print(f" Hash A: {data6a['unique_id'][:16]}...") + print(f" Hash B: {data6b['unique_id'][:16]}...") + print(f" Hashes match: {data6a['unique_id'] == data6b['unique_id']}") + + print("\n" + "=" * 60) + print("✅ All tests completed successfully!") + print("=" * 60) + + asyncio.run(test_process_identifiers()) diff --git a/src/mcp-server/tools/query_parser.py b/src/mcp-server/tools/query_parser.py new file mode 100644 index 0000000..74b9a76 --- /dev/null +++ b/src/mcp-server/tools/query_parser.py @@ -0,0 +1,348 @@ +"""Query parser tool for extracting structured query components from user questions.""" + +import time +from typing import Any + +from ..config import DATASTORE_NAME +from ..logging_config import get_logger, log_tool_usage +from .artifact_store import retrieve +from .helpers.constants import FIELD_CACHE +from .helpers.errors import ( + ToolExecutionError, + artifact_retrieval_error, + format_unhandled_error_for_issue, + invalid_intent_error, + unsupported_intent_error, +) +from .helpers.fetch import fetch_valid_types +from .helpers.formatting import format_result_table, process_result_table +from .helpers.query import set_search_tips +from .helpers.search_index import resolve_index +from .helpers.validation import validate_attribute_name + +logger = get_logger(__name__) + + +SUBMIT_QUERY_PROMPT = f"""Execute a {DATASTORE_NAME} query by parsing artifact IDs into +structured parameters and returning results. + +⚠️ CRITICAL: Pass the EXACT artifact keys from process_identifiers() and process_attributes() + WITHOUT any modification. Do not reconstruct these objects yourself. + +PARAMETERS: + +1. **identifiers_artifact_id**: Output artifact ID from process_identifiers() + - Contains: taxa, filter type, rank (if detected), and the original user query + +2. **attributes_artifact_id**: Output artifact ID from process_attributes() + - Contains: attribute filters, fields to display, and field metadata + +3. **intent**: Result type (choose one) + - "count": Return count of matching records only + - "table": Return count + paginated results as raw data (single query - do NOT call again!) + - "sources": Return count + data sources information + - Note: If there is ambiguity between wanting a full list/table or some + representative examples, use intent table with a small page_size. + +4. **sort_by**: (for intent="table") Field name to sort results by (e.g., "genome_size") + +5. **sort_order**: (for intent="table") Sort direction - "asc" or "desc" + +6. **size**: (for intent="table") Number of results per page (default: 10) + + **Strategy:** Choose size based on query intent, not just result count. + - **Small (10-50)**: For exploratory/discovery queries where user wants a summary first + - **Large (100-1000)**: When user explicitly asks for a list, table, or file (use pagination if count > 1000) + - Maximum page size is 1000; recommended max for regular queries is 100 + +7. **page**: (for intent="table") Page number for pagination (default: 1) + +8. **response_format**: Format for optional pre-formatted output (determines response envelope content) + - "data" (default): Structured data with raw results + - "markdown": Adds `markdown` field with formatted table + - "csv": Adds `csv` field with CSV-formatted table + - "full": Includes all optional fields (markdown, csv, sources) + +RESPONSE ENVELOPE: + +All responses include (when applicable): +- `user_query`: Original query for context +- `search_tips`: Suggestions for refining or extending the query +- `count`: Total number of matching records +- `url`: Interactive search URL in {DATASTORE_NAME} web interface +- `search_index`: Index used ("taxon", "assembly", or "sample") + +For intent="table" responses, also includes: +- `results`: Raw result records (list of record dicts) + +For response_format="markdown" or "full": +- `markdown`: Pre-formatted markdown table of results + +For response_format="csv" or "full": +- `csv`: Pre-formatted CSV output of results + +For response_format="full" (future): +- `sources`: Data provenance and source information + +EXAMPLES: + +Count query: +``` +submit_query( + identifiers_artifact_id="aebc12345...", + attributes_artifact_id="fghd67890...", + intent="count" +) +``` +Returns: user_query, search_tips, count, url, search_index + +Table query with markdown formatting: +``` +submit_query( + identifiers_artifact_id="aebc12345...", + attributes_artifact_id="fghd67890...", + intent="table", + size=10, + page=1, + response_format="markdown" +) +``` +Returns: All table fields + pre-formatted markdown table + +""" + + +async def submit_query( + identifiers_artifact_id: str, + attributes_artifact_id: str, + intent: str, + search_index: str | None = None, + sort_by: str | None = None, + sort_order: str | None = None, + size: int | None = None, + page: int = 1, response_format: str = "data", +) -> dict[str, Any]: + """Execute a query with parsed identifiers and attributes, returning results based on intent. + + This function orchestrates the full query pipeline: validates inputs, delegates to + advanced_search for core execution, and formats results for the response format. + See SUBMIT_QUERY_PROMPT for detailed LLM instructions. + """ + + start = time.time() + + user_query = "unknown" + + result = "not reached" + + try: + + # If artifact tokens were provided (string), attempt to retrieve stored objects + if isinstance(identifiers_artifact_id, str): + identifiers_output = retrieve(identifiers_artifact_id) + if isinstance(attributes_artifact_id, str): + attributes_output = retrieve(attributes_artifact_id) + + if not isinstance(identifiers_output, dict): + raise ValueError(artifact_retrieval_error("identifiers", "submit_query")) + if not isinstance(attributes_output, dict): + raise ValueError(artifact_retrieval_error("attributes", "submit_query")) + + search_index = resolve_index(search_index, identifiers_output, attributes_output) + + if intent not in {"count", "sources", "table"}: + if intent in {"histogram", "scatter", "tree", "donut", "rainbow", "map"}: + raise ValueError(unsupported_intent_error(intent, "submit_query", "get_report()")) + else: + raise ValueError(invalid_intent_error(intent, {"count", "table", "sources"}, "submit_query")) + + taxa = identifiers_output.get("taxa", []) + assemblies = identifiers_output.get("assemblies", []) + samples = identifiers_output.get("samples", []) + taxon_filter_type = identifiers_output.get("taxon_filter_type", "children") + rank = identifiers_output.get("rank") + user_query = identifiers_output.get("user_query", "unknown") + + show_table = intent == "table" + show_sources = intent == "sources" + + if show_table: + if size is None: + size = 10 # Default size for tables + if sort_by: + try: + sort_by = sort_by.split(" ")[0].split(".")[0].split(":")[0] + await fetch_valid_types(search_index) + validate_attribute_name(sort_by, search_index, FIELD_CACHE) + except ValueError as ve: + raise ValueError( + f"""Error in sort_by attribute validation: {str(ve)}""" + ) from ve + + attributes = attributes_output.get("attributes", []) + fields = attributes_output.get("fields", []) + names = attributes_output.get("names", []) + ranks = attributes_output.get("ranks", []) + + # Import here to avoid circular dependency + from .search import advanced_search + + # Delegate to advanced_search with the parsed components + result = await advanced_search( + user_query=user_query, + search_index=search_index, + taxa=taxa, + taxon_filter_type=taxon_filter_type, + assemblies=assemblies, + samples=samples, + rank=rank, + attributes=attributes, + fields=fields, + names=names, + ranks=ranks, + show_table=show_table, + show_sources=show_sources, + size=size if show_table else None, + sort_by=sort_by if show_table else None, + sort_order=sort_order if show_table else None, + page=page if show_table else None, + ) + + # Extract top-level fields from advanced_search result + count = result.get("count", 0) + url = result.get("url", "") + results = result.get("results", []) if show_table else [] + + # Build response envelope - always returns consistent structure + response_envelope = { + "user_query": user_query, + "search_tips": set_search_tips(attributes, fields, intent), + "count": count, + "url": url, + "search_index": search_index, + } + + # Include raw results for table intent + if show_table: + response_envelope["results"] = [] + + # Conditionally include formatted output based on response_format + if count > 0 and show_table and results: + processed_table = process_result_table( + results, + search_fields=fields or [], + search_names=names or [], + search_ranks=ranks or [], + ) + response_envelope["results"] = processed_table + + if response_format in {"markdown", "full"}: + response_envelope["markdown"] = format_result_table( + processed_table=processed_table, + search_url=url, + format="markdown", + ) + + if response_format in {"csv", "full"}: + response_envelope["csv"] = format_result_table( + processed_table=processed_table, + search_url=url, + format="csv", + ) + + if response_format == "full": + # Placeholder for sources implementation + response_envelope["sources"] = [] + else: + # No results to format + if response_format in {"markdown", "full"}: + response_envelope["markdown"] = "" + if response_format in {"csv", "full"}: + response_envelope["csv"] = "" + + # Log successful call + duration_ms = (time.time() - start) * 1000 + log_tool_usage( + tool_name="submit_query", + params={ + "intent": intent, + "search_index": search_index or "default", + "identifiers_artifact_id": identifiers_artifact_id, + "attributes_artifact_id": attributes_artifact_id, + "response_format": response_format, + }, + duration_ms=duration_ms, + success=True, + result_summary={ + "count": count, + "has_results": show_table and bool(results), + "response_format": response_format, + } + ) + + return response_envelope + + except ToolExecutionError as e: + duration_ms = (time.time() - start) * 1000 + log_tool_usage( + tool_name="submit_query", + params={ + "intent": intent, + "search_index": search_index or "default", + "identifiers_artifact_id": identifiers_artifact_id, + "attributes_artifact_id": attributes_artifact_id, + "response_format": response_format, + }, + duration_ms=duration_ms, + success=False, + error=str(e) + ) + + return { + "user_query": user_query or "unknown", + "error": e.message, + "error_type": "handled", + "error_tool": e.tool_name, + } + + except Exception as e: + # Log error + duration_ms = (time.time() - start) * 1000 + logger.exception("Unexpected error in submit_query") + log_tool_usage( + tool_name="submit_query", + params={ + "intent": intent, + "search_index": search_index or "default", + "identifiers_artifact_id": identifiers_artifact_id, + "attributes_artifact_id": attributes_artifact_id, + "response_format": response_format, + }, + duration_ms=duration_ms, + success=False, + error=str(e) + ) + + # Format error for user with issue reporting guidance + issue_info = format_unhandled_error_for_issue("submit_query", str(e)) + return { + "user_query": user_query or "unknown", + "error": issue_info["user_message"], + "error_type": "unhandled", + "issue_url": issue_info["issue_url"], + "issue_create_url": issue_info["issue_create_url"], + } + + +# Set the __doc__ to SUBMIT_QUERY_PROMPT so the LLM sees detailed instructions and examples, +# not the developer-focused docstring above. +submit_query.__doc__ = SUBMIT_QUERY_PROMPT + + +def register_tools(mcp) -> None: + """Register query parser tools with the FastMCP instance. + + Args: + mcp: FastMCP instance to register tools with + """ + mcp.tool()(submit_query) diff --git a/src/mcp-server/tools/record.py b/src/mcp-server/tools/record.py new file mode 100644 index 0000000..0d2b497 --- /dev/null +++ b/src/mcp-server/tools/record.py @@ -0,0 +1,88 @@ +from typing import Any + +from ..config import API_BASE, DATASTORE_NAME +from ..logging_config import get_logger +from .helpers.api import make_api_request +from .helpers.constants import FIELD_CACHE +from .helpers.fetch import fetch_valid_types +from .helpers.formatting import format_record +from .helpers.validation import validate_attribute_names + +logger = get_logger(__name__) + + +async def get_record( + record_id: str, + search_index: str, + attributes: list[str] | None = None, + truncate: bool = True, +) -> Any: + f"""Get a single record from {DATASTORE_NAME}. + + ⚠️ RECOMMENDATION: IF the user query involves multiple records or complex + filters, Use submit_query instead to retrieve a table for 95% of queries! + + An LLM can use this to fetch detailed information about a specific record. + the record ID can be a taxon ID, assembly accession, or sample ID depending + on the search_index. + + Use this tool after identifying a specific record of interest from a submit_query + search, or when a use explicitly requests information about a known record. + + Example user queries that would use this tool: + - "Give me details about the taxon with ID 1234." + - "What is the assembly level and genome size for assembly GCA_123456?" + - "What information does have about bats?" (Implies fetching record for order + Chiroptera.) + - "What target lists are cats on?" (Implies fetching record for family Felidae.) + - "Provide details about sample SRS123456." + - "Which bioprojects are associated with rodents?" (Implies fetching record for + order Rodentia.) + - "what is the full lineage of Canis lupus?" (Implies fetching record for taxon + Canis lupus with an empty attribute list, [].) + + Returned information includes: + - Scientific name + - Taxon ID + - Rank + - Lineage + - Requested attributes and their values + + When summarizing a record, the LLM MUST include the {DATASTORE_NAME} web interface URL. + + Args: + record_id: ID of the record to fetch + search_index: Index type (taxon, assembly, sample) + attributes: List of attributes to include in the response (default: all) + truncate: Whether to truncate long lists of attribute values (default: True) + """ + # Populate FIELD_CACHE before validation + await fetch_valid_types(search_index) + + try: + if attributes is not None: + attributes = validate_attribute_names(attributes, search_index, FIELD_CACHE) + except ValueError as ve: + return f"""Error in attribute validation: {str(ve)} + +Please check attribute names against {DATASTORE_NAME} metadata using the +get_attribute_selection_context or get_valid_types tools. +""" + url = ( + f"{API_BASE}/record?result={search_index}" + f"&recordId={record_id}&taxonomy=ncbi" + ) + data = await make_api_request(url) + if not data or "records" not in data: + return {"error": "Unable to fetch record or no record found."} + + return format_record(data["records"][0]["record"], url, attributes, truncate) + + +def register_tools(mcp) -> None: + f"""Register {DATASTORE_NAME} record tools with the FastMCP instance. + + Args: + mcp: FastMCP instance to register tools with + """ + mcp.tool()(get_record) diff --git a/src/mcp-server/tools/report.py b/src/mcp-server/tools/report.py new file mode 100644 index 0000000..8e5fca7 --- /dev/null +++ b/src/mcp-server/tools/report.py @@ -0,0 +1,315 @@ +import time + +from ..config import API_BASE, DATASTORE_NAME +from ..logging_config import get_logger, log_tool_usage +from .artifact_store import retrieve +from .helpers.api import make_api_request +from .helpers.axis import axis_opts_to_string +from .helpers.errors import artifact_retrieval_error, invalid_intent_error +from .helpers.query import ( + build_search_params, + build_user_facing_url, + params_dict_to_url, +) + +logger = get_logger(__name__) + + +GET_REPORT_PROMPT = f"""Generate {DATASTORE_NAME} reports with different visualisation types. + +IMPORTANT: This tool is for generating visual reports (e.g., histograms, scatter +plots, trees) based on query results. If you just want to get raw data or counts, +use submit_query() instead. + +CHOOSE YOUR REPORT TYPE AND PROVIDE THE REQUIRED PARAMETERS: + +**DISTRIBUTION REPORTS** (show data across axes): + +1. **histogram**: Distribution of values for one attribute + Required: x_axis (field/rank/attribute distribution) + Optional: category (group by field/rank), bin_count, scale + Example: "What is the distribution of genome sizes?" + → process_axis(axis_definition="genome_size") → get_report(intent="histogram", x_axis_artifact_id=...) + +2. **scatter**: Relationship between two attributes + Required: x_axis, y_axis (both field/rank/attribute distributions) + Optional: category, scale + Example: "How do genome size and chromosome count compare?" + → process_axis(x...) + process_axis(y...) → get_report(intent="scatter", x_axis=..., y_axis=...) + +3. **tree**: Taxonomic tree with optional data bars on leaves + Required: none + Optional: y_axis (data to show at leaves), category + Example: "Show the taxonomy tree for mammals with genome size data at leaves" + → process_axis(y...) → get_report(intent="tree", y_axis_artifact_id=...) + +4. **map**: Geographic distribution + Required: none + Optional: category (group by attribute/rank) + Example: "Where are these species found?" + → process_axis(category...) → get_report(intent="map", category_artifact_id=...) + +**COMPOSITION REPORTS** (show proportions within hierarchies): + +5. **donut**: What proportion of results match an additional filter? + Required: Required: parent_filter (the broader context to show proportions within) + Example: "Of the mammal species, what proportion have genome_size > 3G?" + → process_attributes(filter for genome_size > 3G) + → get_report(intent="donut", parent_filter_artifact_id=...) + +6. **rainbow**: What proportion at each rank match filter_y, and optionally filter_z? + Required: parent_filter (first level filter) + Example: "Of mammals with genome_size > 3G, how many per phylum and order?" + → process_attributes(genome_size > 3G) → process_attributes(additional...) + → get_report(intent="rainbow", parent_filter_artifact_id=...) + +7. **sources**: Data sources for this query + Required: none + Example: "Which databases contributed to these results?" + → get_report(intent="sources") +""" +# Return envelope +GET_REPORT_PROMPT += """ + +RETURN ENVELOPE: +- `user_query`: Original user query string +- `intent`: The report intent used (e.g., "histogram", "scatter", "tree", "donut", "rainbow", "map", "sources") +- `report_url`: User-facing URL to view the report +- `api_url`: The GoaT API URL used to generate the report +- `raw`: Raw API response object returned from the GoaT report endpoint +- `report`: Human-readable formatted report text (kept for backward compatibility) + +Note: Clients should prefer the structured fields (`report_url`, `api_url`, `raw`) for programmatic handling and may + render `report` for display. +""" + + +async def get_report( + user_query: str, + intent: str, # This tells us what the other params mean + identifiers_artifact_id: str, + attributes_artifact_id: str, + # Visualisation axes (for histogram, scatter, tree, map) + x_axis_artifact_id: str | None = None, # Required: histogram, scatter + y_axis_artifact_id: str | None = None, # Required: scatter; Optional: tree + category_artifact_id: str | None = None, # Optional: histogram, scatter, tree, map + # Hierarchical filters (for donut, rainbow) + parent_filter_artifact_id: str | None = None, # "broader scope for main query" + search_index: str = "taxon", +) -> dict[str, str]: + """Generate a report with visualisation. + + Retrieves axis and filter artifacts, composes query, calls API, formats output. + """ + + start = time.time() + + try: + # If artifact tokens were provided (string), attempt to retrieve stored objects + if isinstance(identifiers_artifact_id, str): + identifiers_output = retrieve(identifiers_artifact_id) + if isinstance(attributes_artifact_id, str): + attributes_output = retrieve(attributes_artifact_id) + + if not isinstance(identifiers_output, dict): + raise ValueError(artifact_retrieval_error("identifiers", "get_report")) + if not isinstance(attributes_output, dict): + raise ValueError(artifact_retrieval_error("attributes", "get_report")) + + valid_intents = {"histogram", "scatter", "tree", "donut", "rainbow", "map", "sources"} + if intent not in valid_intents: + raise ValueError( + invalid_intent_error(intent, valid_intents, "get_report") + ) + + # Extract identifiers + taxa = identifiers_output.get("taxa", []) + assemblies = identifiers_output.get("assemblies", []) + samples = identifiers_output.get("samples", []) + taxon_filter_type = identifiers_output.get("taxon_filter_type", "children") + rank = identifiers_output.get("rank") + + # Extract attributes + attributes = attributes_output.get("attributes", []) + fields = attributes_output.get("fields", []) + names = attributes_output.get("names", []) + ranks = attributes_output.get("ranks", []) + + # Retrieve axis and filter artifacts if provided + x_axis = None + if x_axis_artifact_id and isinstance(x_axis_artifact_id, str): + x_axis = retrieve(x_axis_artifact_id) + print(f"Retrieved x_axis artifact: {x_axis}") + + y_axis = None + if y_axis_artifact_id and isinstance(y_axis_artifact_id, str): + y_axis = retrieve(y_axis_artifact_id) + + category = None + if category_artifact_id and isinstance(category_artifact_id, str): + category = retrieve(category_artifact_id) + + parent_filter = None + if parent_filter_artifact_id and isinstance(parent_filter_artifact_id, str): + parent_filter = retrieve(parent_filter_artifact_id) + + # Build base search params as dict + params = await build_search_params( + search_index=search_index, + taxa=taxa, + taxon_filter_type=taxon_filter_type, + assemblies=assemblies, + samples=samples, + rank=rank, + attributes=attributes, + fields=fields, + names=names, + ranks=ranks, + ) + + logger.info(f"Built base search params for {intent} report: {params}") + + # Add report-specific parameters to params dict + params["report"] = intent + + x_field = None + + # Add axis parameters for distribution reports + if intent in {"histogram", "scatter", "tree"}: + if x_axis and (isinstance(x_axis, dict) and "field_or_rank" in x_axis): + params["x"] = x_axis["field_or_rank"] + if not x_axis.get("is_rank"): + x_field = x_axis["field_or_rank"] + # Extract just the field names from the fields dicts + field_names = [f.get("name") for f in fields if isinstance(f, dict)] + if x_field not in field_names: + # If the x_axis field is not already in the fields list, add it as a name string + params["fields"] = field_names + [x_field] + # if x_axis.get("modifiers"): + # params["xMod"] = ",".join(x_axis["modifiers"]) + params["xOpts"] = axis_opts_to_string(x_axis, is_cat=x_axis.get("is_rank", False)) + + if intent == "scatter" and y_axis and (isinstance(y_axis, dict) and "field_or_rank" in y_axis): + params["y"] = y_axis["field_or_rank"] + if y_axis.get("modifiers"): + params["yMod"] = ",".join(y_axis["modifiers"]) + params["yOpts"] = axis_opts_to_string(y_axis, is_cat=y_axis.get("is_rank", False)) + + if intent == "tree" and y_axis and (isinstance(y_axis, dict) and "field_or_rank" in y_axis): + params["y"] = y_axis["field_or_rank"] + if y_axis.get("modifiers"): + params["yMod"] = ",".join(y_axis["modifiers"]) + params["yOpts"] = axis_opts_to_string(y_axis, is_cat=y_axis.get("is_rank", False)) + + # Add category parameter (grouping axis) + if category and isinstance(category, dict) and "field_or_rank" in category: + cat = category["field_or_rank"] + catOpts = axis_opts_to_string(category, is_cat=True) + params["cat"] = f"{cat}{catOpts}" if catOpts else cat + + # Add filter for composition reports (donut, rainbow) + if intent in {"donut", "rainbow"} and parent_filter and (isinstance(parent_filter, dict) and "attributes" in + parent_filter): + logger.info(f"Using parent_filter for {intent}: {parent_filter}") + + if x_field is not None: + x_query = params.get("query", "").split(" AND ") + if x_query[0] != x_field: + x_query.insert(0, x_field) + params["x"] = " AND ".join(x_query).strip() + params.pop("query", None) + + params["rank"] = rank # Ensure rank is included in params for API + + # Convert params dict to URL + api_url = params_dict_to_url(f"{API_BASE}/report", params) + + logger.info(f"Report API URL: {api_url}") + + # Make API request + data = await make_api_request(api_url) + + # Build user-facing URL + report_url = build_user_facing_url(api_url) + + # Format response + result = f""" +Report generated for {intent} visualisation. + +Query: {user_query} + +Report URL: +{report_url} + +Raw API response: {data} +""" + + duration_ms = (time.time() - start) * 1000 + # Summary info for logging + result_summary = { + "taxa": len(taxa), + "assemblies": len(assemblies), + "samples": len(samples), + "intent": intent, + } + try: + log_tool_usage( + tool_name="get_report", + params={ + "intent": intent, + "search_index": search_index, + "identifiers_artifact_id": identifiers_artifact_id, + "attributes_artifact_id": attributes_artifact_id, + }, + duration_ms=duration_ms, + success=True, + result_summary=result_summary, + ) + except Exception: + logger.exception("Failed to log get_report usage") + + # Return a structured envelope while preserving the human-readable report string + return { + "user_query": user_query, + "intent": intent, + "report_url": report_url, + "api_url": api_url, + "raw": data, + "report": result, + } + except Exception as e: + duration_ms = (time.time() - start) * 1000 + try: + log_tool_usage( + tool_name="get_report", + params={ + "intent": intent, + "search_index": search_index, + "identifiers_artifact_id": identifiers_artifact_id, + "attributes_artifact_id": attributes_artifact_id, + }, + duration_ms=duration_ms, + success=False, + error=str(e), + exc=e, + ) + except Exception: + logger.exception("Failed to log get_report error") + logger.exception("Unexpected error in get_report") + raise + + # NOTE: logging is placed after the main return point in a normal flow above. + # We also log success/failure around the call to help track usage. + + +get_report.__doc__ = GET_REPORT_PROMPT + + +def register_tools(mcp) -> None: + """Register report tools with the FastMCP instance. + + Args: + mcp: FastMCP instance to register tools with + """ + mcp.tool()(get_report) + mcp.tool()(get_report) diff --git a/src/mcp-server/tools/search.py b/src/mcp-server/tools/search.py new file mode 100644 index 0000000..a1708e8 --- /dev/null +++ b/src/mcp-server/tools/search.py @@ -0,0 +1,259 @@ +from typing import Any + +from ..config import API_BASE, DATASTORE_NAME +from ..logging_config import get_logger +from .helpers.api import make_api_request +from .helpers.constants import FIELD_CACHE +from .helpers.errors import ToolExecutionError +from .helpers.fetch import fetch_valid_types +from .helpers.formatting import rank_description +from .helpers.query import ( + build_search_params, + build_user_facing_url, + params_dict_to_url, + process_modifiers, +) +from .helpers.validation import ( # validate_attribute_names, + validate_attribute_name, + validate_attributes, +) + +logger = get_logger(__name__) + + +async def advanced_search( + search_index: str = "taxon", + taxa: list[str] | None = None, + taxon_filter_type: str = "children", + assemblies: list[str] | None = None, + samples: list[str] | None = None, + rank: str | None = None, + attributes: list[dict] | None = None, + fields: list[dict] | None = None, + names: list[str] | None = None, + ranks: list[str] | None = None, + sort_by: str | None = None, + sort_order: str | None = None, + show_table: bool = False, + show_sources: bool = False, + size: int = 5, + page: int = 1, + user_query: str | None = None, +) -> dict[str, Any]: + f"""Advanced search tool for querying {DATASTORE_NAME} with complex parameters. + + Args: + search_index: Index to search (taxon, assembly, or sample). + Choose based on what you're counting/listing: + - "taxon" for species/genera/families (default) + - "assembly" for genome assemblies only + - "sample" for sequencing samples only + Use choose_search_index tool if uncertain. + taxa: Optional taxonomic scope (scientific name, taxon ID, etc.) + rank: Optional taxonomic rank filter (e.g., species, genus, family, order, class, phylum) + NOTE: If not provided but present in user_query, will be auto-extracted. + attributes: Optional list of attribute filters, each with 'name' + and optional 'operator', 'value', 'exclude' and 'include' keys + fields: Optional list of fields to include in the response. If not provided, + default fields are included. + sort_by: Optional attribute name to sort results by + sort_order: Optional sort order ('asc' or 'desc', default: 'asc') + show_table: Whether to show results in a table format (default: False shows count) + size: Number of rows to include in the table if show_table is True (default: 5) + page: Page number for pagination (default: 1) + user_query: Original user query - helps auto-extract rank if not explicitly provided. + CRITICAL: ALWAYS provide the original user query string here. + """ + if user_query is None or not user_query.strip(): + raise ToolExecutionError( + "advanced_search", + """The 'user_query' parameter is required but was not provided. + +CRITICAL: You MUST always include the original user question in the user_query parameter +when calling submit_query. This allows automatic extraction of taxonomic rank and other +parameters from the natural language query. + +Example: +submit_query( + search_index="taxon", + taxon="Mammalia", + user_query="How many mammal species have genome size data" +) + +Please retry the call with the user_query parameter included.""") + + # Auto-extract rank from user_query if not provided + if rank is None and search_index == "taxon": + rank_keywords = { + 'species': 'species', + 'genus': 'genus', + 'genera': 'genus', + 'family': 'family', + 'families': 'family', + 'order': 'order', + 'orders': 'order', + 'class': 'class', + 'classes': 'class', + 'phylum': 'phylum', + 'phyla': 'phylum', + 'kingdom': 'kingdom', + 'kingdoms': 'kingdom', + 'superkingdom': 'superkingdom', + 'superkingdoms': 'superkingdom', + } + query_lower = user_query.lower() + for keyword, rank_value in rank_keywords.items(): + if keyword in query_lower: + rank = rank_value + logger.info(f"Auto-extracted rank='{rank}' from user_query") + break + + # Warn if rank might be missing for taxon queries + if search_index == "taxon" and rank is None and (taxa is not None or attributes is not None): + logger.warning( + "IMPORTANT: submit_query called with search_index='taxon' but no rank parameter. " + "If the user query mentions a taxonomic rank (species, genus, family, order, etc.), " + "the rank parameter should be provided. Example: rank='species' for queries about species." + ) + + # Populate FIELD_CACHE before validation + await fetch_valid_types(search_index) + + try: + if attributes is not None: + attributes = validate_attributes(attributes, search_index, FIELD_CACHE) + if fields is not None: + fields = validate_attributes(fields, search_index, FIELD_CACHE, is_field=True) + if sort_by is not None and sort_by != "": + sort_by = validate_attribute_name(sort_by, search_index, FIELD_CACHE) + except ValueError as ve: + logger.error(f"Attribute validation error: {ve}") + raise ToolExecutionError( + "advanced_search", + f"""Error in attribute validation: {str(ve)} + +Please check attribute names, operators, and values against {DATASTORE_NAME} metadata +using the get_attribute_selection_context or get_valid_types tools. +""", + ) + # Process modifiers: convert status-based modifiers to exclusions, keep summary modifiers in attributes + if attributes is not None: + attributes = process_modifiers(attributes) + logger.info(f"Processed modifiers in {len(attributes)} attributes") + + filtered_names = [] + extra_taxa = [] + taxa_length_before = len(taxa or []) + for name in names or []: + parts = name.split(":") + if len(parts) == 2: + if parts[0].replace("_", " ") in { + "common name", "synonym", "tolid prefix", "authority" + }: + taxa.append(f"{parts[0].replace('_', ' ')}:{parts[1]}") + elif parts[0].replace("_", " ") == "scientific name": + extra_taxa.extend(parts[1].split(",")) + filtered_names.append(name) + else: + filtered_names.append(name) + if len(filtered_names) != len(names or []): + if taxa_length_before == 0: + taxon_filter_type = "matching" + elif taxon_filter_type != "matching": + raise ToolExecutionError( + "advanced_search", + """Error: prefixed names in 'names' (e.g., 'common name:dog') cannot be used + alongside regular taxon names in 'taxa' unless taxon_filter_type is set to 'matching'. + + Please check with the user and retry the call with taxon_filter_type='matching' ONLY if + it is valid to do so.""", + ) + + names = filtered_names + taxa = (taxa or []) + extra_taxa + + # Build base search params as dict + params = await build_search_params( + search_index=search_index, + taxa=taxa, + taxon_filter_type=taxon_filter_type, + assemblies=assemblies, + samples=samples, + rank=rank, + attributes=attributes, + fields=fields, + names=names, + ranks=ranks, + ) + + logger.info(f"Built search params: {params}") + + # Add pagination and sorting for table results + if show_table: + params["size"] = size + params["offset"] = (page - 1) * size + if sort_by: + params["sortBy"] = sort_by + if sort_order and sort_order.lower() in ["asc", "desc"]: + params["sortOrder"] = sort_order.lower() + + # Choose endpoint based on intent + endpoint = "search" if show_table else "count" + + # Convert params dict to URL + api_url = params_dict_to_url(f"{API_BASE}/{endpoint}", params) + + # Make API request + data = await make_api_request(api_url) + + if show_table: + if not data or "results" not in data: + raise ToolExecutionError( + "advanced_search", + f"Unable to fetch results or no results found for URL: {api_url}.", + ) + count = data.get("status", {}).get("hits", 0) + else: + if not data or "count" not in data: + raise ToolExecutionError( + "advanced_search", + f"Unable to fetch count or no count found for URL: {api_url}.", + ) + count = data.get("count", 0) + + # Build user-facing URL + search_url = build_user_facing_url(api_url) + + if taxa and rank and search_index == "taxon": + description = f"{count} {rank_description(rank)} within {','.join(taxa)}" + elif taxa: + description = f"{count} records within {','.join(taxa)}" + elif rank: + description = f"{count} {rank_description(rank)}" + else: + index_name = {"taxon": "taxa", "assembly": "assemblies", "sample": "samples"}.get( + search_index, "records" + ) + description = f"{count} {index_name}" + + if attributes: + description += " matching the specified attributes" + + return { + "count": count, + "description": description, + "url": search_url, + "search_index": search_index, + "query_url": api_url, + "results": data.get("results", []) if show_table else [], + "api_response": data, + } + + +def register_tools(mcp) -> None: + """Register search tools with the FastMCP instance. + + Args: + mcp: FastMCP instance to register tools with + """ + mcp.tool()(advanced_search) diff --git a/src/mcp-server/tools/utilities.py b/src/mcp-server/tools/utilities.py new file mode 100644 index 0000000..37da5e9 --- /dev/null +++ b/src/mcp-server/tools/utilities.py @@ -0,0 +1,272 @@ +import time + +from ..config import API_BASE, DATASTORE_NAME, WEB_URL +from ..logging_config import get_logger, log_tool_usage +from .helpers.api import make_api_request +from .helpers.search_index import infer_index_from_query + +logger = get_logger(__name__) + +RANK_CACHE: list[str] = [] +_RANK_CACHE_TIMESTAMP: float = 0.0 +RANK_CACHE_TTL_SECONDS = 24 * 60 * 60 # 24 hours + + +async def fetch_valid_ranks() -> list[str]: + f"""Internal function to fetch valid taxon ranks from {DATASTORE_NAME} API. + + Uses in-memory cache with 24-hour TTL to avoid repeated API calls.""" + global RANK_CACHE, _RANK_CACHE_TIMESTAMP + # Check if we have a valid cached response + current_time = time.time() + cache_age = current_time - _RANK_CACHE_TIMESTAMP + if cache_age < RANK_CACHE_TTL_SECONDS: + return RANK_CACHE + + # Cache miss or expired - fetch from API + url = f"{API_BASE}/taxonomicRanks" + data = await make_api_request(url) + if not data or "ranks" not in data: + return [] + + # Store in cache + ranks = data["ranks"] + RANK_CACHE = ranks + _RANK_CACHE_TIMESTAMP = current_time + + return ranks + + +async def get_valid_ranks() -> list[str]: + f"""Fetch valid taxon ranks from {DATASTORE_NAME} API.""" + start = time.time() + try: + ranks = await fetch_valid_ranks() + duration_ms = (time.time() - start) * 1000 + log_tool_usage( + tool_name="get_valid_ranks", + params={}, + duration_ms=duration_ms, + success=True, + result_summary={"count": len(ranks) if ranks is not None else 0}, + ) + return ranks + except Exception as e: + duration_ms = (time.time() - start) * 1000 + log_tool_usage( + tool_name="get_valid_ranks", + params={}, + duration_ms=duration_ms, + success=False, + error=str(e), + exc=e, + ) + raise + + +async def choose_search_index(query: str) -> dict: + f"""Choose the appropriate {DATASTORE_NAME} search index based on what is being counted/listed. + + CRITICAL: Choose the index based on what the user wants to COUNT or LIST, not what + attributes they want to filter by. + + {DATASTORE_NAME} supports three search indices: + + 1. **taxon** (DEFAULT) - Use when counting/listing TAXONOMIC UNITS: + - "How many species..." → taxon index + - "Which families..." → taxon index + - "List genera..." → taxon index + - "How many mammal species have chromosomal assemblies" → taxon (counting species) + - "Which cat species are missing genome data" → taxon (counting species) + + 2. **assembly** - Use ONLY when counting/listing ASSEMBLIES themselves: + - "How many assemblies..." → assembly index + - "List all assemblies for..." → assembly index + - "Which assemblies have contig N50 > 10Mb" → assembly (counting assemblies) + - Note: A species can have multiple assemblies + + 3. **sample** - Use ONLY when counting/listing SAMPLES themselves: + - "How many samples..." → sample index + - "List samples for..." → sample index + - "Which samples have RNA-seq data" → sample (counting samples) + - Note: A species can have many samples + + EXAMPLES: + - ✓ "How many mammal species have assemblies" → taxon (counting species) + - ✗ "How many mammal species have assemblies" → assembly (wrong!) + - ✓ "How many assemblies exist for mammals" → assembly (counting assemblies) + - ✓ "How many cat assemblies are there" → assembly (counting assemblies) + - ✓ "Which dog family species are on DToL" → taxon (counting species) + - ✓ "List assemblies with N50 > 1Mb" → assembly (listing assemblies) + + If uncertain, default to 'taxon' as most queries are taxonomic. + + Args: + query: The user's full query to analyse + + Returns: + dict with keys: search_index (one of "taxon", "assembly", "sample"), reasoning (explanation of choice) + """ + start = time.time() + try: + result = infer_index_from_query(query) + duration_ms = (time.time() - start) * 1000 + # result may be dict or simple value + summary = result.get("search_index") if isinstance(result, dict) else str(result) + log_tool_usage( + tool_name="choose_search_index", + params={"query_len": len(query) if query is not None else 0}, + duration_ms=duration_ms, + success=True, + result_summary={"search_index": summary}, + ) + return result + except Exception as e: + duration_ms = (time.time() - start) * 1000 + log_tool_usage( + tool_name="choose_search_index", + params={"query_len": len(query) if query is not None else 0}, + duration_ms=duration_ms, + success=False, + error=str(e), + exc=e, + ) + raise + + +async def check_taxon_exists(name: str, response_format: str = "data") -> dict: + f"""Check if a specific taxon name exists in {DATASTORE_NAME} and get basic info. + + CRITICAL: Use this tool to validate scientific names before calling submit_query, + especially when: + - The user provides a common name that you've translated to scientific + - You're uncertain about the correct scientific name + - The taxon name is unfamiliar or complex + - You want to verify the taxon exists in {DATASTORE_NAME} + + This tool handles the translation from common names to scientific names. + You should provide the scientific name you believe is correct, and this + tool will validate it and return structured data for use in submit_query. + + Common name translations you should make before calling this tool: + - "mammals" → check_taxon_exists("Mammalia") + - "cats" → check_taxon_exists("Felidae") or check_taxon_exists("Felis") + - "dogs" → check_taxon_exists("Canidae") or check_taxon_exists("Canis") + - "bats" → check_taxon_exists("Chiroptera") + + The return value depends on the response_format parameter: + - "data" (default): Returns a dict with structured data about the taxon + - "markdown": Adds a markdown summary of the taxon information + - "url": Adds the URL to the taxon record in {DATASTORE_NAME} + - "full": Returns a dict with all optional information included, even if some fields are empty + + The data dict includes a query_string field, which should be used as the taxon + parameter in subsequent {DATASTORE_NAME} process_identifiers() calls for best results. + + Args: + name: Scientific taxon name to check + response_format: Format preference - "data", "markdown", "url", or "full" (default: "data") + + Returns: + dict with keys: exists, scientific_name, rank, taxon_id, query_string, + count_in_{DATASTORE_NAME.lower()}, url, markdown + (only populated fields depend on response_format, but full envelope always returned) + """ + + start = time.time() + # Query API + url = f"{API_BASE}/count?query=tax_tree%28{name}%29&result=taxon&offset=0&includeEstimates=true&taxonomy=ncbi" + count_data = await make_api_request(url) + + if not count_data or "count" not in count_data: + duration_ms = (time.time() - start) * 1000 + log_tool_usage( + tool_name="check_taxon_exists", + params={"name": name, "response_format": response_format}, + duration_ms=duration_ms, + success=False, + error="api_query_failed", + result_summary={"provided": False}, + ) + return { + "exists": False, + "scientific_name": name, + "error": f"Unable to query {DATASTORE_NAME} API", + } + + if count_data["count"] == 0: + duration_ms = (time.time() - start) * 1000 + log_tool_usage( + tool_name="check_taxon_exists", + params={"name": name, "response_format": response_format}, + duration_ms=duration_ms, + success=True, + result_summary={"exists": False, f"count_in_{DATASTORE_NAME.lower()}": 0}, + ) + return { + "exists": False, + "scientific_name": name, + f"count_in_{DATASTORE_NAME.lower()}": 0, + } + + # Get detailed info + taxon_url = f"{API_BASE}/search?query=tax_name%28{name}%29&result=taxon&size=1&taxonomy=ncbi" + taxon_data = await make_api_request(taxon_url) + + rank = "Unknown" + taxon_id = "" + if taxon_data and "results" in taxon_data and taxon_data["results"]: + result_info = taxon_data["results"][0].get("result", {}) + rank = result_info.get("taxon_rank", "Unknown") + taxon_id = str(result_info.get("taxon_id", "")) + + record_url = f"{WEB_URL}/record?result=taxon&recordId={taxon_id}&taxonomy=ncbi" + + # Build full envelope + result = { + "exists": True, + "scientific_name": name, + "rank": rank, + "taxon_id": taxon_id, + "query_string": f"{taxon_id}[{name}]", + f"count_in_{DATASTORE_NAME.lower()}": count_data["count"], + "url": record_url, + } + + if response_format in {"markdown", "full"}: + # Add markdown summary + result["markdown"] = ( + f"**{name}** ({rank})\n\n" + f"- ID: {taxon_id}\n" + f"- Records in {DATASTORE_NAME}: {count_data['count']}\n" + f"- [View in {DATASTORE_NAME}]({record_url})" + ) + + duration_ms = (time.time() - start) * 1000 + try: + log_tool_usage( + tool_name="check_taxon_exists", + params={"name": name, "response_format": response_format}, + duration_ms=duration_ms, + success=True, + result_summary={"exists": True, f"count_in_{DATASTORE_NAME.lower()}": count_data["count"]}, + ) + except Exception: + # Ensure that logging failures don't break main flow + logger.exception("Failed to log check_taxon_exists usage") + + # If client requested only one format, could return just that field + # but returning full envelope is more flexible + return result + + +def register_tools(mcp) -> None: + """Register utility tools with the FastMCP instance. + + Args: + mcp: FastMCP instance to register tools with + """ + mcp.tool()(choose_search_index) + mcp.tool()(check_taxon_exists) + mcp.tool()(get_valid_ranks) + mcp.tool()(get_valid_ranks) diff --git a/src/prompt.py b/src/prompt.py deleted file mode 100644 index c562355..0000000 --- a/src/prompt.py +++ /dev/null @@ -1,318 +0,0 @@ -from llama_index.core import PromptTemplate - -INDEX_PROMPT = PromptTemplate( - """ -You are an intelligent assistant who **ONLY ANSWERS IN JSON FORMAT**. - -A user is trying to query a genomics database. -We want to classify the query into one of the three types: -- **taxon** -- **assembly** -- **sample** - -There are 3 indices: **taxon**, **assembly**, and **sample**. - -Queries related to **taxon** appear as follows: -1. How many bird species have been collected so far? -2. What mushroom species have RNA seq? - -Queries related to **assembly** appear as follows: -1. What are the latest assemblies for the family Canidae? -2. How many genome assemblies are available for amphibians? - -Queries related to **sample** appear as follows: -1. Find samples with RNA-seq data for tigers -2. Do any samples for cattle include RNA-seq data? - -Classify the following query into one of the three types: -`{query}` - -Return the classification in the following JSON format: -{{ -"classification": "taxon or assembly or sample", -"explanation": "..." -}} - -The classification key in your response SHOULD HAVE ONLY ONE OF THE THREE VALUES. -You CANNOT reply with a combination of any values. -e.g. "classification": "taxon, assembly", "classification": "taxon/assembly" etc. -IS NOT ALLOWED. - -```json - -""" -) - -ENTITY_PROMPT = PromptTemplate( - """ -You are an intelligent assistant who **ONLY ANSWERS IN JSON FORMAT**. - -A user is trying to query a genomics database. - -We want to identify all the entities in the query. - -An entity is a word in the query that represents the subject of the query. - -For example, in the query "How many bird species have been collected so far?", -the entity are "bird". - -The identified entity *HAS TO BE* a living organism. - -For e.g. "genomics", "assembly", "order", etc. are NOT valid entities - -You need to return a list containing all the entities in the query along -with their singular/plural forms and scientific names. - -For example, for the query "How many bird species have been collected so far?", -the output would be: -``` -[ - {{ - "singular_form": "bird", - "plural_form": "birds", - "scientific_name": "Aves" - }} -] -``` - -The query given by the user is as follows: -`{query}` - -If there are no entities in the query, return an empty list. - -Return the entities in the following JSON format: -{{ - "entities": [ - {{ - "singular_form": "...", - "plural_form": "...", - "scientific_name": "..." - }} - ], - "explanation": "..." -}} - -```json -""" -) - -RANK_PROMPT = PromptTemplate( - """ -You are an intelligent assistant who **ONLY ANSWERS IN JSON FORMAT**. - -A user is trying to query a genomics database. - -We want to identify the rank at which the query will be performed. - -A rank is the position of an entity in the taxonomic hierarchy. - -We have already queried the database against the user's query. - -*Database Results:* -`{results}` - -*User Query:* -`{query}` - -Look at the results and decide wisely which rank applies to the given query. - -You need to consider the following 3 important parameters while deciding the rank: -1. User Query - Find the rank that is *mentioned* in the query. For example, - If the query is "Which species of the dog family do we know about?", the rank will be "species" - since it is more specific than family and is mentioned in the query. -2. Results - The results contain all possible answers. You need to select the most relevant one from them. -3. Lineage - The lineage of every entry in the result is an array that contains all parents of the entry. - Make sure that the entry that you select contains correct parents in the lineage. - - -You need to return the rank and the taxon id of the most relevant entry from the results. - -If rank is not applicable to the query, return an empty string -for the rank and taxon_id field. - -Return the rank in the following JSON format: -{{ - "rank": "...", - "taxon_id": "...", - "explanation": "..." -}} - -```json -""" -) - -LINEAGE_PROMPT = PromptTemplate( - """ -You are an intelligent assistant who **ONLY ANSWERS IN JSON FORMAT**. - -A user is trying to query a genomics database. - -We have already fetched results from the database for the user's query. - -The query given by the user is as follows: -`{query}` - -The *LINEAGE* of the most relevant taxon is as follows: -`{lineage}` - -You need to identify 1 entry in the lineage that should be used to answer the query. - -For e.g. if the user asks for all species of the cat family, the entry that you pick -from the lineage should be "Felidae" because it corresponds to the family rank and will contain -all the species in its descendants. - -Formally speaking, you need to return the taxon id of 1 entry from the lineage that will act -as the first common ancestor of all the results that the user is looking for. - -Return the taxon id in the following JSON format: -{{ - "taxon_id": "...", - "explanation": "..." -}} - -```json -""" -) - -TIME_PROMPT = PromptTemplate( - """ -You are an intelligent assistant who **ONLY ANSWERS IN JSON FORMAT**. - -A user is trying to query a genomics database. - -We need to identify any time related information in the query. - -The current date time is: {time} - -The query given by the user is as follows: -`{query}` - -You need to return a JSON containing the requested time in YYYY-MM-DD format. -The JSON has to be in the following format: -{{ - "from_date": "YYYY-MM-DD", - "to_date": "YYYY-MM-DD", - "explanation": "..." -}} - -If there is no time related information in the query, return an empty string -for both from_date and to_date. -If 'from' is not applicable, return an empty string for from_date. -If 'to' is not applicable, return an empty string for to_date. - -```json -""" -) - -INTENT_PROMPT = PromptTemplate( - """ -You are an intelligent assistant who **ONLY ANSWERS IN JSON FORMAT**. - -A user is trying to query a genomics database. - -We need to identify the intent of the query. - -An intent can be one of the following three types: -- **search**: The user is looking for information. -- **count**: The user is looking for a count of something. -- **record**: The user is looking for a specific record. - -Examples for each intent: -- search: "What are the latest assemblies for the family Canidae?" -- count: "How many bird species have been collected so far?" -- record: "What information do we have about the African Elephant?" - -The query given by the user is as follows: -`{query}` - -Return the intent in the following JSON format: -{{ - "intent": "...", - "explanation": "..." -}} - -```json -""" -) - -ATTRIBUTE_PROMPT = PromptTemplate( - """ -You are an intelligent assistant who **ONLY ANSWERS IN JSON FORMAT**. - -A user is trying to query a genomics database. - -We need to identify any attributes in the query. - -These attributes might have some conditions mentioned on them -or they might simply be a "required" field in the output. - -The list of possible attributes and their types/values are as follows: - -`{attribute_metadata}` - -The query given by the user is as follows: -`{query}` - -You need to return a list of attributes present in the query along - with the conditions mentioned on them. -The conditions can be one of the following: ->, <, >=, <=, =, !=, in - -If the condition is "in", the value will be a list of values. -You need to reply in the following format: -{{ - "attributes": [ - {{ - "attribute": "...", - "condition": "...", - "value": "..." or ["...", "..."] - }} - ], - "explanation": "..." -}} - -If there are no attributes in the query, return an empty list. - - -**REMEMBER:** The attributes list in your response must be filled **ONLY** if -the user has **explicitly** mentioned that attribute in the query. - -This means that "ebp_date" (or any other attribute) will not be included in -the list unless the phrase "ebp_date" is given in the query by the user. - -**DO NOT** assume that an attribute is **IMPLIED** in the query. -**IN MOST CASES, YOUR RESPONSE WILL BE AN EMPTY LIST.** - -```json -""" -) - -RECORD_PROMPT = PromptTemplate( - """ -You are an intelligent assistant who **ONLY ANSWERS IN JSON FORMAT**. - -A user is trying to query a genomics database. - -We have already queried the database against the user's query. - -We have a set of results from the database, we need to pick the best match. - -Make sure that the "rank" of your answer should be the closest match to the user's query. - -The query by the user is as follows: -`{query}` - -The results from the database are as follows: -{results} - -You need to return the best taxon from the results in the following JSON format: -{{ - "taxon_id": "...", - "explanation": "..." -}} - -The taxon_id HAS TO BE AN INTEGER. - -```json -""" -) diff --git a/src/pyproject.toml b/src/pyproject.toml new file mode 100644 index 0000000..f67a3d2 --- /dev/null +++ b/src/pyproject.toml @@ -0,0 +1,10 @@ +[project] +name = "goat" +version = "0.1.0" +description = "Add your description here" +readme = "README.md" +requires-python = ">=3.12" +dependencies = [ + "fastmcp>=2.13.1", + "httpx>=0.28.1", +] diff --git a/src/queries/script_generated_queries.json b/src/queries/script_generated_queries.json deleted file mode 100644 index 624fa29..0000000 --- a/src/queries/script_generated_queries.json +++ /dev/null @@ -1,10735 +0,0 @@ -[ - { - "english_query": "Which species in the Borneo magnolia include RNA-seq data?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of spider have genome assemblies?", - "json_output": { - "taxon": "spider", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+spider%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the reptile have genome assemblies?", - "json_output": { - "taxon": "reptile", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of fruit fly have sequencing platforms?", - "json_output": { - "taxon": "fruit fly", - "rank": "order", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28order%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the Borneo magnolia have RNA-sequencing?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of rodent have genome assemblies?", - "json_output": { - "taxon": "rodent", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of fruit fly have RNA-sequencing?", - "json_output": { - "taxon": "fruit fly", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of Borneo magnolia have sequencing platforms?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "species", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28species%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of cattle have been sequenced?", - "json_output": { - "taxon": "cat", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of spider have been sequenced?", - "json_output": { - "taxon": "spider", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of fungi have RNA-seq data?", - "json_output": { - "taxon": "fungi", - "rank": "order", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the wolf have RNA-sequencing?", - "json_output": { - "taxon": "wolf", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of bird have sequencing platforms?", - "json_output": { - "taxon": "bird", - "rank": "genus", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bird%29+AND+tax_rank%28genus%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of fungi have RNA-sequencing?", - "json_output": { - "taxon": "fungi", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the rat have been sequenced?", - "json_output": { - "taxon": "rat", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of fungi have RNA-sequencing?", - "json_output": { - "taxon": "fungi", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What is the sequencing status of the reptile?", - "json_output": { - "taxon": "reptile", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does fungi have RNA-sequencing?", - "json_output": { - "taxon": "fungi", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the wolf have been sequenced?", - "json_output": { - "taxon": "wolf", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the cat have genome assemblies?", - "json_output": { - "taxon": "cat", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of human have RNA-seq data?", - "json_output": { - "taxon": "human", - "rank": "species", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+human%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of wolf include RNA-seq data?", - "json_output": { - "taxon": "wolf", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of fruit fly have genome assemblies?", - "json_output": { - "taxon": "fruit fly", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of fungi have genome assemblies?", - "json_output": { - "taxon": "fungi", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of fungi have been sequenced?", - "json_output": { - "taxon": "fungi", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of cat have RNA-sequencing?", - "json_output": { - "taxon": "cat", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of human have genome assemblies?", - "json_output": { - "taxon": "human", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+human%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the Borneo magnolia have genome assemblies?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does bat have been sequenced?", - "json_output": { - "taxon": "bat", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of mushroom have RNA-seq data?", - "json_output": { - "taxon": "mushroom", - "rank": "genus", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of cattle include RNA-seq data?", - "json_output": { - "taxon": "cat", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the bat have been sequenced?", - "json_output": { - "taxon": "bat", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of Borneo magnolia include RNA-seq data?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of rodent have genome assemblies?", - "json_output": { - "taxon": "rodent", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of rat have RNA-sequencing?", - "json_output": { - "taxon": "rat", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of cattle have genome assemblies?", - "json_output": { - "taxon": "cat", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for rat RNA-seq data?", - "json_output": { - "taxon": "rat", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of Primate have genome assemblies?", - "json_output": { - "taxon": "Primate", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What is the sequencing status of the Borneo magnolia?", - "json_output": { - "taxon": "Borneo magnolia", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for rodent sequencing platforms?", - "json_output": { - "taxon": "rodent", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of fungi include RNA-seq data?", - "json_output": { - "taxon": "fungi", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the bat have been sequenced?", - "json_output": { - "taxon": "bat", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does cat have genome assemblies?", - "json_output": { - "taxon": "cat", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does cattle include RNA-seq data?", - "json_output": { - "taxon": "cat", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of human have RNA-sequencing?", - "json_output": { - "taxon": "human", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of bird have genome assemblies?", - "json_output": { - "taxon": "bird", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bird%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the fungi include RNA-seq data?", - "json_output": { - "taxon": "fungi", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for bat sequencing platforms?", - "json_output": { - "taxon": "bat", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of reptile have RNA-seq data?", - "json_output": { - "taxon": "reptile", - "rank": "species", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of human have genome assemblies?", - "json_output": { - "taxon": "human", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does reptile have RNA-sequencing?", - "json_output": { - "taxon": "reptile", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of rodent have RNA-sequencing?", - "json_output": { - "taxon": "rodent", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the Primate have been sequenced?", - "json_output": { - "taxon": "Primate", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the bat include RNA-seq data?", - "json_output": { - "taxon": "bat", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the fruit fly have been sequenced?", - "json_output": { - "taxon": "fruit fly", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of mushroom have RNA-sequencing?", - "json_output": { - "taxon": "mushroom", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the cat have RNA-sequencing?", - "json_output": { - "taxon": "cat", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of rodent have RNA-seq data?", - "json_output": { - "taxon": "rodent", - "rank": "species", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for gnat RNA-seq data?", - "json_output": { - "taxon": "gnat", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of fruit fly have RNA-sequencing?", - "json_output": { - "taxon": "fruit fly", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the gnat have genome assemblies?", - "json_output": { - "taxon": "gnat", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of bird have genome assemblies?", - "json_output": { - "taxon": "bird", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bird%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of gnat have been sequenced?", - "json_output": { - "taxon": "gnat", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for rodent have been updated this month?", - "json_output": { - "taxon": "rodent", - "data_type": "genome assemblies", - "time_frame": "this month", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=2024-06-01" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rodent%29+AND+assembly_span+AND+last_updated%3E%3D2024-06-01&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for wolf have been updated ?", - "json_output": { - "taxon": "wolf", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+wolf%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of fungi have sequencing platforms?", - "json_output": { - "taxon": "fungi", - "rank": "order", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28order%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of human have RNA-sequencing?", - "json_output": { - "taxon": "human", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What information do we have about reptile?", - "json_output": { - "taxon": "reptile", - "intent": "record" - }, - "api_query": "https://goat.genomehubs.org/record?query=tax_tree%28%2A+reptile%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of Primate have genome assemblies?", - "json_output": { - "taxon": "Primate", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of cat include RNA-seq data?", - "json_output": { - "taxon": "cat", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What information do we have about fruit fly?", - "json_output": { - "taxon": "fruit fly", - "intent": "record" - }, - "api_query": "https://goat.genomehubs.org/record?query=tax_tree%28%2A+fruit+fly%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of human have been sequenced?", - "json_output": { - "taxon": "human", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does fruit fly have been sequenced?", - "json_output": { - "taxon": "fruit fly", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of bird have genome assemblies?", - "json_output": { - "taxon": "bird", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the wolf have genome assemblies?", - "json_output": { - "taxon": "wolf", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the Primate include RNA-seq data?", - "json_output": { - "taxon": "Primate", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of fruit fly have RNA-seq data?", - "json_output": { - "taxon": "fruit fly", - "rank": "order", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for reptile genome assemblies?", - "json_output": { - "taxon": "reptile", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What is the sequencing status of the human?", - "json_output": { - "taxon": "human", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of rat have genome assemblies?", - "json_output": { - "taxon": "rat", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of Borneo magnolia have RNA-seq data?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "order", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the human have RNA-sequencing?", - "json_output": { - "taxon": "human", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of spider have genome assemblies?", - "json_output": { - "taxon": "spider", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for Borneo magnolia include RNA-seq data?", - "json_output": { - "taxon": "Borneo magnolia", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of fungi have genome assemblies?", - "json_output": { - "taxon": "fungi", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of Borneo magnolia have RNA-seq data?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "genus", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of cat include RNA-seq data?", - "json_output": { - "taxon": "cat", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of wolf have genome assemblies?", - "json_output": { - "taxon": "wolf", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for fruit fly include RNA-seq data?", - "json_output": { - "taxon": "fruit fly", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for rat include genome assemblies?", - "json_output": { - "taxon": "rat", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of mushroom have been sequenced?", - "json_output": { - "taxon": "mushroom", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the mushroom have RNA-sequencing?", - "json_output": { - "taxon": "mushroom", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for cat RNA-seq data?", - "json_output": { - "taxon": "cat", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of human have RNA-seq data?", - "json_output": { - "taxon": "human", - "rank": "family", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+human%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the bird include RNA-seq data?", - "json_output": { - "taxon": "bird", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for reptile sequencing platforms?", - "json_output": { - "taxon": "reptile", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of wolf have RNA-seq data?", - "json_output": { - "taxon": "wolf", - "rank": "genus", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the bat have RNA-sequencing?", - "json_output": { - "taxon": "bat", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of rat include RNA-seq data?", - "json_output": { - "taxon": "rat", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for fungi genome assemblies?", - "json_output": { - "taxon": "fungi", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of rat have RNA-sequencing?", - "json_output": { - "taxon": "rat", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the rat have genome assemblies?", - "json_output": { - "taxon": "rat", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of rat have been sequenced?", - "json_output": { - "taxon": "rat", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for fungi have been updated recently?", - "json_output": { - "taxon": "fungi", - "data_type": "genome assemblies", - "time_frame": "recently", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=recent" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fungi%29+AND+assembly_span+AND+last_updated%3E%3Drecent&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of fruit fly include RNA-seq data?", - "json_output": { - "taxon": "fruit fly", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does gnat have RNA-sequencing?", - "json_output": { - "taxon": "gnat", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the bat have been sequenced?", - "json_output": { - "taxon": "bat", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of rodent have been sequenced?", - "json_output": { - "taxon": "rodent", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the fruit fly have genome assemblies?", - "json_output": { - "taxon": "fruit fly", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of rodent have genome assemblies?", - "json_output": { - "taxon": "rodent", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of Primate have sequencing platforms?", - "json_output": { - "taxon": "Primate", - "rank": "genus", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28genus%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of wolf have genome assemblies?", - "json_output": { - "taxon": "wolf", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of reptile have RNA-sequencing?", - "json_output": { - "taxon": "reptile", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What are the available RNA-seq platforms for the rat?", - "json_output": { - "taxon": "rat", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of rat have been sequenced?", - "json_output": { - "taxon": "rat", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the fungi have RNA-sequencing?", - "json_output": { - "taxon": "fungi", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of fruit fly include RNA-seq data?", - "json_output": { - "taxon": "fruit fly", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for Borneo magnolia have been updated this month?", - "json_output": { - "taxon": "Borneo magnolia", - "data_type": "genome assemblies", - "time_frame": "this month", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=2024-06-01" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Borneo+magnolia%29+AND+assembly_span+AND+last_updated%3E%3D2024-06-01&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of rat have sequencing platforms?", - "json_output": { - "taxon": "rat", - "rank": "genus", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rat%29+AND+tax_rank%28genus%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What are the available RNA-seq platforms for the gnat?", - "json_output": { - "taxon": "gnat", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the human have RNA-sequencing?", - "json_output": { - "taxon": "human", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What is the sequencing status of the wolf?", - "json_output": { - "taxon": "wolf", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of cattle include RNA-seq data?", - "json_output": { - "taxon": "cat", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of bird have genome assemblies?", - "json_output": { - "taxon": "bird", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bird%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of rodent have genome assemblies?", - "json_output": { - "taxon": "rodent", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of wolf have sequencing platforms?", - "json_output": { - "taxon": "wolf", - "rank": "order", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28order%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of bird include RNA-seq data?", - "json_output": { - "taxon": "bird", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for bird include RNA-seq data?", - "json_output": { - "taxon": "bird", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of fungi have genome assemblies?", - "json_output": { - "taxon": "fungi", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of rodent have sequencing platforms?", - "json_output": { - "taxon": "rodent", - "rank": "species", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28species%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the fruit fly include RNA-seq data?", - "json_output": { - "taxon": "fruit fly", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the reptile include RNA-seq data?", - "json_output": { - "taxon": "reptile", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of rat have genome assemblies?", - "json_output": { - "taxon": "rat", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rat%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What are the available RNA-seq platforms for the fruit fly?", - "json_output": { - "taxon": "fruit fly", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the human have been sequenced?", - "json_output": { - "taxon": "human", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for fungi have been updated ?", - "json_output": { - "taxon": "fungi", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fungi%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of human have sequencing platforms?", - "json_output": { - "taxon": "human", - "rank": "species", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+human%29+AND+tax_rank%28species%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for wolf sequencing platforms?", - "json_output": { - "taxon": "wolf", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of rodent have genome assemblies?", - "json_output": { - "taxon": "rodent", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does bat have genome assemblies?", - "json_output": { - "taxon": "bat", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of gnat include RNA-seq data?", - "json_output": { - "taxon": "gnat", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What are the available RNA-seq platforms for the reptile?", - "json_output": { - "taxon": "reptile", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the Borneo magnolia have been sequenced?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of gnat include RNA-seq data?", - "json_output": { - "taxon": "gnat", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of reptile have sequencing platforms?", - "json_output": { - "taxon": "reptile", - "rank": "species", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28species%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for human have been updated this month?", - "json_output": { - "taxon": "human", - "data_type": "genome assemblies", - "time_frame": "this month", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=2024-06-01" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+human%29+AND+assembly_span+AND+last_updated%3E%3D2024-06-01&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for reptile have been updated this month?", - "json_output": { - "taxon": "reptile", - "data_type": "genome assemblies", - "time_frame": "this month", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=2024-06-01" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+reptile%29+AND+assembly_span+AND+last_updated%3E%3D2024-06-01&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does mushroom have RNA-sequencing?", - "json_output": { - "taxon": "mushroom", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does fruit fly have genome assemblies?", - "json_output": { - "taxon": "fruit fly", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of spider have sequencing platforms?", - "json_output": { - "taxon": "spider", - "rank": "genus", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+spider%29+AND+tax_rank%28genus%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What are the available RNA-seq platforms for the Primate?", - "json_output": { - "taxon": "Primate", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of fruit fly have been sequenced?", - "json_output": { - "taxon": "fruit fly", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of cattle have RNA-sequencing?", - "json_output": { - "taxon": "cat", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of reptile have RNA-seq data?", - "json_output": { - "taxon": "reptile", - "rank": "genus", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of cattle have sequencing platforms?", - "json_output": { - "taxon": "cat", - "rank": "order", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+tax_rank%28order%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What are the available RNA-seq platforms for the Borneo magnolia?", - "json_output": { - "taxon": "Borneo magnolia", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of spider have RNA-sequencing?", - "json_output": { - "taxon": "spider", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of rodent include RNA-seq data?", - "json_output": { - "taxon": "rodent", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does spider have genome assemblies?", - "json_output": { - "taxon": "spider", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the cat have genome assemblies?", - "json_output": { - "taxon": "cat", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of wolf have sequencing platforms?", - "json_output": { - "taxon": "wolf", - "rank": "genus", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28genus%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for reptile have been updated ?", - "json_output": { - "taxon": "reptile", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+reptile%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of mushroom have genome assemblies?", - "json_output": { - "taxon": "mushroom", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of gnat have RNA-seq data?", - "json_output": { - "taxon": "gnat", - "rank": "order", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the wolf include RNA-seq data?", - "json_output": { - "taxon": "wolf", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the cattle have genome assemblies?", - "json_output": { - "taxon": "cat", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for bat include RNA-seq data?", - "json_output": { - "taxon": "bat", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of wolf have been sequenced?", - "json_output": { - "taxon": "wolf", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the rodent have genome assemblies?", - "json_output": { - "taxon": "rodent", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the mushroom have genome assemblies?", - "json_output": { - "taxon": "mushroom", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the cat include RNA-seq data?", - "json_output": { - "taxon": "cat", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for cattle genome assemblies?", - "json_output": { - "taxon": "cat", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for fruit fly have been updated ?", - "json_output": { - "taxon": "fruit fly", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fruit+fly%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the spider have RNA-sequencing?", - "json_output": { - "taxon": "spider", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the gnat have RNA-sequencing?", - "json_output": { - "taxon": "gnat", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of spider have genome assemblies?", - "json_output": { - "taxon": "spider", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+spider%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does mushroom have genome assemblies?", - "json_output": { - "taxon": "mushroom", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of rat have genome assemblies?", - "json_output": { - "taxon": "rat", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rat%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does spider include RNA-seq data?", - "json_output": { - "taxon": "spider", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for Borneo magnolia genome assemblies?", - "json_output": { - "taxon": "Borneo magnolia", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for spider sequencing platforms?", - "json_output": { - "taxon": "spider", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does cat have RNA-sequencing?", - "json_output": { - "taxon": "cat", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the gnat have RNA-sequencing?", - "json_output": { - "taxon": "gnat", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for reptile have been updated recently?", - "json_output": { - "taxon": "reptile", - "data_type": "genome assemblies", - "time_frame": "recently", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=recent" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+reptile%29+AND+assembly_span+AND+last_updated%3E%3Drecent&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of Primate have RNA-sequencing?", - "json_output": { - "taxon": "Primate", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does reptile have genome assemblies?", - "json_output": { - "taxon": "reptile", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of spider have genome assemblies?", - "json_output": { - "taxon": "spider", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+spider%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the rodent have RNA-sequencing?", - "json_output": { - "taxon": "rodent", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of wolf have RNA-sequencing?", - "json_output": { - "taxon": "wolf", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the cat include RNA-seq data?", - "json_output": { - "taxon": "cat", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does human have been sequenced?", - "json_output": { - "taxon": "human", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of cattle have genome assemblies?", - "json_output": { - "taxon": "cat", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of wolf have genome assemblies?", - "json_output": { - "taxon": "wolf", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the human include RNA-seq data?", - "json_output": { - "taxon": "human", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of reptile have been sequenced?", - "json_output": { - "taxon": "reptile", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of rat have sequencing platforms?", - "json_output": { - "taxon": "rat", - "rank": "family", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rat%29+AND+tax_rank%28family%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of human have RNA-sequencing?", - "json_output": { - "taxon": "human", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of cat have genome assemblies?", - "json_output": { - "taxon": "cat", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of human have genome assemblies?", - "json_output": { - "taxon": "human", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of gnat have genome assemblies?", - "json_output": { - "taxon": "gnat", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the bird have RNA-sequencing?", - "json_output": { - "taxon": "bird", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does Primate have been sequenced?", - "json_output": { - "taxon": "Primate", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the reptile have been sequenced?", - "json_output": { - "taxon": "reptile", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for rat genome assemblies?", - "json_output": { - "taxon": "rat", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for fruit fly include genome assemblies?", - "json_output": { - "taxon": "fruit fly", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of Primate have RNA-seq data?", - "json_output": { - "taxon": "Primate", - "rank": "family", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for gnat have been updated this month?", - "json_output": { - "taxon": "gnat", - "data_type": "genome assemblies", - "time_frame": "this month", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=2024-06-01" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+gnat%29+AND+assembly_span+AND+last_updated%3E%3D2024-06-01&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does wolf include RNA-seq data?", - "json_output": { - "taxon": "wolf", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for spider genome assemblies?", - "json_output": { - "taxon": "spider", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the spider include RNA-seq data?", - "json_output": { - "taxon": "spider", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of Primate have been sequenced?", - "json_output": { - "taxon": "Primate", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does reptile include RNA-seq data?", - "json_output": { - "taxon": "reptile", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for Primate genome assemblies?", - "json_output": { - "taxon": "Primate", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the rat have RNA-sequencing?", - "json_output": { - "taxon": "rat", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of Primate have RNA-seq data?", - "json_output": { - "taxon": "Primate", - "rank": "genus", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for mushroom have been updated ?", - "json_output": { - "taxon": "mushroom", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+mushroom%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of gnat have genome assemblies?", - "json_output": { - "taxon": "gnat", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of rat have RNA-seq data?", - "json_output": { - "taxon": "rat", - "rank": "order", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rat%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the spider include RNA-seq data?", - "json_output": { - "taxon": "spider", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the rodent include RNA-seq data?", - "json_output": { - "taxon": "rodent", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many RNA-seq data have been produced this month?", - "json_output": { - "data_type": "RNA-seq data", - "time_frame": "this month", - "intent": "count", - "field": "sra_accession", - "time_frame_query": "last_updated>=2024-06-01" - }, - "api_query": "https://goat.genomehubs.org/count?query=sra_accession+AND+last_updated%3E%3D2024-06-01&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the Primate have RNA-sequencing?", - "json_output": { - "taxon": "Primate", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the Borneo magnolia include RNA-seq data?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the Borneo magnolia have genome assemblies?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the spider include RNA-seq data?", - "json_output": { - "taxon": "spider", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of Primate have genome assemblies?", - "json_output": { - "taxon": "Primate", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What information do we have about spider?", - "json_output": { - "taxon": "spider", - "intent": "record" - }, - "api_query": "https://goat.genomehubs.org/record?query=tax_tree%28%2A+spider%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the reptile have been sequenced?", - "json_output": { - "taxon": "reptile", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of cat have RNA-seq data?", - "json_output": { - "taxon": "cat", - "rank": "species", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for human include RNA-seq data?", - "json_output": { - "taxon": "human", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of spider include RNA-seq data?", - "json_output": { - "taxon": "spider", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does gnat include RNA-seq data?", - "json_output": { - "taxon": "gnat", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does cattle have been sequenced?", - "json_output": { - "taxon": "cat", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of fungi have genome assemblies?", - "json_output": { - "taxon": "fungi", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of human have genome assemblies?", - "json_output": { - "taxon": "human", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+human%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many RNA-seq data have been produced ?", - "json_output": { - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the reptile have genome assemblies?", - "json_output": { - "taxon": "reptile", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the mushroom have RNA-sequencing?", - "json_output": { - "taxon": "mushroom", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of gnat have genome assemblies?", - "json_output": { - "taxon": "gnat", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the gnat have been sequenced?", - "json_output": { - "taxon": "gnat", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of rat have RNA-seq data?", - "json_output": { - "taxon": "rat", - "rank": "species", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rat%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of Primate include RNA-seq data?", - "json_output": { - "taxon": "Primate", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of rat include RNA-seq data?", - "json_output": { - "taxon": "rat", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the wolf have been sequenced?", - "json_output": { - "taxon": "wolf", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of reptile have genome assemblies?", - "json_output": { - "taxon": "reptile", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the rat have genome assemblies?", - "json_output": { - "taxon": "rat", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for human RNA-seq data?", - "json_output": { - "taxon": "human", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of reptile have sequencing platforms?", - "json_output": { - "taxon": "reptile", - "rank": "genus", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28genus%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of rat have genome assemblies?", - "json_output": { - "taxon": "rat", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rat%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the rodent include RNA-seq data?", - "json_output": { - "taxon": "rodent", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of reptile have RNA-sequencing?", - "json_output": { - "taxon": "reptile", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of mushroom have RNA-seq data?", - "json_output": { - "taxon": "mushroom", - "rank": "species", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the fungi have been sequenced?", - "json_output": { - "taxon": "fungi", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What information do we have about rodent?", - "json_output": { - "taxon": "rodent", - "intent": "record" - }, - "api_query": "https://goat.genomehubs.org/record?query=tax_tree%28%2A+rodent%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for rat have been updated recently?", - "json_output": { - "taxon": "rat", - "data_type": "genome assemblies", - "time_frame": "recently", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=recent" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rat%29+AND+assembly_span+AND+last_updated%3E%3Drecent&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What are the available RNA-seq platforms for the bird?", - "json_output": { - "taxon": "bird", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the fruit fly have been sequenced?", - "json_output": { - "taxon": "fruit fly", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of wolf have RNA-seq data?", - "json_output": { - "taxon": "wolf", - "rank": "species", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for Primate have been updated this month?", - "json_output": { - "taxon": "Primate", - "data_type": "genome assemblies", - "time_frame": "this month", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=2024-06-01" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Primate%29+AND+assembly_span+AND+last_updated%3E%3D2024-06-01&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of Borneo magnolia have genome assemblies?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for cattle include genome assemblies?", - "json_output": { - "taxon": "cat", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for cat have been updated ?", - "json_output": { - "taxon": "cat", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of mushroom have genome assemblies?", - "json_output": { - "taxon": "mushroom", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of bat have genome assemblies?", - "json_output": { - "taxon": "bat", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the wolf have genome assemblies?", - "json_output": { - "taxon": "wolf", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What is the sequencing status of the bat?", - "json_output": { - "taxon": "bat", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of cattle have sequencing platforms?", - "json_output": { - "taxon": "cat", - "rank": "genus", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+tax_rank%28genus%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of bird have genome assemblies?", - "json_output": { - "taxon": "bird", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many RNA-seq data have been produced recently?", - "json_output": { - "data_type": "RNA-seq data", - "time_frame": "recently", - "intent": "count", - "field": "sra_accession", - "time_frame_query": "last_updated>=recent" - }, - "api_query": "https://goat.genomehubs.org/count?query=sra_accession+AND+last_updated%3E%3Drecent&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the bird include RNA-seq data?", - "json_output": { - "taxon": "bird", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the Borneo magnolia have RNA-sequencing?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of gnat have RNA-sequencing?", - "json_output": { - "taxon": "gnat", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of bat have genome assemblies?", - "json_output": { - "taxon": "bat", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bat%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of spider include RNA-seq data?", - "json_output": { - "taxon": "spider", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for fungi include RNA-seq data?", - "json_output": { - "taxon": "fungi", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the fruit fly have genome assemblies?", - "json_output": { - "taxon": "fruit fly", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of bat have RNA-sequencing?", - "json_output": { - "taxon": "bat", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of mushroom have genome assemblies?", - "json_output": { - "taxon": "mushroom", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of Borneo magnolia have genome assemblies?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of cat have RNA-seq data?", - "json_output": { - "taxon": "cat", - "rank": "family", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for cattle have been updated this month?", - "json_output": { - "taxon": "cat", - "data_type": "genome assemblies", - "time_frame": "this month", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=2024-06-01" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+assembly_span+AND+last_updated%3E%3D2024-06-01&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of gnat have RNA-sequencing?", - "json_output": { - "taxon": "gnat", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the fruit fly have RNA-sequencing?", - "json_output": { - "taxon": "fruit fly", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does spider have RNA-sequencing?", - "json_output": { - "taxon": "spider", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many sequencing platforms have been produced recently?", - "json_output": { - "data_type": "sequencing platforms", - "time_frame": "recently", - "intent": "count", - "field": "platform", - "time_frame_query": "last_updated>=recent" - }, - "api_query": "https://goat.genomehubs.org/count?query=platform+AND+last_updated%3E%3Drecent&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of spider have RNA-seq data?", - "json_output": { - "taxon": "spider", - "rank": "order", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+spider%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of rodent include RNA-seq data?", - "json_output": { - "taxon": "rodent", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for fruit fly have been updated recently?", - "json_output": { - "taxon": "fruit fly", - "data_type": "genome assemblies", - "time_frame": "recently", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=recent" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fruit+fly%29+AND+assembly_span+AND+last_updated%3E%3Drecent&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the Borneo magnolia have RNA-sequencing?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of Borneo magnolia have sequencing platforms?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "genus", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28genus%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the rat have been sequenced?", - "json_output": { - "taxon": "rat", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the bat have RNA-sequencing?", - "json_output": { - "taxon": "bat", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the fungi have genome assemblies?", - "json_output": { - "taxon": "fungi", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of Borneo magnolia have genome assemblies?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of fruit fly have genome assemblies?", - "json_output": { - "taxon": "fruit fly", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of cattle have genome assemblies?", - "json_output": { - "taxon": "cat", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What are the available RNA-seq platforms for the mushroom?", - "json_output": { - "taxon": "mushroom", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of fungi have genome assemblies?", - "json_output": { - "taxon": "fungi", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the rat have RNA-sequencing?", - "json_output": { - "taxon": "rat", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the reptile have RNA-sequencing?", - "json_output": { - "taxon": "reptile", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for cat have been updated recently?", - "json_output": { - "taxon": "cat", - "data_type": "genome assemblies", - "time_frame": "recently", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=recent" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+assembly_span+AND+last_updated%3E%3Drecent&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of bird include RNA-seq data?", - "json_output": { - "taxon": "bird", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of spider have been sequenced?", - "json_output": { - "taxon": "spider", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of bat have RNA-sequencing?", - "json_output": { - "taxon": "bat", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of cattle have genome assemblies?", - "json_output": { - "taxon": "cat", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for fruit fly have been updated this month?", - "json_output": { - "taxon": "fruit fly", - "data_type": "genome assemblies", - "time_frame": "this month", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=2024-06-01" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fruit+fly%29+AND+assembly_span+AND+last_updated%3E%3D2024-06-01&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of Primate have genome assemblies?", - "json_output": { - "taxon": "Primate", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does Borneo magnolia include RNA-seq data?", - "json_output": { - "taxon": "Borneo magnolia", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of cat have genome assemblies?", - "json_output": { - "taxon": "cat", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many sequencing platforms have been produced this month?", - "json_output": { - "data_type": "sequencing platforms", - "time_frame": "this month", - "intent": "count", - "field": "platform", - "time_frame_query": "last_updated>=2024-06-01" - }, - "api_query": "https://goat.genomehubs.org/count?query=platform+AND+last_updated%3E%3D2024-06-01&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the rat have been sequenced?", - "json_output": { - "taxon": "rat", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of gnat have sequencing platforms?", - "json_output": { - "taxon": "gnat", - "rank": "genus", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28genus%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the fruit fly have RNA-sequencing?", - "json_output": { - "taxon": "fruit fly", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the gnat have genome assemblies?", - "json_output": { - "taxon": "gnat", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for spider have been updated ?", - "json_output": { - "taxon": "spider", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+spider%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of human include RNA-seq data?", - "json_output": { - "taxon": "human", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of cattle have genome assemblies?", - "json_output": { - "taxon": "cat", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the bird have RNA-sequencing?", - "json_output": { - "taxon": "bird", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the mushroom have been sequenced?", - "json_output": { - "taxon": "mushroom", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of rodent have RNA-seq data?", - "json_output": { - "taxon": "rodent", - "rank": "family", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What is the sequencing status of the Primate?", - "json_output": { - "taxon": "Primate", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of cat include RNA-seq data?", - "json_output": { - "taxon": "cat", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of cat have genome assemblies?", - "json_output": { - "taxon": "cat", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of gnat have RNA-seq data?", - "json_output": { - "taxon": "gnat", - "rank": "genus", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for fruit fly RNA-seq data?", - "json_output": { - "taxon": "fruit fly", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of fruit fly have RNA-sequencing?", - "json_output": { - "taxon": "fruit fly", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the cat have been sequenced?", - "json_output": { - "taxon": "cat", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the mushroom have genome assemblies?", - "json_output": { - "taxon": "mushroom", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the fruit fly have genome assemblies?", - "json_output": { - "taxon": "fruit fly", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of human have RNA-sequencing?", - "json_output": { - "taxon": "human", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of mushroom have genome assemblies?", - "json_output": { - "taxon": "mushroom", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the fruit fly include RNA-seq data?", - "json_output": { - "taxon": "fruit fly", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of mushroom have RNA-seq data?", - "json_output": { - "taxon": "mushroom", - "rank": "order", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the rat have been sequenced?", - "json_output": { - "taxon": "rat", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of bat have genome assemblies?", - "json_output": { - "taxon": "bat", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the wolf include RNA-seq data?", - "json_output": { - "taxon": "wolf", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the human have genome assemblies?", - "json_output": { - "taxon": "human", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the fungi have genome assemblies?", - "json_output": { - "taxon": "fungi", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of Borneo magnolia have been sequenced?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the mushroom have been sequenced?", - "json_output": { - "taxon": "mushroom", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the Primate have RNA-sequencing?", - "json_output": { - "taxon": "Primate", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the bird have RNA-sequencing?", - "json_output": { - "taxon": "bird", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for cattle sequencing platforms?", - "json_output": { - "taxon": "cat", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of cat have RNA-seq data?", - "json_output": { - "taxon": "cat", - "rank": "order", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of bird have genome assemblies?", - "json_output": { - "taxon": "bird", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bird%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of rodent have been sequenced?", - "json_output": { - "taxon": "rodent", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of Primate have genome assemblies?", - "json_output": { - "taxon": "Primate", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of wolf have genome assemblies?", - "json_output": { - "taxon": "wolf", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of spider have RNA-seq data?", - "json_output": { - "taxon": "spider", - "rank": "family", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+spider%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the Primate have RNA-sequencing?", - "json_output": { - "taxon": "Primate", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of fungi have genome assemblies?", - "json_output": { - "taxon": "fungi", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of bat have sequencing platforms?", - "json_output": { - "taxon": "bat", - "rank": "species", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bat%29+AND+tax_rank%28species%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What is the sequencing status of the cattle?", - "json_output": { - "taxon": "cat", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of mushroom have genome assemblies?", - "json_output": { - "taxon": "mushroom", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of cat have been sequenced?", - "json_output": { - "taxon": "cat", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of fruit fly have genome assemblies?", - "json_output": { - "taxon": "fruit fly", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of wolf have genome assemblies?", - "json_output": { - "taxon": "wolf", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of bird have been sequenced?", - "json_output": { - "taxon": "bird", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of Borneo magnolia have genome assemblies?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of gnat have genome assemblies?", - "json_output": { - "taxon": "gnat", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of fruit fly have genome assemblies?", - "json_output": { - "taxon": "fruit fly", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for bird genome assemblies?", - "json_output": { - "taxon": "bird", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for cat include sequencing platforms?", - "json_output": { - "taxon": "cat", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does fruit fly have RNA-sequencing?", - "json_output": { - "taxon": "fruit fly", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does rat have been sequenced?", - "json_output": { - "taxon": "rat", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What are the available RNA-seq platforms for the bat?", - "json_output": { - "taxon": "bat", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the bird have genome assemblies?", - "json_output": { - "taxon": "bird", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the rodent have been sequenced?", - "json_output": { - "taxon": "rodent", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for fungi include genome assemblies?", - "json_output": { - "taxon": "fungi", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of reptile include RNA-seq data?", - "json_output": { - "taxon": "reptile", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the reptile have RNA-sequencing?", - "json_output": { - "taxon": "reptile", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of cat have genome assemblies?", - "json_output": { - "taxon": "cat", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for Borneo magnolia include genome assemblies?", - "json_output": { - "taxon": "Borneo magnolia", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of mushroom have RNA-sequencing?", - "json_output": { - "taxon": "mushroom", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of bat include RNA-seq data?", - "json_output": { - "taxon": "bat", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of spider include RNA-seq data?", - "json_output": { - "taxon": "spider", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of spider have sequencing platforms?", - "json_output": { - "taxon": "spider", - "rank": "family", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+spider%29+AND+tax_rank%28family%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for cattle include sequencing platforms?", - "json_output": { - "taxon": "cat", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of mushroom have been sequenced?", - "json_output": { - "taxon": "mushroom", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of Borneo magnolia have been sequenced?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does Borneo magnolia have RNA-sequencing?", - "json_output": { - "taxon": "Borneo magnolia", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does bird have RNA-sequencing?", - "json_output": { - "taxon": "bird", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of fruit fly have been sequenced?", - "json_output": { - "taxon": "fruit fly", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of spider include RNA-seq data?", - "json_output": { - "taxon": "spider", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the spider have RNA-sequencing?", - "json_output": { - "taxon": "spider", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of spider have RNA-sequencing?", - "json_output": { - "taxon": "spider", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What are the available RNA-seq platforms for the wolf?", - "json_output": { - "taxon": "wolf", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the wolf have RNA-sequencing?", - "json_output": { - "taxon": "wolf", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of mushroom have been sequenced?", - "json_output": { - "taxon": "mushroom", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for rodent include genome assemblies?", - "json_output": { - "taxon": "rodent", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of bird include RNA-seq data?", - "json_output": { - "taxon": "bird", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of cattle have RNA-sequencing?", - "json_output": { - "taxon": "cat", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the bat have been sequenced?", - "json_output": { - "taxon": "bat", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of mushroom have sequencing platforms?", - "json_output": { - "taxon": "mushroom", - "rank": "genus", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28genus%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for bat have been updated this month?", - "json_output": { - "taxon": "bat", - "data_type": "genome assemblies", - "time_frame": "this month", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=2024-06-01" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bat%29+AND+assembly_span+AND+last_updated%3E%3D2024-06-01&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the bat have genome assemblies?", - "json_output": { - "taxon": "bat", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the rodent have been sequenced?", - "json_output": { - "taxon": "rodent", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of rodent have RNA-seq data?", - "json_output": { - "taxon": "rodent", - "rank": "genus", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of reptile have RNA-seq data?", - "json_output": { - "taxon": "reptile", - "rank": "family", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for bat include genome assemblies?", - "json_output": { - "taxon": "bat", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of human have been sequenced?", - "json_output": { - "taxon": "human", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the gnat include RNA-seq data?", - "json_output": { - "taxon": "gnat", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for human include genome assemblies?", - "json_output": { - "taxon": "human", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for rat have been updated ?", - "json_output": { - "taxon": "rat", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rat%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What is the sequencing status of the gnat?", - "json_output": { - "taxon": "gnat", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of rodent have sequencing platforms?", - "json_output": { - "taxon": "rodent", - "rank": "family", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28family%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of mushroom include RNA-seq data?", - "json_output": { - "taxon": "mushroom", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for gnat genome assemblies?", - "json_output": { - "taxon": "gnat", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the fungi have genome assemblies?", - "json_output": { - "taxon": "fungi", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of Borneo magnolia have RNA-sequencing?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the rodent include RNA-seq data?", - "json_output": { - "taxon": "rodent", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the rodent have genome assemblies?", - "json_output": { - "taxon": "rodent", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the cattle include RNA-seq data?", - "json_output": { - "taxon": "cat", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of bat have sequencing platforms?", - "json_output": { - "taxon": "bat", - "rank": "genus", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bat%29+AND+tax_rank%28genus%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of reptile have genome assemblies?", - "json_output": { - "taxon": "reptile", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of rat have sequencing platforms?", - "json_output": { - "taxon": "rat", - "rank": "order", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rat%29+AND+tax_rank%28order%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of bird have RNA-seq data?", - "json_output": { - "taxon": "bird", - "rank": "family", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bird%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for gnat include sequencing platforms?", - "json_output": { - "taxon": "gnat", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does Primate have RNA-sequencing?", - "json_output": { - "taxon": "Primate", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of wolf include RNA-seq data?", - "json_output": { - "taxon": "wolf", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of Primate include RNA-seq data?", - "json_output": { - "taxon": "Primate", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does gnat have genome assemblies?", - "json_output": { - "taxon": "gnat", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for Borneo magnolia have been updated recently?", - "json_output": { - "taxon": "Borneo magnolia", - "data_type": "genome assemblies", - "time_frame": "recently", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=recent" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Borneo+magnolia%29+AND+assembly_span+AND+last_updated%3E%3Drecent&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the reptile have genome assemblies?", - "json_output": { - "taxon": "reptile", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What are the available RNA-seq platforms for the cat?", - "json_output": { - "taxon": "cat", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of gnat have genome assemblies?", - "json_output": { - "taxon": "gnat", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for wolf have been updated recently?", - "json_output": { - "taxon": "wolf", - "data_type": "genome assemblies", - "time_frame": "recently", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=recent" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+wolf%29+AND+assembly_span+AND+last_updated%3E%3Drecent&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does bat have RNA-sequencing?", - "json_output": { - "taxon": "bat", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the cattle have RNA-sequencing?", - "json_output": { - "taxon": "cat", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the bat include RNA-seq data?", - "json_output": { - "taxon": "bat", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for rat sequencing platforms?", - "json_output": { - "taxon": "rat", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of reptile have genome assemblies?", - "json_output": { - "taxon": "reptile", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the Primate include RNA-seq data?", - "json_output": { - "taxon": "Primate", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the fruit fly have RNA-sequencing?", - "json_output": { - "taxon": "fruit fly", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of human have genome assemblies?", - "json_output": { - "taxon": "human", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of spider have genome assemblies?", - "json_output": { - "taxon": "spider", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the spider have RNA-sequencing?", - "json_output": { - "taxon": "spider", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of cattle have RNA-sequencing?", - "json_output": { - "taxon": "cat", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of Primate include RNA-seq data?", - "json_output": { - "taxon": "Primate", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of Primate have RNA-seq data?", - "json_output": { - "taxon": "Primate", - "rank": "species", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of spider have genome assemblies?", - "json_output": { - "taxon": "spider", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does human have genome assemblies?", - "json_output": { - "taxon": "human", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of Primate have sequencing platforms?", - "json_output": { - "taxon": "Primate", - "rank": "family", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28family%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for rodent RNA-seq data?", - "json_output": { - "taxon": "rodent", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of fungi have been sequenced?", - "json_output": { - "taxon": "fungi", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for fruit fly genome assemblies?", - "json_output": { - "taxon": "fruit fly", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for bat RNA-seq data?", - "json_output": { - "taxon": "bat", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the bird include RNA-seq data?", - "json_output": { - "taxon": "bird", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of bat have been sequenced?", - "json_output": { - "taxon": "bat", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does rodent include RNA-seq data?", - "json_output": { - "taxon": "rodent", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of fruit fly have sequencing platforms?", - "json_output": { - "taxon": "fruit fly", - "rank": "genus", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28genus%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the cattle have genome assemblies?", - "json_output": { - "taxon": "cat", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for mushroom have been updated recently?", - "json_output": { - "taxon": "mushroom", - "data_type": "genome assemblies", - "time_frame": "recently", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=recent" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+mushroom%29+AND+assembly_span+AND+last_updated%3E%3Drecent&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of bat have genome assemblies?", - "json_output": { - "taxon": "bat", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of cat have sequencing platforms?", - "json_output": { - "taxon": "cat", - "rank": "order", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+tax_rank%28order%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the fruit fly include RNA-seq data?", - "json_output": { - "taxon": "fruit fly", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of human have been sequenced?", - "json_output": { - "taxon": "human", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of Primate have genome assemblies?", - "json_output": { - "taxon": "Primate", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of reptile have been sequenced?", - "json_output": { - "taxon": "reptile", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What information do we have about cat?", - "json_output": { - "taxon": "cat", - "intent": "record" - }, - "api_query": "https://goat.genomehubs.org/record?query=tax_tree%28%2A+cat%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the Borneo magnolia have been sequenced?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for reptile include sequencing platforms?", - "json_output": { - "taxon": "reptile", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of Primate have been sequenced?", - "json_output": { - "taxon": "Primate", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of reptile have genome assemblies?", - "json_output": { - "taxon": "reptile", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the bat have RNA-sequencing?", - "json_output": { - "taxon": "bat", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the cattle have been sequenced?", - "json_output": { - "taxon": "cat", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for cattle include RNA-seq data?", - "json_output": { - "taxon": "cat", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the cat have RNA-sequencing?", - "json_output": { - "taxon": "cat", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the spider have been sequenced?", - "json_output": { - "taxon": "spider", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the spider have genome assemblies?", - "json_output": { - "taxon": "spider", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for bat have been updated recently?", - "json_output": { - "taxon": "bat", - "data_type": "genome assemblies", - "time_frame": "recently", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=recent" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bat%29+AND+assembly_span+AND+last_updated%3E%3Drecent&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the fungi have RNA-sequencing?", - "json_output": { - "taxon": "fungi", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of gnat have been sequenced?", - "json_output": { - "taxon": "gnat", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the cattle have been sequenced?", - "json_output": { - "taxon": "cat", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the wolf include RNA-seq data?", - "json_output": { - "taxon": "wolf", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the mushroom include RNA-seq data?", - "json_output": { - "taxon": "mushroom", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of bird have RNA-seq data?", - "json_output": { - "taxon": "bird", - "rank": "genus", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bird%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of wolf have genome assemblies?", - "json_output": { - "taxon": "wolf", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of spider have RNA-sequencing?", - "json_output": { - "taxon": "spider", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for wolf include genome assemblies?", - "json_output": { - "taxon": "wolf", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of fungi have RNA-seq data?", - "json_output": { - "taxon": "fungi", - "rank": "family", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of cattle have RNA-seq data?", - "json_output": { - "taxon": "cat", - "rank": "genus", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the bat have genome assemblies?", - "json_output": { - "taxon": "bat", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the reptile have been sequenced?", - "json_output": { - "taxon": "reptile", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of wolf have sequencing platforms?", - "json_output": { - "taxon": "wolf", - "rank": "family", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28family%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of bat include RNA-seq data?", - "json_output": { - "taxon": "bat", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What is the sequencing status of the spider?", - "json_output": { - "taxon": "spider", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the wolf have genome assemblies?", - "json_output": { - "taxon": "wolf", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for cattle RNA-seq data?", - "json_output": { - "taxon": "cat", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for fungi sequencing platforms?", - "json_output": { - "taxon": "fungi", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does rat have genome assemblies?", - "json_output": { - "taxon": "rat", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the gnat have genome assemblies?", - "json_output": { - "taxon": "gnat", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of cat have sequencing platforms?", - "json_output": { - "taxon": "cat", - "rank": "genus", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+tax_rank%28genus%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of human have been sequenced?", - "json_output": { - "taxon": "human", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of cat have genome assemblies?", - "json_output": { - "taxon": "cat", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of spider have been sequenced?", - "json_output": { - "taxon": "spider", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of Borneo magnolia have been sequenced?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for Primate sequencing platforms?", - "json_output": { - "taxon": "Primate", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of bat have genome assemblies?", - "json_output": { - "taxon": "bat", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bat%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for human have been updated ?", - "json_output": { - "taxon": "human", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+human%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of bird have RNA-seq data?", - "json_output": { - "taxon": "bird", - "rank": "order", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bird%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of cat have sequencing platforms?", - "json_output": { - "taxon": "cat", - "rank": "species", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+tax_rank%28species%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of rat have genome assemblies?", - "json_output": { - "taxon": "rat", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does bird include RNA-seq data?", - "json_output": { - "taxon": "bird", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the bird have genome assemblies?", - "json_output": { - "taxon": "bird", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of gnat have RNA-seq data?", - "json_output": { - "taxon": "gnat", - "rank": "family", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of rodent have been sequenced?", - "json_output": { - "taxon": "rodent", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of cattle have been sequenced?", - "json_output": { - "taxon": "cat", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of wolf have been sequenced?", - "json_output": { - "taxon": "wolf", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the Primate have genome assemblies?", - "json_output": { - "taxon": "Primate", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for Primate have been updated recently?", - "json_output": { - "taxon": "Primate", - "data_type": "genome assemblies", - "time_frame": "recently", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=recent" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Primate%29+AND+assembly_span+AND+last_updated%3E%3Drecent&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the spider include RNA-seq data?", - "json_output": { - "taxon": "spider", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of rodent have sequencing platforms?", - "json_output": { - "taxon": "rodent", - "rank": "genus", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28genus%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the bat include RNA-seq data?", - "json_output": { - "taxon": "bat", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of fruit fly have RNA-seq data?", - "json_output": { - "taxon": "fruit fly", - "rank": "family", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the fungi have RNA-sequencing?", - "json_output": { - "taxon": "fungi", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the cattle have RNA-sequencing?", - "json_output": { - "taxon": "cat", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What information do we have about rat?", - "json_output": { - "taxon": "rat", - "intent": "record" - }, - "api_query": "https://goat.genomehubs.org/record?query=tax_tree%28%2A+rat%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What is the sequencing status of the mushroom?", - "json_output": { - "taxon": "mushroom", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the cattle include RNA-seq data?", - "json_output": { - "taxon": "cat", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the fungi have been sequenced?", - "json_output": { - "taxon": "fungi", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of rat have genome assemblies?", - "json_output": { - "taxon": "rat", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rat%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the mushroom include RNA-seq data?", - "json_output": { - "taxon": "mushroom", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for reptile include genome assemblies?", - "json_output": { - "taxon": "reptile", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for Primate RNA-seq data?", - "json_output": { - "taxon": "Primate", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the rat include RNA-seq data?", - "json_output": { - "taxon": "rat", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of fungi have genome assemblies?", - "json_output": { - "taxon": "fungi", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the rat have genome assemblies?", - "json_output": { - "taxon": "rat", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for rat include RNA-seq data?", - "json_output": { - "taxon": "rat", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of bird have RNA-sequencing?", - "json_output": { - "taxon": "bird", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does Primate include RNA-seq data?", - "json_output": { - "taxon": "Primate", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the bird have been sequenced?", - "json_output": { - "taxon": "bird", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the spider have been sequenced?", - "json_output": { - "taxon": "spider", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of rodent have RNA-sequencing?", - "json_output": { - "taxon": "rodent", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of mushroom include RNA-seq data?", - "json_output": { - "taxon": "mushroom", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of rat have been sequenced?", - "json_output": { - "taxon": "rat", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of spider have genome assemblies?", - "json_output": { - "taxon": "spider", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the fruit fly include RNA-seq data?", - "json_output": { - "taxon": "fruit fly", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the fungi have been sequenced?", - "json_output": { - "taxon": "fungi", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of human have sequencing platforms?", - "json_output": { - "taxon": "human", - "rank": "family", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+human%29+AND+tax_rank%28family%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for wolf have been updated this month?", - "json_output": { - "taxon": "wolf", - "data_type": "genome assemblies", - "time_frame": "this month", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=2024-06-01" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+wolf%29+AND+assembly_span+AND+last_updated%3E%3D2024-06-01&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of rodent have been sequenced?", - "json_output": { - "taxon": "rodent", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the cat have been sequenced?", - "json_output": { - "taxon": "cat", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the cattle have been sequenced?", - "json_output": { - "taxon": "cat", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of reptile have RNA-seq data?", - "json_output": { - "taxon": "reptile", - "rank": "order", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for fungi include sequencing platforms?", - "json_output": { - "taxon": "fungi", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the Primate have genome assemblies?", - "json_output": { - "taxon": "Primate", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of reptile include RNA-seq data?", - "json_output": { - "taxon": "reptile", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of fruit fly have RNA-seq data?", - "json_output": { - "taxon": "fruit fly", - "rank": "genus", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the bat have genome assemblies?", - "json_output": { - "taxon": "bat", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of bird include RNA-seq data?", - "json_output": { - "taxon": "bird", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of Borneo magnolia have RNA-sequencing?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of fungi have RNA-sequencing?", - "json_output": { - "taxon": "fungi", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for spider have been updated this month?", - "json_output": { - "taxon": "spider", - "data_type": "genome assemblies", - "time_frame": "this month", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=2024-06-01" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+spider%29+AND+assembly_span+AND+last_updated%3E%3D2024-06-01&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of Primate have RNA-sequencing?", - "json_output": { - "taxon": "Primate", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the cattle have genome assemblies?", - "json_output": { - "taxon": "cat", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of human have genome assemblies?", - "json_output": { - "taxon": "human", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+human%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of mushroom have sequencing platforms?", - "json_output": { - "taxon": "mushroom", - "rank": "species", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28species%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of bat have RNA-sequencing?", - "json_output": { - "taxon": "bat", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of cattle have been sequenced?", - "json_output": { - "taxon": "cat", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of spider have RNA-seq data?", - "json_output": { - "taxon": "spider", - "rank": "species", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+spider%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of cattle have sequencing platforms?", - "json_output": { - "taxon": "cat", - "rank": "species", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+tax_rank%28species%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of fungi have RNA-seq data?", - "json_output": { - "taxon": "fungi", - "rank": "genus", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of spider have genome assemblies?", - "json_output": { - "taxon": "spider", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+spider%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for rodent have been updated ?", - "json_output": { - "taxon": "rodent", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rodent%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the rodent have genome assemblies?", - "json_output": { - "taxon": "rodent", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for human sequencing platforms?", - "json_output": { - "taxon": "human", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of fruit fly have sequencing platforms?", - "json_output": { - "taxon": "fruit fly", - "rank": "family", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28family%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the mushroom include RNA-seq data?", - "json_output": { - "taxon": "mushroom", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for gnat have been updated ?", - "json_output": { - "taxon": "gnat", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+gnat%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of gnat have genome assemblies?", - "json_output": { - "taxon": "gnat", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the mushroom have been sequenced?", - "json_output": { - "taxon": "mushroom", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of cattle have RNA-seq data?", - "json_output": { - "taxon": "cat", - "rank": "species", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the wolf have genome assemblies?", - "json_output": { - "taxon": "wolf", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of bat have RNA-seq data?", - "json_output": { - "taxon": "bat", - "rank": "family", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bat%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the spider have genome assemblies?", - "json_output": { - "taxon": "spider", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the bird have been sequenced?", - "json_output": { - "taxon": "bird", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the fruit fly have RNA-sequencing?", - "json_output": { - "taxon": "fruit fly", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the gnat have been sequenced?", - "json_output": { - "taxon": "gnat", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the fungi include RNA-seq data?", - "json_output": { - "taxon": "fungi", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of wolf have been sequenced?", - "json_output": { - "taxon": "wolf", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of bat have been sequenced?", - "json_output": { - "taxon": "bat", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What is the sequencing status of the rat?", - "json_output": { - "taxon": "rat", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the rat have genome assemblies?", - "json_output": { - "taxon": "rat", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of cattle have RNA-seq data?", - "json_output": { - "taxon": "cat", - "rank": "order", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of fruit fly have been sequenced?", - "json_output": { - "taxon": "fruit fly", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What information do we have about bird?", - "json_output": { - "taxon": "bird", - "intent": "record" - }, - "api_query": "https://goat.genomehubs.org/record?query=tax_tree%28%2A+bird%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for gnat include RNA-seq data?", - "json_output": { - "taxon": "gnat", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of cattle include RNA-seq data?", - "json_output": { - "taxon": "cat", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does reptile have been sequenced?", - "json_output": { - "taxon": "reptile", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of fruit fly have genome assemblies?", - "json_output": { - "taxon": "fruit fly", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What information do we have about mushroom?", - "json_output": { - "taxon": "mushroom", - "intent": "record" - }, - "api_query": "https://goat.genomehubs.org/record?query=tax_tree%28%2A+mushroom%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of gnat include RNA-seq data?", - "json_output": { - "taxon": "gnat", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of cat have RNA-seq data?", - "json_output": { - "taxon": "cat", - "rank": "genus", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of Borneo magnolia have genome assemblies?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of spider have been sequenced?", - "json_output": { - "taxon": "spider", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for spider have been updated recently?", - "json_output": { - "taxon": "spider", - "data_type": "genome assemblies", - "time_frame": "recently", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=recent" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+spider%29+AND+assembly_span+AND+last_updated%3E%3Drecent&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the cattle have genome assemblies?", - "json_output": { - "taxon": "cat", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the cattle have RNA-sequencing?", - "json_output": { - "taxon": "cat", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for fruit fly include sequencing platforms?", - "json_output": { - "taxon": "fruit fly", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the bat have RNA-sequencing?", - "json_output": { - "taxon": "bat", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for bird have been updated ?", - "json_output": { - "taxon": "bird", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bird%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the mushroom have been sequenced?", - "json_output": { - "taxon": "mushroom", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does mushroom have been sequenced?", - "json_output": { - "taxon": "mushroom", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for spider include sequencing platforms?", - "json_output": { - "taxon": "spider", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of rat have RNA-sequencing?", - "json_output": { - "taxon": "rat", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of human have genome assemblies?", - "json_output": { - "taxon": "human", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+human%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What information do we have about human?", - "json_output": { - "taxon": "human", - "intent": "record" - }, - "api_query": "https://goat.genomehubs.org/record?query=tax_tree%28%2A+human%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of fruit fly have RNA-seq data?", - "json_output": { - "taxon": "fruit fly", - "rank": "species", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What are the available RNA-seq platforms for the spider?", - "json_output": { - "taxon": "spider", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for fungi have been updated this month?", - "json_output": { - "taxon": "fungi", - "data_type": "genome assemblies", - "time_frame": "this month", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=2024-06-01" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fungi%29+AND+assembly_span+AND+last_updated%3E%3D2024-06-01&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does bat include RNA-seq data?", - "json_output": { - "taxon": "bat", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does wolf have genome assemblies?", - "json_output": { - "taxon": "wolf", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the reptile have RNA-sequencing?", - "json_output": { - "taxon": "reptile", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of bird have genome assemblies?", - "json_output": { - "taxon": "bird", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of Borneo magnolia have RNA-sequencing?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of fruit fly include RNA-seq data?", - "json_output": { - "taxon": "fruit fly", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does rodent have RNA-sequencing?", - "json_output": { - "taxon": "rodent", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of Primate have genome assemblies?", - "json_output": { - "taxon": "Primate", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for fruit fly sequencing platforms?", - "json_output": { - "taxon": "fruit fly", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of cat include RNA-seq data?", - "json_output": { - "taxon": "cat", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of fungi have RNA-sequencing?", - "json_output": { - "taxon": "fungi", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of reptile have RNA-sequencing?", - "json_output": { - "taxon": "reptile", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the mushroom have genome assemblies?", - "json_output": { - "taxon": "mushroom", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of fungi include RNA-seq data?", - "json_output": { - "taxon": "fungi", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for wolf genome assemblies?", - "json_output": { - "taxon": "wolf", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What is the sequencing status of the cat?", - "json_output": { - "taxon": "cat", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of Primate have been sequenced?", - "json_output": { - "taxon": "Primate", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of cattle have genome assemblies?", - "json_output": { - "taxon": "cat", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the human have RNA-sequencing?", - "json_output": { - "taxon": "human", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of mushroom include RNA-seq data?", - "json_output": { - "taxon": "mushroom", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of fruit fly have sequencing platforms?", - "json_output": { - "taxon": "fruit fly", - "rank": "species", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28species%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for mushroom include RNA-seq data?", - "json_output": { - "taxon": "mushroom", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for bird include sequencing platforms?", - "json_output": { - "taxon": "bird", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of mushroom have been sequenced?", - "json_output": { - "taxon": "mushroom", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of bird have genome assemblies?", - "json_output": { - "taxon": "bird", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does cattle have genome assemblies?", - "json_output": { - "taxon": "cat", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for Primate have been updated ?", - "json_output": { - "taxon": "Primate", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Primate%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What are the available RNA-seq platforms for the human?", - "json_output": { - "taxon": "human", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of human include RNA-seq data?", - "json_output": { - "taxon": "human", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does cat include RNA-seq data?", - "json_output": { - "taxon": "cat", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of human have genome assemblies?", - "json_output": { - "taxon": "human", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for mushroom include genome assemblies?", - "json_output": { - "taxon": "mushroom", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the wolf have been sequenced?", - "json_output": { - "taxon": "wolf", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of fungi include RNA-seq data?", - "json_output": { - "taxon": "fungi", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for bat include sequencing platforms?", - "json_output": { - "taxon": "bat", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the Borneo magnolia include RNA-seq data?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for reptile include RNA-seq data?", - "json_output": { - "taxon": "reptile", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the Primate have RNA-sequencing?", - "json_output": { - "taxon": "Primate", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the rodent have been sequenced?", - "json_output": { - "taxon": "rodent", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the mushroom have genome assemblies?", - "json_output": { - "taxon": "mushroom", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of wolf have genome assemblies?", - "json_output": { - "taxon": "wolf", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the fungi have genome assemblies?", - "json_output": { - "taxon": "fungi", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of bat have been sequenced?", - "json_output": { - "taxon": "bat", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of bat have been sequenced?", - "json_output": { - "taxon": "bat", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for cattle have been updated ?", - "json_output": { - "taxon": "cat", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of gnat include RNA-seq data?", - "json_output": { - "taxon": "gnat", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does rodent have been sequenced?", - "json_output": { - "taxon": "rodent", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for human include sequencing platforms?", - "json_output": { - "taxon": "human", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of mushroom have sequencing platforms?", - "json_output": { - "taxon": "mushroom", - "rank": "order", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28order%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the Borneo magnolia have RNA-sequencing?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of wolf have been sequenced?", - "json_output": { - "taxon": "wolf", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does human include RNA-seq data?", - "json_output": { - "taxon": "human", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of cat have sequencing platforms?", - "json_output": { - "taxon": "cat", - "rank": "family", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+tax_rank%28family%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for Borneo magnolia sequencing platforms?", - "json_output": { - "taxon": "Borneo magnolia", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for cat sequencing platforms?", - "json_output": { - "taxon": "cat", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of rat include RNA-seq data?", - "json_output": { - "taxon": "rat", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does fruit fly include RNA-seq data?", - "json_output": { - "taxon": "fruit fly", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the cat include RNA-seq data?", - "json_output": { - "taxon": "cat", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of reptile have been sequenced?", - "json_output": { - "taxon": "reptile", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does gnat have been sequenced?", - "json_output": { - "taxon": "gnat", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of cattle have RNA-seq data?", - "json_output": { - "taxon": "cat", - "rank": "family", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of wolf have RNA-sequencing?", - "json_output": { - "taxon": "wolf", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of cat have genome assemblies?", - "json_output": { - "taxon": "cat", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the rodent have been sequenced?", - "json_output": { - "taxon": "rodent", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the human have been sequenced?", - "json_output": { - "taxon": "human", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the Primate include RNA-seq data?", - "json_output": { - "taxon": "Primate", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of spider have sequencing platforms?", - "json_output": { - "taxon": "spider", - "rank": "species", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+spider%29+AND+tax_rank%28species%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of spider have RNA-seq data?", - "json_output": { - "taxon": "spider", - "rank": "genus", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+spider%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the rat include RNA-seq data?", - "json_output": { - "taxon": "rat", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the gnat have genome assemblies?", - "json_output": { - "taxon": "gnat", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the gnat include RNA-seq data?", - "json_output": { - "taxon": "gnat", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of human have sequencing platforms?", - "json_output": { - "taxon": "human", - "rank": "genus", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+human%29+AND+tax_rank%28genus%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the gnat have been sequenced?", - "json_output": { - "taxon": "gnat", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the rodent include RNA-seq data?", - "json_output": { - "taxon": "rodent", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the cattle have been sequenced?", - "json_output": { - "taxon": "cat", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the fungi include RNA-seq data?", - "json_output": { - "taxon": "fungi", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does rat have RNA-sequencing?", - "json_output": { - "taxon": "rat", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of cat have been sequenced?", - "json_output": { - "taxon": "cat", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of Primate have sequencing platforms?", - "json_output": { - "taxon": "Primate", - "rank": "species", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28species%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for bird RNA-seq data?", - "json_output": { - "taxon": "bird", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What is the sequencing status of the fungi?", - "json_output": { - "taxon": "fungi", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the Primate include RNA-seq data?", - "json_output": { - "taxon": "Primate", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of Primate have RNA-sequencing?", - "json_output": { - "taxon": "Primate", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of fungi have been sequenced?", - "json_output": { - "taxon": "fungi", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for gnat have been updated recently?", - "json_output": { - "taxon": "gnat", - "data_type": "genome assemblies", - "time_frame": "recently", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=recent" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+gnat%29+AND+assembly_span+AND+last_updated%3E%3Drecent&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What information do we have about bat?", - "json_output": { - "taxon": "bat", - "intent": "record" - }, - "api_query": "https://goat.genomehubs.org/record?query=tax_tree%28%2A+bat%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the Primate have been sequenced?", - "json_output": { - "taxon": "Primate", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the cat have genome assemblies?", - "json_output": { - "taxon": "cat", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of reptile have sequencing platforms?", - "json_output": { - "taxon": "reptile", - "rank": "order", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28order%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of gnat have RNA-sequencing?", - "json_output": { - "taxon": "gnat", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of cattle have genome assemblies?", - "json_output": { - "taxon": "cat", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of mushroom have RNA-sequencing?", - "json_output": { - "taxon": "mushroom", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of human have RNA-seq data?", - "json_output": { - "taxon": "human", - "rank": "order", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+human%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the bird have genome assemblies?", - "json_output": { - "taxon": "bird", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does fungi have genome assemblies?", - "json_output": { - "taxon": "fungi", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the rodent have RNA-sequencing?", - "json_output": { - "taxon": "rodent", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of Borneo magnolia include RNA-seq data?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of gnat have sequencing platforms?", - "json_output": { - "taxon": "gnat", - "rank": "family", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28family%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of Borneo magnolia have genome assemblies?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the wolf have RNA-sequencing?", - "json_output": { - "taxon": "wolf", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of wolf have RNA-sequencing?", - "json_output": { - "taxon": "wolf", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of Primate have sequencing platforms?", - "json_output": { - "taxon": "Primate", - "rank": "order", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28order%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of bird have been sequenced?", - "json_output": { - "taxon": "bird", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of reptile have genome assemblies?", - "json_output": { - "taxon": "reptile", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the cat have RNA-sequencing?", - "json_output": { - "taxon": "cat", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of rat have RNA-sequencing?", - "json_output": { - "taxon": "rat", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the cat have been sequenced?", - "json_output": { - "taxon": "cat", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What information do we have about gnat?", - "json_output": { - "taxon": "gnat", - "intent": "record" - }, - "api_query": "https://goat.genomehubs.org/record?query=tax_tree%28%2A+gnat%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the bird have genome assemblies?", - "json_output": { - "taxon": "bird", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What information do we have about Borneo magnolia?", - "json_output": { - "taxon": "Borneo magnolia", - "intent": "record" - }, - "api_query": "https://goat.genomehubs.org/record?query=tax_tree%28%2A+Borneo+magnolia%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of bird have sequencing platforms?", - "json_output": { - "taxon": "bird", - "rank": "family", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bird%29+AND+tax_rank%28family%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of rodent have genome assemblies?", - "json_output": { - "taxon": "rodent", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the cat include RNA-seq data?", - "json_output": { - "taxon": "cat", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the rat have RNA-sequencing?", - "json_output": { - "taxon": "rat", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for bat have been updated ?", - "json_output": { - "taxon": "bat", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bat%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What are the available RNA-seq platforms for the rodent?", - "json_output": { - "taxon": "rodent", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of Borneo magnolia have RNA-sequencing?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the rat include RNA-seq data?", - "json_output": { - "taxon": "rat", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the bat have genome assemblies?", - "json_output": { - "taxon": "bat", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What are the available RNA-seq platforms for the fungi?", - "json_output": { - "taxon": "fungi", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for Primate include sequencing platforms?", - "json_output": { - "taxon": "Primate", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of rat have been sequenced?", - "json_output": { - "taxon": "rat", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of cattle have RNA-sequencing?", - "json_output": { - "taxon": "cat", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What information do we have about fungi?", - "json_output": { - "taxon": "fungi", - "intent": "record" - }, - "api_query": "https://goat.genomehubs.org/record?query=tax_tree%28%2A+fungi%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of mushroom have RNA-seq data?", - "json_output": { - "taxon": "mushroom", - "rank": "family", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies have been produced recently?", - "json_output": { - "data_type": "genome assemblies", - "time_frame": "recently", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=recent" - }, - "api_query": "https://goat.genomehubs.org/count?query=assembly_span+AND+last_updated%3E%3Drecent&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the human have genome assemblies?", - "json_output": { - "taxon": "human", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the bird have been sequenced?", - "json_output": { - "taxon": "bird", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of human have RNA-seq data?", - "json_output": { - "taxon": "human", - "rank": "genus", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+human%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for wolf include sequencing platforms?", - "json_output": { - "taxon": "wolf", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What is the sequencing status of the rodent?", - "json_output": { - "taxon": "rodent", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for cat genome assemblies?", - "json_output": { - "taxon": "cat", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the wolf have been sequenced?", - "json_output": { - "taxon": "wolf", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of bat have genome assemblies?", - "json_output": { - "taxon": "bat", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bat%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for bird have been updated recently?", - "json_output": { - "taxon": "bird", - "data_type": "genome assemblies", - "time_frame": "recently", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=recent" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bird%29+AND+assembly_span+AND+last_updated%3E%3Drecent&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of human include RNA-seq data?", - "json_output": { - "taxon": "human", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does Primate have genome assemblies?", - "json_output": { - "taxon": "Primate", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of rat include RNA-seq data?", - "json_output": { - "taxon": "rat", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of bat have sequencing platforms?", - "json_output": { - "taxon": "bat", - "rank": "family", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bat%29+AND+tax_rank%28family%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the reptile have genome assemblies?", - "json_output": { - "taxon": "reptile", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of wolf have RNA-seq data?", - "json_output": { - "taxon": "wolf", - "rank": "family", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of rat have sequencing platforms?", - "json_output": { - "taxon": "rat", - "rank": "species", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rat%29+AND+tax_rank%28species%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of Primate have been sequenced?", - "json_output": { - "taxon": "Primate", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for rodent genome assemblies?", - "json_output": { - "taxon": "rodent", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for rodent have been updated recently?", - "json_output": { - "taxon": "rodent", - "data_type": "genome assemblies", - "time_frame": "recently", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=recent" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rodent%29+AND+assembly_span+AND+last_updated%3E%3Drecent&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the cat have genome assemblies?", - "json_output": { - "taxon": "cat", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of fungi have genome assemblies?", - "json_output": { - "taxon": "fungi", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of rat have genome assemblies?", - "json_output": { - "taxon": "rat", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the mushroom have RNA-sequencing?", - "json_output": { - "taxon": "mushroom", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does cattle have RNA-sequencing?", - "json_output": { - "taxon": "cat", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does bird have been sequenced?", - "json_output": { - "taxon": "bird", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the reptile include RNA-seq data?", - "json_output": { - "taxon": "reptile", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the gnat include RNA-seq data?", - "json_output": { - "taxon": "gnat", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of spider have sequencing platforms?", - "json_output": { - "taxon": "spider", - "rank": "order", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+spider%29+AND+tax_rank%28order%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many sequencing platforms have been produced ?", - "json_output": { - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the wolf include RNA-seq data?", - "json_output": { - "taxon": "wolf", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the bird have been sequenced?", - "json_output": { - "taxon": "bird", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for bird have been updated this month?", - "json_output": { - "taxon": "bird", - "data_type": "genome assemblies", - "time_frame": "this month", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=2024-06-01" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bird%29+AND+assembly_span+AND+last_updated%3E%3D2024-06-01&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the gnat have RNA-sequencing?", - "json_output": { - "taxon": "gnat", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the reptile have been sequenced?", - "json_output": { - "taxon": "reptile", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of reptile include RNA-seq data?", - "json_output": { - "taxon": "reptile", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the bat include RNA-seq data?", - "json_output": { - "taxon": "bat", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of cattle include RNA-seq data?", - "json_output": { - "taxon": "cat", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of cat have RNA-sequencing?", - "json_output": { - "taxon": "cat", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of fruit fly include RNA-seq data?", - "json_output": { - "taxon": "fruit fly", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of reptile have genome assemblies?", - "json_output": { - "taxon": "reptile", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for bird sequencing platforms?", - "json_output": { - "taxon": "bird", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What are the available RNA-seq platforms for the cattle?", - "json_output": { - "taxon": "cat", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the cattle include RNA-seq data?", - "json_output": { - "taxon": "cat", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of mushroom have genome assemblies?", - "json_output": { - "taxon": "mushroom", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does Borneo magnolia have genome assemblies?", - "json_output": { - "taxon": "Borneo magnolia", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the fruit fly have been sequenced?", - "json_output": { - "taxon": "fruit fly", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of wolf have RNA-sequencing?", - "json_output": { - "taxon": "wolf", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of bird have RNA-sequencing?", - "json_output": { - "taxon": "bird", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of bat have genome assemblies?", - "json_output": { - "taxon": "bat", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bat%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of bird have sequencing platforms?", - "json_output": { - "taxon": "bird", - "rank": "order", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bird%29+AND+tax_rank%28order%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of wolf include RNA-seq data?", - "json_output": { - "taxon": "wolf", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the rodent have genome assemblies?", - "json_output": { - "taxon": "rodent", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for Borneo magnolia include sequencing platforms?", - "json_output": { - "taxon": "Borneo magnolia", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for cat include RNA-seq data?", - "json_output": { - "taxon": "cat", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of Borneo magnolia have sequencing platforms?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "family", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28family%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of cattle have sequencing platforms?", - "json_output": { - "taxon": "cat", - "rank": "family", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+tax_rank%28family%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the fruit fly have been sequenced?", - "json_output": { - "taxon": "fruit fly", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of Borneo magnolia include RNA-seq data?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does fungi include RNA-seq data?", - "json_output": { - "taxon": "fungi", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the Primate have genome assemblies?", - "json_output": { - "taxon": "Primate", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of wolf include RNA-seq data?", - "json_output": { - "taxon": "wolf", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of mushroom include RNA-seq data?", - "json_output": { - "taxon": "mushroom", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of Borneo magnolia include RNA-seq data?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of mushroom have genome assemblies?", - "json_output": { - "taxon": "mushroom", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for reptile RNA-seq data?", - "json_output": { - "taxon": "reptile", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for cat include genome assemblies?", - "json_output": { - "taxon": "cat", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What information do we have about cattle?", - "json_output": { - "taxon": "cat", - "intent": "record" - }, - "api_query": "https://goat.genomehubs.org/record?query=tax_tree%28%2A+cat%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for human have been updated recently?", - "json_output": { - "taxon": "human", - "data_type": "genome assemblies", - "time_frame": "recently", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=recent" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+human%29+AND+assembly_span+AND+last_updated%3E%3Drecent&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of cattle have been sequenced?", - "json_output": { - "taxon": "cat", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of wolf have sequencing platforms?", - "json_output": { - "taxon": "wolf", - "rank": "species", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28species%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the rat include RNA-seq data?", - "json_output": { - "taxon": "rat", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the mushroom include RNA-seq data?", - "json_output": { - "taxon": "mushroom", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of reptile have genome assemblies?", - "json_output": { - "taxon": "reptile", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of bat have sequencing platforms?", - "json_output": { - "taxon": "bat", - "rank": "order", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bat%29+AND+tax_rank%28order%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of reptile have sequencing platforms?", - "json_output": { - "taxon": "reptile", - "rank": "family", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28family%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of cat have been sequenced?", - "json_output": { - "taxon": "cat", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of gnat have RNA-seq data?", - "json_output": { - "taxon": "gnat", - "rank": "species", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the Borneo magnolia have been sequenced?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does spider have been sequenced?", - "json_output": { - "taxon": "spider", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of bird have been sequenced?", - "json_output": { - "taxon": "bird", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of fruit fly have genome assemblies?", - "json_output": { - "taxon": "fruit fly", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of human have sequencing platforms?", - "json_output": { - "taxon": "human", - "rank": "order", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+human%29+AND+tax_rank%28order%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does wolf have RNA-sequencing?", - "json_output": { - "taxon": "wolf", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does Borneo magnolia have been sequenced?", - "json_output": { - "taxon": "Borneo magnolia", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of Borneo magnolia have RNA-seq data?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "species", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the gnat have been sequenced?", - "json_output": { - "taxon": "gnat", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of bat have RNA-sequencing?", - "json_output": { - "taxon": "bat", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the Primate have been sequenced?", - "json_output": { - "taxon": "Primate", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for Primate include RNA-seq data?", - "json_output": { - "taxon": "Primate", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of fruit fly have genome assemblies?", - "json_output": { - "taxon": "fruit fly", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of fungi have sequencing platforms?", - "json_output": { - "taxon": "fungi", - "rank": "species", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28species%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the human include RNA-seq data?", - "json_output": { - "taxon": "human", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does human have RNA-sequencing?", - "json_output": { - "taxon": "human", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of bird have been sequenced?", - "json_output": { - "taxon": "bird", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for cattle have been updated recently?", - "json_output": { - "taxon": "cat", - "data_type": "genome assemblies", - "time_frame": "recently", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=recent" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+assembly_span+AND+last_updated%3E%3Drecent&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of rodent have sequencing platforms?", - "json_output": { - "taxon": "rodent", - "rank": "order", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28order%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the rat have RNA-sequencing?", - "json_output": { - "taxon": "rat", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of rat have RNA-seq data?", - "json_output": { - "taxon": "rat", - "rank": "family", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rat%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of fruit fly have been sequenced?", - "json_output": { - "taxon": "fruit fly", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of gnat have sequencing platforms?", - "json_output": { - "taxon": "gnat", - "rank": "species", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28species%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for rodent include RNA-seq data?", - "json_output": { - "taxon": "rodent", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for Primate include genome assemblies?", - "json_output": { - "taxon": "Primate", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of bat have RNA-seq data?", - "json_output": { - "taxon": "bat", - "rank": "genus", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bat%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does mushroom include RNA-seq data?", - "json_output": { - "taxon": "mushroom", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of cat have genome assemblies?", - "json_output": { - "taxon": "cat", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the fruit fly have genome assemblies?", - "json_output": { - "taxon": "fruit fly", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the bird have RNA-sequencing?", - "json_output": { - "taxon": "bird", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of cat have RNA-sequencing?", - "json_output": { - "taxon": "cat", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of mushroom have RNA-sequencing?", - "json_output": { - "taxon": "mushroom", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of reptile have been sequenced?", - "json_output": { - "taxon": "reptile", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of reptile have RNA-sequencing?", - "json_output": { - "taxon": "reptile", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of Primate include RNA-seq data?", - "json_output": { - "taxon": "Primate", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of cat have RNA-sequencing?", - "json_output": { - "taxon": "cat", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the human have been sequenced?", - "json_output": { - "taxon": "human", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of Borneo magnolia have genome assemblies?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the reptile include RNA-seq data?", - "json_output": { - "taxon": "reptile", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of gnat have genome assemblies?", - "json_output": { - "taxon": "gnat", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the spider have RNA-sequencing?", - "json_output": { - "taxon": "spider", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the cat have been sequenced?", - "json_output": { - "taxon": "cat", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of Borneo magnolia have been sequenced?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of bird have sequencing platforms?", - "json_output": { - "taxon": "bird", - "rank": "species", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bird%29+AND+tax_rank%28species%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the spider have been sequenced?", - "json_output": { - "taxon": "spider", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of Primate have RNA-seq data?", - "json_output": { - "taxon": "Primate", - "rank": "order", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for rat have been updated this month?", - "json_output": { - "taxon": "rat", - "data_type": "genome assemblies", - "time_frame": "this month", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=2024-06-01" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rat%29+AND+assembly_span+AND+last_updated%3E%3D2024-06-01&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of bat include RNA-seq data?", - "json_output": { - "taxon": "bat", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for wolf include RNA-seq data?", - "json_output": { - "taxon": "wolf", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for mushroom genome assemblies?", - "json_output": { - "taxon": "mushroom", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the rodent have RNA-sequencing?", - "json_output": { - "taxon": "rodent", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the cat have RNA-sequencing?", - "json_output": { - "taxon": "cat", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the Borneo magnolia include RNA-seq data?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of human include RNA-seq data?", - "json_output": { - "taxon": "human", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What information do we have about Primate?", - "json_output": { - "taxon": "Primate", - "intent": "record" - }, - "api_query": "https://goat.genomehubs.org/record?query=tax_tree%28%2A+Primate%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies have been produced this month?", - "json_output": { - "data_type": "genome assemblies", - "time_frame": "this month", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=2024-06-01" - }, - "api_query": "https://goat.genomehubs.org/count?query=assembly_span+AND+last_updated%3E%3D2024-06-01&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the spider have genome assemblies?", - "json_output": { - "taxon": "spider", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does wolf have been sequenced?", - "json_output": { - "taxon": "wolf", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of Primate have genome assemblies?", - "json_output": { - "taxon": "Primate", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of fungi have RNA-seq data?", - "json_output": { - "taxon": "fungi", - "rank": "species", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does rat include RNA-seq data?", - "json_output": { - "taxon": "rat", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of fungi have sequencing platforms?", - "json_output": { - "taxon": "fungi", - "rank": "genus", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28genus%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of gnat have sequencing platforms?", - "json_output": { - "taxon": "gnat", - "rank": "order", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28order%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of cattle have genome assemblies?", - "json_output": { - "taxon": "cat", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for cat have been updated this month?", - "json_output": { - "taxon": "cat", - "data_type": "genome assemblies", - "time_frame": "this month", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=2024-06-01" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+assembly_span+AND+last_updated%3E%3D2024-06-01&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the Borneo magnolia have genome assemblies?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of bird have RNA-sequencing?", - "json_output": { - "taxon": "bird", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the human include RNA-seq data?", - "json_output": { - "taxon": "human", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of mushroom have genome assemblies?", - "json_output": { - "taxon": "mushroom", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of rat have RNA-seq data?", - "json_output": { - "taxon": "rat", - "rank": "genus", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rat%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the human include RNA-seq data?", - "json_output": { - "taxon": "human", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of Borneo magnolia have genome assemblies?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the cattle have RNA-sequencing?", - "json_output": { - "taxon": "cat", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the Borneo magnolia have genome assemblies?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of wolf have genome assemblies?", - "json_output": { - "taxon": "wolf", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the human have been sequenced?", - "json_output": { - "taxon": "human", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for spider include RNA-seq data?", - "json_output": { - "taxon": "spider", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the Primate have been sequenced?", - "json_output": { - "taxon": "Primate", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for rat include sequencing platforms?", - "json_output": { - "taxon": "rat", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of bat have RNA-seq data?", - "json_output": { - "taxon": "bat", - "rank": "order", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bat%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the gnat include RNA-seq data?", - "json_output": { - "taxon": "gnat", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of rodent have genome assemblies?", - "json_output": { - "taxon": "rodent", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of reptile have genome assemblies?", - "json_output": { - "taxon": "reptile", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of rat have genome assemblies?", - "json_output": { - "taxon": "rat", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rat%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of Borneo magnolia have sequencing platforms?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "order", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28order%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for bat genome assemblies?", - "json_output": { - "taxon": "bat", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for mushroom RNA-seq data?", - "json_output": { - "taxon": "mushroom", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the wolf have RNA-sequencing?", - "json_output": { - "taxon": "wolf", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of rodent have RNA-sequencing?", - "json_output": { - "taxon": "rodent", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for spider RNA-seq data?", - "json_output": { - "taxon": "spider", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What information do we have about wolf?", - "json_output": { - "taxon": "wolf", - "intent": "record" - }, - "api_query": "https://goat.genomehubs.org/record?query=tax_tree%28%2A+wolf%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genus of cat have genome assemblies?", - "json_output": { - "taxon": "cat", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+cat%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for mushroom sequencing platforms?", - "json_output": { - "taxon": "mushroom", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does cat have been sequenced?", - "json_output": { - "taxon": "cat", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of Primate have RNA-sequencing?", - "json_output": { - "taxon": "Primate", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What is the sequencing status of the fruit fly?", - "json_output": { - "taxon": "fruit fly", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of fruit fly have genome assemblies?", - "json_output": { - "taxon": "fruit fly", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of fungi include RNA-seq data?", - "json_output": { - "taxon": "fungi", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for gnat sequencing platforms?", - "json_output": { - "taxon": "gnat", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of bat have RNA-seq data?", - "json_output": { - "taxon": "bat", - "rank": "species", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bat%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the fungi have RNA-sequencing?", - "json_output": { - "taxon": "fungi", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of rodent have genome assemblies?", - "json_output": { - "taxon": "rodent", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of fungi have been sequenced?", - "json_output": { - "taxon": "fungi", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for wolf RNA-seq data?", - "json_output": { - "taxon": "wolf", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+wolf%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of gnat have been sequenced?", - "json_output": { - "taxon": "gnat", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of gnat have genome assemblies?", - "json_output": { - "taxon": "gnat", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the bird include RNA-seq data?", - "json_output": { - "taxon": "bird", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the spider have genome assemblies?", - "json_output": { - "taxon": "spider", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of wolf have RNA-seq data?", - "json_output": { - "taxon": "wolf", - "rank": "order", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+wolf%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of Borneo magnolia have RNA-seq data?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "family", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of spider have RNA-sequencing?", - "json_output": { - "taxon": "spider", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the reptile have RNA-sequencing?", - "json_output": { - "taxon": "reptile", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for gnat include genome assemblies?", - "json_output": { - "taxon": "gnat", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for bird include genome assemblies?", - "json_output": { - "taxon": "bird", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the rodent have RNA-sequencing?", - "json_output": { - "taxon": "rodent", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many order of rodent have RNA-seq data?", - "json_output": { - "taxon": "rodent", - "rank": "order", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of bird have RNA-sequencing?", - "json_output": { - "taxon": "bird", - "rank": "family", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of bat include RNA-seq data?", - "json_output": { - "taxon": "bat", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the cattle include RNA-seq data?", - "json_output": { - "taxon": "cat", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for mushroom include sequencing platforms?", - "json_output": { - "taxon": "mushroom", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the human have genome assemblies?", - "json_output": { - "taxon": "human", - "rank": "order", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the gnat have RNA-sequencing?", - "json_output": { - "taxon": "gnat", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the mushroom have RNA-sequencing?", - "json_output": { - "taxon": "mushroom", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What family of rodent include RNA-seq data?", - "json_output": { - "taxon": "rodent", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does bird have genome assemblies?", - "json_output": { - "taxon": "bird", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the Primate have genome assemblies?", - "json_output": { - "taxon": "Primate", - "rank": "genus", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Primate%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the reptile include RNA-seq data?", - "json_output": { - "taxon": "reptile", - "rank": "family", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28family%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of reptile include RNA-seq data?", - "json_output": { - "taxon": "reptile", - "rank": "order", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+reptile%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of fungi have sequencing platforms?", - "json_output": { - "taxon": "fungi", - "rank": "family", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28family%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of gnat have been sequenced?", - "json_output": { - "taxon": "gnat", - "rank": "genus", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28genus%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many species of bird have RNA-seq data?", - "json_output": { - "taxon": "bird", - "rank": "species", - "data_type": "RNA-seq data", - "intent": "count", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+bird%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for human genome assemblies?", - "json_output": { - "taxon": "human", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the human have genome assemblies?", - "json_output": { - "taxon": "human", - "rank": "family", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What genus of gnat have RNA-sequencing?", - "json_output": { - "taxon": "gnat", - "rank": "genus", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+gnat%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of cat have been sequenced?", - "json_output": { - "taxon": "cat", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+cat%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for spider include genome assemblies?", - "json_output": { - "taxon": "spider", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for mushroom have been updated this month?", - "json_output": { - "taxon": "mushroom", - "data_type": "genome assemblies", - "time_frame": "this month", - "intent": "count", - "field": "assembly_span", - "time_frame_query": "last_updated>=2024-06-01" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+mushroom%29+AND+assembly_span+AND+last_updated%3E%3D2024-06-01&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the spider have been sequenced?", - "json_output": { - "taxon": "spider", - "rank": "order", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+spider%29+AND+tax_rank%28order%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What is the sequencing status of the bird?", - "json_output": { - "taxon": "bird", - "intent": "search" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bird%29&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which family in the fungi have been sequenced?", - "json_output": { - "taxon": "fungi", - "rank": "family", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28family%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies for Borneo magnolia have been updated ?", - "json_output": { - "taxon": "Borneo magnolia", - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+Borneo+magnolia%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which species in the Borneo magnolia have been sequenced?", - "json_output": { - "taxon": "Borneo magnolia", - "rank": "species", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Do any samples for rodent include sequencing platforms?", - "json_output": { - "taxon": "rodent", - "data_type": "sequencing platforms", - "intent": "search", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of bat have genome assemblies?", - "json_output": { - "taxon": "bat", - "rank": "species", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+bat%29+AND+tax_rank%28species%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What order of rodent have RNA-sequencing?", - "json_output": { - "taxon": "rodent", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for fungi RNA-seq data?", - "json_output": { - "taxon": "fungi", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of fruit fly have RNA-sequencing?", - "json_output": { - "taxon": "fruit fly", - "rank": "species", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fruit+fly%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does fungi have been sequenced?", - "json_output": { - "taxon": "fungi", - "phrase": "have been sequenced", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many family of mushroom have sequencing platforms?", - "json_output": { - "taxon": "mushroom", - "rank": "family", - "data_type": "sequencing platforms", - "intent": "count", - "field": "platform" - }, - "api_query": "https://goat.genomehubs.org/count?query=tax_tree%28%2A+mushroom%29+AND+tax_rank%28family%29+AND+platform&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which order in the human have RNA-sequencing?", - "json_output": { - "taxon": "human", - "rank": "order", - "phrase": "have RNA-sequencing", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+human%29+AND+tax_rank%28order%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What sequencing platforms are used for Borneo magnolia RNA-seq data?", - "json_output": { - "taxon": "Borneo magnolia", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+Borneo+magnolia%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "What species of rodent include RNA-seq data?", - "json_output": { - "taxon": "rodent", - "rank": "species", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+tax_rank%28species%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Which genus in the fungi include RNA-seq data?", - "json_output": { - "taxon": "fungi", - "rank": "genus", - "phrase": "include RNA-seq data", - "data_type": "RNA-seq data", - "intent": "search", - "field": "sra_accession" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+fungi%29+AND+tax_rank%28genus%29+AND+sra_accession&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "How many genome assemblies have been produced ?", - "json_output": { - "data_type": "genome assemblies", - "intent": "count", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/count?query=assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - }, - { - "english_query": "Does rodent have genome assemblies?", - "json_output": { - "taxon": "rodent", - "phrase": "have genome assemblies", - "data_type": "genome assemblies", - "intent": "search", - "field": "assembly_span" - }, - "api_query": "https://goat.genomehubs.org/search?query=tax_tree%28%2A+rodent%29+AND+assembly_span&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0&fields=assembly_level%2Cassembly_span%2Cgenome_size%2Cchromosome_number%2Chaploid_number&names=common_name&ranks=&includeEstimates=false&size=100" - } -] \ No newline at end of file diff --git a/src/query_engine.py b/src/query_engine.py deleted file mode 100644 index 982645d..0000000 --- a/src/query_engine.py +++ /dev/null @@ -1,59 +0,0 @@ -import json -import logging -from datetime import datetime - -from llama_index.core import PromptTemplate -from llama_index.core.query_engine import CustomQueryEngine -from llama_index.core.response_synthesizers import BaseSynthesizer -from llama_index.core.retrievers import BaseRetriever -from llama_index.llms.ollama import Ollama - -logger = logging.getLogger("goat_nlp.query_engine") - - -class GoaTAPIQueryEngine(CustomQueryEngine): - """ - Custom query engine for the GoaT API. - - Attributes: - retriever (BaseRetriever): The retriever used to retrieve nodes. - response_synthesizer (BaseSynthesizer): The synthesizer used to - generate responses. - llm (Ollama): The language model used for completion. - qa_prompt (PromptTemplate): The template for the QA prompt. - """ - - retriever: BaseRetriever - response_synthesizer: BaseSynthesizer - llm: Ollama - qa_prompt: PromptTemplate - question_store: dict - - def custom_query(self, query_str: str): - """ - Custom query method. - - Args: - query_str (str): The query string. - entity_taxon_map (dict): The entity taxon map. - - Returns: - str: The response generated by the language model. - """ - nodes = self.retriever.retrieve(query_str) - - context_str = "\n\n".join( - [ - json.dumps(self.question_store[n.node.get_content()], indent=2) - for n in nodes - ] - ) - current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") - populated_prompt = self.qa_prompt.format( - context_str=context_str, query_str=query_str, time=current_time - ) - # logger.info(populated_prompt) - response = self.llm.complete(populated_prompt) - logger.info(response) - - return str(response) diff --git a/src/scripts/generate_query_dataset.py b/src/scripts/generate_query_dataset.py deleted file mode 100644 index 6aed6e4..0000000 --- a/src/scripts/generate_query_dataset.py +++ /dev/null @@ -1,197 +0,0 @@ -import itertools -import json -import urllib.parse -from datetime import datetime - -# Define the lists of entities -taxa = [ - "bat", - "cat", - "gnat", - "rat", - "spider", - "Borneo magnolia", - "mushroom", - "bird", - "rodent", - "human", - "wolf", - "fruit fly", - "Primate", - "cattle", - "fungi", - "reptile", -] -ranks = ["species", "genus", "family", "order"] -data_types = ["genome assemblies", "RNA-seq data", "sequencing platforms"] -phrases = [ - "have been sequenced", - "have genome assemblies", - "have RNA-sequencing", - "include RNA-seq data", -] -timeframes = ["this month", "recently", ""] - -# Refined prompt templates -prompts = [ - "What {rank} of {taxon} {phrase}?", - "How many {data_type} have been produced {timeframe}?", - "What is the sequencing status of the {taxon}?", - "What information do we have about {taxon}?", - "Does {taxon} {phrase}?", - "Which {rank} in the {taxon} {phrase}?", - "How many {rank} of {taxon} have {data_type}?", - "What sequencing platforms are used for {taxon} {data_type}?", - "Do any samples for {taxon} include {data_type}?", - "How many genome assemblies for {taxon} have been updated {timeframe}?", - "What are the available RNA-seq platforms for the {taxon}?", -] - - -def generate_sample_queries(): - queries = set() - for prompt, (rank, taxon, phrase, data_type, timeframe) in itertools.product( - prompts, itertools.product(ranks, taxa, phrases, data_types, timeframes) - ): - query = prompt.format( - rank=rank, - taxon=taxon, - phrase=phrase, - data_type=data_type, - timeframe=timeframe, - ).strip() - queries.add(query) - return list(queries) - - -def generate_json_output(query): - """ - Generate JSON output based on the given query. - - Parameters: - - query (str): The input query string. - - Returns: - - output (dict): The generated JSON output containing the identified entities - and intent. - - Raises: - - None. - - """ - # Define the lookup tables - lookup_tables = { - "taxon": taxa, - "rank": ranks, - "phrase": phrases, - "data_type": data_types, - "time_frame": timeframes, - } - - # Identify entities in the query - output = { - key: next((item for item in items if item in query), None) - for key, items in lookup_tables.items() - if next((item for item in items if item in query), None) - } - - # Determine the intent - if query.lower().startswith("how many"): - output["intent"] = "count" - elif query.lower().startswith("list all") or query.lower().startswith( - "find samples" - ): - output["intent"] = "search" - elif query.lower().startswith("what information do we have about"): - output["intent"] = "record" - else: - output["intent"] = "search" - - # Map phrases to fields - phrase_to_field = { - "have been sequenced": "assembly_span", - "have genome assemblies": "assembly_span", - "have RNA-sequencing": "sra_accession", - "include RNA-seq data": "sra_accession", - } - - if "phrase" in output and output["phrase"] in phrase_to_field: - output["field"] = phrase_to_field[output["phrase"]] - - if "data_type" in output: - data_type_to_field = { - "genome assemblies": "assembly_span", - "RNA-seq data": "sra_accession", - "sequencing platforms": "platform", - } - output["field"] = data_type_to_field[output["data_type"]] - - time_frame_to_query = { - "this month": "last_updated>={}".format( - datetime.now().replace(day=1).strftime("%Y-%m-%d") - ), - "recently": "last_updated>=recent", - } - - if "time_frame" in output and output["time_frame"] in time_frame_to_query: - output["time_frame_query"] = time_frame_to_query[output["time_frame"]] - - return output - - -def construct_url(json_output): - """ - Constructs a URL based on the provided JSON output. - - Parameters: - json_output (dict): A dictionary containing the JSON output. - - Returns: - str: The constructed URL. - - """ - base_url = "https://goat.genomehubs.org/" - endpoint = "search?" - suffix = "&result=taxon&summaryValues=count&taxonomy=ncbi&offset=0" - +"&fields=assembly_level%2Cassembly_span%2Cgenome_size%2C" - +"chromosome_number%2Chaploid_number&names=common_name&ranks=" - +"&includeEstimates=false&size=100" - - if json_output["intent"] == "count": - endpoint = "count?" - elif json_output["intent"] == "record": - endpoint = "record?" - - params = [] - - if "taxon" in json_output: - params.append(f"tax_tree(* {json_output['taxon']})") - if "rank" in json_output: - params.append(f"tax_rank({json_output['rank']})") - if "field" in json_output: - params.append(f"{json_output['field']}") - if "time_frame_query" in json_output: - params.append(f"{json_output['time_frame_query']}") - suffix = "&result=assembly&summaryValues=count&taxonomy=ncbi&offset=0" - +"&fields=assembly_level%2Cassembly_span%2Cgenome_size%2C" - +"chromosome_number%2Chaploid_number&names=common_name&ranks=" - +"&includeEstimates=false&size=100" - - query_string = " AND ".join(params) - return ( - base_url + endpoint + "query=" + urllib.parse.quote_plus(query_string) + suffix - ) - - -sample_queries = generate_sample_queries() -output_list = [] -for query in sample_queries: - json_output = generate_json_output(query) - url = construct_url(json_output) - output_list.append( - {"english_query": query, "json_output": json_output, "api_query": url} - ) - - -with open("sample_queries_output.json", "w") as outfile: - json.dump(output_list, outfile, indent=2) diff --git a/src/templates/chat.html b/src/templates/chat.html deleted file mode 100644 index a84fcdf..0000000 --- a/src/templates/chat.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - GoaT NLP - - - - - - - -
-

GoaT NLP Tester

-
-
-

Welcome to GoaT NLP, enter any query about a species, family, genus and get its relevant GoaT URL

-
-
-
- - -
-
- - - \ No newline at end of file diff --git a/src/uv.lock b/src/uv.lock new file mode 100644 index 0000000..9455b53 --- /dev/null +++ b/src/uv.lock @@ -0,0 +1,1162 @@ +version = 1 +revision = 3 +requires-python = ">=3.12" + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, +] + +[[package]] +name = "anyio" +version = "4.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "sniffio" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c6/78/7d432127c41b50bccba979505f272c16cbcadcc33645d5fa3a738110ae75/anyio-4.11.0.tar.gz", hash = "sha256:82a8d0b81e318cc5ce71a5f1f8b5c4e63619620b63141ef8c995fa0db95a57c4", size = 219094, upload-time = "2025-09-23T09:19:12.58Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl", hash = "sha256:0287e96f4d26d4149305414d4e3bc32f0dcd0862365a4bddea19d7a1ec38c4fc", size = 109097, upload-time = "2025-09-23T09:19:10.601Z" }, +] + +[[package]] +name = "attrs" +version = "25.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6b/5c/685e6633917e101e5dcb62b9dd76946cbb57c26e133bae9e0cd36033c0a9/attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11", size = 934251, upload-time = "2025-10-06T13:54:44.725Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373", size = 67615, upload-time = "2025-10-06T13:54:43.17Z" }, +] + +[[package]] +name = "authlib" +version = "1.6.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cd/3f/1d3bbd0bf23bdd99276d4def22f29c27a914067b4cf66f753ff9b8bbd0f3/authlib-1.6.5.tar.gz", hash = "sha256:6aaf9c79b7cc96c900f0b284061691c5d4e61221640a948fe690b556a6d6d10b", size = 164553, upload-time = "2025-10-02T13:36:09.489Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/aa/5082412d1ee302e9e7d80b6949bc4d2a8fa1149aaab610c5fc24709605d6/authlib-1.6.5-py2.py3-none-any.whl", hash = "sha256:3e0e0507807f842b02175507bdee8957a1d5707fd4afb17c32fb43fee90b6e3a", size = 243608, upload-time = "2025-10-02T13:36:07.637Z" }, +] + +[[package]] +name = "beartype" +version = "0.22.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/88/e2/105ceb1704cb80fe4ab3872529ab7b6f365cf7c74f725e6132d0efcf1560/beartype-0.22.6.tar.gz", hash = "sha256:97fbda69c20b48c5780ac2ca60ce3c1bb9af29b3a1a0216898ffabdd523e48f4", size = 1588975, upload-time = "2025-11-20T04:47:14.736Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/98/c9/ceecc71fe2c9495a1d8e08d44f5f31f5bca1350d5b2e27a4b6265424f59e/beartype-0.22.6-py3-none-any.whl", hash = "sha256:0584bc46a2ea2a871509679278cda992eadde676c01356ab0ac77421f3c9a093", size = 1324807, upload-time = "2025-11-20T04:47:11.837Z" }, +] + +[[package]] +name = "cachetools" +version = "6.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fb/44/ca1675be2a83aeee1886ab745b28cda92093066590233cc501890eb8417a/cachetools-6.2.2.tar.gz", hash = "sha256:8e6d266b25e539df852251cfd6f990b4bc3a141db73b939058d809ebd2590fc6", size = 31571, upload-time = "2025-11-13T17:42:51.465Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/46/eb6eca305c77a4489affe1c5d8f4cae82f285d9addd8de4ec084a7184221/cachetools-6.2.2-py3-none-any.whl", hash = "sha256:6c09c98183bf58560c97b2abfcedcbaf6a896a490f534b031b661d3723b45ace", size = 11503, upload-time = "2025-11-13T17:42:50.232Z" }, +] + +[[package]] +name = "certifi" +version = "2025.11.12" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/8c/58f469717fa48465e4a50c014a0400602d3c437d7c0c468e17ada824da3a/certifi-2025.11.12.tar.gz", hash = "sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316", size = 160538, upload-time = "2025-11-12T02:54:51.517Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/7d/9bc192684cea499815ff478dfcdc13835ddf401365057044fb721ec6bddb/certifi-2025.11.12-py3-none-any.whl", hash = "sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b", size = 159438, upload-time = "2025-11-12T02:54:49.735Z" }, +] + +[[package]] +name = "cffi" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271, upload-time = "2025-09-08T23:22:44.795Z" }, + { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048, upload-time = "2025-09-08T23:22:45.938Z" }, + { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529, upload-time = "2025-09-08T23:22:47.349Z" }, + { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097, upload-time = "2025-09-08T23:22:48.677Z" }, + { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983, upload-time = "2025-09-08T23:22:50.06Z" }, + { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519, upload-time = "2025-09-08T23:22:51.364Z" }, + { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572, upload-time = "2025-09-08T23:22:52.902Z" }, + { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963, upload-time = "2025-09-08T23:22:54.518Z" }, + { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361, upload-time = "2025-09-08T23:22:55.867Z" }, + { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932, upload-time = "2025-09-08T23:22:57.188Z" }, + { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557, upload-time = "2025-09-08T23:22:58.351Z" }, + { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762, upload-time = "2025-09-08T23:22:59.668Z" }, + { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230, upload-time = "2025-09-08T23:23:00.879Z" }, + { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043, upload-time = "2025-09-08T23:23:02.231Z" }, + { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446, upload-time = "2025-09-08T23:23:03.472Z" }, + { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101, upload-time = "2025-09-08T23:23:04.792Z" }, + { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948, upload-time = "2025-09-08T23:23:06.127Z" }, + { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422, upload-time = "2025-09-08T23:23:07.753Z" }, + { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499, upload-time = "2025-09-08T23:23:09.648Z" }, + { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928, upload-time = "2025-09-08T23:23:10.928Z" }, + { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302, upload-time = "2025-09-08T23:23:12.42Z" }, + { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909, upload-time = "2025-09-08T23:23:14.32Z" }, + { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402, upload-time = "2025-09-08T23:23:15.535Z" }, + { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780, upload-time = "2025-09-08T23:23:16.761Z" }, + { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320, upload-time = "2025-09-08T23:23:18.087Z" }, + { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487, upload-time = "2025-09-08T23:23:19.622Z" }, + { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049, upload-time = "2025-09-08T23:23:20.853Z" }, + { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793, upload-time = "2025-09-08T23:23:22.08Z" }, + { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300, upload-time = "2025-09-08T23:23:23.314Z" }, + { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244, upload-time = "2025-09-08T23:23:24.541Z" }, + { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828, upload-time = "2025-09-08T23:23:26.143Z" }, + { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926, upload-time = "2025-09-08T23:23:27.873Z" }, + { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328, upload-time = "2025-09-08T23:23:44.61Z" }, + { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650, upload-time = "2025-09-08T23:23:45.848Z" }, + { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687, upload-time = "2025-09-08T23:23:47.105Z" }, + { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773, upload-time = "2025-09-08T23:23:29.347Z" }, + { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013, upload-time = "2025-09-08T23:23:30.63Z" }, + { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593, upload-time = "2025-09-08T23:23:31.91Z" }, + { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354, upload-time = "2025-09-08T23:23:33.214Z" }, + { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480, upload-time = "2025-09-08T23:23:34.495Z" }, + { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584, upload-time = "2025-09-08T23:23:36.096Z" }, + { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443, upload-time = "2025-09-08T23:23:37.328Z" }, + { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437, upload-time = "2025-09-08T23:23:38.945Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487, upload-time = "2025-09-08T23:23:40.423Z" }, + { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726, upload-time = "2025-09-08T23:23:41.742Z" }, + { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418, upload-time = "2025-10-14T04:42:32.879Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f3/85/1637cd4af66fa687396e757dec650f28025f2a2f5a5531a3208dc0ec43f2/charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394", size = 208425, upload-time = "2025-10-14T04:40:53.353Z" }, + { url = "https://files.pythonhosted.org/packages/9d/6a/04130023fef2a0d9c62d0bae2649b69f7b7d8d24ea5536feef50551029df/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25", size = 148162, upload-time = "2025-10-14T04:40:54.558Z" }, + { url = "https://files.pythonhosted.org/packages/78/29/62328d79aa60da22c9e0b9a66539feae06ca0f5a4171ac4f7dc285b83688/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef", size = 144558, upload-time = "2025-10-14T04:40:55.677Z" }, + { url = "https://files.pythonhosted.org/packages/86/bb/b32194a4bf15b88403537c2e120b817c61cd4ecffa9b6876e941c3ee38fe/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d", size = 161497, upload-time = "2025-10-14T04:40:57.217Z" }, + { url = "https://files.pythonhosted.org/packages/19/89/a54c82b253d5b9b111dc74aca196ba5ccfcca8242d0fb64146d4d3183ff1/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8", size = 159240, upload-time = "2025-10-14T04:40:58.358Z" }, + { url = "https://files.pythonhosted.org/packages/c0/10/d20b513afe03acc89ec33948320a5544d31f21b05368436d580dec4e234d/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86", size = 153471, upload-time = "2025-10-14T04:40:59.468Z" }, + { url = "https://files.pythonhosted.org/packages/61/fa/fbf177b55bdd727010f9c0a3c49eefa1d10f960e5f09d1d887bf93c2e698/charset_normalizer-3.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a", size = 150864, upload-time = "2025-10-14T04:41:00.623Z" }, + { url = "https://files.pythonhosted.org/packages/05/12/9fbc6a4d39c0198adeebbde20b619790e9236557ca59fc40e0e3cebe6f40/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f", size = 150647, upload-time = "2025-10-14T04:41:01.754Z" }, + { url = "https://files.pythonhosted.org/packages/ad/1f/6a9a593d52e3e8c5d2b167daf8c6b968808efb57ef4c210acb907c365bc4/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc", size = 145110, upload-time = "2025-10-14T04:41:03.231Z" }, + { url = "https://files.pythonhosted.org/packages/30/42/9a52c609e72471b0fc54386dc63c3781a387bb4fe61c20231a4ebcd58bdd/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf", size = 162839, upload-time = "2025-10-14T04:41:04.715Z" }, + { url = "https://files.pythonhosted.org/packages/c4/5b/c0682bbf9f11597073052628ddd38344a3d673fda35a36773f7d19344b23/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15", size = 150667, upload-time = "2025-10-14T04:41:05.827Z" }, + { url = "https://files.pythonhosted.org/packages/e4/24/a41afeab6f990cf2daf6cb8c67419b63b48cf518e4f56022230840c9bfb2/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9", size = 160535, upload-time = "2025-10-14T04:41:06.938Z" }, + { url = "https://files.pythonhosted.org/packages/2a/e5/6a4ce77ed243c4a50a1fecca6aaaab419628c818a49434be428fe24c9957/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0", size = 154816, upload-time = "2025-10-14T04:41:08.101Z" }, + { url = "https://files.pythonhosted.org/packages/a8/ef/89297262b8092b312d29cdb2517cb1237e51db8ecef2e9af5edbe7b683b1/charset_normalizer-3.4.4-cp312-cp312-win32.whl", hash = "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26", size = 99694, upload-time = "2025-10-14T04:41:09.23Z" }, + { url = "https://files.pythonhosted.org/packages/3d/2d/1e5ed9dd3b3803994c155cd9aacb60c82c331bad84daf75bcb9c91b3295e/charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525", size = 107131, upload-time = "2025-10-14T04:41:10.467Z" }, + { url = "https://files.pythonhosted.org/packages/d0/d9/0ed4c7098a861482a7b6a95603edce4c0d9db2311af23da1fb2b75ec26fc/charset_normalizer-3.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3", size = 100390, upload-time = "2025-10-14T04:41:11.915Z" }, + { url = "https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794", size = 208091, upload-time = "2025-10-14T04:41:13.346Z" }, + { url = "https://files.pythonhosted.org/packages/7d/62/73a6d7450829655a35bb88a88fca7d736f9882a27eacdca2c6d505b57e2e/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed", size = 147936, upload-time = "2025-10-14T04:41:14.461Z" }, + { url = "https://files.pythonhosted.org/packages/89/c5/adb8c8b3d6625bef6d88b251bbb0d95f8205831b987631ab0c8bb5d937c2/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72", size = 144180, upload-time = "2025-10-14T04:41:15.588Z" }, + { url = "https://files.pythonhosted.org/packages/91/ed/9706e4070682d1cc219050b6048bfd293ccf67b3d4f5a4f39207453d4b99/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328", size = 161346, upload-time = "2025-10-14T04:41:16.738Z" }, + { url = "https://files.pythonhosted.org/packages/d5/0d/031f0d95e4972901a2f6f09ef055751805ff541511dc1252ba3ca1f80cf5/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede", size = 158874, upload-time = "2025-10-14T04:41:17.923Z" }, + { url = "https://files.pythonhosted.org/packages/f5/83/6ab5883f57c9c801ce5e5677242328aa45592be8a00644310a008d04f922/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894", size = 153076, upload-time = "2025-10-14T04:41:19.106Z" }, + { url = "https://files.pythonhosted.org/packages/75/1e/5ff781ddf5260e387d6419959ee89ef13878229732732ee73cdae01800f2/charset_normalizer-3.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1", size = 150601, upload-time = "2025-10-14T04:41:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/d7/57/71be810965493d3510a6ca79b90c19e48696fb1ff964da319334b12677f0/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490", size = 150376, upload-time = "2025-10-14T04:41:21.398Z" }, + { url = "https://files.pythonhosted.org/packages/e5/d5/c3d057a78c181d007014feb7e9f2e65905a6c4ef182c0ddf0de2924edd65/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44", size = 144825, upload-time = "2025-10-14T04:41:22.583Z" }, + { url = "https://files.pythonhosted.org/packages/e6/8c/d0406294828d4976f275ffbe66f00266c4b3136b7506941d87c00cab5272/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133", size = 162583, upload-time = "2025-10-14T04:41:23.754Z" }, + { url = "https://files.pythonhosted.org/packages/d7/24/e2aa1f18c8f15c4c0e932d9287b8609dd30ad56dbe41d926bd846e22fb8d/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3", size = 150366, upload-time = "2025-10-14T04:41:25.27Z" }, + { url = "https://files.pythonhosted.org/packages/e4/5b/1e6160c7739aad1e2df054300cc618b06bf784a7a164b0f238360721ab86/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e", size = 160300, upload-time = "2025-10-14T04:41:26.725Z" }, + { url = "https://files.pythonhosted.org/packages/7a/10/f882167cd207fbdd743e55534d5d9620e095089d176d55cb22d5322f2afd/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc", size = 154465, upload-time = "2025-10-14T04:41:28.322Z" }, + { url = "https://files.pythonhosted.org/packages/89/66/c7a9e1b7429be72123441bfdbaf2bc13faab3f90b933f664db506dea5915/charset_normalizer-3.4.4-cp313-cp313-win32.whl", hash = "sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac", size = 99404, upload-time = "2025-10-14T04:41:29.95Z" }, + { url = "https://files.pythonhosted.org/packages/c4/26/b9924fa27db384bdcd97ab83b4f0a8058d96ad9626ead570674d5e737d90/charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14", size = 107092, upload-time = "2025-10-14T04:41:31.188Z" }, + { url = "https://files.pythonhosted.org/packages/af/8f/3ed4bfa0c0c72a7ca17f0380cd9e4dd842b09f664e780c13cff1dcf2ef1b/charset_normalizer-3.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2", size = 100408, upload-time = "2025-10-14T04:41:32.624Z" }, + { url = "https://files.pythonhosted.org/packages/2a/35/7051599bd493e62411d6ede36fd5af83a38f37c4767b92884df7301db25d/charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd", size = 207746, upload-time = "2025-10-14T04:41:33.773Z" }, + { url = "https://files.pythonhosted.org/packages/10/9a/97c8d48ef10d6cd4fcead2415523221624bf58bcf68a802721a6bc807c8f/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb", size = 147889, upload-time = "2025-10-14T04:41:34.897Z" }, + { url = "https://files.pythonhosted.org/packages/10/bf/979224a919a1b606c82bd2c5fa49b5c6d5727aa47b4312bb27b1734f53cd/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e", size = 143641, upload-time = "2025-10-14T04:41:36.116Z" }, + { url = "https://files.pythonhosted.org/packages/ba/33/0ad65587441fc730dc7bd90e9716b30b4702dc7b617e6ba4997dc8651495/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14", size = 160779, upload-time = "2025-10-14T04:41:37.229Z" }, + { url = "https://files.pythonhosted.org/packages/67/ed/331d6b249259ee71ddea93f6f2f0a56cfebd46938bde6fcc6f7b9a3d0e09/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191", size = 159035, upload-time = "2025-10-14T04:41:38.368Z" }, + { url = "https://files.pythonhosted.org/packages/67/ff/f6b948ca32e4f2a4576aa129d8bed61f2e0543bf9f5f2b7fc3758ed005c9/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838", size = 152542, upload-time = "2025-10-14T04:41:39.862Z" }, + { url = "https://files.pythonhosted.org/packages/16/85/276033dcbcc369eb176594de22728541a925b2632f9716428c851b149e83/charset_normalizer-3.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6", size = 149524, upload-time = "2025-10-14T04:41:41.319Z" }, + { url = "https://files.pythonhosted.org/packages/9e/f2/6a2a1f722b6aba37050e626530a46a68f74e63683947a8acff92569f979a/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e", size = 150395, upload-time = "2025-10-14T04:41:42.539Z" }, + { url = "https://files.pythonhosted.org/packages/60/bb/2186cb2f2bbaea6338cad15ce23a67f9b0672929744381e28b0592676824/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c", size = 143680, upload-time = "2025-10-14T04:41:43.661Z" }, + { url = "https://files.pythonhosted.org/packages/7d/a5/bf6f13b772fbb2a90360eb620d52ed8f796f3c5caee8398c3b2eb7b1c60d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090", size = 162045, upload-time = "2025-10-14T04:41:44.821Z" }, + { url = "https://files.pythonhosted.org/packages/df/c5/d1be898bf0dc3ef9030c3825e5d3b83f2c528d207d246cbabe245966808d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152", size = 149687, upload-time = "2025-10-14T04:41:46.442Z" }, + { url = "https://files.pythonhosted.org/packages/a5/42/90c1f7b9341eef50c8a1cb3f098ac43b0508413f33affd762855f67a410e/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828", size = 160014, upload-time = "2025-10-14T04:41:47.631Z" }, + { url = "https://files.pythonhosted.org/packages/76/be/4d3ee471e8145d12795ab655ece37baed0929462a86e72372fd25859047c/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec", size = 154044, upload-time = "2025-10-14T04:41:48.81Z" }, + { url = "https://files.pythonhosted.org/packages/b0/6f/8f7af07237c34a1defe7defc565a9bc1807762f672c0fde711a4b22bf9c0/charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9", size = 99940, upload-time = "2025-10-14T04:41:49.946Z" }, + { url = "https://files.pythonhosted.org/packages/4b/51/8ade005e5ca5b0d80fb4aff72a3775b325bdc3d27408c8113811a7cbe640/charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c", size = 107104, upload-time = "2025-10-14T04:41:51.051Z" }, + { url = "https://files.pythonhosted.org/packages/da/5f/6b8f83a55bb8278772c5ae54a577f3099025f9ade59d0136ac24a0df4bde/charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2", size = 100743, upload-time = "2025-10-14T04:41:52.122Z" }, + { url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402, upload-time = "2025-10-14T04:42:31.76Z" }, +] + +[[package]] +name = "click" +version = "8.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3d/fa/656b739db8587d7b5dfa22e22ed02566950fbfbcdc20311993483657a5c0/click-8.3.1.tar.gz", hash = "sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a", size = 295065, upload-time = "2025-11-15T20:45:42.706Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl", hash = "sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6", size = 108274, upload-time = "2025-11-15T20:45:41.139Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "cryptography" +version = "46.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/33/c00162f49c0e2fe8064a62cb92b93e50c74a72bc370ab92f86112b33ff62/cryptography-46.0.3.tar.gz", hash = "sha256:a8b17438104fed022ce745b362294d9ce35b4c2e45c1d958ad4a4b019285f4a1", size = 749258, upload-time = "2025-10-15T23:18:31.74Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/42/9c391dd801d6cf0d561b5890549d4b27bafcc53b39c31a817e69d87c625b/cryptography-46.0.3-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:109d4ddfadf17e8e7779c39f9b18111a09efb969a301a31e987416a0191ed93a", size = 7225004, upload-time = "2025-10-15T23:16:52.239Z" }, + { url = "https://files.pythonhosted.org/packages/1c/67/38769ca6b65f07461eb200e85fc1639b438bdc667be02cf7f2cd6a64601c/cryptography-46.0.3-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:09859af8466b69bc3c27bdf4f5d84a665e0f7ab5088412e9e2ec49758eca5cbc", size = 4296667, upload-time = "2025-10-15T23:16:54.369Z" }, + { url = "https://files.pythonhosted.org/packages/5c/49/498c86566a1d80e978b42f0d702795f69887005548c041636df6ae1ca64c/cryptography-46.0.3-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:01ca9ff2885f3acc98c29f1860552e37f6d7c7d013d7334ff2a9de43a449315d", size = 4450807, upload-time = "2025-10-15T23:16:56.414Z" }, + { url = "https://files.pythonhosted.org/packages/4b/0a/863a3604112174c8624a2ac3c038662d9e59970c7f926acdcfaed8d61142/cryptography-46.0.3-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6eae65d4c3d33da080cff9c4ab1f711b15c1d9760809dad6ea763f3812d254cb", size = 4299615, upload-time = "2025-10-15T23:16:58.442Z" }, + { url = "https://files.pythonhosted.org/packages/64/02/b73a533f6b64a69f3cd3872acb6ebc12aef924d8d103133bb3ea750dc703/cryptography-46.0.3-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5bf0ed4490068a2e72ac03d786693adeb909981cc596425d09032d372bcc849", size = 4016800, upload-time = "2025-10-15T23:17:00.378Z" }, + { url = "https://files.pythonhosted.org/packages/25/d5/16e41afbfa450cde85a3b7ec599bebefaef16b5c6ba4ec49a3532336ed72/cryptography-46.0.3-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5ecfccd2329e37e9b7112a888e76d9feca2347f12f37918facbb893d7bb88ee8", size = 4984707, upload-time = "2025-10-15T23:17:01.98Z" }, + { url = "https://files.pythonhosted.org/packages/c9/56/e7e69b427c3878352c2fb9b450bd0e19ed552753491d39d7d0a2f5226d41/cryptography-46.0.3-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a2c0cd47381a3229c403062f764160d57d4d175e022c1df84e168c6251a22eec", size = 4482541, upload-time = "2025-10-15T23:17:04.078Z" }, + { url = "https://files.pythonhosted.org/packages/78/f6/50736d40d97e8483172f1bb6e698895b92a223dba513b0ca6f06b2365339/cryptography-46.0.3-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:549e234ff32571b1f4076ac269fcce7a808d3bf98b76c8dd560e42dbc66d7d91", size = 4299464, upload-time = "2025-10-15T23:17:05.483Z" }, + { url = "https://files.pythonhosted.org/packages/00/de/d8e26b1a855f19d9994a19c702fa2e93b0456beccbcfe437eda00e0701f2/cryptography-46.0.3-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:c0a7bb1a68a5d3471880e264621346c48665b3bf1c3759d682fc0864c540bd9e", size = 4950838, upload-time = "2025-10-15T23:17:07.425Z" }, + { url = "https://files.pythonhosted.org/packages/8f/29/798fc4ec461a1c9e9f735f2fc58741b0daae30688f41b2497dcbc9ed1355/cryptography-46.0.3-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:10b01676fc208c3e6feeb25a8b83d81767e8059e1fe86e1dc62d10a3018fa926", size = 4481596, upload-time = "2025-10-15T23:17:09.343Z" }, + { url = "https://files.pythonhosted.org/packages/15/8d/03cd48b20a573adfff7652b76271078e3045b9f49387920e7f1f631d125e/cryptography-46.0.3-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0abf1ffd6e57c67e92af68330d05760b7b7efb243aab8377e583284dbab72c71", size = 4426782, upload-time = "2025-10-15T23:17:11.22Z" }, + { url = "https://files.pythonhosted.org/packages/fa/b1/ebacbfe53317d55cf33165bda24c86523497a6881f339f9aae5c2e13e57b/cryptography-46.0.3-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a04bee9ab6a4da801eb9b51f1b708a1b5b5c9eb48c03f74198464c66f0d344ac", size = 4698381, upload-time = "2025-10-15T23:17:12.829Z" }, + { url = "https://files.pythonhosted.org/packages/96/92/8a6a9525893325fc057a01f654d7efc2c64b9de90413adcf605a85744ff4/cryptography-46.0.3-cp311-abi3-win32.whl", hash = "sha256:f260d0d41e9b4da1ed1e0f1ce571f97fe370b152ab18778e9e8f67d6af432018", size = 3055988, upload-time = "2025-10-15T23:17:14.65Z" }, + { url = "https://files.pythonhosted.org/packages/7e/bf/80fbf45253ea585a1e492a6a17efcb93467701fa79e71550a430c5e60df0/cryptography-46.0.3-cp311-abi3-win_amd64.whl", hash = "sha256:a9a3008438615669153eb86b26b61e09993921ebdd75385ddd748702c5adfddb", size = 3514451, upload-time = "2025-10-15T23:17:16.142Z" }, + { url = "https://files.pythonhosted.org/packages/2e/af/9b302da4c87b0beb9db4e756386a7c6c5b8003cd0e742277888d352ae91d/cryptography-46.0.3-cp311-abi3-win_arm64.whl", hash = "sha256:5d7f93296ee28f68447397bf5198428c9aeeab45705a55d53a6343455dcb2c3c", size = 2928007, upload-time = "2025-10-15T23:17:18.04Z" }, + { url = "https://files.pythonhosted.org/packages/f5/e2/a510aa736755bffa9d2f75029c229111a1d02f8ecd5de03078f4c18d91a3/cryptography-46.0.3-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:00a5e7e87938e5ff9ff5447ab086a5706a957137e6e433841e9d24f38a065217", size = 7158012, upload-time = "2025-10-15T23:17:19.982Z" }, + { url = "https://files.pythonhosted.org/packages/73/dc/9aa866fbdbb95b02e7f9d086f1fccfeebf8953509b87e3f28fff927ff8a0/cryptography-46.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c8daeb2d2174beb4575b77482320303f3d39b8e81153da4f0fb08eb5fe86a6c5", size = 4288728, upload-time = "2025-10-15T23:17:21.527Z" }, + { url = "https://files.pythonhosted.org/packages/c5/fd/bc1daf8230eaa075184cbbf5f8cd00ba9db4fd32d63fb83da4671b72ed8a/cryptography-46.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:39b6755623145ad5eff1dab323f4eae2a32a77a7abef2c5089a04a3d04366715", size = 4435078, upload-time = "2025-10-15T23:17:23.042Z" }, + { url = "https://files.pythonhosted.org/packages/82/98/d3bd5407ce4c60017f8ff9e63ffee4200ab3e23fe05b765cab805a7db008/cryptography-46.0.3-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:db391fa7c66df6762ee3f00c95a89e6d428f4d60e7abc8328f4fe155b5ac6e54", size = 4293460, upload-time = "2025-10-15T23:17:24.885Z" }, + { url = "https://files.pythonhosted.org/packages/26/e9/e23e7900983c2b8af7a08098db406cf989d7f09caea7897e347598d4cd5b/cryptography-46.0.3-cp314-cp314t-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:78a97cf6a8839a48c49271cdcbd5cf37ca2c1d6b7fdd86cc864f302b5e9bf459", size = 3995237, upload-time = "2025-10-15T23:17:26.449Z" }, + { url = "https://files.pythonhosted.org/packages/91/15/af68c509d4a138cfe299d0d7ddb14afba15233223ebd933b4bbdbc7155d3/cryptography-46.0.3-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:dfb781ff7eaa91a6f7fd41776ec37c5853c795d3b358d4896fdbb5df168af422", size = 4967344, upload-time = "2025-10-15T23:17:28.06Z" }, + { url = "https://files.pythonhosted.org/packages/ca/e3/8643d077c53868b681af077edf6b3cb58288b5423610f21c62aadcbe99f4/cryptography-46.0.3-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:6f61efb26e76c45c4a227835ddeae96d83624fb0d29eb5df5b96e14ed1a0afb7", size = 4466564, upload-time = "2025-10-15T23:17:29.665Z" }, + { url = "https://files.pythonhosted.org/packages/0e/43/c1e8726fa59c236ff477ff2b5dc071e54b21e5a1e51aa2cee1676f1c986f/cryptography-46.0.3-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:23b1a8f26e43f47ceb6d6a43115f33a5a37d57df4ea0ca295b780ae8546e8044", size = 4292415, upload-time = "2025-10-15T23:17:31.686Z" }, + { url = "https://files.pythonhosted.org/packages/42/f9/2f8fefdb1aee8a8e3256a0568cffc4e6d517b256a2fe97a029b3f1b9fe7e/cryptography-46.0.3-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:b419ae593c86b87014b9be7396b385491ad7f320bde96826d0dd174459e54665", size = 4931457, upload-time = "2025-10-15T23:17:33.478Z" }, + { url = "https://files.pythonhosted.org/packages/79/30/9b54127a9a778ccd6d27c3da7563e9f2d341826075ceab89ae3b41bf5be2/cryptography-46.0.3-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:50fc3343ac490c6b08c0cf0d704e881d0d660be923fd3076db3e932007e726e3", size = 4466074, upload-time = "2025-10-15T23:17:35.158Z" }, + { url = "https://files.pythonhosted.org/packages/ac/68/b4f4a10928e26c941b1b6a179143af9f4d27d88fe84a6a3c53592d2e76bf/cryptography-46.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:22d7e97932f511d6b0b04f2bfd818d73dcd5928db509460aaf48384778eb6d20", size = 4420569, upload-time = "2025-10-15T23:17:37.188Z" }, + { url = "https://files.pythonhosted.org/packages/a3/49/3746dab4c0d1979888f125226357d3262a6dd40e114ac29e3d2abdf1ec55/cryptography-46.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d55f3dffadd674514ad19451161118fd010988540cee43d8bc20675e775925de", size = 4681941, upload-time = "2025-10-15T23:17:39.236Z" }, + { url = "https://files.pythonhosted.org/packages/fd/30/27654c1dbaf7e4a3531fa1fc77986d04aefa4d6d78259a62c9dc13d7ad36/cryptography-46.0.3-cp314-cp314t-win32.whl", hash = "sha256:8a6e050cb6164d3f830453754094c086ff2d0b2f3a897a1d9820f6139a1f0914", size = 3022339, upload-time = "2025-10-15T23:17:40.888Z" }, + { url = "https://files.pythonhosted.org/packages/f6/30/640f34ccd4d2a1bc88367b54b926b781b5a018d65f404d409aba76a84b1c/cryptography-46.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:760f83faa07f8b64e9c33fc963d790a2edb24efb479e3520c14a45741cd9b2db", size = 3494315, upload-time = "2025-10-15T23:17:42.769Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8b/88cc7e3bd0a8e7b861f26981f7b820e1f46aa9d26cc482d0feba0ecb4919/cryptography-46.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:516ea134e703e9fe26bcd1277a4b59ad30586ea90c365a87781d7887a646fe21", size = 2919331, upload-time = "2025-10-15T23:17:44.468Z" }, + { url = "https://files.pythonhosted.org/packages/fd/23/45fe7f376a7df8daf6da3556603b36f53475a99ce4faacb6ba2cf3d82021/cryptography-46.0.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:cb3d760a6117f621261d662bccc8ef5bc32ca673e037c83fbe565324f5c46936", size = 7218248, upload-time = "2025-10-15T23:17:46.294Z" }, + { url = "https://files.pythonhosted.org/packages/27/32/b68d27471372737054cbd34c84981f9edbc24fe67ca225d389799614e27f/cryptography-46.0.3-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4b7387121ac7d15e550f5cb4a43aef2559ed759c35df7336c402bb8275ac9683", size = 4294089, upload-time = "2025-10-15T23:17:48.269Z" }, + { url = "https://files.pythonhosted.org/packages/26/42/fa8389d4478368743e24e61eea78846a0006caffaf72ea24a15159215a14/cryptography-46.0.3-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:15ab9b093e8f09daab0f2159bb7e47532596075139dd74365da52ecc9cb46c5d", size = 4440029, upload-time = "2025-10-15T23:17:49.837Z" }, + { url = "https://files.pythonhosted.org/packages/5f/eb/f483db0ec5ac040824f269e93dd2bd8a21ecd1027e77ad7bdf6914f2fd80/cryptography-46.0.3-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:46acf53b40ea38f9c6c229599a4a13f0d46a6c3fa9ef19fc1a124d62e338dfa0", size = 4297222, upload-time = "2025-10-15T23:17:51.357Z" }, + { url = "https://files.pythonhosted.org/packages/fd/cf/da9502c4e1912cb1da3807ea3618a6829bee8207456fbbeebc361ec38ba3/cryptography-46.0.3-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:10ca84c4668d066a9878890047f03546f3ae0a6b8b39b697457b7757aaf18dbc", size = 4012280, upload-time = "2025-10-15T23:17:52.964Z" }, + { url = "https://files.pythonhosted.org/packages/6b/8f/9adb86b93330e0df8b3dcf03eae67c33ba89958fc2e03862ef1ac2b42465/cryptography-46.0.3-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:36e627112085bb3b81b19fed209c05ce2a52ee8b15d161b7c643a7d5a88491f3", size = 4978958, upload-time = "2025-10-15T23:17:54.965Z" }, + { url = "https://files.pythonhosted.org/packages/d1/a0/5fa77988289c34bdb9f913f5606ecc9ada1adb5ae870bd0d1054a7021cc4/cryptography-46.0.3-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1000713389b75c449a6e979ffc7dcc8ac90b437048766cef052d4d30b8220971", size = 4473714, upload-time = "2025-10-15T23:17:56.754Z" }, + { url = "https://files.pythonhosted.org/packages/14/e5/fc82d72a58d41c393697aa18c9abe5ae1214ff6f2a5c18ac470f92777895/cryptography-46.0.3-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:b02cf04496f6576afffef5ddd04a0cb7d49cf6be16a9059d793a30b035f6b6ac", size = 4296970, upload-time = "2025-10-15T23:17:58.588Z" }, + { url = "https://files.pythonhosted.org/packages/78/06/5663ed35438d0b09056973994f1aec467492b33bd31da36e468b01ec1097/cryptography-46.0.3-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:71e842ec9bc7abf543b47cf86b9a743baa95f4677d22baa4c7d5c69e49e9bc04", size = 4940236, upload-time = "2025-10-15T23:18:00.897Z" }, + { url = "https://files.pythonhosted.org/packages/fc/59/873633f3f2dcd8a053b8dd1d38f783043b5fce589c0f6988bf55ef57e43e/cryptography-46.0.3-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:402b58fc32614f00980b66d6e56a5b4118e6cb362ae8f3fda141ba4689bd4506", size = 4472642, upload-time = "2025-10-15T23:18:02.749Z" }, + { url = "https://files.pythonhosted.org/packages/3d/39/8e71f3930e40f6877737d6f69248cf74d4e34b886a3967d32f919cc50d3b/cryptography-46.0.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ef639cb3372f69ec44915fafcd6698b6cc78fbe0c2ea41be867f6ed612811963", size = 4423126, upload-time = "2025-10-15T23:18:04.85Z" }, + { url = "https://files.pythonhosted.org/packages/cd/c7/f65027c2810e14c3e7268353b1681932b87e5a48e65505d8cc17c99e36ae/cryptography-46.0.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3b51b8ca4f1c6453d8829e1eb7299499ca7f313900dd4d89a24b8b87c0a780d4", size = 4686573, upload-time = "2025-10-15T23:18:06.908Z" }, + { url = "https://files.pythonhosted.org/packages/0a/6e/1c8331ddf91ca4730ab3086a0f1be19c65510a33b5a441cb334e7a2d2560/cryptography-46.0.3-cp38-abi3-win32.whl", hash = "sha256:6276eb85ef938dc035d59b87c8a7dc559a232f954962520137529d77b18ff1df", size = 3036695, upload-time = "2025-10-15T23:18:08.672Z" }, + { url = "https://files.pythonhosted.org/packages/90/45/b0d691df20633eff80955a0fc7695ff9051ffce8b69741444bd9ed7bd0db/cryptography-46.0.3-cp38-abi3-win_amd64.whl", hash = "sha256:416260257577718c05135c55958b674000baef9a1c7d9e8f306ec60d71db850f", size = 3501720, upload-time = "2025-10-15T23:18:10.632Z" }, + { url = "https://files.pythonhosted.org/packages/e8/cb/2da4cc83f5edb9c3257d09e1e7ab7b23f049c7962cae8d842bbef0a9cec9/cryptography-46.0.3-cp38-abi3-win_arm64.whl", hash = "sha256:d89c3468de4cdc4f08a57e214384d0471911a3830fcdaf7a8cc587e42a866372", size = 2918740, upload-time = "2025-10-15T23:18:12.277Z" }, +] + +[[package]] +name = "cyclopts" +version = "4.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "docstring-parser" }, + { name = "rich" }, + { name = "rich-rst" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1b/0f/fe026df2ab8301e30a2b0bd425ff1462ad858fd4f991c1ac0389c2059c24/cyclopts-4.3.0.tar.gz", hash = "sha256:e95179cd0a959ce250ecfb2f0262a5996a92c1f9467bccad2f3d829e6833cef5", size = 151411, upload-time = "2025-11-25T02:59:33.572Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7a/e8/77a231ae531cf38765b75ddf27dae28bb5f70b41d8bb4f15ce1650e93f57/cyclopts-4.3.0-py3-none-any.whl", hash = "sha256:91a30b69faf128ada7cfeaefd7d9649dc222e8b2a8697f1fc99e4ee7b7ca44f3", size = 187184, upload-time = "2025-11-25T02:59:32.21Z" }, +] + +[[package]] +name = "diskcache" +version = "5.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3f/21/1c1ffc1a039ddcc459db43cc108658f32c57d271d7289a2794e401d0fdb6/diskcache-5.6.3.tar.gz", hash = "sha256:2c3a3fa2743d8535d832ec61c2054a1641f41775aa7c556758a109941e33e4fc", size = 67916, upload-time = "2023-08-31T06:12:00.316Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/27/4570e78fc0bf5ea0ca45eb1de3818a23787af9b390c0b0a0033a1b8236f9/diskcache-5.6.3-py3-none-any.whl", hash = "sha256:5e31b2d5fbad117cc363ebaf6b689474db18a1f6438bc82358b024abd4c2ca19", size = 45550, upload-time = "2023-08-31T06:11:58.822Z" }, +] + +[[package]] +name = "dnspython" +version = "2.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/8b/57666417c0f90f08bcafa776861060426765fdb422eb10212086fb811d26/dnspython-2.8.0.tar.gz", hash = "sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f", size = 368251, upload-time = "2025-09-07T18:58:00.022Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/5a/18ad964b0086c6e62e2e7500f7edc89e3faa45033c71c1893d34eed2b2de/dnspython-2.8.0-py3-none-any.whl", hash = "sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af", size = 331094, upload-time = "2025-09-07T18:57:58.071Z" }, +] + +[[package]] +name = "docstring-parser" +version = "0.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/9d/c3b43da9515bd270df0f80548d9944e389870713cc1fe2b8fb35fe2bcefd/docstring_parser-0.17.0.tar.gz", hash = "sha256:583de4a309722b3315439bb31d64ba3eebada841f2e2cee23b99df001434c912", size = 27442, upload-time = "2025-07-21T07:35:01.868Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl", hash = "sha256:cf2569abd23dce8099b300f9b4fa8191e9582dda731fd533daf54c4551658708", size = 36896, upload-time = "2025-07-21T07:35:00.684Z" }, +] + +[[package]] +name = "docutils" +version = "0.22.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d9/02/111134bfeb6e6c7ac4c74594e39a59f6c0195dc4846afbeac3cba60f1927/docutils-0.22.3.tar.gz", hash = "sha256:21486ae730e4ca9f622677b1412b879af1791efcfba517e4c6f60be543fc8cdd", size = 2290153, upload-time = "2025-11-06T02:35:55.655Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl", hash = "sha256:bd772e4aca73aff037958d44f2be5229ded4c09927fcf8690c577b66234d6ceb", size = 633032, upload-time = "2025-11-06T02:35:52.391Z" }, +] + +[[package]] +name = "email-validator" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dnspython" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f5/22/900cb125c76b7aaa450ce02fd727f452243f2e91a61af068b40adba60ea9/email_validator-2.3.0.tar.gz", hash = "sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426", size = 51238, upload-time = "2025-08-26T13:09:06.831Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/15/545e2b6cf2e3be84bc1ed85613edd75b8aea69807a71c26f4ca6a9258e82/email_validator-2.3.0-py3-none-any.whl", hash = "sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4", size = 35604, upload-time = "2025-08-26T13:09:05.858Z" }, +] + +[[package]] +name = "exceptiongroup" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, +] + +[[package]] +name = "fastmcp" +version = "2.13.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "authlib" }, + { name = "cyclopts" }, + { name = "exceptiongroup" }, + { name = "httpx" }, + { name = "jsonschema-path" }, + { name = "mcp" }, + { name = "openapi-pydantic" }, + { name = "platformdirs" }, + { name = "py-key-value-aio", extra = ["disk", "keyring", "memory"] }, + { name = "pydantic", extra = ["email"] }, + { name = "pyperclip" }, + { name = "python-dotenv" }, + { name = "rich" }, + { name = "uvicorn" }, + { name = "websockets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d4/a3/c9eb28b5f0b979b0dd8aa9ba56e69298cdb2d72c15592165d042ccb20194/fastmcp-2.13.1.tar.gz", hash = "sha256:b9c664c51f1ff47c698225e7304267ae29a51913f681bd49e442b8682f9a5f90", size = 8170226, upload-time = "2025-11-15T19:02:17.693Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/4b/7e36db0a90044be181319ff025be7cc57089ddb6ba8f3712dea543b9cf97/fastmcp-2.13.1-py3-none-any.whl", hash = "sha256:7a78b19785c4ec04a758d920c312769a497e3f6ab4c80feed504df1ed7de9f3c", size = 376750, upload-time = "2025-11-15T19:02:15.748Z" }, +] + +[[package]] +name = "goat" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "fastmcp" }, + { name = "httpx" }, +] + +[package.metadata] +requires-dist = [ + { name = "fastmcp", specifier = ">=2.13.1" }, + { name = "httpx", specifier = ">=0.28.1" }, +] + +[[package]] +name = "h11" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, +] + +[[package]] +name = "httpx" +version = "0.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, +] + +[[package]] +name = "httpx-sse" +version = "0.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/4c/751061ffa58615a32c31b2d82e8482be8dd4a89154f003147acee90f2be9/httpx_sse-0.4.3.tar.gz", hash = "sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d", size = 15943, upload-time = "2025-10-10T21:48:22.271Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/fd/6668e5aec43ab844de6fc74927e155a3b37bf40d7c3790e49fc0406b6578/httpx_sse-0.4.3-py3-none-any.whl", hash = "sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc", size = 8960, upload-time = "2025-10-10T21:48:21.158Z" }, +] + +[[package]] +name = "idna" +version = "3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" }, +] + +[[package]] +name = "jaraco-classes" +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "more-itertools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/c0/ed4a27bc5571b99e3cff68f8a9fa5b56ff7df1c2251cc715a652ddd26402/jaraco.classes-3.4.0.tar.gz", hash = "sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd", size = 11780, upload-time = "2024-03-31T07:27:36.643Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl", hash = "sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790", size = 6777, upload-time = "2024-03-31T07:27:34.792Z" }, +] + +[[package]] +name = "jaraco-context" +version = "6.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/df/ad/f3777b81bf0b6e7bc7514a1656d3e637b2e8e15fab2ce3235730b3e7a4e6/jaraco_context-6.0.1.tar.gz", hash = "sha256:9bae4ea555cf0b14938dc0aee7c9f32ed303aa20a3b73e7dc80111628792d1b3", size = 13912, upload-time = "2024-08-20T03:39:27.358Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl", hash = "sha256:f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4", size = 6825, upload-time = "2024-08-20T03:39:25.966Z" }, +] + +[[package]] +name = "jaraco-functools" +version = "4.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "more-itertools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f7/ed/1aa2d585304ec07262e1a83a9889880701079dde796ac7b1d1826f40c63d/jaraco_functools-4.3.0.tar.gz", hash = "sha256:cfd13ad0dd2c47a3600b439ef72d8615d482cedcff1632930d6f28924d92f294", size = 19755, upload-time = "2025-08-18T20:05:09.91Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b4/09/726f168acad366b11e420df31bf1c702a54d373a83f968d94141a8c3fde0/jaraco_functools-4.3.0-py3-none-any.whl", hash = "sha256:227ff8ed6f7b8f62c56deff101545fa7543cf2c8e7b82a7c2116e672f29c26e8", size = 10408, upload-time = "2025-08-18T20:05:08.69Z" }, +] + +[[package]] +name = "jeepney" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/6f/357efd7602486741aa73ffc0617fb310a29b588ed0fd69c2399acbb85b0c/jeepney-0.9.0.tar.gz", hash = "sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732", size = 106758, upload-time = "2025-02-27T18:51:01.684Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl", hash = "sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683", size = 49010, upload-time = "2025-02-27T18:51:00.104Z" }, +] + +[[package]] +name = "jsonschema" +version = "4.25.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/74/69/f7185de793a29082a9f3c7728268ffb31cb5095131a9c139a74078e27336/jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85", size = 357342, upload-time = "2025-08-18T17:03:50.038Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63", size = 90040, upload-time = "2025-08-18T17:03:48.373Z" }, +] + +[[package]] +name = "jsonschema-path" +version = "0.3.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pathable" }, + { name = "pyyaml" }, + { name = "referencing" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6e/45/41ebc679c2a4fced6a722f624c18d658dee42612b83ea24c1caf7c0eb3a8/jsonschema_path-0.3.4.tar.gz", hash = "sha256:8365356039f16cc65fddffafda5f58766e34bebab7d6d105616ab52bc4297001", size = 11159, upload-time = "2025-01-24T14:33:16.547Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/58/3485da8cb93d2f393bce453adeef16896751f14ba3e2024bc21dc9597646/jsonschema_path-0.3.4-py3-none-any.whl", hash = "sha256:f502191fdc2b22050f9a81c9237be9d27145b9001c55842bece5e94e382e52f8", size = 14810, upload-time = "2025-01-24T14:33:14.652Z" }, +] + +[[package]] +name = "jsonschema-specifications" +version = "2025.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, +] + +[[package]] +name = "keyring" +version = "25.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jaraco-classes" }, + { name = "jaraco-context" }, + { name = "jaraco-functools" }, + { name = "jeepney", marker = "sys_platform == 'linux'" }, + { name = "pywin32-ctypes", marker = "sys_platform == 'win32'" }, + { name = "secretstorage", marker = "sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/43/4b/674af6ef2f97d56f0ab5153bf0bfa28ccb6c3ed4d1babf4305449668807b/keyring-25.7.0.tar.gz", hash = "sha256:fe01bd85eb3f8fb3dd0405defdeac9a5b4f6f0439edbb3149577f244a2e8245b", size = 63516, upload-time = "2025-11-16T16:26:09.482Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl", hash = "sha256:be4a0b195f149690c166e850609a477c532ddbfbaed96a404d4e43f8d5e2689f", size = 39160, upload-time = "2025-11-16T16:26:08.402Z" }, +] + +[[package]] +name = "markdown-it-py" +version = "4.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070, upload-time = "2025-08-11T12:57:52.854Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147", size = 87321, upload-time = "2025-08-11T12:57:51.923Z" }, +] + +[[package]] +name = "mcp" +version = "1.22.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "httpx" }, + { name = "httpx-sse" }, + { name = "jsonschema" }, + { name = "pydantic" }, + { name = "pydantic-settings" }, + { name = "pyjwt", extra = ["crypto"] }, + { name = "python-multipart" }, + { name = "pywin32", marker = "sys_platform == 'win32'" }, + { name = "sse-starlette" }, + { name = "starlette" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, + { name = "uvicorn", marker = "sys_platform != 'emscripten'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/a2/c5ec0ab38b35ade2ae49a90fada718fbc76811dc5aa1760414c6aaa6b08a/mcp-1.22.0.tar.gz", hash = "sha256:769b9ac90ed42134375b19e777a2858ca300f95f2e800982b3e2be62dfc0ba01", size = 471788, upload-time = "2025-11-20T20:11:28.095Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/bb/711099f9c6bb52770f56e56401cdfb10da5b67029f701e0df29362df4c8e/mcp-1.22.0-py3-none-any.whl", hash = "sha256:bed758e24df1ed6846989c909ba4e3df339a27b4f30f1b8b627862a4bade4e98", size = 175489, upload-time = "2025-11-20T20:11:26.542Z" }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, +] + +[[package]] +name = "more-itertools" +version = "10.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ea/5d/38b681d3fce7a266dd9ab73c66959406d565b3e85f21d5e66e1181d93721/more_itertools-10.8.0.tar.gz", hash = "sha256:f638ddf8a1a0d134181275fb5d58b086ead7c6a72429ad725c67503f13ba30bd", size = 137431, upload-time = "2025-09-02T15:23:11.018Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl", hash = "sha256:52d4362373dcf7c52546bc4af9a86ee7c4579df9a8dc268be0a2f949d376cc9b", size = 69667, upload-time = "2025-09-02T15:23:09.635Z" }, +] + +[[package]] +name = "openapi-pydantic" +version = "0.5.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/02/2e/58d83848dd1a79cb92ed8e63f6ba901ca282c5f09d04af9423ec26c56fd7/openapi_pydantic-0.5.1.tar.gz", hash = "sha256:ff6835af6bde7a459fb93eb93bb92b8749b754fc6e51b2f1590a19dc3005ee0d", size = 60892, upload-time = "2025-01-08T19:29:27.083Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/cf/03675d8bd8ecbf4445504d8071adab19f5f993676795708e36402ab38263/openapi_pydantic-0.5.1-py3-none-any.whl", hash = "sha256:a3a09ef4586f5bd760a8df7f43028b60cafb6d9f61de2acba9574766255ab146", size = 96381, upload-time = "2025-01-08T19:29:25.275Z" }, +] + +[[package]] +name = "pathable" +version = "0.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/67/93/8f2c2075b180c12c1e9f6a09d1a985bc2036906b13dff1d8917e395f2048/pathable-0.4.4.tar.gz", hash = "sha256:6905a3cd17804edfac7875b5f6c9142a218c7caef78693c2dbbbfbac186d88b2", size = 8124, upload-time = "2025-01-10T18:43:13.247Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7d/eb/b6260b31b1a96386c0a880edebe26f89669098acea8e0318bff6adb378fd/pathable-0.4.4-py3-none-any.whl", hash = "sha256:5ae9e94793b6ef5a4cbe0a7ce9dbbefc1eec38df253763fd0aeeacf2762dbbc2", size = 9592, upload-time = "2025-01-10T18:43:11.88Z" }, +] + +[[package]] +name = "pathvalidate" +version = "3.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fa/2a/52a8da6fe965dea6192eb716b357558e103aea0a1e9a8352ad575a8406ca/pathvalidate-3.3.1.tar.gz", hash = "sha256:b18c07212bfead624345bb8e1d6141cdcf15a39736994ea0b94035ad2b1ba177", size = 63262, upload-time = "2025-06-15T09:07:20.736Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/70/875f4a23bfc4731703a5835487d0d2fb999031bd415e7d17c0ae615c18b7/pathvalidate-3.3.1-py3-none-any.whl", hash = "sha256:5263baab691f8e1af96092fa5137ee17df5bdfbd6cff1fcac4d6ef4bc2e1735f", size = 24305, upload-time = "2025-06-15T09:07:19.117Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/61/33/9611380c2bdb1225fdef633e2a9610622310fed35ab11dac9620972ee088/platformdirs-4.5.0.tar.gz", hash = "sha256:70ddccdd7c99fc5942e9fc25636a8b34d04c24b335100223152c2803e4063312", size = 21632, upload-time = "2025-10-08T17:44:48.791Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/cb/ac7874b3e5d58441674fb70742e6c374b28b0c7cb988d37d991cde47166c/platformdirs-4.5.0-py3-none-any.whl", hash = "sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3", size = 18651, upload-time = "2025-10-08T17:44:47.223Z" }, +] + +[[package]] +name = "py-key-value-aio" +version = "0.2.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beartype" }, + { name = "py-key-value-shared" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ca/35/65310a4818acec0f87a46e5565e341c5a96fc062a9a03495ad28828ff4d7/py_key_value_aio-0.2.8.tar.gz", hash = "sha256:c0cfbb0bd4e962a3fa1a9fa6db9ba9df812899bd9312fa6368aaea7b26008b36", size = 32853, upload-time = "2025-10-24T13:31:04.688Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cd/5a/e56747d87a97ad2aff0f3700d77f186f0704c90c2da03bfed9e113dae284/py_key_value_aio-0.2.8-py3-none-any.whl", hash = "sha256:561565547ce8162128fd2bd0b9d70ce04a5f4586da8500cce79a54dfac78c46a", size = 69200, upload-time = "2025-10-24T13:31:03.81Z" }, +] + +[package.optional-dependencies] +disk = [ + { name = "diskcache" }, + { name = "pathvalidate" }, +] +keyring = [ + { name = "keyring" }, +] +memory = [ + { name = "cachetools" }, +] + +[[package]] +name = "py-key-value-shared" +version = "0.2.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beartype" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/26/79/05a1f9280cfa0709479319cbfd2b1c5beb23d5034624f548c83fb65b0b61/py_key_value_shared-0.2.8.tar.gz", hash = "sha256:703b4d3c61af124f0d528ba85995c3c8d78f8bd3d2b217377bd3278598070cc1", size = 8216, upload-time = "2025-10-24T13:31:03.601Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/7a/1726ceaa3343874f322dd83c9ec376ad81f533df8422b8b1e1233a59f8ce/py_key_value_shared-0.2.8-py3-none-any.whl", hash = "sha256:aff1bbfd46d065b2d67897d298642e80e5349eae588c6d11b48452b46b8d46ba", size = 14586, upload-time = "2025-10-24T13:31:02.838Z" }, +] + +[[package]] +name = "pycparser" +version = "2.23" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size = 173734, upload-time = "2025-09-09T13:23:47.91Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140, upload-time = "2025-09-09T13:23:46.651Z" }, +] + +[[package]] +name = "pydantic" +version = "2.12.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/69/44/36f1a6e523abc58ae5f928898e4aca2e0ea509b5aa6f6f392a5d882be928/pydantic-2.12.5.tar.gz", hash = "sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49", size = 821591, upload-time = "2025-11-26T15:11:46.471Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl", hash = "sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d", size = 463580, upload-time = "2025-11-26T15:11:44.605Z" }, +] + +[package.optional-dependencies] +email = [ + { name = "email-validator" }, +] + +[[package]] +name = "pydantic-core" +version = "2.41.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/70/23b021c950c2addd24ec408e9ab05d59b035b39d97cdc1130e1bce647bb6/pydantic_core-2.41.5.tar.gz", hash = "sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e", size = 460952, upload-time = "2025-11-04T13:43:49.098Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/5d/5f6c63eebb5afee93bcaae4ce9a898f3373ca23df3ccaef086d0233a35a7/pydantic_core-2.41.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7", size = 2110990, upload-time = "2025-11-04T13:39:58.079Z" }, + { url = "https://files.pythonhosted.org/packages/aa/32/9c2e8ccb57c01111e0fd091f236c7b371c1bccea0fa85247ac55b1e2b6b6/pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0", size = 1896003, upload-time = "2025-11-04T13:39:59.956Z" }, + { url = "https://files.pythonhosted.org/packages/68/b8/a01b53cb0e59139fbc9e4fda3e9724ede8de279097179be4ff31f1abb65a/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69", size = 1919200, upload-time = "2025-11-04T13:40:02.241Z" }, + { url = "https://files.pythonhosted.org/packages/38/de/8c36b5198a29bdaade07b5985e80a233a5ac27137846f3bc2d3b40a47360/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed2e99c456e3fadd05c991f8f437ef902e00eedf34320ba2b0842bd1c3ca3a75", size = 2052578, upload-time = "2025-11-04T13:40:04.401Z" }, + { url = "https://files.pythonhosted.org/packages/00/b5/0e8e4b5b081eac6cb3dbb7e60a65907549a1ce035a724368c330112adfdd/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65840751b72fbfd82c3c640cff9284545342a4f1eb1586ad0636955b261b0b05", size = 2208504, upload-time = "2025-11-04T13:40:06.072Z" }, + { url = "https://files.pythonhosted.org/packages/77/56/87a61aad59c7c5b9dc8caad5a41a5545cba3810c3e828708b3d7404f6cef/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e536c98a7626a98feb2d3eaf75944ef6f3dbee447e1f841eae16f2f0a72d8ddc", size = 2335816, upload-time = "2025-11-04T13:40:07.835Z" }, + { url = "https://files.pythonhosted.org/packages/0d/76/941cc9f73529988688a665a5c0ecff1112b3d95ab48f81db5f7606f522d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c", size = 2075366, upload-time = "2025-11-04T13:40:09.804Z" }, + { url = "https://files.pythonhosted.org/packages/d3/43/ebef01f69baa07a482844faaa0a591bad1ef129253ffd0cdaa9d8a7f72d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d38548150c39b74aeeb0ce8ee1d8e82696f4a4e16ddc6de7b1d8823f7de4b9b5", size = 2171698, upload-time = "2025-11-04T13:40:12.004Z" }, + { url = "https://files.pythonhosted.org/packages/b1/87/41f3202e4193e3bacfc2c065fab7706ebe81af46a83d3e27605029c1f5a6/pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c23e27686783f60290e36827f9c626e63154b82b116d7fe9adba1fda36da706c", size = 2132603, upload-time = "2025-11-04T13:40:13.868Z" }, + { url = "https://files.pythonhosted.org/packages/49/7d/4c00df99cb12070b6bccdef4a195255e6020a550d572768d92cc54dba91a/pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:482c982f814460eabe1d3bb0adfdc583387bd4691ef00b90575ca0d2b6fe2294", size = 2329591, upload-time = "2025-11-04T13:40:15.672Z" }, + { url = "https://files.pythonhosted.org/packages/cc/6a/ebf4b1d65d458f3cda6a7335d141305dfa19bdc61140a884d165a8a1bbc7/pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1", size = 2319068, upload-time = "2025-11-04T13:40:17.532Z" }, + { url = "https://files.pythonhosted.org/packages/49/3b/774f2b5cd4192d5ab75870ce4381fd89cf218af999515baf07e7206753f0/pydantic_core-2.41.5-cp312-cp312-win32.whl", hash = "sha256:b74557b16e390ec12dca509bce9264c3bbd128f8a2c376eaa68003d7f327276d", size = 1985908, upload-time = "2025-11-04T13:40:19.309Z" }, + { url = "https://files.pythonhosted.org/packages/86/45/00173a033c801cacf67c190fef088789394feaf88a98a7035b0e40d53dc9/pydantic_core-2.41.5-cp312-cp312-win_amd64.whl", hash = "sha256:1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815", size = 2020145, upload-time = "2025-11-04T13:40:21.548Z" }, + { url = "https://files.pythonhosted.org/packages/f9/22/91fbc821fa6d261b376a3f73809f907cec5ca6025642c463d3488aad22fb/pydantic_core-2.41.5-cp312-cp312-win_arm64.whl", hash = "sha256:1746d4a3d9a794cacae06a5eaaccb4b8643a131d45fbc9af23e353dc0a5ba5c3", size = 1976179, upload-time = "2025-11-04T13:40:23.393Z" }, + { url = "https://files.pythonhosted.org/packages/87/06/8806241ff1f70d9939f9af039c6c35f2360cf16e93c2ca76f184e76b1564/pydantic_core-2.41.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9", size = 2120403, upload-time = "2025-11-04T13:40:25.248Z" }, + { url = "https://files.pythonhosted.org/packages/94/02/abfa0e0bda67faa65fef1c84971c7e45928e108fe24333c81f3bfe35d5f5/pydantic_core-2.41.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34", size = 1896206, upload-time = "2025-11-04T13:40:27.099Z" }, + { url = "https://files.pythonhosted.org/packages/15/df/a4c740c0943e93e6500f9eb23f4ca7ec9bf71b19e608ae5b579678c8d02f/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0", size = 1919307, upload-time = "2025-11-04T13:40:29.806Z" }, + { url = "https://files.pythonhosted.org/packages/9a/e3/6324802931ae1d123528988e0e86587c2072ac2e5394b4bc2bc34b61ff6e/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33", size = 2063258, upload-time = "2025-11-04T13:40:33.544Z" }, + { url = "https://files.pythonhosted.org/packages/c9/d4/2230d7151d4957dd79c3044ea26346c148c98fbf0ee6ebd41056f2d62ab5/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e", size = 2214917, upload-time = "2025-11-04T13:40:35.479Z" }, + { url = "https://files.pythonhosted.org/packages/e6/9f/eaac5df17a3672fef0081b6c1bb0b82b33ee89aa5cec0d7b05f52fd4a1fa/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2", size = 2332186, upload-time = "2025-11-04T13:40:37.436Z" }, + { url = "https://files.pythonhosted.org/packages/cf/4e/35a80cae583a37cf15604b44240e45c05e04e86f9cfd766623149297e971/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586", size = 2073164, upload-time = "2025-11-04T13:40:40.289Z" }, + { url = "https://files.pythonhosted.org/packages/bf/e3/f6e262673c6140dd3305d144d032f7bd5f7497d3871c1428521f19f9efa2/pydantic_core-2.41.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d", size = 2179146, upload-time = "2025-11-04T13:40:42.809Z" }, + { url = "https://files.pythonhosted.org/packages/75/c7/20bd7fc05f0c6ea2056a4565c6f36f8968c0924f19b7d97bbfea55780e73/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740", size = 2137788, upload-time = "2025-11-04T13:40:44.752Z" }, + { url = "https://files.pythonhosted.org/packages/3a/8d/34318ef985c45196e004bc46c6eab2eda437e744c124ef0dbe1ff2c9d06b/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e", size = 2340133, upload-time = "2025-11-04T13:40:46.66Z" }, + { url = "https://files.pythonhosted.org/packages/9c/59/013626bf8c78a5a5d9350d12e7697d3d4de951a75565496abd40ccd46bee/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858", size = 2324852, upload-time = "2025-11-04T13:40:48.575Z" }, + { url = "https://files.pythonhosted.org/packages/1a/d9/c248c103856f807ef70c18a4f986693a46a8ffe1602e5d361485da502d20/pydantic_core-2.41.5-cp313-cp313-win32.whl", hash = "sha256:650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36", size = 1994679, upload-time = "2025-11-04T13:40:50.619Z" }, + { url = "https://files.pythonhosted.org/packages/9e/8b/341991b158ddab181cff136acd2552c9f35bd30380422a639c0671e99a91/pydantic_core-2.41.5-cp313-cp313-win_amd64.whl", hash = "sha256:79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11", size = 2019766, upload-time = "2025-11-04T13:40:52.631Z" }, + { url = "https://files.pythonhosted.org/packages/73/7d/f2f9db34af103bea3e09735bb40b021788a5e834c81eedb541991badf8f5/pydantic_core-2.41.5-cp313-cp313-win_arm64.whl", hash = "sha256:3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd", size = 1981005, upload-time = "2025-11-04T13:40:54.734Z" }, + { url = "https://files.pythonhosted.org/packages/ea/28/46b7c5c9635ae96ea0fbb779e271a38129df2550f763937659ee6c5dbc65/pydantic_core-2.41.5-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a", size = 2119622, upload-time = "2025-11-04T13:40:56.68Z" }, + { url = "https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14", size = 1891725, upload-time = "2025-11-04T13:40:58.807Z" }, + { url = "https://files.pythonhosted.org/packages/23/04/e89c29e267b8060b40dca97bfc64a19b2a3cf99018167ea1677d96368273/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1", size = 1915040, upload-time = "2025-11-04T13:41:00.853Z" }, + { url = "https://files.pythonhosted.org/packages/84/a3/15a82ac7bd97992a82257f777b3583d3e84bdb06ba6858f745daa2ec8a85/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66", size = 2063691, upload-time = "2025-11-04T13:41:03.504Z" }, + { url = "https://files.pythonhosted.org/packages/74/9b/0046701313c6ef08c0c1cf0e028c67c770a4e1275ca73131563c5f2a310a/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869", size = 2213897, upload-time = "2025-11-04T13:41:05.804Z" }, + { url = "https://files.pythonhosted.org/packages/8a/cd/6bac76ecd1b27e75a95ca3a9a559c643b3afcd2dd62086d4b7a32a18b169/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2", size = 2333302, upload-time = "2025-11-04T13:41:07.809Z" }, + { url = "https://files.pythonhosted.org/packages/4c/d2/ef2074dc020dd6e109611a8be4449b98cd25e1b9b8a303c2f0fca2f2bcf7/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375", size = 2064877, upload-time = "2025-11-04T13:41:09.827Z" }, + { url = "https://files.pythonhosted.org/packages/18/66/e9db17a9a763d72f03de903883c057b2592c09509ccfe468187f2a2eef29/pydantic_core-2.41.5-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553", size = 2180680, upload-time = "2025-11-04T13:41:12.379Z" }, + { url = "https://files.pythonhosted.org/packages/d3/9e/3ce66cebb929f3ced22be85d4c2399b8e85b622db77dad36b73c5387f8f8/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90", size = 2138960, upload-time = "2025-11-04T13:41:14.627Z" }, + { url = "https://files.pythonhosted.org/packages/a6/62/205a998f4327d2079326b01abee48e502ea739d174f0a89295c481a2272e/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07", size = 2339102, upload-time = "2025-11-04T13:41:16.868Z" }, + { url = "https://files.pythonhosted.org/packages/3c/0d/f05e79471e889d74d3d88f5bd20d0ed189ad94c2423d81ff8d0000aab4ff/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb", size = 2326039, upload-time = "2025-11-04T13:41:18.934Z" }, + { url = "https://files.pythonhosted.org/packages/ec/e1/e08a6208bb100da7e0c4b288eed624a703f4d129bde2da475721a80cab32/pydantic_core-2.41.5-cp314-cp314-win32.whl", hash = "sha256:aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23", size = 1995126, upload-time = "2025-11-04T13:41:21.418Z" }, + { url = "https://files.pythonhosted.org/packages/48/5d/56ba7b24e9557f99c9237e29f5c09913c81eeb2f3217e40e922353668092/pydantic_core-2.41.5-cp314-cp314-win_amd64.whl", hash = "sha256:8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf", size = 2015489, upload-time = "2025-11-04T13:41:24.076Z" }, + { url = "https://files.pythonhosted.org/packages/4e/bb/f7a190991ec9e3e0ba22e4993d8755bbc4a32925c0b5b42775c03e8148f9/pydantic_core-2.41.5-cp314-cp314-win_arm64.whl", hash = "sha256:e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0", size = 1977288, upload-time = "2025-11-04T13:41:26.33Z" }, + { url = "https://files.pythonhosted.org/packages/92/ed/77542d0c51538e32e15afe7899d79efce4b81eee631d99850edc2f5e9349/pydantic_core-2.41.5-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a", size = 2120255, upload-time = "2025-11-04T13:41:28.569Z" }, + { url = "https://files.pythonhosted.org/packages/bb/3d/6913dde84d5be21e284439676168b28d8bbba5600d838b9dca99de0fad71/pydantic_core-2.41.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3", size = 1863760, upload-time = "2025-11-04T13:41:31.055Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f0/e5e6b99d4191da102f2b0eb9687aaa7f5bea5d9964071a84effc3e40f997/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c", size = 1878092, upload-time = "2025-11-04T13:41:33.21Z" }, + { url = "https://files.pythonhosted.org/packages/71/48/36fb760642d568925953bcc8116455513d6e34c4beaa37544118c36aba6d/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612", size = 2053385, upload-time = "2025-11-04T13:41:35.508Z" }, + { url = "https://files.pythonhosted.org/packages/20/25/92dc684dd8eb75a234bc1c764b4210cf2646479d54b47bf46061657292a8/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d", size = 2218832, upload-time = "2025-11-04T13:41:37.732Z" }, + { url = "https://files.pythonhosted.org/packages/e2/09/f53e0b05023d3e30357d82eb35835d0f6340ca344720a4599cd663dca599/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9", size = 2327585, upload-time = "2025-11-04T13:41:40Z" }, + { url = "https://files.pythonhosted.org/packages/aa/4e/2ae1aa85d6af35a39b236b1b1641de73f5a6ac4d5a7509f77b814885760c/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660", size = 2041078, upload-time = "2025-11-04T13:41:42.323Z" }, + { url = "https://files.pythonhosted.org/packages/cd/13/2e215f17f0ef326fc72afe94776edb77525142c693767fc347ed6288728d/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9", size = 2173914, upload-time = "2025-11-04T13:41:45.221Z" }, + { url = "https://files.pythonhosted.org/packages/02/7a/f999a6dcbcd0e5660bc348a3991c8915ce6599f4f2c6ac22f01d7a10816c/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3", size = 2129560, upload-time = "2025-11-04T13:41:47.474Z" }, + { url = "https://files.pythonhosted.org/packages/3a/b1/6c990ac65e3b4c079a4fb9f5b05f5b013afa0f4ed6780a3dd236d2cbdc64/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf", size = 2329244, upload-time = "2025-11-04T13:41:49.992Z" }, + { url = "https://files.pythonhosted.org/packages/d9/02/3c562f3a51afd4d88fff8dffb1771b30cfdfd79befd9883ee094f5b6c0d8/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470", size = 2331955, upload-time = "2025-11-04T13:41:54.079Z" }, + { url = "https://files.pythonhosted.org/packages/5c/96/5fb7d8c3c17bc8c62fdb031c47d77a1af698f1d7a406b0f79aaa1338f9ad/pydantic_core-2.41.5-cp314-cp314t-win32.whl", hash = "sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa", size = 1988906, upload-time = "2025-11-04T13:41:56.606Z" }, + { url = "https://files.pythonhosted.org/packages/22/ed/182129d83032702912c2e2d8bbe33c036f342cc735737064668585dac28f/pydantic_core-2.41.5-cp314-cp314t-win_amd64.whl", hash = "sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c", size = 1981607, upload-time = "2025-11-04T13:41:58.889Z" }, + { url = "https://files.pythonhosted.org/packages/9f/ed/068e41660b832bb0b1aa5b58011dea2a3fe0ba7861ff38c4d4904c1c1a99/pydantic_core-2.41.5-cp314-cp314t-win_arm64.whl", hash = "sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008", size = 1974769, upload-time = "2025-11-04T13:42:01.186Z" }, + { url = "https://files.pythonhosted.org/packages/09/32/59b0c7e63e277fa7911c2fc70ccfb45ce4b98991e7ef37110663437005af/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd", size = 2110495, upload-time = "2025-11-04T13:42:49.689Z" }, + { url = "https://files.pythonhosted.org/packages/aa/81/05e400037eaf55ad400bcd318c05bb345b57e708887f07ddb2d20e3f0e98/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc", size = 1915388, upload-time = "2025-11-04T13:42:52.215Z" }, + { url = "https://files.pythonhosted.org/packages/6e/0d/e3549b2399f71d56476b77dbf3cf8937cec5cd70536bdc0e374a421d0599/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56", size = 1942879, upload-time = "2025-11-04T13:42:56.483Z" }, + { url = "https://files.pythonhosted.org/packages/f7/07/34573da085946b6a313d7c42f82f16e8920bfd730665de2d11c0c37a74b5/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b", size = 2139017, upload-time = "2025-11-04T13:42:59.471Z" }, +] + +[[package]] +name = "pydantic-settings" +version = "2.12.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "python-dotenv" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/43/4b/ac7e0aae12027748076d72a8764ff1c9d82ca75a7a52622e67ed3f765c54/pydantic_settings-2.12.0.tar.gz", hash = "sha256:005538ef951e3c2a68e1c08b292b5f2e71490def8589d4221b95dab00dafcfd0", size = 194184, upload-time = "2025-11-10T14:25:47.013Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl", hash = "sha256:fddb9fd99a5b18da837b29710391e945b1e30c135477f484084ee513adb93809", size = 51880, upload-time = "2025-11-10T14:25:45.546Z" }, +] + +[[package]] +name = "pygments" +version = "2.19.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, +] + +[[package]] +name = "pyjwt" +version = "2.10.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/46/bd74733ff231675599650d3e47f361794b22ef3e3770998dda30d3b63726/pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", size = 87785, upload-time = "2024-11-28T03:43:29.933Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb", size = 22997, upload-time = "2024-11-28T03:43:27.893Z" }, +] + +[package.optional-dependencies] +crypto = [ + { name = "cryptography" }, +] + +[[package]] +name = "pyperclip" +version = "1.11.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/52/d87eba7cb129b81563019d1679026e7a112ef76855d6159d24754dbd2a51/pyperclip-1.11.0.tar.gz", hash = "sha256:244035963e4428530d9e3a6101a1ef97209c6825edab1567beac148ccc1db1b6", size = 12185, upload-time = "2025-09-26T14:40:37.245Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/80/fc9d01d5ed37ba4c42ca2b55b4339ae6e200b456be3a1aaddf4a9fa99b8c/pyperclip-1.11.0-py3-none-any.whl", hash = "sha256:299403e9ff44581cb9ba2ffeed69c7aa96a008622ad0c46cb575ca75b5b84273", size = 11063, upload-time = "2025-09-26T14:40:36.069Z" }, +] + +[[package]] +name = "python-dotenv" +version = "1.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f0/26/19cadc79a718c5edbec86fd4919a6b6d3f681039a2f6d66d14be94e75fb9/python_dotenv-1.2.1.tar.gz", hash = "sha256:42667e897e16ab0d66954af0e60a9caa94f0fd4ecf3aaf6d2d260eec1aa36ad6", size = 44221, upload-time = "2025-10-26T15:12:10.434Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl", hash = "sha256:b81ee9561e9ca4004139c6cbba3a238c32b03e4894671e181b671e8cb8425d61", size = 21230, upload-time = "2025-10-26T15:12:09.109Z" }, +] + +[[package]] +name = "python-multipart" +version = "0.0.20" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/87/f44d7c9f274c7ee665a29b885ec97089ec5dc034c7f3fafa03da9e39a09e/python_multipart-0.0.20.tar.gz", hash = "sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13", size = 37158, upload-time = "2024-12-16T19:45:46.972Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/58/38b5afbc1a800eeea951b9285d3912613f2603bdf897a4ab0f4bd7f405fc/python_multipart-0.0.20-py3-none-any.whl", hash = "sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104", size = 24546, upload-time = "2024-12-16T19:45:44.423Z" }, +] + +[[package]] +name = "pywin32" +version = "311" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/ab/01ea1943d4eba0f850c3c61e78e8dd59757ff815ff3ccd0a84de5f541f42/pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31", size = 8706543, upload-time = "2025-07-14T20:13:20.765Z" }, + { url = "https://files.pythonhosted.org/packages/d1/a8/a0e8d07d4d051ec7502cd58b291ec98dcc0c3fff027caad0470b72cfcc2f/pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067", size = 9495040, upload-time = "2025-07-14T20:13:22.543Z" }, + { url = "https://files.pythonhosted.org/packages/ba/3a/2ae996277b4b50f17d61f0603efd8253cb2d79cc7ae159468007b586396d/pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852", size = 8710102, upload-time = "2025-07-14T20:13:24.682Z" }, + { url = "https://files.pythonhosted.org/packages/a5/be/3fd5de0979fcb3994bfee0d65ed8ca9506a8a1260651b86174f6a86f52b3/pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d", size = 8705700, upload-time = "2025-07-14T20:13:26.471Z" }, + { url = "https://files.pythonhosted.org/packages/e3/28/e0a1909523c6890208295a29e05c2adb2126364e289826c0a8bc7297bd5c/pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d", size = 9494700, upload-time = "2025-07-14T20:13:28.243Z" }, + { url = "https://files.pythonhosted.org/packages/04/bf/90339ac0f55726dce7d794e6d79a18a91265bdf3aa70b6b9ca52f35e022a/pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a", size = 8709318, upload-time = "2025-07-14T20:13:30.348Z" }, + { url = "https://files.pythonhosted.org/packages/c9/31/097f2e132c4f16d99a22bfb777e0fd88bd8e1c634304e102f313af69ace5/pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee", size = 8840714, upload-time = "2025-07-14T20:13:32.449Z" }, + { url = "https://files.pythonhosted.org/packages/90/4b/07c77d8ba0e01349358082713400435347df8426208171ce297da32c313d/pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87", size = 9656800, upload-time = "2025-07-14T20:13:34.312Z" }, + { url = "https://files.pythonhosted.org/packages/c0/d2/21af5c535501a7233e734b8af901574572da66fcc254cb35d0609c9080dd/pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42", size = 8932540, upload-time = "2025-07-14T20:13:36.379Z" }, +] + +[[package]] +name = "pywin32-ctypes" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/85/9f/01a1a99704853cb63f253eea009390c88e7131c67e66a0a02099a8c917cb/pywin32-ctypes-0.2.3.tar.gz", hash = "sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755", size = 29471, upload-time = "2024-08-14T10:15:34.626Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl", hash = "sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8", size = 30756, upload-time = "2024-08-14T10:15:33.187Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, +] + +[[package]] +name = "referencing" +version = "0.36.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744, upload-time = "2025-01-25T08:48:16.138Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775, upload-time = "2025-01-25T08:48:14.241Z" }, +] + +[[package]] +name = "requests" +version = "2.32.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" }, +] + +[[package]] +name = "rich" +version = "14.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fb/d2/8920e102050a0de7bfabeb4c4614a49248cf8d5d7a8d01885fbb24dc767a/rich-14.2.0.tar.gz", hash = "sha256:73ff50c7c0c1c77c8243079283f4edb376f0f6442433aecb8ce7e6d0b92d1fe4", size = 219990, upload-time = "2025-10-09T14:16:53.064Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl", hash = "sha256:76bc51fe2e57d2b1be1f96c524b890b816e334ab4c1e45888799bfaab0021edd", size = 243393, upload-time = "2025-10-09T14:16:51.245Z" }, +] + +[[package]] +name = "rich-rst" +version = "1.3.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "docutils" }, + { name = "rich" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bc/6d/a506aaa4a9eaa945ed8ab2b7347859f53593864289853c5d6d62b77246e0/rich_rst-1.3.2.tar.gz", hash = "sha256:a1196fdddf1e364b02ec68a05e8ff8f6914fee10fbca2e6b6735f166bb0da8d4", size = 14936, upload-time = "2025-10-14T16:49:45.332Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/2f/b4530fbf948867702d0a3f27de4a6aab1d156f406d72852ab902c4d04de9/rich_rst-1.3.2-py3-none-any.whl", hash = "sha256:a99b4907cbe118cf9d18b0b44de272efa61f15117c61e39ebdc431baf5df722a", size = 12567, upload-time = "2025-10-14T16:49:42.953Z" }, +] + +[[package]] +name = "rpds-py" +version = "0.29.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/98/33/23b3b3419b6a3e0f559c7c0d2ca8fc1b9448382b25245033788785921332/rpds_py-0.29.0.tar.gz", hash = "sha256:fe55fe686908f50154d1dc599232016e50c243b438c3b7432f24e2895b0e5359", size = 69359, upload-time = "2025-11-16T14:50:39.532Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/50/bc0e6e736d94e420df79be4deb5c9476b63165c87bb8f19ef75d100d21b3/rpds_py-0.29.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a0891cfd8db43e085c0ab93ab7e9b0c8fee84780d436d3b266b113e51e79f954", size = 376000, upload-time = "2025-11-16T14:48:19.141Z" }, + { url = "https://files.pythonhosted.org/packages/3e/3a/46676277160f014ae95f24de53bed0e3b7ea66c235e7de0b9df7bd5d68ba/rpds_py-0.29.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3897924d3f9a0361472d884051f9a2460358f9a45b1d85a39a158d2f8f1ad71c", size = 360575, upload-time = "2025-11-16T14:48:20.443Z" }, + { url = "https://files.pythonhosted.org/packages/75/ba/411d414ed99ea1afdd185bbabeeaac00624bd1e4b22840b5e9967ade6337/rpds_py-0.29.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a21deb8e0d1571508c6491ce5ea5e25669b1dd4adf1c9d64b6314842f708b5d", size = 392159, upload-time = "2025-11-16T14:48:22.12Z" }, + { url = "https://files.pythonhosted.org/packages/8f/b1/e18aa3a331f705467a48d0296778dc1fea9d7f6cf675bd261f9a846c7e90/rpds_py-0.29.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9efe71687d6427737a0a2de9ca1c0a216510e6cd08925c44162be23ed7bed2d5", size = 410602, upload-time = "2025-11-16T14:48:23.563Z" }, + { url = "https://files.pythonhosted.org/packages/2f/6c/04f27f0c9f2299274c76612ac9d2c36c5048bb2c6c2e52c38c60bf3868d9/rpds_py-0.29.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:40f65470919dc189c833e86b2c4bd21bd355f98436a2cef9e0a9a92aebc8e57e", size = 515808, upload-time = "2025-11-16T14:48:24.949Z" }, + { url = "https://files.pythonhosted.org/packages/83/56/a8412aa464fb151f8bc0d91fb0bb888adc9039bd41c1c6ba8d94990d8cf8/rpds_py-0.29.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:def48ff59f181130f1a2cb7c517d16328efac3ec03951cca40c1dc2049747e83", size = 416015, upload-time = "2025-11-16T14:48:26.782Z" }, + { url = "https://files.pythonhosted.org/packages/04/4c/f9b8a05faca3d9e0a6397c90d13acb9307c9792b2bff621430c58b1d6e76/rpds_py-0.29.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad7bd570be92695d89285a4b373006930715b78d96449f686af422debb4d3949", size = 395325, upload-time = "2025-11-16T14:48:28.055Z" }, + { url = "https://files.pythonhosted.org/packages/34/60/869f3bfbf8ed7b54f1ad9a5543e0fdffdd40b5a8f587fe300ee7b4f19340/rpds_py-0.29.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:5a572911cd053137bbff8e3a52d31c5d2dba51d3a67ad902629c70185f3f2181", size = 410160, upload-time = "2025-11-16T14:48:29.338Z" }, + { url = "https://files.pythonhosted.org/packages/91/aa/e5b496334e3aba4fe4c8a80187b89f3c1294c5c36f2a926da74338fa5a73/rpds_py-0.29.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d583d4403bcbf10cffc3ab5cee23d7643fcc960dff85973fd3c2d6c86e8dbb0c", size = 425309, upload-time = "2025-11-16T14:48:30.691Z" }, + { url = "https://files.pythonhosted.org/packages/85/68/4e24a34189751ceb6d66b28f18159922828dd84155876551f7ca5b25f14f/rpds_py-0.29.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:070befbb868f257d24c3bb350dbd6e2f645e83731f31264b19d7231dd5c396c7", size = 574644, upload-time = "2025-11-16T14:48:31.964Z" }, + { url = "https://files.pythonhosted.org/packages/8c/cf/474a005ea4ea9c3b4f17b6108b6b13cebfc98ebaff11d6e1b193204b3a93/rpds_py-0.29.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:fc935f6b20b0c9f919a8ff024739174522abd331978f750a74bb68abd117bd19", size = 601605, upload-time = "2025-11-16T14:48:33.252Z" }, + { url = "https://files.pythonhosted.org/packages/f4/b1/c56f6a9ab8c5f6bb5c65c4b5f8229167a3a525245b0773f2c0896686b64e/rpds_py-0.29.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8c5a8ecaa44ce2d8d9d20a68a2483a74c07f05d72e94a4dff88906c8807e77b0", size = 564593, upload-time = "2025-11-16T14:48:34.643Z" }, + { url = "https://files.pythonhosted.org/packages/b3/13/0494cecce4848f68501e0a229432620b4b57022388b071eeff95f3e1e75b/rpds_py-0.29.0-cp312-cp312-win32.whl", hash = "sha256:ba5e1aeaf8dd6d8f6caba1f5539cddda87d511331714b7b5fc908b6cfc3636b7", size = 223853, upload-time = "2025-11-16T14:48:36.419Z" }, + { url = "https://files.pythonhosted.org/packages/1f/6a/51e9aeb444a00cdc520b032a28b07e5f8dc7bc328b57760c53e7f96997b4/rpds_py-0.29.0-cp312-cp312-win_amd64.whl", hash = "sha256:b5f6134faf54b3cb83375db0f113506f8b7770785be1f95a631e7e2892101977", size = 239895, upload-time = "2025-11-16T14:48:37.956Z" }, + { url = "https://files.pythonhosted.org/packages/d1/d4/8bce56cdad1ab873e3f27cb31c6a51d8f384d66b022b820525b879f8bed1/rpds_py-0.29.0-cp312-cp312-win_arm64.whl", hash = "sha256:b016eddf00dca7944721bf0cd85b6af7f6c4efaf83ee0b37c4133bd39757a8c7", size = 230321, upload-time = "2025-11-16T14:48:39.71Z" }, + { url = "https://files.pythonhosted.org/packages/fd/d9/c5de60d9d371bbb186c3e9bf75f4fc5665e11117a25a06a6b2e0afb7380e/rpds_py-0.29.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1585648d0760b88292eecab5181f5651111a69d90eff35d6b78aa32998886a61", size = 375710, upload-time = "2025-11-16T14:48:41.063Z" }, + { url = "https://files.pythonhosted.org/packages/b3/b3/0860cdd012291dc21272895ce107f1e98e335509ba986dd83d72658b82b9/rpds_py-0.29.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:521807963971a23996ddaf764c682b3e46459b3c58ccd79fefbe16718db43154", size = 360582, upload-time = "2025-11-16T14:48:42.423Z" }, + { url = "https://files.pythonhosted.org/packages/92/8a/a18c2f4a61b3407e56175f6aab6deacdf9d360191a3d6f38566e1eaf7266/rpds_py-0.29.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a8896986efaa243ab713c69e6491a4138410f0fe36f2f4c71e18bd5501e8014", size = 391172, upload-time = "2025-11-16T14:48:43.75Z" }, + { url = "https://files.pythonhosted.org/packages/fd/49/e93354258508c50abc15cdcd5fcf7ac4117f67bb6233ad7859f75e7372a0/rpds_py-0.29.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1d24564a700ef41480a984c5ebed62b74e6ce5860429b98b1fede76049e953e6", size = 409586, upload-time = "2025-11-16T14:48:45.498Z" }, + { url = "https://files.pythonhosted.org/packages/5a/8d/a27860dae1c19a6bdc901f90c81f0d581df1943355802961a57cdb5b6cd1/rpds_py-0.29.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e6596b93c010d386ae46c9fba9bfc9fc5965fa8228edeac51576299182c2e31c", size = 516339, upload-time = "2025-11-16T14:48:47.308Z" }, + { url = "https://files.pythonhosted.org/packages/fc/ad/a75e603161e79b7110c647163d130872b271c6b28712c803c65d492100f7/rpds_py-0.29.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5cc58aac218826d054c7da7f95821eba94125d88be673ff44267bb89d12a5866", size = 416201, upload-time = "2025-11-16T14:48:48.615Z" }, + { url = "https://files.pythonhosted.org/packages/b9/42/555b4ee17508beafac135c8b450816ace5a96194ce97fefc49d58e5652ea/rpds_py-0.29.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de73e40ebc04dd5d9556f50180395322193a78ec247e637e741c1b954810f295", size = 395095, upload-time = "2025-11-16T14:48:50.027Z" }, + { url = "https://files.pythonhosted.org/packages/cd/f0/c90b671b9031e800ec45112be42ea9f027f94f9ac25faaac8770596a16a1/rpds_py-0.29.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:295ce5ac7f0cf69a651ea75c8f76d02a31f98e5698e82a50a5f4d4982fbbae3b", size = 410077, upload-time = "2025-11-16T14:48:51.515Z" }, + { url = "https://files.pythonhosted.org/packages/3d/80/9af8b640b81fe21e6f718e9dec36c0b5f670332747243130a5490f292245/rpds_py-0.29.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1ea59b23ea931d494459c8338056fe7d93458c0bf3ecc061cd03916505369d55", size = 424548, upload-time = "2025-11-16T14:48:53.237Z" }, + { url = "https://files.pythonhosted.org/packages/e4/0b/b5647446e991736e6a495ef510e6710df91e880575a586e763baeb0aa770/rpds_py-0.29.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f49d41559cebd608042fdcf54ba597a4a7555b49ad5c1c0c03e0af82692661cd", size = 573661, upload-time = "2025-11-16T14:48:54.769Z" }, + { url = "https://files.pythonhosted.org/packages/f7/b3/1b1c9576839ff583d1428efbf59f9ee70498d8ce6c0b328ac02f1e470879/rpds_py-0.29.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:05a2bd42768ea988294ca328206efbcc66e220d2d9b7836ee5712c07ad6340ea", size = 600937, upload-time = "2025-11-16T14:48:56.247Z" }, + { url = "https://files.pythonhosted.org/packages/6c/7b/b6cfca2f9fee4c4494ce54f7fb1b9f578867495a9aa9fc0d44f5f735c8e0/rpds_py-0.29.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:33ca7bdfedd83339ca55da3a5e1527ee5870d4b8369456b5777b197756f3ca22", size = 564496, upload-time = "2025-11-16T14:48:57.691Z" }, + { url = "https://files.pythonhosted.org/packages/b9/fb/ba29ec7f0f06eb801bac5a23057a9ff7670623b5e8013bd59bec4aa09de8/rpds_py-0.29.0-cp313-cp313-win32.whl", hash = "sha256:20c51ae86a0bb9accc9ad4e6cdeec58d5ebb7f1b09dd4466331fc65e1766aae7", size = 223126, upload-time = "2025-11-16T14:48:59.058Z" }, + { url = "https://files.pythonhosted.org/packages/3c/6b/0229d3bed4ddaa409e6d90b0ae967ed4380e4bdd0dad6e59b92c17d42457/rpds_py-0.29.0-cp313-cp313-win_amd64.whl", hash = "sha256:6410e66f02803600edb0b1889541f4b5cc298a5ccda0ad789cc50ef23b54813e", size = 239771, upload-time = "2025-11-16T14:49:00.872Z" }, + { url = "https://files.pythonhosted.org/packages/e4/38/d2868f058b164f8efd89754d85d7b1c08b454f5c07ac2e6cc2e9bd4bd05b/rpds_py-0.29.0-cp313-cp313-win_arm64.whl", hash = "sha256:56838e1cd9174dc23c5691ee29f1d1be9eab357f27efef6bded1328b23e1ced2", size = 229994, upload-time = "2025-11-16T14:49:02.673Z" }, + { url = "https://files.pythonhosted.org/packages/52/91/5de91c5ec7d41759beec9b251630824dbb8e32d20c3756da1a9a9d309709/rpds_py-0.29.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:37d94eadf764d16b9a04307f2ab1d7af6dc28774bbe0535c9323101e14877b4c", size = 365886, upload-time = "2025-11-16T14:49:04.133Z" }, + { url = "https://files.pythonhosted.org/packages/85/7c/415d8c1b016d5f47ecec5145d9d6d21002d39dce8761b30f6c88810b455a/rpds_py-0.29.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d472cf73efe5726a067dce63eebe8215b14beabea7c12606fd9994267b3cfe2b", size = 355262, upload-time = "2025-11-16T14:49:05.543Z" }, + { url = "https://files.pythonhosted.org/packages/3d/14/bf83e2daa4f980e4dc848aed9299792a8b84af95e12541d9e7562f84a6ef/rpds_py-0.29.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72fdfd5ff8992e4636621826371e3ac5f3e3b8323e9d0e48378e9c13c3dac9d0", size = 384826, upload-time = "2025-11-16T14:49:07.301Z" }, + { url = "https://files.pythonhosted.org/packages/33/b8/53330c50a810ae22b4fbba5e6cf961b68b9d72d9bd6780a7c0a79b070857/rpds_py-0.29.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2549d833abdf8275c901313b9e8ff8fba57e50f6a495035a2a4e30621a2f7cc4", size = 394234, upload-time = "2025-11-16T14:49:08.782Z" }, + { url = "https://files.pythonhosted.org/packages/cc/32/01e2e9645cef0e584f518cfde4567563e57db2257244632b603f61b40e50/rpds_py-0.29.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4448dad428f28a6a767c3e3b80cde3446a22a0efbddaa2360f4bb4dc836d0688", size = 520008, upload-time = "2025-11-16T14:49:10.253Z" }, + { url = "https://files.pythonhosted.org/packages/98/c3/0d1b95a81affae2b10f950782e33a1fd2edd6ce2a479966cac98c9a66f57/rpds_py-0.29.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:115f48170fd4296a33938d8c11f697f5f26e0472e43d28f35624764173a60e4d", size = 409569, upload-time = "2025-11-16T14:49:12.478Z" }, + { url = "https://files.pythonhosted.org/packages/fa/60/aa3b8678f3f009f675b99174fa2754302a7fbfe749162e8043d111de2d88/rpds_py-0.29.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e5bb73ffc029820f4348e9b66b3027493ae00bca6629129cd433fd7a76308ee", size = 385188, upload-time = "2025-11-16T14:49:13.88Z" }, + { url = "https://files.pythonhosted.org/packages/92/02/5546c1c8aa89c18d40c1fcffdcc957ba730dee53fb7c3ca3a46f114761d2/rpds_py-0.29.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:b1581fcde18fcdf42ea2403a16a6b646f8eb1e58d7f90a0ce693da441f76942e", size = 398587, upload-time = "2025-11-16T14:49:15.339Z" }, + { url = "https://files.pythonhosted.org/packages/6c/e0/ad6eeaf47e236eba052fa34c4073078b9e092bd44da6bbb35aaae9580669/rpds_py-0.29.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:16e9da2bda9eb17ea318b4c335ec9ac1818e88922cbe03a5743ea0da9ecf74fb", size = 416641, upload-time = "2025-11-16T14:49:16.832Z" }, + { url = "https://files.pythonhosted.org/packages/1a/93/0acedfd50ad9cdd3879c615a6dc8c5f1ce78d2fdf8b87727468bb5bb4077/rpds_py-0.29.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:28fd300326dd21198f311534bdb6d7e989dd09b3418b3a91d54a0f384c700967", size = 566683, upload-time = "2025-11-16T14:49:18.342Z" }, + { url = "https://files.pythonhosted.org/packages/62/53/8c64e0f340a9e801459fc6456821abc15b3582cb5dc3932d48705a9d9ac7/rpds_py-0.29.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2aba991e041d031c7939e1358f583ae405a7bf04804ca806b97a5c0e0af1ea5e", size = 592730, upload-time = "2025-11-16T14:49:19.767Z" }, + { url = "https://files.pythonhosted.org/packages/85/ef/3109b6584f8c4b0d2490747c916df833c127ecfa82be04d9a40a376f2090/rpds_py-0.29.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:7f437026dbbc3f08c99cc41a5b2570c6e1a1ddbe48ab19a9b814254128d4ea7a", size = 557361, upload-time = "2025-11-16T14:49:21.574Z" }, + { url = "https://files.pythonhosted.org/packages/ff/3b/61586475e82d57f01da2c16edb9115a618afe00ce86fe1b58936880b15af/rpds_py-0.29.0-cp313-cp313t-win32.whl", hash = "sha256:6e97846e9800a5d0fe7be4d008f0c93d0feeb2700da7b1f7528dabafb31dfadb", size = 211227, upload-time = "2025-11-16T14:49:23.03Z" }, + { url = "https://files.pythonhosted.org/packages/3b/3a/12dc43f13594a54ea0c9d7e9d43002116557330e3ad45bc56097ddf266e2/rpds_py-0.29.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f49196aec7c4b406495f60e6f947ad71f317a765f956d74bbd83996b9edc0352", size = 225248, upload-time = "2025-11-16T14:49:24.841Z" }, + { url = "https://files.pythonhosted.org/packages/89/b1/0b1474e7899371d9540d3bbb2a499a3427ae1fc39c998563fe9035a1073b/rpds_py-0.29.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:394d27e4453d3b4d82bb85665dc1fcf4b0badc30fc84282defed71643b50e1a1", size = 363731, upload-time = "2025-11-16T14:49:26.683Z" }, + { url = "https://files.pythonhosted.org/packages/28/12/3b7cf2068d0a334ed1d7b385a9c3c8509f4c2bcba3d4648ea71369de0881/rpds_py-0.29.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:55d827b2ae95425d3be9bc9a5838b6c29d664924f98146557f7715e331d06df8", size = 354343, upload-time = "2025-11-16T14:49:28.24Z" }, + { url = "https://files.pythonhosted.org/packages/eb/73/5afcf8924bc02a749416eda64e17ac9c9b28f825f4737385295a0e99b0c1/rpds_py-0.29.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc31a07ed352e5462d3ee1b22e89285f4ce97d5266f6d1169da1142e78045626", size = 385406, upload-time = "2025-11-16T14:49:29.943Z" }, + { url = "https://files.pythonhosted.org/packages/c8/37/5db736730662508535221737a21563591b6f43c77f2e388951c42f143242/rpds_py-0.29.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c4695dd224212f6105db7ea62197144230b808d6b2bba52238906a2762f1d1e7", size = 396162, upload-time = "2025-11-16T14:49:31.833Z" }, + { url = "https://files.pythonhosted.org/packages/70/0d/491c1017d14f62ce7bac07c32768d209a50ec567d76d9f383b4cfad19b80/rpds_py-0.29.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcae1770b401167f8b9e1e3f566562e6966ffa9ce63639916248a9e25fa8a244", size = 517719, upload-time = "2025-11-16T14:49:33.804Z" }, + { url = "https://files.pythonhosted.org/packages/d7/25/b11132afcb17cd5d82db173f0c8dab270ffdfaba43e5ce7a591837ae9649/rpds_py-0.29.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:90f30d15f45048448b8da21c41703b31c61119c06c216a1bf8c245812a0f0c17", size = 409498, upload-time = "2025-11-16T14:49:35.222Z" }, + { url = "https://files.pythonhosted.org/packages/0f/7d/e6543cedfb2e6403a1845710a5ab0e0ccf8fc288e0b5af9a70bfe2c12053/rpds_py-0.29.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44a91e0ab77bdc0004b43261a4b8cd6d6b451e8d443754cfda830002b5745b32", size = 382743, upload-time = "2025-11-16T14:49:36.704Z" }, + { url = "https://files.pythonhosted.org/packages/75/11/a4ebc9f654293ae9fefb83b2b6be7f3253e85ea42a5db2f77d50ad19aaeb/rpds_py-0.29.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:4aa195e5804d32c682e453b34474f411ca108e4291c6a0f824ebdc30a91c973c", size = 400317, upload-time = "2025-11-16T14:49:39.132Z" }, + { url = "https://files.pythonhosted.org/packages/52/18/97677a60a81c7f0e5f64e51fb3f8271c5c8fcabf3a2df18e97af53d7c2bf/rpds_py-0.29.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7971bdb7bf4ee0f7e6f67fa4c7fbc6019d9850cc977d126904392d363f6f8318", size = 416979, upload-time = "2025-11-16T14:49:40.575Z" }, + { url = "https://files.pythonhosted.org/packages/f0/69/28ab391a9968f6c746b2a2db181eaa4d16afaa859fedc9c2f682d19f7e18/rpds_py-0.29.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8ae33ad9ce580c7a47452c3b3f7d8a9095ef6208e0a0c7e4e2384f9fc5bf8212", size = 567288, upload-time = "2025-11-16T14:49:42.24Z" }, + { url = "https://files.pythonhosted.org/packages/3b/d3/0c7afdcdb830eee94f5611b64e71354ffe6ac8df82d00c2faf2bfffd1d4e/rpds_py-0.29.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:c661132ab2fb4eeede2ef69670fd60da5235209874d001a98f1542f31f2a8a94", size = 593157, upload-time = "2025-11-16T14:49:43.782Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ac/a0fcbc2feed4241cf26d32268c195eb88ddd4bd862adfc9d4b25edfba535/rpds_py-0.29.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:bb78b3a0d31ac1bde132c67015a809948db751cb4e92cdb3f0b242e430b6ed0d", size = 554741, upload-time = "2025-11-16T14:49:45.557Z" }, + { url = "https://files.pythonhosted.org/packages/0f/f1/fcc24137c470df8588674a677f33719d5800ec053aaacd1de8a5d5d84d9e/rpds_py-0.29.0-cp314-cp314-win32.whl", hash = "sha256:f475f103488312e9bd4000bc890a95955a07b2d0b6e8884aef4be56132adbbf1", size = 215508, upload-time = "2025-11-16T14:49:47.562Z" }, + { url = "https://files.pythonhosted.org/packages/7b/c7/1d169b2045512eac019918fc1021ea07c30e84a4343f9f344e3e0aa8c788/rpds_py-0.29.0-cp314-cp314-win_amd64.whl", hash = "sha256:b9cf2359a4fca87cfb6801fae83a76aedf66ee1254a7a151f1341632acf67f1b", size = 228125, upload-time = "2025-11-16T14:49:49.064Z" }, + { url = "https://files.pythonhosted.org/packages/be/36/0cec88aaba70ec4a6e381c444b0d916738497d27f0c30406e3d9fcbd3bc2/rpds_py-0.29.0-cp314-cp314-win_arm64.whl", hash = "sha256:9ba8028597e824854f0f1733d8b964e914ae3003b22a10c2c664cb6927e0feb9", size = 221992, upload-time = "2025-11-16T14:49:50.777Z" }, + { url = "https://files.pythonhosted.org/packages/b1/fa/a2e524631717c9c0eb5d90d30f648cfba6b731047821c994acacb618406c/rpds_py-0.29.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:e71136fd0612556b35c575dc2726ae04a1669e6a6c378f2240312cf5d1a2ab10", size = 366425, upload-time = "2025-11-16T14:49:52.691Z" }, + { url = "https://files.pythonhosted.org/packages/a2/a4/6d43ebe0746ff694a30233f63f454aed1677bd50ab7a59ff6b2bb5ac61f2/rpds_py-0.29.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:76fe96632d53f3bf0ea31ede2f53bbe3540cc2736d4aec3b3801b0458499ef3a", size = 355282, upload-time = "2025-11-16T14:49:54.292Z" }, + { url = "https://files.pythonhosted.org/packages/fa/a7/52fd8270e0320b09eaf295766ae81dd175f65394687906709b3e75c71d06/rpds_py-0.29.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9459a33f077130dbb2c7c3cea72ee9932271fb3126404ba2a2661e4fe9eb7b79", size = 384968, upload-time = "2025-11-16T14:49:55.857Z" }, + { url = "https://files.pythonhosted.org/packages/f4/7d/e6bc526b7a14e1ef80579a52c1d4ad39260a058a51d66c6039035d14db9d/rpds_py-0.29.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5c9546cfdd5d45e562cc0444b6dddc191e625c62e866bf567a2c69487c7ad28a", size = 394714, upload-time = "2025-11-16T14:49:57.343Z" }, + { url = "https://files.pythonhosted.org/packages/c0/3f/f0ade3954e7db95c791e7eaf978aa7e08a756d2046e8bdd04d08146ed188/rpds_py-0.29.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12597d11d97b8f7e376c88929a6e17acb980e234547c92992f9f7c058f1a7310", size = 520136, upload-time = "2025-11-16T14:49:59.162Z" }, + { url = "https://files.pythonhosted.org/packages/87/b3/07122ead1b97009715ab9d4082be6d9bd9546099b2b03fae37c3116f72be/rpds_py-0.29.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28de03cf48b8a9e6ec10318f2197b83946ed91e2891f651a109611be4106ac4b", size = 409250, upload-time = "2025-11-16T14:50:00.698Z" }, + { url = "https://files.pythonhosted.org/packages/c9/c6/dcbee61fd1dc892aedcb1b489ba661313101aa82ec84b1a015d4c63ebfda/rpds_py-0.29.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd7951c964069039acc9d67a8ff1f0a7f34845ae180ca542b17dc1456b1f1808", size = 384940, upload-time = "2025-11-16T14:50:02.312Z" }, + { url = "https://files.pythonhosted.org/packages/47/11/914ecb6f3574cf9bf8b38aced4063e0f787d6e1eb30b181a7efbc6c1da9a/rpds_py-0.29.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:c07d107b7316088f1ac0177a7661ca0c6670d443f6fe72e836069025e6266761", size = 399392, upload-time = "2025-11-16T14:50:03.829Z" }, + { url = "https://files.pythonhosted.org/packages/f5/fd/2f4bd9433f58f816434bb934313584caa47dbc6f03ce5484df8ac8980561/rpds_py-0.29.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1de2345af363d25696969befc0c1688a6cb5e8b1d32b515ef84fc245c6cddba3", size = 416796, upload-time = "2025-11-16T14:50:05.558Z" }, + { url = "https://files.pythonhosted.org/packages/79/a5/449f0281af33efa29d5c71014399d74842342ae908d8cd38260320167692/rpds_py-0.29.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:00e56b12d2199ca96068057e1ae7f9998ab6e99cda82431afafd32f3ec98cca9", size = 566843, upload-time = "2025-11-16T14:50:07.243Z" }, + { url = "https://files.pythonhosted.org/packages/ab/32/0a6a1ccee2e37fcb1b7ba9afde762b77182dbb57937352a729c6cd3cf2bb/rpds_py-0.29.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3919a3bbecee589300ed25000b6944174e07cd20db70552159207b3f4bbb45b8", size = 593956, upload-time = "2025-11-16T14:50:09.029Z" }, + { url = "https://files.pythonhosted.org/packages/4a/3d/eb820f95dce4306f07a495ede02fb61bef36ea201d9137d4fcd5ab94ec1e/rpds_py-0.29.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e7fa2ccc312bbd91e43aa5e0869e46bc03278a3dddb8d58833150a18b0f0283a", size = 557288, upload-time = "2025-11-16T14:50:10.73Z" }, + { url = "https://files.pythonhosted.org/packages/e9/f8/b8ff786f40470462a252918e0836e0db903c28e88e3eec66bc4a7856ee5d/rpds_py-0.29.0-cp314-cp314t-win32.whl", hash = "sha256:97c817863ffc397f1e6a6e9d2d89fe5408c0a9922dac0329672fb0f35c867ea5", size = 211382, upload-time = "2025-11-16T14:50:12.827Z" }, + { url = "https://files.pythonhosted.org/packages/c9/7f/1a65ae870bc9d0576aebb0c501ea5dccf1ae2178fe2821042150ebd2e707/rpds_py-0.29.0-cp314-cp314t-win_amd64.whl", hash = "sha256:2023473f444752f0f82a58dfcbee040d0a1b3d1b3c2ec40e884bd25db6d117d2", size = 225919, upload-time = "2025-11-16T14:50:14.734Z" }, +] + +[[package]] +name = "secretstorage" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, + { name = "jeepney" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/03/e834bcd866f2f8a49a85eaff47340affa3bfa391ee9912a952a1faa68c7b/secretstorage-3.5.0.tar.gz", hash = "sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be", size = 19884, upload-time = "2025-11-23T19:02:53.191Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/46/f5af3402b579fd5e11573ce652019a67074317e18c1935cc0b4ba9b35552/secretstorage-3.5.0-py3-none-any.whl", hash = "sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137", size = 15554, upload-time = "2025-11-23T19:02:51.545Z" }, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, +] + +[[package]] +name = "sse-starlette" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/db/3c/fa6517610dc641262b77cc7bf994ecd17465812c1b0585fe33e11be758ab/sse_starlette-3.0.3.tar.gz", hash = "sha256:88cfb08747e16200ea990c8ca876b03910a23b547ab3bd764c0d8eb81019b971", size = 21943, upload-time = "2025-10-30T18:44:20.117Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/23/a0/984525d19ca5c8a6c33911a0c164b11490dd0f90ff7fd689f704f84e9a11/sse_starlette-3.0.3-py3-none-any.whl", hash = "sha256:af5bf5a6f3933df1d9c7f8539633dc8444ca6a97ab2e2a7cd3b6e431ac03a431", size = 11765, upload-time = "2025-10-30T18:44:18.834Z" }, +] + +[[package]] +name = "starlette" +version = "0.50.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ba/b8/73a0e6a6e079a9d9cfa64113d771e421640b6f679a52eeb9b32f72d871a1/starlette-0.50.0.tar.gz", hash = "sha256:a2a17b22203254bcbc2e1f926d2d55f3f9497f769416b3190768befe598fa3ca", size = 2646985, upload-time = "2025-11-01T15:25:27.516Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl", hash = "sha256:9e5391843ec9b6e472eed1365a78c8098cfceb7a74bfd4d6b1c0c0095efb3bca", size = 74033, upload-time = "2025-11-01T15:25:25.461Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, +] + +[[package]] +name = "urllib3" +version = "2.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload-time = "2025-06-18T14:07:41.644Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" }, +] + +[[package]] +name = "uvicorn" +version = "0.38.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cb/ce/f06b84e2697fef4688ca63bdb2fdf113ca0a3be33f94488f2cadb690b0cf/uvicorn-0.38.0.tar.gz", hash = "sha256:fd97093bdd120a2609fc0d3afe931d4d4ad688b6e75f0f929fde1bc36fe0e91d", size = 80605, upload-time = "2025-10-18T13:46:44.63Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl", hash = "sha256:48c0afd214ceb59340075b4a052ea1ee91c16fbc2a9b1469cca0e54566977b02", size = 68109, upload-time = "2025-10-18T13:46:42.958Z" }, +] + +[[package]] +name = "websockets" +version = "15.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/e6/26d09fab466b7ca9c7737474c52be4f76a40301b08362eb2dbc19dcc16c1/websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", size = 177016, upload-time = "2025-03-05T20:03:41.606Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/6b/4545a0d843594f5d0771e86463606a3988b5a09ca5123136f8a76580dd63/websockets-15.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3", size = 175437, upload-time = "2025-03-05T20:02:16.706Z" }, + { url = "https://files.pythonhosted.org/packages/f4/71/809a0f5f6a06522af902e0f2ea2757f71ead94610010cf570ab5c98e99ed/websockets-15.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665", size = 173096, upload-time = "2025-03-05T20:02:18.832Z" }, + { url = "https://files.pythonhosted.org/packages/3d/69/1a681dd6f02180916f116894181eab8b2e25b31e484c5d0eae637ec01f7c/websockets-15.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2", size = 173332, upload-time = "2025-03-05T20:02:20.187Z" }, + { url = "https://files.pythonhosted.org/packages/a6/02/0073b3952f5bce97eafbb35757f8d0d54812b6174ed8dd952aa08429bcc3/websockets-15.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215", size = 183152, upload-time = "2025-03-05T20:02:22.286Z" }, + { url = "https://files.pythonhosted.org/packages/74/45/c205c8480eafd114b428284840da0b1be9ffd0e4f87338dc95dc6ff961a1/websockets-15.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5", size = 182096, upload-time = "2025-03-05T20:02:24.368Z" }, + { url = "https://files.pythonhosted.org/packages/14/8f/aa61f528fba38578ec553c145857a181384c72b98156f858ca5c8e82d9d3/websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65", size = 182523, upload-time = "2025-03-05T20:02:25.669Z" }, + { url = "https://files.pythonhosted.org/packages/ec/6d/0267396610add5bc0d0d3e77f546d4cd287200804fe02323797de77dbce9/websockets-15.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe", size = 182790, upload-time = "2025-03-05T20:02:26.99Z" }, + { url = "https://files.pythonhosted.org/packages/02/05/c68c5adbf679cf610ae2f74a9b871ae84564462955d991178f95a1ddb7dd/websockets-15.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4", size = 182165, upload-time = "2025-03-05T20:02:30.291Z" }, + { url = "https://files.pythonhosted.org/packages/29/93/bb672df7b2f5faac89761cb5fa34f5cec45a4026c383a4b5761c6cea5c16/websockets-15.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597", size = 182160, upload-time = "2025-03-05T20:02:31.634Z" }, + { url = "https://files.pythonhosted.org/packages/ff/83/de1f7709376dc3ca9b7eeb4b9a07b4526b14876b6d372a4dc62312bebee0/websockets-15.0.1-cp312-cp312-win32.whl", hash = "sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9", size = 176395, upload-time = "2025-03-05T20:02:33.017Z" }, + { url = "https://files.pythonhosted.org/packages/7d/71/abf2ebc3bbfa40f391ce1428c7168fb20582d0ff57019b69ea20fa698043/websockets-15.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7", size = 176841, upload-time = "2025-03-05T20:02:34.498Z" }, + { url = "https://files.pythonhosted.org/packages/cb/9f/51f0cf64471a9d2b4d0fc6c534f323b664e7095640c34562f5182e5a7195/websockets-15.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931", size = 175440, upload-time = "2025-03-05T20:02:36.695Z" }, + { url = "https://files.pythonhosted.org/packages/8a/05/aa116ec9943c718905997412c5989f7ed671bc0188ee2ba89520e8765d7b/websockets-15.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675", size = 173098, upload-time = "2025-03-05T20:02:37.985Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0b/33cef55ff24f2d92924923c99926dcce78e7bd922d649467f0eda8368923/websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151", size = 173329, upload-time = "2025-03-05T20:02:39.298Z" }, + { url = "https://files.pythonhosted.org/packages/31/1d/063b25dcc01faa8fada1469bdf769de3768b7044eac9d41f734fd7b6ad6d/websockets-15.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22", size = 183111, upload-time = "2025-03-05T20:02:40.595Z" }, + { url = "https://files.pythonhosted.org/packages/93/53/9a87ee494a51bf63e4ec9241c1ccc4f7c2f45fff85d5bde2ff74fcb68b9e/websockets-15.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f", size = 182054, upload-time = "2025-03-05T20:02:41.926Z" }, + { url = "https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8", size = 182496, upload-time = "2025-03-05T20:02:43.304Z" }, + { url = "https://files.pythonhosted.org/packages/98/41/e7038944ed0abf34c45aa4635ba28136f06052e08fc2168520bb8b25149f/websockets-15.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375", size = 182829, upload-time = "2025-03-05T20:02:48.812Z" }, + { url = "https://files.pythonhosted.org/packages/e0/17/de15b6158680c7623c6ef0db361da965ab25d813ae54fcfeae2e5b9ef910/websockets-15.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d", size = 182217, upload-time = "2025-03-05T20:02:50.14Z" }, + { url = "https://files.pythonhosted.org/packages/33/2b/1f168cb6041853eef0362fb9554c3824367c5560cbdaad89ac40f8c2edfc/websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4", size = 182195, upload-time = "2025-03-05T20:02:51.561Z" }, + { url = "https://files.pythonhosted.org/packages/86/eb/20b6cdf273913d0ad05a6a14aed4b9a85591c18a987a3d47f20fa13dcc47/websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa", size = 176393, upload-time = "2025-03-05T20:02:53.814Z" }, + { url = "https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", size = 176837, upload-time = "2025-03-05T20:02:55.237Z" }, + { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743, upload-time = "2025-03-05T20:03:39.41Z" }, +]