Repository navigation
Conversation
The node_normalizer CI hostname returns 404; resolve every environment to the production URL unless an explicit override is set. Co-authored-by: Guangrong Qin <2994757+gloriachin@users.noreply.github.com>
Carry the status code, URL, and response into the raised requests.HTTPError so callers see what failed instead of a bare exception. Co-authored-by: Guangrong Qin <2994757+gloriachin@users.noreply.github.com>
When the CI and dev multiomics URLs 404, try the test deployment before warning, so the Plover API registry still loads in restricted environments. Co-authored-by: Guangrong Qin <2994757+gloriachin@users.noreply.github.com>
Reshape TCT.Query_ARS around Guangrong Qin's feat/ars-query-support module: shared requests.Session transport, deadline-based merge-aware polling (Relay#621), frozen ARSStatus with an O(1) child index, and an ARSResult that extends FinderResult so both finders behave like the other TCT finders. format_query_json_forARS_pathfinder reuses the shared pathfinder query-graph builder. Co-authored-by: Guangrong Qin <2994757+gloriachin@users.noreply.github.com> Co-authored-by: Frankie Hodges <hodgesf@oregonstate.edu> Co-authored-by: Frankie Hodges <129905251+hodgesf@users.noreply.github.com>
Re-executed Test_ARS.ipynb end to end (neighborhood, raw submit/poll flow, and the new pathfinder cells) against the CI ARS. Co-authored-by: Guangrong Qin <2994757+gloriachin@users.noreply.github.com>
… URL change Guangrong's nodenorm fix was written against an older base that predated the constant; keep his endpoint change but preserve the constant. Co-authored-by: Guangrong Qin <2994757+gloriachin@users.noreply.github.com>
Ported from Guangrong Qin's feat/ars-query-support tool layer, reshaped onto the ARSResult API: ranked summary rows for built queries, the full merged message for uploaded json_file queries. Co-authored-by: Guangrong Qin <2994757+gloriachin@users.noreply.github.com>
Async wrapper over the ARS finder flow with per-poll progress reporting. Task-aware clients get a task ID immediately; task-unaware clients get a plain blocking call per SEP-1686 graceful degradation.
ARS_neighborhood_finder, ARS_pathfinder, submit_ars_query, get_ars_status, get_ars_results, and the query_ars background task join the server namespace.
FastMCP resolves the Progress dependency from real annotations, and PEP 563 string annotations in the adapter module defeat that resolution, which broke task-unaware clients. The task tool now lives in a module without the future import; the adapter registers it after the shared tools.
Tool shaping for the finder pair and the submit/status/results trio, plus the MCP surface: SEP-1686 task flow (task ID, status, ranked results) and graceful degradation for task-unaware clients.
Covers the sync trio (submit, poll, fetch) and query_ars through an in-process MCP client both as a background task and as a blocking call.
The finder and submit tools now return plain status strings, and submit_ars_query is marked non-read-only: submitting a query creates ARS state, so readOnlyHint was wrong. The polling and fetch tools keep it.
5eb37f5 to
8fe83ee
Compare
|
8fe83ee takes The MCP spec defines |
ARS_neighborhood_finder, ARS_pathfinder, and query_ars each create an ARS submission through submit_ARS, so readOnlyHint is now False for them as it already was for submit_ars_query. Removes the inert query_ars entry from _READ_ONLY_TOOLS and updates the annotation pins.
|
@Santoshkumarpuppala Good catch, all four ARS submitters now carry readOnlyHint: False on query-ars-mcp (commit 94eefb7), thanks for the detailed review. |
Third of three stacked PRs for ARS querying. Puts @gloriachin's ARS finder flow in front of agents on the MCP and CLI surfaces. It also adds
query_ars, which runs the whole flow as an MCP background task (SEP-1686).Stacked on #65.
What changed
TCT/interfaces/tools.py, available on both MCP and CLI (tct ARS-neighborhood-finder,tct submit-ars-query, and so on):ARS_neighborhood_finderandARS_pathfinder: the blocking finders from Guangrong's branch, includingjson_filepassthrough of uploaded TRAPI queries. They return resolved inputs plus the top 20 ranked rows, or the full merged message for uploads.submit_ars_query(node, neighbor_categories, predicates)returns a pk immediately.get_ars_status(pk)reports parent status, the merged pk, and per-ARA status.get_ars_results(pk, top_n=20)returns ranked rows, or the full merged TRAPI message withtop_n=0.query_ars, MCP-only, inTCT/interfaces/ars_task.py, registered withtask=TaskConfig(mode="optional"). Task-aware clients get a task ID immediately and poll; task-unaware clients get an ordinary blocking call (SEP-1686 graceful degradation). It reports progress in two steps (ARS finished, merged answer fetched). The polling wait and merged-message fetch run in a worker thread.query_arslives in its own module becausemcp.pyuses PEP 563 string annotations, and FastMCP could not resolve theProgressdependency through them. Plain calls failed until the move.readOnlyHint:submit_ars_query,ARS_neighborhood_finder,ARS_pathfinder, andquery_arseach create an ARS submission. Status and results lookups stay read-only.TCT/server.pyre-exports the six new names. The shared registry grows from 16 to 21 tools; MCP lists 22 withquery_ars.Stats (for audit)
tests/test_ars_tools.py).tests/test_ars_tools.py: tool shaping (TRAPI construction, predicate forwarding, ranked rows, ready flags,json_filepassthrough), plus the MCP surface through an in-process FastMCP client (submit/poll/fetch, task flow, graceful degradation, task metadata).query_arsas a task; andquery_arsthrough a task-unaware client.Verification
uv run pytest: 171 passed, 7 skipped.TCT_LIVE_ARS=1 uv run pytest tests/test_ars_live.py -v: 6 passed in 846.56 s.