Backend feature discovery (proxied from the tracedecay server). Hermes-specific extensions added to this wrapper in later phases should merge their own flags into this payload so the UI can feature-detect.
()
| 461 | |
| 462 | @router.get("/capabilities") |
| 463 | def get_capabilities() -> JSONResponse: |
| 464 | """Backend feature discovery (proxied from the tracedecay server). |
| 465 | |
| 466 | Hermes-specific extensions added to this wrapper in later phases should |
| 467 | merge their own flags into this payload so the UI can feature-detect. |
| 468 | """ |
| 469 | response = _proxy("GET", "/api/capabilities", _DummyRequest(), None) |
| 470 | try: |
| 471 | payload = json.loads(bytes(response.body).decode("utf-8")) |
| 472 | payload["mode"] = "hermes" |
| 473 | # Standalone tracedecay reports llm_curation: false (similarity-only |
| 474 | # dedup). Under Hermes the wrapper layers LLM curation on top using |
| 475 | # Hermes' model access, so feature-detecting UIs can show the option. |
| 476 | features = payload.get("features") |
| 477 | if not isinstance(features, dict): |
| 478 | features = {} |
| 479 | payload["features"] = features |
| 480 | features["llm_curation"] = _hermes_call_llm is not None |
| 481 | payload["llm_curation"] = _hermes_call_llm is not None |
| 482 | return JSONResponse(payload, status_code=response.status_code) |
| 483 | except Exception: |
| 484 | return response |
| 485 | |
| 486 | |
| 487 | @router.get("/holographic") |
nothing calls this directly
no test coverage detected