mirror of
https://github.com/langgenius/dify.git
synced 2026-09-09 05:41:00 +08:00
56 lines
2.9 KiB
Python
56 lines
2.9 KiB
Python
"""Private authorization bridge for run-scoped, read-only Agent knowledge CLI."""
|
|
|
|
from dify_agent.protocol.knowledge_fs import KnowledgeFsError, KnowledgeFsPreparedRequest, KnowledgeFsPrepareRequest
|
|
from flask import request
|
|
from flask_restx import Resource
|
|
from pydantic import ValidationError
|
|
|
|
from controllers.common.schema import register_schema_models
|
|
from controllers.console.wraps import setup_required
|
|
from controllers.inner_api import inner_api_ns
|
|
from controllers.inner_api.wraps import plugin_inner_api_only
|
|
from services.agent.knowledge_gateway import AgentKnowledgeGateway
|
|
from services.agent_config_service import AgentConfigServiceError
|
|
from services.knowledge_fs.app_admission_service import KnowledgeFSAppAdmissionError
|
|
from services.knowledge_fs.product_authorization import KnowledgeFSProductNotFoundError
|
|
from services.knowledge_fs.product_remote import KnowledgeFSOperationUnavailableError
|
|
from services.knowledge_fs.query_images import KnowledgeFSQueryImageError
|
|
from services.knowledge_fs_capability import KnowledgeFSCapabilityConfigurationError, KnowledgeFSCapabilityPolicyError
|
|
|
|
register_schema_models(inner_api_ns, KnowledgeFsPrepareRequest, KnowledgeFsPreparedRequest)
|
|
|
|
|
|
@inner_api_ns.route("/agent/knowledge/prepare")
|
|
class AgentKnowledgePrepareApi(Resource):
|
|
@setup_required
|
|
@plugin_inner_api_only
|
|
@inner_api_ns.doc("inner_agent_knowledge_prepare")
|
|
@inner_api_ns.expect(inner_api_ns.models[KnowledgeFsPrepareRequest.__name__])
|
|
@inner_api_ns.response(200, "Private prepared command", inner_api_ns.models[KnowledgeFsPreparedRequest.__name__])
|
|
def post(self):
|
|
try:
|
|
payload = KnowledgeFsPrepareRequest.model_validate(request.get_json(silent=True) or {})
|
|
return AgentKnowledgeGateway().prepare(payload).model_dump(mode="json", exclude_none=True)
|
|
except ValidationError:
|
|
return {
|
|
"code": "KNOWLEDGE_INVALID_REQUEST",
|
|
"message": "Invalid knowledge command or execution context.",
|
|
}, 400
|
|
except KnowledgeFsError as exc:
|
|
return {"code": exc.code, "message": exc.message}, exc.status_code
|
|
except (
|
|
KnowledgeFSAppAdmissionError,
|
|
KnowledgeFSProductNotFoundError,
|
|
AgentConfigServiceError,
|
|
KnowledgeFSCapabilityPolicyError,
|
|
PermissionError,
|
|
):
|
|
return {"code": "KNOWLEDGE_ACCESS_DENIED", "message": "Knowledge access is unavailable or revoked."}, 403
|
|
except (KnowledgeFSOperationUnavailableError, KnowledgeFSCapabilityConfigurationError):
|
|
return {"code": "KNOWLEDGE_UNAVAILABLE", "message": "KnowledgeFS capability is unavailable."}, 503
|
|
except (KnowledgeFSQueryImageError, ValueError):
|
|
return {
|
|
"code": "KNOWLEDGE_INVALID_REQUEST",
|
|
"message": "Query image or knowledge reference is unavailable.",
|
|
}, 400
|