diff --git a/api/apps/langfuse_app.py b/api/apps/langfuse_app.py index 7a7355036..1e47ddf04 100644 --- a/api/apps/langfuse_app.py +++ b/api/apps/langfuse_app.py @@ -24,7 +24,7 @@ from api.db.services.langfuse_service import TenantLangfuseService from api.utils.api_utils import get_error_data_result, get_json_result, server_error_response, validate_request -@manager.route("/set_api_key", methods=["POST"]) # noqa: F821 +@manager.route("/api_key", methods=["POST", "PUT"]) # noqa: F821 @login_required @validate_request("secret_key", "public_key", "host") def set_api_key(): @@ -53,6 +53,33 @@ def set_api_key(): TenantLangfuseService.save(**langfuse_keys) else: TenantLangfuseService.update_by_tenant(tenant_id=current_user.id, langfuse_keys=langfuse_keys) + return get_json_result(data=langfuse_keys) + except Exception as e: + server_error_response(e) + + +@manager.route("/api_key", methods=["GET"]) # noqa: F821 +@login_required +@validate_request() +def get_api_key(): + langfuse_entry = TenantLangfuseService.filter_by_tenant_with_info(tenant_id=current_user.id) + if not langfuse_entry: + return get_error_data_result(message="Have not record any Langfuse keys.") + + return get_json_result(data=langfuse_entry) + + +@manager.route("/api_key", methods=["DELETE"]) # noqa: F821 +@login_required +@validate_request() +def delete_api_key(): + langfuse_entry = TenantLangfuseService.filter_by_tenant(tenant_id=current_user.id) + if not langfuse_entry: + return get_error_data_result(message="Have not record any Langfuse keys.") + + with DB.atomic(): + try: + TenantLangfuseService.delete_model(langfuse_entry) return get_json_result(data=True) except Exception as e: server_error_response(e) diff --git a/api/db/db_models.py b/api/db/db_models.py index 7ba6164a7..abd0efb7f 100644 --- a/api/db/db_models.py +++ b/api/db/db_models.py @@ -524,9 +524,7 @@ class TenantLangfuse(DataBaseModel): tenant_id = CharField(max_length=32, null=False, primary_key=True) secret_key = CharField(max_length=2048, null=False, help_text="SECRET KEY", index=True) public_key = CharField(max_length=2048, null=False, help_text="PUBLIC KEY", index=True) - host = CharField(max_length=128, null=False, help_text="host", index=True) - # max_tokens = IntegerField(default=8192, index=True) - # used_tokens = IntegerField(default=0, index=True) + host = CharField(max_length=128, null=False, help_text="HOST", index=True) def __str__(self): return "Langfuse host" + self.host diff --git a/api/db/services/langfuse_service.py b/api/db/services/langfuse_service.py index 0c4427624..c75f3d12e 100644 --- a/api/db/services/langfuse_service.py +++ b/api/db/services/langfuse_service.py @@ -34,13 +34,23 @@ class TenantLangfuseService(CommonService): @classmethod @DB.connection_context() def filter_by_tenant(cls, tenant_id): - fields = [cls.model.host, cls.model.secret_key, cls.model.public_key] + fields = [cls.model.tenant_id, cls.model.host, cls.model.secret_key, cls.model.public_key] try: keys = cls.model.select(*fields).where(cls.model.tenant_id == tenant_id).first() return keys except peewee.DoesNotExist: return None + @classmethod + @DB.connection_context() + def filter_by_tenant_with_info(cls, tenant_id): + fields = [cls.model.tenant_id, cls.model.host, cls.model.secret_key, cls.model.public_key] + try: + keys = cls.model.select(*fields).where(cls.model.tenant_id == tenant_id).dicts().first() + return keys + except peewee.DoesNotExist: + return None + @classmethod def update_by_tenant(cls, tenant_id, langfuse_keys): langfuse_keys["update_time"] = current_timestamp() @@ -55,3 +65,7 @@ class TenantLangfuseService(CommonService): kwargs["update_date"] = datetime_format(datetime.now()) obj = cls.model.create(**kwargs) return obj + + @classmethod + def delete_model(cls, langfuse_model): + langfuse_model.delete_instance()