Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion .vet/models.json
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,17 @@
"max_output_tokens": 128000,
"supports_temperature": true
},
"opus": {
"opus-4.7": {
"model_id": "claude-opus-4-7",
"context_window": 200000,
"max_output_tokens": 128000,
"supports_temperature": false
},
"opus": {
"model_id": "claude-opus-4-8",
"context_window": 200000,
"max_output_tokens": 128000,
"supports_temperature": false
}
}
},
Expand Down
2 changes: 1 addition & 1 deletion skills/vet/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ Vet analyzes the full git diff from the base commit. This may include changes fr
## Common Options

- `--base-commit REF`: Git ref for diff base (default: HEAD)
- `--model MODEL`: LLM to use (default: claude-opus-4-7)
- `--model MODEL`: LLM to use (default: claude-opus-4-8)
- `--list-models`: list all models that are supported by vet
- Run `vet --help` and look at the vet repo's readme for details about defining custom OpenAI-compatible models.
- `--update-models`: fetch the latest community model definitions from the remote registry and cache them locally. See "Updating the Model Registry" below for when to run this.
Expand Down
2 changes: 1 addition & 1 deletion vet/cli/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ def create_parser() -> argparse.ArgumentParser:
default=CLI_DEFAULTS.model,
metavar="MODEL",
# Hardcoded to avoid importing cli.models at module level (~1s of SDK imports).
help="LLM to use for analysis (default: claude-opus-4-7).",
help="LLM to use for analysis (default: claude-opus-4-8).",
)
model_group.add_argument(
"--list-models",
Expand Down
2 changes: 1 addition & 1 deletion vet/cli/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
from vet.imbue_core.agents.llm_apis.gemini_api import GeminiModelName
from vet.imbue_core.agents.llm_apis.openai_api import OpenAIModelName

DEFAULT_MODEL_ID = AnthropicModelName.CLAUDE_4_7_OPUS.value
DEFAULT_MODEL_ID = AnthropicModelName.CLAUDE_4_8_OPUS.value


class MissingProviderAPIKeyError(Exception):
Expand Down
32 changes: 32 additions & 0 deletions vet/imbue_core/agents/llm_apis/anthropic_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ class AnthropicModelName(enum.StrEnum):
CLAUDE_4_5_OPUS = "claude-opus-4-5"
CLAUDE_4_6_OPUS = "claude-opus-4-6"
CLAUDE_4_7_OPUS = "claude-opus-4-7"
CLAUDE_4_8_OPUS = "claude-opus-4-8"
CLAUDE_4_SONNET = "claude-sonnet-4-0"
CLAUDE_4_5_SONNET = "claude-sonnet-4-5"
CLAUDE_4_6_SONNET = "claude-sonnet-4-6"
Expand All @@ -71,6 +72,7 @@ class AnthropicModelName(enum.StrEnum):
CLAUDE_4_5_SONNET_LONG = "claude-sonnet-4-5-long"
CLAUDE_4_6_OPUS_LONG = "claude-opus-4-6-long"
CLAUDE_4_7_OPUS_LONG = "claude-opus-4-7-long"
CLAUDE_4_8_OPUS_LONG = "claude-opus-4-8-long"


# Basic info is available at https://docs.anthropic.com/claude/reference/models
Expand Down Expand Up @@ -155,6 +157,21 @@ class AnthropicModelName(enum.StrEnum):
cost_per_cache_read_token=0.50 / 1_000_000,
),
),
AnthropicModelName.CLAUDE_4_8_OPUS: ModelInfo(
model_name=AnthropicModelName.CLAUDE_4_8_OPUS,
cost_per_input_token=5.00 / 1_000_000,
cost_per_output_token=25.00 / 1_000_000,
max_input_tokens=200_000,
max_output_tokens=128_000,
rate_limit_req=4000 / 60,
rate_limit_tok=2_000_000 / 60,
rate_limit_output_tok=400_000 / 60,
provider_specific_info=AnthropicModelInfo(
cost_per_5m_cache_write_token=6.25 / 1_000_000,
cost_per_1h_cache_write_token=10 / 1_000_000,
cost_per_cache_read_token=0.50 / 1_000_000,
),
),
AnthropicModelName.CLAUDE_4_SONNET: ModelInfo(
model_name=AnthropicModelName.CLAUDE_4_SONNET,
cost_per_input_token=3.00 / 1_000_000,
Expand Down Expand Up @@ -265,6 +282,17 @@ class AnthropicModelName(enum.StrEnum):
rate_limit_tok=1_000_000 / 60,
rate_limit_output_tok=200_000 / 60,
),
AnthropicModelName.CLAUDE_4_8_OPUS_LONG: ModelInfo(
model_name=AnthropicModelName.CLAUDE_4_8_OPUS_LONG,
# Opus 4.8 has a native 1M context window. Pricing tiers match 4.7 long-context.
cost_per_input_token=9.00 / 1_000_000,
cost_per_output_token=37.50 / 1_000_000,
max_input_tokens=1_000_000,
max_output_tokens=128_000,
rate_limit_req=None, # Currently no limit set in our dashboard
rate_limit_tok=1_000_000 / 60,
rate_limit_output_tok=200_000 / 60,
),
}
)

Expand All @@ -275,6 +303,8 @@ class AnthropicModelName(enum.StrEnum):
{
AnthropicModelName.CLAUDE_4_7_OPUS,
AnthropicModelName.CLAUDE_4_7_OPUS_LONG,
AnthropicModelName.CLAUDE_4_8_OPUS,
AnthropicModelName.CLAUDE_4_8_OPUS_LONG,
}
)

Expand Down Expand Up @@ -504,6 +534,7 @@ async def _call_api(
AnthropicModelName.CLAUDE_4_SONNET_LONG: AnthropicModelName.CLAUDE_4_SONNET,
AnthropicModelName.CLAUDE_4_6_OPUS_LONG: AnthropicModelName.CLAUDE_4_6_OPUS,
AnthropicModelName.CLAUDE_4_7_OPUS_LONG: AnthropicModelName.CLAUDE_4_7_OPUS,
AnthropicModelName.CLAUDE_4_8_OPUS_LONG: AnthropicModelName.CLAUDE_4_8_OPUS,
}

if self.model_name in _LONG_TO_STANDARD:
Expand Down Expand Up @@ -585,6 +616,7 @@ async def _get_api_stream(
AnthropicModelName.CLAUDE_4_SONNET_LONG: AnthropicModelName.CLAUDE_4_SONNET,
AnthropicModelName.CLAUDE_4_6_OPUS_LONG: AnthropicModelName.CLAUDE_4_6_OPUS,
AnthropicModelName.CLAUDE_4_7_OPUS_LONG: AnthropicModelName.CLAUDE_4_7_OPUS,
AnthropicModelName.CLAUDE_4_8_OPUS_LONG: AnthropicModelName.CLAUDE_4_8_OPUS,
}

if self.model_name in _LONG_TO_STANDARD_STREAM:
Expand Down
4 changes: 2 additions & 2 deletions vet/imbue_tools/types/vet_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ class VetConfig(SerializableModel):

# Todo: Different models for different issue identifiers
language_model_generation_config: LanguageModelGenerationConfig = LanguageModelGenerationConfig(
model_name=AnthropicModelName.CLAUDE_4_7_OPUS
model_name=AnthropicModelName.CLAUDE_4_8_OPUS
)
max_identifier_spend_dollars: float | None = None
max_output_tokens: int = 20000
Expand Down Expand Up @@ -75,7 +75,7 @@ def build(
cache_full_prompt: bool = False,
) -> "VetConfig":
if not language_model_name:
language_model_name = AnthropicModelName.CLAUDE_4_7_OPUS
language_model_name = AnthropicModelName.CLAUDE_4_8_OPUS
language_model_generation_config = LanguageModelGenerationConfig(
model_name=language_model_name,
cache_path=language_model_cache_path,
Expand Down
Loading