Skip to content

ChatOpenAI can now accept a callable for api_key, not just a string #33051

@pamelafox

Description

@pamelafox

Checked other resources

  • This is a bug, not a usage question.
  • I added a clear and descriptive title that summarizes this issue.
  • I used the GitHub search to find a similar question and didn't find it.
  • I am sure that this is a bug in LangChain rather than my code.
  • The bug is not resolved by updating to the latest stable version of LangChain (or the specific integration package).
  • This is not related to the langchain-community package.
  • I read what a minimal reproducible example is (https://stackoverflow.com/help/minimal-reproducible-example).
  • I posted a self-contained, minimal, reproducible example. A maintainer can copy it and run it AS IS.

Example Code

Recently, the openai package changed so that api_key can accept either a string OR a callable. The callable is used to generate a token, for use with APIs like Azure OpenAI that generate bearer tokens.

Here's the start of init from the openai package:

    def __init__(
        self,
        *,
        api_key: str | None | Callable[[], str] = None,

However, when I try to pass a callable into the langchain-openai wrapper, I get a type validation error, since that wrapper still says that api_key must be a string.
Could it be extended to allow for the Callable as well?

Here's full code to replicate, with an Azure account:

import os

import azure.identity
from dotenv import load_dotenv
from langchain.agents import create_agent
from langchain_openai import ChatOpenAI
from rich import print

load_dotenv(override=True)

token_provider = azure.identity.get_bearer_token_provider(
    azure.identity.DefaultAzureCredential(),
    "https://cognitiveservices.azure.com/.default",
)
model = ChatOpenAI(
    model=os.environ["AZURE_OPENAI_CHAT_DEPLOYMENT"],
    base_url=os.environ["AZURE_OPENAI_ENDPOINT"],
    api_key=token_provider,
)

agent = create_agent(model=model, prompt="You are a helpful assistant that makes lots of cat references and uses emojis.", tools=[])
response = agent.invoke({"messages": [{"role": "user", "content": "write a haiku about a hungry cat that wants tuna"}]})
latest_message = response["messages"][-1]
print(latest_message.content)

Error Message and Stack Trace (if applicable)

(.venv) python-openai-demos % /Users/pamelafox/python-openai-demos/.venv/bin/python /Users/pamelafox/python-openai-demos/chat_langchain.py
Traceback (most recent call last):
File "/Users/pamelafox/python-openai-demos/chat_langchain.py", line 17, in
model = ChatOpenAI(
^^^^^^^^^^^
File "/Users/pamelafox/python-openai-demos/.venv/lib/python3.11/site-packages/langchain_core/load/serializable.py", line 115, in init
super().init(*args, **kwargs)
File "/Users/pamelafox/python-openai-demos/.venv/lib/python3.11/site-packages/pydantic/main.py", line 253, in init
validated_self = self.pydantic_validator.validate_python(data, self_instance=self)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pydantic_core._pydantic_core.ValidationError: 1 validation error for ChatOpenAI
api_key
Input should be a valid string [type=string_type, input_value=<function get_bearer_toke....wrapper at 0x17bd558a0>, input_type=function]
For further information visit https://errors.pydantic.dev/2.11/v/string_type

Description

I need my code to pass type validation

System Info

System Information

OS: Darwin
OS Version: Darwin Kernel Version 23.6.0: Wed May 14 13:52:22 PDT 2025; root:xnu-10063.141.1.705.2~2/RELEASE_ARM64_T6000
Python Version: 3.11.13 (main, Jun 3 2025, 18:38:25) [Clang 16.0.0 (clang-1600.0.26.6)]

Package Information

langchain_core: 0.3.76
langchain: 1.0.0a6
langchain_community: 0.0.33
langsmith: 0.4.30
langchain_openai: 0.3.33
langchain_text_splitters: 0.3.11
langgraph_sdk: 0.2.9

Optional packages not installed

langserve

Other Dependencies

aiohttp: 3.9.5
aiosqlite: Installed. No version info available.
aleph-alpha-client: Installed. No version info available.
anthropic: 0.68.0
arxiv: Installed. No version info available.
assemblyai: Installed. No version info available.
atlassian-python-api: Installed. No version info available.
azure-ai-documentintelligence: Installed. No version info available.
beautifulsoup4: Installed. No version info available.
bibtexparser: Installed. No version info available.
cassio: Installed. No version info available.
chardet: Installed. No version info available.
cloudpickle: Installed. No version info available.
cohere: 5.18.0
databricks-vectorsearch: Installed. No version info available.
dataclasses-json: 0.6.4
datasets: Installed. No version info available.
dgml-utils: Installed. No version info available.
elasticsearch: Installed. No version info available.
esprima: Installed. No version info available.
faiss-cpu: Installed. No version info available.
feedparser: Installed. No version info available.
fireworks-ai: Installed. No version info available.
friendli-client: Installed. No version info available.
geopandas: Installed. No version info available.
gitpython: Installed. No version info available.
google-cloud-documentai: Installed. No version info available.
gql: Installed. No version info available.
gradientai: Installed. No version info available.
hdbcli: Installed. No version info available.
hologres-vector: Installed. No version info available.
html2text: Installed. No version info available.
httpx: 0.28.1
httpx-sse: 0.4.0
httpx<1,>=0.23.0: Installed. No version info available.
httpx>=0.25.2: Installed. No version info available.
javelin-sdk: Installed. No version info available.
jinja2: 3.1.6
jq: Installed. No version info available.
jsonpatch<2.0,>=1.33: Installed. No version info available.
jsonschema: 4.25.1
langchain-anthropic;: Installed. No version info available.
langchain-aws;: Installed. No version info available.
langchain-azure-ai;: Installed. No version info available.
langchain-cohere;: Installed. No version info available.
langchain-community;: Installed. No version info available.
langchain-core<1.0.0,>=0.3.76: Installed. No version info available.
langchain-core<2.0.0,>=0.3.75: Installed. No version info available.
langchain-deepseek;: Installed. No version info available.
langchain-fireworks;: Installed. No version info available.
langchain-google-genai;: Installed. No version info available.
langchain-google-vertexai;: Installed. No version info available.
langchain-groq;: Installed. No version info available.
langchain-huggingface;: Installed. No version info available.
langchain-mistralai;: Installed. No version info available.
langchain-ollama;: Installed. No version info available.
langchain-openai;: Installed. No version info available.
langchain-perplexity;: Installed. No version info available.
langchain-text-splitters<1.0.0,>=0.3.11: Installed. No version info available.
langchain-together;: Installed. No version info available.
langchain-xai;: Installed. No version info available.
langgraph>=0.6.7: Installed. No version info available.
langsmith-pyo3>=0.1.0rc2;: Installed. No version info available.
langsmith>=0.3.45: Installed. No version info available.
lxml: Installed. No version info available.
markdownify: Installed. No version info available.
motor: Installed. No version info available.
msal: 1.28.0
mwparserfromhell: Installed. No version info available.
mwxml: Installed. No version info available.
newspaper3k: Installed. No version info available.
numexpr: Installed. No version info available.
numpy: 1.26.4
nvidia-riva-client: Installed. No version info available.
oci: Installed. No version info available.
openai: 1.108.1
openai-agents>=0.0.3;: Installed. No version info available.
openai<2.0.0,>=1.104.2: Installed. No version info available.
openapi-pydantic: Installed. No version info available.
opentelemetry-api>=1.30.0;: Installed. No version info available.
opentelemetry-exporter-otlp-proto-http>=1.30.0;: Installed. No version info available.
opentelemetry-sdk>=1.30.0;: Installed. No version info available.
oracle-ads: Installed. No version info available.
orjson>=3.10.1: Installed. No version info available.
orjson>=3.9.14;: Installed. No version info available.
packaging>=23.2: Installed. No version info available.
pandas: 2.2.2
pdfminer-six: Installed. No version info available.
pgvector: Installed. No version info available.
praw: Installed. No version info available.
premai: Installed. No version info available.
psychicapi: Installed. No version info available.
py-trello: Installed. No version info available.
pydantic<3,>=1: Installed. No version info available.
pydantic>=2.7.4: Installed. No version info available.
pyjwt: 2.8.0
pymupdf: 1.25.5
pypdf: Installed. No version info available.
pypdfium2: Installed. No version info available.
pyspark: Installed. No version info available.
pytest>=7.0.0;: Installed. No version info available.
PyYAML: 6.0.2
PyYAML>=5.3: Installed. No version info available.
rank-bm25: Installed. No version info available.
rapidfuzz: Installed. No version info available.
rapidocr-onnxruntime: Installed. No version info available.
rdflib: Installed. No version info available.
requests: 2.32.3
requests-toolbelt: 1.0.0
requests-toolbelt>=1.0.0: Installed. No version info available.
requests>=2.0.0: Installed. No version info available.
rich>=13.9.4;: Installed. No version info available.
rspace_client: Installed. No version info available.
scikit-learn: 1.6.1
SQLAlchemy: 2.0.29
sqlite-vss: Installed. No version info available.
streamlit: Installed. No version info available.
sympy: 1.14.0
telethon: Installed. No version info available.
tenacity: 8.2.3
tenacity!=8.4.0,<10.0.0,>=8.1.0: Installed. No version info available.
tidb-vector: Installed. No version info available.
tiktoken<1,>=0.7: Installed. No version info available.
timescale-vector: Installed. No version info available.
tqdm: 4.66.2
tree-sitter: Installed. No version info available.
tree-sitter-languages: Installed. No version info available.
typer: Installed. No version info available.
typing-extensions>=4.7: Installed. No version info available.
upstash-redis: Installed. No version info available.
vcrpy>=7.0.0;: Installed. No version info available.
vdms: Installed. No version info available.
xata: Installed. No version info available.
xmltodict: Installed. No version info available.
zstandard>=0.23.0: Installed. No version info available.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugRelated to a bug, vulnerability, unexpected error with an existing feature

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions