suffix.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package reasoning
  2. import (
  3. "strings"
  4. "github.com/samber/lo"
  5. )
  6. var EffortSuffixes = []string{"-max", "-xhigh", "-high", "-medium", "-low", "-minimal"}
  7. var OpenAIEffortSuffixes = []string{"-high", "-minimal", "-low", "-medium", "-none", "-xhigh"}
  8. var DeepSeekV4EffortSuffixes = []string{"-none", "-max"}
  9. // TrimEffortSuffix -> modelName level(low) exists
  10. func TrimEffortSuffix(modelName string) (string, string, bool) {
  11. return TrimEffortSuffixWithSuffixes(modelName, EffortSuffixes)
  12. }
  13. func TrimEffortSuffixWithSuffixes(modelName string, suffixes []string) (string, string, bool) {
  14. suffix, found := lo.Find(suffixes, func(s string) bool {
  15. return strings.HasSuffix(modelName, s)
  16. })
  17. if !found {
  18. return modelName, "", false
  19. }
  20. return strings.TrimSuffix(modelName, suffix), strings.TrimPrefix(suffix, "-"), true
  21. }
  22. func ParseOpenAIReasoningEffortFromModelSuffix(modelName string) (string, string) {
  23. baseModel, effort, ok := TrimEffortSuffixWithSuffixes(modelName, OpenAIEffortSuffixes)
  24. if !ok {
  25. return "", modelName
  26. }
  27. return effort, baseModel
  28. }
  29. func ParseDeepSeekV4ThinkingSuffix(modelName string) (baseModel string, thinkingType string, effort string, ok bool) {
  30. baseModel, suffix, ok := TrimEffortSuffixWithSuffixes(modelName, DeepSeekV4EffortSuffixes)
  31. if !ok || !strings.HasPrefix(baseModel, "deepseek-v4-") {
  32. return modelName, "", "", false
  33. }
  34. switch suffix {
  35. case "none":
  36. return baseModel, "disabled", "", true
  37. case "max":
  38. return baseModel, "enabled", "max", true
  39. default:
  40. return modelName, "", "", false
  41. }
  42. }