mirror of
https://github.com/hwchase17/langchain.git
synced 2025-09-18 08:03:36 +00:00
## Goal Solve the following problems with `langchain-openai`: - Structured output with `o1` [breaks out of the box](https://langchain.slack.com/archives/C050X0VTN56/p1735232400232099). - `with_structured_output` by default does not use OpenAI’s [structured output feature](https://platform.openai.com/docs/guides/structured-outputs). - We override API defaults for temperature and other parameters. ## Breaking changes: - Default method for structured output is changing to OpenAI’s dedicated [structured output feature](https://platform.openai.com/docs/guides/structured-outputs). For schemas specified via TypedDict or JSON schema, strict schema validation is disabled by default but can be enabled by specifying `strict=True`. - To recover previous default, pass `method="function_calling"` into `with_structured_output`. - Models that don’t support `method="json_schema"` (e.g., `gpt-4` and `gpt-3.5-turbo`, currently the default model for ChatOpenAI) will raise an error unless `method` is explicitly specified. - To recover previous default, pass `method="function_calling"` into `with_structured_output`. - Schemas specified via Pydantic `BaseModel` that have fields with non-null defaults or metadata (like min/max constraints) will raise an error. - To recover previous default, pass `method="function_calling"` into `with_structured_output`. - `strict` now defaults to False for `method="json_schema"` when schemas are specified via TypedDict or JSON schema. - To recover previous behavior, use `with_structured_output(schema, strict=True)` - Schemas specified via Pydantic V1 will raise a warning (and use `method="function_calling"`) unless `method` is explicitly specified. - To remove the warning, pass `method="function_calling"` into `with_structured_output`. - Streaming with default structured output method / Pydantic schema no longer generates intermediate streamed chunks. - To recover previous behavior, pass `method="function_calling"` into `with_structured_output`. - We no longer override default temperature (was 0.7 in LangChain, now will follow OpenAI, currently 1.0). - To recover previous behavior, initialize `ChatOpenAI` or `AzureChatOpenAI` with `temperature=0.7`. - Note: conceptually there is a difference between forcing a tool call and forcing a response format. Tool calls may have more concise arguments vs. generating content adhering to a schema. Prompts may need to be adjusted to recover desired behavior. --------- Co-authored-by: Jacob Lee <jacoblee93@gmail.com> Co-authored-by: Bagatur <baskaryan@gmail.com>
114 lines
2.8 KiB
TOML
114 lines
2.8 KiB
TOML
[build-system]
|
|
requires = [ "poetry-core>=1.0.0",]
|
|
build-backend = "poetry.core.masonry.api"
|
|
|
|
[tool.poetry]
|
|
name = "langchain-openai"
|
|
version = "0.3.0"
|
|
description = "An integration package connecting OpenAI and LangChain"
|
|
authors = []
|
|
readme = "README.md"
|
|
repository = "https://github.com/langchain-ai/langchain"
|
|
license = "MIT"
|
|
|
|
[tool.mypy]
|
|
disallow_untyped_defs = "True"
|
|
[[tool.mypy.overrides]]
|
|
module = "transformers"
|
|
ignore_missing_imports = true
|
|
|
|
[tool.poetry.urls]
|
|
"Source Code" = "https://github.com/langchain-ai/langchain/tree/master/libs/partners/openai"
|
|
"Release Notes" = "https://github.com/langchain-ai/langchain/releases?q=tag%3A%22langchain-openai%3D%3D0%22&expanded=true"
|
|
|
|
[tool.poetry.dependencies]
|
|
python = ">=3.9,<4.0"
|
|
langchain-core = "^0.3.29"
|
|
openai = "^1.58.1"
|
|
tiktoken = ">=0.7,<1"
|
|
|
|
[tool.ruff.lint]
|
|
select = [ "E", "F", "I", "T201",]
|
|
|
|
[tool.ruff.format]
|
|
docstring-code-format = true
|
|
skip-magic-trailing-comma = true
|
|
|
|
[tool.coverage.run]
|
|
omit = [ "tests/*",]
|
|
|
|
[tool.pytest.ini_options]
|
|
addopts = "--snapshot-warn-unused --strict-markers --strict-config --durations=5 --cov=langchain_openai"
|
|
markers = [ "requires: mark tests as requiring a specific library", "compile: mark placeholder test used to compile integration tests without running them", "scheduled: mark tests to run in scheduled testing",]
|
|
asyncio_mode = "auto"
|
|
filterwarnings = [ "ignore::langchain_core._api.beta_decorator.LangChainBetaWarning",]
|
|
|
|
[tool.poetry.group.test]
|
|
optional = true
|
|
|
|
[tool.poetry.group.codespell]
|
|
optional = true
|
|
|
|
[tool.poetry.group.lint]
|
|
optional = true
|
|
|
|
[tool.poetry.group.dev]
|
|
optional = true
|
|
|
|
[tool.poetry.group.test_integration]
|
|
optional = true
|
|
|
|
[tool.poetry.group.test.dependencies]
|
|
pytest = "^7.3.0"
|
|
freezegun = "^1.2.2"
|
|
pytest-mock = "^3.10.0"
|
|
syrupy = "^4.0.2"
|
|
pytest-watcher = "^0.3.4"
|
|
pytest-asyncio = "^0.21.1"
|
|
pytest-cov = "^4.1.0"
|
|
pytest-socket = "^0.6.0"
|
|
[[tool.poetry.group.test.dependencies.numpy]]
|
|
version = "^1"
|
|
python = "<3.12"
|
|
|
|
[[tool.poetry.group.test.dependencies.numpy]]
|
|
version = "^1.26.0"
|
|
python = ">=3.12"
|
|
|
|
[tool.poetry.group.codespell.dependencies]
|
|
codespell = "^2.2.0"
|
|
|
|
[tool.poetry.group.lint.dependencies]
|
|
ruff = "^0.5"
|
|
|
|
[tool.poetry.group.test_integration.dependencies]
|
|
httpx = "^0.27.0"
|
|
pillow = "^10.3.0"
|
|
[[tool.poetry.group.test_integration.dependencies.numpy]]
|
|
version = "^1"
|
|
python = "<3.12"
|
|
|
|
[[tool.poetry.group.test_integration.dependencies.numpy]]
|
|
version = "^1.26.0"
|
|
python = ">=3.12"
|
|
|
|
[tool.poetry.group.typing.dependencies]
|
|
mypy = "^1.10"
|
|
types-tqdm = "^4.66.0.5"
|
|
|
|
[tool.poetry.group.test.dependencies.langchain-core]
|
|
path = "../../core"
|
|
develop = true
|
|
|
|
[tool.poetry.group.test.dependencies.langchain-tests]
|
|
path = "../../standard-tests"
|
|
develop = true
|
|
|
|
[tool.poetry.group.dev.dependencies.langchain-core]
|
|
path = "../../core"
|
|
develop = true
|
|
|
|
[tool.poetry.group.typing.dependencies.langchain-core]
|
|
path = "../../core"
|
|
develop = true
|