Commit Graph

338 Commits

Author SHA1 Message Date
Jackjin
7d05cfb131 fix(openai): preserve namespace field in streaming function_call chunks (#36108) 2026-03-20 12:51:13 -04:00
langchain-model-profile-bot[bot]
9a17602633 chore(model-profiles): refresh model profile data (#36039)
Automated refresh of model profile data for all in-monorepo partner
integrations via `langchain-profiles refresh`.

🤖 Generated by the `refresh_model_profiles` workflow.

Co-authored-by: mdrxy <61371264+mdrxy@users.noreply.github.com>
2026-03-17 17:48:01 -04:00
Giulio Leone
9e4a6013be fix(openai): add type: message to Responses API input items (#35693) 2026-03-15 12:43:16 -04:00
Mason Daugherty
5d9568b5f5 feat(model-profiles): new fields + Makefile target (#35788)
Extract additional fields from models.dev into `_model_data_to_profile`:
`name`, `status`, `release_date`, `last_updated`, `open_weights`,
`attachment`, `temperature`

Move the model profile refresh logic from an inline bash script in the
GitHub Actions workflow into a `make refresh-profiles` target in
`libs/model-profiles/Makefile`. This makes it runnable locally with a
single command and keeps the provider map in one place instead of
duplicated between CI and developer docs.
2026-03-12 13:56:25 +00:00
Matt Van Horn
9521c679db fix(openai): close PIL Image handles in token counting to prevent fd leak (#35742) 2026-03-11 23:07:45 -04:00
LincolnBurrows2017
f9dbd22fe1 fix(openai): typo (#35763)
Fixed typo in comment: "equivelent" -> "equivalent" in
libs/partners/openai/langchain_openai/chat_models/base.py

Co-authored-by: AI Assistant <assistant@example.com>
2026-03-11 11:46:06 -04:00
langchain-model-profile-bot[bot]
3e4c0d5949 chore(model-profiles): refresh model profile data (#35754)
Automated refresh of model profile data for all in-monorepo partner
integrations via `langchain-profiles refresh`.

🤖 Generated by the `refresh_model_profiles` workflow.

Co-authored-by: mdrxy <61371264+mdrxy@users.noreply.github.com>
2026-03-11 09:47:53 -04:00
Mohammad Mohtashim
3af0bc0141 fix(openai): update responses API model detection for pro and codex models (#35594) 2026-03-09 09:20:20 -04:00
ccurme
fbfe4b812d feat(openai): support tool search (#35582) 2026-03-08 08:53:13 -04:00
langchain-model-profile-bot[bot]
3241d6429f chore(model-profiles): refresh model profile data (#35593)
Automated refresh of model profile data for all in-monorepo partner
integrations via `langchain-profiles refresh`.

🤖 Generated by the `refresh_model_profiles` workflow.

Co-authored-by: mdrxy <61371264+mdrxy@users.noreply.github.com>
2026-03-06 10:14:14 -05:00
Jason Meng
f698b43b9a fix(openai): avoid PydanticSerializationUnexpectedValue for structured output (#35543) 2026-03-04 21:46:46 -05:00
Mason Daugherty
e91da86efe feat(openrouter): add streaming token usage support (#35559)
Streaming token usage was silently dropped for `ChatOpenRouter`. Both
`_stream` and `_astream` skipped any SSE chunk without a `choices` array
— which is exactly the shape OpenRouter uses for the final
usage-reporting chunk. This meant `usage_metadata` was never populated
on streamed responses, causing downstream consumers (like the Deep
Agents CLI) to show "unknown" model with 0 tokens.

## Changes
- Add `stream_usage: bool = True` field to `ChatOpenRouter`, which
passes `stream_options: {"include_usage": True}` to the OpenRouter API
when streaming — matching the pattern already established in
`langchain-openai`'s `BaseChatOpenAI`
- Handle usage-only chunks (no `choices`, just `usage`) in both
`_stream` and `_astream` by emitting a `ChatGenerationChunk` with
`usage_metadata` via `_create_usage_metadata`, instead of silently
`continue`-ing past them
2026-03-04 15:35:30 -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
Mattijs Ugen
5c6f8fe0a6 fix(openai): accept valid responses that are falsy at runtime (#35307) 2026-02-18 21:06:43 -05:00
ccurme
8f1bc0d3ae feat(openai): support automatic server-side compaction (#35212) 2026-02-17 10:48:52 -05:00
ccurme
32c6ab3033 fix(openai): add model property (#35284) 2026-02-17 10:46:49 -05:00
Mason Daugherty
df4a29b5d0 docs(openai): more nits (#35277) 2026-02-16 23:10:31 -05:00
weiguang li
fb0233c9b9 docs(openai): clarify reasoning config for openai-compatible endpoints (#35202) 2026-02-15 22:13:24 -05:00
Mohammad Mohtashim
0f5a314275 fix(openai): gpt-5.2-pro Model Profile structured_output key fixed (#35216) 2026-02-15 22:00:00 -05:00
Mohammad Mohtashim
99192b01da chore(openai): extend model_token_mapping till gpt-5.2 for modelname_to_contextsize (#35214) 2026-02-15 21:55:58 -05:00
yaowubarbara
c1e7cf69fb fix(openai): enhance error message for non-OpenAI embedding providers (#35252) 2026-02-15 21:16:45 -05:00
ccurme
8e35924083 fix(openai): sanitize chat completions text content blocks (#35217) 2026-02-15 15:31:02 -05:00
nightcityblade
ecac3d891c fix(openai): improve error message for null choices in OpenAI-compatible APIs (#35236) 2026-02-15 10:59:04 -05:00
Mason Daugherty
f9fd7be695 feat(openrouter): add langchain-openrouter provider package (#35211)
Add a first-party `langchain-openrouter` partner package
(`ChatOpenRouter`) that wraps the official `openrouter` Python SDK,
providing native support for OpenRouter-specific features that
`ChatOpenAI` intentionally does not handle.

Also adds scope-clarifying docstrings to `ChatOpenAI` / `BaseChatOpenAI`
warning users away from using `base_url` overrides with third-party
providers.

---

Closes #31325
Closes #32967
Closes #32977
Closes #32981
Closes #33643
Closes #33757
Closes #34056
Closes #34797
Closes #34962

Supersedes #33902, #34867 (thank you @elonfeng and @okamototk for your
initial work on this!)

---

Bugs with upstream sdk:
- https://github.com/OpenRouterTeam/python-sdk/issues/38
- https://github.com/OpenRouterTeam/python-sdk/issues/51
- https://github.com/OpenRouterTeam/python-sdk/issues/52
2026-02-15 02:09:13 -05:00
ccurme
2b4b1dc29a fix(openai): sanitize urls when counting tokens in images (#35143) 2026-02-10 15:25:10 -05:00
ccurme
7c41298355 feat(core): add ContextOverflowError, raise in anthropic and openai (#35099) 2026-02-09 15:15:34 -05:00
Mason Daugherty
4ca586b322 feat(model-profiles): add text_inputs and text_outputs (#35084)
- Add `text_inputs` and `text_outputs` fields to `ModelProfile`
- Regenerate `_profiles.py` for all providers

## Why

models.dev data includes `'text'` as both an input and output modality,
but we didn't capture it.

models.dev broadly contains models without text input (Whisper/ASR) and
without text output (image generators, TTS).

Without this, downstream consumers can't filter on model text support
(e.g. preventing users from passing text input to an audio-only model).

---

We'd need to also run for Google, AWS and cut releases for all to
propagate
2026-02-09 14:50:09 -05:00
Guofang.Tang
06a7d079b0 fix(openai): detect codex models for responses api preference (#35058) 2026-02-08 13:15:48 -05:00
ccurme
9525206388 chore(openai): update model profiles (#34960) 2026-02-01 09:41:11 -05:00
Mason Daugherty
18c25e9f10 chore: ban relative imports on all packages (#34691) 2026-01-09 17:02:24 -05:00
OysterMax
92afcaae60 fix(openai): raise proper exception OpenAIRefusalError on structured output refusal (#34619) 2026-01-07 14:34:02 -05:00
Sujal M H
7ad1c19d9c fix: handle empty assistant content in Responses API (#34272) (#34296) 2026-01-07 14:21:55 -05:00
Sujal M H
4be9407b09 fix(openai): filter function_call blocks in token counting (#34396) 2025-12-19 13:53:44 -05:00
ccurme
e9f7cd3e0e release(openai): 1.1.6: update max input tokens for gpt-5 series (#34419) 2025-12-18 12:49:59 -05:00
ccurme
e0950f29b7 fix(openai): rely on langchain-core for setting chunk_position (#34404) 2025-12-17 12:44:12 -05:00
tom1299
f167c35243 fix(openai): Correct hyperlinks in documentation of function with_structured_output (#34385)
Just a small fix of some broken hyperlinks in the documentation of the
function `langchain_openai/chat_models/base.py#with_structured_output`
and a rephrase of the reference to supported models.

Co-authored-by: Thomas Reuhl <thomas.reuhl@telekom.de>
2025-12-16 10:49:57 -05:00
Towseef Altaf
0e5e33ba03 fix(openai): correct image resize aspect ratio caps (#34192) 2025-12-12 14:34:17 -05:00
Jacob Lee
a528ea1796 feat(openai): Use responses API if model is gpt-5.2-pro (#34306) 2025-12-12 10:11:15 -05:00
j3r0lin
5720dea41b fix(openai): handle missing 'text' key in responses API content blocks (#34198) 2025-12-12 09:39:12 -05:00
Jacob Lee
badc0cf1b6 fix(openai): Allow temperature when reasoning is set to the string 'none' (#34298)
Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-12-11 15:57:04 -05:00
Towseef Altaf
d27fb0c432 feat(langchain,openai): add strict flag to ProviderStrategy structured output (#34149) 2025-12-10 15:35:23 -05:00
Mason Daugherty
ff6e3558d7 docs(fireworks,groq,huggingface,mistralai,ollama,openai): x-ref convert_to_openai_tool (#34276) 2025-12-09 19:51:04 -05:00
Mason Daugherty
dff229d018 fix(openai): add missing tools param to ChatOpenAI with_structured_output (#34075) 2025-12-08 15:47:31 -05:00
Marlene
ff3353f02f fix(openai): Fixing error that comes up using the Responses API with built-in tools and custom tools (#34136) 2025-12-08 09:10:44 -05:00
Mason Daugherty
3ace4e3680 docs(core,groq,openai): nits for ref docs (#34243) 2025-12-07 19:45:38 -05:00
Abhinav
2ba3ce81a6 fix(openai): make GPT-5 temperature validation case-insensitive (#34012)
Fixed a bug where GPT-5 temperature validation was case-sensitive,
causing issues when users
specified Azure deployment names or model names in uppercase (e.g.,
`"GPT-5-2025-01-01"`, `"GPT-5-NANO"`). The validation now correctly
handles model names regardless of case.

  Changes made:
- Updated `validate_temperature()` method in `BaseChatOpenAI` to perform
case-insensitive
  model name comparisons
- Updated `_get_encoding_model()` method to use case-insensitive checks
for tiktoken encoder
  selection
- Added comprehensive unit tests to verify case-insensitive behavior
with various case
  combinations

  **Issue:** Fixes #34003

  **Dependencies:** None

  **Test Coverage:**
  - All existing tests pass
- New test `test_gpt_5_temperature_case_insensitive` covers uppercase,
lowercase, and
  mixed-case model names
- Tests verify both non-chat GPT-5 models (temperature removed) and chat
models (temperature
  preserved)
  - Lint and format checks pass (`make lint`, `make format`)

---------

Co-authored-by: Mason Daugherty <github@mdrxy.com>
2025-11-23 20:17:03 -05:00
Mason Daugherty
cbaea351b2 style(core,langchain-classic,openai): fix griffe warnings (#34074) 2025-11-23 01:06:46 -05:00
Mason Daugherty
47b79c30c0 chore(docs): fix a few refs syntax errors (#34044)
missing whitespace for some admonitions
2025-11-22 00:58:21 -05:00
ccurme
33e5d01f7c feat(model-profiles): distribute data across packages (#34024) 2025-11-21 15:47:05 -05:00
Mason Daugherty
52b1516d44 style(langchain): fix some middleware ref syntax (#33988) 2025-11-16 00:33:17 -05:00