#!/usr/bin/env python3 # -*- coding: utf-8 -*- """概览 traceId 下 observations(包含 id/type/name/parentObservationId)。""" from __future__ import annotations import json import sys from typing import Any import _bootstrap # noqa: F401 import _config as C from dify_api import Dify def lf_public_get(d: Dify, path: str) -> Any: url = path if path.startswith("http") else C.LANGFUSE_URL.rstrip("/") + path out, err = d.sh( "curl -s -m 20 -u '%s:%s' '%s'" % (C.LANGFUSE_PK, C.LANGFUSE_SK, url) ) if err and not out: raise RuntimeError("curl failed: %s" % err) return json.loads(out) def main() -> int: trace_id = ( sys.argv[1] if len(sys.argv) >= 2 else "cd30cf8f-0003-4355-a70e-8deb144778e2" ) d = Dify(C.DIFY_EMAIL, C.DIFY_PASSWORD) try: d.login() obs = lf_public_get(d, "/api/public/observations?traceId=%s" % trace_id) items = obs.get("data") or [] print("traceId:", trace_id) print("count:", len(items)) for it in items: print( "-", "type=%s" % it.get("type"), "name=%s" % it.get("name"), "id=%s" % it.get("id"), "parent=%s" % it.get("parentObservationId"), ) return 0 finally: d.close() if __name__ == "__main__": sys.exit(main())