upstream_capability_test.go 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package openai_compat
  2. import "testing"
  3. func TestResolveResponsesSupport(t *testing.T) {
  4. tests := []struct {
  5. name string
  6. extra map[string]any
  7. want AccountResponsesSupport
  8. }{
  9. {"nil extra", nil, ResponsesSupportUnknown},
  10. {"empty extra", map[string]any{}, ResponsesSupportUnknown},
  11. {"key missing", map[string]any{"other": "value"}, ResponsesSupportUnknown},
  12. {"value true", map[string]any{ExtraKeyResponsesSupported: true}, ResponsesSupportYes},
  13. {"value false", map[string]any{ExtraKeyResponsesSupported: false}, ResponsesSupportNo},
  14. {"value wrong type string", map[string]any{ExtraKeyResponsesSupported: "true"}, ResponsesSupportUnknown},
  15. {"value wrong type number", map[string]any{ExtraKeyResponsesSupported: 1}, ResponsesSupportUnknown},
  16. {"value nil", map[string]any{ExtraKeyResponsesSupported: nil}, ResponsesSupportUnknown},
  17. {"force responses", map[string]any{ExtraKeyResponsesMode: string(ResponsesSupportModeForceResponses)}, ResponsesSupportYes},
  18. {"force chat completions", map[string]any{ExtraKeyResponsesMode: string(ResponsesSupportModeForceChatCompletions)}, ResponsesSupportNo},
  19. {"auto follows probe", map[string]any{ExtraKeyResponsesMode: string(ResponsesSupportModeAuto), ExtraKeyResponsesSupported: false}, ResponsesSupportNo},
  20. {"invalid mode follows probe", map[string]any{ExtraKeyResponsesMode: "bogus", ExtraKeyResponsesSupported: true}, ResponsesSupportYes},
  21. {"force responses overrides probe false", map[string]any{ExtraKeyResponsesMode: string(ResponsesSupportModeForceResponses), ExtraKeyResponsesSupported: false}, ResponsesSupportYes},
  22. {"force chat completions overrides probe true", map[string]any{ExtraKeyResponsesMode: string(ResponsesSupportModeForceChatCompletions), ExtraKeyResponsesSupported: true}, ResponsesSupportNo},
  23. }
  24. for _, tc := range tests {
  25. t.Run(tc.name, func(t *testing.T) {
  26. got := ResolveResponsesSupport(tc.extra)
  27. if got != tc.want {
  28. t.Errorf("ResolveResponsesSupport(%v) = %v, want %v", tc.extra, got, tc.want)
  29. }
  30. })
  31. }
  32. }
  33. func TestShouldUseResponsesAPI(t *testing.T) {
  34. tests := []struct {
  35. name string
  36. extra map[string]any
  37. want bool
  38. }{
  39. // 关键不变量:未探测必须返回 true(保留旧行为)
  40. {"unknown defaults to true (preserve old behavior)", nil, true},
  41. {"unknown empty defaults to true", map[string]any{}, true},
  42. {"unknown wrong type defaults to true", map[string]any{ExtraKeyResponsesSupported: "yes"}, true},
  43. // 已探测:标记决定
  44. {"explicitly supported", map[string]any{ExtraKeyResponsesSupported: true}, true},
  45. {"explicitly unsupported", map[string]any{ExtraKeyResponsesSupported: false}, false},
  46. // 手动覆盖:覆盖自动探测结果
  47. {"force responses overrides unsupported probe", map[string]any{ExtraKeyResponsesMode: string(ResponsesSupportModeForceResponses), ExtraKeyResponsesSupported: false}, true},
  48. {"force chat completions overrides supported probe", map[string]any{ExtraKeyResponsesMode: string(ResponsesSupportModeForceChatCompletions), ExtraKeyResponsesSupported: true}, false},
  49. }
  50. for _, tc := range tests {
  51. t.Run(tc.name, func(t *testing.T) {
  52. got := ShouldUseResponsesAPI(tc.extra)
  53. if got != tc.want {
  54. t.Errorf("ShouldUseResponsesAPI(%v) = %v, want %v", tc.extra, got, tc.want)
  55. }
  56. })
  57. }
  58. }
  59. func TestNormalizeResponsesSupportMode(t *testing.T) {
  60. tests := []struct {
  61. name string
  62. mode string
  63. want ResponsesSupportMode
  64. }{
  65. {"empty", "", ResponsesSupportModeAuto},
  66. {"auto", "auto", ResponsesSupportModeAuto},
  67. {"force responses", "force_responses", ResponsesSupportModeForceResponses},
  68. {"force chat completions", "force_chat_completions", ResponsesSupportModeForceChatCompletions},
  69. {"invalid", "enabled", ResponsesSupportModeAuto},
  70. }
  71. for _, tc := range tests {
  72. t.Run(tc.name, func(t *testing.T) {
  73. got := NormalizeResponsesSupportMode(tc.mode)
  74. if got != tc.want {
  75. t.Errorf("NormalizeResponsesSupportMode(%q) = %q, want %q", tc.mode, got, tc.want)
  76. }
  77. })
  78. }
  79. }