codex_image_generation_bridge.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package service
  2. import "strings"
  3. const featureKeyCodexImageGenerationBridge = "codex_image_generation_bridge"
  4. const (
  5. featureKeyCodexImageGenerationExplicitToolPolicy = "codex_image_generation_explicit_tool_policy"
  6. codexImageGenerationExplicitToolPolicyAllow = "allow"
  7. codexImageGenerationExplicitToolPolicyStrip = "strip"
  8. )
  9. func boolOverridePtr(v bool) *bool {
  10. return &v
  11. }
  12. func boolOverrideFromMap(values map[string]any, keys ...string) *bool {
  13. if values == nil {
  14. return nil
  15. }
  16. for _, key := range keys {
  17. if v, ok := values[key].(bool); ok {
  18. return boolOverridePtr(v)
  19. }
  20. }
  21. return nil
  22. }
  23. func stringOverrideFromMap(values map[string]any, keys ...string) (string, bool) {
  24. if values == nil {
  25. return "", false
  26. }
  27. for _, key := range keys {
  28. if v, ok := values[key].(string); ok {
  29. return v, true
  30. }
  31. }
  32. return "", false
  33. }
  34. func normalizeCodexImageGenerationExplicitToolPolicy(value string) string {
  35. switch strings.ToLower(strings.TrimSpace(value)) {
  36. case codexImageGenerationExplicitToolPolicyStrip, "remove", "drop":
  37. return codexImageGenerationExplicitToolPolicyStrip
  38. default:
  39. return codexImageGenerationExplicitToolPolicyAllow
  40. }
  41. }
  42. func platformBoolOverride(values map[string]any, key string, platform string) *bool {
  43. if values == nil {
  44. return nil
  45. }
  46. if v, ok := values[key].(bool); ok {
  47. return boolOverridePtr(v)
  48. }
  49. raw, ok := values[key].(map[string]any)
  50. if !ok {
  51. return nil
  52. }
  53. platform = strings.TrimSpace(platform)
  54. if platform == "" {
  55. return nil
  56. }
  57. if v, ok := raw[platform].(bool); ok {
  58. return boolOverridePtr(v)
  59. }
  60. return nil
  61. }
  62. // CodexImageGenerationBridgeOverride returns the channel-level override for Codex
  63. // image_generation bridge injection. Nil means follow the global/account policy.
  64. func (c *Channel) CodexImageGenerationBridgeOverride(platform string) *bool {
  65. if c == nil {
  66. return nil
  67. }
  68. return platformBoolOverride(c.FeaturesConfig, featureKeyCodexImageGenerationBridge, platform)
  69. }
  70. // CodexImageGenerationBridgeOverride returns the account-level override for Codex
  71. // image_generation bridge injection. Nil means follow the channel/global policy.
  72. func (a *Account) CodexImageGenerationBridgeOverride() *bool {
  73. if a == nil || a.Platform != PlatformOpenAI || a.Extra == nil {
  74. return nil
  75. }
  76. if override := boolOverrideFromMap(a.Extra, featureKeyCodexImageGenerationBridge, "codex_image_generation_bridge_enabled"); override != nil {
  77. return override
  78. }
  79. openaiConfig, _ := a.Extra[PlatformOpenAI].(map[string]any)
  80. return boolOverrideFromMap(openaiConfig, featureKeyCodexImageGenerationBridge, "codex_image_generation_bridge_enabled")
  81. }
  82. // CodexImageGenerationExplicitToolPolicy returns the account-level policy for
  83. // client-provided Codex /responses image_generation tools. Unknown or unset
  84. // values default to allow to preserve existing behavior.
  85. func (a *Account) CodexImageGenerationExplicitToolPolicy() string {
  86. if a == nil || a.Platform != PlatformOpenAI || a.Extra == nil {
  87. return codexImageGenerationExplicitToolPolicyAllow
  88. }
  89. if policy, ok := stringOverrideFromMap(a.Extra, featureKeyCodexImageGenerationExplicitToolPolicy); ok {
  90. return normalizeCodexImageGenerationExplicitToolPolicy(policy)
  91. }
  92. openaiConfig, _ := a.Extra[PlatformOpenAI].(map[string]any)
  93. if policy, ok := stringOverrideFromMap(openaiConfig, featureKeyCodexImageGenerationExplicitToolPolicy); ok {
  94. return normalizeCodexImageGenerationExplicitToolPolicy(policy)
  95. }
  96. return codexImageGenerationExplicitToolPolicyAllow
  97. }