feat(llm): bump seed-gen and patcher agents to newest models

Tier-preserving upgrade onto the models added in #544:
- seed-gen: primary claude-4.5-sonnet -> claude-4.6-sonnet; fallbacks
  collapsed to openai-gpt-5.5, gemini-pro (dropped redundant claude-4-sonnet
  now that claude-4.6-sonnet is primary).
- patcher (SWE, RootCause, Reflection, ContextRetriever, code-snippet
  helper): primary openai-gpt-4.1 -> openai-gpt-5.5; ContextRetriever
  cheap tier openai-gpt-4.1-mini -> openai-gpt-5.4-mini; fallback
  claude-4.5-sonnet -> claude-4.6-sonnet. gemini-pro left as-is.

Validated together with the litellm temperature fix in this PR via the
Docker e2e on example-libpng: seed-gen on claude-4.6-sonnet and patcher
on openai-gpt-5.5 both run healthy LLM turns with no errors.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Riccardo Schirone
2026-05-15 14:40:08 +00:00
parent 93c0afcd07
commit d6da62d06c
6 changed files with 15 additions and 16 deletions
@@ -434,8 +434,8 @@ def _create_understand_code_snippet_chain() -> Runnable:
return (
UNDERSTAND_CODE_SNIPPET_PROMPT
| create_default_llm_with_temperature(
model_name=ButtercupLLM.OPENAI_GPT_4_1.value,
fallback_models=[ButtercupLLM.CLAUDE_4_5_SONNET, ButtercupLLM.GEMINI_PRO],
model_name=ButtercupLLM.OPENAI_GPT_5_5.value,
fallback_models=[ButtercupLLM.CLAUDE_4_6_SONNET, ButtercupLLM.GEMINI_PRO],
)
| StrOutputParser()
)
@@ -587,8 +587,8 @@ Remember to call the `test_instructions` tool to log and validate any test comma
def _are_test_instructions_valid(instructions: str, output: bytes, error: bytes) -> bool:
"""Validate a set of test instructions by executing them inside the project environment."""
llm = create_default_llm(
model_name=ButtercupLLM.OPENAI_GPT_4_1.value,
fallback_models=[ButtercupLLM.CLAUDE_4_5_SONNET, ButtercupLLM.GEMINI_PRO],
model_name=ButtercupLLM.OPENAI_GPT_5_5.value,
fallback_models=[ButtercupLLM.CLAUDE_4_6_SONNET, ButtercupLLM.GEMINI_PRO],
)
chain = ARE_VALID_TEST_INSTRUCTIONS_PROMPT | llm | StrOutputParser()
res = chain.invoke(
@@ -717,10 +717,10 @@ class ContextRetrieverAgent(PatcherAgentBase):
def __post_init__(self) -> None:
"""Initialize a few fields"""
self.llm = create_default_llm(model_name=ButtercupLLM.OPENAI_GPT_4_1.value)
self.cheap_llm = create_default_llm(model_name=ButtercupLLM.OPENAI_GPT_4_1_MINI.value)
self.llm = create_default_llm(model_name=ButtercupLLM.OPENAI_GPT_5_5.value)
self.cheap_llm = create_default_llm(model_name=ButtercupLLM.OPENAI_GPT_5_4_MINI.value)
self.cheap_fallback_llms = [
create_default_llm(model_name=ButtercupLLM.CLAUDE_4_5_SONNET.value),
create_default_llm(model_name=ButtercupLLM.CLAUDE_4_6_SONNET.value),
create_default_llm(model_name=ButtercupLLM.GEMINI_PRO.value),
]
@@ -405,9 +405,9 @@ class ReflectionAgent(PatcherAgentBase):
def __post_init__(self) -> None:
"""Initialize a few fields"""
default_llm = create_default_llm(model_name=ButtercupLLM.OPENAI_GPT_4_1.value)
default_llm = create_default_llm(model_name=ButtercupLLM.OPENAI_GPT_5_5.value)
fallback_llms: list[Runnable] = []
for fb_model in [ButtercupLLM.CLAUDE_4_5_SONNET, ButtercupLLM.GEMINI_PRO]:
for fb_model in [ButtercupLLM.CLAUDE_4_6_SONNET, ButtercupLLM.GEMINI_PRO]:
fallback_llms.append(create_default_llm(model_name=fb_model.value))
self.llm = default_llm.with_fallbacks(fallback_llms)
@@ -130,7 +130,7 @@ class RootCauseAgent(PatcherAgentBase):
"max_tokens": 20000,
}
default_llm = create_default_llm_with_temperature(
model_name=ButtercupLLM.OPENAI_GPT_4_1.value,
model_name=ButtercupLLM.OPENAI_GPT_5_5.value,
**kwargs,
)
fallback_llms = [
@@ -138,7 +138,7 @@ class RootCauseAgent(PatcherAgentBase):
model_name=m.value,
**kwargs,
)
for m in [ButtercupLLM.CLAUDE_4_5_SONNET, ButtercupLLM.GEMINI_PRO]
for m in [ButtercupLLM.CLAUDE_4_6_SONNET, ButtercupLLM.GEMINI_PRO]
]
self.llm = default_llm.with_fallbacks(fallback_llms)
+2 -2
View File
@@ -347,12 +347,12 @@ class SWEAgent(PatcherAgentBase):
"max_tokens": 20000,
}
self.default_llm = create_default_llm_with_temperature(
model_name=ButtercupLLM.OPENAI_GPT_4_1.value,
model_name=ButtercupLLM.OPENAI_GPT_5_5.value,
**kwargs,
)
fallback_llms: list[Runnable] = []
for fb_model in [
ButtercupLLM.CLAUDE_4_5_SONNET,
ButtercupLLM.CLAUDE_4_6_SONNET,
ButtercupLLM.GEMINI_PRO,
]:
fallback_llms.append(create_default_llm_with_temperature(model_name=fb_model.value, **kwargs))
+2 -3
View File
@@ -94,11 +94,10 @@ class Task:
def __post_init__(self) -> None:
fallbacks = [
ButtercupLLM.CLAUDE_4_SONNET,
ButtercupLLM.OPENAI_GPT_4_1,
ButtercupLLM.OPENAI_GPT_5_5,
ButtercupLLM.GEMINI_PRO,
]
self.llm = Task.get_llm(ButtercupLLM.CLAUDE_4_5_SONNET, fallbacks)
self.llm = Task.get_llm(ButtercupLLM.CLAUDE_4_6_SONNET, fallbacks)
self.tools = [
get_function_definition,
get_type_definition,