model.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package service
  2. import (
  3. "github.com/gogf/gf/v2/frame/g"
  4. "github.com/gogf/gf/v2/os/gctx"
  5. "github.com/gogf/gf/v2/util/gconv"
  6. "github.com/safejob/dify-sdk-go"
  7. "github.com/safejob/dify-sdk-go/types"
  8. "log"
  9. "strings"
  10. )
  11. type Model struct {
  12. }
  13. func (ml *Model) Execute(b *BidInfo) (bool, string, bool, int, bool) {
  14. return ml.Do(b, 2)
  15. }
  16. func (ml *Model) Do(b *BidInfo, t int) (bool, string, bool, int, bool) {
  17. result := ml.post(b.Id, b.OriginalDetail, t)
  18. if result == nil {
  19. return false, "", true, 0, true
  20. }
  21. for k, v := range result {
  22. if v == nil {
  23. delete(result, k)
  24. }
  25. }
  26. quoteMode, _ := result["报价模式"].(string)
  27. for k, _ := range allQuoteMode {
  28. if strings.HasPrefix(quoteMode, k) {
  29. quoteMode = k
  30. }
  31. }
  32. if !allQuoteMode[quoteMode] {
  33. quoteMode = QuoteMode_Other
  34. }
  35. bidCommonwealth := 0
  36. if result["中标联合体"] != nil {
  37. if strings.HasPrefix(gconv.String(result["中标联合体"]), "是") {
  38. bidCommonwealth = 1
  39. } else {
  40. bidCommonwealth = -1
  41. }
  42. }
  43. return true, quoteMode, true, bidCommonwealth, true
  44. }
  45. func (ml *Model) post(_id, detail string, t int) map[string]interface{} {
  46. ctx := gctx.New()
  47. client, err := dify.NewClient(dify.ClientConfig{
  48. ApiServer: g.Config().MustGet(ctx, "model.apiServer").String(),
  49. ApiKey: g.Config().MustGet(ctx, "model.apiKey").String(),
  50. User: g.Config().MustGet(ctx, "model.user").String(),
  51. })
  52. if err != nil {
  53. log.Println(_id, "%v :Error running client: %v", err)
  54. return nil
  55. }
  56. resp, err := client.WorkflowApp().RunBlock(ctx, types.WorkflowRequest{
  57. Inputs: map[string]interface{}{
  58. "detail": detail,
  59. "type": t,
  60. },
  61. })
  62. if err != nil {
  63. log.Println(_id, "%v :Error running client: %v", err)
  64. return nil
  65. }
  66. log.Println(_id, "大模型", resp.Data.Outputs)
  67. return resp.Data.Outputs
  68. }