chore(api): annotate simple contract responses (#36331)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Asuka Minato <i@asukaminato.eu.org>
This commit is contained in:
Stephen Zhou 2026-05-19 14:13:20 +08:00 committed by GitHub
parent 674cdc3521
commit b04b4449db
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
142 changed files with 3830 additions and 2399 deletions

View File

@ -2,8 +2,9 @@ from __future__ import annotations
from typing import Any
from pydantic import BaseModel, ConfigDict, computed_field
from pydantic import BaseModel, ConfigDict, Field, computed_field
from fields.base import ResponseModel
from graphon.file import helpers as file_helpers
from models.model import IconType
@ -19,6 +20,113 @@ class SystemParameters(BaseModel):
workflow_file_upload_limit: int
class SimpleResultResponse(ResponseModel):
result: str
class SimpleResultMessageResponse(ResponseModel):
result: str
message: str
class SimpleMessageResponse(ResponseModel):
message: str
class SimpleDataResponse(ResponseModel):
data: str
class SimpleResultDataResponse(ResponseModel):
result: str
data: str
class SimpleResultStringListResponse(ResponseModel):
result: str
data: list[str]
class SimpleResultOptionalDataResponse(ResponseModel):
result: str
data: str | None = None
class AccessTokenData(ResponseModel):
access_token: str
class AccessTokenResultResponse(ResponseModel):
result: str
data: AccessTokenData
class VerificationTokenResponse(ResponseModel):
is_valid: bool
email: str
token: str
class LoginStatusResponse(ResponseModel):
logged_in: bool
app_logged_in: bool
class AccessModeResponse(ResponseModel):
access_mode: str = Field(serialization_alias="accessMode", validation_alias="accessMode")
class BooleanResultResponse(ResponseModel):
result: bool
class SuccessResponse(ResponseModel):
success: bool
class UsageCheckResponse(ResponseModel):
is_using: bool
class UsageCountResponse(ResponseModel):
is_using: bool
count: int
class IndexInfoResponse(ResponseModel):
welcome: str
api_version: str
server_version: str
class AvatarUrlResponse(ResponseModel):
avatar_url: str
class TextContentResponse(ResponseModel):
content: str
class AllowedExtensionsResponse(ResponseModel):
allowed_extensions: list[str]
class UrlResponse(ResponseModel):
url: str
class RedirectUrlResponse(ResponseModel):
redirect_url: str
class ApiBaseUrlResponse(ResponseModel):
api_base_url: str
class NewAppResponse(ResponseModel):
new_app_id: str
class Parameters(BaseModel):
opening_statement: str | None = None
suggested_questions: list[str]

View File

@ -12,8 +12,9 @@ from sqlalchemy.orm import Session
from werkzeug.datastructures import MultiDict
from werkzeug.exceptions import BadRequest
from controllers.common.fields import RedirectUrlResponse, SimpleResultResponse
from controllers.common.helpers import FileInfo
from controllers.common.schema import register_enum_models, register_schema_models
from controllers.common.schema import register_enum_models, register_response_schema_models, register_schema_models
from controllers.console import console_ns
from controllers.console.app.wraps import get_app_model
from controllers.console.workspace.models import LoadBalancingPayload
@ -413,6 +414,7 @@ class AppExportResponse(ResponseModel):
register_enum_models(console_ns, RetrievalMethod, WorkflowExecutionStatus, DatasetPermissionEnum)
register_response_schema_models(console_ns, RedirectUrlResponse, SimpleResultResponse)
register_schema_models(
console_ns,
@ -724,6 +726,7 @@ class AppExportApi(Resource):
@console_ns.route("/apps/<uuid:app_id>/publish-to-creators-platform")
class AppPublishToCreatorsPlatformApi(Resource):
@console_ns.response(200, "Success", console_ns.models[RedirectUrlResponse.__name__])
@setup_required
@login_required
@account_initialization_required
@ -861,7 +864,11 @@ class AppTraceApi(Resource):
@console_ns.doc(description="Update app tracing configuration")
@console_ns.doc(params={"app_id": "Application ID"})
@console_ns.expect(console_ns.models[AppTracePayload.__name__])
@console_ns.response(200, "Trace configuration updated successfully")
@console_ns.response(
200,
"Trace configuration updated successfully",
console_ns.models[SimpleResultResponse.__name__],
)
@console_ns.response(403, "Insufficient permissions")
@setup_required
@login_required

View File

@ -7,7 +7,8 @@ from pydantic import BaseModel, Field, field_validator
from werkzeug.exceptions import InternalServerError, NotFound
import services
from controllers.common.schema import register_schema_models
from controllers.common.fields import SimpleResultResponse
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.console import console_ns
from controllers.console.app.error import (
AppUnavailableError,
@ -66,6 +67,7 @@ class ChatMessagePayload(BaseMessagePayload):
register_schema_models(console_ns, CompletionMessagePayload, ChatMessagePayload)
register_response_schema_models(console_ns, SimpleResultResponse)
# define completion message api for user
@ -124,7 +126,7 @@ class CompletionMessageStopApi(Resource):
@console_ns.doc("stop_completion_message")
@console_ns.doc(description="Stop a running completion message generation")
@console_ns.doc(params={"app_id": "Application ID", "task_id": "Task ID to stop"})
@console_ns.response(200, "Task stopped successfully")
@console_ns.response(200, "Task stopped successfully", console_ns.models[SimpleResultResponse.__name__])
@setup_required
@login_required
@account_initialization_required
@ -205,7 +207,7 @@ class ChatMessageStopApi(Resource):
@console_ns.doc("stop_chat_message")
@console_ns.doc(description="Stop a running chat message generation")
@console_ns.doc(params={"app_id": "Application ID", "task_id": "Task ID to stop"})
@console_ns.response(200, "Task stopped successfully")
@console_ns.response(200, "Task stopped successfully", console_ns.models[SimpleResultResponse.__name__])
@setup_required
@login_required
@account_initialization_required

View File

@ -9,7 +9,8 @@ from sqlalchemy import exists, func, select
from werkzeug.exceptions import InternalServerError, NotFound
from controllers.common.controller_schemas import MessageFeedbackPayload as _MessageFeedbackPayloadBase
from controllers.common.schema import register_schema_models
from controllers.common.fields import SimpleResultResponse
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.console import console_ns
from controllers.console.app.error import (
CompletionRequestError,
@ -162,6 +163,7 @@ register_schema_models(
MessageDetailResponse,
MessageInfiniteScrollPaginationResponse,
)
register_response_schema_models(console_ns, SimpleResultResponse)
@console_ns.route("/apps/<uuid:app_id>/chat-messages")
@ -247,7 +249,7 @@ class MessageFeedbackApi(Resource):
@console_ns.doc(description="Create or update message feedback (like/dislike)")
@console_ns.doc(params={"app_id": "Application ID"})
@console_ns.expect(console_ns.models[MessageFeedbackPayload.__name__])
@console_ns.response(200, "Feedback updated successfully")
@console_ns.response(200, "Feedback updated successfully", console_ns.models[SimpleResultResponse.__name__])
@console_ns.response(404, "Message not found")
@console_ns.response(403, "Insufficient permissions")
@get_app_model

View File

@ -12,6 +12,7 @@ from werkzeug.exceptions import BadRequest, Forbidden, InternalServerError, NotF
import services
from controllers.common.controller_schemas import DefaultBlockConfigQuery, WorkflowListQuery, WorkflowUpdatePayload
from controllers.common.fields import NewAppResponse, SimpleResultResponse
from controllers.common.schema import (
register_response_schema_model,
register_response_schema_models,
@ -290,6 +291,8 @@ register_response_schema_models(
WorkflowOnlineUser,
WorkflowOnlineUsersByApp,
WorkflowOnlineUsersResponse,
NewAppResponse,
SimpleResultResponse,
)
@ -869,7 +872,7 @@ class WorkflowTaskStopApi(Resource):
@console_ns.doc("stop_workflow_task")
@console_ns.doc(description="Stop running workflow task")
@console_ns.doc(params={"app_id": "Application ID", "task_id": "Task ID"})
@console_ns.response(200, "Task stopped successfully")
@console_ns.response(200, "Task stopped successfully", console_ns.models[SimpleResultResponse.__name__])
@console_ns.response(404, "Task not found")
@console_ns.response(403, "Permission denied")
@setup_required
@ -1069,7 +1072,11 @@ class ConvertToWorkflowApi(Resource):
@console_ns.doc("convert_to_workflow")
@console_ns.doc(description="Convert application to workflow mode")
@console_ns.doc(params={"app_id": "Application ID"})
@console_ns.response(200, "Application converted to workflow successfully")
@console_ns.response(
200,
"Application converted to workflow successfully",
console_ns.models[NewAppResponse.__name__],
)
@console_ns.response(400, "Application cannot be converted")
@console_ns.response(403, "Permission denied")
@setup_required
@ -1106,7 +1113,11 @@ class WorkflowFeaturesApi(Resource):
@console_ns.doc("update_workflow_features")
@console_ns.doc(description="Update draft workflow features")
@console_ns.doc(params={"app_id": "Application ID"})
@console_ns.response(200, "Workflow features updated successfully")
@console_ns.response(
200,
"Workflow features updated successfully",
console_ns.models[SimpleResultResponse.__name__],
)
@setup_required
@login_required
@account_initialization_required

View File

@ -1,5 +1,3 @@
from typing import Any
from flask import request
from flask_restx import Resource
from pydantic import BaseModel, Field, field_validator
@ -40,16 +38,29 @@ class ActivatePayload(BaseModel):
return timezone(value)
class ActivationCheckResponse(BaseModel):
is_valid: bool = Field(description="Whether token is valid")
data: dict[str, Any] | None = Field(default=None, description="Activation data if valid")
class ActivationResponse(BaseModel):
result: str = Field(description="Operation result")
register_schema_models(console_ns, ActivateCheckQuery, ActivatePayload, ActivationCheckResponse, ActivationResponse)
class ActivationCheckData(BaseModel):
workspace_name: str | None
workspace_id: str | None
email: str | None
class ActivationCheckResponse(BaseModel):
is_valid: bool = Field(description="Whether token is valid")
data: ActivationCheckData | None = Field(default=None, description="Activation data if valid")
register_schema_models(
console_ns,
ActivateCheckQuery,
ActivatePayload,
ActivationCheckData,
ActivationCheckResponse,
ActivationResponse,
)
@console_ns.route("/activate/check")

View File

@ -1,7 +1,8 @@
from flask_restx import Resource
from pydantic import BaseModel, Field
from controllers.common.schema import register_schema_models
from controllers.common.schema import register_response_schema_models, register_schema_models
from fields.base import ResponseModel
from libs.login import current_account_with_tenant, login_required
from services.auth.api_key_auth_service import ApiKeyAuthService
@ -16,11 +17,26 @@ class ApiKeyAuthBindingPayload(BaseModel):
credentials: dict = Field(...)
class ApiKeyAuthDataSourceItem(ResponseModel):
id: str
category: str
provider: str
disabled: bool
created_at: int
updated_at: int
class ApiKeyAuthDataSourceListResponse(ResponseModel):
sources: list[ApiKeyAuthDataSourceItem]
register_schema_models(console_ns, ApiKeyAuthBindingPayload)
register_response_schema_models(console_ns, ApiKeyAuthDataSourceItem, ApiKeyAuthDataSourceListResponse)
@console_ns.route("/api-key-auth/data-source")
class ApiKeyAuthDataSource(Resource):
@console_ns.response(200, "Success", console_ns.models[ApiKeyAuthDataSourceListResponse.__name__])
@setup_required
@login_required
@account_initialization_required
@ -70,6 +86,7 @@ class ApiKeyAuthDataSourceBindingDelete(Resource):
@login_required
@account_initialization_required
@is_admin_or_owner_required
@console_ns.response(204, "Binding deleted successfully")
def delete(self, binding_id):
# The role of the current user in the table must be admin or owner
_, current_tenant_id = current_account_with_tenant()

View File

@ -4,7 +4,8 @@ from pydantic import BaseModel, Field, field_validator
from configs import dify_config
from constants.languages import get_valid_language, languages
from controllers.common.schema import register_schema_models
from controllers.common.fields import SimpleResultDataResponse, VerificationTokenResponse
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.console import console_ns
from controllers.console.auth.error import (
EmailAlreadyInUseError,
@ -58,6 +59,7 @@ class EmailRegisterResetPayload(BaseModel):
register_schema_models(console_ns, EmailRegisterSendPayload, EmailRegisterValidityPayload, EmailRegisterResetPayload)
register_response_schema_models(console_ns, SimpleResultDataResponse, VerificationTokenResponse)
@console_ns.route("/email-register/send-email")
@ -65,6 +67,7 @@ class EmailRegisterSendEmailApi(Resource):
@setup_required
@email_password_login_enabled
@email_register_enabled
@console_ns.response(200, "Success", console_ns.models[SimpleResultDataResponse.__name__])
def post(self):
args = EmailRegisterSendPayload.model_validate(console_ns.payload)
normalized_email = args.email.lower()
@ -89,6 +92,7 @@ class EmailRegisterCheckApi(Resource):
@setup_required
@email_password_login_enabled
@email_register_enabled
@console_ns.response(200, "Success", console_ns.models[VerificationTokenResponse.__name__])
def post(self):
args = EmailRegisterValidityPayload.model_validate(console_ns.payload)

View File

@ -9,7 +9,8 @@ from werkzeug.exceptions import Unauthorized
import services
from configs import dify_config
from constants.languages import get_valid_language
from controllers.common.schema import register_schema_models
from controllers.common.fields import SimpleResultDataResponse, SimpleResultOptionalDataResponse, SimpleResultResponse
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.console import console_ns
from controllers.console.auth.error import (
AuthenticationFailedError,
@ -81,6 +82,12 @@ class EmailCodeLoginPayload(BaseModel):
register_schema_models(console_ns, LoginPayload, EmailPayload, EmailCodeLoginPayload)
register_response_schema_models(
console_ns,
SimpleResultDataResponse,
SimpleResultOptionalDataResponse,
SimpleResultResponse,
)
@console_ns.route("/login")
@ -90,6 +97,7 @@ class LoginApi(Resource):
@setup_required
@email_password_login_enabled
@console_ns.expect(console_ns.models[LoginPayload.__name__])
@console_ns.response(200, "Success", console_ns.models[SimpleResultOptionalDataResponse.__name__])
@decrypt_password_field
def post(self):
"""Authenticate user and login."""
@ -163,6 +171,7 @@ class LoginApi(Resource):
@console_ns.route("/logout")
class LogoutApi(Resource):
@setup_required
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
def post(self):
current_user, _ = current_account_with_tenant()
account = current_user
@ -186,6 +195,7 @@ class ResetPasswordSendEmailApi(Resource):
@setup_required
@email_password_login_enabled
@console_ns.expect(console_ns.models[EmailPayload.__name__])
@console_ns.response(200, "Success", console_ns.models[SimpleResultDataResponse.__name__])
def post(self):
args = EmailPayload.model_validate(console_ns.payload)
normalized_email = args.email.lower()
@ -213,6 +223,7 @@ class ResetPasswordSendEmailApi(Resource):
class EmailCodeLoginSendEmailApi(Resource):
@setup_required
@console_ns.expect(console_ns.models[EmailPayload.__name__])
@console_ns.response(200, "Success", console_ns.models[SimpleResultDataResponse.__name__])
def post(self):
args = EmailPayload.model_validate(console_ns.payload)
normalized_email = args.email.lower()
@ -245,6 +256,7 @@ class EmailCodeLoginSendEmailApi(Resource):
class EmailCodeLoginApi(Resource):
@setup_required
@console_ns.expect(console_ns.models[EmailCodeLoginPayload.__name__])
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
@decrypt_code_field
def post(self):
args = EmailCodeLoginPayload.model_validate(console_ns.payload)
@ -321,6 +333,7 @@ class EmailCodeLoginApi(Resource):
@console_ns.route("/refresh-token")
class RefreshTokenApi(Resource):
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
def post(self):
# Get refresh token from cookie instead of request body
refresh_token = extract_refresh_token(request)

View File

@ -9,7 +9,8 @@ from sqlalchemy import select
from sqlalchemy.orm import sessionmaker
from werkzeug.exceptions import NotFound
from controllers.common.schema import get_or_create_model, register_schema_model
from controllers.common.fields import SimpleResultResponse, TextContentResponse
from controllers.common.schema import get_or_create_model, register_response_schema_models, register_schema_model
from core.datasource.entities.datasource_entities import DatasourceProviderType, OnlineDocumentPagesMessage
from core.datasource.online_document.online_document_plugin import OnlineDocumentDatasourcePlugin
from core.indexing_runner import IndexingRunner
@ -54,6 +55,7 @@ class DataSourceNotionPreviewQuery(BaseModel):
register_schema_model(console_ns, NotionEstimatePayload)
register_response_schema_models(console_ns, SimpleResultResponse, TextContentResponse)
integrate_icon_model = get_or_create_model("DataSourceIntegrateIcon", integrate_icon_fields)
@ -157,6 +159,7 @@ class DataSourceApi(Resource):
@setup_required
@login_required
@account_initialization_required
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
def patch(self, binding_id, action: Literal["enable", "disable"]):
_, current_tenant_id = current_account_with_tenant()
binding_id = str(binding_id)
@ -289,6 +292,7 @@ class DataSourceNotionApi(Resource):
@setup_required
@login_required
@account_initialization_required
@console_ns.response(200, "Success", console_ns.models[TextContentResponse.__name__])
def get(self, page_id, page_type):
_, current_tenant_id = current_account_with_tenant()
@ -362,6 +366,7 @@ class DataSourceNotionDatasetSyncApi(Resource):
@setup_required
@login_required
@account_initialization_required
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
def get(self, dataset_id):
dataset_id_str = str(dataset_id)
dataset = DatasetService.get_dataset(dataset_id_str)
@ -379,6 +384,7 @@ class DataSourceNotionDocumentSyncApi(Resource):
@setup_required
@login_required
@account_initialization_required
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
def get(self, dataset_id, document_id):
dataset_id_str = str(dataset_id)
document_id_str = str(document_id)

View File

@ -8,7 +8,8 @@ from werkzeug.exceptions import Forbidden, NotFound
import services
from configs import dify_config
from controllers.common.schema import get_or_create_model, register_schema_models
from controllers.common.fields import ApiBaseUrlResponse, SimpleResultResponse, UsageCheckResponse
from controllers.common.schema import get_or_create_model, register_response_schema_models, register_schema_models
from controllers.console import console_ns
from controllers.console.apikey import ApiKeyItem, ApiKeyList
from controllers.console.app.error import ProviderNotInitializeError
@ -58,6 +59,8 @@ from models.provider_ids import ModelProviderID
from services.api_token_service import ApiTokenCache
from services.dataset_service import DatasetPermissionService, DatasetService, DocumentService
register_response_schema_models(console_ns, ApiBaseUrlResponse, SimpleResultResponse, UsageCheckResponse)
# Register models for flask_restx to avoid dict type issues in Swagger
dataset_base_model = get_or_create_model("DatasetBase", dataset_fields)
@ -521,6 +524,7 @@ class DatasetApi(Resource):
@login_required
@account_initialization_required
@cloud_edition_billing_rate_limit_check("knowledge")
@console_ns.response(204, "Dataset deleted successfully")
def delete(self, dataset_id):
dataset_id_str = str(dataset_id)
current_user, _ = current_account_with_tenant()
@ -543,7 +547,11 @@ class DatasetUseCheckApi(Resource):
@console_ns.doc("check_dataset_use")
@console_ns.doc(description="Check if dataset is in use")
@console_ns.doc(params={"dataset_id": "Dataset ID"})
@console_ns.response(200, "Dataset use status retrieved successfully")
@console_ns.response(
200,
"Dataset use status retrieved successfully",
console_ns.models[UsageCheckResponse.__name__],
)
@setup_required
@login_required
@account_initialization_required
@ -873,6 +881,7 @@ class DatasetEnableApiApi(Resource):
@setup_required
@login_required
@account_initialization_required
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
def post(self, dataset_id, status):
dataset_id_str = str(dataset_id)
@ -885,7 +894,7 @@ class DatasetEnableApiApi(Resource):
class DatasetApiBaseUrlApi(Resource):
@console_ns.doc("get_dataset_api_base_info")
@console_ns.doc(description="Get dataset API base information")
@console_ns.response(200, "API base info retrieved successfully")
@console_ns.response(200, "API base info retrieved successfully", console_ns.models[ApiBaseUrlResponse.__name__])
@setup_required
@login_required
@account_initialization_required

View File

@ -15,7 +15,8 @@ from werkzeug.exceptions import Forbidden, NotFound
import services
from controllers.common.controller_schemas import DocumentBatchDownloadZipPayload
from controllers.common.schema import register_schema_models
from controllers.common.fields import SimpleResultMessageResponse, SimpleResultResponse, UrlResponse
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.console import console_ns
from core.errors.error import (
LLMBadRequestError,
@ -204,6 +205,7 @@ register_schema_models(
DocumentWithSegmentsResponse,
DatasetAndDocumentResponse,
)
register_response_schema_models(console_ns, SimpleResultMessageResponse, SimpleResultResponse, UrlResponse)
class DocumentResource(Resource):
@ -487,6 +489,7 @@ class DatasetDocumentListApi(Resource):
@login_required
@account_initialization_required
@cloud_edition_billing_rate_limit_check("knowledge")
@console_ns.response(204, "Documents deleted successfully")
def delete(self, dataset_id):
dataset_id = str(dataset_id)
dataset = DatasetService.get_dataset(dataset_id)
@ -946,6 +949,7 @@ class DocumentApi(DocumentResource):
@login_required
@account_initialization_required
@cloud_edition_billing_rate_limit_check("knowledge")
@console_ns.response(204, "Document deleted successfully")
def delete(self, dataset_id, document_id):
dataset_id = str(dataset_id)
document_id = str(document_id)
@ -971,6 +975,7 @@ class DocumentDownloadApi(DocumentResource):
@console_ns.doc("get_dataset_document_download_url")
@console_ns.doc(description="Get a signed download URL for a dataset document's original uploaded file")
@console_ns.response(200, "Download URL generated successfully", console_ns.models[UrlResponse.__name__])
@setup_required
@login_required
@account_initialization_required
@ -1028,7 +1033,11 @@ class DocumentProcessingApi(DocumentResource):
@console_ns.doc(
params={"dataset_id": "Dataset ID", "document_id": "Document ID", "action": "Action to perform (pause/resume)"}
)
@console_ns.response(200, "Processing status updated successfully")
@console_ns.response(
200,
"Processing status updated successfully",
console_ns.models[SimpleResultResponse.__name__],
)
@console_ns.response(404, "Document not found")
@console_ns.response(400, "Invalid action")
@setup_required
@ -1073,7 +1082,11 @@ class DocumentMetadataApi(DocumentResource):
@console_ns.doc(description="Update document metadata")
@console_ns.doc(params={"dataset_id": "Dataset ID", "document_id": "Document ID"})
@console_ns.expect(console_ns.models[DocumentMetadataUpdatePayload.__name__])
@console_ns.response(200, "Document metadata updated successfully")
@console_ns.response(
200,
"Document metadata updated successfully",
console_ns.models[SimpleResultMessageResponse.__name__],
)
@console_ns.response(404, "Document not found")
@console_ns.response(403, "Permission denied")
@setup_required
@ -1127,6 +1140,7 @@ class DocumentStatusApi(DocumentResource):
@account_initialization_required
@cloud_edition_billing_resource_check("vector_space")
@cloud_edition_billing_rate_limit_check("knowledge")
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
def patch(self, dataset_id, action: Literal["enable", "disable", "archive", "un_archive"]):
current_user, _ = current_account_with_tenant()
dataset_id = str(dataset_id)
@ -1164,6 +1178,7 @@ class DocumentPauseApi(DocumentResource):
@login_required
@account_initialization_required
@cloud_edition_billing_rate_limit_check("knowledge")
@console_ns.response(204, "Document paused successfully")
def patch(self, dataset_id, document_id):
"""pause document."""
dataset_id = str(dataset_id)
@ -1198,6 +1213,7 @@ class DocumentRecoverApi(DocumentResource):
@login_required
@account_initialization_required
@cloud_edition_billing_rate_limit_check("knowledge")
@console_ns.response(204, "Document resumed successfully")
def patch(self, dataset_id, document_id):
"""recover document."""
dataset_id = str(dataset_id)
@ -1230,6 +1246,7 @@ class DocumentRetryApi(DocumentResource):
@account_initialization_required
@cloud_edition_billing_rate_limit_check("knowledge")
@console_ns.expect(console_ns.models[DocumentRetryPayload.__name__])
@console_ns.response(204, "Documents retry started successfully")
def post(self, dataset_id):
"""retry document."""
payload = DocumentRetryPayload.model_validate(console_ns.payload or {})
@ -1296,6 +1313,7 @@ class WebsiteDocumentSyncApi(DocumentResource):
@setup_required
@login_required
@account_initialization_required
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
def get(self, dataset_id, document_id):
"""sync website document."""
_, current_tenant_id = current_account_with_tenant()
@ -1362,7 +1380,11 @@ class DocumentGenerateSummaryApi(Resource):
@console_ns.doc(description="Generate summary index for documents")
@console_ns.doc(params={"dataset_id": "Dataset ID"})
@console_ns.expect(console_ns.models[GenerateSummaryPayload.__name__])
@console_ns.response(200, "Summary generation started successfully")
@console_ns.response(
200,
"Summary generation started successfully",
console_ns.models[SimpleResultResponse.__name__],
)
@console_ns.response(400, "Invalid request or dataset configuration")
@console_ns.response(403, "Permission denied")
@console_ns.response(404, "Dataset not found")

View File

@ -10,7 +10,8 @@ from werkzeug.exceptions import Forbidden, NotFound
import services
from configs import dify_config
from controllers.common.controller_schemas import ChildChunkCreatePayload, ChildChunkUpdatePayload
from controllers.common.schema import register_schema_models
from controllers.common.fields import SimpleResultResponse
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.console import console_ns
from controllers.console.app.error import ProviderNotInitializeError
from controllers.console.datasets.error import (
@ -30,6 +31,7 @@ from core.model_manager import ModelManager
from core.rag.index_processor.constant.index_type import IndexTechniqueType
from extensions.ext_database import db
from extensions.ext_redis import redis_client
from fields.base import ResponseModel
from fields.segment_fields import child_chunk_fields, segment_fields
from graphon.model_runtime.entities.model_entities import ModelType
from libs.helper import escape_like_pattern
@ -83,6 +85,11 @@ class BatchImportPayload(BaseModel):
upload_file_id: str
class SegmentBatchImportStatusResponse(ResponseModel):
job_id: str
job_status: str
class ChildChunkBatchUpdatePayload(BaseModel):
chunks: list[ChildChunkUpdateArgs]
@ -98,6 +105,7 @@ register_schema_models(
ChildChunkBatchUpdatePayload,
ChildChunkUpdateArgs,
)
register_response_schema_models(console_ns, SegmentBatchImportStatusResponse, SimpleResultResponse)
@console_ns.route("/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/segments")
@ -217,6 +225,7 @@ class DatasetDocumentSegmentListApi(Resource):
@login_required
@account_initialization_required
@cloud_edition_billing_rate_limit_check("knowledge")
@console_ns.response(204, "Segments deleted successfully")
def delete(self, dataset_id, document_id):
current_user, _ = current_account_with_tenant()
@ -252,6 +261,7 @@ class DatasetDocumentSegmentApi(Resource):
@account_initialization_required
@cloud_edition_billing_resource_check("vector_space")
@cloud_edition_billing_rate_limit_check("knowledge")
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
def patch(self, dataset_id, document_id, action):
current_user, current_tenant_id = current_account_with_tenant()
@ -424,6 +434,7 @@ class DatasetDocumentSegmentUpdateApi(Resource):
@login_required
@account_initialization_required
@cloud_edition_billing_rate_limit_check("knowledge")
@console_ns.response(204, "Segment deleted successfully")
def delete(self, dataset_id, document_id, segment_id):
current_user, current_tenant_id = current_account_with_tenant()
@ -464,6 +475,7 @@ class DatasetDocumentSegmentUpdateApi(Resource):
"/datasets/batch_import_status/<uuid:job_id>",
)
class DatasetDocumentSegmentBatchImportApi(Resource):
@console_ns.response(200, "Batch import started", console_ns.models[SegmentBatchImportStatusResponse.__name__])
@setup_required
@login_required
@account_initialization_required
@ -514,6 +526,7 @@ class DatasetDocumentSegmentBatchImportApi(Resource):
return {"error": str(e)}, 500
return {"job_id": job_id, "job_status": "waiting"}, 200
@console_ns.response(200, "Batch import status", console_ns.models[SegmentBatchImportStatusResponse.__name__])
@setup_required
@login_required
@account_initialization_required
@ -691,6 +704,7 @@ class ChildChunkUpdateApi(Resource):
@login_required
@account_initialization_required
@cloud_edition_billing_rate_limit_check("knowledge")
@console_ns.response(204, "Child chunk deleted successfully")
def delete(self, dataset_id, document_id, segment_id, child_chunk_id):
current_user, current_tenant_id = current_account_with_tenant()

View File

@ -4,7 +4,8 @@ from pydantic import BaseModel, Field
from werkzeug.exceptions import Forbidden, InternalServerError, NotFound
import services
from controllers.common.schema import get_or_create_model, register_schema_models
from controllers.common.fields import UsageCountResponse
from controllers.common.schema import get_or_create_model, register_response_schema_models, register_schema_models
from controllers.console import console_ns
from controllers.console.datasets.error import DatasetNameDuplicateError
from controllers.console.wraps import account_initialization_required, edit_permission_required, setup_required
@ -27,6 +28,8 @@ from services.external_knowledge_service import ExternalDatasetService
from services.hit_testing_service import HitTestingService
from services.knowledge_service import BedrockRetrievalSetting, ExternalDatasetTestService
register_response_schema_models(console_ns, UsageCountResponse)
def _build_dataset_detail_model():
keyword_setting_model = get_or_create_model("DatasetKeywordSetting", keyword_setting_fields)
@ -206,6 +209,7 @@ class ExternalApiTemplateApi(Resource):
@setup_required
@login_required
@account_initialization_required
@console_ns.response(204, "External knowledge API deleted successfully")
def delete(self, external_knowledge_api_id):
current_user, current_tenant_id = current_account_with_tenant()
external_knowledge_api_id = str(external_knowledge_api_id)
@ -222,7 +226,7 @@ class ExternalApiUseCheckApi(Resource):
@console_ns.doc("check_external_api_usage")
@console_ns.doc(description="Check if external knowledge API is being used")
@console_ns.doc(params={"external_knowledge_api_id": "External knowledge API ID"})
@console_ns.response(200, "Usage check completed successfully")
@console_ns.response(200, "Usage check completed successfully", console_ns.models[UsageCountResponse.__name__])
@setup_required
@login_required
@account_initialization_required

View File

@ -4,7 +4,8 @@ from flask_restx import Resource, marshal_with
from werkzeug.exceptions import NotFound
from controllers.common.controller_schemas import MetadataUpdatePayload
from controllers.common.schema import register_schema_models
from controllers.common.fields import SimpleResultResponse
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.console import console_ns
from controllers.console.wraps import account_initialization_required, enterprise_license_required, setup_required
from fields.dataset_fields import dataset_metadata_fields
@ -21,6 +22,7 @@ from services.metadata_service import MetadataService
register_schema_models(
console_ns, MetadataArgs, MetadataOperationData, MetadataUpdatePayload, DocumentMetadataOperation, MetadataDetail
)
register_response_schema_models(console_ns, SimpleResultResponse)
@console_ns.route("/datasets/<uuid:dataset_id>/metadata")
@ -83,6 +85,7 @@ class DatasetMetadataApi(Resource):
@login_required
@account_initialization_required
@enterprise_license_required
@console_ns.response(204, "Metadata deleted successfully")
def delete(self, dataset_id, metadata_id):
current_user, _ = current_account_with_tenant()
dataset_id_str = str(dataset_id)
@ -113,6 +116,7 @@ class DatasetMetadataBuiltInFieldActionApi(Resource):
@login_required
@account_initialization_required
@enterprise_license_required
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
def post(self, dataset_id, action: Literal["enable", "disable"]):
current_user, _ = current_account_with_tenant()
dataset_id_str = str(dataset_id)
@ -136,6 +140,7 @@ class DocumentMetadataEditApi(Resource):
@account_initialization_required
@enterprise_license_required
@console_ns.expect(console_ns.models[MetadataOperationData.__name__])
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
def post(self, dataset_id):
current_user, _ = current_account_with_tenant()
dataset_id_str = str(dataset_id)

View File

@ -6,7 +6,8 @@ from pydantic import BaseModel, Field
from werkzeug.exceptions import Forbidden, NotFound
from configs import dify_config
from controllers.common.schema import register_schema_models
from controllers.common.fields import SimpleResultResponse
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.console import console_ns
from controllers.console.wraps import account_initialization_required, edit_permission_required, setup_required
from core.plugin.impl.oauth import OAuthHandler
@ -56,6 +57,7 @@ register_schema_models(
DatasourceDefaultPayload,
DatasourceUpdateNamePayload,
)
register_response_schema_models(console_ns, SimpleResultResponse)
@console_ns.route("/oauth/plugin/<path:provider_id>/datasource/get-authorization-url")
@ -209,6 +211,7 @@ class DatasourceAuth(Resource):
@console_ns.route("/auth/plugin/datasource/<path:provider_id>/delete")
class DatasourceAuthDeleteApi(Resource):
@console_ns.expect(console_ns.models[DatasourceCredentialDeletePayload.__name__])
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
@setup_required
@login_required
@account_initialization_required
@ -306,6 +309,7 @@ class DatasourceAuthOauthCustomClient(Resource):
@setup_required
@login_required
@account_initialization_required
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
def delete(self, provider_id: str):
_, current_tenant_id = current_account_with_tenant()
@ -321,6 +325,7 @@ class DatasourceAuthOauthCustomClient(Resource):
@console_ns.route("/auth/plugin/datasource/<path:provider_id>/default")
class DatasourceAuthDefaultApi(Resource):
@console_ns.expect(console_ns.models[DatasourceDefaultPayload.__name__])
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
@setup_required
@login_required
@account_initialization_required
@ -342,6 +347,7 @@ class DatasourceAuthDefaultApi(Resource):
@console_ns.route("/auth/plugin/datasource/<path:provider_id>/update-name")
class DatasourceUpdateProviderNameApi(Resource):
@console_ns.expect(console_ns.models[DatasourceUpdateNamePayload.__name__])
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
@setup_required
@login_required
@account_initialization_required

View File

@ -6,7 +6,8 @@ from pydantic import BaseModel, Field
from sqlalchemy import select
from sqlalchemy.orm import sessionmaker
from controllers.common.schema import register_schema_models
from controllers.common.fields import SimpleDataResponse
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.console import console_ns
from controllers.console.wraps import (
account_initialization_required,
@ -59,6 +60,7 @@ class Payload(BaseModel):
register_schema_models(console_ns, Payload)
register_response_schema_models(console_ns, SimpleDataResponse)
@console_ns.route("/rag/pipeline/customized/templates/<string:template_id>")
@ -85,6 +87,7 @@ class CustomizedPipelineTemplateApi(Resource):
@login_required
@account_initialization_required
@enterprise_license_required
@console_ns.response(200, "Success", console_ns.models[SimpleDataResponse.__name__])
def post(self, template_id: str):
with sessionmaker(db.engine, expire_on_commit=False).begin() as session:
template = session.scalar(

View File

@ -10,6 +10,7 @@ from werkzeug.exceptions import BadRequest, Forbidden, InternalServerError, NotF
import services
from controllers.common.controller_schemas import DefaultBlockConfigQuery, WorkflowListQuery, WorkflowUpdatePayload
from controllers.common.fields import SimpleResultResponse
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.console import console_ns
from controllers.console.app.error import (
@ -34,6 +35,7 @@ from core.app.apps.pipeline.pipeline_generator import PipelineGenerator
from core.app.entities.app_invoke_entities import InvokeFrom
from extensions.ext_database import db
from factories import variable_factory
from fields.base import ResponseModel
from fields.workflow_run_fields import (
WorkflowRunDetailResponse,
WorkflowRunNodeExecutionListResponse,
@ -115,6 +117,17 @@ class RagPipelineRecommendedPluginQuery(BaseModel):
type: str = "all"
class RagPipelineWorkflowSyncResponse(ResponseModel):
result: str
hash: str
updated_at: int
class RagPipelineWorkflowPublishResponse(ResponseModel):
result: str
created_at: int
register_schema_models(
console_ns,
DraftWorkflowSyncPayload,
@ -133,6 +146,9 @@ register_schema_models(
)
register_response_schema_models(
console_ns,
RagPipelineWorkflowPublishResponse,
RagPipelineWorkflowSyncResponse,
SimpleResultResponse,
WorkflowRunDetailResponse,
WorkflowRunNodeExecutionListResponse,
WorkflowRunNodeExecutionResponse,
@ -172,6 +188,7 @@ class DraftRagPipelineApi(Resource):
@account_initialization_required
@get_rag_pipeline
@edit_permission_required
@console_ns.response(200, "Success", console_ns.models[RagPipelineWorkflowSyncResponse.__name__])
def post(self, pipeline: Pipeline):
"""
Sync draft workflow
@ -462,6 +479,7 @@ class RagPipelineDraftNodeRunApi(Resource):
@console_ns.route("/rag/pipelines/<uuid:pipeline_id>/workflow-runs/tasks/<string:task_id>/stop")
class RagPipelineTaskStopApi(Resource):
@console_ns.response(200, "Task stopped successfully", console_ns.models[SimpleResultResponse.__name__])
@setup_required
@login_required
@edit_permission_required
@ -508,6 +526,7 @@ class PublishedRagPipelineApi(Resource):
return dump_response(WorkflowResponse, workflow)
@console_ns.response(200, "Success", console_ns.models[RagPipelineWorkflowPublishResponse.__name__])
@setup_required
@login_required
@account_initialization_required
@ -630,6 +649,7 @@ class PublishedAllRagPipelineApi(Resource):
@console_ns.route("/rag/pipelines/<uuid:pipeline_id>/workflows/<string:workflow_id>/restore")
class RagPipelineDraftWorkflowRestoreApi(Resource):
@console_ns.response(200, "Success", console_ns.models[RagPipelineWorkflowSyncResponse.__name__])
@setup_required
@login_required
@account_initialization_required
@ -699,6 +719,7 @@ class RagPipelineByIdApi(Resource):
return dump_response(WorkflowResponse, workflow)
@console_ns.response(204, "Workflow deleted successfully")
@setup_required
@login_required
@account_initialization_required

View File

@ -6,7 +6,8 @@ from pydantic import BaseModel, Field, field_validator
from werkzeug.exceptions import InternalServerError, NotFound
import services
from controllers.common.schema import register_schema_models
from controllers.common.fields import SimpleResultResponse
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.console.app.error import (
AppUnavailableError,
CompletionRequestError,
@ -72,6 +73,7 @@ class ChatMessagePayload(BaseModel):
register_schema_models(console_ns, CompletionMessageExplorePayload, ChatMessagePayload)
register_response_schema_models(console_ns, SimpleResultResponse)
# define completion api for user
@ -130,6 +132,7 @@ class CompletionApi(InstalledAppResource):
endpoint="installed_app_stop_completion",
)
class CompletionStopApi(InstalledAppResource):
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
def post(self, installed_app, task_id):
app_model = installed_app.app
if app_model.mode != AppMode.COMPLETION:
@ -205,6 +208,7 @@ class ChatApi(InstalledAppResource):
endpoint="installed_app_stop_chat_completion",
)
class ChatStopApi(InstalledAppResource):
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
def post(self, installed_app, task_id):
app_model = installed_app.app
app_mode = AppMode.value_of(app_model.mode)

View File

@ -6,7 +6,7 @@ from sqlalchemy.orm import sessionmaker
from werkzeug.exceptions import NotFound
from controllers.common.controller_schemas import ConversationRenamePayload
from controllers.common.schema import register_schema_models
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.console.explore.error import NotChatAppError
from controllers.console.explore.wraps import InstalledAppResource
from core.app.entities.app_invoke_entities import InvokeFrom
@ -34,6 +34,7 @@ class ConversationListQuery(BaseModel):
register_schema_models(console_ns, ConversationListQuery, ConversationRenamePayload)
register_response_schema_models(console_ns, ResultResponse)
@console_ns.route(
@ -89,6 +90,7 @@ class ConversationListApi(InstalledAppResource):
endpoint="installed_app_conversation",
)
class ConversationApi(InstalledAppResource):
@console_ns.response(204, "Conversation deleted successfully")
def delete(self, installed_app, c_id):
app_model = installed_app.app
app_mode = AppMode.value_of(app_model.mode)
@ -142,6 +144,7 @@ class ConversationRenameApi(InstalledAppResource):
endpoint="installed_app_conversation_pin",
)
class ConversationPinApi(InstalledAppResource):
@console_ns.response(200, "Success", console_ns.models[ResultResponse.__name__])
def patch(self, installed_app, c_id):
app_model = installed_app.app
app_mode = AppMode.value_of(app_model.mode)
@ -165,6 +168,7 @@ class ConversationPinApi(InstalledAppResource):
endpoint="installed_app_conversation_unpin",
)
class ConversationUnPinApi(InstalledAppResource):
@console_ns.response(200, "Success", console_ns.models[ResultResponse.__name__])
def patch(self, installed_app, c_id):
app_model = installed_app.app
app_mode = AppMode.value_of(app_model.mode)

View File

@ -8,7 +8,8 @@ from pydantic import BaseModel, Field, computed_field, field_validator
from sqlalchemy import and_, select
from werkzeug.exceptions import BadRequest, Forbidden, NotFound
from controllers.common.schema import register_schema_models
from controllers.common.fields import SimpleMessageResponse, SimpleResultMessageResponse
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.console import console_ns
from controllers.console.explore.wraps import InstalledAppResource
from controllers.console.wraps import account_initialization_required, cloud_edition_billing_resource_check
@ -122,6 +123,7 @@ register_schema_models(
InstalledAppResponse,
InstalledAppListResponse,
)
register_response_schema_models(console_ns, SimpleMessageResponse, SimpleResultMessageResponse)
@console_ns.route("/installed-apps")
@ -209,6 +211,7 @@ class InstalledAppsListApi(Resource):
@login_required
@account_initialization_required
@cloud_edition_billing_resource_check("apps")
@console_ns.response(200, "Success", console_ns.models[SimpleMessageResponse.__name__])
def post(self):
payload = InstalledAppCreatePayload.model_validate(console_ns.payload or {})
@ -258,6 +261,7 @@ class InstalledAppApi(InstalledAppResource):
use InstalledAppResource to apply default decorators and get installed_app
"""
@console_ns.response(204, "App uninstalled successfully")
def delete(self, installed_app):
_, current_tenant_id = current_account_with_tenant()
if installed_app.app_owner_tenant_id == current_tenant_id:
@ -268,6 +272,7 @@ class InstalledAppApi(InstalledAppResource):
return {"result": "success", "message": "App uninstalled successfully"}, 204
@console_ns.response(200, "Success", console_ns.models[SimpleResultMessageResponse.__name__])
def patch(self, installed_app):
payload = InstalledAppUpdatePayload.model_validate(console_ns.payload or {})

View File

@ -6,7 +6,7 @@ from pydantic import BaseModel, TypeAdapter
from werkzeug.exceptions import InternalServerError, NotFound
from controllers.common.controller_schemas import MessageFeedbackPayload, MessageListQuery
from controllers.common.schema import register_schema_models
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.console.app.error import (
AppMoreLikeThisDisabledError,
CompletionRequestError,
@ -49,6 +49,7 @@ class MoreLikeThisQuery(BaseModel):
register_schema_models(console_ns, MessageListQuery, MessageFeedbackPayload, MoreLikeThisQuery)
register_response_schema_models(console_ns, ResultResponse, SuggestedQuestionsResponse)
@console_ns.route(
@ -93,6 +94,7 @@ class MessageListApi(InstalledAppResource):
)
class MessageFeedbackApi(InstalledAppResource):
@console_ns.expect(console_ns.models[MessageFeedbackPayload.__name__])
@console_ns.response(200, "Feedback submitted successfully", console_ns.models[ResultResponse.__name__])
def post(self, installed_app, message_id):
current_user, _ = current_account_with_tenant()
app_model = installed_app.app
@ -166,6 +168,7 @@ class MessageMoreLikeThisApi(InstalledAppResource):
endpoint="installed_app_suggested_question",
)
class MessageSuggestedQuestionApi(InstalledAppResource):
@console_ns.response(200, "Success", console_ns.models[SuggestedQuestionsResponse.__name__])
def get(self, installed_app, message_id):
current_user, _ = current_account_with_tenant()
app_model = installed_app.app

View File

@ -3,7 +3,7 @@ from pydantic import TypeAdapter
from werkzeug.exceptions import NotFound
from controllers.common.controller_schemas import SavedMessageCreatePayload, SavedMessageListQuery
from controllers.common.schema import register_schema_models
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.console import console_ns
from controllers.console.explore.error import NotCompletionAppError
from controllers.console.explore.wraps import InstalledAppResource
@ -14,6 +14,7 @@ from services.errors.message import MessageNotExistsError
from services.saved_message_service import SavedMessageService
register_schema_models(console_ns, SavedMessageListQuery, SavedMessageCreatePayload)
register_response_schema_models(console_ns, ResultResponse)
@console_ns.route("/installed-apps/<uuid:installed_app_id>/saved-messages", endpoint="installed_app_saved_messages")
@ -42,6 +43,7 @@ class SavedMessageListApi(InstalledAppResource):
).model_dump(mode="json")
@console_ns.expect(console_ns.models[SavedMessageCreatePayload.__name__])
@console_ns.response(200, "Success", console_ns.models[ResultResponse.__name__])
def post(self, installed_app):
current_user, _ = current_account_with_tenant()
app_model = installed_app.app
@ -62,6 +64,7 @@ class SavedMessageListApi(InstalledAppResource):
"/installed-apps/<uuid:installed_app_id>/saved-messages/<uuid:message_id>", endpoint="installed_app_saved_message"
)
class SavedMessageApi(InstalledAppResource):
@console_ns.response(204, "Saved message deleted successfully")
def delete(self, installed_app, message_id):
current_user, _ = current_account_with_tenant()
app_model = installed_app.app

View File

@ -3,7 +3,8 @@ import logging
from werkzeug.exceptions import InternalServerError
from controllers.common.controller_schemas import WorkflowRunPayload
from controllers.common.schema import register_schema_model
from controllers.common.fields import SimpleResultResponse
from controllers.common.schema import register_response_schema_models, register_schema_model
from controllers.console.app.error import (
CompletionRequestError,
ProviderModelCurrentlyNotSupportError,
@ -34,6 +35,7 @@ from .. import console_ns
logger = logging.getLogger(__name__)
register_schema_model(console_ns, WorkflowRunPayload)
register_response_schema_models(console_ns, SimpleResultResponse)
@console_ns.route("/installed-apps/<uuid:installed_app_id>/workflows/run")
@ -78,6 +80,7 @@ class InstalledAppWorkflowRunApi(InstalledAppResource):
@console_ns.route("/installed-apps/<uuid:installed_app_id>/workflows/tasks/<string:task_id>/stop")
class InstalledAppWorkflowTaskStopApi(InstalledAppResource):
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
def post(self, installed_app: InstalledApp, task_id: str):
"""
Stop workflow task

View File

@ -1,12 +1,15 @@
from flask_restx import Resource, fields
from flask_restx import Resource
from werkzeug.exceptions import Unauthorized
from controllers.common.schema import register_response_schema_models
from libs.login import current_account_with_tenant, current_user, login_required
from services.feature_service import FeatureService
from services.feature_service import FeatureModel, FeatureService, SystemFeatureModel
from . import console_ns
from .wraps import account_initialization_required, cloud_utm_record, setup_required
register_response_schema_models(console_ns, FeatureModel, SystemFeatureModel)
@console_ns.route("/features")
class FeatureApi(Resource):
@ -15,7 +18,7 @@ class FeatureApi(Resource):
@console_ns.response(
200,
"Success",
console_ns.model("FeatureResponse", {"features": fields.Raw(description="Feature configuration object")}),
console_ns.models[FeatureModel.__name__],
)
@setup_required
@login_required
@ -35,9 +38,7 @@ class SystemFeatureApi(Resource):
@console_ns.response(
200,
"Success",
console_ns.model(
"SystemFeatureResponse", {"features": fields.Raw(description="System feature configuration object")}
),
console_ns.models[SystemFeatureModel.__name__],
)
def get(self):
"""Get system-wide feature configuration

View File

@ -15,7 +15,8 @@ from controllers.common.errors import (
TooManyFilesError,
UnsupportedFileTypeError,
)
from controllers.common.schema import register_schema_models
from controllers.common.fields import AllowedExtensionsResponse, TextContentResponse
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.console.wraps import (
account_initialization_required,
cloud_edition_billing_resource_check,
@ -29,6 +30,7 @@ from services.file_service import FileService
from . import console_ns
register_schema_models(console_ns, UploadConfig, FileResponse)
register_response_schema_models(console_ns, AllowedExtensionsResponse, TextContentResponse)
PREVIEW_WORDS_LIMIT = 3000
@ -103,6 +105,7 @@ class FilePreviewApi(Resource):
@setup_required
@login_required
@account_initialization_required
@console_ns.response(200, "Success", console_ns.models[TextContentResponse.__name__])
def get(self, file_id):
file_id = str(file_id)
_, tenant_id = current_account_with_tenant()
@ -115,5 +118,6 @@ class FileSupportTypeApi(Resource):
@setup_required
@login_required
@account_initialization_required
@console_ns.response(200, "Success", console_ns.models[AllowedExtensionsResponse.__name__])
def get(self):
return {"allowed_extensions": list(DOCUMENT_EXTENSIONS)}

View File

@ -5,6 +5,8 @@ from flask import request
from flask_restx import Resource
from pydantic import BaseModel, Field
from controllers.common.fields import SimpleResultResponse
from controllers.common.schema import register_response_schema_models
from controllers.console import console_ns
from controllers.console.wraps import account_initialization_required, only_edition_cloud, setup_required
from libs.login import current_account_with_tenant, login_required
@ -48,6 +50,9 @@ class DismissNotificationPayload(BaseModel):
notification_id: str = Field(...)
register_response_schema_models(console_ns, SimpleResultResponse)
@console_ns.route("/notification")
class NotificationApi(Resource):
@console_ns.doc("get_notification")
@ -110,6 +115,7 @@ class NotificationDismissApi(Resource):
@login_required
@account_initialization_required
@only_edition_cloud
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
def post(self):
current_user, _ = current_account_with_tenant()
payload = DismissNotificationPayload.model_validate(request.get_json())

View File

@ -11,6 +11,7 @@ from controllers.common.errors import (
RemoteFileUploadError,
UnsupportedFileTypeError,
)
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.console import console_ns
from core.helper import ssrf_proxy
from extensions.ext_database import db
@ -24,8 +25,13 @@ class RemoteFileUploadPayload(BaseModel):
url: str = Field(..., description="URL to fetch")
register_schema_models(console_ns, RemoteFileUploadPayload)
register_response_schema_models(console_ns, FileWithSignedUrl, RemoteFileInfo)
@console_ns.route("/remote-files/<path:url>")
class GetRemoteFileInfo(Resource):
@console_ns.response(200, "Success", console_ns.models[RemoteFileInfo.__name__])
@login_required
def get(self, url: str):
decoded_url = urllib.parse.unquote(url)
@ -41,6 +47,8 @@ class GetRemoteFileInfo(Resource):
@console_ns.route("/remote-files/upload")
class RemoteFileUpload(Resource):
@console_ns.expect(console_ns.models[RemoteFileUploadPayload.__name__])
@console_ns.response(201, "File uploaded successfully", console_ns.models[FileWithSignedUrl.__name__])
@login_required
def post(self):
payload = RemoteFileUploadPayload.model_validate(console_ns.payload)

View File

@ -5,7 +5,8 @@ from flask_restx import Resource
from pydantic import BaseModel, Field, field_validator
from werkzeug.exceptions import Forbidden
from controllers.common.schema import register_schema_models
from controllers.common.fields import SimpleResultResponse
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.console import console_ns
from controllers.console.wraps import account_initialization_required, edit_permission_required, setup_required
from fields.base import ResponseModel
@ -78,6 +79,7 @@ register_schema_models(
TagListQueryParam,
TagResponse,
)
register_response_schema_models(console_ns, SimpleResultResponse)
@console_ns.route("/tags")
@ -102,6 +104,7 @@ class TagListApi(Resource):
return serialized_tags, 200
@console_ns.expect(console_ns.models[TagBasePayload.__name__])
@console_ns.response(200, "Success", console_ns.models[TagResponse.__name__])
@setup_required
@login_required
@account_initialization_required
@ -124,6 +127,7 @@ class TagListApi(Resource):
@console_ns.route("/tags/<uuid:tag_id>")
class TagUpdateDeleteApi(Resource):
@console_ns.expect(console_ns.models[TagUpdateRequestPayload.__name__])
@console_ns.response(200, "Success", console_ns.models[TagResponse.__name__])
@setup_required
@login_required
@account_initialization_required
@ -149,6 +153,7 @@ class TagUpdateDeleteApi(Resource):
@login_required
@account_initialization_required
@edit_permission_required
@console_ns.response(204, "Tag deleted successfully")
def delete(self, tag_id):
tag_id = str(tag_id)
@ -203,6 +208,7 @@ class TagBindingCollectionApi(Resource):
@console_ns.doc("create_tag_binding")
@console_ns.expect(console_ns.models[TagBindingPayload.__name__])
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
@setup_required
@login_required
@account_initialization_required
@ -217,6 +223,7 @@ class TagBindingRemoveApi(Resource):
@console_ns.doc("remove_tag_bindings")
@console_ns.doc(description="Remove one or more tag bindings from a target.")
@console_ns.expect(console_ns.models[TagBindingRemovePayload.__name__])
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
@setup_required
@login_required
@account_initialization_required

View File

@ -12,7 +12,13 @@ from werkzeug.exceptions import NotFound
from configs import dify_config
from constants.languages import supported_language
from controllers.common.schema import register_schema_models
from controllers.common.fields import (
AvatarUrlResponse,
SimpleResultDataResponse,
SimpleResultResponse,
VerificationTokenResponse,
)
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.console import console_ns
from controllers.console.auth.error import (
EmailAlreadyInUseError,
@ -231,11 +237,19 @@ register_schema_models(
EducationStatusResponse,
EducationAutocompleteResponse,
)
register_response_schema_models(
console_ns,
AvatarUrlResponse,
SimpleResultDataResponse,
SimpleResultResponse,
VerificationTokenResponse,
)
@console_ns.route("/account/init")
class AccountInitApi(Resource):
@console_ns.expect(console_ns.models[AccountInitPayload.__name__])
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
@setup_required
@login_required
def post(self):
@ -312,6 +326,7 @@ class AccountAvatarApi(Resource):
@console_ns.expect(console_ns.models[AccountAvatarQuery.__name__])
@console_ns.doc("get_account_avatar")
@console_ns.doc(description="Get account avatar url")
@console_ns.response(200, "Success", console_ns.models[AvatarUrlResponse.__name__])
@setup_required
@login_required
@account_initialization_required
@ -473,6 +488,7 @@ class AccountDeleteVerifyApi(Resource):
@setup_required
@login_required
@account_initialization_required
@console_ns.response(200, "Success", console_ns.models[SimpleResultDataResponse.__name__])
def get(self):
account, _ = current_account_with_tenant()
@ -485,6 +501,7 @@ class AccountDeleteVerifyApi(Resource):
@console_ns.route("/account/delete")
class AccountDeleteApi(Resource):
@console_ns.expect(console_ns.models[AccountDeletePayload.__name__])
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
@setup_required
@login_required
@account_initialization_required
@ -505,6 +522,7 @@ class AccountDeleteApi(Resource):
@console_ns.route("/account/delete/feedback")
class AccountDeleteUpdateFeedbackApi(Resource):
@console_ns.expect(console_ns.models[AccountDeletionFeedbackPayload.__name__])
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
@setup_required
def post(self):
payload = console_ns.payload or {}
@ -584,6 +602,7 @@ class EducationAutoCompleteApi(Resource):
@console_ns.route("/account/change-email")
class ChangeEmailSendEmailApi(Resource):
@console_ns.expect(console_ns.models[ChangeEmailSendPayload.__name__])
@console_ns.response(200, "Success", console_ns.models[SimpleResultDataResponse.__name__])
@enable_change_email
@setup_required
@login_required
@ -649,6 +668,7 @@ class ChangeEmailSendEmailApi(Resource):
@console_ns.route("/account/change-email/validity")
class ChangeEmailCheckApi(Resource):
@console_ns.expect(console_ns.models[ChangeEmailValidityPayload.__name__])
@console_ns.response(200, "Success", console_ns.models[VerificationTokenResponse.__name__])
@enable_change_email
@setup_required
@login_required
@ -765,6 +785,7 @@ class ChangeEmailResetApi(Resource):
@console_ns.route("/account/change-email/check-email-unique")
class CheckEmailUnique(Resource):
@console_ns.expect(console_ns.models[CheckEmailUniquePayload.__name__])
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
@setup_required
def post(self):
payload = console_ns.payload or {}

View File

@ -6,7 +6,8 @@ from pydantic import BaseModel, Field, TypeAdapter
import services
from configs import dify_config
from controllers.common.schema import register_enum_models, register_schema_models
from controllers.common.fields import SimpleResultDataResponse, VerificationTokenResponse
from controllers.common.schema import register_enum_models, register_response_schema_models, register_schema_models
from controllers.console import console_ns
from controllers.console.auth.error import (
CannotTransferOwnerToSelfError,
@ -68,6 +69,7 @@ register_schema_models(
OwnerTransferCheckPayload,
OwnerTransferPayload,
)
register_response_schema_models(console_ns, SimpleResultDataResponse, VerificationTokenResponse)
def _is_role_enabled(role: TenantAccountRole | str, tenant_id: str) -> bool:
@ -262,6 +264,7 @@ class SendOwnerTransferEmailApi(Resource):
"""Send owner transfer email."""
@console_ns.expect(console_ns.models[OwnerTransferEmailPayload.__name__])
@console_ns.response(200, "Success", console_ns.models[SimpleResultDataResponse.__name__])
@setup_required
@login_required
@account_initialization_required
@ -299,6 +302,7 @@ class SendOwnerTransferEmailApi(Resource):
@console_ns.route("/workspaces/current/members/owner-transfer-check")
class OwnerTransferCheckApi(Resource):
@console_ns.expect(console_ns.models[OwnerTransferCheckPayload.__name__])
@console_ns.response(200, "Success", console_ns.models[VerificationTokenResponse.__name__])
@setup_required
@login_required
@account_initialization_required

View File

@ -5,7 +5,8 @@ from flask import request, send_file
from flask_restx import Resource
from pydantic import BaseModel, Field, field_validator
from controllers.common.schema import register_schema_models
from controllers.common.fields import SimpleResultResponse
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.console import console_ns
from controllers.console.wraps import account_initialization_required, is_admin_or_owner_required, setup_required
from graphon.model_runtime.entities.model_entities import ModelType
@ -85,6 +86,7 @@ register_schema_models(
ParserCredentialValidate,
ParserPreferredProviderType,
)
register_response_schema_models(console_ns, SimpleResultResponse)
@console_ns.route("/workspaces/current/model-providers")
@ -177,6 +179,7 @@ class ModelProviderCredentialApi(Resource):
return {"result": "success"}
@console_ns.expect(console_ns.models[ParserCredentialDelete.__name__])
@console_ns.response(204, "Credential deleted successfully")
@setup_required
@login_required
@is_admin_or_owner_required
@ -197,6 +200,7 @@ class ModelProviderCredentialApi(Resource):
@console_ns.route("/workspaces/current/model-providers/<path:provider>/credentials/switch")
class ModelProviderCredentialSwitchApi(Resource):
@console_ns.expect(console_ns.models[ParserCredentialSwitch.__name__])
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
@setup_required
@login_required
@is_admin_or_owner_required
@ -271,6 +275,7 @@ class ModelProviderIconApi(Resource):
@console_ns.route("/workspaces/current/model-providers/<path:provider>/preferred-provider-type")
class PreferredProviderTypeUpdateApi(Resource):
@console_ns.expect(console_ns.models[ParserPreferredProviderType.__name__])
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
@setup_required
@login_required
@is_admin_or_owner_required

View File

@ -5,7 +5,8 @@ from flask import request
from flask_restx import Resource
from pydantic import BaseModel, Field, field_validator
from controllers.common.schema import register_enum_models, register_schema_models
from controllers.common.fields import SimpleResultResponse
from controllers.common.schema import register_enum_models, register_response_schema_models, register_schema_models
from controllers.console import console_ns
from controllers.console.wraps import account_initialization_required, is_admin_or_owner_required, setup_required
from graphon.model_runtime.entities.model_entities import ModelType
@ -126,6 +127,7 @@ register_schema_models(
Inner,
ParserSwitch,
)
register_response_schema_models(console_ns, SimpleResultResponse)
register_enum_models(console_ns, ModelType)
@ -149,6 +151,7 @@ class DefaultModelApi(Resource):
return jsonable_encoder({"data": default_model_entity})
@console_ns.expect(console_ns.models[ParserPostDefault.__name__])
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
@setup_required
@login_required
@is_admin_or_owner_required
@ -241,6 +244,7 @@ class ModelProviderModelApi(Resource):
return {"result": "success"}, 200
@console_ns.expect(console_ns.models[ParserDeleteModels.__name__])
@console_ns.response(204, "Model deleted successfully")
@setup_required
@login_required
@is_admin_or_owner_required
@ -373,6 +377,7 @@ class ModelProviderModelCredentialApi(Resource):
return {"result": "success"}
@console_ns.expect(console_ns.models[ParserDeleteCredential.__name__])
@console_ns.response(204, "Credential deleted successfully")
@setup_required
@login_required
@is_admin_or_owner_required
@ -396,6 +401,7 @@ class ModelProviderModelCredentialApi(Resource):
@console_ns.route("/workspaces/current/model-providers/<path:provider>/models/credentials/switch")
class ModelProviderModelCredentialSwitchApi(Resource):
@console_ns.expect(console_ns.models[ParserSwitch.__name__])
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
@setup_required
@login_required
@is_admin_or_owner_required
@ -420,6 +426,7 @@ class ModelProviderModelCredentialSwitchApi(Resource):
)
class ModelProviderModelEnableApi(Resource):
@console_ns.expect(console_ns.models[ParserDeleteModels.__name__])
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
@setup_required
@login_required
@account_initialization_required
@ -441,6 +448,7 @@ class ModelProviderModelEnableApi(Resource):
)
class ModelProviderModelDisableApi(Resource):
@console_ns.expect(console_ns.models[ParserDeleteModels.__name__])
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
@setup_required
@login_required
@account_initialization_required

View File

@ -9,11 +9,13 @@ from werkzeug.datastructures import FileStorage
from werkzeug.exceptions import Forbidden
from configs import dify_config
from controllers.common.schema import register_enum_models, register_schema_models
from controllers.common.fields import SuccessResponse
from controllers.common.schema import register_enum_models, register_response_schema_models, register_schema_models
from controllers.console import console_ns
from controllers.console.workspace import plugin_permission_required
from controllers.console.wraps import account_initialization_required, is_admin_or_owner_required, setup_required
from core.plugin.impl.exc import PluginDaemonClientSideError
from fields.base import ResponseModel
from graphon.model_runtime.utils.encoders import jsonable_encoder
from libs.login import current_account_with_tenant, login_required
from models.account import TenantPluginAutoUpgradeStrategy, TenantPluginPermission
@ -137,6 +139,12 @@ class ParserReadme(BaseModel):
language: str = Field(default="en-US")
class PluginDebuggingKeyResponse(ResponseModel):
key: str
host: str
port: int
register_schema_models(
console_ns,
ParserList,
@ -160,6 +168,7 @@ register_schema_models(
ParserExcludePlugin,
ParserReadme,
)
register_response_schema_models(console_ns, PluginDebuggingKeyResponse, SuccessResponse)
register_enum_models(
console_ns,
@ -186,6 +195,7 @@ def _read_upload_content(file: FileStorage, max_size: int) -> bytes:
@console_ns.route("/workspaces/current/plugin/debugging-key")
class PluginDebuggingKeyApi(Resource):
@console_ns.response(200, "Success", console_ns.models[PluginDebuggingKeyResponse.__name__])
@setup_required
@login_required
@account_initialization_required
@ -491,6 +501,7 @@ class PluginFetchInstallTaskApi(Resource):
@console_ns.route("/workspaces/current/plugin/tasks/<task_id>/delete")
class PluginDeleteInstallTaskApi(Resource):
@console_ns.response(200, "Success", console_ns.models[SuccessResponse.__name__])
@setup_required
@login_required
@account_initialization_required
@ -506,6 +517,7 @@ class PluginDeleteInstallTaskApi(Resource):
@console_ns.route("/workspaces/current/plugin/tasks/delete_all")
class PluginDeleteAllInstallTaskItemsApi(Resource):
@console_ns.response(200, "Success", console_ns.models[SuccessResponse.__name__])
@setup_required
@login_required
@account_initialization_required
@ -521,6 +533,7 @@ class PluginDeleteAllInstallTaskItemsApi(Resource):
@console_ns.route("/workspaces/current/plugin/tasks/<task_id>/delete/<path:identifier>")
class PluginDeleteInstallTaskItemApi(Resource):
@console_ns.response(200, "Success", console_ns.models[SuccessResponse.__name__])
@setup_required
@login_required
@account_initialization_required
@ -586,6 +599,7 @@ class PluginUpgradeFromGithubApi(Resource):
@console_ns.route("/workspaces/current/plugin/uninstall")
class PluginUninstallApi(Resource):
@console_ns.expect(console_ns.models[ParserUninstall.__name__])
@console_ns.response(200, "Success", console_ns.models[SuccessResponse.__name__])
@setup_required
@login_required
@account_initialization_required
@ -604,6 +618,7 @@ class PluginUninstallApi(Resource):
@console_ns.route("/workspaces/current/plugin/permission/change")
class PluginChangePermissionApi(Resource):
@console_ns.expect(console_ns.models[ParserPermissionChange.__name__])
@console_ns.response(200, "Success", console_ns.models[SuccessResponse.__name__])
@setup_required
@login_required
@account_initialization_required

View File

@ -10,7 +10,8 @@ from sqlalchemy.orm import sessionmaker
from werkzeug.exceptions import Forbidden
from configs import dify_config
from controllers.common.schema import register_schema_models
from controllers.common.fields import SimpleResultResponse
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.console import console_ns
from controllers.console.wraps import (
account_initialization_required,
@ -252,6 +253,7 @@ register_schema_models(
MCPProviderDeletePayload,
MCPAuthPayload,
)
register_response_schema_models(console_ns, SimpleResultResponse)
@console_ns.route("/workspaces/current/tool-providers")
@ -1055,6 +1057,7 @@ class ToolProviderMCPApi(Resource):
return {"result": "success"}
@console_ns.expect(console_ns.models[MCPProviderDeletePayload.__name__])
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
@setup_required
@login_required
@account_initialization_required

View File

@ -8,7 +8,8 @@ from sqlalchemy.orm import sessionmaker
from werkzeug.exceptions import BadRequest, Forbidden
from configs import dify_config
from controllers.common.schema import register_schema_models
from controllers.common.fields import SimpleResultResponse
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.web.error import NotFoundError
from core.plugin.entities.plugin_daemon import CredentialType
from core.plugin.impl.oauth import OAuthHandler
@ -68,6 +69,7 @@ register_schema_models(
TriggerSubscriptionBuilderUpdatePayload,
TriggerOAuthClientPayload,
)
register_response_schema_models(console_ns, SimpleResultResponse)
@console_ns.route("/workspaces/current/trigger-provider/<path:provider>/icon")
@ -365,6 +367,7 @@ class TriggerSubscriptionUpdateApi(Resource):
"/workspaces/current/trigger-provider/<path:subscription_id>/subscriptions/delete",
)
class TriggerSubscriptionDeleteApi(Resource):
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
@setup_required
@login_required
@is_admin_or_owner_required

View File

@ -16,7 +16,7 @@ from controllers.common.errors import (
TooManyFilesError,
UnsupportedFileTypeError,
)
from controllers.common.schema import register_schema_models
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.console import console_ns
from controllers.console.admin import admin_required
from controllers.console.error import AccountNotLinkTenantError
@ -89,6 +89,12 @@ class TenantInfoResponse(ResponseModel):
return to_timestamp(value)
class WorkspacePermissionResponse(ResponseModel):
workspace_id: str
allow_member_invite: bool
allow_owner_transfer: bool
register_schema_models(
console_ns,
WorkspaceListQuery,
@ -97,6 +103,7 @@ register_schema_models(
WorkspaceInfoPayload,
TenantInfoResponse,
)
register_response_schema_models(console_ns, WorkspacePermissionResponse)
provider_fields = {
"provider_name": fields.String,
@ -357,6 +364,7 @@ class WorkspaceInfoApi(Resource):
class WorkspacePermissionApi(Resource):
"""Get workspace permissions for the current workspace."""
@console_ns.response(200, "Success", console_ns.models[WorkspacePermissionResponse.__name__])
@setup_required
@login_required
@account_initialization_required

View File

@ -3,14 +3,27 @@ from typing import Any, cast
from flask_restx import Resource
from controllers.common.fields import Parameters
from controllers.common.schema import register_response_schema_models
from controllers.service_api import service_api_ns
from controllers.service_api.app.error import AppUnavailableError
from controllers.service_api.wraps import validate_app_token
from core.app.app_config.common.parameters_mapping import get_parameters_from_feature_dict
from fields.base import ResponseModel
from models.model import App, AppMode
from services.app_service import AppService
class AppInfoResponse(ResponseModel):
name: str
description: str | None
tags: list[str]
mode: str
author_name: str | None
register_response_schema_models(service_api_ns, AppInfoResponse)
@service_api_ns.route("/parameters")
class AppParameterApi(Resource):
"""Resource for app variables."""
@ -81,6 +94,11 @@ class AppInfoApi(Resource):
404: "Application not found",
}
)
@service_api_ns.response(
200,
"Application info retrieved successfully",
service_api_ns.models[AppInfoResponse.__name__],
)
@validate_app_token
def get(self, app_model: App):
"""Get app information.

View File

@ -8,7 +8,8 @@ from pydantic import BaseModel, Field, field_validator
from werkzeug.exceptions import BadRequest, InternalServerError, NotFound
import services
from controllers.common.schema import register_schema_models
from controllers.common.fields import SimpleResultResponse
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.service_api import service_api_ns
from controllers.service_api.app.error import (
AppUnavailableError,
@ -75,6 +76,7 @@ class ChatRequestPayload(BaseModel):
register_schema_models(service_api_ns, CompletionRequestPayload, ChatRequestPayload)
register_response_schema_models(service_api_ns, SimpleResultResponse)
@service_api_ns.route("/completion-messages")
@ -155,6 +157,7 @@ class CompletionStopApi(Resource):
404: "Task not found",
}
)
@service_api_ns.response(200, "Task stopped successfully", service_api_ns.models[SimpleResultResponse.__name__])
@validate_app_token(fetch_user_arg=FetchUserArg(fetch_from=WhereisUserArg.JSON, required=True))
def post(self, app_model: App, end_user: EndUser, task_id: str):
"""Stop a running completion task."""
@ -254,6 +257,7 @@ class ChatStopApi(Resource):
404: "Task not found",
}
)
@service_api_ns.response(200, "Task stopped successfully", service_api_ns.models[SimpleResultResponse.__name__])
@validate_app_token(fetch_user_arg=FetchUserArg(fetch_from=WhereisUserArg.JSON, required=True))
def post(self, app_model: App, end_user: EndUser, task_id: str):
"""Stop a running chat message generation."""

View File

@ -7,7 +7,8 @@ from werkzeug.exceptions import BadRequest, InternalServerError, NotFound
import services
from controllers.common.controller_schemas import MessageFeedbackPayload, MessageListQuery
from controllers.common.schema import register_schema_models
from controllers.common.fields import SimpleResultStringListResponse
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.service_api import service_api_ns
from controllers.service_api.app.error import NotChatAppError
from controllers.service_api.wraps import FetchUserArg, WhereisUserArg, validate_app_token
@ -32,6 +33,7 @@ class FeedbackListQuery(BaseModel):
register_schema_models(service_api_ns, MessageListQuery, MessageFeedbackPayload, FeedbackListQuery)
register_response_schema_models(service_api_ns, ResultResponse, SimpleResultStringListResponse)
@service_api_ns.route("/messages")
@ -80,6 +82,7 @@ class MessageListApi(Resource):
@service_api_ns.route("/messages/<uuid:message_id>/feedbacks")
class MessageFeedbackApi(Resource):
@service_api_ns.expect(service_api_ns.models[MessageFeedbackPayload.__name__])
@service_api_ns.response(200, "Feedback submitted successfully", service_api_ns.models[ResultResponse.__name__])
@service_api_ns.doc("create_message_feedback")
@service_api_ns.doc(description="Submit feedback for a message")
@service_api_ns.doc(params={"message_id": "Message ID"})
@ -138,6 +141,11 @@ class AppGetFeedbacksApi(Resource):
@service_api_ns.route("/messages/<uuid:message_id>/suggested")
class MessageSuggestedApi(Resource):
@service_api_ns.response(
200,
"Suggested questions retrieved successfully",
service_api_ns.models[SimpleResultStringListResponse.__name__],
)
@service_api_ns.doc("get_suggested_questions")
@service_api_ns.doc(description="Get suggested follow-up questions for a message")
@service_api_ns.doc(params={"message_id": "Message ID"})

View File

@ -3,12 +3,15 @@ from sqlalchemy import select
from werkzeug.exceptions import Forbidden
from controllers.common.fields import Site as SiteResponse
from controllers.common.schema import register_response_schema_models
from controllers.service_api import service_api_ns
from controllers.service_api.wraps import validate_app_token
from extensions.ext_database import db
from models.account import TenantStatus
from models.model import App, Site
register_response_schema_models(service_api_ns, SiteResponse)
@service_api_ns.route("/site")
class AppSiteApi(Resource):
@ -23,6 +26,11 @@ class AppSiteApi(Resource):
403: "Forbidden - site not found or tenant archived",
}
)
@service_api_ns.response(
200,
"Site configuration retrieved successfully",
service_api_ns.models[SiteResponse.__name__],
)
@validate_app_token
def get(self, app_model: App):
"""Retrieve app site info.

View File

@ -11,7 +11,8 @@ from sqlalchemy.orm import sessionmaker
from werkzeug.exceptions import BadRequest, InternalServerError, NotFound
from controllers.common.controller_schemas import WorkflowRunPayload as WorkflowRunPayloadBase
from controllers.common.schema import register_schema_models
from controllers.common.fields import SimpleResultResponse
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.service_api import service_api_ns
from controllers.service_api.app.error import (
CompletionRequestError,
@ -67,6 +68,7 @@ class WorkflowLogQuery(BaseModel):
register_schema_models(service_api_ns, WorkflowRunPayload, WorkflowLogQuery)
register_response_schema_models(service_api_ns, SimpleResultResponse)
def _enum_value(value):
@ -376,6 +378,7 @@ class WorkflowTaskStopApi(Resource):
404: "Task not found",
}
)
@service_api_ns.response(200, "Task stopped successfully", service_api_ns.models[SimpleResultResponse.__name__])
@validate_app_token(fetch_user_arg=FetchUserArg(fetch_from=WhereisUserArg.JSON, required=True))
def post(self, app_model: App, end_user: EndUser, task_id: str):
"""Stop a running workflow task."""

View File

@ -6,7 +6,8 @@ from pydantic import BaseModel, Field, TypeAdapter, field_validator, model_valid
from werkzeug.exceptions import Forbidden, NotFound
import services
from controllers.common.schema import register_enum_models, register_schema_models
from controllers.common.fields import SimpleResultResponse
from controllers.common.schema import register_enum_models, register_response_schema_models, register_schema_models
from controllers.console.wraps import edit_permission_required
from controllers.service_api import service_api_ns
from controllers.service_api.dataset.error import DatasetInUseError, DatasetNameDuplicateError, InvalidActionError
@ -138,6 +139,7 @@ register_schema_models(
DatasetListQuery,
DataSetTag,
)
register_response_schema_models(service_api_ns, SimpleResultResponse)
@service_api_ns.route("/datasets")
@ -434,6 +436,11 @@ class DatasetApi(DatasetApiResource):
class DocumentStatusApi(DatasetApiResource):
"""Resource for batch document status operations."""
@service_api_ns.response(
200,
"Document status updated successfully",
service_api_ns.models[SimpleResultResponse.__name__],
)
@service_api_ns.doc("update_document_status")
@service_api_ns.doc(description="Batch update document status")
@service_api_ns.doc(

View File

@ -26,7 +26,8 @@ from controllers.common.errors import (
TooManyFilesError,
UnsupportedFileTypeError,
)
from controllers.common.schema import register_enum_models, register_schema_models
from controllers.common.fields import UrlResponse
from controllers.common.schema import register_enum_models, register_response_schema_models, register_schema_models
from controllers.service_api import service_api_ns
from controllers.service_api.app.error import ProviderNotInitializeError
from controllers.service_api.dataset.error import (
@ -120,6 +121,7 @@ register_schema_models(
PreProcessingRule,
Segmentation,
)
register_response_schema_models(service_api_ns, UrlResponse)
def _create_document_by_text(tenant_id: str, dataset_id: UUID) -> tuple[Mapping[str, object], int]:
@ -749,6 +751,11 @@ class DocumentDownloadApi(DatasetApiResource):
404: "Document or upload file not found",
}
)
@service_api_ns.response(
200,
"Download URL generated successfully",
service_api_ns.models[UrlResponse.__name__],
)
@cloud_edition_billing_rate_limit_check("knowledge", "dataset")
def get(self, tenant_id, dataset_id, document_id):
dataset = self.get_dataset(str(dataset_id), str(tenant_id))

View File

@ -5,7 +5,8 @@ from flask_restx import marshal
from werkzeug.exceptions import NotFound
from controllers.common.controller_schemas import MetadataUpdatePayload
from controllers.common.schema import register_schema_model, register_schema_models
from controllers.common.fields import SimpleResultResponse
from controllers.common.schema import register_response_schema_models, register_schema_model, register_schema_models
from controllers.service_api import service_api_ns
from controllers.service_api.wraps import DatasetApiResource, cloud_edition_billing_rate_limit_check
from fields.dataset_fields import dataset_metadata_fields
@ -26,6 +27,7 @@ register_schema_models(
DocumentMetadataOperation,
MetadataOperationData,
)
register_response_schema_models(service_api_ns, SimpleResultResponse)
@service_api_ns.route("/datasets/<uuid:dataset_id>/metadata")
@ -154,6 +156,11 @@ class DatasetMetadataBuiltInFieldActionServiceApi(DatasetApiResource):
404: "Dataset not found",
}
)
@service_api_ns.response(
200,
"Action completed successfully",
service_api_ns.models[SimpleResultResponse.__name__],
)
@cloud_edition_billing_rate_limit_check("knowledge", "dataset")
def post(self, tenant_id, dataset_id, action: Literal["enable", "disable"]):
"""Enable or disable built-in metadata field."""
@ -184,6 +191,11 @@ class DocumentMetadataEditServiceApi(DatasetApiResource):
404: "Dataset not found",
}
)
@service_api_ns.response(
200,
"Documents metadata updated successfully",
service_api_ns.models[SimpleResultResponse.__name__],
)
@cloud_edition_billing_rate_limit_check("knowledge", "dataset")
def post(self, tenant_id, dataset_id):
"""Update metadata for multiple documents."""

View File

@ -2,6 +2,7 @@ from uuid import UUID
from flask_restx import Resource
from controllers.common.schema import register_response_schema_models
from controllers.service_api import service_api_ns
from controllers.service_api.end_user.error import EndUserNotFoundError
from controllers.service_api.wraps import validate_app_token
@ -9,6 +10,8 @@ from fields.end_user_fields import EndUserDetail
from models.model import App
from services.end_user_service import EndUserService
register_response_schema_models(service_api_ns, EndUserDetail)
@service_api_ns.route("/end-users/<uuid:end_user_id>")
class EndUserApi(Resource):
@ -24,6 +27,7 @@ class EndUserApi(Resource):
404: "End user not found",
},
)
@service_api_ns.response(200, "End user retrieved successfully", service_api_ns.models[EndUserDetail.__name__])
@validate_app_token
def get(self, app_model: App, end_user_id: UUID):
"""Get end user detail.

View File

@ -1,11 +1,16 @@
from flask_restx import Resource
from configs import dify_config
from controllers.common.fields import IndexInfoResponse
from controllers.common.schema import register_response_schema_models
from controllers.service_api import service_api_ns
register_response_schema_models(service_api_ns, IndexInfoResponse)
@service_api_ns.route("/")
class IndexApi(Resource):
@service_api_ns.response(200, "Success", service_api_ns.models[IndexInfoResponse.__name__])
def get(self):
return {
"welcome": "Dify OpenAPI",

View File

@ -8,7 +8,7 @@ from werkzeug.exceptions import Unauthorized
from constants import HEADER_NAME_APP_CODE
from controllers.common import fields
from controllers.common.schema import register_schema_models
from controllers.common.schema import register_response_schema_models, register_schema_models
from core.app.app_config.common.parameters_mapping import get_parameters_from_feature_dict
from libs.passport import PassportService
from libs.token import extract_webapp_passport
@ -33,6 +33,11 @@ class AppAccessModeQuery(BaseModel):
register_schema_models(web_ns, AppAccessModeQuery)
register_response_schema_models(
web_ns,
fields.AccessModeResponse,
fields.BooleanResultResponse,
)
@web_ns.route("/parameters")
@ -109,6 +114,7 @@ class AppAccessMode(Resource):
500: "Internal Server Error",
}
)
@web_ns.response(200, "Success", web_ns.models[fields.AccessModeResponse.__name__])
def get(self):
raw_args = request.args.to_dict()
args = AppAccessModeQuery.model_validate(raw_args)
@ -142,6 +148,7 @@ class AppWebAuthPermission(Resource):
500: "Internal Server Error",
}
)
@web_ns.response(200, "Success", web_ns.models[fields.BooleanResultResponse.__name__])
def get(self):
user_id = "visitor"
app_code = request.headers.get(HEADER_NAME_APP_CODE)

View File

@ -5,7 +5,8 @@ from pydantic import BaseModel, Field, field_validator
from werkzeug.exceptions import InternalServerError, NotFound
import services
from controllers.common.schema import register_schema_models
from controllers.common.fields import SimpleResultResponse
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.web import web_ns
from controllers.web.error import (
AppUnavailableError,
@ -66,6 +67,7 @@ class ChatMessagePayload(BaseModel):
register_schema_models(web_ns, CompletionMessagePayload, ChatMessagePayload)
register_response_schema_models(web_ns, SimpleResultResponse)
# define completion api for user
@ -137,6 +139,7 @@ class CompletionStopApi(WebApiResource):
500: "Internal Server Error",
}
)
@web_ns.response(200, "Success", web_ns.models[SimpleResultResponse.__name__])
def post(self, app_model, end_user, task_id):
if app_model.mode != AppMode.COMPLETION:
raise NotCompletionAppError()
@ -222,6 +225,7 @@ class ChatStopApi(WebApiResource):
500: "Internal Server Error",
}
)
@web_ns.response(200, "Success", web_ns.models[SimpleResultResponse.__name__])
def post(self, app_model, end_user, task_id):
app_mode = AppMode.value_of(app_model.mode)
if app_mode not in {AppMode.CHAT, AppMode.AGENT_CHAT, AppMode.ADVANCED_CHAT}:

View File

@ -6,7 +6,7 @@ from sqlalchemy.orm import sessionmaker
from werkzeug.exceptions import NotFound
from controllers.common.controller_schemas import ConversationRenamePayload
from controllers.common.schema import register_schema_models
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.web import web_ns
from controllers.web.error import NotChatAppError
from controllers.web.wraps import WebApiResource
@ -39,6 +39,7 @@ class ConversationListQuery(BaseModel):
register_schema_models(web_ns, ConversationListQuery, ConversationRenamePayload)
register_response_schema_models(web_ns, ResultResponse)
@web_ns.route("/conversations")
@ -201,6 +202,7 @@ class ConversationPinApi(WebApiResource):
500: "Internal Server Error",
}
)
@web_ns.response(200, "Conversation pinned successfully", web_ns.models[ResultResponse.__name__])
def patch(self, app_model, end_user, c_id):
app_mode = AppMode.value_of(app_model.mode)
if app_mode not in {AppMode.CHAT, AppMode.AGENT_CHAT, AppMode.ADVANCED_CHAT}:
@ -231,6 +233,7 @@ class ConversationUnPinApi(WebApiResource):
500: "Internal Server Error",
}
)
@web_ns.response(200, "Conversation unpinned successfully", web_ns.models[ResultResponse.__name__])
def patch(self, app_model, end_user, c_id):
app_mode = AppMode.value_of(app_model.mode)
if app_mode not in {AppMode.CHAT, AppMode.AGENT_CHAT, AppMode.ADVANCED_CHAT}:

View File

@ -1,7 +1,10 @@
from flask_restx import Resource
from controllers.common.schema import register_response_schema_models
from controllers.web import web_ns
from services.feature_service import FeatureService
from services.feature_service import FeatureService, SystemFeatureModel
register_response_schema_models(web_ns, SystemFeatureModel)
@web_ns.route("/system-features")
@ -9,6 +12,11 @@ class SystemFeatureApi(Resource):
@web_ns.doc("get_system_features")
@web_ns.doc(description="Get system feature flags and configuration")
@web_ns.doc(responses={200: "System features retrieved successfully", 500: "Internal server error"})
@web_ns.response(
200,
"System features retrieved successfully",
web_ns.models[SystemFeatureModel.__name__],
)
def get(self):
"""Get system feature flags and configuration.

View File

@ -4,7 +4,8 @@ import secrets
from flask import request
from flask_restx import Resource
from controllers.common.schema import register_schema_models
from controllers.common.fields import SimpleResultDataResponse, SimpleResultResponse, VerificationTokenResponse
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.console.auth.error import (
AuthenticationFailedError,
EmailCodeError,
@ -28,6 +29,12 @@ from services.entities.auth_entities import (
)
register_schema_models(web_ns, ForgotPasswordSendPayload, ForgotPasswordCheckPayload, ForgotPasswordResetPayload)
register_response_schema_models(
web_ns,
SimpleResultDataResponse,
SimpleResultResponse,
VerificationTokenResponse,
)
@web_ns.route("/forgot-password")
@ -46,6 +53,7 @@ class ForgotPasswordSendEmailApi(Resource):
429: "Too many requests - rate limit exceeded",
}
)
@web_ns.response(200, "Password reset email sent successfully", web_ns.models[SimpleResultDataResponse.__name__])
def post(self):
payload = ForgotPasswordSendPayload.model_validate(web_ns.payload or {})
@ -81,6 +89,7 @@ class ForgotPasswordCheckApi(Resource):
@web_ns.doc(
responses={200: "Token is valid", 400: "Bad request - invalid token format", 401: "Invalid or expired token"}
)
@web_ns.response(200, "Token is valid", web_ns.models[VerificationTokenResponse.__name__])
def post(self):
payload = ForgotPasswordCheckPayload.model_validate(web_ns.payload or {})
@ -134,6 +143,7 @@ class ForgotPasswordResetApi(Resource):
404: "Account not found",
}
)
@web_ns.response(200, "Password reset successfully", web_ns.models[SimpleResultResponse.__name__])
def post(self):
payload = ForgotPasswordResetPayload.model_validate(web_ns.payload or {})

View File

@ -8,7 +8,13 @@ from werkzeug.exceptions import Unauthorized
import services
from configs import dify_config
from controllers.common.schema import register_schema_models
from controllers.common.fields import (
AccessTokenResultResponse,
LoginStatusResponse,
SimpleResultDataResponse,
SimpleResultResponse,
)
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.console.auth.error import (
AuthenticationFailedError,
EmailCodeError,
@ -57,6 +63,13 @@ class EmailCodeLoginVerifyPayload(BaseModel):
register_schema_models(web_ns, LoginPayload, EmailCodeLoginSendPayload, EmailCodeLoginVerifyPayload)
register_response_schema_models(
web_ns,
AccessTokenResultResponse,
LoginStatusResponse,
SimpleResultDataResponse,
SimpleResultResponse,
)
@web_ns.route("/login")
@ -77,6 +90,7 @@ class LoginApi(Resource):
404: "Account not found",
}
)
@web_ns.response(200, "Authentication successful", web_ns.models[AccessTokenResultResponse.__name__])
@decrypt_password_field
def post(self):
"""Authenticate user and login."""
@ -114,6 +128,7 @@ class LoginStatusApi(Resource):
401: "Login status",
}
)
@web_ns.response(200, "Login status", web_ns.models[LoginStatusResponse.__name__])
def get(self):
app_code = request.args.get("app_code")
user_id = request.args.get("user_id")
@ -160,6 +175,7 @@ class LogoutApi(Resource):
200: "Logout successful",
}
)
@web_ns.response(200, "Logout successful", web_ns.models[SimpleResultResponse.__name__])
def post(self):
response = make_response({"result": "success"})
# enterprise SSO sets same site to None in https deployment
@ -182,6 +198,7 @@ class EmailCodeLoginSendEmailApi(Resource):
404: "Account not found",
}
)
@web_ns.response(200, "Email code sent successfully", web_ns.models[SimpleResultDataResponse.__name__])
def post(self):
payload = EmailCodeLoginSendPayload.model_validate(web_ns.payload or {})
@ -213,6 +230,11 @@ class EmailCodeLoginApi(Resource):
404: "Account not found",
}
)
@web_ns.response(
200,
"Email code verified and login successful",
web_ns.models[AccessTokenResultResponse.__name__],
)
@decrypt_code_field
def post(self):
payload = EmailCodeLoginVerifyPayload.model_validate(web_ns.payload or {})

View File

@ -6,7 +6,7 @@ from pydantic import BaseModel, Field, TypeAdapter
from werkzeug.exceptions import InternalServerError, NotFound
from controllers.common.controller_schemas import MessageFeedbackPayload, MessageListQuery
from controllers.common.schema import register_schema_models
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.web import web_ns
from controllers.web.error import (
AppMoreLikeThisDisabledError,
@ -47,6 +47,7 @@ class MessageMoreLikeThisQuery(BaseModel):
register_schema_models(web_ns, MessageListQuery, MessageFeedbackPayload, MessageMoreLikeThisQuery)
register_response_schema_models(web_ns, ResultResponse, SuggestedQuestionsResponse)
@web_ns.route("/messages")
@ -130,6 +131,7 @@ class MessageFeedbackApi(WebApiResource):
500: "Internal Server Error",
}
)
@web_ns.response(200, "Feedback submitted successfully", web_ns.models[ResultResponse.__name__])
def post(self, app_model, end_user, message_id):
message_id = str(message_id)
@ -206,6 +208,7 @@ class MessageMoreLikeThisApi(WebApiResource):
@web_ns.route("/messages/<uuid:message_id>/suggested-questions")
class MessageSuggestedQuestionApi(WebApiResource):
@web_ns.response(200, "Success", web_ns.models[SuggestedQuestionsResponse.__name__])
@web_ns.doc("Get Suggested Questions")
@web_ns.doc(description="Get suggested follow-up questions after a message (chat apps only).")
@web_ns.doc(params={"message_id": {"description": "Message UUID", "type": "string", "required": True}})

View File

@ -16,7 +16,7 @@ from fields.file_fields import FileWithSignedUrl, RemoteFileInfo
from graphon.file import helpers as file_helpers
from services.file_service import FileService
from ..common.schema import register_schema_models
from ..common.schema import register_response_schema_models, register_schema_models
from . import web_ns
from .wraps import WebApiResource
@ -25,7 +25,8 @@ class RemoteFileUploadPayload(BaseModel):
url: HttpUrl = Field(description="Remote file URL")
register_schema_models(web_ns, RemoteFileUploadPayload, RemoteFileInfo, FileWithSignedUrl)
register_schema_models(web_ns, RemoteFileUploadPayload)
register_response_schema_models(web_ns, RemoteFileInfo, FileWithSignedUrl)
@web_ns.route("/remote-files/<path:url>")

View File

@ -3,7 +3,7 @@ from pydantic import TypeAdapter
from werkzeug.exceptions import NotFound
from controllers.common.controller_schemas import SavedMessageCreatePayload, SavedMessageListQuery
from controllers.common.schema import register_schema_models
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.web import web_ns
from controllers.web.error import NotCompletionAppError
from controllers.web.wraps import WebApiResource
@ -13,6 +13,7 @@ from services.errors.message import MessageNotExistsError
from services.saved_message_service import SavedMessageService
register_schema_models(web_ns, SavedMessageListQuery, SavedMessageCreatePayload)
register_response_schema_models(web_ns, ResultResponse)
@web_ns.route("/saved-messages")
@ -73,6 +74,7 @@ class SavedMessageListApi(WebApiResource):
500: "Internal Server Error",
}
)
@web_ns.response(200, "Message saved successfully", web_ns.models[ResultResponse.__name__])
def post(self, app_model, end_user):
if app_model.mode != "completion":
raise NotCompletionAppError()

View File

@ -3,7 +3,8 @@ import logging
from werkzeug.exceptions import InternalServerError
from controllers.common.controller_schemas import WorkflowRunPayload
from controllers.common.schema import register_schema_models
from controllers.common.fields import SimpleResultResponse
from controllers.common.schema import register_response_schema_models, register_schema_models
from controllers.web import web_ns
from controllers.web.error import (
CompletionRequestError,
@ -32,6 +33,7 @@ from services.errors.llm import InvokeRateLimitError
logger = logging.getLogger(__name__)
register_schema_models(web_ns, WorkflowRunPayload)
register_response_schema_models(web_ns, SimpleResultResponse)
@web_ns.route("/workflows/run")
@ -102,6 +104,7 @@ class WorkflowTaskStopApi(WebApiResource):
500: "Internal Server Error",
}
)
@web_ns.response(200, "Success", web_ns.models[SimpleResultResponse.__name__])
def post(self, app_model: App, end_user: EndUser, task_id: str):
"""
Stop workflow task

View File

@ -2,7 +2,7 @@ from __future__ import annotations
from datetime import datetime
from pydantic import field_validator
from pydantic import ConfigDict, field_validator
from fields.base import ResponseModel
from libs.helper import to_timestamp
@ -49,6 +49,8 @@ class RemoteFileInfo(ResponseModel):
class FileWithSignedUrl(ResponseModel):
model_config = ConfigDict(json_schema_serialization_defaults_required=True)
id: str
name: str
size: int

File diff suppressed because it is too large Load Diff

View File

@ -21,9 +21,9 @@ Service operations
#### GET
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Success |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Success | [IndexInfoResponse](#indexinforesponse) |
### /app/feedbacks
@ -264,11 +264,11 @@ Stop a running chat message generation
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Task stopped successfully |
| 401 | Unauthorized - invalid API token |
| 404 | Task not found |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Task stopped successfully | [SimpleResultResponse](#simpleresultresponse) |
| 401 | Unauthorized - invalid API token | |
| 404 | Task not found | |
### /completion-messages
@ -318,11 +318,11 @@ Stop a running completion task
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Task stopped successfully |
| 401 | Unauthorized - invalid API token |
| 404 | Task not found |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Task stopped successfully | [SimpleResultResponse](#simpleresultresponse) |
| 401 | Unauthorized - invalid API token | |
| 404 | Task not found | |
### /conversations
@ -875,11 +875,11 @@ Update metadata for multiple documents
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Documents metadata updated successfully |
| 401 | Unauthorized - invalid API token |
| 404 | Dataset not found |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Documents metadata updated successfully | [SimpleResultResponse](#simpleresultresponse) |
| 401 | Unauthorized - invalid API token | |
| 404 | Dataset not found | |
### /datasets/{dataset_id}/documents/status/{action}
@ -914,13 +914,13 @@ Raises:
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Document status updated successfully |
| 400 | Bad request - invalid action |
| 401 | Unauthorized - invalid API token |
| 403 | Forbidden - insufficient permissions |
| 404 | Dataset not found |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Document status updated successfully | [SimpleResultResponse](#simpleresultresponse) |
| 400 | Bad request - invalid action | |
| 401 | Unauthorized - invalid API token | |
| 403 | Forbidden - insufficient permissions | |
| 404 | Dataset not found | |
### /datasets/{dataset_id}/documents/{batch}/indexing-status
@ -1028,12 +1028,12 @@ Get a signed download URL for a document's original uploaded file
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Download URL generated successfully |
| 401 | Unauthorized - invalid API token |
| 403 | Forbidden - insufficient permissions |
| 404 | Document or upload file not found |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Download URL generated successfully | [UrlResponse](#urlresponse) |
| 401 | Unauthorized - invalid API token | |
| 403 | Forbidden - insufficient permissions | |
| 404 | Document or upload file not found | |
### /datasets/{dataset_id}/documents/{document_id}/segments
@ -1452,11 +1452,11 @@ Enable or disable built-in metadata field
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Action completed successfully |
| 401 | Unauthorized - invalid API token |
| 404 | Dataset not found |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Action completed successfully | [SimpleResultResponse](#simpleresultresponse) |
| 401 | Unauthorized - invalid API token | |
| 404 | Dataset not found | |
### /datasets/{dataset_id}/metadata/{metadata_id}
@ -1655,11 +1655,11 @@ cross-tenant/app access when an end-user ID is known.
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | End user retrieved successfully |
| 401 | Unauthorized - invalid API token |
| 404 | End user not found |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | End user retrieved successfully | [EndUserDetail](#enduserdetail) |
| 401 | Unauthorized - invalid API token | |
| 404 | End user not found | |
### /files/upload
@ -1770,11 +1770,11 @@ Returns basic information about the application including name, description, tag
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Application info retrieved successfully |
| 401 | Unauthorized - invalid API token |
| 404 | Application not found |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Application info retrieved successfully | [AppInfoResponse](#appinforesponse) |
| 401 | Unauthorized - invalid API token | |
| 404 | Application not found | |
### /messages
@ -1823,11 +1823,11 @@ Allows users to rate messages as like/dislike and provide optional feedback cont
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Feedback submitted successfully |
| 401 | Unauthorized - invalid API token |
| 404 | Message not found |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Feedback submitted successfully | [ResultResponse](#resultresponse) |
| 401 | Unauthorized - invalid API token | |
| 404 | Message not found | |
### /messages/{message_id}/suggested
@ -1849,13 +1849,13 @@ Returns AI-generated follow-up questions based on the message content.
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Suggested questions retrieved successfully |
| 400 | Suggested questions feature is disabled |
| 401 | Unauthorized - invalid API token |
| 404 | Message not found |
| 500 | Internal server error |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Suggested questions retrieved successfully | [SimpleResultStringListResponse](#simpleresultstringlistresponse) |
| 400 | Suggested questions feature is disabled | |
| 401 | Unauthorized - invalid API token | |
| 404 | Message not found | |
| 500 | Internal server error | |
### /meta
@ -1911,11 +1911,11 @@ Returns the site configuration for the application including theme, icons, and t
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Site configuration retrieved successfully |
| 401 | Unauthorized - invalid API token |
| 403 | Forbidden - site not found or tenant archived |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Site configuration retrieved successfully | [Site](#site) |
| 401 | Unauthorized - invalid API token | |
| 403 | Forbidden - site not found or tenant archived | |
### /text-to-audio
@ -2068,11 +2068,11 @@ Stop a running workflow task
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Task stopped successfully |
| 401 | Unauthorized - invalid API token |
| 404 | Task not found |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Task stopped successfully | [SimpleResultResponse](#simpleresultresponse) |
| 401 | Unauthorized - invalid API token | |
| 404 | Task not found | |
### /workflows/{workflow_id}/run
@ -2167,6 +2167,16 @@ Returns a list of available models for the specified model type.
| embedding_provider_name | string | Embedding provider name | Yes |
| score_threshold | number | Score threshold for annotation matching | Yes |
#### AppInfoResponse
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| author_name | string | | Yes |
| description | string | | Yes |
| mode | string | | Yes |
| name | string | | Yes |
| tags | [ string ] | | Yes |
#### ChatRequestPayload
| Name | Type | Description | Required |
@ -2386,6 +2396,27 @@ Request payload for bulk downloading documents as a zip archive.
| retrieval_model | [RetrievalModel](#retrievalmodel) | | No |
| text | string | | No |
#### EndUserDetail
Full EndUser record for API responses.
Note: The SQLAlchemy model defines an `is_anonymous` property for Flask-Login semantics
(always False). The database column is exposed as `_is_anonymous`, so this DTO maps
`is_anonymous` from `_is_anonymous` to return the stored value.
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| app_id | string | | No |
| created_at | dateTime | | Yes |
| external_user_id | string | | No |
| id | string | | Yes |
| is_anonymous | boolean | | Yes |
| name | string | | No |
| session_id | string | | Yes |
| tenant_id | string | | Yes |
| type | string | | Yes |
| updated_at | dateTime | | Yes |
#### FeedbackListQuery
| Name | Type | Description | Required |
@ -2434,6 +2465,14 @@ Request payload for bulk downloading documents as a zip archive.
| action | string | | Yes |
| inputs | object | | Yes |
#### IndexInfoResponse
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| api_version | string | | Yes |
| server_version | string | | Yes |
| welcome | string | | Yes |
#### JsonValue
| Name | Type | Description | Required |
@ -2525,6 +2564,12 @@ Metadata operation data
| reranking_model_name | string | | No |
| reranking_provider_name | string | | No |
#### ResultResponse
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| result | string | | Yes |
#### RetrievalMethod
| Name | Type | Description | Required |
@ -2610,6 +2655,38 @@ Metadata operation data
| session_id | string | | No |
| type | string | | Yes |
#### SimpleResultResponse
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| result | string | | Yes |
#### SimpleResultStringListResponse
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| data | [ string ] | | Yes |
| result | string | | Yes |
#### Site
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| chat_color_theme | string | | No |
| chat_color_theme_inverted | boolean | | Yes |
| copyright | string | | No |
| custom_disclaimer | string | | No |
| default_language | string | | Yes |
| description | string | | No |
| icon | string | | No |
| icon_background | string | | No |
| icon_type | string | | No |
| icon_url | string | | Yes |
| privacy_policy | string | | No |
| show_workflow_steps | boolean | | Yes |
| title | string | | Yes |
| use_icon_as_answer_icon | boolean | | Yes |
#### TagBindingPayload
| Name | Type | Description | Required |
@ -2655,6 +2732,12 @@ Accept the legacy single-tag Service API payload while exposing a normalized tag
| text | string | Text to convert to audio | No |
| voice | string | Voice to use for TTS | No |
#### UrlResponse
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| url | string | | Yes |
#### WeightKeywordSetting
| Name | Type | Description | Required |

View File

@ -78,14 +78,14 @@ Stop a running chat message task.
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Success |
| 400 | Bad Request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Task Not Found |
| 500 | Internal Server Error |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Success | [SimpleResultResponse](#simpleresultresponse) |
| 400 | Bad Request | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Task Not Found | |
| 500 | Internal Server Error | |
### /completion-messages
@ -126,14 +126,14 @@ Stop a running completion message task.
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Success |
| 400 | Bad Request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Task Not Found |
| 500 | Internal Server Error |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Success | [SimpleResultResponse](#simpleresultresponse) |
| 400 | Bad Request | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Task Not Found | |
| 500 | Internal Server Error | |
### /conversations
@ -227,14 +227,14 @@ Pin a specific conversation to keep it at the top of the list.
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Conversation pinned successfully |
| 400 | Bad Request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Conversation Not Found or Not a Chat App |
| 500 | Internal Server Error |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Conversation pinned successfully | [ResultResponse](#resultresponse) |
| 400 | Bad Request | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Conversation Not Found or Not a Chat App | |
| 500 | Internal Server Error | |
### /conversations/{c_id}/unpin
@ -251,14 +251,14 @@ Unpin a specific conversation to remove it from the top of the list.
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Conversation unpinned successfully |
| 400 | Bad Request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Conversation Not Found or Not a Chat App |
| 500 | Internal Server Error |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Conversation unpinned successfully | [ResultResponse](#resultresponse) |
| 400 | Bad Request | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Conversation Not Found or Not a Chat App | |
| 500 | Internal Server Error | |
### /email-code-login
@ -275,11 +275,11 @@ Send email verification code for login
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Email code sent successfully |
| 400 | Bad request - invalid email format |
| 404 | Account not found |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Email code sent successfully | [SimpleResultDataResponse](#simpleresultdataresponse) |
| 400 | Bad request - invalid email format | |
| 404 | Account not found | |
### /email-code-login/validity
@ -296,12 +296,12 @@ Verify email code and complete login
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Email code verified and login successful |
| 400 | Bad request - invalid code or token |
| 401 | Invalid token or expired code |
| 404 | Account not found |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Email code verified and login successful | [AccessTokenResultResponse](#accesstokenresultresponse) |
| 400 | Bad request - invalid code or token | |
| 401 | Invalid token or expired code | |
| 404 | Account not found | |
### /files/upload
@ -359,12 +359,12 @@ Send password reset email
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Password reset email sent successfully |
| 400 | Bad request - invalid email format |
| 404 | Account not found |
| 429 | Too many requests - rate limit exceeded |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Password reset email sent successfully | [SimpleResultDataResponse](#simpleresultdataresponse) |
| 400 | Bad request - invalid email format | |
| 404 | Account not found | |
| 429 | Too many requests - rate limit exceeded | |
### /forgot-password/resets
@ -381,12 +381,12 @@ Reset user password with verification token
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Password reset successfully |
| 400 | Bad request - invalid parameters or password mismatch |
| 401 | Invalid or expired token |
| 404 | Account not found |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Password reset successfully | [SimpleResultResponse](#simpleresultresponse) |
| 400 | Bad request - invalid parameters or password mismatch | |
| 401 | Invalid or expired token | |
| 404 | Account not found | |
### /forgot-password/validity
@ -403,11 +403,11 @@ Verify password reset token validity
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Token is valid |
| 400 | Bad request - invalid token format |
| 401 | Invalid or expired token |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Token is valid | [VerificationTokenResponse](#verificationtokenresponse) |
| 400 | Bad request - invalid token format | |
| 401 | Invalid or expired token | |
### /form/human_input/{form_token}
@ -480,13 +480,13 @@ Authenticate user for web application access
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Authentication successful |
| 400 | Bad request - invalid email or password format |
| 401 | Authentication failed - email or password mismatch |
| 403 | Account banned or login disabled |
| 404 | Account not found |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Authentication successful | [AccessTokenResultResponse](#accesstokenresultresponse) |
| 400 | Bad request - invalid email or password format | |
| 401 | Authentication failed - email or password mismatch | |
| 403 | Account banned or login disabled | |
| 404 | Account not found | |
### /login/status
@ -497,10 +497,10 @@ Check login status
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Login status |
| 401 | Login status |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Login status | [LoginStatusResponse](#loginstatusresponse) |
| 401 | Login status | |
### /logout
@ -511,9 +511,9 @@ Logout user from web application
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Logout successful |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Logout successful | [SimpleResultResponse](#simpleresultresponse) |
### /messages
@ -558,14 +558,14 @@ Submit feedback (like/dislike) for a specific message.
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Feedback submitted successfully |
| 400 | Bad Request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Message Not Found |
| 500 | Internal Server Error |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Feedback submitted successfully | [ResultResponse](#resultresponse) |
| 400 | Bad Request | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Message Not Found | |
| 500 | Internal Server Error | |
### /messages/{message_id}/more-like-this
@ -607,14 +607,14 @@ Get suggested follow-up questions after a message (chat apps only).
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Success |
| 400 | Bad Request - Not a chat app or feature disabled |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Message Not Found or Conversation Not Found |
| 500 | Internal Server Error |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Success | [SuggestedQuestionsResponse](#suggestedquestionsresponse) |
| 400 | Bad Request - Not a chat app or feature disabled | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Message Not Found or Conversation Not Found | |
| 500 | Internal Server Error | |
### /meta
@ -791,14 +791,14 @@ Save a specific message for later reference.
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Message saved successfully |
| 400 | Bad Request - Not a completion app |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Message Not Found |
| 500 | Internal Server Error |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Message saved successfully | [ResultResponse](#resultresponse) |
| 400 | Bad Request - Not a completion app | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Message Not Found | |
| 500 | Internal Server Error | |
### /saved-messages/{message_id}
@ -874,10 +874,10 @@ Only non-sensitive configuration data should be returned by this endpoint.
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | System features retrieved successfully |
| 500 | Internal server error |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | System features retrieved successfully | [SystemFeatureModel](#systemfeaturemodel) |
| 500 | Internal server error | |
### /text-to-audio
@ -922,11 +922,11 @@ Retrieve the access mode for a web application (public or restricted).
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Success |
| 400 | Bad Request |
| 500 | Internal Server Error |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Success | [AccessModeResponse](#accessmoderesponse) |
| 400 | Bad Request | |
| 500 | Internal Server Error | |
### /webapp/permission
@ -943,12 +943,12 @@ Check if user has permission to access a web application.
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Success |
| 400 | Bad Request |
| 401 | Unauthorized |
| 500 | Internal Server Error |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Success | [BooleanResultResponse](#booleanresultresponse) |
| 400 | Bad Request | |
| 401 | Unauthorized | |
| 500 | Internal Server Error | |
### /workflows/run
@ -997,14 +997,14 @@ Stop a running workflow task.
##### Responses
| Code | Description |
| ---- | ----------- |
| 200 | Success |
| 400 | Bad Request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Task Not Found |
| 500 | Internal Server Error |
| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Success | [SimpleResultResponse](#simpleresultresponse) |
| 400 | Bad Request | |
| 401 | Unauthorized | |
| 403 | Forbidden | |
| 404 | Task Not Found | |
| 500 | Internal Server Error | |
---
## default
@ -1038,6 +1038,25 @@ Returns Server-Sent Events stream.
---
### Models
#### AccessModeResponse
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| accessMode | string | | Yes |
#### AccessTokenData
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| access_token | string | | Yes |
#### AccessTokenResultResponse
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| data | [AccessTokenData](#accesstokendata) | | Yes |
| result | string | | Yes |
#### AppAccessModeQuery
| Name | Type | Description | Required |
@ -1045,6 +1064,22 @@ Returns Server-Sent Events stream.
| appCode | string | Application code | No |
| appId | string | Application ID | No |
#### BooleanResultResponse
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| result | boolean | | Yes |
#### BrandingModel
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| application_title | string | | Yes |
| enabled | boolean | | Yes |
| favicon | string | | Yes |
| login_page_logo | string | | Yes |
| workspace_logo | string | | Yes |
#### ChatMessagePayload
| Name | Type | Description | Required |
@ -1121,14 +1156,14 @@ Returns Server-Sent Events stream.
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| created_at | integer | | No |
| created_by | string | | No |
| extension | string | | No |
| created_at | integer | | Yes |
| created_by | string | | Yes |
| extension | string | | Yes |
| id | string | | Yes |
| mime_type | string | | No |
| mime_type | string | | Yes |
| name | string | | Yes |
| size | integer | | Yes |
| url | string | | No |
| url | string | | Yes |
#### ForgotPasswordCheckPayload
@ -1153,6 +1188,32 @@ Returns Server-Sent Events stream.
| email | string | | Yes |
| language | string | | No |
#### LicenseLimitationModel
- enabled: whether this limit is enforced
- size: current usage count
- limit: maximum allowed count; 0 means unlimited
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| enabled | boolean | Whether this limit is currently active | Yes |
| limit | integer | Maximum number of resources allowed; 0 means no limit | Yes |
| size | integer | Number of resources already consumed | Yes |
#### LicenseModel
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| expired_at | string | | Yes |
| status | [LicenseStatus](#licensestatus) | | Yes |
| workspaces | [LicenseLimitationModel](#licenselimitationmodel) | | Yes |
#### LicenseStatus
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| LicenseStatus | string | | |
#### LoginPayload
| Name | Type | Description | Required |
@ -1160,6 +1221,13 @@ Returns Server-Sent Events stream.
| email | string | | Yes |
| password | string | | Yes |
#### LoginStatusResponse
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| app_logged_in | boolean | | Yes |
| logged_in | boolean | | Yes |
#### MessageFeedbackPayload
| Name | Type | Description | Required |
@ -1181,6 +1249,25 @@ Returns Server-Sent Events stream.
| ---- | ---- | ----------- | -------- |
| response_mode | string | Response mode<br>*Enum:* `"blocking"`, `"streaming"` | Yes |
#### PluginInstallationPermissionModel
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| plugin_installation_scope | [PluginInstallationScope](#plugininstallationscope) | | Yes |
| restrict_to_marketplace_only | boolean | | Yes |
#### PluginInstallationScope
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| PluginInstallationScope | string | | |
#### PluginManagerModel
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| enabled | boolean | | Yes |
#### RemoteFileInfo
| Name | Type | Description | Required |
@ -1194,6 +1281,12 @@ Returns Server-Sent Events stream.
| ---- | ---- | ----------- | -------- |
| url | string (uri) | Remote file URL | Yes |
#### ResultResponse
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| result | string | | Yes |
#### SavedMessageCreatePayload
| Name | Type | Description | Required |
@ -1207,6 +1300,52 @@ Returns Server-Sent Events stream.
| last_id | string | | No |
| limit | integer | | No |
#### SimpleResultDataResponse
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| data | string | | Yes |
| result | string | | Yes |
#### SimpleResultResponse
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| result | string | | Yes |
#### SuggestedQuestionsResponse
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| data | [ string ] | | Yes |
#### SystemFeatureModel
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| app_dsl_version | string | | Yes |
| branding | [BrandingModel](#brandingmodel) | | Yes |
| enable_change_email | boolean | | Yes |
| enable_collaboration_mode | boolean | | Yes |
| enable_creators_platform | boolean | | Yes |
| enable_email_code_login | boolean | | Yes |
| enable_email_password_login | boolean | | Yes |
| enable_explore_banner | boolean | | Yes |
| enable_marketplace | boolean | | Yes |
| enable_social_oauth_login | boolean | | Yes |
| enable_trial_app | boolean | | Yes |
| is_allow_create_workspace | boolean | | Yes |
| is_allow_register | boolean | | Yes |
| is_email_setup | boolean | | Yes |
| license | [LicenseModel](#licensemodel) | | Yes |
| max_plugin_package_size | integer | | Yes |
| plugin_installation_permission | [PluginInstallationPermissionModel](#plugininstallationpermissionmodel) | | Yes |
| plugin_manager | [PluginManagerModel](#pluginmanagermodel) | | Yes |
| sso_enforced_for_signin | boolean | | Yes |
| sso_enforced_for_signin_protocol | string | | Yes |
| trial_models | [ string ] | | Yes |
| webapp_auth | [WebAppAuthModel](#webappauthmodel) | | Yes |
#### TextToAudioPayload
| Name | Type | Description | Required |
@ -1216,6 +1355,30 @@ Returns Server-Sent Events stream.
| text | string | Text to convert to audio | No |
| voice | string | Voice to use for TTS | No |
#### VerificationTokenResponse
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| email | string | | Yes |
| is_valid | boolean | | Yes |
| token | string | | Yes |
#### WebAppAuthModel
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| allow_email_code_login | boolean | | Yes |
| allow_email_password_login | boolean | | Yes |
| allow_sso | boolean | | Yes |
| enabled | boolean | | Yes |
| sso_config | [WebAppAuthSSOModel](#webappauthssomodel) | | Yes |
#### WebAppAuthSSOModel
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| protocol | string | | Yes |
#### WorkflowRunPayload
| Name | Type | Description | Required |

View File

@ -10,27 +10,31 @@ from services.billing_service import BillingService
from services.enterprise.enterprise_service import EnterpriseService
class SubscriptionModel(BaseModel):
class FeatureResponseModel(BaseModel):
model_config = ConfigDict(json_schema_serialization_defaults_required=True, protected_namespaces=())
class SubscriptionModel(FeatureResponseModel):
plan: str = CloudPlan.SANDBOX
interval: str = ""
class BillingModel(BaseModel):
class BillingModel(FeatureResponseModel):
enabled: bool = False
subscription: SubscriptionModel = SubscriptionModel()
class EducationModel(BaseModel):
class EducationModel(FeatureResponseModel):
enabled: bool = False
activated: bool = False
class LimitationModel(BaseModel):
class LimitationModel(FeatureResponseModel):
size: int = 0
limit: int = 0
class LicenseLimitationModel(BaseModel):
class LicenseLimitationModel(FeatureResponseModel):
"""
- enabled: whether this limit is enforced
- size: current usage count
@ -56,7 +60,7 @@ class LicenseLimitationModel(BaseModel):
return (self.limit - self.size) >= required
class Quota(BaseModel):
class Quota(FeatureResponseModel):
usage: int = 0
limit: int = 0
reset_date: int = -1
@ -71,13 +75,13 @@ class LicenseStatus(StrEnum):
LOST = "lost"
class LicenseModel(BaseModel):
class LicenseModel(FeatureResponseModel):
status: LicenseStatus = LicenseStatus.NONE
expired_at: str = ""
workspaces: LicenseLimitationModel = LicenseLimitationModel(enabled=False, size=0, limit=0)
class BrandingModel(BaseModel):
class BrandingModel(FeatureResponseModel):
enabled: bool = False
application_title: str = ""
login_page_logo: str = ""
@ -85,11 +89,11 @@ class BrandingModel(BaseModel):
favicon: str = ""
class WebAppAuthSSOModel(BaseModel):
class WebAppAuthSSOModel(FeatureResponseModel):
protocol: str = ""
class WebAppAuthModel(BaseModel):
class WebAppAuthModel(FeatureResponseModel):
enabled: bool = False
allow_sso: bool = False
sso_config: WebAppAuthSSOModel = WebAppAuthSSOModel()
@ -97,7 +101,7 @@ class WebAppAuthModel(BaseModel):
allow_email_password_login: bool = False
class KnowledgePipeline(BaseModel):
class KnowledgePipeline(FeatureResponseModel):
publish_enabled: bool = False
@ -108,7 +112,7 @@ class PluginInstallationScope(StrEnum):
ALL = "all"
class PluginInstallationPermissionModel(BaseModel):
class PluginInstallationPermissionModel(FeatureResponseModel):
# Plugin installation scope possible values:
# none: prohibit all plugin installations
# official_only: allow only Dify official plugins
@ -121,7 +125,7 @@ class PluginInstallationPermissionModel(BaseModel):
restrict_to_marketplace_only: bool = False
class FeatureModel(BaseModel):
class FeatureModel(FeatureResponseModel):
billing: BillingModel = BillingModel()
education: EducationModel = EducationModel()
members: LimitationModel = LimitationModel(size=0, limit=1)
@ -141,23 +145,21 @@ class FeatureModel(BaseModel):
api_rate_limit: Quota = Quota(usage=0, limit=5000, reset_date=0)
# Controls whether email delivery is allowed for HumanInput nodes.
human_input_email_delivery_enabled: bool = False
# pydantic configs
model_config = ConfigDict(protected_namespaces=())
knowledge_pipeline: KnowledgePipeline = KnowledgePipeline()
next_credit_reset_date: int = 0
class KnowledgeRateLimitModel(BaseModel):
class KnowledgeRateLimitModel(FeatureResponseModel):
enabled: bool = False
limit: int = 10
subscription_plan: str = ""
class PluginManagerModel(BaseModel):
class PluginManagerModel(FeatureResponseModel):
enabled: bool = False
class SystemFeatureModel(BaseModel):
class SystemFeatureModel(FeatureResponseModel):
app_dsl_version: str = ""
sso_enforced_for_signin: bool = False
sso_enforced_for_signin_protocol: str = ""

View File

@ -8,14 +8,14 @@
Snapshot generated from `packages/contracts/generated/api/readiness.json` after running `pnpm -C packages/contracts gen-api-contract-from-openapi`.
Are we OpenAPI ready? **No.** Current generated API contracts are **16.7% ready**.
Are we OpenAPI ready? **No.** Current generated API contracts are **36.3% ready**.
| Surface | Ready | Not ready | Total | Ready % |
| --------- | ------: | --------: | ------: | --------: |
| console | 96 | 474 | 570 | 16.8% |
| service | 16 | 72 | 88 | 18.2% |
| web | 5 | 36 | 41 | 12.2% |
| **total** | **117** | **582** | **699** | **16.7%** |
| console | 205 | 365 | 570 | 36.0% |
| service | 28 | 60 | 88 | 31.8% |
| web | 21 | 20 | 41 | 51.2% |
| **total** | **254** | **445** | **699** | **36.3%** |
Readiness here means the generated contract operation is not marked with:
@ -23,7 +23,7 @@ Readiness here means the generated contract operation is not marked with:
Operations marked with that warning should not be migrated to blindly. Prefer fixing backend OpenAPI annotations first so the generated contract has accurate request and response types, then migrate callers endpoint by endpoint.
The current heuristic marks an operation as not ready when a request body or success response that should have a body contains a loose object type, or when an operation has no documented 2xx response. 204, 205, and 304 responses are treated as bodyless when the request type is otherwise accurate.
The current heuristic marks an operation as not ready when a request body or success response that should have a body contains a loose object type, when a mutating controller reads a JSON body that is not documented as a request body, or when an operation has no documented 2xx response. 204, 205, and 304 responses are treated as bodyless when the request type is otherwise accurate.
<!-- api-openapi-readiness:end -->

View File

@ -45,16 +45,10 @@ import {
/**
* Get account avatar url
*
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const get = oc
.route({
deprecated: true,
description:
'Get account avatar url\n\nGenerated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
description: 'Get account avatar url',
inputStructure: 'detailed',
method: 'GET',
operationId: 'getAccountAvatar',
@ -80,16 +74,8 @@ export const avatar = {
post,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post2 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postAccountChangeEmailCheckEmailUnique',
@ -118,16 +104,8 @@ export const reset = {
post: post3,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post4 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postAccountChangeEmailValidity',
@ -141,16 +119,8 @@ export const validity = {
post: post4,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post5 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postAccountChangeEmail',
@ -167,16 +137,8 @@ export const changeEmail = {
validity,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post6 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postAccountDeleteFeedback',
@ -190,16 +152,8 @@ export const feedback = {
post: post6,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const get2 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'GET',
operationId: 'getAccountDeleteVerify',
@ -212,16 +166,8 @@ export const verify = {
get: get2,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post7 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postAccountDelete',
@ -302,16 +248,8 @@ export const education = {
verify: verify2,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post9 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postAccountInit',

View File

@ -4,6 +4,10 @@ export type ClientOptions = {
baseUrl: `${string}://${string}/console/api` | (string & {})
}
export type AvatarUrlResponse = {
avatar_url: string
}
export type AccountAvatarPayload = {
avatar: string
}
@ -29,10 +33,19 @@ export type ChangeEmailSendPayload = {
token?: string | null
}
export type SimpleResultDataResponse = {
data: string
result: string
}
export type CheckEmailUniquePayload = {
email: string
}
export type SimpleResultResponse = {
result: string
}
export type ChangeEmailResetPayload = {
new_email: string
token: string
@ -44,6 +57,12 @@ export type ChangeEmailValidityPayload = {
token: string
}
export type VerificationTokenResponse = {
email: string
is_valid: boolean
token: string
}
export type AccountDeletePayload = {
code: string
token: string
@ -126,9 +145,7 @@ export type GetAccountAvatarData = {
}
export type GetAccountAvatarResponses = {
200: {
[key: string]: unknown
}
200: AvatarUrlResponse
}
export type GetAccountAvatarResponse = GetAccountAvatarResponses[keyof GetAccountAvatarResponses]
@ -154,9 +171,7 @@ export type PostAccountChangeEmailData = {
}
export type PostAccountChangeEmailResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultDataResponse
}
export type PostAccountChangeEmailResponse
@ -170,9 +185,7 @@ export type PostAccountChangeEmailCheckEmailUniqueData = {
}
export type PostAccountChangeEmailCheckEmailUniqueResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type PostAccountChangeEmailCheckEmailUniqueResponse
@ -200,9 +213,7 @@ export type PostAccountChangeEmailValidityData = {
}
export type PostAccountChangeEmailValidityResponses = {
200: {
[key: string]: unknown
}
200: VerificationTokenResponse
}
export type PostAccountChangeEmailValidityResponse
@ -216,9 +227,7 @@ export type PostAccountDeleteData = {
}
export type PostAccountDeleteResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type PostAccountDeleteResponse = PostAccountDeleteResponses[keyof PostAccountDeleteResponses]
@ -231,9 +240,7 @@ export type PostAccountDeleteFeedbackData = {
}
export type PostAccountDeleteFeedbackResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type PostAccountDeleteFeedbackResponse
@ -247,9 +254,7 @@ export type GetAccountDeleteVerifyData = {
}
export type GetAccountDeleteVerifyResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultDataResponse
}
export type GetAccountDeleteVerifyResponse
@ -325,9 +330,7 @@ export type PostAccountInitData = {
}
export type PostAccountInitResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type PostAccountInitResponse = PostAccountInitResponses[keyof PostAccountInitResponses]

View File

@ -2,6 +2,13 @@
import * as z from 'zod'
/**
* AvatarUrlResponse
*/
export const zAvatarUrlResponse = z.object({
avatar_url: z.string(),
})
/**
* AccountAvatarPayload
*/
@ -36,6 +43,14 @@ export const zChangeEmailSendPayload = z.object({
token: z.string().nullish(),
})
/**
* SimpleResultDataResponse
*/
export const zSimpleResultDataResponse = z.object({
data: z.string(),
result: z.string(),
})
/**
* CheckEmailUniquePayload
*/
@ -43,6 +58,13 @@ export const zCheckEmailUniquePayload = z.object({
email: z.string(),
})
/**
* SimpleResultResponse
*/
export const zSimpleResultResponse = z.object({
result: z.string(),
})
/**
* ChangeEmailResetPayload
*/
@ -60,6 +82,15 @@ export const zChangeEmailValidityPayload = z.object({
token: z.string(),
})
/**
* VerificationTokenResponse
*/
export const zVerificationTokenResponse = z.object({
email: z.string(),
is_valid: z.boolean(),
token: z.string(),
})
/**
* AccountDeletePayload
*/
@ -181,7 +212,7 @@ export const zGetAccountAvatarQuery = z.object({
/**
* Success
*/
export const zGetAccountAvatarResponse = z.record(z.string(), z.unknown())
export const zGetAccountAvatarResponse = zAvatarUrlResponse
export const zPostAccountAvatarBody = zAccountAvatarPayload
@ -195,14 +226,14 @@ export const zPostAccountChangeEmailBody = zChangeEmailSendPayload
/**
* Success
*/
export const zPostAccountChangeEmailResponse = z.record(z.string(), z.unknown())
export const zPostAccountChangeEmailResponse = zSimpleResultDataResponse
export const zPostAccountChangeEmailCheckEmailUniqueBody = zCheckEmailUniquePayload
/**
* Success
*/
export const zPostAccountChangeEmailCheckEmailUniqueResponse = z.record(z.string(), z.unknown())
export const zPostAccountChangeEmailCheckEmailUniqueResponse = zSimpleResultResponse
export const zPostAccountChangeEmailResetBody = zChangeEmailResetPayload
@ -216,26 +247,26 @@ export const zPostAccountChangeEmailValidityBody = zChangeEmailValidityPayload
/**
* Success
*/
export const zPostAccountChangeEmailValidityResponse = z.record(z.string(), z.unknown())
export const zPostAccountChangeEmailValidityResponse = zVerificationTokenResponse
export const zPostAccountDeleteBody = zAccountDeletePayload
/**
* Success
*/
export const zPostAccountDeleteResponse = z.record(z.string(), z.unknown())
export const zPostAccountDeleteResponse = zSimpleResultResponse
export const zPostAccountDeleteFeedbackBody = zAccountDeletionFeedbackPayload
/**
* Success
*/
export const zPostAccountDeleteFeedbackResponse = z.record(z.string(), z.unknown())
export const zPostAccountDeleteFeedbackResponse = zSimpleResultResponse
/**
* Success
*/
export const zGetAccountDeleteVerifyResponse = z.record(z.string(), z.unknown())
export const zGetAccountDeleteVerifyResponse = zSimpleResultDataResponse
/**
* Success
@ -270,7 +301,7 @@ export const zPostAccountInitBody = zAccountInitPayload
/**
* Success
*/
export const zPostAccountInitResponse = z.record(z.string(), z.unknown())
export const zPostAccountInitResponse = zSimpleResultResponse
/**
* Success

View File

@ -12,16 +12,10 @@ import {
/**
* Check if activation token is valid
*
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const get = oc
.route({
deprecated: true,
description:
'Check if activation token is valid\n\nGenerated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
description: 'Check if activation token is valid',
inputStructure: 'detailed',
method: 'GET',
operationId: 'getActivateCheck',

View File

@ -18,12 +18,16 @@ export type ActivationResponse = {
}
export type ActivationCheckResponse = {
data?: {
[key: string]: unknown
} | null
data?: ActivationCheckData
is_valid: boolean
}
export type ActivationCheckData = {
email: string | null
workspace_id: string | null
workspace_name: string | null
}
export type PostActivateData = {
body: ActivatePayload
path?: never

View File

@ -21,11 +21,20 @@ export const zActivationResponse = z.object({
result: z.string(),
})
/**
* ActivationCheckData
*/
export const zActivationCheckData = z.object({
email: z.string().nullable(),
workspace_id: z.string().nullable(),
workspace_name: z.string().nullable(),
})
/**
* ActivationCheckResponse
*/
export const zActivationCheckResponse = z.object({
data: z.record(z.string(), z.unknown()).nullish(),
data: zActivationCheckData.optional(),
is_valid: z.boolean(),
})

View File

@ -34,20 +34,13 @@ export const binding = {
post,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const delete_ = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'DELETE',
operationId: 'deleteApiKeyAuthDataSourceByBindingId',
path: '/api-key-auth/data-source/{binding_id}',
successStatus: 204,
tags: ['console'],
})
.input(z.object({ params: zDeleteApiKeyAuthDataSourceByBindingIdPath }))
@ -57,16 +50,8 @@ export const byBindingId = {
delete: delete_,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const get = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'GET',
operationId: 'getApiKeyAuthDataSource',

View File

@ -4,6 +4,10 @@ export type ClientOptions = {
baseUrl: `${string}://${string}/console/api` | (string & {})
}
export type ApiKeyAuthDataSourceListResponse = {
sources: Array<ApiKeyAuthDataSourceItem>
}
export type ApiKeyAuthBindingPayload = {
category: string
credentials: {
@ -12,6 +16,15 @@ export type ApiKeyAuthBindingPayload = {
provider: string
}
export type ApiKeyAuthDataSourceItem = {
category: string
created_at: number
disabled: boolean
id: string
provider: string
updated_at: number
}
export type GetApiKeyAuthDataSourceData = {
body?: never
path?: never
@ -20,9 +33,7 @@ export type GetApiKeyAuthDataSourceData = {
}
export type GetApiKeyAuthDataSourceResponses = {
200: {
[key: string]: unknown
}
200: ApiKeyAuthDataSourceListResponse
}
export type GetApiKeyAuthDataSourceResponse
@ -54,8 +65,8 @@ export type DeleteApiKeyAuthDataSourceByBindingIdData = {
}
export type DeleteApiKeyAuthDataSourceByBindingIdResponses = {
200: {
[key: string]: unknown
204: {
[key: string]: never
}
}

View File

@ -11,10 +11,29 @@ export const zApiKeyAuthBindingPayload = z.object({
provider: z.string(),
})
/**
* ApiKeyAuthDataSourceItem
*/
export const zApiKeyAuthDataSourceItem = z.object({
category: z.string(),
created_at: z.int(),
disabled: z.boolean(),
id: z.string(),
provider: z.string(),
updated_at: z.int(),
})
/**
* ApiKeyAuthDataSourceListResponse
*/
export const zApiKeyAuthDataSourceListResponse = z.object({
sources: z.array(zApiKeyAuthDataSourceItem),
})
/**
* Success
*/
export const zGetApiKeyAuthDataSourceResponse = z.record(z.string(), z.unknown())
export const zGetApiKeyAuthDataSourceResponse = zApiKeyAuthDataSourceListResponse
export const zPostApiKeyAuthDataSourceBindingBody = zApiKeyAuthBindingPayload
@ -28,6 +47,6 @@ export const zDeleteApiKeyAuthDataSourceByBindingIdPath = z.object({
})
/**
* Success
* Binding deleted successfully
*/
export const zDeleteApiKeyAuthDataSourceByBindingIdResponse = z.record(z.string(), z.unknown())
export const zDeleteApiKeyAuthDataSourceByBindingIdResponse = z.record(z.string(), z.never())

View File

@ -1262,16 +1262,10 @@ export const byMessageId = {
/**
* Stop a running chat message generation
*
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post16 = oc
.route({
deprecated: true,
description:
'Stop a running chat message generation\n\nGenerated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
description: 'Stop a running chat message generation',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postAppsByAppIdChatMessagesByTaskIdStop',
@ -1387,16 +1381,10 @@ export const completionConversations = {
/**
* Stop a running completion message generation
*
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post17 = oc
.route({
deprecated: true,
description:
'Stop a running completion message generation\n\nGenerated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
description: 'Stop a running completion message generation',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postAppsByAppIdCompletionMessagesByTaskIdStop',
@ -1475,16 +1463,11 @@ export const conversationVariables = {
* Convert application to workflow mode
* Convert expert mode of chatbot app to workflow mode
* Convert Completion App to Workflow App
*
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post19 = oc
.route({
deprecated: true,
description:
'Convert application to workflow mode\nConvert expert mode of chatbot app to workflow mode\nConvert Completion App to Workflow App\n\nGenerated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
'Convert application to workflow mode\nConvert expert mode of chatbot app to workflow mode\nConvert Completion App to Workflow App',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postAppsByAppIdConvertToWorkflow',
@ -1589,16 +1572,10 @@ export const export3 = {
/**
* Create or update message feedback (like/dislike)
*
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post21 = oc
.route({
deprecated: true,
description:
'Create or update message feedback (like/dislike)\n\nGenerated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
description: 'Create or update message feedback (like/dislike)',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postAppsByAppIdFeedbacks',
@ -1724,16 +1701,9 @@ export const name = {
/**
* Publish app to Creators Platform
*
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post25 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postAppsByAppIdPublishToCreatorsPlatform',
@ -2217,16 +2187,10 @@ export const get32 = oc
/**
* Update app tracing configuration
*
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post31 = oc
.route({
deprecated: true,
description:
'Update app tracing configuration\n\nGenerated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
description: 'Update app tracing configuration',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postAppsByAppIdTrace',
@ -2476,16 +2440,10 @@ export const count3 = {
* Stop workflow task
*
* Stop running workflow task
*
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post34 = oc
.route({
deprecated: true,
description:
'Stop running workflow task\n\nGenerated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
description: 'Stop running workflow task',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postAppsByAppIdWorkflowRunsTasksByTaskIdStop',

View File

@ -262,6 +262,10 @@ export type SuggestedQuestionsResponse = {
data: Array<string>
}
export type SimpleResultResponse = {
result: string
}
export type ConversationPagination = {
has_next: boolean
items: Array<Conversation>
@ -309,6 +313,10 @@ export type ConvertToWorkflowPayload = {
name?: string | null
}
export type NewAppResponse = {
new_app_id: string
}
export type CopyAppPayload = {
description?: string | null
icon?: string | null
@ -397,6 +405,10 @@ export type AppNamePayload = {
name: string
}
export type RedirectUrlResponse = {
redirect_url: string
}
export type AppMcpServerResponse = {
created_at?: number | null
description: string
@ -2420,9 +2432,7 @@ export type PostAppsByAppIdChatMessagesByTaskIdStopData = {
}
export type PostAppsByAppIdChatMessagesByTaskIdStopResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type PostAppsByAppIdChatMessagesByTaskIdStopResponse
@ -2561,9 +2571,7 @@ export type PostAppsByAppIdCompletionMessagesByTaskIdStopData = {
}
export type PostAppsByAppIdCompletionMessagesByTaskIdStopResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type PostAppsByAppIdCompletionMessagesByTaskIdStopResponse
@ -2609,9 +2617,7 @@ export type PostAppsByAppIdConvertToWorkflowError
= PostAppsByAppIdConvertToWorkflowErrors[keyof PostAppsByAppIdConvertToWorkflowErrors]
export type PostAppsByAppIdConvertToWorkflowResponses = {
200: {
[key: string]: unknown
}
200: NewAppResponse
}
export type PostAppsByAppIdConvertToWorkflowResponse
@ -2690,9 +2696,7 @@ export type PostAppsByAppIdFeedbacksError
= PostAppsByAppIdFeedbacksErrors[keyof PostAppsByAppIdFeedbacksErrors]
export type PostAppsByAppIdFeedbacksResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type PostAppsByAppIdFeedbacksResponse
@ -2843,9 +2847,7 @@ export type PostAppsByAppIdPublishToCreatorsPlatformData = {
}
export type PostAppsByAppIdPublishToCreatorsPlatformResponses = {
200: {
[key: string]: unknown
}
200: RedirectUrlResponse
}
export type PostAppsByAppIdPublishToCreatorsPlatformResponse
@ -3259,9 +3261,7 @@ export type PostAppsByAppIdTraceErrors = {
export type PostAppsByAppIdTraceError = PostAppsByAppIdTraceErrors[keyof PostAppsByAppIdTraceErrors]
export type PostAppsByAppIdTraceResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type PostAppsByAppIdTraceResponse
@ -3525,9 +3525,7 @@ export type PostAppsByAppIdWorkflowRunsTasksByTaskIdStopError
= PostAppsByAppIdWorkflowRunsTasksByTaskIdStopErrors[keyof PostAppsByAppIdWorkflowRunsTasksByTaskIdStopErrors]
export type PostAppsByAppIdWorkflowRunsTasksByTaskIdStopResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type PostAppsByAppIdWorkflowRunsTasksByTaskIdStopResponse
@ -4079,9 +4077,7 @@ export type PostAppsByAppIdWorkflowsDraftFeaturesData = {
}
export type PostAppsByAppIdWorkflowsDraftFeaturesResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type PostAppsByAppIdWorkflowsDraftFeaturesResponse

View File

@ -160,6 +160,13 @@ export const zSuggestedQuestionsResponse = z.object({
data: z.array(z.string()),
})
/**
* SimpleResultResponse
*/
export const zSimpleResultResponse = z.object({
result: z.string(),
})
/**
* CompletionMessagePayload
*/
@ -182,6 +189,13 @@ export const zConvertToWorkflowPayload = z.object({
name: z.string().nullish(),
})
/**
* NewAppResponse
*/
export const zNewAppResponse = z.object({
new_app_id: z.string(),
})
/**
* AppExportResponse
*/
@ -223,6 +237,13 @@ export const zAppNamePayload = z.object({
name: z.string().min(1),
})
/**
* RedirectUrlResponse
*/
export const zRedirectUrlResponse = z.object({
redirect_url: z.string(),
})
/**
* MCPServerCreatePayload
*/
@ -2327,7 +2348,7 @@ export const zPostAppsByAppIdChatMessagesByTaskIdStopPath = z.object({
/**
* Task stopped successfully
*/
export const zPostAppsByAppIdChatMessagesByTaskIdStopResponse = z.record(z.string(), z.unknown())
export const zPostAppsByAppIdChatMessagesByTaskIdStopResponse = zSimpleResultResponse
export const zGetAppsByAppIdCompletionConversationsPath = z.object({
app_id: z.string(),
@ -2390,10 +2411,7 @@ export const zPostAppsByAppIdCompletionMessagesByTaskIdStopPath = z.object({
/**
* Task stopped successfully
*/
export const zPostAppsByAppIdCompletionMessagesByTaskIdStopResponse = z.record(
z.string(),
z.unknown(),
)
export const zPostAppsByAppIdCompletionMessagesByTaskIdStopResponse = zSimpleResultResponse
export const zGetAppsByAppIdConversationVariablesPath = z.object({
app_id: z.string(),
@ -2417,7 +2435,7 @@ export const zPostAppsByAppIdConvertToWorkflowPath = z.object({
/**
* Application converted to workflow successfully
*/
export const zPostAppsByAppIdConvertToWorkflowResponse = z.record(z.string(), z.unknown())
export const zPostAppsByAppIdConvertToWorkflowResponse = zNewAppResponse
export const zPostAppsByAppIdCopyBody = zCopyAppPayload
@ -2453,7 +2471,7 @@ export const zPostAppsByAppIdFeedbacksPath = z.object({
/**
* Feedback updated successfully
*/
export const zPostAppsByAppIdFeedbacksResponse = z.record(z.string(), z.unknown())
export const zPostAppsByAppIdFeedbacksResponse = zSimpleResultResponse
export const zGetAppsByAppIdFeedbacksExportPath = z.object({
app_id: z.string(),
@ -2523,7 +2541,7 @@ export const zPostAppsByAppIdPublishToCreatorsPlatformPath = z.object({
/**
* Success
*/
export const zPostAppsByAppIdPublishToCreatorsPlatformResponse = z.record(z.string(), z.unknown())
export const zPostAppsByAppIdPublishToCreatorsPlatformResponse = zRedirectUrlResponse
export const zGetAppsByAppIdServerPath = z.object({
app_id: z.string(),
@ -2757,7 +2775,7 @@ export const zPostAppsByAppIdTracePath = z.object({
/**
* Trace configuration updated successfully
*/
export const zPostAppsByAppIdTraceResponse = z.record(z.string(), z.unknown())
export const zPostAppsByAppIdTraceResponse = zSimpleResultResponse
export const zDeleteAppsByAppIdTraceConfigBody = zTraceProviderQuery
@ -2906,10 +2924,7 @@ export const zPostAppsByAppIdWorkflowRunsTasksByTaskIdStopPath = z.object({
/**
* Task stopped successfully
*/
export const zPostAppsByAppIdWorkflowRunsTasksByTaskIdStopResponse = z.record(
z.string(),
z.unknown(),
)
export const zPostAppsByAppIdWorkflowRunsTasksByTaskIdStopResponse = zSimpleResultResponse
export const zGetAppsByAppIdWorkflowRunsByRunIdPath = z.object({
app_id: z.string(),
@ -3246,7 +3261,7 @@ export const zPostAppsByAppIdWorkflowsDraftFeaturesPath = z.object({
/**
* Workflow features updated successfully
*/
export const zPostAppsByAppIdWorkflowsDraftFeaturesResponse = z.record(z.string(), z.unknown())
export const zPostAppsByAppIdWorkflowsDraftFeaturesResponse = zSimpleResultResponse
export const zPostAppsByAppIdWorkflowsDraftHumanInputNodesByNodeIdDeliveryTestBody
= zHumanInputDeliveryTestPayload

View File

@ -74,16 +74,8 @@ export const list = {
get: get2,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const delete_ = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'DELETE',
operationId: 'deleteAuthPluginDatasourceByProviderIdCustomClient',
@ -122,16 +114,8 @@ export const customClient = {
post,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post2 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postAuthPluginDatasourceByProviderIdDefault',
@ -150,16 +134,8 @@ export const default_ = {
post: post2,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post3 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postAuthPluginDatasourceByProviderIdDelete',
@ -206,16 +182,8 @@ export const update = {
post: post4,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post5 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postAuthPluginDatasourceByProviderIdUpdateName',

View File

@ -11,6 +11,10 @@ export type DatasourceCredentialPayload = {
name?: string | null
}
export type SimpleResultResponse = {
result: string
}
export type DatasourceCustomClientPayload = {
client_params?: {
[key: string]: unknown
@ -117,9 +121,7 @@ export type DeleteAuthPluginDatasourceByProviderIdCustomClientData = {
}
export type DeleteAuthPluginDatasourceByProviderIdCustomClientResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type DeleteAuthPluginDatasourceByProviderIdCustomClientResponse
@ -153,9 +155,7 @@ export type PostAuthPluginDatasourceByProviderIdDefaultData = {
}
export type PostAuthPluginDatasourceByProviderIdDefaultResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type PostAuthPluginDatasourceByProviderIdDefaultResponse
@ -171,9 +171,7 @@ export type PostAuthPluginDatasourceByProviderIdDeleteData = {
}
export type PostAuthPluginDatasourceByProviderIdDeleteResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type PostAuthPluginDatasourceByProviderIdDeleteResponse
@ -207,9 +205,7 @@ export type PostAuthPluginDatasourceByProviderIdUpdateNameData = {
}
export type PostAuthPluginDatasourceByProviderIdUpdateNameResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type PostAuthPluginDatasourceByProviderIdUpdateNameResponse

View File

@ -10,6 +10,13 @@ export const zDatasourceCredentialPayload = z.object({
name: z.string().max(100).nullish(),
})
/**
* SimpleResultResponse
*/
export const zSimpleResultResponse = z.object({
result: z.string(),
})
/**
* DatasourceCustomClientPayload
*/
@ -86,10 +93,7 @@ export const zDeleteAuthPluginDatasourceByProviderIdCustomClientPath = z.object(
/**
* Success
*/
export const zDeleteAuthPluginDatasourceByProviderIdCustomClientResponse = z.record(
z.string(),
z.unknown(),
)
export const zDeleteAuthPluginDatasourceByProviderIdCustomClientResponse = zSimpleResultResponse
export const zPostAuthPluginDatasourceByProviderIdCustomClientBody = zDatasourceCustomClientPayload
@ -114,10 +118,7 @@ export const zPostAuthPluginDatasourceByProviderIdDefaultPath = z.object({
/**
* Success
*/
export const zPostAuthPluginDatasourceByProviderIdDefaultResponse = z.record(
z.string(),
z.unknown(),
)
export const zPostAuthPluginDatasourceByProviderIdDefaultResponse = zSimpleResultResponse
export const zPostAuthPluginDatasourceByProviderIdDeleteBody = zDatasourceCredentialDeletePayload
@ -128,7 +129,7 @@ export const zPostAuthPluginDatasourceByProviderIdDeletePath = z.object({
/**
* Success
*/
export const zPostAuthPluginDatasourceByProviderIdDeleteResponse = z.record(z.string(), z.unknown())
export const zPostAuthPluginDatasourceByProviderIdDeleteResponse = zSimpleResultResponse
export const zPostAuthPluginDatasourceByProviderIdUpdateBody = zDatasourceCredentialUpdatePayload
@ -150,7 +151,4 @@ export const zPostAuthPluginDatasourceByProviderIdUpdateNamePath = z.object({
/**
* Success
*/
export const zPostAuthPluginDatasourceByProviderIdUpdateNameResponse = z.record(
z.string(),
z.unknown(),
)
export const zPostAuthPluginDatasourceByProviderIdUpdateNameResponse = zSimpleResultResponse

View File

@ -31,16 +31,8 @@ export const get = oc
.input(z.object({ params: zGetDataSourceIntegratesByBindingIdByActionPath }))
.output(zGetDataSourceIntegratesByBindingIdByActionResponse)
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const patch = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'PATCH',
operationId: 'patchDataSourceIntegratesByBindingIdByAction',
@ -77,16 +69,8 @@ export const get2 = oc
})
.output(zGetDataSourceIntegratesResponse)
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const patch2 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'PATCH',
operationId: 'patchDataSourceIntegrates',

View File

@ -4,6 +4,10 @@ export type ClientOptions = {
baseUrl: `${string}://${string}/console/api` | (string & {})
}
export type SimpleResultResponse = {
result: string
}
export type GetDataSourceIntegratesData = {
body?: never
path?: never
@ -28,9 +32,7 @@ export type PatchDataSourceIntegratesData = {
}
export type PatchDataSourceIntegratesResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type PatchDataSourceIntegratesResponse
@ -66,9 +68,7 @@ export type PatchDataSourceIntegratesByBindingIdByActionData = {
}
export type PatchDataSourceIntegratesByBindingIdByActionResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type PatchDataSourceIntegratesByBindingIdByActionResponse

View File

@ -2,6 +2,13 @@
import * as z from 'zod'
/**
* SimpleResultResponse
*/
export const zSimpleResultResponse = z.object({
result: z.string(),
})
/**
* Success
*/
@ -10,7 +17,7 @@ export const zGetDataSourceIntegratesResponse = z.record(z.string(), z.unknown()
/**
* Success
*/
export const zPatchDataSourceIntegratesResponse = z.record(z.string(), z.unknown())
export const zPatchDataSourceIntegratesResponse = zSimpleResultResponse
export const zGetDataSourceIntegratesByBindingIdByActionPath = z.object({
action: z.string(),
@ -30,7 +37,4 @@ export const zPatchDataSourceIntegratesByBindingIdByActionPath = z.object({
/**
* Success
*/
export const zPatchDataSourceIntegratesByBindingIdByActionResponse = z.record(
z.string(),
z.unknown(),
)
export const zPatchDataSourceIntegratesByBindingIdByActionResponse = zSimpleResultResponse

View File

@ -187,16 +187,10 @@ import {
/**
* Get dataset API base information
*
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const get = oc
.route({
deprecated: true,
description:
'Get dataset API base information\n\nGenerated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
description: 'Get dataset API base information',
inputStructure: 'detailed',
method: 'GET',
operationId: 'getDatasetsApiBaseInfo',
@ -259,16 +253,8 @@ export const apiKeys = {
byApiKeyId,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const get3 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'GET',
operationId: 'getDatasetsBatchImportStatusByJobId',
@ -278,16 +264,8 @@ export const get3 = oc
.input(z.object({ params: zGetDatasetsBatchImportStatusByJobIdPath }))
.output(zGetDatasetsBatchImportStatusByJobIdResponse)
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post2 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postDatasetsBatchImportStatusByJobId',
@ -339,16 +317,10 @@ export const external = {
/**
* Check if external knowledge API is being used
*
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const get4 = oc
.route({
deprecated: true,
description:
'Check if external knowledge API is being used\n\nGenerated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
description: 'Check if external knowledge API is being used',
inputStructure: 'detailed',
method: 'GET',
operationId: 'getDatasetsExternalKnowledgeApiByExternalKnowledgeApiIdUseCheck',
@ -362,20 +334,13 @@ export const useCheck = {
get: get4,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const delete2 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'DELETE',
operationId: 'deleteDatasetsExternalKnowledgeApiByExternalKnowledgeApiId',
path: '/datasets/external-knowledge-api/{external_knowledge_api_id}',
successStatus: 204,
tags: ['console'],
})
.input(z.object({ params: zDeleteDatasetsExternalKnowledgeApiByExternalKnowledgeApiIdPath }))
@ -556,16 +521,8 @@ export const metadata = {
builtIn,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const get8 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'GET',
operationId: 'getDatasetsNotionIndexingEstimate',
@ -673,16 +630,8 @@ export const retrievalSetting = {
byVectorType,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post8 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postDatasetsByDatasetIdApiKeysByStatus',
@ -820,16 +769,11 @@ export const downloadZip = {
* This endpoint checks if the dataset configuration supports summary generation
* (indexing_technique must be 'high_quality' and summary_index_setting.enable must be true),
* then asynchronously generates summary indexes for the provided documents.
*
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post10 = oc
.route({
deprecated: true,
description:
'Generate summary index for documents\nThis endpoint checks if the dataset configuration supports summary generation\n(indexing_technique must be \'high_quality\' and summary_index_setting.enable must be true),\nthen asynchronously generates summary indexes for the provided documents.\n\nGenerated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
'Generate summary index for documents\nThis endpoint checks if the dataset configuration supports summary generation\n(indexing_technique must be \'high_quality\' and summary_index_setting.enable must be true),\nthen asynchronously generates summary indexes for the provided documents.',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postDatasetsByDatasetIdDocumentsGenerateSummary',
@ -849,16 +793,8 @@ export const generateSummary = {
post: post10,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post11 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postDatasetsByDatasetIdDocumentsMetadata',
@ -877,16 +813,8 @@ export const metadata2 = {
post: post11,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const patch2 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'PATCH',
operationId: 'patchDatasetsByDatasetIdDocumentsStatusByActionBatch',
@ -910,16 +838,10 @@ export const status = {
/**
* Get a signed download URL for a dataset document's original uploaded file
*
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const get15 = oc
.route({
deprecated: true,
description:
'Get a signed download URL for a dataset document\'s original uploaded file\n\nGenerated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
description: 'Get a signed download URL for a dataset document\'s original uploaded file',
inputStructure: 'detailed',
method: 'GET',
operationId: 'getDatasetsByDatasetIdDocumentsByDocumentIdDownload',
@ -985,16 +907,10 @@ export const indexingStatus2 = {
/**
* Update document metadata
*
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const put = oc
.route({
deprecated: true,
description:
'Update document metadata\n\nGenerated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
description: 'Update document metadata',
inputStructure: 'detailed',
method: 'PUT',
operationId: 'putDatasetsByDatasetIdDocumentsByDocumentIdMetadata',
@ -1013,16 +929,8 @@ export const metadata3 = {
put,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const get18 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'GET',
operationId: 'getDatasetsByDatasetIdDocumentsByDocumentIdNotionSync',
@ -1065,20 +973,14 @@ export const pipelineExecutionLog = {
/**
* pause document
*
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const patch3 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'PATCH',
operationId: 'patchDatasetsByDatasetIdDocumentsByDocumentIdProcessingPause',
path: '/datasets/{dataset_id}/documents/{document_id}/processing/pause',
successStatus: 204,
summary: 'pause document',
tags: ['console'],
})
@ -1091,20 +993,14 @@ export const pause = {
/**
* recover document
*
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const patch4 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'PATCH',
operationId: 'patchDatasetsByDatasetIdDocumentsByDocumentIdProcessingResume',
path: '/datasets/{dataset_id}/documents/{document_id}/processing/resume',
successStatus: 204,
summary: 'recover document',
tags: ['console'],
})
@ -1117,16 +1013,10 @@ export const resume = {
/**
* Update document processing status (pause/resume)
*
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const patch5 = oc
.route({
deprecated: true,
description:
'Update document processing status (pause/resume)\n\nGenerated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
description: 'Update document processing status (pause/resume)',
inputStructure: 'detailed',
method: 'PATCH',
operationId: 'patchDatasetsByDatasetIdDocumentsByDocumentIdProcessingByAction',
@ -1166,16 +1056,8 @@ export const rename = {
post: post12,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const patch6 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'PATCH',
operationId: 'patchDatasetsByDatasetIdDocumentsByDocumentIdSegmentByAction',
@ -1218,16 +1100,8 @@ export const segment = {
byAction: byAction3,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const get20 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'GET',
operationId: 'getDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBatchImport',
@ -1237,16 +1111,8 @@ export const get20 = oc
.input(z.object({ params: zGetDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBatchImportPath }))
.output(zGetDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBatchImportResponse)
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post14 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBatchImport',
@ -1266,21 +1132,14 @@ export const batchImport = {
post: post14,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const delete3 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'DELETE',
operationId:
'deleteDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBySegmentIdChildChunksByChildChunkId',
path: '/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}/child_chunks/{child_chunk_id}',
successStatus: 204,
tags: ['console'],
})
.input(
@ -1403,20 +1262,13 @@ export const childChunks = {
byChildChunkId,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const delete4 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'DELETE',
operationId: 'deleteDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBySegmentId',
path: '/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}',
successStatus: 204,
tags: ['console'],
})
.input(
@ -1454,20 +1306,13 @@ export const bySegmentId = {
childChunks,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const delete5 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'DELETE',
operationId: 'deleteDatasetsByDatasetIdDocumentsByDocumentIdSegments',
path: '/datasets/{dataset_id}/documents/{document_id}/segments',
successStatus: 204,
tags: ['console'],
})
.input(z.object({ params: zDeleteDatasetsByDatasetIdDocumentsByDocumentIdSegmentsPath }))
@ -1537,16 +1382,9 @@ export const summaryStatus = {
/**
* sync website document
*
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const get24 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'GET',
operationId: 'getDatasetsByDatasetIdDocumentsByDocumentIdWebsiteSync',
@ -1561,20 +1399,13 @@ export const websiteSync = {
get: get24,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const delete6 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'DELETE',
operationId: 'deleteDatasetsByDatasetIdDocumentsByDocumentId',
path: '/datasets/{dataset_id}/documents/{document_id}',
successStatus: 204,
tags: ['console'],
})
.input(z.object({ params: zDeleteDatasetsByDatasetIdDocumentsByDocumentIdPath }))
@ -1623,20 +1454,13 @@ export const byDocumentId = {
websiteSync,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const delete7 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'DELETE',
operationId: 'deleteDatasetsByDatasetIdDocuments',
path: '/datasets/{dataset_id}/documents',
successStatus: 204,
tags: ['console'],
})
.input(z.object({ params: zDeleteDatasetsByDatasetIdDocumentsPath }))
@ -1813,16 +1637,8 @@ export const indexingStatus3 = {
get: get28,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post19 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postDatasetsByDatasetIdMetadataBuiltInByAction',
@ -1840,20 +1656,13 @@ export const builtIn2 = {
byAction: byAction4,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const delete8 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'DELETE',
operationId: 'deleteDatasetsByDatasetIdMetadataByMetadataId',
path: '/datasets/{dataset_id}/metadata/{metadata_id}',
successStatus: 204,
tags: ['console'],
})
.input(z.object({ params: zDeleteDatasetsByDatasetIdMetadataByMetadataIdPath }))
@ -1938,16 +1747,8 @@ export const metadata4 = {
byMetadataId,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const get30 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'GET',
operationId: 'getDatasetsByDatasetIdNotionSync',
@ -2042,20 +1843,14 @@ export const relatedApps = {
/**
* retry document
*
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post21 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postDatasetsByDatasetIdRetry',
path: '/datasets/{dataset_id}/retry',
successStatus: 204,
summary: 'retry document',
tags: ['console'],
})
@ -2073,16 +1868,10 @@ export const retry = {
/**
* Check if dataset is in use
*
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const get34 = oc
.route({
deprecated: true,
description:
'Check if dataset is in use\n\nGenerated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
description: 'Check if dataset is in use',
inputStructure: 'detailed',
method: 'GET',
operationId: 'getDatasetsByDatasetIdUseCheck',
@ -2096,20 +1885,13 @@ export const useCheck2 = {
get: get34,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const delete9 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'DELETE',
operationId: 'deleteDatasetsByDatasetId',
path: '/datasets/{dataset_id}',
successStatus: 204,
tags: ['console'],
})
.input(z.object({ params: zDeleteDatasetsByDatasetIdPath }))

View File

@ -14,6 +14,10 @@ export type DatasetCreatePayload = {
provider?: string
}
export type ApiBaseUrlResponse = {
api_base_url: string
}
export type ApiKeyList = {
data: Array<ApiKeyItem>
}
@ -26,6 +30,11 @@ export type ApiKeyItem = {
type: string
}
export type SegmentBatchImportStatusResponse = {
job_id: string
job_status: string
}
export type BatchImportPayload = {
upload_file_id: string
}
@ -89,6 +98,11 @@ export type ExternalKnowledgeApiPayload = {
}
}
export type UsageCountResponse = {
count: number
is_using: boolean
}
export type IndexingEstimatePayload = {
dataset_id?: string | null
doc_form?: string
@ -126,6 +140,10 @@ export type DatasetAndDocumentResponse = {
documents: Array<DocumentResponse>
}
export type TextContentResponse = {
content: string
}
export type NotionEstimatePayload = {
doc_form?: string
doc_language?: string
@ -164,6 +182,10 @@ export type DatasetUpdatePayload = {
} | null
}
export type SimpleResultResponse = {
result: string
}
export type DocumentBatchDownloadZipPayload = {
document_ids: Array<string>
}
@ -176,11 +198,20 @@ export type MetadataOperationData = {
operation_data: Array<DocumentMetadataOperation>
}
export type UrlResponse = {
url: string
}
export type DocumentMetadataUpdatePayload = {
doc_metadata?: unknown
doc_type?: string | null
}
export type SimpleResultMessageResponse = {
message: string
result: string
}
export type DocumentRenamePayload = {
name: string
}
@ -290,6 +321,10 @@ export type DocumentRetryPayload = {
document_ids: Array<string>
}
export type UsageCheckResponse = {
is_using: boolean
}
export type DatasetPermissionEnum = 'all_team_members' | 'only_me' | 'partial_members'
export type DatasetDocMetadata = {
@ -665,9 +700,7 @@ export type GetDatasetsApiBaseInfoData = {
}
export type GetDatasetsApiBaseInfoResponses = {
200: {
[key: string]: unknown
}
200: ApiBaseUrlResponse
}
export type GetDatasetsApiBaseInfoResponse
@ -737,9 +770,7 @@ export type GetDatasetsBatchImportStatusByJobIdData = {
}
export type GetDatasetsBatchImportStatusByJobIdResponses = {
200: {
[key: string]: unknown
}
200: SegmentBatchImportStatusResponse
}
export type GetDatasetsBatchImportStatusByJobIdResponse
@ -755,9 +786,7 @@ export type PostDatasetsBatchImportStatusByJobIdData = {
}
export type PostDatasetsBatchImportStatusByJobIdResponses = {
200: {
[key: string]: unknown
}
200: SegmentBatchImportStatusResponse
}
export type PostDatasetsBatchImportStatusByJobIdResponse
@ -834,8 +863,8 @@ export type DeleteDatasetsExternalKnowledgeApiByExternalKnowledgeApiIdData = {
}
export type DeleteDatasetsExternalKnowledgeApiByExternalKnowledgeApiIdResponses = {
200: {
[key: string]: unknown
204: {
[key: string]: never
}
}
@ -897,9 +926,7 @@ export type GetDatasetsExternalKnowledgeApiByExternalKnowledgeApiIdUseCheckData
}
export type GetDatasetsExternalKnowledgeApiByExternalKnowledgeApiIdUseCheckResponses = {
200: {
[key: string]: unknown
}
200: UsageCountResponse
}
export type GetDatasetsExternalKnowledgeApiByExternalKnowledgeApiIdUseCheckResponse
@ -966,9 +993,7 @@ export type GetDatasetsNotionIndexingEstimateData = {
}
export type GetDatasetsNotionIndexingEstimateResponses = {
200: {
[key: string]: unknown
}
200: TextContentResponse
}
export type GetDatasetsNotionIndexingEstimateResponse
@ -1052,8 +1077,8 @@ export type DeleteDatasetsByDatasetIdData = {
}
export type DeleteDatasetsByDatasetIdResponses = {
200: {
[key: string]: unknown
204: {
[key: string]: never
}
}
@ -1127,9 +1152,7 @@ export type PostDatasetsByDatasetIdApiKeysByStatusData = {
}
export type PostDatasetsByDatasetIdApiKeysByStatusResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type PostDatasetsByDatasetIdApiKeysByStatusResponse
@ -1210,8 +1233,8 @@ export type DeleteDatasetsByDatasetIdDocumentsData = {
}
export type DeleteDatasetsByDatasetIdDocumentsResponses = {
200: {
[key: string]: unknown
204: {
[key: string]: never
}
}
@ -1302,9 +1325,7 @@ export type PostDatasetsByDatasetIdDocumentsGenerateSummaryError
= PostDatasetsByDatasetIdDocumentsGenerateSummaryErrors[keyof PostDatasetsByDatasetIdDocumentsGenerateSummaryErrors]
export type PostDatasetsByDatasetIdDocumentsGenerateSummaryResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type PostDatasetsByDatasetIdDocumentsGenerateSummaryResponse
@ -1320,9 +1341,7 @@ export type PostDatasetsByDatasetIdDocumentsMetadataData = {
}
export type PostDatasetsByDatasetIdDocumentsMetadataResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type PostDatasetsByDatasetIdDocumentsMetadataResponse
@ -1339,9 +1358,7 @@ export type PatchDatasetsByDatasetIdDocumentsStatusByActionBatchData = {
}
export type PatchDatasetsByDatasetIdDocumentsStatusByActionBatchResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type PatchDatasetsByDatasetIdDocumentsStatusByActionBatchResponse
@ -1358,8 +1375,8 @@ export type DeleteDatasetsByDatasetIdDocumentsByDocumentIdData = {
}
export type DeleteDatasetsByDatasetIdDocumentsByDocumentIdResponses = {
200: {
[key: string]: unknown
204: {
[key: string]: never
}
}
@ -1407,9 +1424,7 @@ export type GetDatasetsByDatasetIdDocumentsByDocumentIdDownloadData = {
}
export type GetDatasetsByDatasetIdDocumentsByDocumentIdDownloadResponses = {
200: {
[key: string]: unknown
}
200: UrlResponse
}
export type GetDatasetsByDatasetIdDocumentsByDocumentIdDownloadResponse
@ -1497,9 +1512,7 @@ export type PutDatasetsByDatasetIdDocumentsByDocumentIdMetadataError
= PutDatasetsByDatasetIdDocumentsByDocumentIdMetadataErrors[keyof PutDatasetsByDatasetIdDocumentsByDocumentIdMetadataErrors]
export type PutDatasetsByDatasetIdDocumentsByDocumentIdMetadataResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultMessageResponse
}
export type PutDatasetsByDatasetIdDocumentsByDocumentIdMetadataResponse
@ -1516,9 +1529,7 @@ export type GetDatasetsByDatasetIdDocumentsByDocumentIdNotionSyncData = {
}
export type GetDatasetsByDatasetIdDocumentsByDocumentIdNotionSyncResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type GetDatasetsByDatasetIdDocumentsByDocumentIdNotionSyncResponse
@ -1554,8 +1565,8 @@ export type PatchDatasetsByDatasetIdDocumentsByDocumentIdProcessingPauseData = {
}
export type PatchDatasetsByDatasetIdDocumentsByDocumentIdProcessingPauseResponses = {
200: {
[key: string]: unknown
204: {
[key: string]: never
}
}
@ -1573,8 +1584,8 @@ export type PatchDatasetsByDatasetIdDocumentsByDocumentIdProcessingResumeData =
}
export type PatchDatasetsByDatasetIdDocumentsByDocumentIdProcessingResumeResponses = {
200: {
[key: string]: unknown
204: {
[key: string]: never
}
}
@ -1605,9 +1616,7 @@ export type PatchDatasetsByDatasetIdDocumentsByDocumentIdProcessingByActionError
= PatchDatasetsByDatasetIdDocumentsByDocumentIdProcessingByActionErrors[keyof PatchDatasetsByDatasetIdDocumentsByDocumentIdProcessingByActionErrors]
export type PatchDatasetsByDatasetIdDocumentsByDocumentIdProcessingByActionResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type PatchDatasetsByDatasetIdDocumentsByDocumentIdProcessingByActionResponse
@ -1661,9 +1670,7 @@ export type PatchDatasetsByDatasetIdDocumentsByDocumentIdSegmentByActionData = {
}
export type PatchDatasetsByDatasetIdDocumentsByDocumentIdSegmentByActionResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type PatchDatasetsByDatasetIdDocumentsByDocumentIdSegmentByActionResponse
@ -1680,8 +1687,8 @@ export type DeleteDatasetsByDatasetIdDocumentsByDocumentIdSegmentsData = {
}
export type DeleteDatasetsByDatasetIdDocumentsByDocumentIdSegmentsResponses = {
200: {
[key: string]: unknown
204: {
[key: string]: never
}
}
@ -1718,9 +1725,7 @@ export type GetDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBatchImportData =
}
export type GetDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBatchImportResponses = {
200: {
[key: string]: unknown
}
200: SegmentBatchImportStatusResponse
}
export type GetDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBatchImportResponse
@ -1737,9 +1742,7 @@ export type PostDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBatchImportData
}
export type PostDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBatchImportResponses = {
200: {
[key: string]: unknown
}
200: SegmentBatchImportStatusResponse
}
export type PostDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBatchImportResponse
@ -1757,8 +1760,8 @@ export type DeleteDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBySegmentIdDat
}
export type DeleteDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBySegmentIdResponses = {
200: {
[key: string]: unknown
204: {
[key: string]: never
}
}
@ -1860,8 +1863,8 @@ export type DeleteDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBySegmentIdChi
export type DeleteDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBySegmentIdChildChunksByChildChunkIdResponses
= {
200: {
[key: string]: unknown
204: {
[key: string]: never
}
}
@ -1930,9 +1933,7 @@ export type GetDatasetsByDatasetIdDocumentsByDocumentIdWebsiteSyncData = {
}
export type GetDatasetsByDatasetIdDocumentsByDocumentIdWebsiteSyncResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type GetDatasetsByDatasetIdDocumentsByDocumentIdWebsiteSyncResponse
@ -2088,9 +2089,7 @@ export type PostDatasetsByDatasetIdMetadataBuiltInByActionData = {
}
export type PostDatasetsByDatasetIdMetadataBuiltInByActionResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type PostDatasetsByDatasetIdMetadataBuiltInByActionResponse
@ -2107,8 +2106,8 @@ export type DeleteDatasetsByDatasetIdMetadataByMetadataIdData = {
}
export type DeleteDatasetsByDatasetIdMetadataByMetadataIdResponses = {
200: {
[key: string]: unknown
204: {
[key: string]: never
}
}
@ -2144,9 +2143,7 @@ export type GetDatasetsByDatasetIdNotionSyncData = {
}
export type GetDatasetsByDatasetIdNotionSyncResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type GetDatasetsByDatasetIdNotionSyncResponse
@ -2224,8 +2221,8 @@ export type PostDatasetsByDatasetIdRetryData = {
}
export type PostDatasetsByDatasetIdRetryResponses = {
200: {
[key: string]: unknown
204: {
[key: string]: never
}
}
@ -2242,9 +2239,7 @@ export type GetDatasetsByDatasetIdUseCheckData = {
}
export type GetDatasetsByDatasetIdUseCheckResponses = {
200: {
[key: string]: unknown
}
200: UsageCheckResponse
}
export type GetDatasetsByDatasetIdUseCheckResponse

View File

@ -2,6 +2,13 @@
import * as z from 'zod'
/**
* ApiBaseUrlResponse
*/
export const zApiBaseUrlResponse = z.object({
api_base_url: z.string(),
})
/**
* ApiKeyItem
*/
@ -20,6 +27,14 @@ export const zApiKeyList = z.object({
data: z.array(zApiKeyItem),
})
/**
* SegmentBatchImportStatusResponse
*/
export const zSegmentBatchImportStatusResponse = z.object({
job_id: z.string(),
job_status: z.string(),
})
/**
* BatchImportPayload
*/
@ -46,6 +61,14 @@ export const zExternalKnowledgeApiPayload = z.object({
settings: z.record(z.string(), z.unknown()),
})
/**
* UsageCountResponse
*/
export const zUsageCountResponse = z.object({
count: z.int(),
is_using: z.boolean(),
})
/**
* IndexingEstimatePayload
*/
@ -58,6 +81,13 @@ export const zIndexingEstimatePayload = z.object({
process_rule: z.record(z.string(), z.unknown()),
})
/**
* TextContentResponse
*/
export const zTextContentResponse = z.object({
content: z.string(),
})
/**
* NotionEstimatePayload
*/
@ -68,6 +98,13 @@ export const zNotionEstimatePayload = z.object({
process_rule: z.record(z.string(), z.unknown()),
})
/**
* SimpleResultResponse
*/
export const zSimpleResultResponse = z.object({
result: z.string(),
})
/**
* DocumentBatchDownloadZipPayload
*
@ -84,6 +121,13 @@ export const zGenerateSummaryPayload = z.object({
document_list: z.array(z.string()),
})
/**
* UrlResponse
*/
export const zUrlResponse = z.object({
url: z.string(),
})
/**
* DocumentMetadataUpdatePayload
*/
@ -92,6 +136,14 @@ export const zDocumentMetadataUpdatePayload = z.object({
doc_type: z.string().nullish(),
})
/**
* SimpleResultMessageResponse
*/
export const zSimpleResultMessageResponse = z.object({
message: z.string(),
result: z.string(),
})
/**
* DocumentRenamePayload
*/
@ -166,6 +218,13 @@ export const zDocumentRetryPayload = z.object({
document_ids: z.array(z.string()),
})
/**
* UsageCheckResponse
*/
export const zUsageCheckResponse = z.object({
is_using: z.boolean(),
})
/**
* DatasetPermissionEnum
*/
@ -777,7 +836,7 @@ export const zPostDatasetsResponse = z.record(z.string(), z.unknown())
/**
* API base info retrieved successfully
*/
export const zGetDatasetsApiBaseInfoResponse = z.record(z.string(), z.unknown())
export const zGetDatasetsApiBaseInfoResponse = zApiBaseUrlResponse
/**
* API keys retrieved successfully
@ -803,9 +862,9 @@ export const zGetDatasetsBatchImportStatusByJobIdPath = z.object({
})
/**
* Success
* Batch import status
*/
export const zGetDatasetsBatchImportStatusByJobIdResponse = z.record(z.string(), z.unknown())
export const zGetDatasetsBatchImportStatusByJobIdResponse = zSegmentBatchImportStatusResponse
export const zPostDatasetsBatchImportStatusByJobIdBody = zBatchImportPayload
@ -814,9 +873,9 @@ export const zPostDatasetsBatchImportStatusByJobIdPath = z.object({
})
/**
* Success
* Batch import started
*/
export const zPostDatasetsBatchImportStatusByJobIdResponse = z.record(z.string(), z.unknown())
export const zPostDatasetsBatchImportStatusByJobIdResponse = zSegmentBatchImportStatusResponse
export const zPostDatasetsExternalBody = zExternalDatasetCreatePayload
@ -848,11 +907,11 @@ export const zDeleteDatasetsExternalKnowledgeApiByExternalKnowledgeApiIdPath = z
})
/**
* Success
* External knowledge API deleted successfully
*/
export const zDeleteDatasetsExternalKnowledgeApiByExternalKnowledgeApiIdResponse = z.record(
z.string(),
z.unknown(),
z.never(),
)
export const zGetDatasetsExternalKnowledgeApiByExternalKnowledgeApiIdPath = z.object({
@ -889,10 +948,8 @@ export const zGetDatasetsExternalKnowledgeApiByExternalKnowledgeApiIdUseCheckPat
/**
* Usage check completed successfully
*/
export const zGetDatasetsExternalKnowledgeApiByExternalKnowledgeApiIdUseCheckResponse = z.record(
z.string(),
z.unknown(),
)
export const zGetDatasetsExternalKnowledgeApiByExternalKnowledgeApiIdUseCheckResponse
= zUsageCountResponse
export const zPostDatasetsIndexingEstimateBody = zIndexingEstimatePayload
@ -916,7 +973,7 @@ export const zGetDatasetsMetadataBuiltInResponse = z.record(z.string(), z.unknow
/**
* Success
*/
export const zGetDatasetsNotionIndexingEstimateResponse = z.record(z.string(), z.unknown())
export const zGetDatasetsNotionIndexingEstimateResponse = zTextContentResponse
export const zPostDatasetsNotionIndexingEstimateBody = zNotionEstimatePayload
@ -953,9 +1010,9 @@ export const zDeleteDatasetsByDatasetIdPath = z.object({
})
/**
* Success
* Dataset deleted successfully
*/
export const zDeleteDatasetsByDatasetIdResponse = z.record(z.string(), z.unknown())
export const zDeleteDatasetsByDatasetIdResponse = z.record(z.string(), z.never())
export const zGetDatasetsByDatasetIdPath = z.object({
dataset_id: z.string(),
@ -985,7 +1042,7 @@ export const zPostDatasetsByDatasetIdApiKeysByStatusPath = z.object({
/**
* Success
*/
export const zPostDatasetsByDatasetIdApiKeysByStatusResponse = z.record(z.string(), z.unknown())
export const zPostDatasetsByDatasetIdApiKeysByStatusResponse = zSimpleResultResponse
export const zGetDatasetsByDatasetIdAutoDisableLogsPath = z.object({
dataset_id: z.string(),
@ -1027,9 +1084,9 @@ export const zDeleteDatasetsByDatasetIdDocumentsPath = z.object({
})
/**
* Success
* Documents deleted successfully
*/
export const zDeleteDatasetsByDatasetIdDocumentsResponse = z.record(z.string(), z.unknown())
export const zDeleteDatasetsByDatasetIdDocumentsResponse = z.record(z.string(), z.never())
export const zGetDatasetsByDatasetIdDocumentsPath = z.object({
dataset_id: z.string(),
@ -1083,10 +1140,7 @@ export const zPostDatasetsByDatasetIdDocumentsGenerateSummaryPath = z.object({
/**
* Summary generation started successfully
*/
export const zPostDatasetsByDatasetIdDocumentsGenerateSummaryResponse = z.record(
z.string(),
z.unknown(),
)
export const zPostDatasetsByDatasetIdDocumentsGenerateSummaryResponse = zSimpleResultResponse
export const zPostDatasetsByDatasetIdDocumentsMetadataBody = zMetadataOperationData
@ -1097,7 +1151,7 @@ export const zPostDatasetsByDatasetIdDocumentsMetadataPath = z.object({
/**
* Success
*/
export const zPostDatasetsByDatasetIdDocumentsMetadataResponse = z.record(z.string(), z.unknown())
export const zPostDatasetsByDatasetIdDocumentsMetadataResponse = zSimpleResultResponse
export const zPatchDatasetsByDatasetIdDocumentsStatusByActionBatchPath = z.object({
action: z.string(),
@ -1107,10 +1161,7 @@ export const zPatchDatasetsByDatasetIdDocumentsStatusByActionBatchPath = z.objec
/**
* Success
*/
export const zPatchDatasetsByDatasetIdDocumentsStatusByActionBatchResponse = z.record(
z.string(),
z.unknown(),
)
export const zPatchDatasetsByDatasetIdDocumentsStatusByActionBatchResponse = zSimpleResultResponse
export const zDeleteDatasetsByDatasetIdDocumentsByDocumentIdPath = z.object({
dataset_id: z.string(),
@ -1118,11 +1169,11 @@ export const zDeleteDatasetsByDatasetIdDocumentsByDocumentIdPath = z.object({
})
/**
* Success
* Document deleted successfully
*/
export const zDeleteDatasetsByDatasetIdDocumentsByDocumentIdResponse = z.record(
z.string(),
z.unknown(),
z.never(),
)
export const zGetDatasetsByDatasetIdDocumentsByDocumentIdPath = z.object({
@ -1148,12 +1199,9 @@ export const zGetDatasetsByDatasetIdDocumentsByDocumentIdDownloadPath = z.object
})
/**
* Success
* Download URL generated successfully
*/
export const zGetDatasetsByDatasetIdDocumentsByDocumentIdDownloadResponse = z.record(
z.string(),
z.unknown(),
)
export const zGetDatasetsByDatasetIdDocumentsByDocumentIdDownloadResponse = zUrlResponse
export const zGetDatasetsByDatasetIdDocumentsByDocumentIdIndexingEstimatePath = z.object({
dataset_id: z.string(),
@ -1192,10 +1240,8 @@ export const zPutDatasetsByDatasetIdDocumentsByDocumentIdMetadataPath = z.object
/**
* Document metadata updated successfully
*/
export const zPutDatasetsByDatasetIdDocumentsByDocumentIdMetadataResponse = z.record(
z.string(),
z.unknown(),
)
export const zPutDatasetsByDatasetIdDocumentsByDocumentIdMetadataResponse
= zSimpleResultMessageResponse
export const zGetDatasetsByDatasetIdDocumentsByDocumentIdNotionSyncPath = z.object({
dataset_id: z.string(),
@ -1205,10 +1251,7 @@ export const zGetDatasetsByDatasetIdDocumentsByDocumentIdNotionSyncPath = z.obje
/**
* Success
*/
export const zGetDatasetsByDatasetIdDocumentsByDocumentIdNotionSyncResponse = z.record(
z.string(),
z.unknown(),
)
export const zGetDatasetsByDatasetIdDocumentsByDocumentIdNotionSyncResponse = zSimpleResultResponse
export const zGetDatasetsByDatasetIdDocumentsByDocumentIdPipelineExecutionLogPath = z.object({
dataset_id: z.string(),
@ -1229,11 +1272,11 @@ export const zPatchDatasetsByDatasetIdDocumentsByDocumentIdProcessingPausePath =
})
/**
* Success
* Document paused successfully
*/
export const zPatchDatasetsByDatasetIdDocumentsByDocumentIdProcessingPauseResponse = z.record(
z.string(),
z.unknown(),
z.never(),
)
export const zPatchDatasetsByDatasetIdDocumentsByDocumentIdProcessingResumePath = z.object({
@ -1242,11 +1285,11 @@ export const zPatchDatasetsByDatasetIdDocumentsByDocumentIdProcessingResumePath
})
/**
* Success
* Document resumed successfully
*/
export const zPatchDatasetsByDatasetIdDocumentsByDocumentIdProcessingResumeResponse = z.record(
z.string(),
z.unknown(),
z.never(),
)
export const zPatchDatasetsByDatasetIdDocumentsByDocumentIdProcessingByActionPath = z.object({
@ -1258,10 +1301,8 @@ export const zPatchDatasetsByDatasetIdDocumentsByDocumentIdProcessingByActionPat
/**
* Processing status updated successfully
*/
export const zPatchDatasetsByDatasetIdDocumentsByDocumentIdProcessingByActionResponse = z.record(
z.string(),
z.unknown(),
)
export const zPatchDatasetsByDatasetIdDocumentsByDocumentIdProcessingByActionResponse
= zSimpleResultResponse
export const zPostDatasetsByDatasetIdDocumentsByDocumentIdRenameBody = zDocumentRenamePayload
@ -1299,10 +1340,8 @@ export const zPatchDatasetsByDatasetIdDocumentsByDocumentIdSegmentByActionPath =
/**
* Success
*/
export const zPatchDatasetsByDatasetIdDocumentsByDocumentIdSegmentByActionResponse = z.record(
z.string(),
z.unknown(),
)
export const zPatchDatasetsByDatasetIdDocumentsByDocumentIdSegmentByActionResponse
= zSimpleResultResponse
export const zDeleteDatasetsByDatasetIdDocumentsByDocumentIdSegmentsPath = z.object({
dataset_id: z.string(),
@ -1310,11 +1349,11 @@ export const zDeleteDatasetsByDatasetIdDocumentsByDocumentIdSegmentsPath = z.obj
})
/**
* Success
* Segments deleted successfully
*/
export const zDeleteDatasetsByDatasetIdDocumentsByDocumentIdSegmentsResponse = z.record(
z.string(),
z.unknown(),
z.never(),
)
export const zGetDatasetsByDatasetIdDocumentsByDocumentIdSegmentsPath = z.object({
@ -1336,12 +1375,10 @@ export const zGetDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBatchImportPath
})
/**
* Success
* Batch import status
*/
export const zGetDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBatchImportResponse = z.record(
z.string(),
z.unknown(),
)
export const zGetDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBatchImportResponse
= zSegmentBatchImportStatusResponse
export const zPostDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBatchImportBody
= zBatchImportPayload
@ -1352,12 +1389,10 @@ export const zPostDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBatchImportPat
})
/**
* Success
* Batch import started
*/
export const zPostDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBatchImportResponse = z.record(
z.string(),
z.unknown(),
)
export const zPostDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBatchImportResponse
= zSegmentBatchImportStatusResponse
export const zDeleteDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBySegmentIdPath = z.object({
dataset_id: z.string(),
@ -1366,11 +1401,11 @@ export const zDeleteDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBySegmentIdP
})
/**
* Success
* Segment deleted successfully
*/
export const zDeleteDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBySegmentIdResponse = z.record(
z.string(),
z.unknown(),
z.never(),
)
export const zPatchDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBySegmentIdBody
@ -1441,10 +1476,10 @@ export const zDeleteDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBySegmentIdC
})
/**
* Success
* Child chunk deleted successfully
*/
export const zDeleteDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBySegmentIdChildChunksByChildChunkIdResponse
= z.record(z.string(), z.unknown())
= z.record(z.string(), z.never())
export const zPatchDatasetsByDatasetIdDocumentsByDocumentIdSegmentsBySegmentIdChildChunksByChildChunkIdBody
= zChildChunkUpdatePayload
@ -1484,10 +1519,7 @@ export const zGetDatasetsByDatasetIdDocumentsByDocumentIdWebsiteSyncPath = z.obj
/**
* Success
*/
export const zGetDatasetsByDatasetIdDocumentsByDocumentIdWebsiteSyncResponse = z.record(
z.string(),
z.unknown(),
)
export const zGetDatasetsByDatasetIdDocumentsByDocumentIdWebsiteSyncResponse = zSimpleResultResponse
export const zGetDatasetsByDatasetIdErrorDocsPath = z.object({
dataset_id: z.string(),
@ -1557,10 +1589,7 @@ export const zPostDatasetsByDatasetIdMetadataBuiltInByActionPath = z.object({
/**
* Success
*/
export const zPostDatasetsByDatasetIdMetadataBuiltInByActionResponse = z.record(
z.string(),
z.unknown(),
)
export const zPostDatasetsByDatasetIdMetadataBuiltInByActionResponse = zSimpleResultResponse
export const zDeleteDatasetsByDatasetIdMetadataByMetadataIdPath = z.object({
dataset_id: z.string(),
@ -1568,11 +1597,11 @@ export const zDeleteDatasetsByDatasetIdMetadataByMetadataIdPath = z.object({
})
/**
* Success
* Metadata deleted successfully
*/
export const zDeleteDatasetsByDatasetIdMetadataByMetadataIdResponse = z.record(
z.string(),
z.unknown(),
z.never(),
)
export const zPatchDatasetsByDatasetIdMetadataByMetadataIdBody = zMetadataUpdatePayload
@ -1597,7 +1626,7 @@ export const zGetDatasetsByDatasetIdNotionSyncPath = z.object({
/**
* Success
*/
export const zGetDatasetsByDatasetIdNotionSyncResponse = z.record(z.string(), z.unknown())
export const zGetDatasetsByDatasetIdNotionSyncResponse = zSimpleResultResponse
export const zGetDatasetsByDatasetIdPermissionPartUsersPath = z.object({
dataset_id: z.string(),
@ -1633,9 +1662,9 @@ export const zPostDatasetsByDatasetIdRetryPath = z.object({
})
/**
* Success
* Documents retry started successfully
*/
export const zPostDatasetsByDatasetIdRetryResponse = z.record(z.string(), z.unknown())
export const zPostDatasetsByDatasetIdRetryResponse = z.record(z.string(), z.never())
export const zGetDatasetsByDatasetIdUseCheckPath = z.object({
dataset_id: z.string(),
@ -1644,7 +1673,7 @@ export const zGetDatasetsByDatasetIdUseCheckPath = z.object({
/**
* Dataset use status retrieved successfully
*/
export const zGetDatasetsByDatasetIdUseCheckResponse = z.record(z.string(), z.unknown())
export const zGetDatasetsByDatasetIdUseCheckResponse = zUsageCheckResponse
export const zGetDatasetsByResourceIdApiKeysPath = z.object({
resource_id: z.string(),

View File

@ -10,16 +10,8 @@ import {
zPostEmailCodeLoginValidityResponse,
} from './zod.gen'
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postEmailCodeLoginValidity',
@ -33,16 +25,8 @@ export const validity = {
post,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post2 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postEmailCodeLogin',

View File

@ -9,6 +9,11 @@ export type EmailPayload = {
language?: string | null
}
export type SimpleResultDataResponse = {
data: string
result: string
}
export type EmailCodeLoginPayload = {
code: string
email: string
@ -17,6 +22,10 @@ export type EmailCodeLoginPayload = {
token: string
}
export type SimpleResultResponse = {
result: string
}
export type PostEmailCodeLoginData = {
body: EmailPayload
path?: never
@ -25,9 +34,7 @@ export type PostEmailCodeLoginData = {
}
export type PostEmailCodeLoginResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultDataResponse
}
export type PostEmailCodeLoginResponse
@ -41,9 +48,7 @@ export type PostEmailCodeLoginValidityData = {
}
export type PostEmailCodeLoginValidityResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type PostEmailCodeLoginValidityResponse

View File

@ -10,6 +10,14 @@ export const zEmailPayload = z.object({
language: z.string().nullish(),
})
/**
* SimpleResultDataResponse
*/
export const zSimpleResultDataResponse = z.object({
data: z.string(),
result: z.string(),
})
/**
* EmailCodeLoginPayload
*/
@ -21,16 +29,23 @@ export const zEmailCodeLoginPayload = z.object({
token: z.string(),
})
/**
* SimpleResultResponse
*/
export const zSimpleResultResponse = z.object({
result: z.string(),
})
export const zPostEmailCodeLoginBody = zEmailPayload
/**
* Success
*/
export const zPostEmailCodeLoginResponse = z.record(z.string(), z.unknown())
export const zPostEmailCodeLoginResponse = zSimpleResultDataResponse
export const zPostEmailCodeLoginValidityBody = zEmailCodeLoginPayload
/**
* Success
*/
export const zPostEmailCodeLoginValidityResponse = z.record(z.string(), z.unknown())
export const zPostEmailCodeLoginValidityResponse = zSimpleResultResponse

View File

@ -4,6 +4,17 @@ export type ClientOptions = {
baseUrl: `${string}://${string}/console/api` | (string & {})
}
export type SimpleResultDataResponse = {
data: string
result: string
}
export type VerificationTokenResponse = {
email: string
is_valid: boolean
token: string
}
export type PostEmailRegisterData = {
body?: never
path?: never
@ -27,9 +38,7 @@ export type PostEmailRegisterSendEmailData = {
}
export type PostEmailRegisterSendEmailResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultDataResponse
}
export type PostEmailRegisterSendEmailResponse
@ -43,9 +52,7 @@ export type PostEmailRegisterValidityData = {
}
export type PostEmailRegisterValidityResponses = {
200: {
[key: string]: unknown
}
200: VerificationTokenResponse
}
export type PostEmailRegisterValidityResponse

View File

@ -2,6 +2,23 @@
import * as z from 'zod'
/**
* SimpleResultDataResponse
*/
export const zSimpleResultDataResponse = z.object({
data: z.string(),
result: z.string(),
})
/**
* VerificationTokenResponse
*/
export const zVerificationTokenResponse = z.object({
email: z.string(),
is_valid: z.boolean(),
token: z.string(),
})
/**
* Success
*/
@ -10,9 +27,9 @@ export const zPostEmailRegisterResponse = z.record(z.string(), z.unknown())
/**
* Success
*/
export const zPostEmailRegisterSendEmailResponse = z.record(z.string(), z.unknown())
export const zPostEmailRegisterSendEmailResponse = zSimpleResultDataResponse
/**
* Success
*/
export const zPostEmailRegisterValidityResponse = z.record(z.string(), z.unknown())
export const zPostEmailRegisterValidityResponse = zVerificationTokenResponse

View File

@ -8,16 +8,10 @@ import { zGetFeaturesResponse } from './zod.gen'
* Get feature configuration for current tenant
*
* Get feature configuration for current tenant
*
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const get = oc
.route({
deprecated: true,
description:
'Get feature configuration for current tenant\n\nGenerated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
description: 'Get feature configuration for current tenant',
inputStructure: 'detailed',
method: 'GET',
operationId: 'getFeatures',

View File

@ -4,10 +4,63 @@ export type ClientOptions = {
baseUrl: `${string}://${string}/console/api` | (string & {})
}
export type FeatureResponse = {
features?: {
[key: string]: unknown
}
export type FeatureModel = {
annotation_quota_limit: LimitationModel
api_rate_limit: Quota
apps: LimitationModel
billing: BillingModel
can_replace_logo: boolean
dataset_operator_enabled: boolean
docs_processing: string
documents_upload_quota: LimitationModel
education: EducationModel
human_input_email_delivery_enabled: boolean
is_allow_transfer_workspace: boolean
knowledge_pipeline: KnowledgePipeline
knowledge_rate_limit: number
members: LimitationModel
model_load_balancing_enabled: boolean
next_credit_reset_date: number
trigger_event: Quota
vector_space: LimitationModel
webapp_copyright_enabled: boolean
workspace_members: LicenseLimitationModel
}
export type LimitationModel = {
limit: number
size: number
}
export type Quota = {
limit: number
reset_date: number
usage: number
}
export type BillingModel = {
enabled: boolean
subscription: SubscriptionModel
}
export type EducationModel = {
activated: boolean
enabled: boolean
}
export type KnowledgePipeline = {
publish_enabled: boolean
}
export type LicenseLimitationModel = {
enabled: boolean
limit: number
size: number
}
export type SubscriptionModel = {
interval: string
plan: string
}
export type GetFeaturesData = {
@ -18,7 +71,7 @@ export type GetFeaturesData = {
}
export type GetFeaturesResponses = {
200: FeatureResponse
200: FeatureModel
}
export type GetFeaturesResponse = GetFeaturesResponses[keyof GetFeaturesResponses]

View File

@ -2,11 +2,94 @@
import * as z from 'zod'
export const zFeatureResponse = z.object({
features: z.record(z.string(), z.unknown()).optional(),
/**
* LimitationModel
*/
export const zLimitationModel = z.object({
limit: z.int().default(0),
size: z.int().default(0),
})
/**
* Quota
*/
export const zQuota = z.object({
limit: z.int().default(0),
reset_date: z.int().default(-1),
usage: z.int().default(0),
})
/**
* EducationModel
*/
export const zEducationModel = z.object({
activated: z.boolean().default(false),
enabled: z.boolean().default(false),
})
/**
* KnowledgePipeline
*/
export const zKnowledgePipeline = z.object({
publish_enabled: z.boolean().default(false),
})
/**
* LicenseLimitationModel
*
* - enabled: whether this limit is enforced
* - size: current usage count
* - limit: maximum allowed count; 0 means unlimited
*/
export const zLicenseLimitationModel = z.object({
enabled: z.boolean().default(false),
limit: z.int().default(0),
size: z.int().default(0),
})
/**
* SubscriptionModel
*/
export const zSubscriptionModel = z.object({
interval: z.string().default(''),
plan: z.string().default('sandbox'),
})
/**
* BillingModel
*/
export const zBillingModel = z.object({
enabled: z.boolean().default(false),
subscription: zSubscriptionModel,
})
/**
* FeatureModel
*/
export const zFeatureModel = z.object({
annotation_quota_limit: zLimitationModel,
api_rate_limit: zQuota,
apps: zLimitationModel,
billing: zBillingModel,
can_replace_logo: z.boolean().default(false),
dataset_operator_enabled: z.boolean().default(false),
docs_processing: z.string().default('standard'),
documents_upload_quota: zLimitationModel,
education: zEducationModel,
human_input_email_delivery_enabled: z.boolean().default(false),
is_allow_transfer_workspace: z.boolean().default(true),
knowledge_pipeline: zKnowledgePipeline,
knowledge_rate_limit: z.int().default(10),
members: zLimitationModel,
model_load_balancing_enabled: z.boolean().default(false),
next_credit_reset_date: z.int().default(0),
trigger_event: zQuota,
vector_space: zLimitationModel,
webapp_copyright_enabled: z.boolean().default(false),
workspace_members: zLicenseLimitationModel,
})
/**
* Success
*/
export const zGetFeaturesResponse = zFeatureResponse
export const zGetFeaturesResponse = zFeatureModel

View File

@ -11,16 +11,8 @@ import {
zPostFilesUploadResponse,
} from './zod.gen'
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const get = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'GET',
operationId: 'getFilesSupportType',
@ -59,16 +51,8 @@ export const upload = {
post,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const get3 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'GET',
operationId: 'getFilesByFileIdPreview',

View File

@ -4,6 +4,10 @@ export type ClientOptions = {
baseUrl: `${string}://${string}/console/api` | (string & {})
}
export type AllowedExtensionsResponse = {
allowed_extensions: Array<string>
}
export type UploadConfig = {
attachment_image_file_size_limit?: number | null
audio_file_size_limit: number
@ -34,6 +38,10 @@ export type FileResponse = {
user_id?: string | null
}
export type TextContentResponse = {
content: string
}
export type GetFilesSupportTypeData = {
body?: never
path?: never
@ -42,9 +50,7 @@ export type GetFilesSupportTypeData = {
}
export type GetFilesSupportTypeResponses = {
200: {
[key: string]: unknown
}
200: AllowedExtensionsResponse
}
export type GetFilesSupportTypeResponse
@ -86,9 +92,7 @@ export type GetFilesByFileIdPreviewData = {
}
export type GetFilesByFileIdPreviewResponses = {
200: {
[key: string]: unknown
}
200: TextContentResponse
}
export type GetFilesByFileIdPreviewResponse

View File

@ -2,6 +2,13 @@
import * as z from 'zod'
/**
* AllowedExtensionsResponse
*/
export const zAllowedExtensionsResponse = z.object({
allowed_extensions: z.array(z.string()),
})
/**
* UploadConfig
*/
@ -38,10 +45,17 @@ export const zFileResponse = z.object({
user_id: z.string().nullish(),
})
/**
* TextContentResponse
*/
export const zTextContentResponse = z.object({
content: z.string(),
})
/**
* Success
*/
export const zGetFilesSupportTypeResponse = z.record(z.string(), z.unknown())
export const zGetFilesSupportTypeResponse = zAllowedExtensionsResponse
/**
* Success
@ -60,4 +74,4 @@ export const zGetFilesByFileIdPreviewPath = z.object({
/**
* Success
*/
export const zGetFilesByFileIdPreviewResponse = z.record(z.string(), z.unknown())
export const zGetFilesByFileIdPreviewResponse = zTextContentResponse

View File

@ -90,16 +90,8 @@ export const audioToText = {
post,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post2 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postInstalledAppsByInstalledAppIdChatMessagesByTaskIdStop',
@ -146,16 +138,8 @@ export const chatMessages = {
byTaskId,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post4 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postInstalledAppsByInstalledAppIdCompletionMessagesByTaskIdStop',
@ -230,16 +214,8 @@ export const name = {
post: post6,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const patch = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'PATCH',
operationId: 'patchInstalledAppsByInstalledAppIdConversationsByCIdPin',
@ -253,16 +229,8 @@ export const pin = {
patch,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const patch2 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'PATCH',
operationId: 'patchInstalledAppsByInstalledAppIdConversationsByCIdUnpin',
@ -276,20 +244,13 @@ export const unpin = {
patch: patch2,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const delete_ = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'DELETE',
operationId: 'deleteInstalledAppsByInstalledAppIdConversationsByCId',
path: '/installed-apps/{installed_app_id}/conversations/{c_id}',
successStatus: 204,
tags: ['console'],
})
.input(z.object({ params: zDeleteInstalledAppsByInstalledAppIdConversationsByCIdPath }))
@ -331,16 +292,8 @@ export const conversations = {
byCId,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post7 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postInstalledAppsByInstalledAppIdMessagesByMessageIdFeedbacks',
@ -387,16 +340,8 @@ export const moreLikeThis = {
get: get2,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const get3 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'GET',
operationId: 'getInstalledAppsByInstalledAppIdMessagesByMessageIdSuggestedQuestions',
@ -501,20 +446,13 @@ export const parameters = {
get: get6,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const delete2 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'DELETE',
operationId: 'deleteInstalledAppsByInstalledAppIdSavedMessagesByMessageId',
path: '/installed-apps/{installed_app_id}/saved-messages/{message_id}',
successStatus: 204,
tags: ['console'],
})
.input(z.object({ params: zDeleteInstalledAppsByInstalledAppIdSavedMessagesByMessageIdPath }))
@ -548,16 +486,8 @@ export const get7 = oc
)
.output(zGetInstalledAppsByInstalledAppIdSavedMessagesResponse)
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post8 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postInstalledAppsByInstalledAppIdSavedMessages',
@ -639,16 +569,9 @@ export const run = {
/**
* Stop workflow task
*
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post11 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postInstalledAppsByInstalledAppIdWorkflowsTasksByTaskIdStop',
@ -676,20 +599,13 @@ export const workflows = {
tasks,
}
/**
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const delete3 = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'DELETE',
operationId: 'deleteInstalledAppsByInstalledAppId',
path: '/installed-apps/{installed_app_id}',
successStatus: 204,
tags: ['console'],
})
.input(z.object({ params: zDeleteInstalledAppsByInstalledAppIdPath }))

View File

@ -8,6 +8,15 @@ export type InstalledAppListResponse = {
installed_apps: Array<InstalledAppResponse>
}
export type SimpleMessageResponse = {
message: string
}
export type SimpleResultMessageResponse = {
message: string
result: string
}
export type ChatMessagePayload = {
conversation_id?: string | null
files?: Array<unknown> | null
@ -23,6 +32,10 @@ export type ChatMessagePayload = {
retriever_from?: string
}
export type SimpleResultResponse = {
result: string
}
export type CompletionMessageExplorePayload = {
files?: Array<{
[key: string]: unknown
@ -40,12 +53,20 @@ export type ConversationRenamePayload = {
name?: string | null
}
export type ResultResponse = {
result: string
}
export type MessageFeedbackPayload = {
content?: string | null
message_id: string
rating?: 'dislike' | 'like' | null
}
export type SuggestedQuestionsResponse = {
data: Array<string>
}
export type SavedMessageCreatePayload = {
message_id: string
}
@ -107,9 +128,7 @@ export type PostInstalledAppsData = {
}
export type PostInstalledAppsResponses = {
200: {
[key: string]: unknown
}
200: SimpleMessageResponse
}
export type PostInstalledAppsResponse = PostInstalledAppsResponses[keyof PostInstalledAppsResponses]
@ -124,8 +143,8 @@ export type DeleteInstalledAppsByInstalledAppIdData = {
}
export type DeleteInstalledAppsByInstalledAppIdResponses = {
200: {
[key: string]: unknown
204: {
[key: string]: never
}
}
@ -142,9 +161,7 @@ export type PatchInstalledAppsByInstalledAppIdData = {
}
export type PatchInstalledAppsByInstalledAppIdResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultMessageResponse
}
export type PatchInstalledAppsByInstalledAppIdResponse
@ -197,9 +214,7 @@ export type PostInstalledAppsByInstalledAppIdChatMessagesByTaskIdStopData = {
}
export type PostInstalledAppsByInstalledAppIdChatMessagesByTaskIdStopResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type PostInstalledAppsByInstalledAppIdChatMessagesByTaskIdStopResponse
@ -234,9 +249,7 @@ export type PostInstalledAppsByInstalledAppIdCompletionMessagesByTaskIdStopData
}
export type PostInstalledAppsByInstalledAppIdCompletionMessagesByTaskIdStopResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type PostInstalledAppsByInstalledAppIdCompletionMessagesByTaskIdStopResponse
@ -275,8 +288,8 @@ export type DeleteInstalledAppsByInstalledAppIdConversationsByCIdData = {
}
export type DeleteInstalledAppsByInstalledAppIdConversationsByCIdResponses = {
200: {
[key: string]: unknown
204: {
[key: string]: never
}
}
@ -313,9 +326,7 @@ export type PatchInstalledAppsByInstalledAppIdConversationsByCIdPinData = {
}
export type PatchInstalledAppsByInstalledAppIdConversationsByCIdPinResponses = {
200: {
[key: string]: unknown
}
200: ResultResponse
}
export type PatchInstalledAppsByInstalledAppIdConversationsByCIdPinResponse
@ -332,9 +343,7 @@ export type PatchInstalledAppsByInstalledAppIdConversationsByCIdUnpinData = {
}
export type PatchInstalledAppsByInstalledAppIdConversationsByCIdUnpinResponses = {
200: {
[key: string]: unknown
}
200: ResultResponse
}
export type PatchInstalledAppsByInstalledAppIdConversationsByCIdUnpinResponse
@ -373,9 +382,7 @@ export type PostInstalledAppsByInstalledAppIdMessagesByMessageIdFeedbacksData =
}
export type PostInstalledAppsByInstalledAppIdMessagesByMessageIdFeedbacksResponses = {
200: {
[key: string]: unknown
}
200: ResultResponse
}
export type PostInstalledAppsByInstalledAppIdMessagesByMessageIdFeedbacksResponse
@ -413,9 +420,7 @@ export type GetInstalledAppsByInstalledAppIdMessagesByMessageIdSuggestedQuestion
}
export type GetInstalledAppsByInstalledAppIdMessagesByMessageIdSuggestedQuestionsResponses = {
200: {
[key: string]: unknown
}
200: SuggestedQuestionsResponse
}
export type GetInstalledAppsByInstalledAppIdMessagesByMessageIdSuggestedQuestionsResponse
@ -488,9 +493,7 @@ export type PostInstalledAppsByInstalledAppIdSavedMessagesData = {
}
export type PostInstalledAppsByInstalledAppIdSavedMessagesResponses = {
200: {
[key: string]: unknown
}
200: ResultResponse
}
export type PostInstalledAppsByInstalledAppIdSavedMessagesResponse
@ -507,8 +510,8 @@ export type DeleteInstalledAppsByInstalledAppIdSavedMessagesByMessageIdData = {
}
export type DeleteInstalledAppsByInstalledAppIdSavedMessagesByMessageIdResponses = {
200: {
[key: string]: unknown
204: {
[key: string]: never
}
}
@ -562,9 +565,7 @@ export type PostInstalledAppsByInstalledAppIdWorkflowsTasksByTaskIdStopData = {
}
export type PostInstalledAppsByInstalledAppIdWorkflowsTasksByTaskIdStopResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultResponse
}
export type PostInstalledAppsByInstalledAppIdWorkflowsTasksByTaskIdStopResponse

View File

@ -2,6 +2,21 @@
import * as z from 'zod'
/**
* SimpleMessageResponse
*/
export const zSimpleMessageResponse = z.object({
message: z.string(),
})
/**
* SimpleResultMessageResponse
*/
export const zSimpleResultMessageResponse = z.object({
message: z.string(),
result: z.string(),
})
/**
* ChatMessagePayload
*/
@ -16,6 +31,13 @@ export const zChatMessagePayload = z.object({
retriever_from: z.string().optional().default('dev'),
})
/**
* SimpleResultResponse
*/
export const zSimpleResultResponse = z.object({
result: z.string(),
})
/**
* CompletionMessageExplorePayload
*/
@ -35,6 +57,13 @@ export const zConversationRenamePayload = z.object({
name: z.string().nullish(),
})
/**
* ResultResponse
*/
export const zResultResponse = z.object({
result: z.string(),
})
/**
* MessageFeedbackPayload
*/
@ -44,6 +73,13 @@ export const zMessageFeedbackPayload = z.object({
rating: z.enum(['dislike', 'like']).nullish(),
})
/**
* SuggestedQuestionsResponse
*/
export const zSuggestedQuestionsResponse = z.object({
data: z.array(z.string()),
})
/**
* SavedMessageCreatePayload
*/
@ -110,16 +146,16 @@ export const zGetInstalledAppsResponse = zInstalledAppListResponse
/**
* Success
*/
export const zPostInstalledAppsResponse = z.record(z.string(), z.unknown())
export const zPostInstalledAppsResponse = zSimpleMessageResponse
export const zDeleteInstalledAppsByInstalledAppIdPath = z.object({
installed_app_id: z.string(),
})
/**
* Success
* App uninstalled successfully
*/
export const zDeleteInstalledAppsByInstalledAppIdResponse = z.record(z.string(), z.unknown())
export const zDeleteInstalledAppsByInstalledAppIdResponse = z.record(z.string(), z.never())
export const zPatchInstalledAppsByInstalledAppIdPath = z.object({
installed_app_id: z.string(),
@ -128,7 +164,7 @@ export const zPatchInstalledAppsByInstalledAppIdPath = z.object({
/**
* Success
*/
export const zPatchInstalledAppsByInstalledAppIdResponse = z.record(z.string(), z.unknown())
export const zPatchInstalledAppsByInstalledAppIdResponse = zSimpleResultMessageResponse
export const zPostInstalledAppsByInstalledAppIdAudioToTextPath = z.object({
installed_app_id: z.string(),
@ -164,10 +200,8 @@ export const zPostInstalledAppsByInstalledAppIdChatMessagesByTaskIdStopPath = z.
/**
* Success
*/
export const zPostInstalledAppsByInstalledAppIdChatMessagesByTaskIdStopResponse = z.record(
z.string(),
z.unknown(),
)
export const zPostInstalledAppsByInstalledAppIdChatMessagesByTaskIdStopResponse
= zSimpleResultResponse
export const zPostInstalledAppsByInstalledAppIdCompletionMessagesBody
= zCompletionMessageExplorePayload
@ -192,10 +226,8 @@ export const zPostInstalledAppsByInstalledAppIdCompletionMessagesByTaskIdStopPat
/**
* Success
*/
export const zPostInstalledAppsByInstalledAppIdCompletionMessagesByTaskIdStopResponse = z.record(
z.string(),
z.unknown(),
)
export const zPostInstalledAppsByInstalledAppIdCompletionMessagesByTaskIdStopResponse
= zSimpleResultResponse
export const zGetInstalledAppsByInstalledAppIdConversationsPath = z.object({
installed_app_id: z.string(),
@ -221,11 +253,11 @@ export const zDeleteInstalledAppsByInstalledAppIdConversationsByCIdPath = z.obje
})
/**
* Success
* Conversation deleted successfully
*/
export const zDeleteInstalledAppsByInstalledAppIdConversationsByCIdResponse = z.record(
z.string(),
z.unknown(),
z.never(),
)
export const zPostInstalledAppsByInstalledAppIdConversationsByCIdNameBody
@ -252,10 +284,7 @@ export const zPatchInstalledAppsByInstalledAppIdConversationsByCIdPinPath = z.ob
/**
* Success
*/
export const zPatchInstalledAppsByInstalledAppIdConversationsByCIdPinResponse = z.record(
z.string(),
z.unknown(),
)
export const zPatchInstalledAppsByInstalledAppIdConversationsByCIdPinResponse = zResultResponse
export const zPatchInstalledAppsByInstalledAppIdConversationsByCIdUnpinPath = z.object({
c_id: z.string(),
@ -265,10 +294,7 @@ export const zPatchInstalledAppsByInstalledAppIdConversationsByCIdUnpinPath = z.
/**
* Success
*/
export const zPatchInstalledAppsByInstalledAppIdConversationsByCIdUnpinResponse = z.record(
z.string(),
z.unknown(),
)
export const zPatchInstalledAppsByInstalledAppIdConversationsByCIdUnpinResponse = zResultResponse
export const zGetInstalledAppsByInstalledAppIdMessagesPath = z.object({
installed_app_id: z.string(),
@ -294,12 +320,10 @@ export const zPostInstalledAppsByInstalledAppIdMessagesByMessageIdFeedbacksPath
})
/**
* Success
* Feedback submitted successfully
*/
export const zPostInstalledAppsByInstalledAppIdMessagesByMessageIdFeedbacksResponse = z.record(
z.string(),
z.unknown(),
)
export const zPostInstalledAppsByInstalledAppIdMessagesByMessageIdFeedbacksResponse
= zResultResponse
export const zGetInstalledAppsByInstalledAppIdMessagesByMessageIdMoreLikeThisPath = z.object({
installed_app_id: z.string(),
@ -327,7 +351,7 @@ export const zGetInstalledAppsByInstalledAppIdMessagesByMessageIdSuggestedQuesti
* Success
*/
export const zGetInstalledAppsByInstalledAppIdMessagesByMessageIdSuggestedQuestionsResponse
= z.record(z.string(), z.unknown())
= zSuggestedQuestionsResponse
export const zGetInstalledAppsByInstalledAppIdMetaPath = z.object({
installed_app_id: z.string(),
@ -373,10 +397,7 @@ export const zPostInstalledAppsByInstalledAppIdSavedMessagesPath = z.object({
/**
* Success
*/
export const zPostInstalledAppsByInstalledAppIdSavedMessagesResponse = z.record(
z.string(),
z.unknown(),
)
export const zPostInstalledAppsByInstalledAppIdSavedMessagesResponse = zResultResponse
export const zDeleteInstalledAppsByInstalledAppIdSavedMessagesByMessageIdPath = z.object({
installed_app_id: z.string(),
@ -384,11 +405,11 @@ export const zDeleteInstalledAppsByInstalledAppIdSavedMessagesByMessageIdPath =
})
/**
* Success
* Saved message deleted successfully
*/
export const zDeleteInstalledAppsByInstalledAppIdSavedMessagesByMessageIdResponse = z.record(
z.string(),
z.unknown(),
z.never(),
)
export const zPostInstalledAppsByInstalledAppIdTextToAudioBody = zTextToAudioPayload
@ -427,7 +448,5 @@ export const zPostInstalledAppsByInstalledAppIdWorkflowsTasksByTaskIdStopPath =
/**
* Success
*/
export const zPostInstalledAppsByInstalledAppIdWorkflowsTasksByTaskIdStopResponse = z.record(
z.string(),
z.unknown(),
)
export const zPostInstalledAppsByInstalledAppIdWorkflowsTasksByTaskIdStopResponse
= zSimpleResultResponse

View File

@ -7,16 +7,9 @@ import { zPostLoginBody, zPostLoginResponse } from './zod.gen'
/**
* Authenticate user and login
*
* Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.
*
* @deprecated
*/
export const post = oc
.route({
deprecated: true,
description:
'Generated contract types may be inaccurate because backend OpenAPI annotations are incomplete. Do not migrate callers until the generated contract is accurate.',
inputStructure: 'detailed',
method: 'POST',
operationId: 'postLogin',

View File

@ -11,6 +11,11 @@ export type LoginPayload = {
remember_me?: boolean
}
export type SimpleResultOptionalDataResponse = {
data?: string | null
result: string
}
export type PostLoginData = {
body: LoginPayload
path?: never
@ -19,9 +24,7 @@ export type PostLoginData = {
}
export type PostLoginResponses = {
200: {
[key: string]: unknown
}
200: SimpleResultOptionalDataResponse
}
export type PostLoginResponse = PostLoginResponses[keyof PostLoginResponses]

Some files were not shown because too many files have changed in this diff Show More