123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331 |
- package service
- import (
- "github.com/gin-gonic/gin"
- "github.com/langgenius/dify-plugin-daemon/internal/core/plugin_daemon"
- "github.com/langgenius/dify-plugin-daemon/internal/core/plugin_daemon/access_types"
- "github.com/langgenius/dify-plugin-daemon/internal/types/entities/model_entities"
- "github.com/langgenius/dify-plugin-daemon/internal/types/entities/plugin_entities"
- "github.com/langgenius/dify-plugin-daemon/internal/types/entities/requests"
- "github.com/langgenius/dify-plugin-daemon/internal/utils/stream"
- )
- func InvokeLLM(
- r *plugin_entities.InvokePluginRequest[requests.RequestInvokeLLM],
- ctx *gin.Context,
- max_timeout_seconds int,
- ) {
- // create session
- session, err := createSession(
- r,
- access_types.PLUGIN_ACCESS_TYPE_MODEL,
- access_types.PLUGIN_ACCESS_ACTION_INVOKE_LLM,
- ctx.GetString("cluster_id"),
- )
- if err != nil {
- ctx.JSON(500, gin.H{"error": err.Error()})
- return
- }
- defer session.Close()
- baseSSEService(
- func() (*stream.Stream[model_entities.LLMResultChunk], error) {
- return plugin_daemon.InvokeLLM(session, &r.Data)
- },
- ctx,
- max_timeout_seconds,
- )
- }
- func InvokeTextEmbedding(
- r *plugin_entities.InvokePluginRequest[requests.RequestInvokeTextEmbedding],
- ctx *gin.Context,
- max_timeout_seconds int,
- ) {
- // create session
- session, err := createSession(
- r,
- access_types.PLUGIN_ACCESS_TYPE_MODEL,
- access_types.PLUGIN_ACCESS_ACTION_INVOKE_TEXT_EMBEDDING,
- ctx.GetString("cluster_id"))
- if err != nil {
- ctx.JSON(500, gin.H{"error": err.Error()})
- return
- }
- defer session.Close()
- baseSSEService(
- func() (*stream.Stream[model_entities.TextEmbeddingResult], error) {
- return plugin_daemon.InvokeTextEmbedding(session, &r.Data)
- },
- ctx,
- max_timeout_seconds,
- )
- }
- func InvokeRerank(
- r *plugin_entities.InvokePluginRequest[requests.RequestInvokeRerank],
- ctx *gin.Context,
- max_timeout_seconds int,
- ) {
- // create session
- session, err := createSession(
- r,
- access_types.PLUGIN_ACCESS_TYPE_MODEL,
- access_types.PLUGIN_ACCESS_ACTION_INVOKE_RERANK,
- ctx.GetString("cluster_id"),
- )
- if err != nil {
- ctx.JSON(500, gin.H{"error": err.Error()})
- return
- }
- defer session.Close()
- baseSSEService(
- func() (*stream.Stream[model_entities.RerankResult], error) {
- return plugin_daemon.InvokeRerank(session, &r.Data)
- },
- ctx,
- max_timeout_seconds,
- )
- }
- func InvokeTTS(
- r *plugin_entities.InvokePluginRequest[requests.RequestInvokeTTS],
- ctx *gin.Context,
- max_timeout_seconds int,
- ) {
- // create session
- session, err := createSession(
- r,
- access_types.PLUGIN_ACCESS_TYPE_MODEL,
- access_types.PLUGIN_ACCESS_ACTION_INVOKE_TTS,
- ctx.GetString("cluster_id"),
- )
- if err != nil {
- ctx.JSON(500, gin.H{"error": err.Error()})
- return
- }
- defer session.Close()
- baseSSEService(
- func() (*stream.Stream[model_entities.TTSResult], error) {
- return plugin_daemon.InvokeTTS(session, &r.Data)
- },
- ctx,
- max_timeout_seconds,
- )
- }
- func InvokeSpeech2Text(
- r *plugin_entities.InvokePluginRequest[requests.RequestInvokeSpeech2Text],
- ctx *gin.Context,
- max_timeout_seconds int,
- ) {
- // create session
- session, err := createSession(
- r,
- access_types.PLUGIN_ACCESS_TYPE_MODEL,
- access_types.PLUGIN_ACCESS_ACTION_INVOKE_SPEECH2TEXT,
- ctx.GetString("cluster_id"),
- )
- if err != nil {
- ctx.JSON(500, gin.H{"error": err.Error()})
- return
- }
- defer session.Close()
- baseSSEService(
- func() (*stream.Stream[model_entities.Speech2TextResult], error) {
- return plugin_daemon.InvokeSpeech2Text(session, &r.Data)
- },
- ctx,
- max_timeout_seconds,
- )
- }
- func InvokeModeration(
- r *plugin_entities.InvokePluginRequest[requests.RequestInvokeModeration],
- ctx *gin.Context,
- max_timeout_seconds int,
- ) {
- // create session
- session, err := createSession(
- r,
- access_types.PLUGIN_ACCESS_TYPE_MODEL,
- access_types.PLUGIN_ACCESS_ACTION_INVOKE_MODERATION,
- ctx.GetString("cluster_id"),
- )
- if err != nil {
- ctx.JSON(500, gin.H{"error": err.Error()})
- return
- }
- defer session.Close()
- baseSSEService(
- func() (*stream.Stream[model_entities.ModerationResult], error) {
- return plugin_daemon.InvokeModeration(session, &r.Data)
- },
- ctx,
- max_timeout_seconds,
- )
- }
- func ValidateProviderCredentials(
- r *plugin_entities.InvokePluginRequest[requests.RequestValidateProviderCredentials],
- ctx *gin.Context,
- max_timeout_seconds int,
- ) {
- // create session
- session, err := createSession(
- r,
- access_types.PLUGIN_ACCESS_TYPE_MODEL,
- access_types.PLUGIN_ACCESS_ACTION_VALIDATE_PROVIDER_CREDENTIALS,
- ctx.GetString("cluster_id"),
- )
- if err != nil {
- ctx.JSON(500, gin.H{"error": err.Error()})
- return
- }
- defer session.Close()
- baseSSEService(
- func() (*stream.Stream[model_entities.ValidateCredentialsResult], error) {
- return plugin_daemon.ValidateProviderCredentials(session, &r.Data)
- },
- ctx,
- max_timeout_seconds,
- )
- }
- func ValidateModelCredentials(
- r *plugin_entities.InvokePluginRequest[requests.RequestValidateModelCredentials],
- ctx *gin.Context,
- max_timeout_seconds int,
- ) {
- // create session
- session, err := createSession(
- r,
- access_types.PLUGIN_ACCESS_TYPE_MODEL,
- access_types.PLUGIN_ACCESS_ACTION_VALIDATE_MODEL_CREDENTIALS,
- ctx.GetString("cluster_id"),
- )
- if err != nil {
- ctx.JSON(500, gin.H{"error": err.Error()})
- return
- }
- defer session.Close()
- baseSSEService(
- func() (*stream.Stream[model_entities.ValidateCredentialsResult], error) {
- return plugin_daemon.ValidateModelCredentials(session, &r.Data)
- },
- ctx,
- max_timeout_seconds,
- )
- }
- func GetTTSModelVoices(
- r *plugin_entities.InvokePluginRequest[requests.RequestGetTTSModelVoices],
- ctx *gin.Context,
- max_timeout_seconds int,
- ) {
- session, err := createSession(
- r,
- access_types.PLUGIN_ACCESS_TYPE_MODEL,
- access_types.PLUGIN_ACCESS_ACTION_GET_TTS_MODEL_VOICES,
- ctx.GetString("cluster_id"),
- )
- if err != nil {
- ctx.JSON(500, gin.H{"error": err.Error()})
- return
- }
- defer session.Close()
- baseSSEService(
- func() (*stream.Stream[model_entities.GetTTSVoicesResponse], error) {
- return plugin_daemon.GetTTSModelVoices(session, &r.Data)
- },
- ctx,
- max_timeout_seconds,
- )
- }
- func GetTextEmbeddingNumTokens(
- r *plugin_entities.InvokePluginRequest[requests.RequestGetTextEmbeddingNumTokens],
- ctx *gin.Context,
- max_timeout_seconds int,
- ) {
- session, err := createSession(
- r,
- access_types.PLUGIN_ACCESS_TYPE_MODEL,
- access_types.PLUGIN_ACCESS_ACTION_GET_TEXT_EMBEDDING_NUM_TOKENS,
- ctx.GetString("cluster_id"),
- )
- if err != nil {
- ctx.JSON(500, gin.H{"error": err.Error()})
- return
- }
- defer session.Close()
- baseSSEService(
- func() (*stream.Stream[model_entities.GetTextEmbeddingNumTokensResponse], error) {
- return plugin_daemon.GetTextEmbeddingNumTokens(session, &r.Data)
- },
- ctx,
- max_timeout_seconds,
- )
- }
- func GetAIModelSchema(
- r *plugin_entities.InvokePluginRequest[requests.RequestGetAIModelSchema],
- ctx *gin.Context,
- max_timeout_seconds int,
- ) {
- session, err := createSession(
- r,
- access_types.PLUGIN_ACCESS_TYPE_MODEL,
- access_types.PLUGIN_ACCESS_ACTION_GET_AI_MODEL_SCHEMA,
- ctx.GetString("cluster_id"),
- )
- if err != nil {
- ctx.JSON(500, gin.H{"error": err.Error()})
- return
- }
- defer session.Close()
- baseSSEService(
- func() (*stream.Stream[model_entities.GetModelSchemasResponse], error) {
- return plugin_daemon.GetAIModelSchema(session, &r.Data)
- },
- ctx,
- max_timeout_seconds,
- )
- }
- func GetLLMNumTokens(
- r *plugin_entities.InvokePluginRequest[requests.RequestGetLLMNumTokens],
- ctx *gin.Context,
- max_timeout_seconds int,
- ) {
- session, err := createSession(
- r,
- access_types.PLUGIN_ACCESS_TYPE_MODEL,
- access_types.PLUGIN_ACCESS_ACTION_GET_LLM_NUM_TOKENS,
- ctx.GetString("cluster_id"),
- )
- if err != nil {
- ctx.JSON(500, gin.H{"error": err.Error()})
- return
- }
- defer session.Close()
- baseSSEService(
- func() (*stream.Stream[model_entities.LLMGetNumTokensResponse], error) {
- return plugin_daemon.GetLLMNumTokens(session, &r.Data)
- },
- ctx,
- max_timeout_seconds,
- )
- }
|