12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- package plugin_daemon
- import (
- "fmt"
- "github.com/langgenius/dify-plugin-daemon/internal/core/dify_invocation"
- "github.com/langgenius/dify-plugin-daemon/internal/core/plugin_daemon/backwards_invocation"
- "github.com/langgenius/dify-plugin-daemon/internal/core/session_manager"
- "github.com/langgenius/dify-plugin-daemon/internal/types/entities"
- "github.com/langgenius/dify-plugin-daemon/internal/utils/parser"
- )
- func invokeDify(
- runtime entities.PluginRuntimeInterface,
- invoke_from PluginAccessType,
- session *session_manager.Session, data []byte,
- ) error {
- // unmarshal invoke data
- request, err := parser.UnmarshalJsonBytes[map[string]any](data)
- if err != nil {
- return fmt.Errorf("unmarshal invoke request failed: %s", err.Error())
- }
- // prepare invocation arguments
- request_handle, err := prepareDifyInvocationArguments(session, request)
- if err != nil {
- return err
- }
- defer request_handle.End()
- if invoke_from == PLUGIN_ACCESS_TYPE_MODEL {
- request_handle.WriteError(fmt.Errorf("you can not invoke dify from %s", invoke_from))
- return nil
- }
- // dispatch invocation task
- dispatchDifyInvocationTask(request_handle)
- return nil
- }
- func prepareDifyInvocationArguments(session *session_manager.Session, request map[string]any) (*backwards_invocation.BackwardsInvocation, error) {
- typ, ok := request["type"].(string)
- if !ok {
- return nil, fmt.Errorf("invoke request missing type: %s", request)
- }
- // get request id
- backwards_request_id, ok := request["backwards_request_id"].(string)
- if !ok {
- return nil, fmt.Errorf("invoke request missing request_id: %s", request)
- }
- // get request
- detailed_request, ok := request["request"].(map[string]any)
- if !ok {
- return nil, fmt.Errorf("invoke request missing request: %s", request)
- }
- return backwards_invocation.NewBackwardsInvocation(
- backwards_invocation.BackwardsInvocationType(typ),
- backwards_request_id, session, detailed_request,
- ), nil
- }
- func dispatchDifyInvocationTask(handle *backwards_invocation.BackwardsInvocation) {
- switch handle.Type() {
- case dify_invocation.INVOKE_TYPE_TOOL:
- _, err := parser.MapToStruct[dify_invocation.InvokeToolRequest](handle.RequestData())
- if err != nil {
- handle.WriteError(fmt.Errorf("unmarshal invoke tool request failed: %s", err.Error()))
- return
- }
- default:
- handle.WriteError(fmt.Errorf("unsupported invoke type: %s", handle.Type()))
- }
- }
- func setTaskContext(session *session_manager.Session, r *dify_invocation.BaseInvokeDifyRequest) {
- r.TenantId = session.TenantID()
- r.UserId = session.UserID()
- }
|