channel_affinity_template_test.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package service
  2. import (
  3. "net/http/httptest"
  4. "testing"
  5. "github.com/gin-gonic/gin"
  6. "github.com/stretchr/testify/require"
  7. )
  8. func buildChannelAffinityTemplateContextForTest(meta channelAffinityMeta) *gin.Context {
  9. rec := httptest.NewRecorder()
  10. ctx, _ := gin.CreateTestContext(rec)
  11. setChannelAffinityContext(ctx, meta)
  12. return ctx
  13. }
  14. func TestApplyChannelAffinityOverrideTemplate_NoTemplate(t *testing.T) {
  15. ctx := buildChannelAffinityTemplateContextForTest(channelAffinityMeta{
  16. RuleName: "rule-no-template",
  17. })
  18. base := map[string]interface{}{
  19. "temperature": 0.7,
  20. }
  21. merged, applied := ApplyChannelAffinityOverrideTemplate(ctx, base)
  22. require.False(t, applied)
  23. require.Equal(t, base, merged)
  24. }
  25. func TestApplyChannelAffinityOverrideTemplate_MergeTemplate(t *testing.T) {
  26. ctx := buildChannelAffinityTemplateContextForTest(channelAffinityMeta{
  27. RuleName: "rule-with-template",
  28. ParamTemplate: map[string]interface{}{
  29. "temperature": 0.2,
  30. "top_p": 0.95,
  31. },
  32. UsingGroup: "default",
  33. ModelName: "gpt-4.1",
  34. RequestPath: "/v1/responses",
  35. KeySourceType: "gjson",
  36. KeySourcePath: "prompt_cache_key",
  37. KeyHint: "abcd...wxyz",
  38. KeyFingerprint: "abcd1234",
  39. })
  40. base := map[string]interface{}{
  41. "temperature": 0.7,
  42. "max_tokens": 2000,
  43. }
  44. merged, applied := ApplyChannelAffinityOverrideTemplate(ctx, base)
  45. require.True(t, applied)
  46. require.Equal(t, 0.2, merged["temperature"])
  47. require.Equal(t, 0.95, merged["top_p"])
  48. require.Equal(t, 2000, merged["max_tokens"])
  49. require.Equal(t, 0.7, base["temperature"])
  50. anyInfo, ok := ctx.Get(ginKeyChannelAffinityLogInfo)
  51. require.True(t, ok)
  52. info, ok := anyInfo.(map[string]interface{})
  53. require.True(t, ok)
  54. overrideInfoAny, ok := info["override_template"]
  55. require.True(t, ok)
  56. overrideInfo, ok := overrideInfoAny.(map[string]interface{})
  57. require.True(t, ok)
  58. require.Equal(t, true, overrideInfo["applied"])
  59. require.Equal(t, "rule-with-template", overrideInfo["rule_name"])
  60. require.EqualValues(t, 2, overrideInfo["param_override_keys"])
  61. }