You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

app_fields.py 8.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. import json
  2. from flask_restx import fields
  3. from fields.workflow_fields import workflow_partial_fields
  4. from libs.helper import AppIconUrlField, TimestampField
  5. class JsonStringField(fields.Raw):
  6. def format(self, value):
  7. if isinstance(value, str):
  8. try:
  9. return json.loads(value)
  10. except (json.JSONDecodeError, TypeError):
  11. return value
  12. return value
  13. app_detail_kernel_fields = {
  14. "id": fields.String,
  15. "name": fields.String,
  16. "description": fields.String,
  17. "mode": fields.String(attribute="mode_compatible_with_agent"),
  18. "icon_type": fields.String,
  19. "icon": fields.String,
  20. "icon_background": fields.String,
  21. "icon_url": AppIconUrlField,
  22. }
  23. related_app_list = {
  24. "data": fields.List(fields.Nested(app_detail_kernel_fields)),
  25. "total": fields.Integer,
  26. }
  27. model_config_fields = {
  28. "opening_statement": fields.String,
  29. "suggested_questions": fields.Raw(attribute="suggested_questions_list"),
  30. "suggested_questions_after_answer": fields.Raw(attribute="suggested_questions_after_answer_dict"),
  31. "speech_to_text": fields.Raw(attribute="speech_to_text_dict"),
  32. "text_to_speech": fields.Raw(attribute="text_to_speech_dict"),
  33. "retriever_resource": fields.Raw(attribute="retriever_resource_dict"),
  34. "annotation_reply": fields.Raw(attribute="annotation_reply_dict"),
  35. "more_like_this": fields.Raw(attribute="more_like_this_dict"),
  36. "sensitive_word_avoidance": fields.Raw(attribute="sensitive_word_avoidance_dict"),
  37. "external_data_tools": fields.Raw(attribute="external_data_tools_list"),
  38. "model": fields.Raw(attribute="model_dict"),
  39. "user_input_form": fields.Raw(attribute="user_input_form_list"),
  40. "dataset_query_variable": fields.String,
  41. "pre_prompt": fields.String,
  42. "agent_mode": fields.Raw(attribute="agent_mode_dict"),
  43. "prompt_type": fields.String,
  44. "chat_prompt_config": fields.Raw(attribute="chat_prompt_config_dict"),
  45. "completion_prompt_config": fields.Raw(attribute="completion_prompt_config_dict"),
  46. "dataset_configs": fields.Raw(attribute="dataset_configs_dict"),
  47. "file_upload": fields.Raw(attribute="file_upload_dict"),
  48. "created_by": fields.String,
  49. "created_at": TimestampField,
  50. "updated_by": fields.String,
  51. "updated_at": TimestampField,
  52. }
  53. tag_fields = {"id": fields.String, "name": fields.String, "type": fields.String}
  54. app_detail_fields = {
  55. "id": fields.String,
  56. "name": fields.String,
  57. "description": fields.String,
  58. "mode": fields.String(attribute="mode_compatible_with_agent"),
  59. "icon": fields.String,
  60. "icon_background": fields.String,
  61. "enable_site": fields.Boolean,
  62. "enable_api": fields.Boolean,
  63. "model_config": fields.Nested(model_config_fields, attribute="app_model_config", allow_null=True),
  64. "workflow": fields.Nested(workflow_partial_fields, allow_null=True),
  65. "tracing": fields.Raw,
  66. "use_icon_as_answer_icon": fields.Boolean,
  67. "created_by": fields.String,
  68. "created_at": TimestampField,
  69. "updated_by": fields.String,
  70. "updated_at": TimestampField,
  71. "access_mode": fields.String,
  72. "tags": fields.List(fields.Nested(tag_fields)),
  73. }
  74. prompt_config_fields = {
  75. "prompt_template": fields.String,
  76. }
  77. model_config_partial_fields = {
  78. "model": fields.Raw(attribute="model_dict"),
  79. "pre_prompt": fields.String,
  80. "created_by": fields.String,
  81. "created_at": TimestampField,
  82. "updated_by": fields.String,
  83. "updated_at": TimestampField,
  84. }
  85. app_partial_fields = {
  86. "id": fields.String,
  87. "name": fields.String,
  88. "max_active_requests": fields.Raw(),
  89. "description": fields.String(attribute="desc_or_prompt"),
  90. "mode": fields.String(attribute="mode_compatible_with_agent"),
  91. "icon_type": fields.String,
  92. "icon": fields.String,
  93. "icon_background": fields.String,
  94. "icon_url": AppIconUrlField,
  95. "model_config": fields.Nested(model_config_partial_fields, attribute="app_model_config", allow_null=True),
  96. "workflow": fields.Nested(workflow_partial_fields, allow_null=True),
  97. "use_icon_as_answer_icon": fields.Boolean,
  98. "created_by": fields.String,
  99. "created_at": TimestampField,
  100. "updated_by": fields.String,
  101. "updated_at": TimestampField,
  102. "tags": fields.List(fields.Nested(tag_fields)),
  103. "access_mode": fields.String,
  104. "create_user_name": fields.String,
  105. "author_name": fields.String,
  106. }
  107. app_pagination_fields = {
  108. "page": fields.Integer,
  109. "limit": fields.Integer(attribute="per_page"),
  110. "total": fields.Integer,
  111. "has_more": fields.Boolean(attribute="has_next"),
  112. "data": fields.List(fields.Nested(app_partial_fields), attribute="items"),
  113. }
  114. template_fields = {
  115. "name": fields.String,
  116. "icon": fields.String,
  117. "icon_background": fields.String,
  118. "description": fields.String,
  119. "mode": fields.String,
  120. "model_config": fields.Nested(model_config_fields),
  121. }
  122. template_list_fields = {
  123. "data": fields.List(fields.Nested(template_fields)),
  124. }
  125. site_fields = {
  126. "access_token": fields.String(attribute="code"),
  127. "code": fields.String,
  128. "title": fields.String,
  129. "icon_type": fields.String,
  130. "icon": fields.String,
  131. "icon_background": fields.String,
  132. "icon_url": AppIconUrlField,
  133. "description": fields.String,
  134. "default_language": fields.String,
  135. "chat_color_theme": fields.String,
  136. "chat_color_theme_inverted": fields.Boolean,
  137. "customize_domain": fields.String,
  138. "copyright": fields.String,
  139. "privacy_policy": fields.String,
  140. "custom_disclaimer": fields.String,
  141. "customize_token_strategy": fields.String,
  142. "prompt_public": fields.Boolean,
  143. "app_base_url": fields.String,
  144. "show_workflow_steps": fields.Boolean,
  145. "use_icon_as_answer_icon": fields.Boolean,
  146. "created_by": fields.String,
  147. "created_at": TimestampField,
  148. "updated_by": fields.String,
  149. "updated_at": TimestampField,
  150. }
  151. deleted_tool_fields = {
  152. "type": fields.String,
  153. "tool_name": fields.String,
  154. "provider_id": fields.String,
  155. }
  156. app_detail_fields_with_site = {
  157. "id": fields.String,
  158. "name": fields.String,
  159. "description": fields.String,
  160. "mode": fields.String(attribute="mode_compatible_with_agent"),
  161. "icon_type": fields.String,
  162. "icon": fields.String,
  163. "icon_background": fields.String,
  164. "icon_url": AppIconUrlField,
  165. "enable_site": fields.Boolean,
  166. "enable_api": fields.Boolean,
  167. "model_config": fields.Nested(model_config_fields, attribute="app_model_config", allow_null=True),
  168. "workflow": fields.Nested(workflow_partial_fields, allow_null=True),
  169. "api_base_url": fields.String,
  170. "use_icon_as_answer_icon": fields.Boolean,
  171. "max_active_requests": fields.Integer,
  172. "created_by": fields.String,
  173. "created_at": TimestampField,
  174. "updated_by": fields.String,
  175. "updated_at": TimestampField,
  176. "deleted_tools": fields.List(fields.Nested(deleted_tool_fields)),
  177. "access_mode": fields.String,
  178. "tags": fields.List(fields.Nested(tag_fields)),
  179. "site": fields.Nested(site_fields),
  180. }
  181. app_site_fields = {
  182. "app_id": fields.String,
  183. "access_token": fields.String(attribute="code"),
  184. "code": fields.String,
  185. "title": fields.String,
  186. "icon": fields.String,
  187. "icon_background": fields.String,
  188. "description": fields.String,
  189. "default_language": fields.String,
  190. "customize_domain": fields.String,
  191. "copyright": fields.String,
  192. "privacy_policy": fields.String,
  193. "custom_disclaimer": fields.String,
  194. "customize_token_strategy": fields.String,
  195. "prompt_public": fields.Boolean,
  196. "show_workflow_steps": fields.Boolean,
  197. "use_icon_as_answer_icon": fields.Boolean,
  198. }
  199. leaked_dependency_fields = {"type": fields.String, "value": fields.Raw, "current_identifier": fields.String}
  200. app_import_fields = {
  201. "id": fields.String,
  202. "status": fields.String,
  203. "app_id": fields.String,
  204. "app_mode": fields.String,
  205. "current_dsl_version": fields.String,
  206. "imported_dsl_version": fields.String,
  207. "error": fields.String,
  208. }
  209. app_import_check_dependencies_fields = {
  210. "leaked_dependencies": fields.List(fields.Nested(leaked_dependency_fields)),
  211. }
  212. app_server_fields = {
  213. "id": fields.String,
  214. "name": fields.String,
  215. "server_code": fields.String,
  216. "description": fields.String,
  217. "status": fields.String,
  218. "parameters": JsonStringField,
  219. "created_at": TimestampField,
  220. "updated_at": TimestampField,
  221. }