dify-oapi2 0.3.0__py3-none-any.whl → 0.4.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 (307) hide show
  1. dify_oapi/api/completion/v1/model/completion/completion_inputs.py +28 -4
  2. dify_oapi/api/completion/v1/model/completion/completion_types.py +19 -1
  3. dify_oapi/api/completion/v1/model/completion/input_file_object.py +58 -0
  4. dify_oapi/api/completion/v1/model/completion/send_message_request_body.py +40 -44
  5. dify_oapi/api/completion/v1/model/completion/usage.py +4 -2
  6. dify_oapi/api/completion/v1/model/info/feature_config.py +91 -0
  7. dify_oapi/api/completion/v1/model/info/parameters_info.py +16 -8
  8. dify_oapi/api/completion/v1/model/info/site_info.py +3 -3
  9. dify_oapi/api/completion/v1/model/info/user_input_form.py +131 -16
  10. dify_oapi/api/knowledge/service.py +8 -0
  11. dify_oapi/api/knowledge/v1/model/batch_info.py +86 -0
  12. dify_oapi/api/knowledge/v1/model/bind_tags_to_dataset_request.py +30 -0
  13. dify_oapi/api/knowledge/v1/model/bind_tags_to_dataset_request_body.py +26 -0
  14. dify_oapi/api/{knowledge_base/v1/model/tag/bind_response.py → knowledge/v1/model/bind_tags_to_dataset_response.py} +1 -3
  15. dify_oapi/api/knowledge/v1/model/child_chunk_content.py +34 -0
  16. dify_oapi/api/knowledge/v1/model/child_chunk_info.py +101 -0
  17. dify_oapi/api/{knowledge_base/v1/model/segment → knowledge/v1/model}/create_child_chunk_request.py +8 -2
  18. dify_oapi/api/knowledge/v1/model/create_child_chunk_request_body.py +44 -0
  19. dify_oapi/api/{knowledge_base/v1/model/segment → knowledge/v1/model}/create_child_chunk_response.py +5 -1
  20. dify_oapi/api/knowledge/v1/model/create_dataset_request.py +30 -0
  21. dify_oapi/api/knowledge/v1/model/create_dataset_request_body.py +67 -0
  22. dify_oapi/api/knowledge/v1/model/create_dataset_response.py +7 -0
  23. dify_oapi/api/knowledge/v1/model/create_document_by_file_request.py +55 -0
  24. dify_oapi/api/knowledge/v1/model/create_document_by_file_request_body.py +73 -0
  25. dify_oapi/api/{knowledge_base/v1/model/document/create_by_file_response.py → knowledge/v1/model/create_document_by_file_response.py} +1 -1
  26. dify_oapi/api/knowledge/v1/model/create_document_by_text_request.py +44 -0
  27. dify_oapi/api/knowledge/v1/model/create_document_by_text_request_body.py +73 -0
  28. dify_oapi/api/{knowledge_base/v1/model/document/create_by_text_response.py → knowledge/v1/model/create_document_by_text_response.py} +3 -3
  29. dify_oapi/api/knowledge/v1/model/create_segment_request.py +50 -0
  30. dify_oapi/api/knowledge/v1/model/create_segment_request_body.py +31 -0
  31. dify_oapi/api/{knowledge_base/v1/model/segment/create_response.py → knowledge/v1/model/create_segment_response.py} +5 -2
  32. dify_oapi/api/knowledge/v1/model/create_tag_request.py +30 -0
  33. dify_oapi/api/knowledge/v1/model/create_tag_request_body.py +28 -0
  34. dify_oapi/api/knowledge/v1/model/create_tag_response.py +7 -0
  35. dify_oapi/api/knowledge/v1/model/data_source_info.py +34 -0
  36. dify_oapi/api/knowledge/v1/model/dataset_info.py +122 -0
  37. dify_oapi/api/{knowledge_base/v1/model/segment → knowledge/v1/model}/delete_child_chunk_request.py +8 -2
  38. dify_oapi/api/knowledge/v1/model/delete_child_chunk_response.py +9 -0
  39. dify_oapi/api/knowledge/v1/model/delete_dataset_request.py +28 -0
  40. dify_oapi/api/{knowledge_base/v1/model/tag/delete_response.py → knowledge/v1/model/delete_dataset_response.py} +1 -3
  41. dify_oapi/api/knowledge/v1/model/delete_document_request.py +42 -0
  42. dify_oapi/api/knowledge/v1/model/delete_document_response.py +9 -0
  43. dify_oapi/api/knowledge/v1/model/delete_segment_request.py +48 -0
  44. dify_oapi/api/knowledge/v1/model/delete_segment_response.py +9 -0
  45. dify_oapi/api/knowledge/v1/model/delete_tag_request.py +30 -0
  46. dify_oapi/api/knowledge/v1/model/delete_tag_request_body.py +21 -0
  47. dify_oapi/api/{knowledge_base/v1/model/tag/unbind_response.py → knowledge/v1/model/delete_tag_response.py} +1 -3
  48. dify_oapi/api/knowledge/v1/model/document_info.py +132 -0
  49. dify_oapi/api/knowledge/v1/model/document_metadata.py +39 -0
  50. dify_oapi/api/knowledge/v1/model/embedding_model_parameters.py +47 -0
  51. dify_oapi/api/knowledge/v1/model/external_knowledge_info.py +34 -0
  52. dify_oapi/api/knowledge/v1/model/file_info.py +71 -0
  53. dify_oapi/api/knowledge/v1/model/get_batch_indexing_status_request.py +42 -0
  54. dify_oapi/api/knowledge/v1/model/get_batch_indexing_status_response.py +22 -0
  55. dify_oapi/api/knowledge/v1/model/get_dataset_request.py +28 -0
  56. dify_oapi/api/knowledge/v1/model/get_dataset_response.py +7 -0
  57. dify_oapi/api/knowledge/v1/model/get_dataset_tags_request.py +28 -0
  58. dify_oapi/api/knowledge/v1/model/get_dataset_tags_response.py +8 -0
  59. dify_oapi/api/knowledge/v1/model/get_document_request.py +42 -0
  60. dify_oapi/api/knowledge/v1/model/get_document_response.py +11 -0
  61. dify_oapi/api/knowledge/v1/model/get_segment_request.py +48 -0
  62. dify_oapi/api/{knowledge_base/v1/model/segment/get_response.py → knowledge/v1/model/get_segment_response.py} +5 -1
  63. dify_oapi/api/knowledge/v1/model/get_text_embedding_models_request.py +22 -0
  64. dify_oapi/api/knowledge/v1/model/get_text_embedding_models_response.py +7 -0
  65. dify_oapi/api/knowledge/v1/model/get_upload_file_info_request.py +42 -0
  66. dify_oapi/api/knowledge/v1/model/get_upload_file_info_response.py +11 -0
  67. dify_oapi/api/knowledge/v1/model/knowledge_types.py +100 -0
  68. dify_oapi/api/{knowledge_base/v1/model/segment → knowledge/v1/model}/list_child_chunks_request.py +10 -4
  69. dify_oapi/api/{knowledge_base/v1/model/segment → knowledge/v1/model}/list_child_chunks_response.py +4 -0
  70. dify_oapi/api/knowledge/v1/model/list_datasets_request.py +30 -0
  71. dify_oapi/api/{knowledge_base/v1/model/dataset/list_response.py → knowledge/v1/model/list_datasets_response.py} +1 -3
  72. dify_oapi/api/knowledge/v1/model/list_documents_request.py +48 -0
  73. dify_oapi/api/{knowledge_base/v1/model/document/list_response.py → knowledge/v1/model/list_documents_response.py} +3 -3
  74. dify_oapi/api/knowledge/v1/model/list_segments_request.py +60 -0
  75. dify_oapi/api/{knowledge_base/v1/model/segment/list_response.py → knowledge/v1/model/list_segments_response.py} +5 -2
  76. dify_oapi/api/knowledge/v1/model/list_tags_request.py +28 -0
  77. dify_oapi/api/knowledge/v1/model/list_tags_response.py +7 -0
  78. dify_oapi/api/knowledge/v1/model/model_credentials.py +34 -0
  79. dify_oapi/api/knowledge/v1/model/model_info.py +85 -0
  80. dify_oapi/api/knowledge/v1/model/model_parameters.py +34 -0
  81. dify_oapi/api/knowledge/v1/model/pagination_info.py +44 -0
  82. dify_oapi/api/knowledge/v1/model/preprocessing_rule.py +36 -0
  83. dify_oapi/api/knowledge/v1/model/process_rule.py +43 -0
  84. dify_oapi/api/knowledge/v1/model/process_rules.py +49 -0
  85. dify_oapi/api/knowledge/v1/model/query_info.py +29 -0
  86. dify_oapi/api/knowledge/v1/model/reranking_mode.py +36 -0
  87. dify_oapi/api/knowledge/v1/model/reranking_model.py +47 -0
  88. dify_oapi/api/knowledge/v1/model/retrieval_model.py +62 -0
  89. dify_oapi/api/knowledge/v1/model/retrieval_record.py +28 -0
  90. dify_oapi/api/knowledge/v1/model/retrieval_segment_info.py +41 -0
  91. dify_oapi/api/knowledge/v1/model/retrieve_from_dataset_request.py +36 -0
  92. dify_oapi/api/knowledge/v1/model/retrieve_from_dataset_request_body.py +38 -0
  93. dify_oapi/api/knowledge/v1/model/retrieve_from_dataset_response.py +9 -0
  94. dify_oapi/api/knowledge/v1/model/segment_content.py +39 -0
  95. dify_oapi/api/knowledge/v1/model/segment_document_info.py +41 -0
  96. dify_oapi/api/knowledge/v1/model/segment_info.py +131 -0
  97. dify_oapi/api/knowledge/v1/model/segmentation_rule.py +44 -0
  98. dify_oapi/api/knowledge/v1/model/subchunk_segmentation_rule.py +39 -0
  99. dify_oapi/api/knowledge/v1/model/tag_info.py +56 -0
  100. dify_oapi/api/knowledge/v1/model/unbind_tags_from_dataset_request.py +30 -0
  101. dify_oapi/api/knowledge/v1/model/unbind_tags_from_dataset_request_body.py +26 -0
  102. dify_oapi/api/knowledge/v1/model/unbind_tags_from_dataset_response.py +5 -0
  103. dify_oapi/api/{knowledge_base/v1/model/segment → knowledge/v1/model}/update_child_chunk_request.py +8 -2
  104. dify_oapi/api/{knowledge_base/v1/model/segment → knowledge/v1/model}/update_child_chunk_request_body.py +12 -1
  105. dify_oapi/api/{knowledge_base/v1/model/segment → knowledge/v1/model}/update_child_chunk_response.py +4 -0
  106. dify_oapi/api/knowledge/v1/model/update_dataset_request.py +36 -0
  107. dify_oapi/api/knowledge/v1/model/update_dataset_request_body.py +62 -0
  108. dify_oapi/api/knowledge/v1/model/update_dataset_response.py +7 -0
  109. dify_oapi/api/knowledge/v1/model/update_document_by_file_request.py +61 -0
  110. dify_oapi/api/knowledge/v1/model/update_document_by_file_request_body.py +68 -0
  111. dify_oapi/api/{knowledge_base/v1/model/document/update_by_file_response.py → knowledge/v1/model/update_document_by_file_response.py} +3 -3
  112. dify_oapi/api/knowledge/v1/model/update_document_by_text_request.py +50 -0
  113. dify_oapi/api/knowledge/v1/model/update_document_by_text_request_body.py +73 -0
  114. dify_oapi/api/{knowledge_base/v1/model/document/update_by_text_response.py → knowledge/v1/model/update_document_by_text_response.py} +2 -4
  115. dify_oapi/api/knowledge/v1/model/update_document_status_request.py +51 -0
  116. dify_oapi/api/knowledge/v1/model/update_document_status_request_body.py +29 -0
  117. dify_oapi/api/knowledge/v1/model/update_document_status_response.py +9 -0
  118. dify_oapi/api/knowledge/v1/model/update_segment_request.py +56 -0
  119. dify_oapi/api/knowledge/v1/model/update_segment_request_body.py +31 -0
  120. dify_oapi/api/{knowledge_base/v1/model/segment/update_response.py → knowledge/v1/model/update_segment_response.py} +5 -1
  121. dify_oapi/api/knowledge/v1/model/update_tag_request.py +30 -0
  122. dify_oapi/api/knowledge/v1/model/update_tag_request_body.py +26 -0
  123. dify_oapi/api/knowledge/v1/model/update_tag_response.py +7 -0
  124. dify_oapi/api/knowledge/v1/resource/__init__.py +8 -0
  125. dify_oapi/api/knowledge/v1/resource/chunk.py +55 -0
  126. dify_oapi/api/knowledge/v1/resource/dataset.py +69 -0
  127. dify_oapi/api/knowledge/v1/resource/document.py +135 -0
  128. dify_oapi/api/knowledge/v1/resource/model.py +25 -0
  129. dify_oapi/api/knowledge/v1/resource/segment.py +55 -0
  130. dify_oapi/api/knowledge/v1/resource/tag.py +81 -0
  131. dify_oapi/api/knowledge/v1/version.py +18 -0
  132. dify_oapi/api/workflow/v1/model/{info/app_info.py → app_info.py} +1 -1
  133. dify_oapi/api/workflow/v1/model/file_upload_info.py +53 -0
  134. dify_oapi/api/workflow/v1/model/{log/get_workflow_logs_response.py → get_workflow_logs_response.py} +2 -2
  135. dify_oapi/api/workflow/v1/model/{workflow/get_workflow_run_detail_response.py → get_workflow_run_detail_response.py} +18 -0
  136. dify_oapi/api/workflow/v1/model/{info/site_info.py → site_info.py} +1 -1
  137. dify_oapi/api/workflow/v1/model/{file/upload_file_response.py → upload_file_response.py} +2 -2
  138. dify_oapi/api/workflow/v1/model/workflow_log_info.py +57 -0
  139. dify_oapi/api/workflow/v1/model/{log/workflow_run_log_info.py → workflow_run_log_info.py} +1 -1
  140. dify_oapi/api/workflow/v1/resource/workflow.py +56 -144
  141. dify_oapi/api/workflow/v1/version.py +1 -7
  142. dify_oapi/client.py +6 -6
  143. {dify_oapi2-0.3.0.dist-info → dify_oapi2-0.4.0.dist-info}/METADATA +15 -11
  144. dify_oapi2-0.4.0.dist-info/RECORD +324 -0
  145. dify_oapi/api/knowledge_base/service.py +0 -8
  146. dify_oapi/api/knowledge_base/v1/model/dataset/__init__.py +0 -49
  147. dify_oapi/api/knowledge_base/v1/model/dataset/create_request.py +0 -32
  148. dify_oapi/api/knowledge_base/v1/model/dataset/create_request_body.py +0 -72
  149. dify_oapi/api/knowledge_base/v1/model/dataset/create_response.py +0 -11
  150. dify_oapi/api/knowledge_base/v1/model/dataset/dataset_info.py +0 -150
  151. dify_oapi/api/knowledge_base/v1/model/dataset/dataset_types.py +0 -36
  152. dify_oapi/api/knowledge_base/v1/model/dataset/delete_request.py +0 -30
  153. dify_oapi/api/knowledge_base/v1/model/dataset/delete_response.py +0 -9
  154. dify_oapi/api/knowledge_base/v1/model/dataset/external_knowledge_info.py +0 -38
  155. dify_oapi/api/knowledge_base/v1/model/dataset/filter_condition.py +0 -72
  156. dify_oapi/api/knowledge_base/v1/model/dataset/get_request.py +0 -30
  157. dify_oapi/api/knowledge_base/v1/model/dataset/get_response.py +0 -11
  158. dify_oapi/api/knowledge_base/v1/model/dataset/list_request.py +0 -45
  159. dify_oapi/api/knowledge_base/v1/model/dataset/metadata_filtering_conditions.py +0 -30
  160. dify_oapi/api/knowledge_base/v1/model/dataset/reranking_model.py +0 -28
  161. dify_oapi/api/knowledge_base/v1/model/dataset/retrieval_model.py +0 -144
  162. dify_oapi/api/knowledge_base/v1/model/dataset/retrieve_request.py +0 -38
  163. dify_oapi/api/knowledge_base/v1/model/dataset/retrieve_request_body.py +0 -38
  164. dify_oapi/api/knowledge_base/v1/model/dataset/retrieve_response.py +0 -53
  165. dify_oapi/api/knowledge_base/v1/model/dataset/update_request.py +0 -38
  166. dify_oapi/api/knowledge_base/v1/model/dataset/update_request_body.py +0 -58
  167. dify_oapi/api/knowledge_base/v1/model/dataset/update_response.py +0 -11
  168. dify_oapi/api/knowledge_base/v1/model/document/__init__.py +0 -0
  169. dify_oapi/api/knowledge_base/v1/model/document/create_by_file_request.py +0 -53
  170. dify_oapi/api/knowledge_base/v1/model/document/create_by_file_request_body.py +0 -31
  171. dify_oapi/api/knowledge_base/v1/model/document/create_by_file_request_body_data.py +0 -78
  172. dify_oapi/api/knowledge_base/v1/model/document/create_by_text_request.py +0 -38
  173. dify_oapi/api/knowledge_base/v1/model/document/create_by_text_request_body.py +0 -75
  174. dify_oapi/api/knowledge_base/v1/model/document/data_source_info.py +0 -30
  175. dify_oapi/api/knowledge_base/v1/model/document/delete_request.py +0 -38
  176. dify_oapi/api/knowledge_base/v1/model/document/delete_response.py +0 -9
  177. dify_oapi/api/knowledge_base/v1/model/document/document_info.py +0 -164
  178. dify_oapi/api/knowledge_base/v1/model/document/document_types.py +0 -36
  179. dify_oapi/api/knowledge_base/v1/model/document/get_request.py +0 -40
  180. dify_oapi/api/knowledge_base/v1/model/document/get_response.py +0 -9
  181. dify_oapi/api/knowledge_base/v1/model/document/get_upload_file_request.py +0 -38
  182. dify_oapi/api/knowledge_base/v1/model/document/get_upload_file_response.py +0 -11
  183. dify_oapi/api/knowledge_base/v1/model/document/indexing_status_info.py +0 -80
  184. dify_oapi/api/knowledge_base/v1/model/document/indexing_status_request.py +0 -36
  185. dify_oapi/api/knowledge_base/v1/model/document/indexing_status_response.py +0 -11
  186. dify_oapi/api/knowledge_base/v1/model/document/list_request.py +0 -42
  187. dify_oapi/api/knowledge_base/v1/model/document/pre_processing_rule.py +0 -32
  188. dify_oapi/api/knowledge_base/v1/model/document/process_rule.py +0 -34
  189. dify_oapi/api/knowledge_base/v1/model/document/retrieval_model.py +0 -54
  190. dify_oapi/api/knowledge_base/v1/model/document/rules.py +0 -31
  191. dify_oapi/api/knowledge_base/v1/model/document/segmentation.py +0 -35
  192. dify_oapi/api/knowledge_base/v1/model/document/subchunk_segmentation.py +0 -35
  193. dify_oapi/api/knowledge_base/v1/model/document/update_by_file_request.py +0 -53
  194. dify_oapi/api/knowledge_base/v1/model/document/update_by_file_request_body.py +0 -26
  195. dify_oapi/api/knowledge_base/v1/model/document/update_by_file_request_body_data.py +0 -40
  196. dify_oapi/api/knowledge_base/v1/model/document/update_by_text_request.py +0 -55
  197. dify_oapi/api/knowledge_base/v1/model/document/update_by_text_request_body.py +0 -46
  198. dify_oapi/api/knowledge_base/v1/model/document/update_status_request.py +0 -55
  199. dify_oapi/api/knowledge_base/v1/model/document/update_status_request_body.py +0 -32
  200. dify_oapi/api/knowledge_base/v1/model/document/update_status_response.py +0 -9
  201. dify_oapi/api/knowledge_base/v1/model/document/upload_file_info.py +0 -65
  202. dify_oapi/api/knowledge_base/v1/model/metadata/__init__.py +0 -35
  203. dify_oapi/api/knowledge_base/v1/model/metadata/create_request.py +0 -38
  204. dify_oapi/api/knowledge_base/v1/model/metadata/create_request_body.py +0 -31
  205. dify_oapi/api/knowledge_base/v1/model/metadata/create_response.py +0 -13
  206. dify_oapi/api/knowledge_base/v1/model/metadata/delete_request.py +0 -36
  207. dify_oapi/api/knowledge_base/v1/model/metadata/delete_response.py +0 -7
  208. dify_oapi/api/knowledge_base/v1/model/metadata/list_request.py +0 -30
  209. dify_oapi/api/knowledge_base/v1/model/metadata/list_response.py +0 -9
  210. dify_oapi/api/knowledge_base/v1/model/metadata/metadata_info.py +0 -38
  211. dify_oapi/api/knowledge_base/v1/model/metadata/metadata_types.py +0 -15
  212. dify_oapi/api/knowledge_base/v1/model/metadata/toggle_builtin_request.py +0 -36
  213. dify_oapi/api/knowledge_base/v1/model/metadata/toggle_builtin_response.py +0 -7
  214. dify_oapi/api/knowledge_base/v1/model/metadata/update_document_request.py +0 -38
  215. dify_oapi/api/knowledge_base/v1/model/metadata/update_document_request_body.py +0 -79
  216. dify_oapi/api/knowledge_base/v1/model/metadata/update_document_response.py +0 -7
  217. dify_oapi/api/knowledge_base/v1/model/metadata/update_request.py +0 -44
  218. dify_oapi/api/knowledge_base/v1/model/metadata/update_request_body.py +0 -24
  219. dify_oapi/api/knowledge_base/v1/model/metadata/update_response.py +0 -13
  220. dify_oapi/api/knowledge_base/v1/model/segment/__init__.py +0 -77
  221. dify_oapi/api/knowledge_base/v1/model/segment/child_chunk_info.py +0 -88
  222. dify_oapi/api/knowledge_base/v1/model/segment/create_child_chunk_request_body.py +0 -23
  223. dify_oapi/api/knowledge_base/v1/model/segment/create_request.py +0 -42
  224. dify_oapi/api/knowledge_base/v1/model/segment/create_request_body.py +0 -25
  225. dify_oapi/api/knowledge_base/v1/model/segment/delete_child_chunk_response.py +0 -5
  226. dify_oapi/api/knowledge_base/v1/model/segment/delete_request.py +0 -40
  227. dify_oapi/api/knowledge_base/v1/model/segment/delete_response.py +0 -5
  228. dify_oapi/api/knowledge_base/v1/model/segment/get_request.py +0 -40
  229. dify_oapi/api/knowledge_base/v1/model/segment/list_request.py +0 -50
  230. dify_oapi/api/knowledge_base/v1/model/segment/segment_data.py +0 -43
  231. dify_oapi/api/knowledge_base/v1/model/segment/segment_info.py +0 -123
  232. dify_oapi/api/knowledge_base/v1/model/segment/segment_types.py +0 -24
  233. dify_oapi/api/knowledge_base/v1/model/segment/update_request.py +0 -48
  234. dify_oapi/api/knowledge_base/v1/model/segment/update_request_body.py +0 -25
  235. dify_oapi/api/knowledge_base/v1/model/tag/__init__.py +0 -41
  236. dify_oapi/api/knowledge_base/v1/model/tag/bind_request.py +0 -32
  237. dify_oapi/api/knowledge_base/v1/model/tag/bind_request_body.py +0 -29
  238. dify_oapi/api/knowledge_base/v1/model/tag/create_request.py +0 -32
  239. dify_oapi/api/knowledge_base/v1/model/tag/create_request_body.py +0 -24
  240. dify_oapi/api/knowledge_base/v1/model/tag/create_response.py +0 -16
  241. dify_oapi/api/knowledge_base/v1/model/tag/delete_request.py +0 -32
  242. dify_oapi/api/knowledge_base/v1/model/tag/delete_request_body.py +0 -24
  243. dify_oapi/api/knowledge_base/v1/model/tag/list_request.py +0 -24
  244. dify_oapi/api/knowledge_base/v1/model/tag/list_response.py +0 -19
  245. dify_oapi/api/knowledge_base/v1/model/tag/query_bound_request.py +0 -30
  246. dify_oapi/api/knowledge_base/v1/model/tag/query_bound_response.py +0 -9
  247. dify_oapi/api/knowledge_base/v1/model/tag/tag_info.py +0 -38
  248. dify_oapi/api/knowledge_base/v1/model/tag/tag_types.py +0 -12
  249. dify_oapi/api/knowledge_base/v1/model/tag/unbind_request.py +0 -32
  250. dify_oapi/api/knowledge_base/v1/model/tag/unbind_request_body.py +0 -29
  251. dify_oapi/api/knowledge_base/v1/model/tag/update_request.py +0 -32
  252. dify_oapi/api/knowledge_base/v1/model/tag/update_request_body.py +0 -29
  253. dify_oapi/api/knowledge_base/v1/model/tag/update_response.py +0 -23
  254. dify_oapi/api/knowledge_base/v1/resource/__init__.py +0 -7
  255. dify_oapi/api/knowledge_base/v1/resource/dataset.py +0 -58
  256. dify_oapi/api/knowledge_base/v1/resource/document.py +0 -107
  257. dify_oapi/api/knowledge_base/v1/resource/metadata.py +0 -65
  258. dify_oapi/api/knowledge_base/v1/resource/segment.py +0 -110
  259. dify_oapi/api/knowledge_base/v1/resource/tag.py +0 -65
  260. dify_oapi/api/knowledge_base/v1/version.py +0 -12
  261. dify_oapi/api/workflow/v1/model/file/__init__.py +0 -1
  262. dify_oapi/api/workflow/v1/model/file/file_info.py +0 -53
  263. dify_oapi/api/workflow/v1/model/file/preview_file_request.py +0 -34
  264. dify_oapi/api/workflow/v1/model/file/preview_file_response.py +0 -9
  265. dify_oapi/api/workflow/v1/model/log/__init__.py +0 -0
  266. dify_oapi/api/workflow/v1/model/log/log_info.py +0 -57
  267. dify_oapi/api/workflow/v1/model/workflow/run_specific_workflow_request.py +0 -38
  268. dify_oapi/api/workflow/v1/model/workflow/run_specific_workflow_request_body.py +0 -47
  269. dify_oapi/api/workflow/v1/model/workflow/run_specific_workflow_response.py +0 -9
  270. dify_oapi/api/workflow/v1/model/workflow/streaming_event.py +0 -42
  271. dify_oapi/api/workflow/v1/resource/file.py +0 -63
  272. dify_oapi/api/workflow/v1/resource/info.py +0 -93
  273. dify_oapi/api/workflow/v1/resource/log.py +0 -43
  274. dify_oapi2-0.3.0.dist-info/RECORD +0 -348
  275. /dify_oapi/api/{knowledge_base → knowledge}/__init__.py +0 -0
  276. /dify_oapi/api/{knowledge_base → knowledge}/v1/__init__.py +0 -0
  277. /dify_oapi/api/{knowledge_base → knowledge}/v1/model/__init__.py +0 -0
  278. /dify_oapi/api/workflow/v1/model/{log/end_user_info.py → end_user_info.py} +0 -0
  279. /dify_oapi/api/workflow/v1/model/{workflow/execution_metadata.py → execution_metadata.py} +0 -0
  280. /dify_oapi/api/workflow/v1/model/{info/file_upload_config.py → file_upload_config.py} +0 -0
  281. /dify_oapi/api/workflow/v1/model/{info/get_info_request.py → get_info_request.py} +0 -0
  282. /dify_oapi/api/workflow/v1/model/{info/get_info_response.py → get_info_response.py} +0 -0
  283. /dify_oapi/api/workflow/v1/model/{info/get_parameters_request.py → get_parameters_request.py} +0 -0
  284. /dify_oapi/api/workflow/v1/model/{info/get_parameters_response.py → get_parameters_response.py} +0 -0
  285. /dify_oapi/api/workflow/v1/model/{info/get_site_request.py → get_site_request.py} +0 -0
  286. /dify_oapi/api/workflow/v1/model/{info/get_site_response.py → get_site_response.py} +0 -0
  287. /dify_oapi/api/workflow/v1/model/{log/get_workflow_logs_request.py → get_workflow_logs_request.py} +0 -0
  288. /dify_oapi/api/workflow/v1/model/{workflow/get_workflow_run_detail_request.py → get_workflow_run_detail_request.py} +0 -0
  289. /dify_oapi/api/workflow/v1/model/{workflow/node_info.py → node_info.py} +0 -0
  290. /dify_oapi/api/workflow/v1/model/{info/parameters_info.py → parameters_info.py} +0 -0
  291. /dify_oapi/api/workflow/v1/model/{workflow/run_workflow_request.py → run_workflow_request.py} +0 -0
  292. /dify_oapi/api/workflow/v1/model/{workflow/run_workflow_request_body.py → run_workflow_request_body.py} +0 -0
  293. /dify_oapi/api/workflow/v1/model/{workflow/run_workflow_response.py → run_workflow_response.py} +0 -0
  294. /dify_oapi/api/workflow/v1/model/{workflow/stop_workflow_request.py → stop_workflow_request.py} +0 -0
  295. /dify_oapi/api/workflow/v1/model/{workflow/stop_workflow_request_body.py → stop_workflow_request_body.py} +0 -0
  296. /dify_oapi/api/workflow/v1/model/{workflow/stop_workflow_response.py → stop_workflow_response.py} +0 -0
  297. /dify_oapi/api/workflow/v1/model/{info/system_parameters.py → system_parameters.py} +0 -0
  298. /dify_oapi/api/workflow/v1/model/{file/upload_file_request.py → upload_file_request.py} +0 -0
  299. /dify_oapi/api/workflow/v1/model/{file/upload_file_request_body.py → upload_file_request_body.py} +0 -0
  300. /dify_oapi/api/workflow/v1/model/{info/user_input_form.py → user_input_form.py} +0 -0
  301. /dify_oapi/api/workflow/v1/model/{workflow/workflow_file_info.py → workflow_file_info.py} +0 -0
  302. /dify_oapi/api/workflow/v1/model/{workflow/workflow_inputs.py → workflow_inputs.py} +0 -0
  303. /dify_oapi/api/workflow/v1/model/{workflow/workflow_run_data.py → workflow_run_data.py} +0 -0
  304. /dify_oapi/api/workflow/v1/model/{workflow/workflow_run_info.py → workflow_run_info.py} +0 -0
  305. /dify_oapi/api/workflow/v1/model/{workflow/workflow_types.py → workflow_types.py} +0 -0
  306. {dify_oapi2-0.3.0.dist-info → dify_oapi2-0.4.0.dist-info}/LICENSE +0 -0
  307. {dify_oapi2-0.3.0.dist-info → dify_oapi2-0.4.0.dist-info}/WHEEL +0 -0
@@ -1,5 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
+ from typing import Any
4
+
3
5
  from pydantic import BaseModel
4
6
 
5
7
 
@@ -7,22 +9,44 @@ class CompletionInputs(BaseModel):
7
9
  """
8
10
  Inputs for completion application containing variables defined in the App.
9
11
  Text generation applications require at least the query field.
12
+ Additional custom variables can be added as needed.
10
13
  """
11
14
 
12
- query: str | None = None # User input text content (required for completion apps)
15
+ query: str # Required: User input text content
16
+
17
+ # Allow additional fields for custom variables
18
+ model_config = {"extra": "allow"}
13
19
 
14
20
  @staticmethod
15
21
  def builder() -> CompletionInputsBuilder:
16
22
  return CompletionInputsBuilder()
17
23
 
24
+ def with_variables(self, **kwargs: Any) -> CompletionInputs:
25
+ result: CompletionInputs = self.model_copy(update=kwargs)
26
+ return result
27
+
18
28
 
19
29
  class CompletionInputsBuilder:
20
30
  def __init__(self):
21
- self._completion_inputs = CompletionInputs()
31
+ self._inputs: CompletionInputs | None = None
22
32
 
23
33
  def build(self) -> CompletionInputs:
24
- return self._completion_inputs
34
+ if self._inputs is None:
35
+ raise ValueError("query field is required for CompletionInputs")
36
+ return self._inputs
25
37
 
26
38
  def query(self, query: str) -> CompletionInputsBuilder:
27
- self._completion_inputs.query = query
39
+ self._inputs = CompletionInputs(query=query)
40
+ return self
41
+
42
+ def add_variable(self, key: str, value: Any) -> CompletionInputsBuilder:
43
+ if self._inputs is None:
44
+ raise ValueError("Must set query first")
45
+ self._inputs = self._inputs.with_variables(**{key: value})
46
+ return self
47
+
48
+ def variables(self, **kwargs: Any) -> CompletionInputsBuilder:
49
+ if self._inputs is None:
50
+ raise ValueError("Must set query first")
51
+ self._inputs = self._inputs.with_variables(**kwargs)
28
52
  return self
@@ -12,7 +12,7 @@ FileType = Literal["image"]
12
12
  TransferMethod = Literal["remote_url", "local_file"]
13
13
 
14
14
  # Feedback rating types
15
- FeedbackRating = Literal["like", "dislike", "null"]
15
+ FeedbackRating = Literal["like", "dislike"]
16
16
 
17
17
  # Annotation action types
18
18
  AnnotationAction = Literal["enable", "disable"]
@@ -25,3 +25,21 @@ AppMode = Literal["completion"]
25
25
 
26
26
  # Job status types
27
27
  JobStatus = Literal["waiting", "running", "completed", "failed"]
28
+
29
+ # Event types for streaming
30
+ EventType = Literal["message", "message_end", "tts_message", "tts_message_end", "message_replace", "error", "ping"]
31
+
32
+ # User input form types
33
+ UserInputFormType = Literal["text-input", "paragraph", "select"]
34
+
35
+ # Audio format types
36
+ AudioFormat = Literal["mp3", "wav"]
37
+
38
+ # Image format types
39
+ ImageFormat = Literal["png", "jpg", "jpeg", "webp", "gif"]
40
+
41
+ # Currency types (common currencies)
42
+ CurrencyType = Literal["USD", "EUR", "CNY", "JPY", "GBP"]
43
+
44
+ # Language codes (common language codes)
45
+ LanguageCode = Literal["en-US", "zh-CN", "ja-JP", "ko-KR", "fr-FR", "de-DE", "es-ES", "pt-BR", "ru-RU"]
@@ -0,0 +1,58 @@
1
+ from __future__ import annotations
2
+
3
+ from pydantic import BaseModel, field_validator
4
+
5
+ from .completion_types import FileType, TransferMethod
6
+
7
+
8
+ class InputFileObject(BaseModel):
9
+ """File input object for multimodal understanding."""
10
+
11
+ type: FileType
12
+ transfer_method: TransferMethod
13
+ url: str | None = None
14
+ upload_file_id: str | None = None
15
+
16
+ @field_validator("url", "upload_file_id")
17
+ @classmethod
18
+ def validate_transfer_method_fields(cls, v, info):
19
+ """Validate that the correct field is provided based on transfer_method."""
20
+ if info.data.get("transfer_method") == "remote_url":
21
+ if info.field_name == "url" and v is None:
22
+ raise ValueError("url is required when transfer_method is remote_url")
23
+ if info.field_name == "upload_file_id" and v is not None:
24
+ raise ValueError("upload_file_id must not be provided when transfer_method is remote_url")
25
+ elif info.data.get("transfer_method") == "local_file":
26
+ if info.field_name == "upload_file_id" and v is None:
27
+ raise ValueError("upload_file_id is required when transfer_method is local_file")
28
+ if info.field_name == "url" and v is not None:
29
+ raise ValueError("url must not be provided when transfer_method is local_file")
30
+ return v
31
+
32
+ @staticmethod
33
+ def builder() -> InputFileObjectBuilder:
34
+ return InputFileObjectBuilder()
35
+
36
+
37
+ class InputFileObjectBuilder:
38
+ def __init__(self):
39
+ self._file_object = InputFileObject(type="image", transfer_method="remote_url")
40
+
41
+ def build(self) -> InputFileObject:
42
+ return self._file_object
43
+
44
+ def type(self, type_: FileType) -> InputFileObjectBuilder:
45
+ self._file_object.type = type_
46
+ return self
47
+
48
+ def transfer_method(self, transfer_method: TransferMethod) -> InputFileObjectBuilder:
49
+ self._file_object.transfer_method = transfer_method
50
+ return self
51
+
52
+ def url(self, url: str) -> InputFileObjectBuilder:
53
+ self._file_object.url = url
54
+ return self
55
+
56
+ def upload_file_id(self, upload_file_id: str) -> InputFileObjectBuilder:
57
+ self._file_object.upload_file_id = upload_file_id
58
+ return self
@@ -1,51 +1,33 @@
1
1
  from __future__ import annotations
2
2
 
3
- from pydantic import BaseModel
3
+ from typing import Any
4
4
 
5
- from .completion_inputs import CompletionInputs
6
- from .completion_types import FileType, ResponseMode, TransferMethod
7
-
8
-
9
- class FileInfo(BaseModel):
10
- type: FileType | None = None
11
- transfer_method: TransferMethod | None = None
12
- url: str | None = None
13
- upload_file_id: str | 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 type(self, type_: FileType) -> FileInfoBuilder:
28
- self._file_info.type = type_
29
- return self
5
+ from pydantic import BaseModel, field_validator
30
6
 
31
- def transfer_method(self, transfer_method: TransferMethod) -> FileInfoBuilder:
32
- self._file_info.transfer_method = transfer_method
33
- return self
34
-
35
- def url(self, url: str) -> FileInfoBuilder:
36
- self._file_info.url = url
37
- return self
38
-
39
- def upload_file_id(self, upload_file_id: str) -> FileInfoBuilder:
40
- self._file_info.upload_file_id = upload_file_id
41
- return self
7
+ from .completion_inputs import CompletionInputs
8
+ from .completion_types import ResponseMode
9
+ from .input_file_object import InputFileObject
42
10
 
43
11
 
44
12
  class SendMessageRequestBody(BaseModel):
45
- inputs: CompletionInputs | None = None
46
- response_mode: ResponseMode | None = None
13
+ """Request body for sending completion messages."""
14
+
15
+ inputs: dict[str, Any] # Variable values defined by the App, must include 'query'
16
+ response_mode: ResponseMode | None = "streaming"
47
17
  user: str | None = None
48
- files: list[FileInfo] | None = None
18
+ files: list[InputFileObject] | None = None
19
+
20
+ @field_validator("inputs")
21
+ @classmethod
22
+ def validate_inputs(cls, v):
23
+ """Validate that inputs contains the required 'query' field."""
24
+ if not isinstance(v, dict):
25
+ raise ValueError("inputs must be a dictionary")
26
+ if "query" not in v:
27
+ raise ValueError('inputs must contain a "query" field')
28
+ if not isinstance(v["query"], str):
29
+ raise ValueError("query field must be a string")
30
+ return v
49
31
 
50
32
  @staticmethod
51
33
  def builder() -> SendMessageRequestBodyBuilder:
@@ -54,13 +36,27 @@ class SendMessageRequestBody(BaseModel):
54
36
 
55
37
  class SendMessageRequestBodyBuilder:
56
38
  def __init__(self):
57
- self._send_message_request_body = SendMessageRequestBody()
39
+ self._send_message_request_body = SendMessageRequestBody(inputs={"query": ""})
58
40
 
59
41
  def build(self) -> SendMessageRequestBody:
60
42
  return self._send_message_request_body
61
43
 
62
- def inputs(self, inputs: CompletionInputs) -> SendMessageRequestBodyBuilder:
63
- self._send_message_request_body.inputs = inputs
44
+ def inputs(self, inputs: CompletionInputs | dict[str, Any]) -> SendMessageRequestBodyBuilder:
45
+ """Set inputs from CompletionInputs object or dictionary."""
46
+ if isinstance(inputs, CompletionInputs):
47
+ self._send_message_request_body.inputs = inputs.model_dump()
48
+ else:
49
+ self._send_message_request_body.inputs = inputs
50
+ return self
51
+
52
+ def query(self, query: str) -> SendMessageRequestBodyBuilder:
53
+ """Set the query field directly."""
54
+ self._send_message_request_body.inputs["query"] = query
55
+ return self
56
+
57
+ def add_variable(self, key: str, value: str) -> SendMessageRequestBodyBuilder:
58
+ """Add a custom variable to inputs."""
59
+ self._send_message_request_body.inputs[key] = value
64
60
  return self
65
61
 
66
62
  def response_mode(self, response_mode: ResponseMode) -> SendMessageRequestBodyBuilder:
@@ -71,6 +67,6 @@ class SendMessageRequestBodyBuilder:
71
67
  self._send_message_request_body.user = user
72
68
  return self
73
69
 
74
- def files(self, files: list[FileInfo]) -> SendMessageRequestBodyBuilder:
70
+ def files(self, files: list[InputFileObject]) -> SendMessageRequestBodyBuilder:
75
71
  self._send_message_request_body.files = files
76
72
  return self
@@ -2,6 +2,8 @@ from __future__ import annotations
2
2
 
3
3
  from pydantic import BaseModel
4
4
 
5
+ from .completion_types import CurrencyType
6
+
5
7
 
6
8
  class Usage(BaseModel):
7
9
  prompt_tokens: int | None = None
@@ -14,7 +16,7 @@ class Usage(BaseModel):
14
16
  completion_price: str | None = None
15
17
  total_tokens: int | None = None
16
18
  total_price: str | None = None
17
- currency: str | None = None
19
+ currency: CurrencyType | None = None
18
20
  latency: float | None = None
19
21
 
20
22
  @staticmethod
@@ -69,7 +71,7 @@ class UsageBuilder:
69
71
  self._usage.total_price = total_price
70
72
  return self
71
73
 
72
- def currency(self, currency: str) -> UsageBuilder:
74
+ def currency(self, currency: CurrencyType) -> UsageBuilder:
73
75
  self._usage.currency = currency
74
76
  return self
75
77
 
@@ -0,0 +1,91 @@
1
+ from __future__ import annotations
2
+
3
+ from pydantic import BaseModel
4
+
5
+
6
+ class SuggestedQuestionsAfterAnswerConfig(BaseModel):
7
+ """Configuration for suggested questions after answer feature."""
8
+
9
+ enabled: bool
10
+
11
+ @staticmethod
12
+ def builder() -> SuggestedQuestionsAfterAnswerConfigBuilder:
13
+ return SuggestedQuestionsAfterAnswerConfigBuilder()
14
+
15
+
16
+ class SuggestedQuestionsAfterAnswerConfigBuilder:
17
+ def __init__(self):
18
+ self._config = SuggestedQuestionsAfterAnswerConfig(enabled=False)
19
+
20
+ def build(self) -> SuggestedQuestionsAfterAnswerConfig:
21
+ return self._config
22
+
23
+ def enabled(self, enabled: bool) -> SuggestedQuestionsAfterAnswerConfigBuilder:
24
+ self._config.enabled = enabled
25
+ return self
26
+
27
+
28
+ class SpeechToTextConfig(BaseModel):
29
+ """Configuration for speech to text feature."""
30
+
31
+ enabled: bool
32
+
33
+ @staticmethod
34
+ def builder() -> SpeechToTextConfigBuilder:
35
+ return SpeechToTextConfigBuilder()
36
+
37
+
38
+ class SpeechToTextConfigBuilder:
39
+ def __init__(self):
40
+ self._config = SpeechToTextConfig(enabled=False)
41
+
42
+ def build(self) -> SpeechToTextConfig:
43
+ return self._config
44
+
45
+ def enabled(self, enabled: bool) -> SpeechToTextConfigBuilder:
46
+ self._config.enabled = enabled
47
+ return self
48
+
49
+
50
+ class RetrieverResourceConfig(BaseModel):
51
+ """Configuration for retriever resource (citation and attribution) feature."""
52
+
53
+ enabled: bool
54
+
55
+ @staticmethod
56
+ def builder() -> RetrieverResourceConfigBuilder:
57
+ return RetrieverResourceConfigBuilder()
58
+
59
+
60
+ class RetrieverResourceConfigBuilder:
61
+ def __init__(self):
62
+ self._config = RetrieverResourceConfig(enabled=False)
63
+
64
+ def build(self) -> RetrieverResourceConfig:
65
+ return self._config
66
+
67
+ def enabled(self, enabled: bool) -> RetrieverResourceConfigBuilder:
68
+ self._config.enabled = enabled
69
+ return self
70
+
71
+
72
+ class AnnotationReplyConfig(BaseModel):
73
+ """Configuration for annotation reply feature."""
74
+
75
+ enabled: bool
76
+
77
+ @staticmethod
78
+ def builder() -> AnnotationReplyConfigBuilder:
79
+ return AnnotationReplyConfigBuilder()
80
+
81
+
82
+ class AnnotationReplyConfigBuilder:
83
+ def __init__(self):
84
+ self._config = AnnotationReplyConfig(enabled=False)
85
+
86
+ def build(self) -> AnnotationReplyConfig:
87
+ return self._config
88
+
89
+ def enabled(self, enabled: bool) -> AnnotationReplyConfigBuilder:
90
+ self._config.enabled = enabled
91
+ return self
@@ -2,6 +2,12 @@ from __future__ import annotations
2
2
 
3
3
  from pydantic import BaseModel
4
4
 
5
+ from .feature_config import (
6
+ AnnotationReplyConfig,
7
+ RetrieverResourceConfig,
8
+ SpeechToTextConfig,
9
+ SuggestedQuestionsAfterAnswerConfig,
10
+ )
5
11
  from .file_upload_config import FileUploadConfig
6
12
  from .system_parameters import SystemParameters
7
13
  from .user_input_form import UserInputForm
@@ -10,10 +16,10 @@ from .user_input_form import UserInputForm
10
16
  class ParametersInfo(BaseModel):
11
17
  opening_statement: str | None = None
12
18
  suggested_questions: list[str] | None = None
13
- suggested_questions_after_answer: dict | None = None
14
- speech_to_text: dict | None = None
15
- retriever_resource: dict | None = None
16
- annotation_reply: dict | None = None
19
+ suggested_questions_after_answer: SuggestedQuestionsAfterAnswerConfig | None = None
20
+ speech_to_text: SpeechToTextConfig | None = None
21
+ retriever_resource: RetrieverResourceConfig | None = None
22
+ annotation_reply: AnnotationReplyConfig | None = None
17
23
  user_input_form: list[UserInputForm] | None = None
18
24
  file_upload: FileUploadConfig | None = None
19
25
  system_parameters: SystemParameters | None = None
@@ -38,19 +44,21 @@ class ParametersInfoBuilder:
38
44
  self._parameters_info.suggested_questions = suggested_questions
39
45
  return self
40
46
 
41
- def suggested_questions_after_answer(self, suggested_questions_after_answer: dict) -> ParametersInfoBuilder:
47
+ def suggested_questions_after_answer(
48
+ self, suggested_questions_after_answer: SuggestedQuestionsAfterAnswerConfig
49
+ ) -> ParametersInfoBuilder:
42
50
  self._parameters_info.suggested_questions_after_answer = suggested_questions_after_answer
43
51
  return self
44
52
 
45
- def speech_to_text(self, speech_to_text: dict) -> ParametersInfoBuilder:
53
+ def speech_to_text(self, speech_to_text: SpeechToTextConfig) -> ParametersInfoBuilder:
46
54
  self._parameters_info.speech_to_text = speech_to_text
47
55
  return self
48
56
 
49
- def retriever_resource(self, retriever_resource: dict) -> ParametersInfoBuilder:
57
+ def retriever_resource(self, retriever_resource: RetrieverResourceConfig) -> ParametersInfoBuilder:
50
58
  self._parameters_info.retriever_resource = retriever_resource
51
59
  return self
52
60
 
53
- def annotation_reply(self, annotation_reply: dict) -> ParametersInfoBuilder:
61
+ def annotation_reply(self, annotation_reply: AnnotationReplyConfig) -> ParametersInfoBuilder:
54
62
  self._parameters_info.annotation_reply = annotation_reply
55
63
  return self
56
64
 
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from pydantic import BaseModel
4
4
 
5
- from ..completion.completion_types import IconType
5
+ from ..completion.completion_types import IconType, LanguageCode
6
6
 
7
7
 
8
8
  class SiteInfo(BaseModel):
@@ -17,7 +17,7 @@ class SiteInfo(BaseModel):
17
17
  copyright: str | None = None
18
18
  privacy_policy: str | None = None
19
19
  custom_disclaimer: str | None = None
20
- default_language: str | None = None
20
+ default_language: LanguageCode | None = None
21
21
  show_workflow_steps: bool | None = None
22
22
  use_icon_as_answer_icon: bool | None = None
23
23
 
@@ -77,7 +77,7 @@ class SiteInfoBuilder:
77
77
  self._site_info.custom_disclaimer = custom_disclaimer
78
78
  return self
79
79
 
80
- def default_language(self, default_language: str) -> SiteInfoBuilder:
80
+ def default_language(self, default_language: LanguageCode) -> SiteInfoBuilder:
81
81
  self._site_info.default_language = default_language
82
82
  return self
83
83
 
@@ -1,19 +1,60 @@
1
1
  from __future__ import annotations
2
2
 
3
- from pydantic import BaseModel
3
+ from pydantic import BaseModel, Field
4
4
 
5
5
 
6
- class UserInputForm(BaseModel):
7
- label: str | None = None
8
- variable: str | None = None
9
- required: bool | None = None
6
+ class TextInputControl(BaseModel):
7
+ """Text input control configuration."""
8
+
9
+ label: str
10
+ variable: str
11
+ required: bool
12
+ default: str | None = None
13
+
14
+
15
+ class ParagraphControl(BaseModel):
16
+ """Paragraph (multi-line text) control configuration."""
17
+
18
+ label: str
19
+ variable: str
20
+ required: bool
10
21
  default: str | None = None
11
- options: list[str] | None = None
22
+
23
+
24
+ class SelectControl(BaseModel):
25
+ """Select (dropdown) control configuration."""
26
+
27
+ label: str
28
+ variable: str
29
+ required: bool
30
+ default: str | None = None
31
+ options: list[str]
32
+
33
+
34
+ class UserInputForm(BaseModel):
35
+ """User input form configuration supporting different control types."""
36
+
37
+ # Use discriminated union to support different form control types
38
+ text_input: TextInputControl | None = Field(default=None, alias="text-input")
39
+ paragraph: ParagraphControl | None = None
40
+ select: SelectControl | None = None
12
41
 
13
42
  @staticmethod
14
43
  def builder() -> UserInputFormBuilder:
15
44
  return UserInputFormBuilder()
16
45
 
46
+ @staticmethod
47
+ def text_input_builder() -> TextInputFormBuilder:
48
+ return TextInputFormBuilder()
49
+
50
+ @staticmethod
51
+ def paragraph_builder() -> ParagraphFormBuilder:
52
+ return ParagraphFormBuilder()
53
+
54
+ @staticmethod
55
+ def select_builder() -> SelectFormBuilder:
56
+ return SelectFormBuilder()
57
+
17
58
 
18
59
  class UserInputFormBuilder:
19
60
  def __init__(self):
@@ -22,22 +63,96 @@ class UserInputFormBuilder:
22
63
  def build(self) -> UserInputForm:
23
64
  return self._user_input_form
24
65
 
25
- def label(self, label: str) -> UserInputFormBuilder:
26
- self._user_input_form.label = label
66
+ def text_input(self, text_input: TextInputControl) -> UserInputFormBuilder:
67
+ self._user_input_form.text_input = text_input
68
+ return self
69
+
70
+ def paragraph(self, paragraph: ParagraphControl) -> UserInputFormBuilder:
71
+ self._user_input_form.paragraph = paragraph
72
+ return self
73
+
74
+ def select(self, select: SelectControl) -> UserInputFormBuilder:
75
+ self._user_input_form.select = select
76
+ return self
77
+
78
+
79
+ class TextInputFormBuilder:
80
+ def __init__(self):
81
+ self._control = TextInputControl(label="", variable="", required=False)
82
+
83
+ def build(self) -> UserInputForm:
84
+ form = UserInputForm()
85
+ form.text_input = self._control
86
+ return form
87
+
88
+ def label(self, label: str) -> TextInputFormBuilder:
89
+ self._control.label = label
90
+ return self
91
+
92
+ def variable(self, variable: str) -> TextInputFormBuilder:
93
+ self._control.variable = variable
94
+ return self
95
+
96
+ def required(self, required: bool) -> TextInputFormBuilder:
97
+ self._control.required = required
98
+ return self
99
+
100
+ def default(self, default: str) -> TextInputFormBuilder:
101
+ self._control.default = default
102
+ return self
103
+
104
+
105
+ class ParagraphFormBuilder:
106
+ def __init__(self):
107
+ self._control = ParagraphControl(label="", variable="", required=False)
108
+
109
+ def build(self) -> UserInputForm:
110
+ form = UserInputForm()
111
+ form.paragraph = self._control
112
+ return form
113
+
114
+ def label(self, label: str) -> ParagraphFormBuilder:
115
+ self._control.label = label
116
+ return self
117
+
118
+ def variable(self, variable: str) -> ParagraphFormBuilder:
119
+ self._control.variable = variable
120
+ return self
121
+
122
+ def required(self, required: bool) -> ParagraphFormBuilder:
123
+ self._control.required = required
124
+ return self
125
+
126
+ def default(self, default: str) -> ParagraphFormBuilder:
127
+ self._control.default = default
128
+ return self
129
+
130
+
131
+ class SelectFormBuilder:
132
+ def __init__(self):
133
+ self._control = SelectControl(label="", variable="", required=False, options=[])
134
+
135
+ def build(self) -> UserInputForm:
136
+ form = UserInputForm()
137
+ form.select = self._control
138
+ return form
139
+
140
+ def label(self, label: str) -> SelectFormBuilder:
141
+ self._control.label = label
27
142
  return self
28
143
 
29
- def variable(self, variable: str) -> UserInputFormBuilder:
30
- self._user_input_form.variable = variable
144
+ def variable(self, variable: str) -> SelectFormBuilder:
145
+ self._control.variable = variable
31
146
  return self
32
147
 
33
- def required(self, required: bool) -> UserInputFormBuilder:
34
- self._user_input_form.required = required
148
+ def required(self, required: bool) -> SelectFormBuilder:
149
+ self._control.required = required
35
150
  return self
36
151
 
37
- def default(self, default: str) -> UserInputFormBuilder:
38
- self._user_input_form.default = default
152
+ def default(self, default: str) -> SelectFormBuilder:
153
+ self._control.default = default
39
154
  return self
40
155
 
41
- def options(self, options: list[str]) -> UserInputFormBuilder:
42
- self._user_input_form.options = options
156
+ def options(self, options: list[str]) -> SelectFormBuilder:
157
+ self._control.options = options
43
158
  return self
@@ -0,0 +1,8 @@
1
+ from dify_oapi.core.model.config import Config
2
+
3
+ from .v1.version import V1
4
+
5
+
6
+ class Knowledge:
7
+ def __init__(self, config: Config):
8
+ self.v1 = V1(config)