http_request.go 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package real
  2. import (
  3. "github.com/langgenius/dify-plugin-daemon/internal/core/dify_invocation"
  4. "github.com/langgenius/dify-plugin-daemon/internal/types/entities/model_entities"
  5. "github.com/langgenius/dify-plugin-daemon/internal/types/entities/tool_entities"
  6. "github.com/langgenius/dify-plugin-daemon/internal/utils/http_requests"
  7. "github.com/langgenius/dify-plugin-daemon/internal/utils/stream"
  8. )
  9. func Request[T any](i *RealBackwardsInvocation, method string, path string, options ...http_requests.HttpOptions) (*T, error) {
  10. options = append(options,
  11. http_requests.HttpHeader(map[string]string{
  12. "X-Inner-Api-Key": i.dify_inner_api_key,
  13. }),
  14. http_requests.HttpWriteTimeout(5000),
  15. http_requests.HttpReadTimeout(240000),
  16. )
  17. return http_requests.RequestAndParse[T](i.client, i.difyPath(path), method, options...)
  18. }
  19. func StreamResponse[T any](i *RealBackwardsInvocation, method string, path string, options ...http_requests.HttpOptions) (*stream.Stream[T], error) {
  20. options = append(
  21. options, http_requests.HttpHeader(map[string]string{
  22. "X-Inner-Api-Key": i.dify_inner_api_key,
  23. }),
  24. http_requests.HttpWriteTimeout(5000),
  25. http_requests.HttpReadTimeout(240000),
  26. )
  27. return http_requests.RequestAndParseStream[T](i.client, i.difyPath(path), method, options...)
  28. }
  29. func (i *RealBackwardsInvocation) InvokeLLM(payload *dify_invocation.InvokeLLMRequest) (*stream.Stream[model_entities.LLMResultChunk], error) {
  30. return StreamResponse[model_entities.LLMResultChunk](i, "POST", "invoke/llm", http_requests.HttpPayloadJson(payload))
  31. }
  32. func (i *RealBackwardsInvocation) InvokeTextEmbedding(payload *dify_invocation.InvokeTextEmbeddingRequest) (*model_entities.TextEmbeddingResult, error) {
  33. return Request[model_entities.TextEmbeddingResult](i, "POST", "invoke/text-embedding", http_requests.HttpPayloadJson(payload))
  34. }
  35. func (i *RealBackwardsInvocation) InvokeRerank(payload *dify_invocation.InvokeRerankRequest) (*model_entities.RerankResult, error) {
  36. return Request[model_entities.RerankResult](i, "POST", "invoke/rerank", http_requests.HttpPayloadJson(payload))
  37. }
  38. func (i *RealBackwardsInvocation) InvokeTTS(payload *dify_invocation.InvokeTTSRequest) (*stream.Stream[model_entities.TTSResult], error) {
  39. return StreamResponse[model_entities.TTSResult](i, "POST", "invoke/tts", http_requests.HttpPayloadJson(payload))
  40. }
  41. func (i *RealBackwardsInvocation) InvokeSpeech2Text(payload *dify_invocation.InvokeSpeech2TextRequest) (*model_entities.Speech2TextResult, error) {
  42. return Request[model_entities.Speech2TextResult](i, "POST", "invoke/speech2text", http_requests.HttpPayloadJson(payload))
  43. }
  44. func (i *RealBackwardsInvocation) InvokeModeration(payload *dify_invocation.InvokeModerationRequest) (*model_entities.ModerationResult, error) {
  45. return Request[model_entities.ModerationResult](i, "POST", "invoke/moderation", http_requests.HttpPayloadJson(payload))
  46. }
  47. func (i *RealBackwardsInvocation) InvokeTool(payload *dify_invocation.InvokeToolRequest) (*stream.Stream[tool_entities.ToolResponseChunk], error) {
  48. return StreamResponse[tool_entities.ToolResponseChunk](i, "POST", "invoke/tool", http_requests.HttpPayloadJson(payload))
  49. }
  50. func (i *RealBackwardsInvocation) InvokeApp(payload *dify_invocation.InvokeAppRequest) (*stream.Stream[map[string]any], error) {
  51. return StreamResponse[map[string]any](i, "POST", "invoke/app", http_requests.HttpPayloadJson(payload))
  52. }
  53. func (i *RealBackwardsInvocation) InvokeEncrypt(payload *dify_invocation.InvokeEncryptRequest) (map[string]any, error) {
  54. if !payload.EncryptRequired(payload.Data) {
  55. return payload.Data, nil
  56. }
  57. data, err := Request[map[string]any](i, "POST", "invoke/encrypt", http_requests.HttpPayloadJson(payload))
  58. if err != nil {
  59. return nil, err
  60. }
  61. return *data, nil
  62. }