mirror of
https://github.com/hwchase17/langchain.git
synced 2025-08-16 16:11:02 +00:00
feat(openai): officially support verbosity
(#32470)
This commit is contained in:
parent
98797f367a
commit
0024dffa68
@ -3599,6 +3599,13 @@ def _construct_responses_api_payload(
|
|||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
verbosity = payload.pop("verbosity", None)
|
||||||
|
if verbosity is not None:
|
||||||
|
if "text" not in payload:
|
||||||
|
payload["text"] = {"format": {"type": "text"}}
|
||||||
|
payload["text"]["verbosity"] = verbosity
|
||||||
|
|
||||||
return payload
|
return payload
|
||||||
|
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ license = { text = "MIT" }
|
|||||||
requires-python = ">=3.9"
|
requires-python = ">=3.9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"langchain-core<1.0.0,>=0.3.74",
|
"langchain-core<1.0.0,>=0.3.74",
|
||||||
"openai<2.0.0,>=1.86.0",
|
"openai<2.0.0,>=1.99.5",
|
||||||
"tiktoken<1,>=0.7",
|
"tiktoken<1,>=0.7",
|
||||||
]
|
]
|
||||||
name = "langchain-openai"
|
name = "langchain-openai"
|
||||||
|
@ -674,28 +674,17 @@ def test_image_generation_multi_turn() -> None:
|
|||||||
assert set(tool_output2.keys()).issubset(expected_keys)
|
assert set(tool_output2.keys()).issubset(expected_keys)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.xfail(
|
|
||||||
reason="verbosity parameter not yet supported by OpenAI Responses API"
|
|
||||||
)
|
|
||||||
def test_verbosity_parameter() -> None:
|
def test_verbosity_parameter() -> None:
|
||||||
"""Test verbosity parameter with Responses API.
|
"""Test verbosity parameter with Responses API.
|
||||||
|
|
||||||
TODO: This test is expected to fail until OpenAI enables verbosity support
|
Tests that the verbosity parameter works correctly with the OpenAI Responses API.
|
||||||
in the Responses API for available models. The parameter is properly implemented
|
|
||||||
in the codebase but the API currently returns 'Unknown parameter: verbosity'.
|
|
||||||
Remove @pytest.mark.xfail when OpenAI adds support.
|
|
||||||
"""
|
"""
|
||||||
llm = ChatOpenAI(
|
llm = ChatOpenAI(model=MODEL_NAME, verbosity="medium", use_responses_api=True)
|
||||||
model=MODEL_NAME,
|
|
||||||
verbosity="medium",
|
|
||||||
use_responses_api=True,
|
|
||||||
output_version="responses/v1",
|
|
||||||
)
|
|
||||||
response = llm.invoke([HumanMessage(content="Hello, explain quantum computing.")])
|
response = llm.invoke([HumanMessage(content="Hello, explain quantum computing.")])
|
||||||
|
|
||||||
assert isinstance(response, AIMessage)
|
assert isinstance(response, AIMessage)
|
||||||
assert response.content
|
assert response.content
|
||||||
# When verbosity works, we expect the response to respect the verbosity level
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.vcr()
|
@pytest.mark.vcr()
|
||||||
|
@ -1200,7 +1200,8 @@ def test_verbosity_parameter_payload() -> None:
|
|||||||
messages = [{"role": "user", "content": "hello"}]
|
messages = [{"role": "user", "content": "hello"}]
|
||||||
payload = llm._get_request_payload(messages, stop=None)
|
payload = llm._get_request_payload(messages, stop=None)
|
||||||
|
|
||||||
assert payload["verbosity"] == "high"
|
assert payload["text"]["verbosity"] == "high"
|
||||||
|
assert payload["text"]["format"]["type"] == "text"
|
||||||
|
|
||||||
|
|
||||||
def test_structured_output_old_model() -> None:
|
def test_structured_output_old_model() -> None:
|
||||||
|
@ -588,7 +588,7 @@ typing = [
|
|||||||
[package.metadata]
|
[package.metadata]
|
||||||
requires-dist = [
|
requires-dist = [
|
||||||
{ name = "langchain-core", editable = "../../core" },
|
{ name = "langchain-core", editable = "../../core" },
|
||||||
{ name = "openai", specifier = ">=1.86.0,<2.0.0" },
|
{ name = "openai", specifier = ">=1.99.5,<2.0.0" },
|
||||||
{ name = "tiktoken", specifier = ">=0.7,<1" },
|
{ name = "tiktoken", specifier = ">=0.7,<1" },
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -995,7 +995,7 @@ wheels = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "openai"
|
name = "openai"
|
||||||
version = "1.99.3"
|
version = "1.99.5"
|
||||||
source = { registry = "https://pypi.org/simple" }
|
source = { registry = "https://pypi.org/simple" }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "anyio" },
|
{ name = "anyio" },
|
||||||
@ -1007,9 +1007,9 @@ dependencies = [
|
|||||||
{ name = "tqdm" },
|
{ name = "tqdm" },
|
||||||
{ name = "typing-extensions" },
|
{ name = "typing-extensions" },
|
||||||
]
|
]
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/72/d3/c372420c8ca1c60e785fd8c19e536cea8f16b0cfdcdad6458e1d8884f2ea/openai-1.99.3.tar.gz", hash = "sha256:1a0e2910e4545d828c14218f2ac3276827c94a043f5353e43b9413b38b497897", size = 504932, upload-time = "2025-08-07T20:35:15.893Z" }
|
sdist = { url = "https://files.pythonhosted.org/packages/2f/4a/16b1b6ee8a62cbfb59057f97f6d9b7bb5ce529047d80bc0b406f65dfdc48/openai-1.99.5.tar.gz", hash = "sha256:aa97ac3326cac7949c5e4ac0274c454c1d19c939760107ae0d3948fc26a924ca", size = 505144, upload-time = "2025-08-08T16:44:46.865Z" }
|
||||||
wheels = [
|
wheels = [
|
||||||
{ url = "https://files.pythonhosted.org/packages/92/bc/e52f49940b4e320629da7db09c90a2407a48c612cff397b4b41b7e58cdf9/openai-1.99.3-py3-none-any.whl", hash = "sha256:c786a03f6cddadb5ee42c6d749aa4f6134fe14fdd7d69a667e5e7ce7fd29a719", size = 785776, upload-time = "2025-08-07T20:35:13.653Z" },
|
{ url = "https://files.pythonhosted.org/packages/e6/f2/2472ae020f5156a994710bf926a76915c71bc7b5debf7b81a11506ec8414/openai-1.99.5-py3-none-any.whl", hash = "sha256:4e870f9501b7c36132e2be13313ce3c4d6915a837e7a299c483aab6a6d4412e9", size = 786246, upload-time = "2025-08-08T16:44:45.062Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
Loading…
Reference in New Issue
Block a user