dify/api/services/knowledge_fs/product_operations.py

1344 lines
48 KiB
Python

"""Typed Dify BFF manifest and explicit gaps against the Capability v2 registry.
An operation is executable only when ``capability_operation_id`` resolves to an
exact method/path/action/resource entry in the P2 registry. Declared operations
without an executable transport remain explicit gaps and fail before token
issuance or external I/O.
"""
from __future__ import annotations
from enum import StrEnum
from types import MappingProxyType
from typing import Final, Literal, NamedTuple
from services.knowledge_fs_capability import KNOWLEDGE_FS_CAPABILITY_OPERATIONS
class KnowledgeFSProductPermission(StrEnum):
READ = "knowledge_space_read"
CREATE = "knowledge_space_create"
EDIT = "knowledge_space_edit"
DELETE = "knowledge_space_delete"
ACCESS_CONFIG = "knowledge_space_access_config"
DOCUMENT_WRITE = "knowledge_space_document_write"
QUERY = "knowledge_space_query"
class KnowledgeFSProductOperation(NamedTuple):
method: Literal["DELETE", "GET", "PATCH", "POST", "PUT"]
capability_operation_id: str | None
permission: KnowledgeFSProductPermission
kfs_path: str | None
transport: Literal["binary", "json", "multipart", "sse", "unavailable"]
resource_resolver: Literal[
"document", "job", "knowledge_space", "namespace", "query", "research_task", "source", "upload_session"
]
rbac_permission: KnowledgeFSProductPermission
max_request_bytes: int
max_response_bytes: int
stream_kind: Literal["buffered-multipart", "json", "sse"]
@property
def action(self) -> str | None:
if self.capability_operation_id is None:
return None
capability = KNOWLEDGE_FS_CAPABILITY_OPERATIONS.get(self.capability_operation_id)
return capability.action if capability is not None else None
def _operation(
method: Literal["DELETE", "GET", "PATCH", "POST", "PUT"],
capability_operation_id: str | None,
permission: KnowledgeFSProductPermission,
kfs_path: str | None,
transport: Literal["binary", "json", "multipart", "sse", "unavailable"],
*,
resource_resolver: Literal[
"document", "job", "knowledge_space", "namespace", "query", "research_task", "source", "upload_session"
],
max_request_bytes: int,
max_response_bytes: int,
stream_kind: Literal["buffered-multipart", "json", "sse"],
) -> KnowledgeFSProductOperation:
return KnowledgeFSProductOperation(
method=method,
capability_operation_id=capability_operation_id,
permission=permission,
kfs_path=kfs_path,
transport=transport,
resource_resolver=resource_resolver,
rbac_permission=permission,
max_request_bytes=max_request_bytes,
max_response_bytes=max_response_bytes,
stream_kind=stream_kind,
)
KNOWLEDGE_FS_PRODUCT_OPERATIONS: Final[MappingProxyType[str, KnowledgeFSProductOperation]] = MappingProxyType(
{
"batchSpaceSummaries": _operation(
"POST",
"batchKnowledgeSpaceProductSummaries",
KnowledgeFSProductPermission.READ,
"/internal/knowledge-spaces/product-summaries/batch",
"json",
resource_resolver="namespace",
max_request_bytes=64 * 1024,
max_response_bytes=1024 * 1024,
stream_kind="json",
),
"getSpace": _operation(
"GET",
"getKnowledgeSpace",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}",
"json",
resource_resolver="knowledge_space",
max_request_bytes=0,
max_response_bytes=256 * 1024,
stream_kind="json",
),
"listKnowledgeFs": _operation(
"GET",
"listKnowledgeFs",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/fs/ls",
"json",
resource_resolver="knowledge_space",
max_request_bytes=16 * 1024,
max_response_bytes=1024 * 1024,
stream_kind="json",
),
"treeKnowledgeFs": _operation(
"GET",
"treeKnowledgeFs",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/fs/tree",
"json",
resource_resolver="knowledge_space",
max_request_bytes=16 * 1024,
max_response_bytes=1024 * 1024,
stream_kind="json",
),
"grepKnowledgeFs": _operation(
"GET",
"grepKnowledgeFs",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/fs/grep",
"json",
resource_resolver="knowledge_space",
max_request_bytes=16 * 1024,
max_response_bytes=1024 * 1024,
stream_kind="json",
),
"findKnowledgeFs": _operation(
"GET",
"findKnowledgeFs",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/fs/find",
"json",
resource_resolver="knowledge_space",
max_request_bytes=16 * 1024,
max_response_bytes=1024 * 1024,
stream_kind="json",
),
"diffKnowledgeFs": _operation(
"GET",
"diffKnowledgeFs",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/fs/diff",
"json",
resource_resolver="knowledge_space",
max_request_bytes=16 * 1024,
max_response_bytes=1024 * 1024,
stream_kind="json",
),
"catKnowledgeFs": _operation(
"GET",
"catKnowledgeFs",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/fs/cat",
"json",
resource_resolver="knowledge_space",
max_request_bytes=16 * 1024,
max_response_bytes=1024 * 1024,
stream_kind="json",
),
"statKnowledgeFs": _operation(
"GET",
"statKnowledgeFs",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/fs/stat",
"json",
resource_resolver="knowledge_space",
max_request_bytes=16 * 1024,
max_response_bytes=256 * 1024,
stream_kind="json",
),
"updateSpace": _operation(
"PATCH",
"updateKnowledgeSpace",
KnowledgeFSProductPermission.EDIT,
"/knowledge-spaces/{id}",
"json",
resource_resolver="knowledge_space",
max_request_bytes=32 * 1024,
max_response_bytes=256 * 1024,
stream_kind="json",
),
"getSettings": _operation(
"GET",
"getKnowledgeSpaceProductSettings",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/product-settings",
"json",
resource_resolver="knowledge_space",
max_request_bytes=0,
max_response_bytes=256 * 1024,
stream_kind="json",
),
"getOverviewStats": _operation(
"GET",
"getKnowledgeSpaceOverviewStats",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/overview/stats",
"json",
resource_resolver="knowledge_space",
max_request_bytes=16 * 1024,
max_response_bytes=256 * 1024,
stream_kind="json",
),
"getOverviewQueryOutcomes": _operation(
"GET",
"getKnowledgeSpaceOverviewQueryOutcomes",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/overview/query-outcomes",
"json",
resource_resolver="knowledge_space",
max_request_bytes=16 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"getOverviewInventory": _operation(
"GET",
"getKnowledgeSpaceOverviewInventory",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/overview/inventory",
"json",
resource_resolver="knowledge_space",
max_request_bytes=0,
max_response_bytes=256 * 1024,
stream_kind="json",
),
"listOverviewAttention": _operation(
"GET",
"listKnowledgeSpaceOverviewAttention",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/overview/attention",
"json",
resource_resolver="knowledge_space",
max_request_bytes=16 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"listOverviewActivity": _operation(
"GET",
"listKnowledgeSpaceOverviewActivity",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/overview/activity",
"json",
resource_resolver="knowledge_space",
max_request_bytes=16 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"getOverviewHealth": _operation(
"GET",
"getKnowledgeSpaceProductHealth",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/overview/health",
"json",
resource_resolver="knowledge_space",
max_request_bytes=0,
max_response_bytes=256 * 1024,
stream_kind="json",
),
"updateSettings": _operation(
"PATCH",
"updateKnowledgeSpaceProductSettings",
KnowledgeFSProductPermission.EDIT,
"/knowledge-spaces/{id}/product-settings",
"json",
resource_resolver="knowledge_space",
max_request_bytes=64 * 1024,
max_response_bytes=256 * 1024,
stream_kind="json",
),
"updateEmbeddingProfile": _operation(
"PUT",
"updateKnowledgeSpaceEmbeddingProfile",
KnowledgeFSProductPermission.EDIT,
"/knowledge-spaces/{id}/embedding-profile",
"json",
resource_resolver="knowledge_space",
max_request_bytes=32 * 1024,
max_response_bytes=256 * 1024,
stream_kind="json",
),
"updateRetrievalProfile": _operation(
"PUT",
"updateKnowledgeSpaceRetrievalProfile",
KnowledgeFSProductPermission.EDIT,
"/knowledge-spaces/{id}/retrieval-profile",
"json",
resource_resolver="knowledge_space",
max_request_bytes=64 * 1024,
max_response_bytes=256 * 1024,
stream_kind="json",
),
"getProfileMigration": _operation(
"GET",
"getKnowledgeSpaceProfileMigration",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/profile-migrations/{migrationId}",
"json",
resource_resolver="knowledge_space",
max_request_bytes=0,
max_response_bytes=256 * 1024,
stream_kind="json",
),
"listMetadataFields": _operation(
"GET",
"listKnowledgeSpaceMetadataFields",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/metadata-fields",
"json",
resource_resolver="knowledge_space",
max_request_bytes=16 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"createMetadataField": _operation(
"POST",
"createKnowledgeSpaceMetadataField",
KnowledgeFSProductPermission.EDIT,
"/knowledge-spaces/{id}/metadata-fields",
"json",
resource_resolver="knowledge_space",
max_request_bytes=16 * 1024,
max_response_bytes=256 * 1024,
stream_kind="json",
),
"updateMetadataField": _operation(
"PATCH",
"updateKnowledgeSpaceMetadataField",
KnowledgeFSProductPermission.EDIT,
"/knowledge-spaces/{id}/metadata-fields/{fieldId}",
"json",
resource_resolver="knowledge_space",
max_request_bytes=16 * 1024,
max_response_bytes=256 * 1024,
stream_kind="json",
),
"deleteMetadataField": _operation(
"DELETE",
"deleteKnowledgeSpaceMetadataField",
KnowledgeFSProductPermission.EDIT,
"/knowledge-spaces/{id}/metadata-fields/{fieldId}",
"json",
resource_resolver="knowledge_space",
max_request_bytes=16 * 1024,
max_response_bytes=64 * 1024,
stream_kind="json",
),
"listDocuments": _operation(
"GET",
"listDocuments",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/documents",
"json",
resource_resolver="knowledge_space",
max_request_bytes=16 * 1024,
max_response_bytes=2 * 1024 * 1024,
stream_kind="json",
),
"listLogicalDocuments": _operation(
"GET",
"listLogicalDocuments",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/logical-documents",
"json",
resource_resolver="knowledge_space",
max_request_bytes=16 * 1024,
max_response_bytes=2 * 1024 * 1024,
stream_kind="json",
),
"getLogicalDocument": _operation(
"GET",
"getLogicalDocument",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/logical-documents/{documentId}",
"json",
resource_resolver="document",
max_request_bytes=0,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"updateLogicalDocumentAvailability": _operation(
"PATCH",
"patchLogicalDocumentAvailability",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/logical-documents/{documentId}/availability",
"json",
resource_resolver="document",
max_request_bytes=32 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"bulkUpdateLogicalDocumentAvailability": _operation(
"PATCH",
"bulkPatchLogicalDocumentAvailability",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/logical-documents/bulk/availability",
"json",
resource_resolver="knowledge_space",
max_request_bytes=256 * 1024,
max_response_bytes=2 * 1024 * 1024,
stream_kind="json",
),
"deleteLogicalDocument": _operation(
"DELETE",
"requestLogicalDocumentDeletion",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/logical-documents/{documentId}",
"json",
resource_resolver="document",
max_request_bytes=32 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"bulkDeleteLogicalDocuments": _operation(
"DELETE",
"requestBulkLogicalDocumentDeletion",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/logical-documents/bulk",
"json",
resource_resolver="knowledge_space",
max_request_bytes=256 * 1024,
max_response_bytes=4 * 1024 * 1024,
stream_kind="json",
),
"createDocument": _operation(
"POST",
"uploadDocument",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/documents",
"multipart",
resource_resolver="knowledge_space",
max_request_bytes=15 * 1024 * 1024,
max_response_bytes=1024 * 1024,
stream_kind="buffered-multipart",
),
"getDocument": _operation(
"GET",
"getDocument",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/documents/{documentId}",
"json",
resource_resolver="document",
max_request_bytes=0,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"getDocumentOutline": _operation(
"GET",
"getDocumentOutline",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/documents/{documentId}/outline",
"json",
resource_resolver="document",
max_request_bytes=0,
max_response_bytes=4 * 1024 * 1024,
stream_kind="json",
),
"getDocumentMultimodalManifest": _operation(
"GET",
"getDocumentMultimodalManifest",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/documents/{documentId}/multimodal",
"json",
resource_resolver="document",
max_request_bytes=0,
max_response_bytes=4 * 1024 * 1024,
stream_kind="json",
),
"listDocumentRevisions": _operation(
"GET",
"listDocumentRevisions",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/documents/{documentId}/revisions",
"json",
resource_resolver="document",
max_request_bytes=16 * 1024,
max_response_bytes=2 * 1024 * 1024,
stream_kind="json",
),
"updateDocumentMetadata": _operation(
"PATCH",
"patchDocumentMetadata",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/documents/{documentId}/metadata",
"json",
resource_resolver="document",
max_request_bytes=128 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"listDocumentChunks": _operation(
"GET",
"listDocumentChunks",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/documents/{documentId}/revisions/{revision}/chunks",
"json",
resource_resolver="document",
max_request_bytes=16 * 1024,
max_response_bytes=4 * 1024 * 1024,
stream_kind="json",
),
"getDocumentChunk": _operation(
"GET",
"getDocumentChunk",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/documents/{documentId}/revisions/{revision}/chunks/{chunkId}",
"json",
resource_resolver="document",
max_request_bytes=0,
max_response_bytes=1024 * 1024,
stream_kind="json",
),
"deleteDocument": _operation(
"DELETE",
"requestDocumentDeletion",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/documents/{documentId}",
"json",
resource_resolver="document",
max_request_bytes=32 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"bulkDeleteDocuments": _operation(
"DELETE",
"requestBulkDocumentDeletion",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/documents/bulk",
"json",
resource_resolver="knowledge_space",
max_request_bytes=1024 * 1024,
max_response_bytes=4 * 1024 * 1024,
stream_kind="json",
),
"reindexDocuments": _operation(
"POST",
"bulkReindexDocuments",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/documents/bulk/reindex",
"json",
resource_resolver="knowledge_space",
max_request_bytes=1024 * 1024,
max_response_bytes=4 * 1024 * 1024,
stream_kind="json",
),
"getCompilationJob": _operation(
"GET",
"getDocumentCompilationJob",
KnowledgeFSProductPermission.READ,
"/jobs/{id}",
"json",
resource_resolver="job",
max_request_bytes=16 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"cancelCompilationJob": _operation(
"DELETE",
"cancelDocumentCompilationJob",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/jobs/{id}",
"json",
resource_resolver="job",
max_request_bytes=16 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"retryCompilationJob": _operation(
"POST",
"retryDocumentCompilationJob",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/jobs/{id}/retry",
"json",
resource_resolver="job",
max_request_bytes=16 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"getBulkJob": _operation(
"GET",
"getBulkOperation",
KnowledgeFSProductPermission.READ,
"/bulk-jobs/{id}",
"json",
resource_resolver="job",
max_request_bytes=16 * 1024,
max_response_bytes=2 * 1024 * 1024,
stream_kind="json",
),
"listBackgroundTasks": _operation(
"GET",
"listBackgroundTasks",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/background-tasks",
"json",
resource_resolver="knowledge_space",
max_request_bytes=16 * 1024,
max_response_bytes=4 * 1024 * 1024,
stream_kind="json",
),
"cancelBackgroundTask": _operation(
"POST",
"cancelBackgroundTask",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/background-tasks/{taskKind}/{taskId}/cancel",
"json",
resource_resolver="job",
max_request_bytes=16 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"retryBackgroundTask": _operation(
"POST",
"retryBackgroundTask",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/background-tasks/{taskKind}/{taskId}/retry",
"json",
resource_resolver="job",
max_request_bytes=16 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"listSources": _operation(
"GET",
"listKnowledgeSpaceSources",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/sources",
"json",
resource_resolver="knowledge_space",
max_request_bytes=16 * 1024,
max_response_bytes=2 * 1024 * 1024,
stream_kind="json",
),
"createSource": _operation(
"POST",
"createKnowledgeSpaceSource",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/sources",
"json",
resource_resolver="knowledge_space",
max_request_bytes=256 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"getSource": _operation(
"GET",
"getKnowledgeSpaceSource",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/sources/{sourceId}",
"json",
resource_resolver="source",
max_request_bytes=0,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"updateSource": _operation(
"PATCH",
"updateKnowledgeSpaceSource",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/sources/{sourceId}",
"json",
resource_resolver="source",
max_request_bytes=256 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"deleteSource": _operation(
"DELETE",
"requestSourceDeletion",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/sources/{sourceId}",
"json",
resource_resolver="source",
max_request_bytes=32 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"testSource": _operation(
"POST",
"testKnowledgeSpaceSource",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/sources/{sourceId}/test",
"json",
resource_resolver="source",
max_request_bytes=0,
max_response_bytes=256 * 1024,
stream_kind="json",
),
"syncSource": _operation(
"POST",
"createSourceSyncWorkflow",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/sources/{sourceId}/sync",
"json",
resource_resolver="source",
max_request_bytes=16 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"listSourceProviders": _operation(
"GET",
"listSourceProviders",
KnowledgeFSProductPermission.READ,
"/source-providers",
"json",
resource_resolver="namespace",
max_request_bytes=0,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"createSourceConnection": _operation(
"POST",
"createSourceConnection",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/source-connections",
"json",
resource_resolver="knowledge_space",
max_request_bytes=256 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"listSourceConnections": _operation(
"GET",
"listSourceConnections",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/source-connections",
"json",
resource_resolver="knowledge_space",
max_request_bytes=16 * 1024,
max_response_bytes=1024 * 1024,
stream_kind="json",
),
"refreshSourceConnection": _operation(
"POST",
"refreshSourceConnection",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/source-connections/{connectionId}/refresh",
"json",
resource_resolver="knowledge_space",
max_request_bytes=32 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"previewSourceCrawl": _operation(
"POST",
"createSourceCrawlPreviewWorkflow",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/sources/{sourceId}/crawl-preview",
"json",
resource_resolver="source",
max_request_bytes=16 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"importSelectedSourceCrawl": _operation(
"POST",
"createSourceCrawlImportWorkflow",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/sources/{sourceId}/crawl-import",
"json",
resource_resolver="source",
max_request_bytes=1024 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"importSourceWorkflow": _operation(
"POST",
"createSourceImportWorkflow",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/sources/{sourceId}/workflow-imports",
"json",
resource_resolver="source",
max_request_bytes=4 * 1024 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"getSourceSyncPolicy": _operation(
"GET",
"getSourceSyncPolicy",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/sources/{sourceId}/sync-policy",
"json",
resource_resolver="source",
max_request_bytes=0,
max_response_bytes=256 * 1024,
stream_kind="json",
),
"updateSourceSyncPolicy": _operation(
"PUT",
"putSourceSyncPolicy",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/sources/{sourceId}/sync-policy",
"json",
resource_resolver="source",
max_request_bytes=32 * 1024,
max_response_bytes=256 * 1024,
stream_kind="json",
),
"getSourceWorkflow": _operation(
"GET",
"getSourceWorkflow",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/source-workflows/{runId}",
"json",
resource_resolver="job",
max_request_bytes=0,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"cancelSourceWorkflow": _operation(
"POST",
"cancelSourceWorkflow",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/source-workflows/{runId}/cancel",
"json",
resource_resolver="job",
max_request_bytes=32 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"retrySourceWorkflow": _operation(
"POST",
"retrySourceWorkflow",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/source-workflows/{runId}/retry",
"json",
resource_resolver="job",
max_request_bytes=0,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"listCrawlPreviewPages": _operation(
"GET",
"listCrawlPreviewPages",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/source-workflows/{runId}/pages",
"json",
resource_resolver="job",
max_request_bytes=16 * 1024,
max_response_bytes=4 * 1024 * 1024,
stream_kind="json",
),
"selectCrawlPreviewPages": _operation(
"POST",
"selectCrawlPreviewPages",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/source-workflows/{runId}/selection",
"json",
resource_resolver="job",
max_request_bytes=256 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"crawlSource": _operation(
"POST",
"crawlKnowledgeSpaceSource",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/sources/{sourceId}/crawl",
"json",
resource_resolver="source",
max_request_bytes=0,
max_response_bytes=8 * 1024 * 1024,
stream_kind="json",
),
"listSourcePages": _operation(
"GET",
"listKnowledgeSpaceSourcePages",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/sources/{sourceId}/pages",
"json",
resource_resolver="source",
max_request_bytes=16 * 1024,
max_response_bytes=4 * 1024 * 1024,
stream_kind="json",
),
"importSourcePages": _operation(
"POST",
"importKnowledgeSpaceSourcePages",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/sources/{sourceId}/import",
"json",
resource_resolver="source",
max_request_bytes=1024 * 1024,
max_response_bytes=4 * 1024 * 1024,
stream_kind="json",
),
"listSourceFiles": _operation(
"GET",
"listKnowledgeSpaceSourceFiles",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/sources/{sourceId}/files",
"json",
resource_resolver="source",
max_request_bytes=32 * 1024,
max_response_bytes=4 * 1024 * 1024,
stream_kind="json",
),
"importSourceFiles": _operation(
"POST",
"importKnowledgeSpaceSourceFiles",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/sources/{sourceId}/import-files",
"json",
resource_resolver="source",
max_request_bytes=1024 * 1024,
max_response_bytes=4 * 1024 * 1024,
stream_kind="json",
),
"createQuery": _operation(
"POST",
"createQuery",
KnowledgeFSProductPermission.QUERY,
"/queries",
"sse",
resource_resolver="knowledge_space",
max_request_bytes=64 * 1024,
max_response_bytes=0,
stream_kind="sse",
),
"retrieveEvidence": _operation(
"POST",
"runRetrievalTest",
KnowledgeFSProductPermission.QUERY,
"/knowledge-spaces/{id}/retrieval-tests",
"json",
resource_resolver="knowledge_space",
max_request_bytes=64 * 1024,
max_response_bytes=4 * 1024 * 1024,
stream_kind="json",
),
"captureWorkflowFailedRetrieval": _operation(
"POST",
"captureWorkflowFailedRetrieval",
KnowledgeFSProductPermission.QUERY,
"/knowledge-spaces/{id}/failed-queries/workflow-retrieval-misses",
"json",
resource_resolver="knowledge_space",
max_request_bytes=128 * 1024,
max_response_bytes=64 * 1024,
stream_kind="json",
),
"listResearchTasks": _operation(
"GET",
"listKnowledgeSpaceResearchTasks",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/research-tasks",
"json",
resource_resolver="knowledge_space",
max_request_bytes=16 * 1024,
max_response_bytes=2 * 1024 * 1024,
stream_kind="json",
),
"createResearchTask": _operation(
"POST",
"createResearchTask",
KnowledgeFSProductPermission.QUERY,
"/research-tasks",
"json",
resource_resolver="knowledge_space",
max_request_bytes=64 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"planResearchTask": _operation(
"POST",
"planResearchTask",
KnowledgeFSProductPermission.QUERY,
"/research-tasks/plan",
"json",
resource_resolver="knowledge_space",
max_request_bytes=64 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"getResearchTask": _operation(
"GET",
"getResearchTask",
KnowledgeFSProductPermission.QUERY,
"/research-tasks/{id}",
"json",
resource_resolver="research_task",
max_request_bytes=16 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"listResearchTaskPartials": _operation(
"GET",
"listResearchTaskPartials",
KnowledgeFSProductPermission.QUERY,
"/research-tasks/{id}/partials",
"json",
resource_resolver="research_task",
max_request_bytes=16 * 1024,
max_response_bytes=8 * 1024 * 1024,
stream_kind="json",
),
"cancelResearchTask": _operation(
"DELETE",
"cancelResearchTask",
KnowledgeFSProductPermission.QUERY,
"/research-tasks/{id}",
"json",
resource_resolver="research_task",
max_request_bytes=16 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"listGoldenQuestions": _operation(
"GET",
"listGoldenQuestions",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/golden-questions",
"json",
resource_resolver="knowledge_space",
max_request_bytes=16 * 1024,
max_response_bytes=2 * 1024 * 1024,
stream_kind="json",
),
"createGoldenQuestion": _operation(
"POST",
"createGoldenQuestion",
KnowledgeFSProductPermission.EDIT,
"/knowledge-spaces/{id}/golden-questions",
"json",
resource_resolver="knowledge_space",
max_request_bytes=64 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"matchGoldenQuestionEvidence": _operation(
"POST",
"matchGoldenQuestionEvidence",
KnowledgeFSProductPermission.EDIT,
"/knowledge-spaces/{id}/golden-questions/evidence-matches",
"json",
resource_resolver="knowledge_space",
max_request_bytes=128 * 1024,
max_response_bytes=2 * 1024 * 1024,
stream_kind="json",
),
"bulkImportGoldenQuestions": _operation(
"POST",
"bulkImportGoldenQuestions",
KnowledgeFSProductPermission.EDIT,
"/knowledge-spaces/{id}/golden-questions/bulk-import",
"json",
resource_resolver="knowledge_space",
max_request_bytes=4 * 1024 * 1024,
max_response_bytes=8 * 1024 * 1024,
stream_kind="json",
),
"updateGoldenQuestion": _operation(
"PATCH",
"updateGoldenQuestion",
KnowledgeFSProductPermission.EDIT,
"/knowledge-spaces/{id}/golden-questions/{questionId}",
"json",
resource_resolver="knowledge_space",
max_request_bytes=64 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"deleteGoldenQuestion": _operation(
"DELETE",
"deleteGoldenQuestion",
KnowledgeFSProductPermission.EDIT,
"/knowledge-spaces/{id}/golden-questions/{questionId}",
"json",
resource_resolver="knowledge_space",
max_request_bytes=0,
max_response_bytes=64 * 1024,
stream_kind="json",
),
"listQualityBadCases": _operation(
"GET",
"listQualityBadCases",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/quality/bad-cases",
"json",
resource_resolver="knowledge_space",
max_request_bytes=16 * 1024,
max_response_bytes=2 * 1024 * 1024,
stream_kind="json",
),
"createQualityBadCase": _operation(
"POST",
"createQualityBadCase",
KnowledgeFSProductPermission.EDIT,
"/knowledge-spaces/{id}/quality/bad-cases",
"json",
resource_resolver="knowledge_space",
max_request_bytes=64 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"getQualityBadCase": _operation(
"GET",
"getQualityBadCase",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/quality/bad-cases/{badCaseId}",
"json",
resource_resolver="knowledge_space",
max_request_bytes=0,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"updateQualityBadCase": _operation(
"PATCH",
"updateQualityBadCase",
KnowledgeFSProductPermission.EDIT,
"/knowledge-spaces/{id}/quality/bad-cases/{badCaseId}",
"json",
resource_resolver="knowledge_space",
max_request_bytes=64 * 1024,
max_response_bytes=512 * 1024,
stream_kind="json",
),
"createQualityReplay": _operation(
"POST",
"createQualityReplay",
KnowledgeFSProductPermission.EDIT,
"/knowledge-spaces/{id}/quality/replay-runs",
"json",
resource_resolver="knowledge_space",
max_request_bytes=64 * 1024,
max_response_bytes=4 * 1024 * 1024,
stream_kind="json",
),
"listQualityReplays": _operation(
"GET",
"listQualityReplays",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/quality/replay-runs",
"json",
resource_resolver="knowledge_space",
max_request_bytes=16 * 1024,
max_response_bytes=4 * 1024 * 1024,
stream_kind="json",
),
"getQualityReplay": _operation(
"GET",
"getQualityReplay",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/quality/replay-runs/{runId}",
"json",
resource_resolver="knowledge_space",
# The optional evidenceItemId detail selector is transported as a query string.
# Keep the same bounded query allowance as the replay list operation.
max_request_bytes=16 * 1024,
max_response_bytes=4 * 1024 * 1024,
stream_kind="json",
),
"getQualityBadCaseTraceReference": _operation(
"GET",
"getQualityBadCaseTraceReference",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/quality/bad-cases/{badCaseId}/trace-reference",
"json",
resource_resolver="knowledge_space",
max_request_bytes=0,
max_response_bytes=64 * 1024,
stream_kind="json",
),
"listTraces": _operation(
"GET",
"listKnowledgeSpaceQualityTraces",
KnowledgeFSProductPermission.READ,
"/knowledge-spaces/{id}/quality/traces",
"json",
resource_resolver="knowledge_space",
max_request_bytes=16 * 1024,
max_response_bytes=4 * 1024 * 1024,
stream_kind="json",
),
"getTrace": _operation(
"GET",
"getAnswerTrace",
KnowledgeFSProductPermission.QUERY,
"/queries/{traceId}",
"json",
resource_resolver="query",
max_request_bytes=16 * 1024,
max_response_bytes=2 * 1024 * 1024,
stream_kind="json",
),
"listTraceEvidence": _operation(
"GET",
"listQueryEvidence",
KnowledgeFSProductPermission.QUERY,
"/queries/{traceId}/evidence",
"json",
resource_resolver="query",
max_request_bytes=16 * 1024,
max_response_bytes=4 * 1024 * 1024,
stream_kind="json",
),
"listTraceConflicts": _operation(
"GET",
"listQueryConflicts",
KnowledgeFSProductPermission.QUERY,
"/queries/{traceId}/conflicts",
"json",
resource_resolver="query",
max_request_bytes=16 * 1024,
max_response_bytes=4 * 1024 * 1024,
stream_kind="json",
),
"listTraceMissing": _operation(
"GET",
"listQueryMissing",
KnowledgeFSProductPermission.QUERY,
"/queries/{traceId}/missing",
"json",
resource_resolver="query",
max_request_bytes=16 * 1024,
max_response_bytes=4 * 1024 * 1024,
stream_kind="json",
),
"createUploadSession": _operation(
"POST",
"createUploadSession",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/knowledge-spaces/{id}/upload-sessions",
"json",
resource_resolver="knowledge_space",
max_request_bytes=64 * 1024,
max_response_bytes=64 * 1024,
stream_kind="json",
),
"presignUploadSessionPart": _operation(
"POST",
"presignUploadSessionPart",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/upload-sessions/{id}/parts/{partNumber}/presign",
"json",
resource_resolver="upload_session",
max_request_bytes=32 * 1024,
max_response_bytes=64 * 1024,
stream_kind="json",
),
"uploadSmallFile": _operation(
"POST",
"uploadSmallFile",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/upload-sessions/{id}/small-file",
"binary",
resource_resolver="upload_session",
max_request_bytes=8 * 1024 * 1024,
max_response_bytes=128 * 1024,
stream_kind="json",
),
"completeUploadSession": _operation(
"POST",
"completeUploadSession",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/upload-sessions/{id}/complete",
"json",
resource_resolver="upload_session",
max_request_bytes=128 * 1024,
max_response_bytes=128 * 1024,
stream_kind="json",
),
"abortUploadSession": _operation(
"POST",
"abortUploadSession",
KnowledgeFSProductPermission.DOCUMENT_WRITE,
"/upload-sessions/{id}/abort",
"json",
resource_resolver="upload_session",
max_request_bytes=32 * 1024,
max_response_bytes=64 * 1024,
stream_kind="json",
),
"streamResearchTask": _operation(
"GET",
"streamResearchTaskProgress",
KnowledgeFSProductPermission.READ,
"/research-tasks/{id}/events",
"sse",
resource_resolver="research_task",
max_request_bytes=16 * 1024,
max_response_bytes=0,
stream_kind="sse",
),
}
)
def is_product_operation_registered(operation_id: str) -> bool:
operation = KNOWLEDGE_FS_PRODUCT_OPERATIONS.get(operation_id)
if operation is None or operation.capability_operation_id is None or operation.kfs_path is None:
return False
capability = KNOWLEDGE_FS_CAPABILITY_OPERATIONS.get(operation.capability_operation_id)
return bool(
capability
and capability.method == operation.method
and capability.path == operation.kfs_path
and capability.action
and capability.resource_type == operation.resource_resolver
and operation.permission == operation.rbac_permission
)
def is_product_operation_ready(operation_id: str) -> bool:
operation = KNOWLEDGE_FS_PRODUCT_OPERATIONS.get(operation_id)
return bool(
operation
and operation.transport in {"binary", "json", "multipart", "sse"}
and is_product_operation_registered(operation_id)
)
def knowledge_fs_product_operation_gaps() -> tuple[str, ...]:
return tuple(
operation_id for operation_id in KNOWLEDGE_FS_PRODUCT_OPERATIONS if not is_product_operation_ready(operation_id)
)
def product_operation_action(operation_id: str) -> str:
if not is_product_operation_ready(operation_id):
raise KeyError(operation_id)
capability_operation_id = KNOWLEDGE_FS_PRODUCT_OPERATIONS[operation_id].capability_operation_id
if capability_operation_id is None:
raise KeyError(operation_id)
return KNOWLEDGE_FS_CAPABILITY_OPERATIONS[capability_operation_id].action
__all__ = [
"KNOWLEDGE_FS_PRODUCT_OPERATIONS",
"KnowledgeFSProductOperation",
"KnowledgeFSProductPermission",
"is_product_operation_ready",
"is_product_operation_registered",
"knowledge_fs_product_operation_gaps",
"product_operation_action",
]