您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

langfuse_app.py 3.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #
  2. # Copyright 2025 The InfiniFlow Authors. All Rights Reserved.
  3. #
  4. # Licensed under the Apache License, Version 2.0 (the "License");
  5. # you may not use this file except in compliance with the License.
  6. # You may obtain a copy of the License at
  7. #
  8. # http://www.apache.org/licenses/LICENSE-2.0
  9. #
  10. # Unless required by applicable law or agreed to in writing, software
  11. # distributed under the License is distributed on an "AS IS" BASIS,
  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. # See the License for the specific language governing permissions and
  14. # limitations under the License.
  15. #
  16. from flask import request
  17. from flask_login import current_user, login_required
  18. from langfuse import Langfuse
  19. from api.db.db_models import DB
  20. from api.db.services.langfuse_service import TenantLangfuseService
  21. from api.utils.api_utils import get_error_data_result, get_json_result, server_error_response, validate_request
  22. @manager.route("/api_key", methods=["POST", "PUT"]) # noqa: F821
  23. @login_required
  24. @validate_request("secret_key", "public_key", "host")
  25. def set_api_key():
  26. req = request.get_json()
  27. secret_key = req.get("secret_key", "")
  28. public_key = req.get("public_key", "")
  29. host = req.get("host", "")
  30. if not all([secret_key, public_key, host]):
  31. return get_error_data_result(message="Missing required fields")
  32. langfuse_keys = dict(
  33. tenant_id=current_user.id,
  34. secret_key=secret_key,
  35. public_key=public_key,
  36. host=host,
  37. )
  38. langfuse = Langfuse(public_key=langfuse_keys["public_key"], secret_key=langfuse_keys["secret_key"], host=langfuse_keys["host"])
  39. if not langfuse.auth_check():
  40. return get_error_data_result(message="Invalid Langfuse keys")
  41. langfuse_entry = TenantLangfuseService.filter_by_tenant(tenant_id=current_user.id)
  42. with DB.atomic():
  43. try:
  44. if not langfuse_entry:
  45. TenantLangfuseService.save(**langfuse_keys)
  46. else:
  47. TenantLangfuseService.update_by_tenant(tenant_id=current_user.id, langfuse_keys=langfuse_keys)
  48. return get_json_result(data=langfuse_keys)
  49. except Exception as e:
  50. server_error_response(e)
  51. @manager.route("/api_key", methods=["GET"]) # noqa: F821
  52. @login_required
  53. @validate_request()
  54. def get_api_key():
  55. langfuse_entry = TenantLangfuseService.filter_by_tenant_with_info(tenant_id=current_user.id)
  56. if not langfuse_entry:
  57. return get_json_result(message="Have not record any Langfuse keys.")
  58. langfuse = Langfuse(public_key=langfuse_entry["public_key"], secret_key=langfuse_entry["secret_key"], host=langfuse_entry["host"])
  59. try:
  60. if not langfuse.auth_check():
  61. return get_error_data_result(message="Invalid Langfuse keys loaded")
  62. except langfuse.api.core.api_error.ApiError as api_err:
  63. return get_json_result(message=f"Error from Langfuse: {api_err}")
  64. except Exception as e:
  65. server_error_response(e)
  66. langfuse_entry["project_id"] = langfuse.api.projects.get().dict()["data"][0]["id"]
  67. langfuse_entry["project_name"] = langfuse.api.projects.get().dict()["data"][0]["name"]
  68. return get_json_result(data=langfuse_entry)
  69. @manager.route("/api_key", methods=["DELETE"]) # noqa: F821
  70. @login_required
  71. @validate_request()
  72. def delete_api_key():
  73. langfuse_entry = TenantLangfuseService.filter_by_tenant(tenant_id=current_user.id)
  74. if not langfuse_entry:
  75. return get_json_result(message="Have not record any Langfuse keys.")
  76. with DB.atomic():
  77. try:
  78. TenantLangfuseService.delete_model(langfuse_entry)
  79. return get_json_result(data=True)
  80. except Exception as e:
  81. server_error_response(e)