#!/usr/bin/env python3 # -*- coding: utf-8 -*- """Langfuse 专题 · 步骤 3:POST trace-config + /trace 打开应用 Langfuse Tracing。""" from __future__ import annotations import sys import _bootstrap # noqa: F401 import _config as C from dify_api import Dify, pp def main() -> int: d = Dify(C.DIFY_EMAIL, C.DIFY_PASSWORD) try: ok, _, _ = d.login() print("login", ok) if not ok: return 1 pp("current trace", d.get("/apps/%s/trace" % C.APP_ID)) cfg = d.get("/apps/%s/trace-config?tracing_provider=langfuse" % C.APP_ID) pp("current config", cfg) body = { "tracing_provider": "langfuse", "tracing_config": { "public_key": C.LANGFUSE_PK, "secret_key": C.LANGFUSE_SK, "host": C.LANGFUSE_URL, }, } if (cfg.get("json") or {}).get("has_not_configured"): r = d.post("/apps/%s/trace-config" % C.APP_ID, body=body) pp("create trace-config", r) else: r = d.req("PATCH", "/apps/%s/trace-config" % C.APP_ID, body=body) pp("update trace-config", r) if r.get("code") not in ("200", "201"): r = d.post("/apps/%s/trace-config" % C.APP_ID, body=body) pp("create after failed patch", r) r = d.post( "/apps/%s/trace" % C.APP_ID, body={"enabled": True, "tracing_provider": "langfuse"}, ) pp("enable tracing", r) pp("trace after", d.get("/apps/%s/trace" % C.APP_ID)) pp("config after", d.get("/apps/%s/trace-config?tracing_provider=langfuse" % C.APP_ID)) out, err = d.sh( "docker exec %s psql -U postgres -d dify -c " "\"SELECT id, name, tracing FROM apps WHERE id='%s';\"" % (C.PG_CONTAINER, C.APP_ID) ) print(out or err) return 0 if r.get("code") in ("200", "201") else 1 finally: d.close() if __name__ == "__main__": sys.exit(main())