Compare commits

..

9 Commits

Author SHA1 Message Date
Mason Daugherty
0081deae96 feat(infra): schedule daily model profile refresh with job summary (#35354)
- Schedules the `refresh_model_profiles` workflow to run daily at 08:00
UTC (manual trigger available).
- Adds a job summary step that reports whether a PR was created/updated
or skipped because profiles were already up to date.
- Each run supersedes any stale PR from a previous run since the action
force-pushes to a fixed branch (`bot/refresh-model-profiles`).
2026-02-20 00:43:09 -05:00
Mason Daugherty
70192690b1 fix(model-profiles): sort generated profiles by model ID for stable diffs (#35344)
- Sort model profiles alphabetically by model ID (the top-level
`_PROFILES` dictionary keys, e.g. `claude-3-5-haiku-20241022`,
`gpt-4o-mini`) before writing `_profiles.py`, so that regenerating
profiles only shows actual data changes in diffs — not random reordering
from the models.dev API response order
- Regenerate all 10 partner profile files with the new sorted ordering
2026-02-19 23:11:22 -05:00
Mason Daugherty
8aa7a3f07a chore: update agent files (#35346) 2026-02-19 23:11:02 -05:00
Mason Daugherty
e95e869d9e chore(infra): add GitHub App token generation step (#35334) 2026-02-19 22:48:51 -05:00
ccurme
5362bf5666 fix(anthropic): set max input tokens based on 1m context beta header (#35341) 2026-02-19 21:01:49 -05:00
Mason Daugherty
135a208919 chore: add model profile info to agent files (#35336) 2026-02-19 14:03:56 -05:00
Mason Daugherty
4af87fd025 fix(infra): fix trailing comma regex in profile generation script (#35333)
The trailing comma regex in the profile generation script consumed the
closing `}` as part of its match, preventing nested closing braces from
getting their own trailing comma. This caused `ruff format` failures on
every generated `_profiles.py` file.

Switches to a lookahead (`(?=...)`) so the closing bracket is asserted
but not consumed, allowing each nesting level to independently receive
its trailing comma.

Fixes #35332.
2026-02-19 13:27:02 -05:00
Christophe Bornet
6a6ef8caad style: fix some ruff noqa (#35321) 2026-02-19 13:19:30 -05:00
Mason Daugherty
59be7d734f feat(infra): model profile bump tool (#35331) 2026-02-19 13:03:10 -05:00
26 changed files with 3495 additions and 3188 deletions

View File

@@ -0,0 +1,93 @@
# Refreshes model profile data for all in-monorepo partner integrations by
# pulling the latest metadata from models.dev via the `langchain-profiles` CLI.
#
# Creates a pull request with any changes. Runs daily and can be triggered
# manually from the Actions UI. Uses a fixed branch so each run supersedes
# any stale PR from a previous run.
name: "🔄 Refresh Model Profiles"
on:
schedule:
- cron: "0 8 * * *" # daily at 08:00 UTC
workflow_dispatch:
permissions:
contents: write
pull-requests: write
jobs:
refresh-profiles:
name: "refresh all partner profiles"
runs-on: ubuntu-latest
steps:
- name: "📋 Checkout"
uses: actions/checkout@v6
- name: "🐍 Set up Python + uv"
uses: ./.github/actions/uv_setup
with:
python-version: "3.12"
working-directory: libs/model-profiles
- name: "📦 Install langchain-profiles CLI"
working-directory: libs/model-profiles
run: uv sync
- name: "🔄 Refresh profiles"
working-directory: libs/model-profiles
run: |
declare -A PROVIDERS=(
[anthropic]=anthropic
[deepseek]=deepseek
[fireworks]=fireworks-ai
[groq]=groq
[huggingface]=huggingface
[mistralai]=mistral
[openai]=openai
[openrouter]=openrouter
[perplexity]=perplexity
[xai]=xai
)
for partner in "${!PROVIDERS[@]}"; do
provider="${PROVIDERS[$partner]}"
data_dir="../../libs/partners/${partner}/langchain_${partner//-/_}/data"
echo "--- Refreshing ${partner} (provider: ${provider}) ---"
echo y | uv run langchain-profiles refresh \
--provider "$provider" \
--data-dir "$data_dir"
done
- name: "🔑 Generate GitHub App token"
id: app-token
uses: actions/create-github-app-token@v2
with:
app-id: ${{ secrets.MODEL_PROFILE_BOT_APP_ID }}
private-key: ${{ secrets.MODEL_PROFILE_BOT_PRIVATE_KEY }}
- name: "🔀 Create pull request"
id: create-pr
uses: peter-evans/create-pull-request@v8
with:
token: ${{ steps.app-token.outputs.token }}
branch: bot/refresh-model-profiles
commit-message: "chore(model-profiles): refresh model profile data"
title: "chore(model-profiles): refresh model profile data"
body: |
Automated refresh of model profile data for all in-monorepo partner
integrations via `langchain-profiles refresh`.
🤖 Generated by the `refresh_model_profiles` workflow.
labels: bot
add-paths: libs/partners/**/data/_profiles.py
- name: "📝 Summary"
run: |
op="${{ steps.create-pr.outputs.pull-request-operation }}"
url="${{ steps.create-pr.outputs.pull-request-url }}"
if [ "$op" = "created" ] || [ "$op" = "updated" ]; then
echo "### ✅ PR ${op}: ${url}" >> "$GITHUB_STEP_SUMMARY"
else
echo "### ⏭️ Skipped: profiles already up to date" >> "$GITHUB_STEP_SUMMARY"
fi

View File

@@ -194,6 +194,59 @@ def send_email(to: str, msg: str, *, priority: str = "normal") -> bool:
- Ensure American English spelling (e.g., "behavior", not "behaviour")
- Do NOT use Sphinx-style double backtick formatting (` ``code`` `). Use single backticks (`` `code` ``) for inline code references in docstrings and comments.
## Model profiles
Model profiles are generated using the `langchain-profiles` CLI in `libs/model-profiles`. The `--data-dir` must point to the directory containing `profile_augmentations.toml`, not the top-level package directory.
```bash
# Run from libs/model-profiles
cd libs/model-profiles
# Refresh profiles for a partner in this repo
uv run langchain-profiles refresh --provider openai --data-dir ../partners/openai/langchain_openai/data
# Refresh profiles for a partner in an external repo (requires echo y to confirm)
echo y | uv run langchain-profiles refresh --provider google --data-dir /path/to/langchain-google/libs/genai/langchain_google_genai/data
```
Example partners with profiles in this repo:
- `libs/partners/openai/langchain_openai/data/` (provider: `openai`)
- `libs/partners/anthropic/langchain_anthropic/data/` (provider: `anthropic`)
- `libs/partners/perplexity/langchain_perplexity/data/` (provider: `perplexity`)
The `echo y |` pipe is required when `--data-dir` is outside the `libs/model-profiles` working directory.
## CI/CD infrastructure
### Release process
Releases are triggered manually via `.github/workflows/_release.yml` with `working-directory` and `release-version` inputs.
### PR labeling and linting
**Title linting** (`.github/workflows/pr_lint.yml`)
**Auto-labeling:**
- `.github/workflows/pr_labeler_file.yml`
- `.github/workflows/pr_labeler_title.yml`
- `.github/workflows/auto-label-by-package.yml`
- `.github/workflows/tag-external-contributions.yml`
### Adding a new partner to CI
When adding a new partner package, update these files:
- `.github/ISSUE_TEMPLATE/*.yml` Add to package dropdown
- `.github/dependabot.yml` Add dependency update entry
- `.github/pr-file-labeler.yml` Add file-to-label mapping
- `.github/workflows/_release.yml` Add API key secrets if needed
- `.github/workflows/auto-label-by-package.yml` Add package label
- `.github/workflows/check_diffs.yml` Add to change detection
- `.github/workflows/integration_tests.yml` Add integration test config
- `.github/workflows/pr_lint.yml` Add to allowed scopes
## Additional resources
- **Documentation:** https://docs.langchain.com/oss/python/langchain/overview and source at https://github.com/langchain-ai/docs or `../docs/`. Prefer the local install and use file search tools for best results. If needed, use the docs MCP server as defined in `.mcp.json` for programmatic access.

View File

@@ -194,6 +194,59 @@ def send_email(to: str, msg: str, *, priority: str = "normal") -> bool:
- Ensure American English spelling (e.g., "behavior", not "behaviour")
- Do NOT use Sphinx-style double backtick formatting (` ``code`` `). Use single backticks (`` `code` ``) for inline code references in docstrings and comments.
## Model profiles
Model profiles are generated using the `langchain-profiles` CLI in `libs/model-profiles`. The `--data-dir` must point to the directory containing `profile_augmentations.toml`, not the top-level package directory.
```bash
# Run from libs/model-profiles
cd libs/model-profiles
# Refresh profiles for a partner in this repo
uv run langchain-profiles refresh --provider openai --data-dir ../partners/openai/langchain_openai/data
# Refresh profiles for a partner in an external repo (requires echo y to confirm)
echo y | uv run langchain-profiles refresh --provider google --data-dir /path/to/langchain-google/libs/genai/langchain_google_genai/data
```
Example partners with profiles in this repo:
- `libs/partners/openai/langchain_openai/data/` (provider: `openai`)
- `libs/partners/anthropic/langchain_anthropic/data/` (provider: `anthropic`)
- `libs/partners/perplexity/langchain_perplexity/data/` (provider: `perplexity`)
The `echo y |` pipe is required when `--data-dir` is outside the `libs/model-profiles` working directory.
## CI/CD infrastructure
### Release process
Releases are triggered manually via `.github/workflows/_release.yml` with `working-directory` and `release-version` inputs.
### PR labeling and linting
**Title linting** (`.github/workflows/pr_lint.yml`)
**Auto-labeling:**
- `.github/workflows/pr_labeler_file.yml`
- `.github/workflows/pr_labeler_title.yml`
- `.github/workflows/auto-label-by-package.yml`
- `.github/workflows/tag-external-contributions.yml`
### Adding a new partner to CI
When adding a new partner package, update these files:
- `.github/ISSUE_TEMPLATE/*.yml` Add to package dropdown
- `.github/dependabot.yml` Add dependency update entry
- `.github/pr-file-labeler.yml` Add file-to-label mapping
- `.github/workflows/_release.yml` Add API key secrets if needed
- `.github/workflows/auto-label-by-package.yml` Add package label
- `.github/workflows/check_diffs.yml` Add to change detection
- `.github/workflows/integration_tests.yml` Add integration test config
- `.github/workflows/pr_lint.yml` Add to allowed scopes
## Additional resources
- **Documentation:** https://docs.langchain.com/oss/python/langchain/overview and source at https://github.com/langchain-ai/docs or `../docs/`. Prefer the local install and use file search tools for best results. If needed, use the docs MCP server as defined in `.mcp.json` for programmatic access.

View File

@@ -133,7 +133,7 @@ ignore-var-parameters = true # ignore missing documentation for *args and **kwa
"langchain_core/sys_info.py" = [ "T201",]
"tests/unit_tests/test_tools.py" = [ "ARG",]
"tests/**" = [ "D1", "PLR2004", "S", "SLF",]
"scripts/**" = [ "INP", "S",]
"scripts/**" = [ "INP", "S", "T201",]
[tool.coverage.run]
omit = [ "tests/*",]

View File

@@ -17,8 +17,8 @@ if __name__ == "__main__":
SourceFileLoader(module_name, file).load_module()
except Exception:
has_failure = True
print(file) # noqa: T201
print(file)
traceback.print_exc()
print() # noqa: T201
print()
sys.exit(1 if has_failure else 0)

View File

@@ -33,31 +33,31 @@ def main() -> int:
version_path = package_dir / "langchain_core" / "version.py"
if not pyproject_path.exists():
print(f"Error: {pyproject_path} not found") # noqa: T201
print(f"Error: {pyproject_path} not found")
return 1
if not version_path.exists():
print(f"Error: {version_path} not found") # noqa: T201
print(f"Error: {version_path} not found")
return 1
pyproject_version = get_pyproject_version(pyproject_path)
version_py_version = get_version_py_version(version_path)
if pyproject_version is None:
print("Error: Could not find version in pyproject.toml") # noqa: T201
print("Error: Could not find version in pyproject.toml")
return 1
if version_py_version is None:
print("Error: Could not find VERSION in langchain_core/version.py") # noqa: T201
print("Error: Could not find VERSION in langchain_core/version.py")
return 1
if pyproject_version != version_py_version:
print("Error: Version mismatch detected!") # noqa: T201
print(f" pyproject.toml: {pyproject_version}") # noqa: T201
print(f" langchain_core/version.py: {version_py_version}") # noqa: T201
print("Error: Version mismatch detected!")
print(f" pyproject.toml: {pyproject_version}")
print(f" langchain_core/version.py: {version_py_version}")
return 1
print(f"Version check passed: {pyproject_version}") # noqa: T201
print(f"Version check passed: {pyproject_version}")
return 0

View File

@@ -175,7 +175,8 @@ ignore-var-parameters = true # ignore missing documentation for *args and **kwa
]
"scripts/*" = [
"INP", # Scripts are not in a package
"INP", # Scripts are not in a package
"T201", # Scripts can print to the console
]
[tool.coverage.run]

View File

@@ -26,8 +26,8 @@ if __name__ == "__main__":
SourceFileLoader(module_name, file).load_module()
except Exception:
has_failure = True
print(file) # noqa: T201
print(file)
traceback.print_exc()
print() # noqa: T201
print()
sys.exit(1 if has_failure else 0)

View File

@@ -33,31 +33,31 @@ def main() -> int:
init_path = package_dir / "langchain" / "__init__.py"
if not pyproject_path.exists():
print(f"Error: {pyproject_path} not found") # noqa: T201
print(f"Error: {pyproject_path} not found")
return 1
if not init_path.exists():
print(f"Error: {init_path} not found") # noqa: T201
print(f"Error: {init_path} not found")
return 1
pyproject_version = get_pyproject_version(pyproject_path)
init_version = get_init_version(init_path)
if pyproject_version is None:
print("Error: Could not find version in pyproject.toml") # noqa: T201
print("Error: Could not find version in pyproject.toml")
return 1
if init_version is None:
print("Error: Could not find __version__ in langchain/__init__.py") # noqa: T201
print("Error: Could not find __version__ in langchain/__init__.py")
return 1
if pyproject_version != init_version:
print("Error: Version mismatch detected!") # noqa: T201
print(f" pyproject.toml: {pyproject_version}") # noqa: T201
print(f" langchain/__init__.py: {init_version}") # noqa: T201
print("Error: Version mismatch detected!")
print(f" pyproject.toml: {pyproject_version}")
print(f" langchain/__init__.py: {init_version}")
return 1
print(f"Version check passed: {pyproject_version}") # noqa: T201
print(f"Version check passed: {pyproject_version}")
return 0

View File

@@ -310,14 +310,14 @@ def refresh(provider: str, data_dir: Path) -> None: # noqa: C901, PLR0915
print(f"Writing to {output_file}...")
module_content = [f'"""{MODULE_ADMONITION}"""\n\n', "from typing import Any\n\n"]
module_content.append("_PROFILES: dict[str, dict[str, Any]] = ")
json_str = json.dumps(profiles, indent=4)
json_str = json.dumps(dict(sorted(profiles.items())), indent=4)
json_str = (
json_str.replace("true", "True")
.replace("false", "False")
.replace("null", "None")
)
# Add trailing commas for ruff format compliance
json_str = re.sub(r"([^\s,{\[])(\n\s*[\}\]])", r"\1,\2", json_str)
json_str = re.sub(r"([^\s,{\[])(?=\n\s*[\}\]])", r"\1,", json_str)
module_content.append(f"{json_str}\n")
_write_profiles_file(output_file, "".join(module_content))

View File

@@ -216,6 +216,62 @@ max_input_tokens = 123
)
def test_refresh_generates_sorted_profiles(
tmp_path: Path, mock_models_dev_response: dict
) -> None:
"""Test that profiles are sorted alphabetically by model ID."""
data_dir = tmp_path / "data"
data_dir.mkdir()
# Inject models in reverse-alphabetical order so the API response
# is NOT already sorted.
mock_models_dev_response["anthropic"]["models"] = {
"z-model": {
"id": "z-model",
"name": "Z Model",
"tool_call": True,
"limit": {"context": 100000, "output": 2048},
"modalities": {"input": ["text"], "output": ["text"]},
},
"a-model": {
"id": "a-model",
"name": "A Model",
"tool_call": True,
"limit": {"context": 100000, "output": 2048},
"modalities": {"input": ["text"], "output": ["text"]},
},
"m-model": {
"id": "m-model",
"name": "M Model",
"tool_call": True,
"limit": {"context": 100000, "output": 2048},
"modalities": {"input": ["text"], "output": ["text"]},
},
}
mock_response = Mock()
mock_response.json.return_value = mock_models_dev_response
mock_response.raise_for_status = Mock()
with (
patch("langchain_model_profiles.cli.httpx.get", return_value=mock_response),
patch("builtins.input", return_value="y"),
):
refresh("anthropic", data_dir)
profiles_file = data_dir / "_profiles.py"
spec = importlib.util.spec_from_file_location(
"generated_profiles_sorted", profiles_file
)
assert spec
assert spec.loader
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module) # type: ignore[union-attr]
model_ids = list(module._PROFILES.keys()) # type: ignore[attr-defined]
assert model_ids == sorted(model_ids), f"Profile keys are not sorted: {model_ids}"
def test_model_data_to_profile_text_modalities() -> None:
"""Test that text input/output modalities are correctly mapped."""
# Model with text in both input and output

View File

@@ -527,7 +527,7 @@ typing = [
[[package]]
name = "langchain-core"
version = "1.2.13"
version = "1.2.14"
source = { editable = "../core" }
dependencies = [
{ name = "jsonpatch" },

View File

@@ -1024,6 +1024,12 @@ class ChatAnthropic(BaseChatModel):
"""Set model profile if not overridden."""
if self.profile is None:
self.profile = _get_default_model_profile(self.model)
if (
self.profile is not None
and self.betas
and "context-1m-2025-08-07" in self.betas
):
self.profile["max_input_tokens"] = 1_000_000
return self
@cached_property

View File

@@ -16,9 +16,9 @@ https://docs.langchain.com/oss/python/langchain/models#updating-or-overwriting-p
from typing import Any
_PROFILES: dict[str, dict[str, Any]] = {
"claude-opus-4-5-20251101": {
"claude-3-5-haiku-20241022": {
"max_input_tokens": 200000,
"max_output_tokens": 64000,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
@@ -28,7 +28,7 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"reasoning_output": False,
"tool_calling": True,
"image_url_inputs": True,
"pdf_tool_message": True,
@@ -54,196 +54,6 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_tool_message": True,
"structured_output": False,
},
"claude-opus-4-1": {
"max_input_tokens": 200000,
"max_output_tokens": 32000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"pdf_inputs": True,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"image_url_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"structured_output": True,
},
"claude-3-5-sonnet-20241022": {
"max_input_tokens": 200000,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"pdf_inputs": True,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
"image_url_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"structured_output": False,
},
"claude-3-sonnet-20240229": {
"max_input_tokens": 200000,
"max_output_tokens": 4096,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"pdf_inputs": True,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
"image_url_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"structured_output": False,
},
"claude-opus-4-6": {
"max_input_tokens": 200000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"pdf_inputs": True,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"image_url_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"structured_output": False,
},
"claude-sonnet-4-6": {
"max_input_tokens": 200000,
"max_output_tokens": 64000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"pdf_inputs": True,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"image_url_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"structured_output": False,
},
"claude-sonnet-4-0": {
"max_input_tokens": 200000,
"max_output_tokens": 64000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"pdf_inputs": True,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"image_url_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"structured_output": False,
},
"claude-opus-4-20250514": {
"max_input_tokens": 200000,
"max_output_tokens": 32000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"pdf_inputs": True,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"image_url_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"structured_output": False,
},
"claude-sonnet-4-5-20250929": {
"max_input_tokens": 200000,
"max_output_tokens": 64000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"pdf_inputs": True,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"image_url_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"structured_output": False,
},
"claude-opus-4-0": {
"max_input_tokens": 200000,
"max_output_tokens": 32000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"pdf_inputs": True,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"image_url_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"structured_output": False,
},
"claude-3-5-haiku-20241022": {
"max_input_tokens": 200000,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"pdf_inputs": True,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
"image_url_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"structured_output": False,
},
"claude-3-5-sonnet-20240620": {
"max_input_tokens": 200000,
"max_output_tokens": 8192,
@@ -263,7 +73,26 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_tool_message": True,
"structured_output": False,
},
"claude-3-7-sonnet-latest": {
"claude-3-5-sonnet-20241022": {
"max_input_tokens": 200000,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"pdf_inputs": True,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
"image_url_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"structured_output": False,
},
"claude-3-7-sonnet-20250219": {
"max_input_tokens": 200000,
"max_output_tokens": 64000,
"text_inputs": True,
@@ -282,7 +111,7 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_tool_message": True,
"structured_output": False,
},
"claude-3-7-sonnet-20250219": {
"claude-3-7-sonnet-latest": {
"max_input_tokens": 200000,
"max_output_tokens": 64000,
"text_inputs": True,
@@ -320,6 +149,63 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_tool_message": True,
"structured_output": False,
},
"claude-3-opus-20240229": {
"max_input_tokens": 200000,
"max_output_tokens": 4096,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"pdf_inputs": True,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
"image_url_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"structured_output": False,
},
"claude-3-sonnet-20240229": {
"max_input_tokens": 200000,
"max_output_tokens": 4096,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"pdf_inputs": True,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
"image_url_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"structured_output": False,
},
"claude-haiku-4-5": {
"max_input_tokens": 200000,
"max_output_tokens": 64000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"pdf_inputs": True,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"image_url_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"structured_output": False,
},
"claude-haiku-4-5-20251001": {
"max_input_tokens": 200000,
"max_output_tokens": 64000,
@@ -339,9 +225,66 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_tool_message": True,
"structured_output": False,
},
"claude-haiku-4-5": {
"claude-opus-4-0": {
"max_input_tokens": 200000,
"max_output_tokens": 64000,
"max_output_tokens": 32000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"pdf_inputs": True,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"image_url_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"structured_output": False,
},
"claude-opus-4-1": {
"max_input_tokens": 200000,
"max_output_tokens": 32000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"pdf_inputs": True,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"image_url_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"structured_output": True,
},
"claude-opus-4-1-20250805": {
"max_input_tokens": 200000,
"max_output_tokens": 32000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"pdf_inputs": True,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"image_url_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"structured_output": False,
},
"claude-opus-4-20250514": {
"max_input_tokens": 200000,
"max_output_tokens": 32000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
@@ -377,9 +320,9 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_tool_message": True,
"structured_output": False,
},
"claude-3-opus-20240229": {
"claude-opus-4-5-20251101": {
"max_input_tokens": 200000,
"max_output_tokens": 4096,
"max_output_tokens": 64000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
@@ -389,7 +332,64 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"reasoning_output": True,
"tool_calling": True,
"image_url_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"structured_output": False,
},
"claude-opus-4-6": {
"max_input_tokens": 200000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"pdf_inputs": True,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"image_url_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"structured_output": False,
},
"claude-sonnet-4-0": {
"max_input_tokens": 200000,
"max_output_tokens": 64000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"pdf_inputs": True,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"image_url_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"structured_output": False,
},
"claude-sonnet-4-20250514": {
"max_input_tokens": 200000,
"max_output_tokens": 64000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"pdf_inputs": True,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"image_url_inputs": True,
"pdf_tool_message": True,
@@ -415,7 +415,7 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_tool_message": True,
"structured_output": True,
},
"claude-sonnet-4-20250514": {
"claude-sonnet-4-5-20250929": {
"max_input_tokens": 200000,
"max_output_tokens": 64000,
"text_inputs": True,
@@ -434,9 +434,9 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_tool_message": True,
"structured_output": False,
},
"claude-opus-4-1-20250805": {
"claude-sonnet-4-6": {
"max_input_tokens": 200000,
"max_output_tokens": 32000,
"max_output_tokens": 64000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,

View File

@@ -2171,6 +2171,23 @@ def test_profile() -> None:
assert model.profile == {"tool_calling": False}
def test_profile_1m_context_beta() -> None:
model = ChatAnthropic(model="claude-sonnet-4-5")
assert model.profile
assert model.profile["max_input_tokens"] == 200000
model = ChatAnthropic(model="claude-sonnet-4-5", betas=["context-1m-2025-08-07"])
assert model.profile
assert model.profile["max_input_tokens"] == 1000000
model = ChatAnthropic(
model="claude-sonnet-4-5",
betas=["token-efficient-tools-2025-02-19"],
)
assert model.profile
assert model.profile["max_input_tokens"] == 200000
async def test_model_profile_not_blocking() -> None:
with blockbuster_ctx():
model = ChatAnthropic(model="claude-sonnet-4-5")

View File

@@ -16,20 +16,6 @@ https://docs.langchain.com/oss/python/langchain/models#updating-or-overwriting-p
from typing import Any
_PROFILES: dict[str, dict[str, Any]] = {
"deepseek-reasoner": {
"max_input_tokens": 128000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"deepseek-chat": {
"max_input_tokens": 128000,
"max_output_tokens": 8192,
@@ -44,4 +30,18 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": False,
"tool_calling": True,
},
"deepseek-reasoner": {
"max_input_tokens": 128000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
}

View File

@@ -370,7 +370,7 @@ wheels = [
[[package]]
name = "langchain-core"
version = "1.2.13"
version = "1.2.14"
source = { editable = "../../core" }
dependencies = [
{ name = "jsonpatch" },

View File

@@ -16,9 +16,9 @@ https://docs.langchain.com/oss/python/langchain/models#updating-or-overwriting-p
from typing import Any
_PROFILES: dict[str, dict[str, Any]] = {
"accounts/fireworks/models/kimi-k2-instruct": {
"max_input_tokens": 128000,
"max_output_tokens": 16384,
"accounts/fireworks/models/deepseek-v3p1": {
"max_input_tokens": 163840,
"max_output_tokens": 163840,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
@@ -27,7 +27,49 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"reasoning_output": True,
"tool_calling": True,
},
"accounts/fireworks/models/deepseek-v3p2": {
"max_input_tokens": 160000,
"max_output_tokens": 160000,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"accounts/fireworks/models/glm-4p5": {
"max_input_tokens": 131072,
"max_output_tokens": 131072,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"accounts/fireworks/models/glm-4p5-air": {
"max_input_tokens": 131072,
"max_output_tokens": 131072,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"accounts/fireworks/models/glm-4p7": {
@@ -58,76 +100,6 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": True,
"tool_calling": True,
},
"accounts/fireworks/models/deepseek-v3p1": {
"max_input_tokens": 163840,
"max_output_tokens": 163840,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"accounts/fireworks/models/minimax-m2p1": {
"max_input_tokens": 200000,
"max_output_tokens": 200000,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"accounts/fireworks/models/glm-4p5-air": {
"max_input_tokens": 131072,
"max_output_tokens": 131072,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"accounts/fireworks/models/deepseek-v3p2": {
"max_input_tokens": 160000,
"max_output_tokens": 160000,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"accounts/fireworks/models/minimax-m2p5": {
"max_input_tokens": 196608,
"max_output_tokens": 196608,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"accounts/fireworks/models/gpt-oss-120b": {
"max_input_tokens": 131072,
"max_output_tokens": 32768,
@@ -142,48 +114,6 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": True,
"tool_calling": True,
},
"accounts/fireworks/models/kimi-k2p5": {
"max_input_tokens": 256000,
"max_output_tokens": 256000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": True,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"accounts/fireworks/models/kimi-k2-thinking": {
"max_input_tokens": 256000,
"max_output_tokens": 256000,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"accounts/fireworks/models/glm-4p5": {
"max_input_tokens": 131072,
"max_output_tokens": 131072,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"accounts/fireworks/models/gpt-oss-20b": {
"max_input_tokens": 131072,
"max_output_tokens": 32768,
@@ -198,4 +128,74 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": True,
"tool_calling": True,
},
"accounts/fireworks/models/kimi-k2-instruct": {
"max_input_tokens": 128000,
"max_output_tokens": 16384,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"accounts/fireworks/models/kimi-k2-thinking": {
"max_input_tokens": 256000,
"max_output_tokens": 256000,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"accounts/fireworks/models/kimi-k2p5": {
"max_input_tokens": 256000,
"max_output_tokens": 256000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": True,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"accounts/fireworks/models/minimax-m2p1": {
"max_input_tokens": 200000,
"max_output_tokens": 200000,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"accounts/fireworks/models/minimax-m2p5": {
"max_input_tokens": 196608,
"max_output_tokens": 196608,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
}

View File

@@ -16,62 +16,6 @@ https://docs.langchain.com/oss/python/langchain/models#updating-or-overwriting-p
from typing import Any
_PROFILES: dict[str, dict[str, Any]] = {
"llama3-70b-8192": {
"max_input_tokens": 8192,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"qwen-qwq-32b": {
"max_input_tokens": 131072,
"max_output_tokens": 16384,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"llama-3.1-8b-instant": {
"max_input_tokens": 131072,
"max_output_tokens": 131072,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"llama-guard-3-8b": {
"max_input_tokens": 8192,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": False,
},
"deepseek-r1-distill-llama-70b": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
@@ -86,7 +30,7 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": True,
"tool_calling": True,
},
"llama3-8b-8192": {
"gemma2-9b-it": {
"max_input_tokens": 8192,
"max_output_tokens": 8192,
"text_inputs": True,
@@ -100,9 +44,9 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": False,
"tool_calling": True,
},
"mistral-saba-24b": {
"max_input_tokens": 32768,
"max_output_tokens": 32768,
"llama-3.1-8b-instant": {
"max_input_tokens": 131072,
"max_output_tokens": 131072,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
@@ -128,7 +72,7 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": False,
"tool_calling": True,
},
"gemma2-9b-it": {
"llama-guard-3-8b": {
"max_input_tokens": 8192,
"max_output_tokens": 8192,
"text_inputs": True,
@@ -140,6 +84,92 @@ _PROFILES: dict[str, dict[str, Any]] = {
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": False,
},
"llama3-70b-8192": {
"max_input_tokens": 8192,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"llama3-8b-8192": {
"max_input_tokens": 8192,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"meta-llama/llama-4-maverick-17b-128e-instruct": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
"structured_output": True,
},
"meta-llama/llama-4-scout-17b-16e-instruct": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
"structured_output": True,
},
"meta-llama/llama-guard-4-12b": {
"max_input_tokens": 131072,
"max_output_tokens": 1024,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": False,
},
"mistral-saba-24b": {
"max_input_tokens": 32768,
"max_output_tokens": 32768,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"moonshotai/kimi-k2-instruct": {
@@ -171,64 +201,6 @@ _PROFILES: dict[str, dict[str, Any]] = {
"tool_calling": True,
"structured_output": True,
},
"qwen/qwen3-32b": {
"max_input_tokens": 131072,
"max_output_tokens": 16384,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"meta-llama/llama-4-scout-17b-16e-instruct": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
"structured_output": True,
},
"meta-llama/llama-guard-4-12b": {
"max_input_tokens": 131072,
"max_output_tokens": 1024,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": False,
},
"meta-llama/llama-4-maverick-17b-128e-instruct": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
"structured_output": True,
},
"openai/gpt-oss-120b": {
"max_input_tokens": 131072,
"max_output_tokens": 65536,
@@ -259,4 +231,32 @@ _PROFILES: dict[str, dict[str, Any]] = {
"tool_calling": True,
"structured_output": True,
},
"qwen-qwq-32b": {
"max_input_tokens": 131072,
"max_output_tokens": 16384,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"qwen/qwen3-32b": {
"max_input_tokens": 131072,
"max_output_tokens": 16384,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
}

View File

@@ -16,21 +16,7 @@ https://docs.langchain.com/oss/python/langchain/models#updating-or-overwriting-p
from typing import Any
_PROFILES: dict[str, dict[str, Any]] = {
"zai-org/GLM-4.7-Flash": {
"max_input_tokens": 200000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"zai-org/GLM-4.7": {
"MiniMaxAI/MiniMax-M2.1": {
"max_input_tokens": 204800,
"max_output_tokens": 131072,
"text_inputs": True,
@@ -44,34 +30,6 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": True,
"tool_calling": True,
},
"zai-org/GLM-5": {
"max_input_tokens": 202752,
"max_output_tokens": 131072,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"XiaomiMiMo/MiMo-V2-Flash": {
"max_input_tokens": 262144,
"max_output_tokens": 4096,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"MiniMaxAI/MiniMax-M2.5": {
"max_input_tokens": 204800,
"max_output_tokens": 131072,
@@ -86,8 +44,8 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": True,
"tool_calling": True,
},
"MiniMaxAI/MiniMax-M2.1": {
"max_input_tokens": 204800,
"Qwen/Qwen3-235B-A22B-Thinking-2507": {
"max_input_tokens": 262144,
"max_output_tokens": 131072,
"text_inputs": True,
"image_inputs": False,
@@ -100,6 +58,118 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": True,
"tool_calling": True,
},
"Qwen/Qwen3-Coder-480B-A35B-Instruct": {
"max_input_tokens": 262144,
"max_output_tokens": 66536,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"Qwen/Qwen3-Coder-Next": {
"max_input_tokens": 262144,
"max_output_tokens": 65536,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"Qwen/Qwen3-Embedding-4B": {
"max_input_tokens": 32000,
"max_output_tokens": 2048,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": False,
},
"Qwen/Qwen3-Embedding-8B": {
"max_input_tokens": 32000,
"max_output_tokens": 4096,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": False,
},
"Qwen/Qwen3-Next-80B-A3B-Instruct": {
"max_input_tokens": 262144,
"max_output_tokens": 66536,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"Qwen/Qwen3-Next-80B-A3B-Thinking": {
"max_input_tokens": 262144,
"max_output_tokens": 131072,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"Qwen/Qwen3.5-397B-A17B": {
"max_input_tokens": 262144,
"max_output_tokens": 32768,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"XiaomiMiMo/MiMo-V2-Flash": {
"max_input_tokens": 262144,
"max_output_tokens": 4096,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"deepseek-ai/DeepSeek-R1-0528": {
"max_input_tokens": 163840,
"max_output_tokens": 163840,
@@ -156,20 +226,6 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": False,
"tool_calling": True,
},
"moonshotai/Kimi-K2.5": {
"max_input_tokens": 262144,
"max_output_tokens": 262144,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": True,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"moonshotai/Kimi-K2-Thinking": {
"max_input_tokens": 262144,
"max_output_tokens": 262144,
@@ -184,27 +240,13 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": True,
"tool_calling": True,
},
"Qwen/Qwen3-Next-80B-A3B-Instruct": {
"moonshotai/Kimi-K2.5": {
"max_input_tokens": 262144,
"max_output_tokens": 66536,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"Qwen/Qwen3.5-397B-A17B": {
"max_input_tokens": 262144,
"max_output_tokens": 32768,
"max_output_tokens": 262144,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"video_inputs": True,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
@@ -212,8 +254,8 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": True,
"tool_calling": True,
},
"Qwen/Qwen3-235B-A22B-Thinking-2507": {
"max_input_tokens": 262144,
"zai-org/GLM-4.7": {
"max_input_tokens": 204800,
"max_output_tokens": 131072,
"text_inputs": True,
"image_inputs": False,
@@ -226,9 +268,9 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": True,
"tool_calling": True,
},
"Qwen/Qwen3-Coder-Next": {
"max_input_tokens": 262144,
"max_output_tokens": 65536,
"zai-org/GLM-4.7-Flash": {
"max_input_tokens": 200000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
@@ -237,53 +279,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"reasoning_output": True,
"tool_calling": True,
},
"Qwen/Qwen3-Coder-480B-A35B-Instruct": {
"max_input_tokens": 262144,
"max_output_tokens": 66536,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"Qwen/Qwen3-Embedding-4B": {
"max_input_tokens": 32000,
"max_output_tokens": 2048,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": False,
},
"Qwen/Qwen3-Embedding-8B": {
"max_input_tokens": 32000,
"max_output_tokens": 4096,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": False,
},
"Qwen/Qwen3-Next-80B-A3B-Thinking": {
"max_input_tokens": 262144,
"zai-org/GLM-5": {
"max_input_tokens": 202752,
"max_output_tokens": 131072,
"text_inputs": True,
"image_inputs": False,
@@ -293,7 +293,7 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"reasoning_output": True,
"tool_calling": True,
},
}

View File

@@ -16,6 +16,34 @@ https://docs.langchain.com/oss/python/langchain/models#updating-or-overwriting-p
from typing import Any
_PROFILES: dict[str, dict[str, Any]] = {
"codestral-latest": {
"max_input_tokens": 256000,
"max_output_tokens": 4096,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"devstral-2512": {
"max_input_tokens": 262144,
"max_output_tokens": 262144,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"devstral-medium-2507": {
"max_input_tokens": 128000,
"max_output_tokens": 128000,
@@ -30,6 +58,48 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": False,
"tool_calling": True,
},
"devstral-medium-latest": {
"max_input_tokens": 262144,
"max_output_tokens": 262144,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"devstral-small-2505": {
"max_input_tokens": 128000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"devstral-small-2507": {
"max_input_tokens": 128000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"labs-devstral-small-2512": {
"max_input_tokens": 256000,
"max_output_tokens": 256000,
@@ -44,66 +114,10 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": False,
"tool_calling": True,
},
"devstral-medium-latest": {
"max_input_tokens": 262144,
"max_output_tokens": 262144,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"open-mistral-7b": {
"max_input_tokens": 8000,
"max_output_tokens": 8000,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"mistral-small-2506": {
"magistral-medium-latest": {
"max_input_tokens": 128000,
"max_output_tokens": 16384,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"mistral-medium-2505": {
"max_input_tokens": 131072,
"max_output_tokens": 131072,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"codestral-latest": {
"max_input_tokens": 256000,
"max_output_tokens": 4096,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
@@ -111,21 +125,7 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"ministral-8b-latest": {
"max_input_tokens": 128000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"reasoning_output": True,
"tool_calling": True,
},
"magistral-small": {
@@ -142,11 +142,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": True,
"tool_calling": True,
},
"mistral-large-2512": {
"max_input_tokens": 262144,
"max_output_tokens": 262144,
"ministral-3b-latest": {
"max_input_tokens": 128000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
@@ -156,7 +156,7 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": False,
"tool_calling": True,
},
"ministral-3b-latest": {
"ministral-8b-latest": {
"max_input_tokens": 128000,
"max_output_tokens": 128000,
"text_inputs": True,
@@ -184,9 +184,9 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": False,
"tool_calling": False,
},
"devstral-small-2505": {
"max_input_tokens": 128000,
"max_output_tokens": 128000,
"mistral-large-2411": {
"max_input_tokens": 131072,
"max_output_tokens": 16384,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
@@ -198,67 +198,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": False,
"tool_calling": True,
},
"pixtral-12b": {
"max_input_tokens": 128000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"open-mixtral-8x7b": {
"max_input_tokens": 32000,
"max_output_tokens": 32000,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"pixtral-large-latest": {
"max_input_tokens": 128000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"mistral-nemo": {
"max_input_tokens": 128000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"devstral-2512": {
"mistral-large-2512": {
"max_input_tokens": 262144,
"max_output_tokens": 262144,
"text_inputs": True,
"image_inputs": False,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
@@ -282,6 +226,20 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": False,
"tool_calling": True,
},
"mistral-medium-2505": {
"max_input_tokens": 131072,
"max_output_tokens": 131072,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"mistral-medium-2508": {
"max_input_tokens": 262144,
"max_output_tokens": 262144,
@@ -296,10 +254,24 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": False,
"tool_calling": True,
},
"mistral-large-2411": {
"max_input_tokens": 131072,
"mistral-medium-latest": {
"max_input_tokens": 128000,
"max_output_tokens": 16384,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"mistral-nemo": {
"max_input_tokens": 128000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
@@ -310,6 +282,20 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": False,
"tool_calling": True,
},
"mistral-small-2506": {
"max_input_tokens": 128000,
"max_output_tokens": 16384,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"mistral-small-latest": {
"max_input_tokens": 128000,
"max_output_tokens": 16384,
@@ -324,6 +310,20 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": False,
"tool_calling": True,
},
"open-mistral-7b": {
"max_input_tokens": 8000,
"max_output_tokens": 8000,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"open-mixtral-8x22b": {
"max_input_tokens": 64000,
"max_output_tokens": 64000,
@@ -338,9 +338,23 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": False,
"tool_calling": True,
},
"mistral-medium-latest": {
"open-mixtral-8x7b": {
"max_input_tokens": 32000,
"max_output_tokens": 32000,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"pixtral-12b": {
"max_input_tokens": 128000,
"max_output_tokens": 16384,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
@@ -352,11 +366,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": False,
"tool_calling": True,
},
"devstral-small-2507": {
"pixtral-large-latest": {
"max_input_tokens": 128000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": False,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
@@ -366,18 +380,4 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": False,
"tool_calling": True,
},
"magistral-medium-latest": {
"max_input_tokens": 128000,
"max_output_tokens": 16384,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
}

View File

@@ -16,6 +16,205 @@ https://docs.langchain.com/oss/python/langchain/models#updating-or-overwriting-p
from typing import Any
_PROFILES: dict[str, dict[str, Any]] = {
"codex-mini-latest": {
"max_input_tokens": 200000,
"max_output_tokens": 100000,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"gpt-3.5-turbo": {
"max_input_tokens": 16385,
"max_output_tokens": 4096,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": False,
"structured_output": False,
"image_url_inputs": False,
"pdf_inputs": False,
"pdf_tool_message": False,
"image_tool_message": False,
"tool_choice": True,
},
"gpt-4": {
"max_input_tokens": 8192,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
"structured_output": False,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"gpt-4-turbo": {
"max_input_tokens": 128000,
"max_output_tokens": 4096,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
"structured_output": False,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"gpt-4.1": {
"max_input_tokens": 1047576,
"max_output_tokens": 32768,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"gpt-4.1-mini": {
"max_input_tokens": 1047576,
"max_output_tokens": 32768,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"gpt-4.1-nano": {
"max_input_tokens": 1047576,
"max_output_tokens": 32768,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"gpt-4o": {
"max_input_tokens": 128000,
"max_output_tokens": 16384,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"gpt-4o-2024-05-13": {
"max_input_tokens": 128000,
"max_output_tokens": 4096,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"gpt-4o-2024-08-06": {
"max_input_tokens": 128000,
"max_output_tokens": 16384,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"gpt-4o-2024-11-20": {
"max_input_tokens": 128000,
"max_output_tokens": 16384,
@@ -36,13 +235,32 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_tool_message": True,
"tool_choice": True,
},
"gpt-5.3-codex": {
"max_input_tokens": 400000,
"gpt-4o-mini": {
"max_input_tokens": 128000,
"max_output_tokens": 16384,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"gpt-5": {
"max_input_tokens": 272000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"pdf_inputs": True,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
@@ -52,6 +270,27 @@ _PROFILES: dict[str, dict[str, Any]] = {
"tool_calling": True,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"gpt-5-chat-latest": {
"max_input_tokens": 272000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": False,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
@@ -76,6 +315,46 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_tool_message": True,
"tool_choice": True,
},
"gpt-5-mini": {
"max_input_tokens": 272000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"gpt-5-nano": {
"max_input_tokens": 272000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"gpt-5-pro": {
"max_input_tokens": 272000,
"max_output_tokens": 272000,
@@ -96,46 +375,7 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_tool_message": True,
"tool_choice": True,
},
"gpt-4o-mini": {
"max_input_tokens": 128000,
"max_output_tokens": 16384,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"text-embedding-ada-002": {
"max_input_tokens": 8192,
"max_output_tokens": 1536,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": False,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"gpt-5-chat-latest": {
"gpt-5.1": {
"max_input_tokens": 272000,
"max_output_tokens": 128000,
"text_inputs": True,
@@ -147,7 +387,7 @@ _PROFILES: dict[str, dict[str, Any]] = {
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": False,
"tool_calling": True,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
@@ -155,11 +395,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_tool_message": True,
"tool_choice": True,
},
"codex-mini-latest": {
"max_input_tokens": 200000,
"max_output_tokens": 100000,
"gpt-5.1-chat-latest": {
"max_input_tokens": 272000,
"max_output_tokens": 16384,
"text_inputs": True,
"image_inputs": False,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
@@ -168,6 +408,27 @@ _PROFILES: dict[str, dict[str, Any]] = {
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"gpt-5.1-codex": {
"max_input_tokens": 272000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
@@ -194,9 +455,9 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_tool_message": True,
"tool_choice": True,
},
"gpt-4o-2024-05-13": {
"max_input_tokens": 128000,
"max_output_tokens": 4096,
"gpt-5.1-codex-mini": {
"max_input_tokens": 272000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
@@ -205,7 +466,27 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"reasoning_output": True,
"tool_calling": True,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"gpt-5.2": {
"max_input_tokens": 272000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"structured_output": True,
"image_url_inputs": True,
@@ -254,46 +535,7 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_tool_message": True,
"tool_choice": True,
},
"o3-deep-research": {
"max_input_tokens": 200000,
"max_output_tokens": 100000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"o1": {
"max_input_tokens": 200000,
"max_output_tokens": 100000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"gpt-5.1": {
"gpt-5.2-pro": {
"max_input_tokens": 272000,
"max_output_tokens": 128000,
"text_inputs": True,
@@ -306,19 +548,20 @@ _PROFILES: dict[str, dict[str, Any]] = {
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"structured_output": True,
"structured_output": False,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"o4-mini-deep-research": {
"max_input_tokens": 200000,
"max_output_tokens": 100000,
"gpt-5.3-codex": {
"max_input_tokens": 400000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"pdf_inputs": True,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
@@ -326,8 +569,8 @@ _PROFILES: dict[str, dict[str, Any]] = {
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
@@ -352,7 +595,7 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_tool_message": True,
"tool_choice": True,
},
"o3": {
"o1": {
"max_input_tokens": 200000,
"max_output_tokens": 100000,
"text_inputs": True,
@@ -372,189 +615,11 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_tool_message": True,
"tool_choice": True,
},
"text-embedding-3-small": {
"max_input_tokens": 8191,
"max_output_tokens": 1536,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": False,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"gpt-4.1-nano": {
"max_input_tokens": 1047576,
"max_output_tokens": 32768,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"text-embedding-3-large": {
"max_input_tokens": 8191,
"max_output_tokens": 3072,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": False,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"gpt-3.5-turbo": {
"max_input_tokens": 16385,
"max_output_tokens": 4096,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": False,
"structured_output": False,
"image_url_inputs": False,
"pdf_inputs": False,
"pdf_tool_message": False,
"image_tool_message": False,
"tool_choice": True,
},
"gpt-5.1-codex-mini": {
"max_input_tokens": 272000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"gpt-5.2": {
"max_input_tokens": 272000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"gpt-4.1": {
"max_input_tokens": 1047576,
"max_output_tokens": 32768,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"o3-pro": {
"max_input_tokens": 200000,
"max_output_tokens": 100000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"gpt-4-turbo": {
"o1-mini": {
"max_input_tokens": 128000,
"max_output_tokens": 4096,
"max_output_tokens": 65536,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
"structured_output": False,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"gpt-5": {
"max_input_tokens": 272000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
@@ -562,47 +627,7 @@ _PROFILES: dict[str, dict[str, Any]] = {
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"o4-mini": {
"max_input_tokens": 200000,
"max_output_tokens": 100000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"gpt-4.1-mini": {
"max_input_tokens": 1047576,
"max_output_tokens": 32768,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
"tool_calling": False,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
@@ -649,9 +674,9 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_tool_message": True,
"tool_choice": True,
},
"gpt-5.1-codex": {
"max_input_tokens": 272000,
"max_output_tokens": 128000,
"o3": {
"max_input_tokens": 200000,
"max_output_tokens": 100000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
@@ -669,9 +694,9 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_tool_message": True,
"tool_choice": True,
},
"gpt-5.2-pro": {
"max_input_tokens": 272000,
"max_output_tokens": 128000,
"o3-deep-research": {
"max_input_tokens": 200000,
"max_output_tokens": 100000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
@@ -682,7 +707,6 @@ _PROFILES: dict[str, dict[str, Any]] = {
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"structured_output": False,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
@@ -709,29 +733,9 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_tool_message": True,
"tool_choice": True,
},
"gpt-4o-2024-08-06": {
"max_input_tokens": 128000,
"max_output_tokens": 16384,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"gpt-5-mini": {
"max_input_tokens": 272000,
"max_output_tokens": 128000,
"o3-pro": {
"max_input_tokens": 200000,
"max_output_tokens": 100000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
@@ -749,9 +753,9 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_tool_message": True,
"tool_choice": True,
},
"gpt-5.1-chat-latest": {
"max_input_tokens": 272000,
"max_output_tokens": 16384,
"o4-mini": {
"max_input_tokens": 200000,
"max_output_tokens": 100000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
@@ -769,9 +773,28 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_tool_message": True,
"tool_choice": True,
},
"gpt-4": {
"max_input_tokens": 8192,
"max_output_tokens": 8192,
"o4-mini-deep-research": {
"max_input_tokens": 200000,
"max_output_tokens": 100000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"text-embedding-3-large": {
"max_input_tokens": 8191,
"max_output_tokens": 3072,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
@@ -781,59 +804,18 @@ _PROFILES: dict[str, dict[str, Any]] = {
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
"structured_output": False,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"gpt-5-nano": {
"max_input_tokens": 272000,
"max_output_tokens": 128000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"o1-mini": {
"max_input_tokens": 128000,
"max_output_tokens": 65536,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": False,
"structured_output": True,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"gpt-4o": {
"max_input_tokens": 128000,
"max_output_tokens": 16384,
"text-embedding-3-small": {
"max_input_tokens": 8191,
"max_output_tokens": 1536,
"text_inputs": True,
"image_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
@@ -841,8 +823,26 @@ _PROFILES: dict[str, dict[str, Any]] = {
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
"structured_output": True,
"tool_calling": False,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,
"image_tool_message": True,
"tool_choice": True,
},
"text-embedding-ada-002": {
"max_input_tokens": 8192,
"max_output_tokens": 1536,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": False,
"image_url_inputs": True,
"pdf_inputs": True,
"pdf_tool_message": True,

File diff suppressed because it is too large Load Diff

View File

@@ -16,20 +16,6 @@ https://docs.langchain.com/oss/python/langchain/models#updating-or-overwriting-p
from typing import Any
_PROFILES: dict[str, dict[str, Any]] = {
"sonar-reasoning-pro": {
"max_input_tokens": 128000,
"max_output_tokens": 4096,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": False,
},
"sonar": {
"max_input_tokens": 128000,
"max_output_tokens": 4096,
@@ -72,4 +58,18 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": False,
"tool_calling": False,
},
"sonar-reasoning-pro": {
"max_input_tokens": 128000,
"max_output_tokens": 4096,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": False,
},
}

View File

@@ -16,20 +16,6 @@ https://docs.langchain.com/oss/python/langchain/models#updating-or-overwriting-p
from typing import Any
_PROFILES: dict[str, dict[str, Any]] = {
"grok-2-1212": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"grok-2": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
@@ -44,7 +30,21 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": False,
"tool_calling": True,
},
"grok-3-fast-latest": {
"grok-2-1212": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"grok-2-latest": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"text_inputs": True,
@@ -72,34 +72,6 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": False,
"tool_calling": True,
},
"grok-3": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"grok-code-fast-1": {
"max_input_tokens": 256000,
"max_output_tokens": 10000,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"grok-2-vision-1212": {
"max_input_tokens": 8192,
"max_output_tokens": 4096,
@@ -114,104 +86,6 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": False,
"tool_calling": True,
},
"grok-4-1-fast-non-reasoning": {
"max_input_tokens": 2000000,
"max_output_tokens": 30000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"grok-beta": {
"max_input_tokens": 131072,
"max_output_tokens": 4096,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"grok-3-mini-fast": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"grok-4-fast": {
"max_input_tokens": 2000000,
"max_output_tokens": 30000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"grok-4": {
"max_input_tokens": 256000,
"max_output_tokens": 64000,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"grok-3-latest": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"grok-4-1-fast": {
"max_input_tokens": 2000000,
"max_output_tokens": 30000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"grok-2-vision-latest": {
"max_input_tokens": 8192,
"max_output_tokens": 4096,
@@ -226,7 +100,63 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": False,
"tool_calling": True,
},
"grok-3-mini-latest": {
"grok-3": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"grok-3-fast": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"grok-3-fast-latest": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"grok-3-latest": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"grok-3-mini": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"text_inputs": True,
@@ -240,7 +170,7 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": True,
"tool_calling": True,
},
"grok-3-mini": {
"grok-3-mini-fast": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"text_inputs": True,
@@ -268,7 +198,7 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": True,
"tool_calling": True,
},
"grok-2-latest": {
"grok-3-mini-latest": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"text_inputs": True,
@@ -279,9 +209,65 @@ _PROFILES: dict[str, dict[str, Any]] = {
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"grok-4": {
"max_input_tokens": 256000,
"max_output_tokens": 64000,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"grok-4-1-fast": {
"max_input_tokens": 2000000,
"max_output_tokens": 30000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"grok-4-1-fast-non-reasoning": {
"max_input_tokens": 2000000,
"max_output_tokens": 30000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"grok-4-fast": {
"max_input_tokens": 2000000,
"max_output_tokens": 30000,
"text_inputs": True,
"image_inputs": True,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"grok-4-fast-non-reasoning": {
"max_input_tokens": 2000000,
"max_output_tokens": 30000,
@@ -296,6 +282,34 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": False,
"tool_calling": True,
},
"grok-beta": {
"max_input_tokens": 131072,
"max_output_tokens": 4096,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
"grok-code-fast-1": {
"max_input_tokens": 256000,
"max_output_tokens": 10000,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": True,
"tool_calling": True,
},
"grok-vision-beta": {
"max_input_tokens": 8192,
"max_output_tokens": 4096,
@@ -310,18 +324,4 @@ _PROFILES: dict[str, dict[str, Any]] = {
"reasoning_output": False,
"tool_calling": True,
},
"grok-3-fast": {
"max_input_tokens": 131072,
"max_output_tokens": 8192,
"text_inputs": True,
"image_inputs": False,
"audio_inputs": False,
"video_inputs": False,
"text_outputs": True,
"image_outputs": False,
"audio_outputs": False,
"video_outputs": False,
"reasoning_output": False,
"tool_calling": True,
},
}

View File

@@ -1,6 +1,8 @@
"""Integration tests for LangChain components."""
# ruff: noqa: E402
import importlib.util
import pytest
# Rewrite assert statements for test suite so that implementations can
@@ -19,13 +21,8 @@ modules = [
for module in modules:
pytest.register_assert_rewrite(f"langchain_tests.integration_tests.{module}")
_HAS_DEEPAGENTS = False
try:
import deepagents # noqa: F401
except ImportError:
_HAS_DEEPAGENTS = False
else:
_HAS_DEEPAGENTS = True
_HAS_DEEPAGENTS = importlib.util.find_spec("deepagents") is not None
if _HAS_DEEPAGENTS:
pytest.register_assert_rewrite("langchain_tests.integration_tests.sandboxes")
from langchain_tests.integration_tests.base_store import (