plugin.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import time
  2. from flask_restful import Resource, reqparse
  3. from controllers.console.setup import setup_required
  4. from controllers.inner_api import api
  5. from controllers.inner_api.plugin.wraps import get_tenant, plugin_data
  6. from controllers.inner_api.wraps import plugin_inner_api_only
  7. from core.plugin.entities.request import (
  8. RequestInvokeLLM,
  9. RequestInvokeModeration,
  10. RequestInvokeRerank,
  11. RequestInvokeSpeech2Text,
  12. RequestInvokeTextEmbedding,
  13. RequestInvokeTool,
  14. RequestInvokeTTS,
  15. )
  16. from core.tools.entities.tool_entities import ToolInvokeMessage
  17. from libs.helper import compact_generate_response
  18. from models.account import Tenant
  19. from services.plugin.plugin_invoke_service import PluginInvokeService
  20. class PluginInvokeLLMApi(Resource):
  21. @setup_required
  22. @plugin_inner_api_only
  23. @get_tenant
  24. @plugin_data(payload_type=RequestInvokeLLM)
  25. def post(self, user_id: str, tenant_model: Tenant, payload: RequestInvokeLLM):
  26. pass
  27. class PluginInvokeTextEmbeddingApi(Resource):
  28. @setup_required
  29. @plugin_inner_api_only
  30. @get_tenant
  31. @plugin_data(payload_type=RequestInvokeTextEmbedding)
  32. def post(self, user_id: str, tenant_model: Tenant, payload: RequestInvokeTextEmbedding):
  33. pass
  34. class PluginInvokeRerankApi(Resource):
  35. @setup_required
  36. @plugin_inner_api_only
  37. @get_tenant
  38. @plugin_data(payload_type=RequestInvokeRerank)
  39. def post(self, user_id: str, tenant_model: Tenant, payload: RequestInvokeRerank):
  40. pass
  41. class PluginInvokeTTSApi(Resource):
  42. @setup_required
  43. @plugin_inner_api_only
  44. @get_tenant
  45. @plugin_data(payload_type=RequestInvokeTTS)
  46. def post(self, user_id: str, tenant_model: Tenant, payload: RequestInvokeTTS):
  47. pass
  48. class PluginInvokeSpeech2TextApi(Resource):
  49. @setup_required
  50. @plugin_inner_api_only
  51. @get_tenant
  52. @plugin_data(payload_type=RequestInvokeSpeech2Text)
  53. def post(self, user_id: str, tenant_model: Tenant, payload: RequestInvokeSpeech2Text):
  54. pass
  55. class PluginInvokeModerationApi(Resource):
  56. @setup_required
  57. @plugin_inner_api_only
  58. @get_tenant
  59. @plugin_data(payload_type=RequestInvokeModeration)
  60. def post(self, user_id: str, tenant_model: Tenant, payload: RequestInvokeModeration):
  61. pass
  62. class PluginInvokeToolApi(Resource):
  63. @setup_required
  64. @plugin_inner_api_only
  65. @get_tenant
  66. @plugin_data(payload_type=RequestInvokeTool)
  67. def post(self, user_id: str, tenant_model: Tenant, payload: RequestInvokeTool):
  68. def generator():
  69. for i in range(10):
  70. time.sleep(0.1)
  71. yield (
  72. ToolInvokeMessage(
  73. type=ToolInvokeMessage.MessageType.TEXT,
  74. message=ToolInvokeMessage.TextMessage(text='helloworld'),
  75. )
  76. .model_dump_json()
  77. .encode()
  78. + b'\n\n'
  79. )
  80. return compact_generate_response(generator())
  81. class PluginInvokeNodeApi(Resource):
  82. @setup_required
  83. @plugin_inner_api_only
  84. @get_tenant
  85. def post(self, user_id: str, tenant_model: Tenant):
  86. parser = reqparse.RequestParser()
  87. args = parser.parse_args()
  88. return {'message': 'success'}
  89. api.add_resource(PluginInvokeLLMApi, '/invoke/llm')
  90. api.add_resource(PluginInvokeTextEmbeddingApi, '/invoke/text-embedding')
  91. api.add_resource(PluginInvokeRerankApi, '/invoke/rerank')
  92. api.add_resource(PluginInvokeTTSApi, '/invoke/tts')
  93. api.add_resource(PluginInvokeSpeech2TextApi, '/invoke/speech2text')
  94. api.add_resource(PluginInvokeModerationApi, '/invoke/moderation')
  95. api.add_resource(PluginInvokeToolApi, '/invoke/tool')
  96. api.add_resource(PluginInvokeNodeApi, '/invoke/node')