Skip to content

Commit 9fadbb7

Browse files
PedramNavidclaude
andauthored
fix: update valid models list to include claude-opus-4-5 (anthropics#323)
* fix: update valid models list to include claude-opus-4-5 Replace claude-opus-4-1 with claude-opus-4-5 in the cookbook audit skill validation and documentation. Closes anthropics#322 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * fix: complete opus-4-5 migration across all validation systems - Update deprecated model mappings in scripts/validate_all_notebooks.py - Add claude-opus-4-1 -> claude-opus-4-5 deprecation in both validation scripts - Add deprecation warning handling in cookbook audit skill (warnings instead of errors) - Add Opus model to CLAUDE.md documentation This ensures 18+ existing notebooks using claude-opus-4-1 will show deprecation warnings rather than failing validation. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> --------- Co-authored-by: Claude <[email protected]>
1 parent cbcc709 commit 9fadbb7

File tree

4 files changed

+23
-10
lines changed

4 files changed

+23
-10
lines changed

.claude/skills/cookbook-audit/SKILL.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ Use this to ensure comprehensive coverage:
123123
**Technical Requirements**
124124
- [ ] Executable without modification (except API keys)
125125
- [ ] Uses non-deprecated API patterns
126-
- [ ] Uses valid model names (claude-sonnet-4-5, claude-haiku-4-5, claude-opus-4-1)
126+
- [ ] Uses valid model names (claude-sonnet-4-5, claude-haiku-4-5, claude-opus-4-5)
127127
- [ ] Model name defined as constant at top of notebook
128128
- [ ] Includes dependency specifications
129129
- [ ] Assigned to primary category

.claude/skills/cookbook-audit/validate_notebook.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -327,11 +327,16 @@ def check_model_constant(self):
327327
def check_deprecated_patterns(self):
328328
"""Check for deprecated API patterns and invalid models."""
329329
# Valid models
330-
valid_models = ["claude-sonnet-4-5", "claude-haiku-4-5", "claude-opus-4-1"]
330+
valid_models = ["claude-sonnet-4-5", "claude-haiku-4-5", "claude-opus-4-5"]
331331

332332
# Pattern to match model strings
333333
model_pattern = r'["\']claude-([a-z0-9\.-]+)["\']'
334334

335+
# Deprecated models that should be migrated
336+
deprecated_models = {
337+
"claude-opus-4-1": "claude-opus-4-5",
338+
}
339+
335340
deprecated_patterns = {
336341
r"\.completion\(": "Using old completion API (use messages API)",
337342
}
@@ -342,11 +347,16 @@ def check_deprecated_patterns(self):
342347

343348
source = self.get_cell_source(cell)
344349

345-
# Check for invalid models
350+
# Check for invalid or deprecated models
346351
model_matches = re.findall(model_pattern, source)
347352
for match in model_matches:
348353
full_model = f"claude-{match}"
349-
if full_model not in valid_models:
354+
if full_model in deprecated_models:
355+
self.warnings.append(
356+
f"Cell {i}: Deprecated model '{full_model}'. "
357+
f"Please update to '{deprecated_models[full_model]}'"
358+
)
359+
elif full_model not in valid_models:
350360
self.issues.append(
351361
f"Cell {i}: Invalid model '{full_model}'. "
352362
f"Valid models are: {', '.join(valid_models)}"

CLAUDE.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ style: lint/format
6464
3. **Models:** Use current Claude models. Check docs.anthropic.com for latest versions.
6565
- Sonnet: `claude-sonnet-4-5-20250929`
6666
- Haiku: `claude-haiku-4-5-20251001`
67+
- Opus: `claude-opus-4-5-20251101`
6768

6869
4. **Notebooks:**
6970
- Keep outputs in notebooks (intentional for demonstration)

scripts/validate_all_notebooks.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -114,10 +114,11 @@ def validate_notebook(self, notebook_path: Path, mode: str = "full") -> dict:
114114
"claude-3-5-sonnet-latest": "claude-sonnet-4-5",
115115
"claude-3-haiku-20240307": "claude-haiku-4-5",
116116
"claude-3-5-haiku-20241022": "claude-haiku-4-5",
117-
"claude-3-opus-20240229": "claude-opus-4-1",
118-
"claude-3-opus-latest": "claude-opus-4-1",
117+
"claude-3-opus-20240229": "claude-opus-4-5",
118+
"claude-3-opus-latest": "claude-opus-4-5",
119119
"claude-sonnet-4-20250514": "claude-sonnet-4-5",
120-
"claude-opus-4-20250514": "claude-opus-4-1",
120+
"claude-opus-4-20250514": "claude-opus-4-5",
121+
"claude-opus-4-1": "claude-opus-4-5",
121122
}
122123

123124
for i, cell in enumerate(nb.get("cells", [])):
@@ -643,10 +644,11 @@ def fix_deprecated_models(self, notebook_path: Path) -> bool:
643644
"claude-3-5-sonnet-latest": "claude-sonnet-4-5",
644645
"claude-3-haiku-20240307": "claude-haiku-4-5",
645646
"claude-3-5-haiku-20241022": "claude-haiku-4-5",
646-
"claude-3-opus-20240229": "claude-opus-4-1",
647-
"claude-3-opus-latest": "claude-opus-4-1",
647+
"claude-3-opus-20240229": "claude-opus-4-5",
648+
"claude-3-opus-latest": "claude-opus-4-5",
648649
"claude-sonnet-4-20250514": "claude-sonnet-4-5",
649-
"claude-opus-4-20250514": "claude-opus-4-1",
650+
"claude-opus-4-20250514": "claude-opus-4-5",
651+
"claude-opus-4-1": "claude-opus-4-5",
650652
}
651653

652654
modified = False

0 commit comments

Comments
 (0)