Merge pull request #6718 from lyy0709/codex/astra-ultra-catalog

fix(codex): preserve Astra Ultra workflow metadata
This commit is contained in:
Wesley Liddick
2026-09-07 18:46:11 +08:00
committed by GitHub
4 changed files with 70 additions and 5 deletions
@@ -9,6 +9,7 @@ import (
var codexToolCapabilityFields = []string{
"supports_search_tool", "apply_patch_tool_type", "comp_hash", "tool_mode", "use_responses_lite",
"multi_agent_reasoning_effort", "multi_agent_version",
}
func applyCodexToolCapabilities(dst, src map[string]json.RawMessage, overwrite bool) bool {
@@ -18,7 +19,7 @@ func applyCodexToolCapabilities(dst, src map[string]json.RawMessage, overwrite b
if len(value) == 0 {
continue
}
// These five Codex fields are nullable booleans or strings, never arbitrary objects.
// These Codex fields are nullable booleans or strings, never arbitrary objects.
if !bytes.Equal(value, []byte("null")) {
if field == "supports_search_tool" || field == "use_responses_lite" {
if !bytes.Equal(value, []byte("true")) && !bytes.Equal(value, []byte("false")) {
@@ -422,6 +423,8 @@ func configuredCodexReasoningLevelDescription(level string) string {
return "Extra-high reasoning depth for difficult tasks"
case "max":
return "Maximum reasoning depth for complex tasks"
case "ultra":
return "Maximum reasoning with automatic task delegation"
default:
return "Reasoning effort supported by the upstream model"
}
@@ -9,6 +9,58 @@ import (
"github.com/stretchr/testify/require"
)
func TestAstraUltraCatalogPreservesWorkflowMetadata(t *testing.T) {
// Ultra is a Codex workflow. Its inference effort must survive catalog sync,
// aliases and group generation instead of silently falling back to max.
_, metadata, err := extractUpstreamModelCatalog([]byte(`{"models":[{
"slug":"gpt-6-astra","supported_reasoning_levels":[{"effort":"high"},{"effort":"ultra"}],
"multi_agent_reasoning_effort":"high","multi_agent_version":"v2"
}]}`), false)
require.NoError(t, err)
account := Account{Platform: PlatformOpenAI, Type: AccountTypeAPIKey, Credentials: map[string]any{
"base_url": "https://relay.example/v1", "model_mapping": map[string]any{"public-astra": "gpt-6-astra"},
}}
account.SetUpstreamModelMetadataSnapshot(UpstreamModelMetadataSnapshot{Models: metadata})
body, err := buildCodexModelsManifestForAccounts(PlatformOpenAI, []string{"public-astra"}, []Account{account}, nil, true)
require.NoError(t, err)
model := decodeCodexManifestModels(t, body)[0]
require.Equal(t, "high", model["multi_agent_reasoning_effort"])
require.Equal(t, "v2", model["multi_agent_version"])
require.Equal(t, []string{"high", "ultra"}, effortsFromManifestModel(t, model))
peer := Account{Platform: PlatformOpenAI, Type: AccountTypeAPIKey, Credentials: account.Credentials}
body, err = buildCodexModelsManifestForAccounts(PlatformOpenAI, []string{"public-astra"}, []Account{account, peer}, nil, true)
require.NoError(t, err)
model = decodeCodexManifestModels(t, body)[0]
require.Nil(t, model["multi_agent_reasoning_effort"], "do not advertise one account's override for all peers")
require.Nil(t, model["multi_agent_version"])
}
func TestAstraUltraCatalogPreservesExplicitWorkflowOverrides(t *testing.T) {
account := &Account{Platform: PlatformOpenAI, Type: AccountTypeAPIKey,
Credentials: map[string]any{"base_url": "https://relay.example/v1"}}
for _, fields := range []string{
`"multi_agent_reasoning_effort":"high","multi_agent_version":"v1"`,
`"multi_agent_reasoning_effort":null,"multi_agent_version":null`,
} {
for _, source := range []string{
`{"models":[{"slug":"gpt-6-astra",` + fields + `}]}`,
`{"data":[{"id":"gpt-6-astra",` + fields + `}]}`,
} {
converted := convertOpenAIModelListToCodexManifestForAccount([]byte(source), account)
body, err := completeAPIKeyCodexModelsManifestMetadata(converted, true, account)
require.NoError(t, err)
model := decodeCodexManifestModels(t, body)[0]
var expected map[string]any
require.NoError(t, json.Unmarshal([]byte(`{`+fields+`}`), &expected))
for key, value := range expected {
require.Contains(t, model, key)
require.Equal(t, value, model[key])
}
}
}
}
func TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations(t *testing.T) {
newAccount := func(baseURL string) Account {
return Account{Platform: PlatformOpenAI, Type: AccountTypeAPIKey, Credentials: map[string]any{
@@ -374,6 +374,7 @@ type configuredCodexModelDescriptor struct {
Description string `json:"description"`
DefaultReasoningLevel *string `json:"default_reasoning_level,omitempty"`
SupportedReasoningLevels []configuredCodexReasoningLevel `json:"supported_reasoning_levels"`
MultiAgentReasoningEffort *string `json:"multi_agent_reasoning_effort,omitempty"`
ShellType string `json:"shell_type"`
Visibility string `json:"visibility"`
SupportedInAPI bool `json:"supported_in_api"`
@@ -505,6 +506,11 @@ func newConfiguredCodexModelDescriptor(modelID string) configuredCodexModelDescr
descriptor.MaxContextWindow = configuredCodexGPT56MaxContext
}
if isOpenAIGPT6AstraModel(modelID) {
// Codex resolves the Ultra workflow to this effort before inference.
// openai/codex a9896da3: codex-rs/models-manager/models.json.
multiAgentEffort := "xhigh"
descriptor.MultiAgentReasoningEffort = &multiAgentEffort
descriptor.MultiAgentVersion = "v2"
descriptor.ContextWindow = configuredCodexGPT6AstraContext
descriptor.MaxContextWindow = configuredCodexGPT6AstraContext
}
@@ -615,7 +621,7 @@ func configuredCodexGPTReasoningLevels(modelID string) []configuredCodexReasonin
Description: "Maximum reasoning depth for complex tasks",
})
}
if normalized == "gpt-5.6-sol" || normalized == "gpt-5.6-terra" {
if isOpenAIGPT6AstraModel(modelID) || normalized == "gpt-5.6-sol" || normalized == "gpt-5.6-terra" {
levels = append(levels, configuredCodexReasoningLevel{
Effort: "ultra",
Description: "Maximum reasoning with automatic task delegation",
@@ -353,8 +353,10 @@ func TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback(t
require.Equal(t, "GPT-6 Astra", gpt6Astra.DisplayName)
require.NotNil(t, gpt6Astra.DefaultReasoningLevel)
require.Equal(t, "medium", *gpt6Astra.DefaultReasoningLevel)
require.Equal(t, []string{"low", "medium", "high", "xhigh", "max"}, effortsFromConfiguredCodexLevels(gpt6Astra.SupportedReasoningLevels))
require.NotContains(t, gpt6Astra.SupportedReasoningLevels, configuredCodexReasoningLevel{Effort: "ultra"})
require.Equal(t, []string{"low", "medium", "high", "xhigh", "max", "ultra"}, effortsFromConfiguredCodexLevels(gpt6Astra.SupportedReasoningLevels))
require.NotNil(t, gpt6Astra.MultiAgentReasoningEffort)
require.Equal(t, "xhigh", *gpt6Astra.MultiAgentReasoningEffort)
require.Equal(t, "v2", gpt6Astra.MultiAgentVersion)
require.NotContains(t, gpt6Astra.SupportedReasoningLevels, configuredCodexReasoningLevel{Effort: "none"})
require.True(t, configuredCodexSupportsPriorityServiceTier("gpt-6-astra"))
require.Equal(t, []configuredCodexServiceTier{{
@@ -370,7 +372,9 @@ func TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback(t
require.Equal(t, int64(1_050_000), gpt6Astra.MaxContextWindow)
gpt6 := newConfiguredCodexModelDescriptor("gpt-6")
require.Equal(t, "GPT-6 (Astra)", gpt6.DisplayName)
require.Equal(t, []string{"low", "medium", "high", "xhigh", "max"}, effortsFromConfiguredCodexLevels(gpt6.SupportedReasoningLevels))
require.Equal(t, []string{"low", "medium", "high", "xhigh", "max", "ultra"}, effortsFromConfiguredCodexLevels(gpt6.SupportedReasoningLevels))
require.NotNil(t, gpt6.MultiAgentReasoningEffort)
require.Equal(t, "xhigh", *gpt6.MultiAgentReasoningEffort)
require.Equal(t, int64(1_050_000), gpt6.ContextWindow)
gpt55 := newConfiguredCodexModelDescriptor("gpt-5.5")