headroomlabs-ai/headroom · info · HTTPException

No telemetry found for signature: {signature_hash}

Error message

No telemetry found for signature: {signature_hash}

What it means

GET /v1/telemetry/tools/{signature_hash} returns HTTP 404 when the telemetry collector has no stats for the given tool signature. The signature hash must come from tool telemetry listing endpoints; an arbitrary or stale hash has no data.

Source

Thrown at headroom/proxy/server.py:4803

        telemetry = get_telemetry_collector()
        all_stats = telemetry.get_all_tool_stats()
        return {
            "tool_count": len(all_stats),
            "tools": {sig_hash: stats.to_dict() for sig_hash, stats in all_stats.items()},
        }

    @app.get("/v1/telemetry/tools/{signature_hash}", dependencies=[Depends(_require_loopback)])
    async def telemetry_tool_detail(signature_hash: str):
        """Get detailed telemetry for a specific tool signature.

        Includes learned recommendations if enough data has been collected.
        """
        telemetry = get_telemetry_collector()
        stats = telemetry.get_tool_stats(signature_hash)
        recommendations = telemetry.get_recommendations(signature_hash)

        if stats is None:
            raise HTTPException(
                status_code=404, detail=f"No telemetry found for signature: {signature_hash}"
            )

        return {
            "signature_hash": signature_hash,
            "stats": stats.to_dict(),
            "recommendations": recommendations,
        }

    # TOIN (Tool Output Intelligence Network) endpoints
    @app.get("/v1/toin/stats", dependencies=[Depends(_require_loopback)])
    async def toin_stats():
        """Get overall TOIN statistics.

        Returns aggregated statistics from the Tool Output Intelligence Network,
        which learns optimal compression strategies across all tool types.

        Response includes:

View on GitHub (pinned to 322425c43b)

Solutions

  1. List telemetry first and copy the signature hash exactly.
  2. Generate tool traffic so telemetry accumulates before querying detail.
  3. Confirm you query the same proxy instance/store that collected the data.
Defensive patterns

Strategy: validation

Validate before calling

telemetry = (await client.get("/v1/telemetry/tools")).json()
known = {t["signature_hash"] for t in telemetry.get("tools", [])}
if sig not in known:
    skip_detail_query(sig)

Try / catch

resp = await client.get(f"/v1/telemetry/tools/{sig}")
if resp.status_code == 404:
    handle_no_telemetry(sig)  # refresh listing, don't retry blindly

Prevention

When it happens

Trigger: Requesting a hash not present in /v1/telemetry output, a hash from a different process/run whose telemetry DB is not loaded, or a typo/truncation of the hash.

Common situations: Inspecting telemetry after the store reset; mixing hashes across projects/environments; dashboards caching old hashes.

Related errors


AI-assisted analysis of headroomlabs-ai/headroom@322425c43b (2026-08-15). Data as JSON: /api/errors/12e45a1c8c380b90. Report an issue: GitHub.