dify-oapi2 0.1.1__py3-none-any.whl → 0.3.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. dify_oapi/api/completion/v1/model/annotation/annotation_info.py +43 -0
  2. dify_oapi/api/completion/v1/model/annotation/annotation_reply_settings_request.py +39 -0
  3. dify_oapi/api/completion/v1/model/annotation/annotation_reply_settings_request_body.py +33 -0
  4. dify_oapi/api/completion/v1/model/annotation/annotation_reply_settings_response.py +9 -0
  5. dify_oapi/api/completion/v1/model/annotation/create_annotation_request.py +32 -0
  6. dify_oapi/api/completion/v1/model/annotation/create_annotation_request_body.py +28 -0
  7. dify_oapi/api/completion/v1/model/annotation/create_annotation_response.py +9 -0
  8. dify_oapi/api/completion/v1/model/annotation/delete_annotation_request.py +30 -0
  9. dify_oapi/api/completion/v1/model/annotation/delete_annotation_response.py +7 -0
  10. dify_oapi/api/completion/v1/model/annotation/job_status_info.py +35 -0
  11. dify_oapi/api/completion/v1/model/annotation/list_annotations_request.py +32 -0
  12. dify_oapi/api/completion/v1/model/annotation/list_annotations_response.py +13 -0
  13. dify_oapi/api/completion/v1/model/annotation/query_annotation_reply_status_request.py +38 -0
  14. dify_oapi/api/completion/v1/model/annotation/query_annotation_reply_status_response.py +9 -0
  15. dify_oapi/api/completion/v1/model/annotation/update_annotation_request.py +38 -0
  16. dify_oapi/api/completion/v1/model/annotation/update_annotation_request_body.py +28 -0
  17. dify_oapi/api/completion/v1/model/annotation/update_annotation_response.py +9 -0
  18. dify_oapi/api/completion/v1/model/audio/audio_info.py +28 -0
  19. dify_oapi/api/completion/v1/model/audio/text_to_audio_request.py +32 -0
  20. dify_oapi/api/completion/v1/model/audio/text_to_audio_request_body.py +33 -0
  21. dify_oapi/api/completion/v1/model/audio/text_to_audio_response.py +9 -0
  22. dify_oapi/api/completion/v1/model/completion/completion_inputs.py +28 -0
  23. dify_oapi/api/completion/v1/model/completion/completion_message_info.py +46 -0
  24. dify_oapi/api/completion/v1/model/completion/completion_types.py +27 -0
  25. dify_oapi/api/completion/v1/model/completion/metadata.py +31 -0
  26. dify_oapi/api/completion/v1/model/completion/retriever_resource.py +58 -0
  27. dify_oapi/api/completion/v1/model/completion/send_message_request.py +32 -0
  28. dify_oapi/api/completion/v1/model/completion/send_message_request_body.py +76 -0
  29. dify_oapi/api/completion/v1/model/completion/send_message_response.py +9 -0
  30. dify_oapi/api/completion/v1/model/completion/stop_response_request.py +38 -0
  31. dify_oapi/api/completion/v1/model/completion/stop_response_request_body.py +23 -0
  32. dify_oapi/api/completion/v1/model/{stop_completion_response.py → completion/stop_response_response.py} +3 -1
  33. dify_oapi/api/completion/v1/model/completion/usage.py +78 -0
  34. dify_oapi/api/completion/v1/model/feedback/feedback_info.py +53 -0
  35. dify_oapi/api/completion/v1/model/feedback/get_feedbacks_request.py +32 -0
  36. dify_oapi/api/completion/v1/model/feedback/get_feedbacks_response.py +9 -0
  37. dify_oapi/api/completion/v1/model/feedback/message_feedback_request.py +38 -0
  38. dify_oapi/api/completion/v1/model/feedback/message_feedback_request_body.py +35 -0
  39. dify_oapi/api/completion/v1/model/feedback/message_feedback_response.py +7 -0
  40. dify_oapi/api/completion/v1/model/file/file_info.py +53 -0
  41. dify_oapi/api/completion/v1/model/file/upload_file_request.py +42 -0
  42. dify_oapi/api/completion/v1/model/file/upload_file_request_body.py +23 -0
  43. dify_oapi/api/completion/v1/model/file/upload_file_response.py +9 -0
  44. dify_oapi/api/completion/v1/model/info/app_info.py +43 -0
  45. dify_oapi/api/completion/v1/model/info/file_upload_config.py +23 -0
  46. dify_oapi/api/completion/v1/model/info/get_info_request.py +24 -0
  47. dify_oapi/api/completion/v1/model/info/get_info_response.py +9 -0
  48. dify_oapi/api/completion/v1/model/info/get_parameters_request.py +24 -0
  49. dify_oapi/api/completion/v1/model/info/get_parameters_response.py +9 -0
  50. dify_oapi/api/completion/v1/model/info/get_site_request.py +24 -0
  51. dify_oapi/api/completion/v1/model/info/get_site_response.py +9 -0
  52. dify_oapi/api/completion/v1/model/info/parameters_info.py +67 -0
  53. dify_oapi/api/completion/v1/model/info/site_info.py +90 -0
  54. dify_oapi/api/completion/v1/model/info/system_parameters.py +38 -0
  55. dify_oapi/api/completion/v1/model/info/user_input_form.py +43 -0
  56. dify_oapi/api/completion/v1/resource/__init__.py +5 -0
  57. dify_oapi/api/completion/v1/resource/annotation.py +99 -0
  58. dify_oapi/api/completion/v1/resource/audio.py +19 -0
  59. dify_oapi/api/completion/v1/resource/completion.py +36 -46
  60. dify_oapi/api/completion/v1/resource/feedback.py +33 -0
  61. dify_oapi/api/completion/v1/resource/file.py +19 -0
  62. dify_oapi/api/completion/v1/resource/info.py +39 -0
  63. dify_oapi/api/completion/v1/version.py +11 -1
  64. dify_oapi/api/knowledge_base/v1/model/dataset/create_request_body.py +3 -4
  65. dify_oapi/api/knowledge_base/v1/model/dataset/dataset_types.py +36 -0
  66. dify_oapi/api/knowledge_base/v1/model/dataset/retrieval_model.py +3 -6
  67. dify_oapi/api/knowledge_base/v1/model/document/create_by_text_request_body.py +7 -12
  68. dify_oapi/api/knowledge_base/v1/model/document/document_types.py +36 -0
  69. dify_oapi/api/knowledge_base/v1/model/metadata/metadata_types.py +15 -0
  70. dify_oapi/api/knowledge_base/v1/model/segment/segment_types.py +24 -0
  71. dify_oapi/api/knowledge_base/v1/model/tag/tag_types.py +12 -0
  72. dify_oapi/api/knowledge_base/v1/model/tag/update_response.py +5 -1
  73. dify_oapi/api/workflow/v1/model/file/__init__.py +1 -0
  74. dify_oapi/api/workflow/v1/model/file/file_info.py +53 -0
  75. dify_oapi/api/workflow/v1/model/file/preview_file_request.py +34 -0
  76. dify_oapi/api/workflow/v1/model/file/preview_file_response.py +9 -0
  77. dify_oapi/api/workflow/v1/model/file/upload_file_request.py +42 -0
  78. dify_oapi/api/workflow/v1/model/file/upload_file_request_body.py +23 -0
  79. dify_oapi/api/workflow/v1/model/file/upload_file_response.py +9 -0
  80. dify_oapi/api/workflow/v1/model/info/app_info.py +45 -0
  81. dify_oapi/api/workflow/v1/model/info/file_upload_config.py +45 -0
  82. dify_oapi/api/workflow/v1/model/info/get_info_request.py +24 -0
  83. dify_oapi/api/workflow/v1/model/info/get_info_response.py +9 -0
  84. dify_oapi/api/workflow/v1/model/info/get_parameters_request.py +24 -0
  85. dify_oapi/api/workflow/v1/model/info/get_parameters_response.py +9 -0
  86. dify_oapi/api/workflow/v1/model/info/get_site_request.py +24 -0
  87. dify_oapi/api/workflow/v1/model/info/get_site_response.py +9 -0
  88. dify_oapi/api/workflow/v1/model/info/parameters_info.py +37 -0
  89. dify_oapi/api/workflow/v1/model/info/site_info.py +75 -0
  90. dify_oapi/api/workflow/v1/model/info/system_parameters.py +38 -0
  91. dify_oapi/api/workflow/v1/model/info/user_input_form.py +43 -0
  92. dify_oapi/api/workflow/v1/model/log/__init__.py +0 -0
  93. dify_oapi/api/workflow/v1/model/log/end_user_info.py +38 -0
  94. dify_oapi/api/workflow/v1/model/log/get_workflow_logs_request.py +48 -0
  95. dify_oapi/api/workflow/v1/model/log/get_workflow_logs_response.py +13 -0
  96. dify_oapi/api/workflow/v1/model/log/log_info.py +57 -0
  97. dify_oapi/api/workflow/v1/model/log/workflow_run_log_info.py +65 -0
  98. dify_oapi/api/workflow/v1/model/workflow/execution_metadata.py +33 -0
  99. dify_oapi/api/workflow/v1/model/workflow/get_workflow_run_detail_request.py +30 -0
  100. dify_oapi/api/workflow/v1/model/{run_workflow_response.py → workflow/get_workflow_run_detail_response.py} +8 -11
  101. dify_oapi/api/workflow/v1/model/workflow/node_info.py +88 -0
  102. dify_oapi/api/workflow/v1/model/workflow/run_specific_workflow_request.py +38 -0
  103. dify_oapi/api/workflow/v1/model/workflow/run_specific_workflow_request_body.py +47 -0
  104. dify_oapi/api/workflow/v1/model/workflow/run_specific_workflow_response.py +9 -0
  105. dify_oapi/api/workflow/v1/model/{run_workflow_request.py → workflow/run_workflow_request.py} +4 -4
  106. dify_oapi/api/workflow/v1/model/workflow/run_workflow_request_body.py +47 -0
  107. dify_oapi/api/workflow/v1/model/workflow/run_workflow_response.py +9 -0
  108. dify_oapi/api/workflow/v1/model/{stop_workflow_request.py → workflow/stop_workflow_request.py} +9 -9
  109. dify_oapi/api/workflow/v1/model/{stop_workflow_request_body.py → workflow/stop_workflow_request_body.py} +3 -3
  110. dify_oapi/api/workflow/v1/model/{stop_workflow_response.py → workflow/stop_workflow_response.py} +2 -0
  111. dify_oapi/api/workflow/v1/model/workflow/streaming_event.py +42 -0
  112. dify_oapi/api/workflow/v1/model/workflow/workflow_file_info.py +40 -0
  113. dify_oapi/api/workflow/v1/model/workflow/workflow_inputs.py +56 -0
  114. dify_oapi/api/workflow/v1/model/workflow/workflow_run_data.py +72 -0
  115. dify_oapi/api/workflow/v1/model/workflow/workflow_run_info.py +35 -0
  116. dify_oapi/api/workflow/v1/model/workflow/workflow_types.py +54 -0
  117. dify_oapi/api/workflow/v1/resource/__init__.py +0 -1
  118. dify_oapi/api/workflow/v1/resource/file.py +63 -0
  119. dify_oapi/api/workflow/v1/resource/info.py +93 -0
  120. dify_oapi/api/workflow/v1/resource/log.py +43 -0
  121. dify_oapi/api/workflow/v1/resource/workflow.py +171 -53
  122. dify_oapi/api/workflow/v1/version.py +7 -1
  123. dify_oapi/core/http/transport/_misc.py +54 -14
  124. {dify_oapi2-0.1.1.dist-info → dify_oapi2-0.3.0.dist-info}/METADATA +10 -6
  125. {dify_oapi2-0.1.1.dist-info → dify_oapi2-0.3.0.dist-info}/RECORD +127 -34
  126. dify_oapi/api/completion/v1/model/completion_request.py +0 -34
  127. dify_oapi/api/completion/v1/model/completion_request_body.py +0 -43
  128. dify_oapi/api/completion/v1/model/completion_request_body_input.py +0 -38
  129. dify_oapi/api/completion/v1/model/completion_request_file.py +0 -49
  130. dify_oapi/api/completion/v1/model/completion_response.py +0 -18
  131. dify_oapi/api/completion/v1/model/stop_completion_request.py +0 -38
  132. dify_oapi/api/completion/v1/model/stop_completion_request_body.py +0 -23
  133. dify_oapi/api/workflow/v1/model/get_workflow_log_request.py +0 -50
  134. dify_oapi/api/workflow/v1/model/get_workflow_log_response.py +0 -42
  135. dify_oapi/api/workflow/v1/model/get_workflow_result_request.py +0 -30
  136. dify_oapi/api/workflow/v1/model/get_workflow_result_response.py +0 -17
  137. dify_oapi/api/workflow/v1/model/run_workflow_request_body.py +0 -42
  138. dify_oapi/api/workflow/v1/model/run_workflow_request_file.py +0 -50
  139. {dify_oapi2-0.1.1.dist-info → dify_oapi2-0.3.0.dist-info}/LICENSE +0 -0
  140. {dify_oapi2-0.1.1.dist-info → dify_oapi2-0.3.0.dist-info}/WHEEL +0 -0
@@ -0,0 +1,33 @@
1
+ from __future__ import annotations
2
+
3
+ from dify_oapi.core.http.transport import ATransport, Transport
4
+ from dify_oapi.core.model.config import Config
5
+ from dify_oapi.core.model.request_option import RequestOption
6
+
7
+ from ..model.feedback.get_feedbacks_request import GetFeedbacksRequest
8
+ from ..model.feedback.get_feedbacks_response import GetFeedbacksResponse
9
+ from ..model.feedback.message_feedback_request import MessageFeedbackRequest
10
+ from ..model.feedback.message_feedback_response import MessageFeedbackResponse
11
+
12
+
13
+ class Feedback:
14
+ def __init__(self, config: Config) -> None:
15
+ self.config: Config = config
16
+
17
+ def message_feedback(
18
+ self, request: MessageFeedbackRequest, request_option: RequestOption
19
+ ) -> MessageFeedbackResponse:
20
+ return Transport.execute(self.config, request, unmarshal_as=MessageFeedbackResponse, option=request_option)
21
+
22
+ async def amessage_feedback(
23
+ self, request: MessageFeedbackRequest, request_option: RequestOption
24
+ ) -> MessageFeedbackResponse:
25
+ return await ATransport.aexecute(
26
+ self.config, request, unmarshal_as=MessageFeedbackResponse, option=request_option
27
+ )
28
+
29
+ def get_feedbacks(self, request: GetFeedbacksRequest, request_option: RequestOption) -> GetFeedbacksResponse:
30
+ return Transport.execute(self.config, request, unmarshal_as=GetFeedbacksResponse, option=request_option)
31
+
32
+ async def aget_feedbacks(self, request: GetFeedbacksRequest, request_option: RequestOption) -> GetFeedbacksResponse:
33
+ return await ATransport.aexecute(self.config, request, unmarshal_as=GetFeedbacksResponse, option=request_option)
@@ -0,0 +1,19 @@
1
+ from __future__ import annotations
2
+
3
+ from dify_oapi.core.http.transport import ATransport, Transport
4
+ from dify_oapi.core.model.config import Config
5
+ from dify_oapi.core.model.request_option import RequestOption
6
+
7
+ from ..model.file.upload_file_request import UploadFileRequest
8
+ from ..model.file.upload_file_response import UploadFileResponse
9
+
10
+
11
+ class File:
12
+ def __init__(self, config: Config) -> None:
13
+ self.config: Config = config
14
+
15
+ def upload_file(self, request: UploadFileRequest, request_option: RequestOption) -> UploadFileResponse:
16
+ return Transport.execute(self.config, request, unmarshal_as=UploadFileResponse, option=request_option)
17
+
18
+ async def aupload_file(self, request: UploadFileRequest, request_option: RequestOption) -> UploadFileResponse:
19
+ return await ATransport.aexecute(self.config, request, unmarshal_as=UploadFileResponse, option=request_option)
@@ -0,0 +1,39 @@
1
+ from __future__ import annotations
2
+
3
+ from dify_oapi.core.http.transport import ATransport, Transport
4
+ from dify_oapi.core.model.config import Config
5
+ from dify_oapi.core.model.request_option import RequestOption
6
+
7
+ from ..model.info.get_info_request import GetInfoRequest
8
+ from ..model.info.get_info_response import GetInfoResponse
9
+ from ..model.info.get_parameters_request import GetParametersRequest
10
+ from ..model.info.get_parameters_response import GetParametersResponse
11
+ from ..model.info.get_site_request import GetSiteRequest
12
+ from ..model.info.get_site_response import GetSiteResponse
13
+
14
+
15
+ class Info:
16
+ def __init__(self, config: Config) -> None:
17
+ self.config: Config = config
18
+
19
+ def get_info(self, request: GetInfoRequest, request_option: RequestOption) -> GetInfoResponse:
20
+ return Transport.execute(self.config, request, unmarshal_as=GetInfoResponse, option=request_option)
21
+
22
+ async def aget_info(self, request: GetInfoRequest, request_option: RequestOption) -> GetInfoResponse:
23
+ return await ATransport.aexecute(self.config, request, unmarshal_as=GetInfoResponse, option=request_option)
24
+
25
+ def get_parameters(self, request: GetParametersRequest, request_option: RequestOption) -> GetParametersResponse:
26
+ return Transport.execute(self.config, request, unmarshal_as=GetParametersResponse, option=request_option)
27
+
28
+ async def aget_parameters(
29
+ self, request: GetParametersRequest, request_option: RequestOption
30
+ ) -> GetParametersResponse:
31
+ return await ATransport.aexecute(
32
+ self.config, request, unmarshal_as=GetParametersResponse, option=request_option
33
+ )
34
+
35
+ def get_site(self, request: GetSiteRequest, request_option: RequestOption) -> GetSiteResponse:
36
+ return Transport.execute(self.config, request, unmarshal_as=GetSiteResponse, option=request_option)
37
+
38
+ async def aget_site(self, request: GetSiteRequest, request_option: RequestOption) -> GetSiteResponse:
39
+ return await ATransport.aexecute(self.config, request, unmarshal_as=GetSiteResponse, option=request_option)
@@ -1,8 +1,18 @@
1
1
  from dify_oapi.core.model.config import Config
2
2
 
3
- from .resource import Completion
3
+ from .resource.annotation import Annotation
4
+ from .resource.audio import Audio
5
+ from .resource.completion import Completion
6
+ from .resource.feedback import Feedback
7
+ from .resource.file import File
8
+ from .resource.info import Info
4
9
 
5
10
 
6
11
  class V1:
7
12
  def __init__(self, config: Config):
8
13
  self.completion: Completion = Completion(config)
14
+ self.file: File = File(config)
15
+ self.feedback: Feedback = Feedback(config)
16
+ self.audio: Audio = Audio(config)
17
+ self.info: Info = Info(config)
18
+ self.annotation: Annotation = Annotation(config)
@@ -1,16 +1,15 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Literal
4
-
5
3
  from pydantic import BaseModel
6
4
 
5
+ from .dataset_types import IndexingTechnique
7
6
  from .retrieval_model import RetrievalModel
8
7
 
9
8
 
10
9
  class CreateRequestBody(BaseModel):
11
10
  name: str | None = None
12
11
  description: str | None = None
13
- indexing_technique: str | None = None
12
+ indexing_technique: IndexingTechnique | None = None
14
13
  permission: str | None = None
15
14
  provider: str | None = None
16
15
  external_knowledge_api_id: str | None = None
@@ -40,7 +39,7 @@ class CreateRequestBodyBuilder:
40
39
  self._create_request_body.description = description
41
40
  return self
42
41
 
43
- def indexing_technique(self, indexing_technique: Literal["high_quality", "economy"]) -> CreateRequestBodyBuilder:
42
+ def indexing_technique(self, indexing_technique: IndexingTechnique) -> CreateRequestBodyBuilder:
44
43
  self._create_request_body.indexing_technique = indexing_technique
45
44
  return self
46
45
 
@@ -0,0 +1,36 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Literal
4
+
5
+ # Indexing technique types
6
+ IndexingTechnique = Literal["high_quality", "economy"]
7
+
8
+ # Search method types
9
+ SearchMethod = Literal["keyword_search", "semantic_search", "full_text_search", "hybrid_search"]
10
+
11
+ # Reranking model types
12
+ RerankingModelType = Literal["rerank-model"]
13
+
14
+ # Processing rule mode types
15
+ ProcessingRuleMode = Literal["automatic", "custom"]
16
+
17
+ # Data source types
18
+ DataSourceType = Literal["upload_file", "notion_import", "website_crawl"]
19
+
20
+ # Document status types
21
+ DocumentStatus = Literal["indexing", "completed", "error", "paused"]
22
+
23
+ # Metadata field types
24
+ MetadataFieldType = Literal["text", "number", "select"]
25
+
26
+ # Tag types
27
+ TagType = Literal["knowledge", "custom"]
28
+
29
+ # Built-in metadata actions
30
+ BuiltinMetadataAction = Literal["enable", "disable"]
31
+
32
+ # Filter operator types
33
+ FilterOperator = Literal["contains", "not_contains", "is", "is_not", "is_empty", "is_not_empty"]
34
+
35
+ # Reranking enable types
36
+ RerankingEnable = Literal[True, False]
@@ -1,9 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Literal
4
-
5
3
  from pydantic import BaseModel
6
4
 
5
+ from .dataset_types import SearchMethod
7
6
  from .metadata_filtering_conditions import MetadataFilteringConditions
8
7
  from .reranking_model import RerankingModel
9
8
 
@@ -84,7 +83,7 @@ class WeightsBuilder:
84
83
 
85
84
 
86
85
  class RetrievalModel(BaseModel):
87
- search_method: str | None = None
86
+ search_method: SearchMethod | None = None
88
87
  reranking_enable: bool | None = None
89
88
  reranking_mode: str | None = None
90
89
  reranking_model: RerankingModel | None = None
@@ -106,9 +105,7 @@ class RetrievalModelBuilder:
106
105
  def build(self) -> RetrievalModel:
107
106
  return self._retrieval_model
108
107
 
109
- def search_method(
110
- self, search_method: Literal["keyword_search", "semantic_search", "full_text_search", "hybrid_search"]
111
- ) -> RetrievalModelBuilder:
108
+ def search_method(self, search_method: SearchMethod) -> RetrievalModelBuilder:
112
109
  self._retrieval_model.search_method = search_method
113
110
  return self
114
111
 
@@ -1,9 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Literal
4
-
5
3
  from pydantic import BaseModel
6
4
 
5
+ from .document_types import DocumentForm, DocumentLanguage, IndexingTechnique
7
6
  from .process_rule import ProcessRule
8
7
  from .retrieval_model import RetrievalModel
9
8
 
@@ -13,9 +12,9 @@ class CreateByTextRequestBody(BaseModel):
13
12
 
14
13
  name: str | None = None
15
14
  text: str | None = None
16
- indexing_technique: str | None = None
17
- doc_form: str | None = None
18
- doc_language: str | None = None
15
+ indexing_technique: IndexingTechnique | None = None
16
+ doc_form: DocumentForm | None = None
17
+ doc_language: DocumentLanguage | None = None
19
18
  process_rule: ProcessRule | None = None
20
19
  retrieval_model: RetrievalModel | None = None
21
20
  embedding_model: str | None = None
@@ -47,19 +46,15 @@ class CreateByTextRequestBodyBuilder:
47
46
  self._create_by_text_request_body.text = text
48
47
  return self
49
48
 
50
- def indexing_technique(
51
- self, indexing_technique: Literal["high_quality", "economy"]
52
- ) -> CreateByTextRequestBodyBuilder:
49
+ def indexing_technique(self, indexing_technique: IndexingTechnique) -> CreateByTextRequestBodyBuilder:
53
50
  self._create_by_text_request_body.indexing_technique = indexing_technique
54
51
  return self
55
52
 
56
- def doc_form(
57
- self, doc_form: Literal["text_model", "hierarchical_model", "qa_model"]
58
- ) -> CreateByTextRequestBodyBuilder:
53
+ def doc_form(self, doc_form: DocumentForm) -> CreateByTextRequestBodyBuilder:
59
54
  self._create_by_text_request_body.doc_form = doc_form
60
55
  return self
61
56
 
62
- def doc_language(self, doc_language: str) -> CreateByTextRequestBodyBuilder:
57
+ def doc_language(self, doc_language: DocumentLanguage) -> CreateByTextRequestBodyBuilder:
63
58
  self._create_by_text_request_body.doc_language = doc_language
64
59
  return self
65
60
 
@@ -0,0 +1,36 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Literal
4
+
5
+ # Indexing technique types
6
+ IndexingTechnique = Literal["high_quality", "economy"]
7
+
8
+ # Document form types
9
+ DocumentForm = Literal["text_model", "hierarchical_model", "qa_model"]
10
+
11
+ # Document language types
12
+ DocumentLanguage = Literal["English", "Chinese", "Japanese", "Korean"]
13
+
14
+ # Processing rule mode types
15
+ ProcessingRuleMode = Literal["automatic", "custom"]
16
+
17
+ # Segmentation separator types
18
+ Separator = Literal["\\n\\n", "\\n", ".", "!", "?", ";"]
19
+
20
+ # Pre-processing rule types
21
+ PreProcessingRuleType = Literal["remove_extra_spaces", "remove_urls_emails"]
22
+
23
+ # Data source types
24
+ DataSourceType = Literal["upload_file", "notion_import", "website_crawl"]
25
+
26
+ # Document indexing status types
27
+ IndexingStatus = Literal["waiting", "parsing", "cleaning", "splitting", "indexing", "completed", "error", "paused"]
28
+
29
+ # Document status action types
30
+ StatusAction = Literal["enable", "disable", "archive"]
31
+
32
+ # Upload file status types
33
+ UploadFileStatus = Literal["success", "processing", "error"]
34
+
35
+ # Document enabled status
36
+ DocumentEnabled = Literal[True, False]
@@ -0,0 +1,15 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Literal
4
+
5
+ # Metadata field types
6
+ MetadataFieldType = Literal["text", "number", "select"]
7
+
8
+ # Built-in metadata actions
9
+ BuiltinMetadataAction = Literal["enable", "disable"]
10
+
11
+ # Metadata status types
12
+ MetadataStatus = Literal["active", "inactive"]
13
+
14
+ # Metadata scope types
15
+ MetadataScope = Literal["document", "segment"]
@@ -0,0 +1,24 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Literal
4
+
5
+ # Segment status types
6
+ SegmentStatus = Literal["waiting", "indexing", "completed", "error", "paused"]
7
+
8
+ # Segment enabled status types
9
+ SegmentEnabledStatus = Literal["enabled", "disabled"]
10
+
11
+ # Child chunk status types
12
+ ChildChunkStatus = Literal["waiting", "indexing", "completed", "error"]
13
+
14
+ # Segment search status types
15
+ SearchStatus = Literal["all", "enabled", "disabled"]
16
+
17
+ # Sort order types
18
+ SortOrder = Literal["created_at", "position", "word_count", "hit_count"]
19
+
20
+ # Sort direction types
21
+ SortDirection = Literal["asc", "desc"]
22
+
23
+ # Segment enabled boolean
24
+ SegmentEnabled = Literal[True, False]
@@ -0,0 +1,12 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Literal
4
+
5
+ # Tag types
6
+ TagType = Literal["knowledge", "custom"]
7
+
8
+ # Tag status types
9
+ TagStatus = Literal["active", "inactive"]
10
+
11
+ # Tag binding status types
12
+ BindingStatus = Literal["bound", "unbound"]
@@ -11,9 +11,13 @@ class UpdateResponse(BaseResponse):
11
11
  binding_count: int | str | None = None
12
12
 
13
13
  def to_tag_info(self) -> TagInfo:
14
+ binding_count = None
15
+ if self.binding_count is not None:
16
+ binding_count = int(self.binding_count) if isinstance(self.binding_count, str) else self.binding_count
17
+
14
18
  return TagInfo(
15
19
  id=self.id or "",
16
20
  name=self.name or "",
17
21
  type=self.type or "",
18
- binding_count=self.binding_count or 0,
22
+ binding_count=binding_count or 0,
19
23
  )
@@ -0,0 +1 @@
1
+ # File models for workflow API
@@ -0,0 +1,53 @@
1
+ from __future__ import annotations
2
+
3
+ from pydantic import BaseModel
4
+
5
+
6
+ class FileInfo(BaseModel):
7
+ id: str | None = None
8
+ name: str | None = None
9
+ size: int | None = None
10
+ extension: str | None = None
11
+ mime_type: str | None = None
12
+ created_by: str | None = None
13
+ created_at: int | None = None
14
+
15
+ @staticmethod
16
+ def builder() -> FileInfoBuilder:
17
+ return FileInfoBuilder()
18
+
19
+
20
+ class FileInfoBuilder:
21
+ def __init__(self):
22
+ self._file_info = FileInfo()
23
+
24
+ def build(self) -> FileInfo:
25
+ return self._file_info
26
+
27
+ def id(self, id: str) -> FileInfoBuilder:
28
+ self._file_info.id = id
29
+ return self
30
+
31
+ def name(self, name: str) -> FileInfoBuilder:
32
+ self._file_info.name = name
33
+ return self
34
+
35
+ def size(self, size: int) -> FileInfoBuilder:
36
+ self._file_info.size = size
37
+ return self
38
+
39
+ def extension(self, extension: str) -> FileInfoBuilder:
40
+ self._file_info.extension = extension
41
+ return self
42
+
43
+ def mime_type(self, mime_type: str) -> FileInfoBuilder:
44
+ self._file_info.mime_type = mime_type
45
+ return self
46
+
47
+ def created_by(self, created_by: str) -> FileInfoBuilder:
48
+ self._file_info.created_by = created_by
49
+ return self
50
+
51
+ def created_at(self, created_at: int) -> FileInfoBuilder:
52
+ self._file_info.created_at = created_at
53
+ return self
@@ -0,0 +1,34 @@
1
+ from __future__ import annotations
2
+
3
+ from dify_oapi.core.enum import HttpMethod
4
+ from dify_oapi.core.model.base_request import BaseRequest
5
+
6
+
7
+ class PreviewFileRequest(BaseRequest):
8
+ def __init__(self) -> None:
9
+ super().__init__()
10
+ self.file_id: str | None = None
11
+
12
+ @staticmethod
13
+ def builder() -> PreviewFileRequestBuilder:
14
+ return PreviewFileRequestBuilder()
15
+
16
+
17
+ class PreviewFileRequestBuilder:
18
+ def __init__(self):
19
+ preview_file_request = PreviewFileRequest()
20
+ preview_file_request.http_method = HttpMethod.GET
21
+ preview_file_request.uri = "/v1/files/:file_id/preview"
22
+ self._preview_file_request = preview_file_request
23
+
24
+ def build(self) -> PreviewFileRequest:
25
+ return self._preview_file_request
26
+
27
+ def file_id(self, file_id: str) -> PreviewFileRequestBuilder:
28
+ self._preview_file_request.file_id = file_id
29
+ self._preview_file_request.paths["file_id"] = file_id
30
+ return self
31
+
32
+ def as_attachment(self, as_attachment: bool) -> PreviewFileRequestBuilder:
33
+ self._preview_file_request.add_query("as_attachment", str(as_attachment).lower())
34
+ return self
@@ -0,0 +1,9 @@
1
+ from __future__ import annotations
2
+
3
+ from dify_oapi.core.model.base_response import BaseResponse
4
+
5
+
6
+ class PreviewFileResponse(BaseResponse):
7
+ content_type: str | None = None
8
+ content_length: int | None = None
9
+ content: bytes | None = None
@@ -0,0 +1,42 @@
1
+ from __future__ import annotations
2
+
3
+ from io import BytesIO
4
+
5
+ from dify_oapi.core.enum import HttpMethod
6
+ from dify_oapi.core.model.base_request import BaseRequest
7
+
8
+ from .upload_file_request_body import UploadFileRequestBody
9
+
10
+
11
+ class UploadFileRequest(BaseRequest):
12
+ def __init__(self) -> None:
13
+ super().__init__()
14
+ self.request_body: UploadFileRequestBody | None = None
15
+ self.file: BytesIO | None = None
16
+
17
+ @staticmethod
18
+ def builder() -> UploadFileRequestBuilder:
19
+ return UploadFileRequestBuilder()
20
+
21
+
22
+ class UploadFileRequestBuilder:
23
+ def __init__(self):
24
+ upload_file_request = UploadFileRequest()
25
+ upload_file_request.http_method = HttpMethod.POST
26
+ upload_file_request.uri = "/v1/files/upload"
27
+ self._upload_file_request = upload_file_request
28
+
29
+ def build(self) -> UploadFileRequest:
30
+ return self._upload_file_request
31
+
32
+ def file(self, file: BytesIO, file_name: str | None = None) -> UploadFileRequestBuilder:
33
+ self._upload_file_request.file = file
34
+ file_name = file_name or "upload"
35
+ self._upload_file_request.files = {"file": (file_name, file)}
36
+ return self
37
+
38
+ def request_body(self, request_body: UploadFileRequestBody) -> UploadFileRequestBuilder:
39
+ self._upload_file_request.request_body = request_body
40
+ if request_body.user:
41
+ self._upload_file_request.body = {"user": request_body.user}
42
+ return self
@@ -0,0 +1,23 @@
1
+ from __future__ import annotations
2
+
3
+ from pydantic import BaseModel
4
+
5
+
6
+ class UploadFileRequestBody(BaseModel):
7
+ user: str | None = None
8
+
9
+ @staticmethod
10
+ def builder() -> UploadFileRequestBodyBuilder:
11
+ return UploadFileRequestBodyBuilder()
12
+
13
+
14
+ class UploadFileRequestBodyBuilder:
15
+ def __init__(self):
16
+ self._upload_file_request_body = UploadFileRequestBody()
17
+
18
+ def build(self) -> UploadFileRequestBody:
19
+ return self._upload_file_request_body
20
+
21
+ def user(self, user: str) -> UploadFileRequestBodyBuilder:
22
+ self._upload_file_request_body.user = user
23
+ return self
@@ -0,0 +1,9 @@
1
+ from __future__ import annotations
2
+
3
+ from dify_oapi.core.model.base_response import BaseResponse
4
+
5
+ from .file_info import FileInfo
6
+
7
+
8
+ class UploadFileResponse(FileInfo, BaseResponse):
9
+ pass
@@ -0,0 +1,45 @@
1
+ from __future__ import annotations
2
+
3
+ from pydantic import BaseModel
4
+
5
+ from ..workflow.workflow_types import AppMode
6
+
7
+
8
+ class AppInfo(BaseModel):
9
+ name: str | None = None
10
+ description: str | None = None
11
+ tags: list[str] | None = None
12
+ mode: AppMode | None = None
13
+ author_name: str | None = None
14
+
15
+ @staticmethod
16
+ def builder() -> AppInfoBuilder:
17
+ return AppInfoBuilder()
18
+
19
+
20
+ class AppInfoBuilder:
21
+ def __init__(self):
22
+ self._app_info = AppInfo()
23
+
24
+ def build(self) -> AppInfo:
25
+ return self._app_info
26
+
27
+ def name(self, name: str) -> AppInfoBuilder:
28
+ self._app_info.name = name
29
+ return self
30
+
31
+ def description(self, description: str) -> AppInfoBuilder:
32
+ self._app_info.description = description
33
+ return self
34
+
35
+ def tags(self, tags: list[str]) -> AppInfoBuilder:
36
+ self._app_info.tags = tags
37
+ return self
38
+
39
+ def mode(self, mode: AppMode) -> AppInfoBuilder:
40
+ self._app_info.mode = mode
41
+ return self
42
+
43
+ def author_name(self, author_name: str) -> AppInfoBuilder:
44
+ self._app_info.author_name = author_name
45
+ return self
@@ -0,0 +1,45 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any
4
+
5
+ from pydantic import BaseModel
6
+
7
+
8
+ class FileUploadConfig(BaseModel):
9
+ document: dict[str, Any] | None = None
10
+ image: dict[str, Any] | None = None
11
+ audio: dict[str, Any] | None = None
12
+ video: dict[str, Any] | None = None
13
+ custom: dict[str, Any] | None = None
14
+
15
+ @staticmethod
16
+ def builder() -> FileUploadConfigBuilder:
17
+ return FileUploadConfigBuilder()
18
+
19
+
20
+ class FileUploadConfigBuilder:
21
+ def __init__(self):
22
+ self._file_upload_config = FileUploadConfig()
23
+
24
+ def build(self) -> FileUploadConfig:
25
+ return self._file_upload_config
26
+
27
+ def document(self, document: dict[str, Any]) -> FileUploadConfigBuilder:
28
+ self._file_upload_config.document = document
29
+ return self
30
+
31
+ def image(self, image: dict[str, Any]) -> FileUploadConfigBuilder:
32
+ self._file_upload_config.image = image
33
+ return self
34
+
35
+ def audio(self, audio: dict[str, Any]) -> FileUploadConfigBuilder:
36
+ self._file_upload_config.audio = audio
37
+ return self
38
+
39
+ def video(self, video: dict[str, Any]) -> FileUploadConfigBuilder:
40
+ self._file_upload_config.video = video
41
+ return self
42
+
43
+ def custom(self, custom: dict[str, Any]) -> FileUploadConfigBuilder:
44
+ self._file_upload_config.custom = custom
45
+ return self
@@ -0,0 +1,24 @@
1
+ from __future__ import annotations
2
+
3
+ from dify_oapi.core.enum import HttpMethod
4
+ from dify_oapi.core.model.base_request import BaseRequest
5
+
6
+
7
+ class GetInfoRequest(BaseRequest):
8
+ def __init__(self):
9
+ super().__init__()
10
+
11
+ @staticmethod
12
+ def builder() -> GetInfoRequestBuilder:
13
+ return GetInfoRequestBuilder()
14
+
15
+
16
+ class GetInfoRequestBuilder:
17
+ def __init__(self):
18
+ get_info_request = GetInfoRequest()
19
+ get_info_request.http_method = HttpMethod.GET
20
+ get_info_request.uri = "/v1/info"
21
+ self._get_info_request = get_info_request
22
+
23
+ def build(self) -> GetInfoRequest:
24
+ return self._get_info_request
@@ -0,0 +1,9 @@
1
+ from __future__ import annotations
2
+
3
+ from dify_oapi.core.model.base_response import BaseResponse
4
+
5
+ from .app_info import AppInfo
6
+
7
+
8
+ class GetInfoResponse(AppInfo, BaseResponse):
9
+ pass