Compare commits

..

405 Commits

Author SHA1 Message Date
ccurme
092697de60 infra: temporarily drop OpenAI from core release test matrix (#31318)
As part of core releases we run tests on the last released version of
some packages (including langchain-openai) using the new version of
langchain-core. We run langchain-openai's test suite as it was when it
was last released.

OpenAI has since updated their API— relaxing constraints on what schemas
are supported when `strict=True`— causing these tests to break. They
have since been fixed. But the old tests will continue to fail.

Will revert this change after we release OpenAI today.
2025-05-22 16:07:45 +00:00
ccurme
71c074d28f core: release 0.3.61 (#31317) 2025-05-22 11:54:28 -04:00
ccurme
053a1246da openai[patch]: support built-in code interpreter and remote MCP tools (#31304) 2025-05-22 11:47:57 -04:00
ccurme
1b5ffe4107 openai[patch]: run _tokenize in background thread in async embedding invocations (#31312) 2025-05-22 10:27:33 -04:00
Ishan Goswami
f16456139b exa docs and python package update (#31307)
Added support for new Exa API features. Updated Exa docs and python
package (langchain-exa).

Description

Added support for new Exa API features in the langchain-exa package:
- Added max_characters option for text content
- Added support for summary and custom summary prompts
- Added livecrawl option with "always", "fallback", "never" settings
- Added "auto" option for search type
- Updated documentation and tests

Dependencies
- No new dependencies required. Using existing features from exa-py.

twitter: @theishangoswami

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-05-21 21:33:30 -04:00
Mason Daugherty
cf1fa27e27 docs: correct groq description typo (#31308)
**Description:** a space was missing between the words "Groq" and
"developed" and has been added
2025-05-21 21:23:37 -04:00
ccurme
beacedd6b3 openai[patch]: update tests for strict schemas (#31306)
Following recent [changes](https://platform.openai.com/docs/changelog).
2025-05-21 22:06:17 +00:00
Vikram Saraph
53d6286539 Fix link to deprecation alternative for ConversationChain in docs (#31299)
**Description:** ConversationChain has been deprecated, and the
documentation says to use RunnableWithMessageHistory in its place, but
the link at the top of the page to RunnableWithMessageHistory is broken
(it's rendering as "html()"). See here at the top of the page:
https://python.langchain.com/api_reference/langchain/chains/langchain.chains.conversation.base.ConversationChain.html.
This PR fixes the link.
**Issue**: N/A
**Dependencies**: N/A
**Twitter handle:**: If you're on Bluesky, I'm @vikramsaraph.com
2025-05-21 09:31:06 -04:00
Ako
7b45d46210 ci: fix typo in doc-string (#31284)
Fix typo

---------

Co-authored-by: Eugene Yurtsev <eugene@langchain.dev>
2025-05-20 20:52:18 +00:00
Shaya Ulman
580fc7d464 docs: fix broken link (#31294)
As stated
[here](https://github.com/langchain-ai/langchain/blob/master/libs/community/README.md)
this package has moved, hence the broken link
2025-05-20 16:49:50 -04:00
Mert Arcan
6993bc9ad1 typo fix (#31295)
typo fix
%pip install -upgrade langchain-google
to:
%pip install --upgrade langchain-google
2025-05-20 16:49:21 -04:00
ccurme
dcb5aba999 openai[patch]: reduce tested constraints on strict schema adherence for Responses API (#31290)
Scheduled testing started failing today because the Responses API
stopped raising `BadRequestError` for a schema that was previously
invalid when `strict=True`.

Although docs still say that [some type-specific keywords are not yet
supported](https://platform.openai.com/docs/guides/structured-outputs#some-type-specific-keywords-are-not-yet-supported)
(including `minimum` and `maximum` for numbers), the below appears to
run and correctly respect the constraints:
```python
import json
import openai

maximums = list(range(1, 11))
arg_values = []
for maximum in maximums:

    tool = {
        "type": "function",
        "name": "magic_function",
        "description": "Applies a magic function to an input.",
        "parameters": {
            "properties": {
                "input": {"maximum": maximum, "minimum": 0, "type": "integer"}
            },
            "required": ["input"],
            "type": "object",
            "additionalProperties": False
        },
        "strict": True
    }
    
    client = openai.OpenAI()
    
    response = client.responses.create(
        model="gpt-4.1",
        input=[{"role": "user", "content": "What is the value of magic_function(3)? Use the tool."}],
        tools=[tool],
    )
    function_call = next(item for item in response.output if item.type == "function_call")
    args = json.loads(function_call.arguments)
    arg_values.append(args["input"])


print(maximums)
print(arg_values)

# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# [1, 2, 3, 3, 3, 3, 3, 3, 3, 3]
```
Until yesterday this raised BadRequestError.

The same is not true of Chat Completions, which appears to still raise
BadRequestError
```python
tool = {
    "type": "function",
    "function": {
        "name": "magic_function",
        "description": "Applies a magic function to an input.",
        "parameters": {
            "properties": {
                "input": {"maximum": 5, "minimum": 0, "type": "integer"}
            },
            "required": ["input"],
            "type": "object",
            "additionalProperties": False
        },
        "strict": True
    }
}

response = client.chat.completions.create(
    model="gpt-4.1",
    messages=[{"role": "user", "content": "What is the value of magic_function(3)? Use the tool."}],
    tools=[tool],
)
response  # raises BadRequestError
```

Here we update tests accordingly.
2025-05-20 14:50:31 +00:00
Ahmad Elmalah
f29659728c Docs: Fixing a typo in retrievers concepts page (#31288)
The second 'is` is redundant, it makes the meaning confusing
2025-05-20 09:08:33 -04:00
Michael Li
916768e3c1 doc: replace initialize agent in steam.ipynb (#31283)
Thank you for contributing to LangChain!

- [x] **PR title**: "package: description"
- Where "package" is whichever of langchain, core, etc. is being
modified. Use "docs: ..." for purely docs changes, "infra: ..." for CI
changes.
  - Example: "core: add foobar LLM"


- [x] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [x] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [x] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
2025-05-19 19:21:35 -04:00
Himanshu Sharma
ff12555bdc docs: clarify hub.pull behavior with non-US LangSmith endpoints (#31270)
**Description**:

This PR updates the documentation to address a potential issue when
using `hub.pull(...)` with non-US LangSmith endpoints (e.g.,
`https://eu.api.smith.langchain.com`).

By default, the `hub.pull` function assumes the non US-based API URL.
When the `LANGSMITH_ENDPOINT` environment variable is set to a non-US
region, this can lead to `LangSmithNotFoundError 404 not found` errors
when pulling public assets from the LangChain Hub.

Issue: #31191

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-05-19 23:06:37 +00:00
Michael Li
0c6137ec2b docs: replace deprecated load_tools in google_jobs.ipynb (#31272)
Thank you for contributing to LangChain!

- [x] **PR title**: "package: description"
- Where "package" is whichever of langchain, core, etc. is being
modified. Use "docs: ..." for purely docs changes, "infra: ..." for CI
changes.
  - Example: "core: add foobar LLM"


- [x] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [x] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [x] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
2025-05-19 18:58:31 -04:00
ccurme
bf645c83f4 voyageai: remove from monorepo (#31281)
langchain-voyageai is now maintained at
https://github.com/voyage-ai/langchain-voyageai.
2025-05-19 16:33:38 +00:00
DarinVerheijke
49fbcec34f community: add Featherless.ai integration (#31250)
Update docs to add Featherless.ai Provider & Chat Model
- **Description:** Adding Featherless.ai as provider in teh
documentations giving access to over 4300+ open-source models
- **Twitter handle:** https://x.com/FeatherlessAI
2025-05-19 10:40:25 -04:00
ccurme
32fcc97a90 openai[patch]: compat with Bedrock Converse (#31280)
ChatBedrockConverse passes through reasoning content blocks in [Bedrock
Converse
format](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ContentBlock.html).

Similar to how we handle Anthropic thinking blocks, here we ensure these
are filtered out of OpenAI request payloads.

Resolves https://github.com/langchain-ai/langchain/issues/31279.
2025-05-19 10:35:26 -04:00
Xu Song
8b6fec89bc docs: Update flashrank-reranker.ipynb (#31274)
- **Description:** Fix import in doc, `FlashrankRerank` has been moved
to `langchain_community`
2025-05-19 10:11:15 -04:00
ccurme
ea1f9e2d5b docs: remove integration page with DSPy (#31278)
DSPy removed their LangChain integration in version 2.6.6.

Here we remove the page and add a redirect to the LangChain v0.2 docs
for posterity.

We add an admonition to the v0.2 docs in
https://github.com/langchain-ai/langchain/pull/31277.
2025-05-19 10:10:20 -04:00
Christophe Bornet
17c5a1621f core: Improve Runnable __or__ method typing annotations (#31273)
* It is possible to chain a `Runnable` with an `AsyncIterator` as seen
in `test_runnable.py`.
* Iterator and AsyncIterator Input/Output of Callables must be put
before `Callable[[Other], Any]` otherwise the pattern matching picks the
latter.
2025-05-19 09:32:31 -04:00
mathislindner
e1af509966 anthropic: emit informative error message if there are only system messages in a prompt (#30822)
**PR message**: Not sure if I put the check at the right spot, but I
thought throwing the error before the loop made sense to me.
**Description:** Checks if there are only system messages using
AnthropicChat model and throws an error if it's the case. Check Issue
for more details
**Issue:** #30764

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-05-16 20:43:59 +00:00
OysterMax
eb25d7472d core: support Union type args in strict mode of OpenAI function calling / structured output (#30971)
**Issue:**[
#309070](https://github.com/langchain-ai/langchain/issues/30970)

**Cause**
Arg type in python code
```
arg: Union[SubSchema1, SubSchema2]
``` 
is translated to `anyOf` in **json schema**
```
"anyOf" : [{sub schema 1 ...}, {sub schema 1 ...}]
```
The value of anyOf is a list sub schemas. 
The bug is caused since the sub schemas inside `anyOf` list is not taken
care of.
The location where the issue happens is `convert_to_openai_function`
function -> `_recursive_set_additional_properties_false` function, that
recursively adds `"additionalProperties": false` to json schema which is
[required by OpenAI's strict function
calling](https://platform.openai.com/docs/guides/structured-outputs?api-mode=responses#additionalproperties-false-must-always-be-set-in-objects)

**Solution:**
This PR fixes this issue by iterating each sub schema inside `anyOf`
list.
A unit test is added.

**Twitter handle:** shengboma 


If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.

---------

Co-authored-by: ccurme <chester.curme@gmail.com>
2025-05-16 16:20:32 -04:00
Christophe Bornet
c982573f1e core: Add ruff rules A (builtins shadowing) (#29312)
See https://docs.astral.sh/ruff/rules/#flake8-builtins-a
* Renamed vars where possible
* Added `noqa` where backward compatibility was needed
* Added `@override` when applicable
2025-05-16 15:19:37 -04:00
Shkarupa Alex
671e4fd114 langchain[patch]: Allow async indexing code to work for vectorstores that only defined sync delete (#30869)
`aindex` function should check not only `adelete` method, but `delete`
method too

**PR title**: "core: fix async indexing issue with adelete/delete
checking"
**PR message**: Currently `langchain.indexes.aindex` checks if vector
store has overrided adelete method. But due to `adelete` default
implementation store can have just `delete` overrided to make `adelete`
working.

---------

Co-authored-by: Eugene Yurtsev <eyurtsev@gmail.com>
2025-05-16 15:10:25 -04:00
Shashank Reddy Boosi
bd367ba10c docs: Update confluence code blocks with all the latest changes and update documentation (#31242)
Description: This document change concerns the document-loader
integration, specifically `Confluence`.

I am trying to use the ConfluenceLoader and came across deprecations
when I followed the instructions in the documentation. So I updated the
code blocks with the latest changes made to langchain, and also updated
the documentation for better readability

---------

Co-authored-by: ccurme <chester.curme@gmail.com>
2025-05-16 09:47:06 -04:00
Baitur Ulukbekov
1f43b6062e Fix link SQL: Agents to proper destination in sql_large_db.ipynb (#31255)
Thank you for contributing to LangChain!

- [ ] **PR title**: "package: description"
- Where "package" is whichever of langchain, core, etc. is being
modified. Use "docs: ..." for purely docs changes, "infra: ..." for CI
changes.
  - Example: "core: add foobar LLM"


- [ ] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [ ] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [ ] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-05-16 12:52:09 +00:00
Eugene Yurtsev
c178ad87b6 docs: remove docs that disable ssl verification (#31254)
Remove examples that disable ssl verification
2025-05-15 17:21:22 -04:00
mateencog
12b063eb67 Fix: Extend pyproject.toml check in create_api_rst.py to langchain/libs folder (#31128)
- **Description:** The file ```docs/api_reference/create_api_rst.py```
uses a pyproject.toml check to remove partners which don't have a valid
pyproject.toml. This PR extends that check to ```/langchain/libs/*```
sub-directories as well. Without this the ```make api_docs_build```
command fails (see error).
- **Issue:** #31109
- **Dependencies:** none
- **Error Traceback:** 
uv run --no-group test python docs/api_reference/create_api_rst.py
Starting to build API reference files.
Building package: community
pyproject.toml not found in /langchain/libs/community.
You are either attempting to build a directory which is not a package or
the package is missing a pyproject.toml file which should be
added.Aborting the build.
make: *** [Makefile:35: api_docs_build] Error 1
2025-05-15 16:53:45 -04:00
ccurme
a401d7e52a ollama: release 0.3.3 (#31253) 2025-05-15 16:24:04 -04:00
Alexey Bondarenko
9efafe3337 ollama: Add separate kwargs parameter for async client (#31209)
**Description**:

Add a `async_client_kwargs` field to ollama chat/llm/embeddings adapters
that is passed to async httpx client constructor.

**Motivation:**

In my use-case:
- chat/embedding model adapters may be created frequently, sometimes to
be called just once or to never be called at all
- they may be used in bots sunc and async mode (not known at the moment
they are created)

So, I want to keep a static transport instance maintaining connection
pool, so model adapters can be created and destroyed freely. But that
doesn't work when both sync and async functions are in use as I can only
pass one transport instance for both sync and async client, while
transport types must be different for them. So I can't make both sync
and async calls use shared transport with current model adapter
interfaces.

In this PR I add a separate `async_client_kwargs` that gets passed to
async client constructor, so it will be possible to pass a separate
transport instance. For sake of backwards compatibility, it is merged
with `client_kwargs`, so nothing changes when it is not set.

I am unable to run linter right now, but the changes look ok.
2025-05-15 16:10:10 -04:00
dependabot[bot]
03adca6c44 build(deps): bump Ana06/get-changed-files from 2.2.0 to 2.3.0 (#31236)
Bumps
[Ana06/get-changed-files](https://github.com/ana06/get-changed-files)
from 2.2.0 to 2.3.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/ana06/get-changed-files/releases">Ana06/get-changed-files's
releases</a>.</em></p>
<blockquote>
<h2>v2.3.0</h2>
<p>This project is a fork of <a
href="https://github.com/jitterbit/get-changed-files">jitterbit/get-changed-files</a>,
which:</p>
<ul>
<li>Supports <code>pull_request_target</code></li>
<li>Allows to filter files using regular expressions</li>
<li>Removes the ahead check</li>
<li>Considers renamed modified files as modified</li>
<li>Adds <code>added_modified_renamed</code> that includes renamed
non-modified files and all files in <code>added_modified</code></li>
<li>Uses Node 20</li>
</ul>
<h2>Changes</h2>
<ul>
<li>Update to Node 20</li>
<li>Update dependencies</li>
</ul>
<h2>Raw diff</h2>
<p><a
href="https://github.com/Ana06/get-changed-files/compare/v2.2.0...v2.3.0">https://github.com/Ana06/get-changed-files/compare/v2.2.0...v2.3.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="25f79e676e"><code>25f79e6</code></a>
Update version in package.json</li>
<li><a
href="6f5373eb01"><code>6f5373e</code></a>
Merge pull request <a
href="https://redirect.github.com/ana06/get-changed-files/issues/42">#42</a>
from Ana06/release2-3</li>
<li><a
href="64dffb46a4"><code>64dffb4</code></a>
Prepare 2.3.0 release</li>
<li><a
href="791f7645b7"><code>791f764</code></a>
[CI] Update actions/checkout</li>
<li><a
href="5a4a136e91"><code>5a4a136</code></a>
[CI] Ensure GH action uses node version 20</li>
<li><a
href="38bdb2e498"><code>38bdb2e</code></a>
Update to Node 20</li>
<li><a
href="5558be5781"><code>5558be5</code></a>
Merge pull request <a
href="https://redirect.github.com/ana06/get-changed-files/issues/30">#30</a>
from Ana06/dependabot/npm_and_yarn/decode-uri-componen...</li>
<li><a
href="6a376fdbb3"><code>6a376fd</code></a>
Merge pull request <a
href="https://redirect.github.com/ana06/get-changed-files/issues/31">#31</a>
from Ana06/dependabot/npm_and_yarn/qs-6.5.3</li>
<li><a
href="ace6e7bcbb"><code>ace6e7b</code></a>
Merge pull request <a
href="https://redirect.github.com/ana06/get-changed-files/issues/32">#32</a>
from brtrick/main</li>
<li><a
href="a102fae9bf"><code>a102fae</code></a>
Merge pull request <a
href="https://redirect.github.com/ana06/get-changed-files/issues/33">#33</a>
from Ana06/dependabot/npm_and_yarn/json5-2.2.3</li>
<li>Additional commits viewable in <a
href="https://github.com/ana06/get-changed-files/compare/v2.2.0...v2.3.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=Ana06/get-changed-files&package-manager=github_actions&previous-version=2.2.0&new-version=2.3.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-15 16:08:16 -04:00
ccurme
6bbc12b7f7 chroma: release 0.2.4 (#31252) 2025-05-15 15:58:29 -04:00
Jai Radhakrishnan
aa4890c136 partners: update deps for langchain-chroma (#31251)
Updates dependencies to Chroma to integrate the major release of Chroma
with improved performance, and to fix issues users have been seeing
using the latest chroma docker image with langchain-chroma

https://github.com/langchain-ai/langchain/issues/31047#issuecomment-2850790841
Updates chromadb dependency to >=1.0.9

This also removes the dependency of chroma-hnswlib, meaning it can run
against python 3.13 runners for tests as well.

Tested this by pulling the latest Chroma docker image, running
langchain-chroma using client mode
```
httpClient = chromadb.HttpClient(host="localhost", port=8000)

vector_store = Chroma(
    client=httpClient,
    collection_name="test",
    embedding_function=embeddings,
)
```
2025-05-15 15:55:15 -04:00
Christophe Bornet
a8f2ddee31 core: Add ruff rules RUF (#29353)
See https://docs.astral.sh/ruff/rules/#ruff-specific-rules-ruf
Mostly:
* [RUF022](https://docs.astral.sh/ruff/rules/unsorted-dunder-all/)
(unsorted `__all__`)
* [RUF100](https://docs.astral.sh/ruff/rules/unused-noqa/) (unused noqa)
*
[RUF021](https://docs.astral.sh/ruff/rules/parenthesize-chained-operators/)
(parenthesize-chained-operators)
*
[RUF015](https://docs.astral.sh/ruff/rules/unnecessary-iterable-allocation-for-first-element/)
(unnecessary-iterable-allocation-for-first-element)
*
[RUF005](https://docs.astral.sh/ruff/rules/collection-literal-concatenation/)
(collection-literal-concatenation)
* [RUF046](https://docs.astral.sh/ruff/rules/unnecessary-cast-to-int/)
(unnecessary-cast-to-int)

---------

Co-authored-by: Eugene Yurtsev <eyurtsev@gmail.com>
2025-05-15 15:43:57 -04:00
Christophe Bornet
6cd1aadf60 langchain: use mypy strict checking with exemptions (#31018)
* Use strict checking and exclude some rules as TODOs
* Fix imports not exposed in `__all__`

Co-authored-by: Eugene Yurtsev <eyurtsev@gmail.com>
2025-05-15 11:37:18 -04:00
Christophe Bornet
eab8484a80 text-splitters[patch]: fix some import-untyped errors (#31030) 2025-05-15 11:34:22 -04:00
ccurme
672339f3c6 core: release 0.3.60 (#31249) 2025-05-15 11:14:04 -04:00
renchao
6f2acbcf2e Update sql_large_db.ipynb (#31241)
"Alanis Morissette" spelling error

Thank you for contributing to LangChain!

- [ ] **PR title**: "package: description"
- Where "package" is whichever of langchain, core, etc. is being
modified. Use "docs: ..." for purely docs changes, "infra: ..." for CI
changes.
  - Example: "core: add foobar LLM"


- [ ] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [ ] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [ ] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
2025-05-15 11:07:51 -04:00
ccurme
8b145d5dc3 openai: release 0.3.17 (#31246) 2025-05-15 09:18:22 -04:00
dependabot[bot]
d4f77a8c8f build(deps): bump actions/setup-python from 3 to 5 (#31234)
Bumps [actions/setup-python](https://github.com/actions/setup-python)
from 3 to 5.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/setup-python/releases">actions/setup-python's
releases</a>.</em></p>
<blockquote>
<h2>v5.0.0</h2>
<h2>What's Changed</h2>
<p>In scope of this release, we update node version runtime from node16
to node20 (<a
href="https://redirect.github.com/actions/setup-python/pull/772">actions/setup-python#772</a>).
Besides, we update dependencies to the latest versions.</p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-python/compare/v4.8.0...v5.0.0">https://github.com/actions/setup-python/compare/v4.8.0...v5.0.0</a></p>
<h2>v4.9.1</h2>
<h2>What's Changed</h2>
<ul>
<li>Add workflow file for publishing releases to immutable action
package by <a
href="https://github.com/aparnajyothi-y"><code>@​aparnajyothi-y</code></a>
in <a
href="https://redirect.github.com/actions/setup-python/pull/1084">actions/setup-python#1084</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-python/compare/v4...v4.9.1">https://github.com/actions/setup-python/compare/v4...v4.9.1</a></p>
<h2>v4.9.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Upgrade <code>actions/cache</code> to 4.0.3 by <a
href="https://github.com/priya-kinthali"><code>@​priya-kinthali</code></a>
in <a
href="https://redirect.github.com/actions/setup-python/pull/1073">actions/setup-python#1073</a>
In scope of this release we updated actions/cache package to ensure
continued support and compatibility, as older versions of the package
are now deprecated. For more information please refer to the <a
href="https://github.com/actions/toolkit/discussions/1890">toolkit/cache</a>.</li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-python/compare/v4.8.0...v4.9.0">https://github.com/actions/setup-python/compare/v4.8.0...v4.9.0</a></p>
<h2>v4.8.0</h2>
<h2>What's Changed</h2>
<p>In scope of this release we added support for GraalPy (<a
href="https://redirect.github.com/actions/setup-python/pull/694">actions/setup-python#694</a>).
You can use this snippet to set up GraalPy:</p>
<pre lang="yaml"><code>steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v4 
  with:
    python-version: 'graalpy-22.3' 
- run: python my_script.py
</code></pre>
<p>Besides, the release contains such changes as:</p>
<ul>
<li>Trim python version when reading from file by <a
href="https://github.com/FerranPares"><code>@​FerranPares</code></a> in
<a
href="https://redirect.github.com/actions/setup-python/pull/628">actions/setup-python#628</a></li>
<li>Use non-deprecated versions in examples by <a
href="https://github.com/jeffwidman"><code>@​jeffwidman</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/724">actions/setup-python#724</a></li>
<li>Change deprecation comment to past tense by <a
href="https://github.com/jeffwidman"><code>@​jeffwidman</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/723">actions/setup-python#723</a></li>
<li>Bump <code>@​babel/traverse</code> from 7.9.0 to 7.23.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/743">actions/setup-python#743</a></li>
<li>advanced-usage.md: Encourage the use actions/checkout@v4 by <a
href="https://github.com/cclauss"><code>@​cclauss</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/729">actions/setup-python#729</a></li>
<li>Examples now use checkout@v4 by <a
href="https://github.com/simonw"><code>@​simonw</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/738">actions/setup-python#738</a></li>
<li>Update actions/checkout to v4 by <a
href="https://github.com/dmitry-shibanov"><code>@​dmitry-shibanov</code></a>
in <a
href="https://redirect.github.com/actions/setup-python/pull/761">actions/setup-python#761</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/FerranPares"><code>@​FerranPares</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-python/pull/628">actions/setup-python#628</a></li>
<li><a href="https://github.com/timfel"><code>@​timfel</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-python/pull/694">actions/setup-python#694</a></li>
<li><a
href="https://github.com/jeffwidman"><code>@​jeffwidman</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-python/pull/724">actions/setup-python#724</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-python/compare/v4...v4.8.0">https://github.com/actions/setup-python/compare/v4...v4.8.0</a></p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="a26af69be9"><code>a26af69</code></a>
Bump ts-jest from 29.1.2 to 29.3.2 (<a
href="https://redirect.github.com/actions/setup-python/issues/1081">#1081</a>)</li>
<li><a
href="30eafe9548"><code>30eafe9</code></a>
Bump prettier from 2.8.8 to 3.5.3 (<a
href="https://redirect.github.com/actions/setup-python/issues/1046">#1046</a>)</li>
<li><a
href="5d95bc16d4"><code>5d95bc1</code></a>
Bump semver and <code>@​types/semver</code> (<a
href="https://redirect.github.com/actions/setup-python/issues/1091">#1091</a>)</li>
<li><a
href="6ed2c67c8a"><code>6ed2c67</code></a>
Fix for Candidate Not Iterable Error (<a
href="https://redirect.github.com/actions/setup-python/issues/1082">#1082</a>)</li>
<li><a
href="e348410e00"><code>e348410</code></a>
Remove Ubuntu 20.04 from workflows due to deprecation from 2025-04-15
(<a
href="https://redirect.github.com/actions/setup-python/issues/1065">#1065</a>)</li>
<li><a
href="8d9ed9ac5c"><code>8d9ed9a</code></a>
Add e2e Testing for free threaded and Bump <code>@​action/cache</code>
from 4.0.0 to 4.0.3 ...</li>
<li><a
href="19e4675e06"><code>19e4675</code></a>
Add support for .tool-versions file in setup-python (<a
href="https://redirect.github.com/actions/setup-python/issues/1043">#1043</a>)</li>
<li><a
href="6fd11e170a"><code>6fd11e1</code></a>
Bump <code>@​actions/glob</code> from 0.4.0 to 0.5.0 (<a
href="https://redirect.github.com/actions/setup-python/issues/1015">#1015</a>)</li>
<li><a
href="9e62be81b2"><code>9e62be8</code></a>
Support free threaded Python versions like '3.13t' (<a
href="https://redirect.github.com/actions/setup-python/issues/973">#973</a>)</li>
<li><a
href="6ca8e8598f"><code>6ca8e85</code></a>
Bump <code>@​vercel/ncc</code> from 0.38.1 to 0.38.3 (<a
href="https://redirect.github.com/actions/setup-python/issues/1016">#1016</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/actions/setup-python/compare/v3...v5">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-python&package-manager=github_actions&previous-version=3&new-version=5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-14 15:48:33 -04:00
dependabot[bot]
71b71768bf build(deps): bump actions/setup-node from 3 to 4 (#31237)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 3
to 4.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/setup-node/releases">actions/setup-node's
releases</a>.</em></p>
<blockquote>
<h2>v4.0.0</h2>
<h2>What's Changed</h2>
<p>In scope of this release we changed version of node runtime for
action from node16 to node20 and updated dependencies in <a
href="https://redirect.github.com/actions/setup-node/pull/866">actions/setup-node#866</a></p>
<p>Besides, release contains such changes as:</p>
<ul>
<li>Upgrade actions/checkout to v4 by <a
href="https://github.com/gmembre-zenika"><code>@​gmembre-zenika</code></a>
in <a
href="https://redirect.github.com/actions/setup-node/pull/868">actions/setup-node#868</a></li>
<li>Update actions/checkout for documentation and yaml by <a
href="https://github.com/dmitry-shibanov"><code>@​dmitry-shibanov</code></a>
in <a
href="https://redirect.github.com/actions/setup-node/pull/876">actions/setup-node#876</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/gmembre-zenika"><code>@​gmembre-zenika</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-node/pull/868">actions/setup-node#868</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-node/compare/v3...v4.0.0">https://github.com/actions/setup-node/compare/v3...v4.0.0</a></p>
<h2>v3.9.1</h2>
<h2>What's Changed</h2>
<ul>
<li>Add workflow file for publishing releases to immutable action
package by <a
href="https://github.com/aparnajyothi-y"><code>@​aparnajyothi-y</code></a>
in <a
href="https://redirect.github.com/actions/setup-node/pull/1281">actions/setup-node#1281</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-node/compare/v3...v3.9.1">https://github.com/actions/setup-node/compare/v3...v3.9.1</a></p>
<h2>v3.9.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Upgrade <code>@​actions/cache</code> to 4.0.3 by <a
href="https://github.com/gowridurgad"><code>@​gowridurgad</code></a> in
<a
href="https://redirect.github.com/actions/setup-node/pull/1270">actions/setup-node#1270</a>
In scope of this release we updated actions/cache package to ensure
continued support and compatibility, as older versions of the package
are now deprecated. For more information please refer to the <a
href="https://github.com/actions/toolkit/discussions/1890">toolkit/cache</a>.</li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-node/compare/v3...v3.9.0">https://github.com/actions/setup-node/compare/v3...v3.9.0</a></p>
<h2>v3.8.2</h2>
<h2>What's Changed</h2>
<ul>
<li>Update semver by <a
href="https://github.com/dmitry-shibanov"><code>@​dmitry-shibanov</code></a>
in <a
href="https://redirect.github.com/actions/setup-node/pull/861">actions/setup-node#861</a></li>
<li>Update temp directory creation by <a
href="https://github.com/nikolai-laevskii"><code>@​nikolai-laevskii</code></a>
in <a
href="https://redirect.github.com/actions/setup-node/pull/859">actions/setup-node#859</a></li>
<li>Bump <code>@​babel/traverse</code> from 7.15.4 to 7.23.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/setup-node/pull/870">actions/setup-node#870</a></li>
<li>Add notice about binaries not being updated yet by <a
href="https://github.com/nikolai-laevskii"><code>@​nikolai-laevskii</code></a>
in <a
href="https://redirect.github.com/actions/setup-node/pull/872">actions/setup-node#872</a></li>
<li>Update toolkit cache and core by <a
href="https://github.com/dmitry-shibanov"><code>@​dmitry-shibanov</code></a>
and <a
href="https://github.com/seongwon-privatenote"><code>@​seongwon-privatenote</code></a>
in <a
href="https://redirect.github.com/actions/setup-node/pull/875">actions/setup-node#875</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-node/compare/v3...v3.8.2">https://github.com/actions/setup-node/compare/v3...v3.8.2</a></p>
<h2>v3.8.1</h2>
<h2>What's Changed</h2>
<p>In scope of this release, the filter was removed within the
cache-save step by <a
href="https://github.com/dmitry-shibanov"><code>@​dmitry-shibanov</code></a>
in <a
href="https://redirect.github.com/actions/setup-node/pull/831">actions/setup-node#831</a>.
It is filtered and checked in the toolkit/cache library.</p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-node/compare/v3...v3.8.1">https://github.com/actions/setup-node/compare/v3...v3.8.1</a></p>
<h2>v3.8.0</h2>
<h2>What's Changed</h2>
<h3>Bug fixes:</h3>
<ul>
<li>Add check for existing paths by <a
href="https://github.com/dmitry-shibanov"><code>@​dmitry-shibanov</code></a>
in <a
href="https://redirect.github.com/actions/setup-node/pull/803">actions/setup-node#803</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="49933ea528"><code>49933ea</code></a>
Bump <code>@​action/cache</code> from 4.0.2 to 4.0.3 (<a
href="https://redirect.github.com/actions/setup-node/issues/1262">#1262</a>)</li>
<li><a
href="e3ce749e20"><code>e3ce749</code></a>
feat: support private mirrors (<a
href="https://redirect.github.com/actions/setup-node/issues/1240">#1240</a>)</li>
<li><a
href="40337cb8f7"><code>40337cb</code></a>
Add support for indented eslint output (<a
href="https://redirect.github.com/actions/setup-node/issues/1245">#1245</a>)</li>
<li><a
href="1ccdddc9b8"><code>1ccdddc</code></a>
Make eslint-compact matcher compatible with Stylelint (<a
href="https://redirect.github.com/actions/setup-node/issues/98">#98</a>)</li>
<li><a
href="cdca7365b2"><code>cdca736</code></a>
Bump <code>@​actions/tool-cache</code> from 2.0.1 to 2.0.2 (<a
href="https://redirect.github.com/actions/setup-node/issues/1220">#1220</a>)</li>
<li><a
href="22c0e7494f"><code>22c0e74</code></a>
Bump <code>@​vercel/ncc</code> from 0.38.1 to 0.38.3 (<a
href="https://redirect.github.com/actions/setup-node/issues/1203">#1203</a>)</li>
<li><a
href="a7c2d9473e"><code>a7c2d94</code></a>
actions/cache upgrade (<a
href="https://redirect.github.com/actions/setup-node/issues/1251">#1251</a>)</li>
<li><a
href="802632921f"><code>8026329</code></a>
Bump <code>@​actions/glob</code> from 0.4.0 to 0.5.0 (<a
href="https://redirect.github.com/actions/setup-node/issues/1200">#1200</a>)</li>
<li><a
href="1d0ff469b7"><code>1d0ff46</code></a>
Bump undici from 5.28.4 to 5.28.5 (<a
href="https://redirect.github.com/actions/setup-node/issues/1205">#1205</a>)</li>
<li><a
href="574f09a9fa"><code>574f09a</code></a>
Bump <code>@​types/jest</code> from 29.5.12 to 29.5.14 (<a
href="https://redirect.github.com/actions/setup-node/issues/1201">#1201</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/actions/setup-node/compare/v3...v4">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-node&package-manager=github_actions&previous-version=3&new-version=4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-14 14:43:18 -04:00
Christophe Bornet
921573e2b7 core: Add ruff rules SLF (#30666)
Add ruff rules SLF: https://docs.astral.sh/ruff/rules/#flake8-self-slf

---------

Co-authored-by: Eugene Yurtsev <eyurtsev@gmail.com>
2025-05-14 18:42:39 +00:00
dependabot[bot]
d8a7eda12e build(deps): bump astral-sh/setup-uv from 5 to 6 (#31235)
Bumps [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) from 5
to 6.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/astral-sh/setup-uv/releases">astral-sh/setup-uv's
releases</a>.</em></p>
<blockquote>
<h2>v6.0.0 🌈 activate-environment and working-directory</h2>
<h2>Changes</h2>
<p>This version contains some breaking changes which have been gathering
up for a while. Lets dive into them:</p>
<ul>
<li><a
href="https://github.com/astral-sh/setup-uv/blob/HEAD/#activate-environment">Activate
environment</a></li>
<li><a
href="https://github.com/astral-sh/setup-uv/blob/HEAD/#working-directory">Working
Directory</a></li>
<li><a
href="https://github.com/astral-sh/setup-uv/blob/HEAD/#default-cache-dependency-glob">Default
<code>cache-dependency-glob</code></a></li>
<li><a
href="https://github.com/astral-sh/setup-uv/blob/HEAD/#use-default-cache-dir-on-self-hosted-runners">Use
default cache dir on self hosted runners</a></li>
</ul>
<h3>Activate environment</h3>
<p>In previous versions using the input <code>python-version</code>
automatically activated a venv at the repository root.
This led to some unwanted side-effects, was sometimes unexpected and not
flexible enough.</p>
<p>The venv activation is now explicitly controlled with the new input
<code>activate-environment</code> (false by default):</p>
<pre lang="yaml"><code>- name: Install the latest version of uv and
activate the environment
  uses: astral-sh/setup-uv@v6
  with:
    activate-environment: true
- run: uv pip install pip
</code></pre>
<p>The venv gets created by the <a
href="https://docs.astral.sh/uv/pip/environments/"><code>uv
venv</code></a> command so the python version is controlled by the
<code>python-version</code> input or the files
<code>pyproject.toml</code>, <code>uv.toml</code>,
<code>.python-version</code> in the <code>working-directory</code>.</p>
<h3>Working Directory</h3>
<p>The new input <code>working-directory</code> controls where we look
for <code>pyproject.toml</code>, <code>uv.toml</code> and
<code>.python-version</code> files
which are used to determine the version of uv and python to install.</p>
<p>It can also be used to control where the venv gets created.</p>
<pre lang="yaml"><code>- name: Install uv based on the config files in
the working-directory
  uses: astral-sh/setup-uv@v6
  with:
    working-directory: my/subproject/dir
</code></pre>
<blockquote>
<p>[!CAUTION]</p>
<p>The inputs <code>pyproject-file</code> and <code>uv-file</code> have
been removed.</p>
</blockquote>
<h3>Default <code>cache-dependency-glob</code></h3>
<p><a href="https://github.com/ssbarnea"><code>@​ssbarnea</code></a>
found out that the default <code>cache-dependency-glob</code> was not
suitable for a lot of users.</p>
<p>The old default</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="6b9c6063ab"><code>6b9c606</code></a>
Bump dependencies (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/389">#389</a>)</li>
<li><a
href="ef6bcdff59"><code>ef6bcdf</code></a>
Fix default cache dependency glob (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/388">#388</a>)</li>
<li><a
href="9a311713f4"><code>9a31171</code></a>
chore: update known checksums for 0.6.17 (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/384">#384</a>)</li>
<li><a
href="c7f87aa956"><code>c7f87aa</code></a>
bump to v6 in README (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/382">#382</a>)</li>
<li><a
href="aadfaf08d6"><code>aadfaf0</code></a>
Change default cache-dependency-glob (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/352">#352</a>)</li>
<li><a
href="a0f9da6273"><code>a0f9da6</code></a>
No default UV_CACHE_DIR on selfhosted runners (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/380">#380</a>)</li>
<li><a
href="ec4c691628"><code>ec4c691</code></a>
new inputs activate-environment and working-directory (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/381">#381</a>)</li>
<li><a
href="aa1290542e"><code>aa12905</code></a>
chore: update known checksums for 0.6.16 (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/378">#378</a>)</li>
<li><a
href="fcaddda076"><code>fcaddda</code></a>
chore: update known checksums for 0.6.15 (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/377">#377</a>)</li>
<li><a
href="fb3a0a97fa"><code>fb3a0a9</code></a>
log info on venv activation (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/375">#375</a>)</li>
<li>See full diff in <a
href="https://github.com/astral-sh/setup-uv/compare/v5...v6">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=astral-sh/setup-uv&package-manager=github_actions&previous-version=5&new-version=6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-14 14:41:13 -04:00
Minh Nguyen
8af0dc5fd6 docs: Update langchain-anthropic version for tutorial with web search tool (#31240)
**Description:** This is a document change regarding integration with
package `langchain-anthropic` for newly released websearch tool ([Claude
doc](https://docs.anthropic.com/en/docs/build-with-claude/tool-use/web-search-tool)).

Issue 1: The sample in [Web Search
section](https://python.langchain.com/docs/integrations/chat/anthropic/#web-search)
did not run. You would get an error as below:
```
File "my_file.py", line 170, in call
    model_with_tools = model.bind_tools([websearch_tool])
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/langchain_anthropic/chat_models.py", line 1363, in bind_tools
    tool if _is_builtin_tool(tool) else convert_to_anthropic_tool(tool)
                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/langchain_anthropic/chat_models.py", line 1645, in convert_to_anthropic_tool
    input_schema=oai_formatted["parameters"],
                 ~~~~~~~~~~~~~^^^^^^^^^^^^^^
KeyError: 'parameters'
```
This is because websearch tool is only recently supported in
langchain-anthropic==0.3.13`, in [0.3.13
release](https://github.com/langchain-ai/langchain/releases?q=tag%3A%22langchain-anthropic%3D%3D0%22&expanded=true)
mentioning:
> anthropic[patch]: support web search
(https://github.com/langchain-ai/langchain/pull/31157)



Issue 2: The current doc has outdated package requirements for Websearch
tool: "This guide requires langchain-anthropic>=0.3.10".

Changes:
- Updated the required `langchain-anthropic` package version (0.3.10 ->
0.3.13).
- Added notes to user when using websearch sample.

I believe this will help avoid future confusion from readers.

**Issue:** N/A
**Dependencies:** N/A
**Twitter handle:** N/A
2025-05-14 14:19:32 -04:00
Sydney Runkle
7263011b24 perf[core]: remove unnecessary model validators (#31238)
* Remove unnecessary cast of id -> str (can do with a field setting)
* Remove unnecessary `set_text` model validator (can be done with a
computed field - though we had to make some changes to the `Generation`
class to make this possible

Before: ~2.4s

Blue circles represent time spent in custom validators :(

<img width="1337" alt="Screenshot 2025-05-14 at 10 10 12 AM"
src="https://github.com/user-attachments/assets/bb4f477f-4ee3-4870-ae93-14ca7f197d55"
/>


After: ~2.2s

<img width="1344" alt="Screenshot 2025-05-14 at 10 11 03 AM"
src="https://github.com/user-attachments/assets/99f97d80-49de-462f-856f-9e7e8662adbc"
/>

We still want to optimize the backwards compatible tool calls model
validator, though I think this might involve breaking changes, so wanted
to separate that into a different PR. This is circled in green.
2025-05-14 10:20:22 -07:00
Sydney Runkle
1523602196 packaging[core]: bump min pydantic version (#31239)
Bumping to a version that's a year old, so seems like a reasonable bump.
2025-05-14 10:01:24 -07:00
ccurme
367566b02f docs: fix notebook (#31233)
This is no longer runnable in CI.
2025-05-14 11:53:38 -04:00
Scott Brenner
29bfbc0ea6 infra: Dependabot configuration to update actions in workflow (#31026)
Noticed a few Actions used in the workflows here are outdated, proposing
a Dependabot configuration to update - reference
https://docs.github.com/en/actions/security-guides/using-githubs-security-features-to-secure-your-use-of-github-actions#keeping-the-actions-in-your-workflows-secure-and-up-to-date

Suggest enabling
https://docs.github.com/en/code-security/dependabot/working-with-dependabot/about-dependabot-on-github-actions-runners#enabling-or-disabling-for-your-repository
as well
2025-05-14 11:40:54 -04:00
Lope Ramos
b8ae2de169 langchain-core[patch]: Incremental record manager deletion should be batched (#31206)
**Description:** Before this commit, if one record is batched in more
than 32k rows for sqlite3 >= 3.32 or more than 999 rows for sqlite3 <
3.31, the `record_manager.delete_keys()` will fail, as we are creating a
query with too many variables.

This commit ensures that we are batching the delete operation leveraging
the `cleanup_batch_size` as it is already done for `full` cleanup.

Added unit tests for incremental mode as well on different deleting
batch size.
2025-05-14 11:38:21 -04:00
Sydney Runkle
263c215112 perf[core]: remove generations summation from hot loop (#31231)
1. Removes summation of `ChatGenerationChunk` from hot loops in `stream`
and `astream`
2. Removes run id gen from loop as well (minor impact)

Again, benchmarking on processing ~200k chunks (a poem about broccoli).

Before: ~4.2s

Blue circle is all the time spent adding up gen chunks

<img width="1345" alt="Screenshot 2025-05-14 at 7 48 33 AM"
src="https://github.com/user-attachments/assets/08a59d78-134d-4cd3-9d54-214de689df51"
/>

After: ~2.3s

Blue circle is remaining time spent on adding chunks, which can be
minimized in a future PR by optimizing the `merge_content`,
`merge_dicts`, and `merge_lists` utilities.

<img width="1353" alt="Screenshot 2025-05-14 at 7 50 08 AM"
src="https://github.com/user-attachments/assets/df6b3506-929e-4b6d-b198-7c4e992c6d34"
/>
2025-05-14 08:13:05 -07:00
Sydney Runkle
17b799860f perf[core]: remove costly async helpers for non-end event handlers (#31230)
1. Remove `shielded` decorator from non-end event handlers
2. Exit early with a `self.handlers` check instead of doing unnecessary
asyncio work

Using a benchmark that processes ~200k chunks (a poem about broccoli).

Before: ~15s

Circled in blue is unnecessary event handling time. This is addressed by
point 2 above

<img width="1347" alt="Screenshot 2025-05-14 at 7 37 53 AM"
src="https://github.com/user-attachments/assets/675e0fed-8f37-46c0-90b3-bef3cb9a1e86"
/>

After: ~4.2s

The total time is largely reduced by the removal of the `shielded`
decorator, which holds little significance for non-end handlers.

<img width="1348" alt="Screenshot 2025-05-14 at 7 37 22 AM"
src="https://github.com/user-attachments/assets/54be8a3e-5827-4136-a87b-54b0d40fe331"
/>
2025-05-14 07:42:56 -07:00
ccurme
0b8837a0cc openai: support runtime kwargs in embeddings (#31195) 2025-05-14 09:14:40 -04:00
Rares Vernica
4f41b54bcb docs:Fix Google GenAI Embedding params (#31188)
Extend Google parameters in the embeddings tab to include Google GenAI
(Gemini)

**Description:** Update embeddings tab to include example for Google
GenAI (Gemini)

**Issue:** N/A

**Dependencies:** N/A

**Twitter handle:** N/A


- [ ] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [ ] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-05-14 08:50:11 -04:00
MedlockM
ce0b1a9428 docs: update how_to docs to reflect new loaders interface and functionalities (#31219)
- **Description:** Updates two notebooks in the how_to documentation to
reflect new loader interfaces and functionalities.
- **Issue:** Some how_to notebooks were still using loader interfaces
from previous versions of LangChain and did not demonstrate the latest
loader functionalities (e.g., extracting images with `ImageBlobParser`,
extracting tables in specific output formats, parsing documents using
Vision-Language Models with `ZeroxPDFLoader`, and using
`CloudBlobLoader` in the `GenericLoader`, etc.).
- **Dependencies:** `py-zerox`
- **Twitter handle:** @MarcMedlock2

---------

Co-authored-by: Marc Medlock <marc.medlock@octo.com>
Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-05-13 17:59:01 -04:00
Michael Li
275e3b6710 docs: replace initialize_agent with create_react_agent in searchapi - replace deprecated load_tools (#31203)
Thank you for contributing to LangChain!

- [x] **PR title**: "package: description"
- Where "package" is whichever of langchain, core, etc. is being
modified. Use "docs: ..." for purely docs changes, "infra: ..." for CI
changes.
  - Example: "core: add foobar LLM"


- [x] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [x] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [x] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
2025-05-13 16:19:18 -04:00
Collier King
e53c10e546 docs: update Cloudflare examples for env references (#31205)
- [ ] **Docs Update**: "langchain-cloudflare: add env var references in
example notebooks"
- We've updated our Cloudflare integration example notebooks with
examples showing environmental variables to initialize the class
instances.
2025-05-13 16:18:27 -04:00
Michael Li
395f057243 docs: replace deprecated load_tools in google_finance.ipynb (#31220)
Thank you for contributing to LangChain!

- [x] **PR title**: "package: description"
- Where "package" is whichever of langchain, core, etc. is being
modified. Use "docs: ..." for purely docs changes, "infra: ..." for CI
changes.
  - Example: "core: add foobar LLM"


- [x] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [x] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [x] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
2025-05-13 14:56:11 -04:00
Michael Li
a9ee625f32 docs: replace deprecated load_tools in searx.mdx (#31218)
Thank you for contributing to LangChain!

- [x] **PR title**: "package: description"
- Where "package" is whichever of langchain, core, etc. is being
modified. Use "docs: ..." for purely docs changes, "infra: ..." for CI
changes.
  - Example: "core: add foobar LLM"


- [x] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [x] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [x] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
2025-05-13 14:53:44 -04:00
Michael Li
544648eb71 docs: replace deprecated load_tools in wolfram_alpha.mdx (#31217)
Thank you for contributing to LangChain!

- [x] **PR title**: "package: description"
- Where "package" is whichever of langchain, core, etc. is being
modified. Use "docs: ..." for purely docs changes, "infra: ..." for CI
changes.
  - Example: "core: add foobar LLM"


- [x] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [x] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [x] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
2025-05-13 14:53:29 -04:00
Michael Li
40be8d1d90 docs: replace deprecated load_tools in stackexchange.mdx (#31216)
Thank you for contributing to LangChain!

- [x] **PR title**: "package: description"
- Where "package" is whichever of langchain, core, etc. is being
modified. Use "docs: ..." for purely docs changes, "infra: ..." for CI
changes.
  - Example: "core: add foobar LLM"


- [x] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [x] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [x] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
2025-05-13 14:53:15 -04:00
Michael Li
f034bd7933 docs: replace deprecated load_tools in serpapi.mdx (#31215)
Thank you for contributing to LangChain!

- [x] **PR title**: "package: description"
- Where "package" is whichever of langchain, core, etc. is being
modified. Use "docs: ..." for purely docs changes, "infra: ..." for CI
changes.
  - Example: "core: add foobar LLM"


- [x] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [x] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [x] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
2025-05-13 14:53:01 -04:00
Michael Li
17a04dd598 docs: replace deprecated load_tools in google.mdx (#31214)
Thank you for contributing to LangChain!

- [x] **PR title**: "package: description"
- Where "package" is whichever of langchain, core, etc. is being
modified. Use "docs: ..." for purely docs changes, "infra: ..." for CI
changes.
  - Example: "core: add foobar LLM"


- [x] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [x] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [x] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
2025-05-13 14:52:46 -04:00
Michael Li
a44e707811 docs: replace deprecated load_tools in google_serper.mdx (#31213)
Thank you for contributing to LangChain!

- [x] **PR title**: "package: description"
- Where "package" is whichever of langchain, core, etc. is being
modified. Use "docs: ..." for purely docs changes, "infra: ..." for CI
changes.
  - Example: "core: add foobar LLM"


- [x] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [x] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [x] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
2025-05-13 14:52:30 -04:00
Michael Li
3520520a48 docs: replace deprecated load_tools in golden.mdx (#31212)
Thank you for contributing to LangChain!

- [x] **PR title**: "package: description"
- Where "package" is whichever of langchain, core, etc. is being
modified. Use "docs: ..." for purely docs changes, "infra: ..." for CI
changes.
  - Example: "core: add foobar LLM"


- [x] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [x] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [x] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
2025-05-13 14:52:15 -04:00
Michael Li
09d74504e3 docs: replace deprecated load_tools in dataforseo.mdx (#31211)
Thank you for contributing to LangChain!

- [x] **PR title**: "package: description"
- Where "package" is whichever of langchain, core, etc. is being
modified. Use "docs: ..." for purely docs changes, "infra: ..." for CI
changes.
  - Example: "core: add foobar LLM"


- [x] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [x] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [x] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
2025-05-13 14:51:40 -04:00
Shorthills AI
b2f0fbfea5 Update tools.mdx (#124) (#31207)
Thank you for contributing to LangChain!

- [ ] **PR title**: "package: description"
  
Changed toolkit=ExampleTookit to toolkit = ExampleToolkit(...) in
tools.mdx file

- [ ] **PR message**: ***Changed toolkit=ExampleTookit to toolkit =
ExampleToolkit(...) in tools.mdx file
- [ ] ***
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!

- [ ] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [ ] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.

Co-authored-by: SiddharthAnandShorthillsAI <siddharth.anand@shorthills.ai>
2025-05-13 11:01:54 -04:00
Michael Li
636a35fc2d docs: replace initialize_agent with create_react_agent in llmonitor.md (#31200)
Thank you for contributing to LangChain!

- [x] **PR title**: "package: description"
- Where "package" is whichever of langchain, core, etc. is being
modified. Use "docs: ..." for purely docs changes, "infra: ..." for CI
changes.
  - Example: "core: add foobar LLM"


- [x] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [x] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [x] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-05-12 22:05:11 +00:00
Michael Li
7b9feb60cc docs: replace initialize_agent with create_react_agent in openweathermap - replace deprecated load_tools (#31202)
…map.ipynb

Update openweathermap markdown file for tools

Thank you for contributing to LangChain!

- [x] **PR title**: "package: description"
- Where "package" is whichever of langchain, core, etc. is being
modified. Use "docs: ..." for purely docs changes, "infra: ..." for CI
changes.
  - Example: "core: add foobar LLM"


- [x] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [x] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [x] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
2025-05-12 15:12:02 -04:00
Michael Li
87add0809f docs: replace initialize_agent with create_react_agent in graphql.ipynb - replace deprecated load_tools (#31201)
Replace the deprecated load_tools

Thank you for contributing to LangChain!

- [x] **PR title**: "package: description"
- Where "package" is whichever of langchain, core, etc. is being
modified. Use "docs: ..." for purely docs changes, "infra: ..." for CI
changes.
  - Example: "core: add foobar LLM"


- [x] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [x] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [x] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
2025-05-12 15:11:39 -04:00
ccurme
868cfc4a8f openai: ignore function_calls if tool_calls are present (#31198)
Some providers include (legacy) function calls in `additional_kwargs` in
addition to tool calls. We currently unpack both function calls and tool
calls if present, but OpenAI will raise 400 in this case.

This can come up if providers are mixed in a tool-calling loop. Example:
```python
from langchain.chat_models import init_chat_model
from langchain_core.messages import HumanMessage
from langchain_core.tools import tool


@tool
def get_weather(location: str) -> str:
    """Get weather at a location."""
    return "It's sunny."



gemini = init_chat_model("google_genai:gemini-2.0-flash-001").bind_tools([get_weather])
openai = init_chat_model("openai:gpt-4.1-mini").bind_tools([get_weather])

input_message = HumanMessage("What's the weather in Boston?")
tool_call_message = gemini.invoke([input_message])

assert len(tool_call_message.tool_calls) == 1
tool_call = tool_call_message.tool_calls[0]
tool_message = get_weather.invoke(tool_call)

response = openai.invoke(  # currently raises 400 / BadRequestError
    [input_message, tool_call_message, tool_message]
)
```

Here we ignore function calls if tool calls are present.
2025-05-12 13:50:56 -04:00
Christophe Bornet
83d006190d core: Fix some private member accesses (#30912)
See https://github.com/langchain-ai/langchain/pull/30666

---------

Co-authored-by: Eugene Yurtsev <eugene@langchain.dev>
2025-05-12 17:42:26 +00:00
CtrlMj
1e56c66f86 core: Fix issue 31035 alias fields in base tool langchain core (#31112)
**Description**: The 'inspect' package in python skips over the aliases
set in the schema of a pydantic model. This is a workound to include the
aliases from the original input.
**issue**: #31035 


Cc: @ccurme @eyurtsev

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-05-12 11:04:13 -04:00
mateencog
92af7b0933 infra: Suppress error in make api_docs_clean if index.md is missing (#31129)
- **Description:** Added -f flag to rm when calling ```make
api_docs_clean``` to suppress error by make if index.md doesn't exist.
- **Dependencies:** none

On calling ```make api_docs_clean```

Behavior without this PR:
```
find ./docs/api_reference -name '*_api_reference.rst' -delete
git clean -fdX ./docs/api_reference
rm docs/api_reference/index.md
rm: cannot remove 'docs/api_reference/index.md': No such file or directory
make: *** [Makefile:51: api_docs_clean] Error 1
```
After this PR:

```
find ./docs/api_reference -name '*_api_reference.rst' -delete
git clean -fdX ./docs/api_reference
rm -f docs/api_reference/index.md
```
2025-05-11 17:26:49 -04:00
meirk-brd
e6147ce5d2 docs: Add Brightdata integration documentation (#31114)
Thank you for contributing to LangChain!

- [x] **PR title**: "package: description"
- Where "package" is whichever of langchain, core, etc. is being
modified. Use "docs: ..." for purely docs changes, "infra: ..." for CI
changes.
  - Example: "core: add foobar LLM"

- **Description:** Integrated the Bright Data package to enable
Langchain users to seamlessly incorporate Bright Data into their agents.
 - **Dependencies:** None
- **LinkedIn handle**:[Bright
Data](https://www.linkedin.com/company/bright-data)

- [x] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [x] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-05-11 16:07:21 +00:00
Michael Li
0d59fe9789 docs: replace initialize_agent with create_react_agent in agent_vectorstore.ipynb (#31183)
Thank you for contributing to LangChain!

- [x] **PR title**: "package: description"
- Where "package" is whichever of langchain, core, etc. is being
modified. Use "docs: ..." for purely docs changes, "infra: ..." for CI
changes.
  - Example: "core: add foobar LLM"


- [x] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [x] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [x] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-05-11 11:19:18 -04:00
ccurme
ff9183fd3c docs: add Gel integration (#31186)
Continued from https://github.com/langchain-ai/langchain/pull/31050

---------

Co-authored-by: deepbuzin <contactbuzin@gmail.com>
2025-05-11 10:17:18 -04:00
Michael Li
65fbbb0249 docs: replace initialize_agent with create_react_agent in searchapi.ipynb (#31184)
Thank you for contributing to LangChain!

- [ ] **PR title**: "package: description"
- Where "package" is whichever of langchain, core, etc. is being
modified. Use "docs: ..." for purely docs changes, "infra: ..." for CI
changes.
  - Example: "core: add foobar LLM"


- [ ] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [ ] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [ ] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
2025-05-11 09:42:25 -04:00
ccurme
77d3f04e0a docs: add Aerospike to package registry (#31185)
Missed as part of https://github.com/langchain-ai/langchain/pull/31156
2025-05-11 09:33:58 -04:00
dwelch-spike
0dee089ba7 docs: document the move of the aerospike vector store integration to langchain-aerospike vec-595 (#31156)
**Description:** The Aerospike Vector Search vector store integration
has moved out of langchain-community and to its own repository,
https://github.com/aerospike/langchain-aerospike. This PR updates
langchain documentation to reference it.


If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
2025-05-11 09:30:29 -04:00
Asif Mehmood
2ec74fea44 docs: update DoctranPropertyExtractor import path and fix typo (#31177)
**Description:**
Updated the import path for `DoctranPropertyExtractor` from
`langchain_community.document_loaders` to
`langchain_community.document_transformers` in multiple locations to
reflect recent package structure changes. Also corrected a minor typo in
the word "variable".

**Issue:**
N/A

**Dependencies:**
N/A

**LinkedIn handle:** For shout out if announced [Asif
Mehmood](https://www.linkedin.com/in/asifmehmood1997/).
2025-05-10 15:43:40 -04:00
Sumin Shin
683da2c9e9 text-splitters: Fix regex separator merge bug in CharacterTextSplitter (#31137)
**Description:**
Fix the merge logic in `CharacterTextSplitter.split_text` so that when
using a regex lookahead separator (`is_separator_regex=True`) with
`keep_separator=False`, the raw pattern is not re-inserted between
chunks.

**Issue:**
Fixes #31136 

**Dependencies:**
None

**Twitter handle:**
None

Since this is my first open-source PR, please feel free to point out any
mistakes, and I'll be eager to make corrections.
2025-05-10 15:42:03 -04:00
Michael Li
0ef4ac75b7 docs: remove duplicated and inaccurate mulvus doc (part of langchain-ai#31104) (#31154) 2025-05-10 19:38:11 +00:00
ccurme
23ec06b481 docs: showcase gemini-2.0-flash-preview-image-generation (#31176) 2025-05-09 11:17:15 -04:00
ccurme
e9e597be8e docs: update sort order in integrations table (#31171) 2025-05-08 20:44:21 +00:00
ccurme
0ba8697286 infra: add to vercel overrides (#31170)
Incompatibility between langchain-redis and langchain-ai21 `tenacity`
dep
2025-05-08 20:36:43 +00:00
ccurme
9aac8923a3 docs: add web search to anthropic docs (#31169) 2025-05-08 16:20:11 -04:00
Victor Hiairrassary
efc52e18e9 docs: fix typing in how_to/custom_tools.ipynb (#31164)
Fix typing in how_to/custom_tools.ipynb
2025-05-08 13:51:42 -04:00
ccurme
2d202f9762 anthropic[patch]: split test into two (#31167) 2025-05-08 09:23:36 -04:00
ccurme
d4555ac924 anthropic: release 0.3.13 (#31162) 2025-05-08 03:13:15 +00:00
ccurme
e34f9fd6f7 anthropic: update streaming usage metadata (#31158)
Anthropic updated how they report token counts during streaming today.
See changes to `MessageDeltaUsage` in [this
commit](2da00f26c5 (diff-1a396eba0cd9cd8952dcdb58049d3b13f6b7768ead1411888d66e28211f7bfc5)).

It's clean and simple to grab these fields from the final
`message_delta` event. However, some of them are typed as Optional, and
language
[here](e42451ab3f/src/anthropic/lib/streaming/_messages.py (L462))
suggests they may not always be present. So here we take the required
field from the `message_delta` event as we were doing previously, and
ignore the rest.
2025-05-07 23:09:56 -04:00
Tanushree
6c3901f9f9 Change banner (#31159)
Changing the banner to lead to careers page instead of interrupt

---------

Co-authored-by: Brace Sproul <braceasproul@gmail.com>
2025-05-07 18:07:10 -07:00
ccurme
682f338c17 anthropic[patch]: support web search (#31157) 2025-05-07 18:04:06 -04:00
ccurme
d7e016c5fc huggingface: release 0.2 (#31153) 2025-05-07 15:33:07 -04:00
ccurme
4b11cbeb47 huggingface[patch]: update lockfile (#31152) 2025-05-07 15:17:33 -04:00
ccurme
b5b90b5929 anthropic[patch]: be robust to null fields when translating usage metadata (#31151) 2025-05-07 18:30:21 +00:00
ccurme
f70b263ff3 core: release 0.3.59 (#31150) 2025-05-07 17:36:59 +00:00
ccurme
bb69d4c42e docs: specify js support for tavily (#31149) 2025-05-07 11:30:04 -04:00
zhurou603
1df3ee91e7 partners: (langchain-openai) total_tokens should not add 'Nonetype' t… (#31146)
partners: (langchain-openai) total_tokens should not add 'Nonetype' t…

# PR Description

## Description
Fixed an issue in `langchain-openai` where `total_tokens` was
incorrectly adding `None` to an integer, causing a TypeError. The fix
ensures proper type checking before adding token counts.

## Issue
Fixes the TypeError traceback shown in the image where `'NoneType'`
cannot be added to an integer.

## Dependencies
None

## Twitter handle
None

![image](https://github.com/user-attachments/assets/9683a795-a003-455a-ada9-fe277245e2b2)

Co-authored-by: qiulijie <qiulijie@yuaiweiwu.com>
2025-05-07 11:09:50 -04:00
Collier King
19041dcc95 docs: update langchain-cloudflare repo/path on packages.yaml (#31138)
**Library Repo Path Update **: "langchain-cloudflare"

We recently changed our `langchain-cloudflare` repo to allow for future
libraries.
Created a `libs` folder to hold `langchain-cloudflare` python package.


https://github.com/cloudflare/langchain-cloudflare/tree/main/libs/langchain-cloudflare
 
On `langchain`, updating `packages.yaml` to point to new
`libs/langchain-cloudflare` library folder.
2025-05-07 11:01:25 -04:00
Simonas Jakubonis
3cba22d8d7 docs: Pinecone Rerank example notebook (#31147)
Created an example notebook of how to use Pinecone Reranking service
cc @jamescalam
2025-05-07 11:00:42 -04:00
Jacob Lee
66d1ed6099 fix(core): Permit OpenAI style blocks to be passed into convert_to_openai_messages (#31140)
Should effectively be a noop, just shouldn't throw

CC @madams0013

---------

Co-authored-by: ccurme <chester.curme@gmail.com>
2025-05-07 10:57:37 -04:00
Tushar Nitave
a15034d8d1 docs: Fixed grammar for chat prompt composition (#31148)
This PR fixes a grammar issue in the sentence:

"A chat prompt is made up a of a list of messages..." → "A chat prompt
is made up of a list of messages. "
2025-05-07 10:51:34 -04:00
Michael Li
57c81dc3e3 docs: replace initialize_agent with create_react_agent in graphql.ipynb (#31133)
Thank you for contributing to LangChain!

- [x] **PR title**: "package: description"
- Where "package" is whichever of langchain, core, etc. is being
modified. Use "docs: ..." for purely docs changes, "infra: ..." for CI
changes.
  - Example: "core: add foobar LLM"


- [x] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [x] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [x] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-05-06 16:09:52 -04:00
pulvedu
52732a4d13 Update docs (#31135)
Updating tavily docs to indicate JS support

---------

Co-authored-by: pulvedu <dustin@tavily.com>
2025-05-06 16:09:39 -04:00
Simonas Jakubonis
5dde64583e docs: Updated pinecone.mdx in the integration providers (#31123)
Updated pinecone.mdx in the integration providers

Added short description and examples for SparseVector store and
SparseEmbeddings
2025-05-06 12:58:32 -04:00
Tomaz Bratanic
6b6750967a Docs: Change to async llm graph transformer (#31126) 2025-05-06 12:53:57 -04:00
ccurme
703fce7972 docs: document that Anthropic supports boolean parallel_tool_calls param in guide (#31122) 2025-05-05 20:25:27 -04:00
唐小鸭
50fa524a6d partners: (langchain-deepseek) fix deepseek-r1 always returns an empty reasoning_content when reasoning (#31065)
## Description
deepseek-r1 always returns an empty string `reasoning_content` to the
first chunk when thinking, and sets `reasoning_content` to None when
thinking is over, to determine when to switch to normal output.

Therefore, whether the reasoning_content field exists should be judged
as None.

## Demo
deepseek-r1 reasoning output: 

```
{'delta': {'content': None, 'function_call': None, 'refusal': None, 'role': 'assistant', 'tool_calls': None, 'reasoning_content': ''}, 'finish_reason': None, 'index': 0, 'logprobs': None}
{'delta': {'content': None, 'function_call': None, 'refusal': None, 'role': None, 'tool_calls': None, 'reasoning_content': '好的'}, 'finish_reason': None, 'index': 0, 'logprobs': None}
{'delta': {'content': None, 'function_call': None, 'refusal': None, 'role': None, 'tool_calls': None, 'reasoning_content': ','}, 'finish_reason': None, 'index': 0, 'logprobs': None}
{'delta': {'content': None, 'function_call': None, 'refusal': None, 'role': None, 'tool_calls': None, 'reasoning_content': '用户'}, 'finish_reason': None, 'index': 0, 'logprobs': None}
...
```

deepseek-r1 first normal output
```
...
{'delta': {'content': ' main', 'function_call': None, 'refusal': None, 'role': None, 'tool_calls': None, 'reasoning_content': None}, 'finish_reason': None, 'index': 0, 'logprobs': None}
{'delta': {'content': '\n\nimport', 'function_call': None, 'refusal': None, 'role': None, 'tool_calls': None, 'reasoning_content': None}, 'finish_reason': None, 'index': 0, 'logprobs': None}
...
```

---------

Co-authored-by: ccurme <chester.curme@gmail.com>
2025-05-05 22:31:58 +00:00
Michael Li
c0b69808a8 docs: replace initialize_agent with create_react_agent in openweathermap.ipynb (#31115)
Thank you for contributing to LangChain!

- [x] **PR title**: "package: description"
- Where "package" is whichever of langchain, core, etc. is being
modified. Use "docs: ..." for purely docs changes, "infra: ..." for CI
changes.
  - Example: "core: add foobar LLM"


- [x] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [x] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [x] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-05-05 18:08:09 -04:00
ccurme
fce8caca16 docs: minor fix in Pinecone (#31110) 2025-05-03 20:16:27 +00:00
Simonas Jakubonis
b8d0403671 docs: updated pinecone example notebook (#30993)
- **Description:** Update Pinecone notebook example
  - **Issue:** N\A
  - **Dependencies:** N\A
  - **Twitter handle:** N\A


- [ x ] **Add tests and docs**: Just notebook updates


If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
2025-05-03 16:02:21 -04:00
Michael Li
1204fb8010 docs: replace initialize_agent with create_react_agent in yahoo_finance_news.ipynb (#31108)
Thank you for contributing to LangChain!

- [x] **PR title**: "package: description"
- Where "package" is whichever of langchain, core, etc. is being
modified. Use "docs: ..." for purely docs changes, "infra: ..." for CI
changes.
  - Example: "core: add foobar LLM"


- [x] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [x] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [x] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-05-03 15:45:52 -04:00
Adeel Ehsan
1e00116ae7 docs: add docs for vectara tools (#30958)
Thank you for contributing to LangChain!

- [ ] **Docs for Vectara Tools**: "langchain-vectara"
2025-05-03 15:39:16 -04:00
Haris Colic
3e25a93136 Docs: replace initialize agent with create react agent for google tools (#31043)
- **Description:** The deprecated initialize_agent functionality is
replaced with create_react_agent for the google tools. Also noticed a
potential issue with the non-existent "google-drive-search" which was
used in the old `google-drive.ipynb`. If this should be a by default
available tool, an issue should be opened to modify
langchain-community's `load_tools` accordingly.
- **Issue:**  #29277
- **Dependencies:** No added dependencies
- **Twitter handle:** No Twitter account
2025-05-03 15:20:07 -04:00
Stefano Lottini
325f729a92 docs: improvements to Astra DB pages, especially modernize Vector DB example notebook (#30961)
This PR brings several improvements and modernizations to the
documentation around the Astra DB partner package.

- language alignment for better matching with the terms used in the
Astra DB docs
- updated several links to pages on said documentation
- for the `AstraDBVectorStore`, added mentions of the new features in
the overall `astra.mdx`
- for the vector store, rewritten/upgraded most of the usage example
notebook for a more straightforward experience able to highlight the
main usage patterns (including new ones such as the newly-introduced
"autodetect feature")

---------

Co-authored-by: ccurme <chester.curme@gmail.com>
2025-05-03 14:26:52 -04:00
Asif Mehmood
00ac49dd3e Replace deprecated .dict() with .model_dump() for Pydantic v2 compatibility (#31107)
**What does this PR do?**
This PR replaces deprecated usages of ```.dict()``` with
```.model_dump()``` to ensure compatibility with Pydantic v2 and prepare
for v3, addressing the deprecation warning
```PydanticDeprecatedSince20``` as required in [Issue#
31103](https://github.com/langchain-ai/langchain/issues/31103).

**Changes made:**
* Replaced ```.dict()``` with ```.model_dump()``` in multiple locations
* Ensured consistency with Pydantic v2 migration guidelines
* Verified compatibility across affected modules

**Notes**
* This is a code maintenance and compatibility update
* Tested locally with Pydantic v2.11
* No functional logic changes; only internal method replacements to
prevent deprecation issues
2025-05-03 13:40:54 -04:00
ccurme
6268ae8db0 langchain: release 0.3.25 (#31101) 2025-05-02 17:42:32 +00:00
ccurme
77ecf47f6d openai: release 0.3.16 (#31100) 2025-05-02 13:14:46 -04:00
ccurme
ff41f47e91 core: release 0.3.58 (#31099) 2025-05-02 12:46:32 -04:00
Eugene Yurtsev
4da525bc63 langchain[patch]: Remove beta decorator from init_embeddings (#31098)
Remove beta decorator from init_embeddings.
2025-05-02 11:52:50 -04:00
ccurme
94139ffcd3 openai[patch]: format system content blocks for Responses API (#31096)
```python
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_openai import ChatOpenAI


llm = ChatOpenAI(model="gpt-4.1", use_responses_api=True)

messages = [
    SystemMessage("test"),                                   # Works
    HumanMessage("test"),                                    # Works
    SystemMessage([{"type": "text", "text": "test"}]),       # Bug in this case
    HumanMessage([{"type": "text", "text": "test"}]),        # Works
    SystemMessage([{"type": "input_text", "text": "test"}])  # Works
]

llm._get_request_payload(messages)
```
2025-05-02 15:22:30 +00:00
ccurme
26ad239669 core, openai[patch]: prefer provider-assigned IDs when aggregating message chunks (#31080)
When aggregating AIMessageChunks in a stream, core prefers the leftmost
non-null ID. This is problematic because:
- Core assigns IDs when they are null to `f"run-{run_manager.run_id}"`
- The desired meaningful ID might not be available until midway through
the stream, as is the case for the OpenAI Responses API.

For the OpenAI Responses API, we assign message IDs to the top-level
`AIMessage.id`. This works in `.(a)invoke`, but during `.(a)stream` the
IDs get overwritten by the defaults assigned in langchain-core. These
IDs
[must](https://community.openai.com/t/how-to-solve-badrequesterror-400-item-rs-of-type-reasoning-was-provided-without-its-required-following-item-error-in-responses-api/1151686/9)
be available on the AIMessage object to support passing reasoning items
back to the API (e.g., if not using OpenAI's `previous_response_id`
feature). We could add them elsewhere, but seeing as we've already made
the decision to store them in `.id` during `.(a)invoke`, addressing the
issue in core lets us fix the problem with no interface changes.
2025-05-02 11:18:18 -04:00
ccurme
72f905a436 infra: fix notebook tests (#31097) 2025-05-02 14:33:11 +00:00
William FH
b5bf2d6218 0.3.57 (#31095) 2025-05-01 23:42:26 -07:00
William FH
167afa5102 Enable run mutation (#31090)
This lets you more easily modify a run in-flight
2025-05-01 17:00:51 -07:00
Simonas Jakubonis
0b79fc1733 docs: Pinecone Sparse vectorstore example (#31066)
Description: Pinecone SparseVectorStore example
cc @jamescalam

---------

Co-authored-by: James Briggs <35938317+jamescalam@users.noreply.github.com>
Co-authored-by: ccurme <chester.curme@gmail.com>
2025-05-01 18:08:10 -04:00
ccurme
c51eadd54f openai[patch]: propagate service_tier to response metadata (#31089) 2025-05-01 13:50:48 -04:00
ccurme
6110c3ffc5 openai[patch]: release 0.3.15 (#31087) 2025-05-01 09:22:30 -04:00
Ben Gladwell
da59eb7eb4 anthropic: Allow kwargs to pass through when counting tokens (#31082)
- **Description:** `ChatAnthropic.get_num_tokens_from_messages` does not
currently receive `kwargs` and pass those on to
`self._client.beta.messages.count_tokens`. This is a problem if you need
to pass specific options to `count_tokens`, such as the `thinking`
option. This PR fixes that.
- **Issue:** N/A
- **Dependencies:** None
- **Twitter handle:** @bengladwell

Co-authored-by: ccurme <chester.curme@gmail.com>
2025-04-30 17:56:22 -04:00
Really Him
918c950737 DOCS: partners/chroma: Fix documentation around chroma query filter syntax (#31058)
Thank you for contributing to LangChain!

- [x] **PR title**: "package: description"
- Where "package" is whichever of langchain, community, core, etc. is
being modified. Use "docs: ..." for purely docs changes, "infra: ..."
for CI changes.
  - Example: "community: add foobar LLM"

**Description**:
* Starting to put together some PR's to fix the typing around
`langchain-chroma` `filter` and `where_document` query filtering, as
mentioned:

https://github.com/langchain-ai/langchain/issues/30879
https://github.com/langchain-ai/langchain/issues/30507

The typing of `dict[str, str]` is on the one hand too restrictive (marks
valid filter expressions as ill-typed) and also too permissive (allows
illegal filter expressions). That's not what this PR addresses though.
This PR just removes from the documentation some examples of filters
that are illegal, and also syntactically incorrect: (a) dictionaries
with keys like `$contains` but the key is missing quotation marks; (b)
dictionaries with multiple entries - this is illegal in Chroma filter
syntax and will raise an exception. (`{"foo": "bar", "qux": "baz"}`).
Filter dictionaries in Chroma must have one and one key only. Again this
is just the documentation issue, which is the lowest hanging fruit. I
also think we need to update the types for `filter` and `where_document`
to be (at the very least `dict[str, Any]`), or, since we have access to
Chroma's types, they should be `Where` and `WhereDocument` types. This
has a wider blast radius though, so I'm starting small.

This PR does not fix the issues mentioned above, it's just starting to
get the ball rolling, and cleaning up the documentation.



- [x] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.
- If you are adding something to community, do not re-import it in
langchain.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.

---------

Co-authored-by: Really Him <hesereallyhim@proton.me>
2025-04-30 17:51:07 -04:00
Mateus Scheper
ed7cd3c5c4 docs: Fixing typo: "chocalate" -> "chocolate". (#31078)
Just fixing a typo that was making me anxious: "chocalate" ->
"chocolate".
2025-04-30 15:09:36 -04:00
yberber-sap
952a0b7b40 Docs: Fix SAP HANA Cloud docs - remove pip output, update vectorstore link, rename provider (#31077)
This PR includes the following documentation fixes for the SAP HANA
Cloud vector store integration:
- Removed stale output from the `%pip install` code cell.
- Replaced an unrelated vectorstore documentation link on the provider
overview page.
- Renamed the provider from "SAP HANA" to "SAP HANA Cloud"
2025-04-30 08:57:40 -04:00
Akshay Dongare
0b8e9868e6 docs: update LiteLLM integration docs for router migration to langchain-litellm (#31063)
# What's Changed?
- [x] 1. docs: **docs/docs/integrations/chat/litellm.ipynb** : Updated
with docs for litellm_router since it has been moved into the
[langchain-litellm](https://github.com/Akshay-Dongare/langchain-litellm)
package along with ChatLiteLLM

- [x] 2. docs: **docs/docs/integrations/chat/litellm_router.ipynb** :
Deleted to avoid redundancy

- [x] 3. docs: **docs/docs/integrations/providers/litellm.mdx** :
Updated to reflect inclusion of ChatLiteLLMRouter class

- [x] Lint and test: Done

# Issue:
- [x] Related to the issue
https://github.com/langchain-ai/langchain/issues/30368

# About me
- [x] 🔗 LinkedIn:
[akshay-dongare](https://www.linkedin.com/in/akshay-dongare/)
2025-04-29 17:48:11 -04:00
Lukas Scheucher
275ba2ec37 Add Compass Labs toolkits to langchain docs (#30794)
- **Description**: Adding documentation notebook for [compass-langchain
toolkit](https://pypi.org/project/langchain-compass/).
- **Issue**: N/a
- **Dependencies**: langchain-compass  
- **Twitter handle**: @labs_compass

---------

Co-authored-by: ccosnett <conor142857@icloud.com>
2025-04-29 17:42:43 -04:00
ccurme
bdb7c4a8b3 huggingface: fix embeddings return type (#31072)
Integration tests failing

cc @hanouticelina
2025-04-29 18:45:04 +00:00
célina
868f07f8f4 partners: (langchain-huggingface) Chat Models - Integrate Hugging Face Inference Providers and remove deprecated code (#30733)
Hi there, I'm Célina from 🤗,
This PR introduces support for Hugging Face's serverless Inference
Providers (documentation
[here](https://huggingface.co/docs/inference-providers/index)), allowing
users to specify different providers for chat completion and text
generation tasks.

This PR also removes the usage of `InferenceClient.post()` method in
`HuggingFaceEndpoint`, in favor of the task-specific `text_generation`
method. `InferenceClient.post()` is deprecated and will be removed in
`huggingface_hub v0.31.0`.

---
## Changes made
- bumped the minimum required version of the `huggingface-hub` package
to ensure compatibility with the latest API usage.
- added a `provider` field to `HuggingFaceEndpoint`, enabling users to
select the inference provider (e.g., 'cerebras', 'together',
'fireworks-ai'). Defaults to `hf-inference` (HF Inference API).
- replaced the deprecated `InferenceClient.post()` call in
`HuggingFaceEndpoint` with the task-specific `text_generation` method
for future-proofing, `post()` will be removed in huggingface-hub
v0.31.0.
- updated the `ChatHuggingFace` component:
    - added async and streaming support.
    - added support for tool calling.
- exposed underlying chat completion parameters for more granular
control.
- Added integration tests for `ChatHuggingFace` and updated the
corresponding unit tests.

  All changes are backward compatible.

---------

Co-authored-by: ccurme <chester.curme@gmail.com>
2025-04-29 09:53:14 -04:00
ccurme
3072e4610a community: move to separate repo (continued) (#31069)
Missed these after merging
2025-04-29 09:25:32 -04:00
ccurme
9ff5b5d282 community: move to separate repo (#31060)
langchain-community is moving to
https://github.com/langchain-ai/langchain-community
2025-04-29 09:22:04 -04:00
Sydney Runkle
7e926520d5 packaging: remove Python upper bound for langchain and co libs (#31025)
Follow up to https://github.com/langchain-ai/langsmith-sdk/pull/1696,
I've bumped the `langsmith` version where applicable in `uv.lock`.

Type checking problems here because deps have been updated in
`pyproject.toml` and `uv lock` hasn't been run - we should enforce that
in the future - goes with the other dependabot todos :).
2025-04-28 14:44:28 -04:00
Sydney Runkle
d614842d23 ci: temporarily run chroma on 3.12 for CI (#31056)
Waiting on a fix for https://github.com/chroma-core/chroma/issues/4382
2025-04-28 13:20:37 -04:00
Michael Li
ff1602f0fd docs: replace initialize_agent with create_react_agent in bash.ipynb (part of #29277) (#31042)
Thank you for contributing to LangChain!

- [x] **PR title**: "package: description"
- Where "package" is whichever of langchain, community, core, etc. is
being modified. Use "docs: ..." for purely docs changes, "infra: ..."
for CI changes.
  - Example: "community: add foobar LLM"


- [x] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [x] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [x] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.
- If you are adding something to community, do not re-import it in
langchain.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-04-28 13:07:22 -04:00
Christophe Bornet
aee7988a94 community: add mypy warn_unused_ignores rule (#30816) 2025-04-28 11:54:12 -04:00
Bae-ChangHyun
a2863f8757 community: add 'get_col_comments' option for retrieve database columns comments (#30646)
## Description
Added support for retrieving column comments in the SQL Database
utility. This feature allows users to see comments associated with
database columns when querying table information. Column comments
provide valuable metadata that helps LLMs better understand the
semantics and purpose of database columns.

A new optional parameter `get_col_comments` was added to the
`get_table_info` method, defaulting to `False` for backward
compatibility. When set to `True`, it retrieves and formats column
comments for each table.

Currently, this feature is supported on PostgreSQL, MySQL, and Oracle
databases.

## Implementation
You should create Table with column comments before.

```python
db = SQLDatabase.from_uri("YOUR_DB_URI")
print(db.get_table_info(get_col_comments=True)) 
```
## Result
```
CREATE TABLE test_table (
	name VARCHAR
        school VARCHAR)
/*
Column Comments: {'name': person name, 'school":school_name}
*/

/*
3 rows from test_table:
name
a
b
c
*/
```

## Benefits
1. Enhances LLM's understanding of database schema semantics
2. Preserves valuable domain knowledge embedded in database design
3. Improves accuracy of SQL query generation
4. Provides more context for data interpretation

Tests are available in
`langchain/libs/community/tests/test_sql_get_table_info.py`.

---------

Co-authored-by: chbae <chbae@gcsc.co.kr>
Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-04-28 15:19:46 +00:00
yberber-sap
3fb0a55122 Deprecate HanaDB, HanaTranslator and update example notebook to use new implementation (#30896)
- **Description:**  
This PR marks the `HanaDB` vector store (and related utilities) in
`langchain_community` as deprecated using the `@deprecated` annotation.
  - Set `since="0.1.0"` and `removal="1.0"`  
- Added a clear migration path and a link to the SAP-maintained
replacement in the
[`langchain_hana`](https://github.com/SAP/langchain-integration-for-sap-hana-cloud)
package.
Additionally, the example notebook has been updated to use the new
`HanaDB` class from `langchain_hana`, ensuring users follow the
recommended integration moving forward.

- **Issue:** None 

- **Dependencies:**  None

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-04-27 16:37:35 -04:00
湛露先生
5fb8fd863a langchain_openai: clean duplicate code for openai embedding. (#30872)
The `_chunk_size` has not changed by method `self._tokenize`, So i think
these is duplicate code.

Signed-off-by: zhanluxianshen <zhanluxianshen@163.com>
2025-04-27 15:07:41 -04:00
Philipp Schmid
79a537d308 Update Chat and Embedding guides (#31017)
Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-04-27 18:06:59 +00:00
ccurme
ba2518995d standard-tests: add condition for image tool message test (#31041)
Require support for [standard
format](https://python.langchain.com/docs/how_to/multimodal_inputs/).
2025-04-27 17:24:43 +00:00
ccurme
04a899ebe3 infra: support third-party integration packages in API ref build (#31021) 2025-04-25 16:02:27 -04:00
Stefano Lottini
a82d987f09 docs: Astra DB, replace leftover links to "community" legacy package + modernize doc loader signature (#30969)
This PR brings some much-needed updates to some of the Astra DB shorter
example notebooks,

- ensuring imports are from the partner package instead of the
(deprecated) community legacy package
- improving the wording in a few related places
- updating the constructor signature introduced with the latest partner
package's AstraDBLoader
- marking the community package counterpart of the LLM caches as
deprecated in the summary table at the end of the page.
2025-04-25 15:45:24 -04:00
ccurme
a60fd06784 docs: document OpenAI flex processing (#31023)
Following https://github.com/langchain-ai/langchain/pull/31005
2025-04-25 15:10:25 -04:00
ccurme
629b7a5a43 openai[patch]: add explicit attribute for service tier (#31005) 2025-04-25 18:38:23 +00:00
ccurme
ab871a7b39 docs: enable milvus in API ref build (#31016)
Reverts langchain-ai/langchain#30996

Should be fixed following
https://github.com/langchain-ai/langchain-milvus/pull/68
2025-04-25 12:48:10 +00:00
Georgi Stefanov
d30c56a8c1 langchain: return attachments in _get_response (#30853)
This is a PR to return the message attachments in _get_response, as when
files are generated these attachments are not returned thus generated
files cannot be retrieved

Fixes issue: https://github.com/langchain-ai/langchain/issues/30851
2025-04-24 21:39:11 -04:00
Abderrahmane Gourragui
09c1991e96 docs: update document examples (#31006)
## Description:

As I was following the docs I found a couple of small issues on the
docs.

this fixes some unused imports on the [extraction
page](https://python.langchain.com/docs/tutorials/extraction/#the-extractor)
and updates the examples on [classification
page](https://python.langchain.com/docs/tutorials/classification/#quickstart)
to be independent from the chat model.
2025-04-24 18:07:55 -04:00
ccurme
a7903280dd openai[patch]: delete redundant tests (#31004)
These are covered by standard tests.
2025-04-24 17:56:32 +00:00
Kyle Jeong
d0f0d1f966 [docs/community]: langchain docs + browserbaseloader fix (#30973)
Thank you for contributing to LangChain!

- [ ] **PR title**: "package: description"
- Where "package" is whichever of langchain, community, core, etc. is
being modified. Use "docs: ..." for purely docs changes, "infra: ..."
for CI changes.
  - Example: "community: add foobar LLM"

community: fix browserbase integration
docs: update docs

- [ ] **PR message**: ***Delete this entire checklist*** and replace
with
- **Description:** Updated BrowserbaseLoader to use the new python sdk.
    - **Issue:** update browserbase integration with langchain
    - **Dependencies:** n/a
    - **Twitter handle:** @kylejeong21

- [ ] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.

- [ ] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/
2025-04-24 13:38:49 -04:00
ccurme
403fae8eec core: release 0.3.56 (#31000) 2025-04-24 13:22:31 -04:00
Jacob Lee
d6b50ad3f6 docs: Update Google Analytics tag in docs (#31001) 2025-04-24 10:19:10 -07:00
ccurme
10a9c24dae openai: fix streaming reasoning without summaries (#30999)
Following https://github.com/langchain-ai/langchain/pull/30909: need to
retain "empty" reasoning output when streaming, e.g.,
```python
{'id': 'rs_...', 'summary': [], 'type': 'reasoning'}
```
Tested by existing integration tests, which are currently failing.
2025-04-24 16:01:45 +00:00
ccurme
8fc7a723b9 core: release 0.3.56rc1 (#30998) 2025-04-24 15:09:44 +00:00
ccurme
f4863f82e2 core[patch]: fix edge cases for _is_openai_data_block (#30997) 2025-04-24 10:48:52 -04:00
Philipp Schmid
ae4b6380d9 Documentation: Add Google Gemini dropdown (#30995)
This PR adds Google Gemini (via AI Studio and Gemini API). Feel free to
change the ordering, if needed.

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-04-24 10:00:16 -04:00
Philipp Schmid
ffbc64c72a Documentation: Improve structure of Google integrations page (#30992)
This PR restructures the main Google integrations documentation page
(`docs/docs/integrations/providers/google.mdx`) for better clarity and
updates content.

**Key changes:**

* **Separated Sections:** Divided integrations into distinct `Google
Generative AI (Gemini API & AI Studio)`, `Google Cloud`, and `Other
Google Products` sections.
* **Updated Generative AI:** Refreshed the introduction and the `Google
Generative AI` section with current information and quickstart examples
for the Gemini API via `langchain-google-genai`.
* **Reorganized Content:** Moved non-Cloud Platform specific
integrations (e.g., Drive, GMail, Search tools, ScaNN) to the `Other
Google Products` section.
* **Cleaned Up:** Minor improvements to descriptions and code snippets.

This aims to make it easier for users to find the relevant Google
integrations based on whether they are using the Gemini API directly or
Google Cloud services.

| Before                | After      |
|-----------------------|------------|
| ![Screenshot 2025-04-24 at 14 56
23](https://github.com/user-attachments/assets/ff967ec8-a833-4e8f-8015-61af8a4fac8b)
| ![Screenshot 2025-04-24 at 14 56
15](https://github.com/user-attachments/assets/179163f1-e805-484a-bbf6-99f05e117b36)
|

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-04-24 09:58:46 -04:00
Jacob Lee
6b0b317cb5 feat(core): Autogenerate filenames for when converting file content blocks to OpenAI format (#30984)
CC @ccurme

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-04-24 13:36:31 +00:00
ccurme
21962e2201 docs: temporarily disable milvus in API ref build (#30996) 2025-04-24 09:31:23 -04:00
Behrad Hemati
1eb0bdadfa community: add indexname to other functions in opensearch (#30987)
- [x] **PR title**: "community: add indexname to other functions in
opensearch"



- [x] **PR message**:
- **Description:** add ability to over-ride index-name if provided in
the kwargs of sub-functions. When used in WSGI application it's crucial
to be able to dynamically change parameters.


- [ ] **Add tests and docs**:


- [x] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/
2025-04-24 08:59:33 -04:00
Nicky Parseghian
7ecdac5240 community: Strip URLs from sitemap. (#30830)
Fixes #30829

- **Description:** Simply strips the loc value when building the
element.
    - **Issue:** Fixes #30829
2025-04-23 18:18:42 -04:00
ccurme
faef3e5d50 core, standard-tests: support PDF and audio input in Chat Completions format (#30979)
Chat models currently implement support for:
- images in OpenAI Chat Completions format
- other multimodal types (e.g., PDF and audio) in a cross-provider
[standard
format](https://python.langchain.com/docs/how_to/multimodal_inputs/)

Here we update core to extend support to PDF and audio input in Chat
Completions format. **If an OAI-format PDF or audio content block is
passed into any chat model, it will be transformed to the LangChain
standard format**. We assume that any chat model supporting OAI-format
PDF or audio has implemented support for the standard format.
2025-04-23 18:32:51 +00:00
Bagatur
d4fc734250 core[patch]: update dict prompt template (#30967)
Align with JS changes made in
https://github.com/langchain-ai/langchainjs/pull/8043
2025-04-23 10:04:50 -07:00
ccurme
4bc70766b5 core, openai: support standard multi-modal blocks in convert_to_openai_messages (#30968) 2025-04-23 11:20:44 -04:00
ccurme
e4877e5ef1 fireworks: release 0.3.0 (#30977) 2025-04-23 10:08:38 -04:00
Christophe Bornet
8c5ae108dd text-splitters: Set strict mypy rules (#30900)
* Add strict mypy rules
* Fix mypy violations
* Add error codes to all type ignores
* Add ruff rule PGH003
* Bump mypy version to 1.15
2025-04-22 20:41:24 -07:00
ccurme
eedda164c6 fireworks[minor]: remove default model and temperature (#30965)
`mixtral-8x-7b-instruct` was recently retired from Fireworks Serverless.

Here we remove the default model altogether, so that the model must be
explicitly specified on init:
```python
ChatFireworks(model="accounts/fireworks/models/llama-v3p1-70b-instruct")  # for example
```

We also set a null default for `temperature`, which previously defaulted
to 0.0. This parameter will no longer be included in request payloads
unless it is explicitly provided.
2025-04-22 15:58:58 -04:00
Grant
4be55f7c89 docs: fix typo at 175 (#30966)
**Description:** Corrected pre-buit to pre-built.
**Issue:** Little typo.
2025-04-22 18:13:07 +00:00
CLOVA Studio 개발
577cb53a00 community: update Naver integration to use langchain-naver package and improve documentation (#30956)
## **Description:** 
This PR was requested after the `langchain-naver` partner-managed
packages were completed.
We build our package as requested in [this
comment](https://github.com/langchain-ai/langchain/pull/29243#issuecomment-2595222791)
and the initial version is now uploaded to
[pypi](https://pypi.org/project/langchain-naver/).
So we've updated some our documents with the additional changed features
and how to download our partner-managed package.

## **Dependencies:** 

https://github.com/langchain-ai/langchain/pull/29243#issuecomment-2595222791

---------

Co-authored-by: ccurme <chester.curme@gmail.com>
2025-04-22 12:00:10 -04:00
ccurme
a7c1bccd6a openai[patch]: remove xfails from image token counting tests (#30963)
These appear to be passing again.
2025-04-22 15:55:33 +00:00
ccurme
25d77aa8b4 community: release 0.3.22 (#30962) 2025-04-22 15:34:47 +00:00
ccurme
59fd4cb4c0 docs: update package registry sort order (#30960) 2025-04-22 15:27:32 +00:00
ccurme
b8c454b42b langchain: release 0.3.24 (#30959) 2025-04-22 11:23:34 -04:00
Dmitrii Rashchenko
a43df006de Support of openai reasoning summary streaming (#30909)
**langchain_openai: Support of reasoning summary streaming**

**Description:**
OpenAI API now supports streaming reasoning summaries for reasoning
models (o1, o3, o3-mini, o4-mini). More info about it:
https://platform.openai.com/docs/guides/reasoning#reasoning-summaries

It is supported only in Responses API (not Completion API), so you need
to create LangChain Open AI model as follows to support reasoning
summaries streaming:

```
llm = ChatOpenAI(
    model="o4-mini", # also o1, o3, o3-mini support reasoning streaming
    use_responses_api=True,  # reasoning streaming works only with responses api, not completion api
    model_kwargs={
        "reasoning": {
            "effort": "high",  # also "low" and "medium" supported
            "summary": "auto"  # some models support "concise" summary, some "detailed", but auto will always work
        }
    }
)
```

Now, if you stream events from llm:

```
async for event in llm.astream_events(prompt, version="v2"):
    print(event)
```

or

```
for chunk in llm.stream(prompt):
    print (chunk)
```

OpenAI API will send you new types of events:
`response.reasoning_summary_text.added`
`response.reasoning_summary_text.delta`
`response.reasoning_summary_text.done`

These events are new, so they were ignored. So I have added support of
these events in function `_convert_responses_chunk_to_generation_chunk`,
so reasoning chunks or full reasoning added to the chunk
additional_kwargs.

Example of how this reasoning summary may be printed:

```
    async for event in llm.astream_events(prompt, version="v2"):
        if event["event"] == "on_chat_model_stream":
            chunk: AIMessageChunk = event["data"]["chunk"]
            if "reasoning_summary_chunk" in chunk.additional_kwargs:
                print(chunk.additional_kwargs["reasoning_summary_chunk"], end="")
            elif "reasoning_summary" in chunk.additional_kwargs:
                print("\n\nFull reasoning step summary:", chunk.additional_kwargs["reasoning_summary"])
            elif chunk.content and chunk.content[0]["type"] == "text":
                print(chunk.content[0]["text"], end="")
```

or

```
    for chunk in llm.stream(prompt):
        if "reasoning_summary_chunk" in chunk.additional_kwargs:
            print(chunk.additional_kwargs["reasoning_summary_chunk"], end="")
        elif "reasoning_summary" in chunk.additional_kwargs:
            print("\n\nFull reasoning step summary:", chunk.additional_kwargs["reasoning_summary"])
        elif chunk.content and chunk.content[0]["type"] == "text":
            print(chunk.content[0]["text"], end="")
```

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-04-22 14:51:13 +00:00
Alexander Ng
0f6fa34372 Community: Valyu Integration docs (#30926)
PR title:
docs: add Valyu integration documentation
Description:
This PR adds documentation and example notebooks for the Valyu
integration, including retriever and tool usage.
Issue:
N/A
Dependencies:
No new dependencies.

---------

Co-authored-by: ccurme <chester.curme@gmail.com>
2025-04-21 17:43:00 -04:00
Jacob Mansdorfer
e8a84b05a4 Community: Adding tool calling and some new parameters to the langchain-predictionguard docs. (#30953)
- [x] **PR message**: 
- **Description:** Updates the documentation for the
langchain-predictionguard package, adding tool calling functionality and
some new parameters.
2025-04-21 17:01:57 -04:00
ccurme
8574442c57 core[patch]: release 0.3.55 (#30952) 2025-04-21 17:56:24 +00:00
ccurme
920d504e47 fireworks[patch]: update model in LLM integration tests (#30951)
`mixtral-8x7b-instruct` has been retired.
2025-04-21 17:53:27 +00:00
Anton Masalovich
1f3054502e community: fix cost calculations for 4.1 and o4 in OpenAI callback (#30899)
**Issue:** #30898
2025-04-21 10:59:47 -04:00
Ahmed Tammaa
589bc19890 anthropic[patch]: make description optional on AnthropicTool (#30935)
PR Summary

This change adds a fallback in ChatAnthropic.with_structured_output() to
handle Pydantic models that don’t include a docstring. Without it,
calling:
```py
from pydantic import BaseModel
from langchain_anthropic import ChatAnthropic

class SampleModel(BaseModel):
    sample_field: str

llm = ChatAnthropic(
    model="claude-3-7-sonnet-latest"
).with_structured_output(SampleModel.model_json_schema())

llm.invoke("test")
```
will raise a
```
KeyError: 'description'
```
because Pydantic omits the description field when no docstring is
present.

This issue doesn’t occur when using ChatOpenAI or if you add a docstring
to the model:
```py
from pydantic import BaseModel
from langchain_openai import ChatOpenAI

class SampleModel(BaseModel):
    """Schema for sample_field output."""
    sample_field: str

llm = ChatOpenAI(
    model="gpt-4o-mini"
).with_structured_output(SampleModel.model_json_schema())

llm.invoke("test")
```

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-04-21 10:44:39 -04:00
Nuno Campos
27296bdb0c core: Make Graph.Node.data optional (#30943)
Thank you for contributing to LangChain!

- [ ] **PR title**: "package: description"
- Where "package" is whichever of langchain, community, core, etc. is
being modified. Use "docs: ..." for purely docs changes, "infra: ..."
for CI changes.
  - Example: "community: add foobar LLM"


- [ ] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [ ] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [ ] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.
- If you are adding something to community, do not re-import it in
langchain.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
2025-04-21 07:18:36 -07:00
Pushpa Kumar
0e9d0dbc10 docs: dynamic copyright year in API ref (#30944)
- [x] **PR title:**  
`docs: make footer year dynamic in API reference docs`

- [x] **PR message:**

  - **Description:**  
Update `docs/api_reference/conf.py` to make the copyright year dynamic
(on
[https://python.langchain.com/api_reference/](https://python.langchain.com/api_reference/)).

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-04-21 14:10:14 +00:00
Ahmed Tammaa
de56c31672 core: Improve OutputParser error messaging when model output is truncated (max_tokens) (#30936)
Addresses #30158
When using the output parser—either in a chain or standalone—hitting
max_tokens triggers a misleading “missing variable” error instead of
indicating the output was truncated. This subtle bug often surfaces with
Anthropic models.

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-04-21 10:06:18 -04:00
xsai9101
335f089d6a Community: Add bind variable support for oracle adb docloader (#30937)
PR title:
Community: Add bind variable support for oracle adb docloader
Description:
This PR adds support of using bind variable to oracle adb doc loader
class, including minor document change.
Issue:
N/A
Dependencies:
No new dependencies.
2025-04-21 08:47:33 -04:00
Ikko Eltociear Ashimine
9418c0d8a5 docs: update tableau.ipynb (#30938)
Initalize -> Initialize
2025-04-21 08:43:29 -04:00
Aubrey Ford
23f701b08e langchain_community: OpenAIEmbeddings not respecting chunk_size argument (#30946)
This is a follow-on PR to go with the identical changes that were made
in parters/openai.

Previous PR:  https://github.com/langchain-ai/langchain/pull/30757

When calling embed_documents and providing a chunk_size argument, that
argument is ignored when OpenAIEmbeddings is instantiated with its
default configuration (where check_embedding_ctx_length=True).

_get_len_safe_embeddings specifies a chunk_size parameter but it's not
being passed through in embed_documents, which is its only caller. This
appears to be an oversight, especially given that the
_get_len_safe_embeddings docstring states it should respect "the set
embedding context length and chunk size."

Developers typically expect method parameters to take effect (also, take
precedence) when explicitly provided, especially when instantiating
using defaults. I was confused as to why my API calls were being
rejected regardless of the chunk size I provided.
2025-04-21 08:39:07 -04:00
Aubrey Ford
b344f34635 partners/openai: OpenAIEmbeddings not respecting chunk_size argument (#30757)
When calling `embed_documents` and providing a `chunk_size` argument,
that argument is ignored when `OpenAIEmbeddings` is instantiated with
its default configuration (where `check_embedding_ctx_length=True`).

`_get_len_safe_embeddings` specifies a `chunk_size` parameter but it's
not being passed through in `embed_documents`, which is its only caller.
This appears to be an oversight, especially given that the
`_get_len_safe_embeddings` docstring states it should respect "the set
embedding context length and chunk size."

Developers typically expect method parameters to take effect (also, take
precedence) when explicitly provided, especially when instantiating
using defaults. I was confused as to why my API calls were being
rejected regardless of the chunk size I provided.

This bug also exists in langchain_community package. I can add that to
this PR if requested otherwise I will create a new one once this passes.
2025-04-18 15:27:27 -04:00
Konsti-s
017c8079e1 partners: ChatAnthropic supports urls (#30809)
**Description:**
partners-anthropic: ChatAnthropic supports b64 and urls in the
part[image_url][url] message variable

**Issue**:
ChatAnthropic right now only supports b64 encoded images in the
part[image_url][url] message variable. This PR enables ChatAnthropic to
also accept image urls in said variable and makes it compatible with
OpenAI messages to make model switching easier.

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-04-18 15:15:45 -04:00
Volodymyr Tkachuk
d0cd115356 community: Add deprecation decorator to SingleStore community integrations (#30846)
SingleStore integration now has its package `langchain-singlestore', so
the community implementation will no longer be maintained.

Added `deprecated` decorator to `SingleStoreDBChatMessageHistory`,
`SingleStoreDBSemanticCache`, and `SingleStoreDB` classes in the
community package.

**Dependencies:** https://github.com/langchain-ai/langchain/pull/30841

---------

Co-authored-by: ccurme <chester.curme@gmail.com>
2025-04-18 12:58:39 -04:00
Alejandro Rodríguez
34ddfba76b community: support usage_metadata for litellm streaming calls (#30683)
Support "usage_metadata" for LiteLLM streaming calls.

This is a follow-up to
https://github.com/langchain-ai/langchain/pull/30625, which tackled
non-streaming calls.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
2025-04-18 12:50:32 -04:00
Volodymyr Tkachuk
5ffcd01c41 docs: Register langchain-singlestore integration (#30841)
I created and published `langchain-singlestoe` integration package that
should replace SingleStoreDB community implementation.
2025-04-18 12:11:33 -04:00
ccurme
096f0e5966 core[patch]: de-beta usage callback (#30928) 2025-04-18 15:45:09 +00:00
ccurme
46de0866db infra: add langchain-google-genai to monorepo test deps and update notebook cassettes (#30925)
Following https://github.com/langchain-ai/langchain/pull/30880
2025-04-18 11:16:12 -04:00
Behrad Hemati
d624a475e4 community: change metadata in opensearch mmr (#30921)
- [ ] **PR message**:
- **Description:** including metadata_field in
max_marginal_relevance_search() would result in error, changed the logic
to be similar to how it's handled in similarity_search, where it can be
any field or simply a "*" to include every field
2025-04-18 10:10:23 -04:00
rylativity
dbf9986d44 langchain-ollama (partners) / langchain-core: allow passing ChatMessages to Ollama (including arbitrary roles) (#30411)
Replacement for PR #30191 (@ccurme)

**Description**: currently, ChatOllama [will raise a value error if a
ChatMessage is passed to
it](https://github.com/langchain-ai/langchain/blob/master/libs/partners/ollama/langchain_ollama/chat_models.py#L514),
as described
https://github.com/langchain-ai/langchain/pull/30147#issuecomment-2708932481.

Furthermore, ollama-python is removing the limitations on valid roles
that can be passed through chat messages to a model in ollama -
https://github.com/ollama/ollama-python/pull/462#event-16917810634.

This PR removes the role limitations imposed by langchain and enables
passing langchain ChatMessages with arbitrary 'role' values through the
langchain ChatOllama class to the underlying ollama-python Client.

As this PR relies on [merged but unreleased functionality in
ollama-python](
https://github.com/ollama/ollama-python/pull/462#event-16917810634), I
have temporarily pointed the ollama package source to the main branch of
the ollama-python github repo.

Format, lint, and tests of new functionality passing. Need to resolve
issue with recently added ChatOllama tests. (Now resolved)

**Issue**: resolves #30122 (related to ollama issue
https://github.com/ollama/ollama/issues/8955)

**Dependencies**: no new dependencies

[x] PR title
[x] PR message
[x] Lint and test: format, lint, and test all running successfully and
passing

---------

Co-authored-by: Ryan Stewart <ryanstewart@Ryans-MacBook-Pro.local>
Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-04-18 10:07:07 -04:00
Christophe Bornet
0c723af4b0 langchain[lint]: fix mypy type ignores (#30894)
* Remove unused ignores
* Add type ignore codes
* Add mypy rule `warn_unused_ignores`
* Add ruff rule PGH003

NB: some `type: ignore[unused-ignore]` are added because the ignores are
needed when `extended_testing_deps.txt` deps are installed.
2025-04-17 17:54:34 -04:00
ccurme
f14bcee525 docs: update multi-modal docs (#30880)
Co-authored-by: Sydney Runkle <54324534+sydney-runkle@users.noreply.github.com>
2025-04-17 16:03:05 -04:00
Sydney Runkle
98c357b3d7 core: release 0.3.54 (#30911) 2025-04-17 14:27:06 -04:00
Vadym Barda
d2cbfa379f core[patch]: add retries and better messages to draw_mermaid_png (#30881) 2025-04-17 18:25:37 +00:00
Sydney Runkle
75e50a3efd core[patch]: Raise AttributeError (instead of ModuleNotFoundError) in custom __getattr__ (#30905)
Follow up to https://github.com/langchain-ai/langchain/pull/30769,
fixing the regression reported
[here](https://github.com/langchain-ai/langchain/pull/30769#issuecomment-2807483610),
thanks @krassowski for the report!

Fix inspired by https://github.com/PrefectHQ/prefect/pull/16172/files

Other changes:
* Using tuples for `__all__`, except in `output_parsers` bc of a list
namespace conflict
* Using a helper function for imports due to repeated logic across
`__init__.py` files becoming hard to maintain.

Co-authored-by: Michał Krassowski < krassowski 5832902+krassowski@users.noreply.github.com>"
2025-04-17 14:15:28 -04:00
ccurme
61d2dc011e openai: release 0.3.14 (#30908) 2025-04-17 10:49:14 -04:00
ccurme
f0f90c4d88 anthropic: release 0.3.12 (#30907) 2025-04-17 14:45:12 +00:00
ccurme
f01b89df56 standard-tests: release 0.3.19 (#30906) 2025-04-17 10:37:44 -04:00
ccurme
add6a78f98 standard-tests, openai[patch]: add support standard audio inputs (#30904) 2025-04-17 10:30:57 -04:00
ccurme
2c2db1ab69 core: release 0.3.53 (#30901) 2025-04-17 13:10:32 +00:00
ccurme
86d51f6be6 multiple: permit optional fields on multimodal content blocks (#30887)
Instead of stuffing provider-specific fields in `metadata`, they can go
directly on the content block.
2025-04-17 12:48:46 +00:00
湛露先生
83b66cb916 doc: clean doc word description. (#30895)
Signed-off-by: zhanluxianshen <zhanluxianshen@163.com>
2025-04-17 08:04:37 -04:00
湛露先生
ff2930c119 partners: bug fix check_imports.py exit code. (#30897)
Signed-off-by: zhanluxianshen <zhanluxianshen@163.com>
2025-04-17 08:02:23 -04:00
ccurme
b36c2bf833 docs: update Bedrock chat model page (#30883)
- document prompt caching
- feature ChatBedrockConverse throughout
2025-04-16 16:55:14 -04:00
ccurme
9e82f1df4e docs: minor clean up in ChatOpenAI docs (#30884) 2025-04-16 16:08:43 -04:00
ccurme
fa362189a1 docs: document OpenAI reasoning summaries (#30882) 2025-04-16 19:21:14 +00:00
Sydney Runkle
88fce67724 core: Removing unnecessary pydantic core schema rebuilds (#30848)
We only need to rebuild model schemas if type annotation information
isn't available during declaration - that shouldn't be the case for
these types corrected here.

Need to do more thorough testing to make sure these structures have
complete schemas, but hopefully this boosts startup / import time.
2025-04-16 12:00:08 -04:00
rrozanski-smabbler
60d8ade078 Galaxia integration (#30792)
- [ ] **PR title**: "docs: adding Smabbler's Galaxia integration"

- [ ] **PR message**:  **Twitter handle:** @Galaxia_graph

I'm adding docs here + added the package to the packages.yml. I didn't
add a unit test, because this integration is just a thin wrapper on top
of our API. There isn't much left to test if you mock it away.

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-04-16 10:39:04 -04:00
ccurme
ca39680d2a ollama: release 0.3.2 (#30865) 2025-04-16 09:14:57 -04:00
Sydney Runkle
4af3f89a3a docs: enforce newlines when signature exceeds char threshold (#30866)
Below is an example of the single line vs new multiline approach.

Before this PR:

<img width="831" alt="Screenshot 2025-04-15 at 8 56 26 PM"
src="https://github.com/user-attachments/assets/0c0277bd-2441-4b22-a536-e16984fd91b7"
/>

After this PR:

<img width="829" alt="Screenshot 2025-04-15 at 8 56 13 PM"
src="https://github.com/user-attachments/assets/e16bfe38-bb17-48ba-a642-e8ff6b48e841"
/>
2025-04-16 08:45:40 -04:00
milosz-l
4ff576e37d langchain: infer Perplexity provider for sonar model prefix (#30861)
**Description:** This PR adds provider inference logic to
`init_chat_model` for Perplexity models that use the "sonar..." prefix
(`sonar`, `sonar-pro`, `sonar-reasoning`, `sonar-reasoning-pro` or
`sonar-deep-research`).

This allows users to initialize these models by simply passing the model
name, without needing to explicitly set `model_provider="perplexity"`.

The docstring for `init_chat_model` has also been updated to reflect
this new inference rule.
2025-04-15 18:17:21 -04:00
ccurme
085baef926 ollama[patch]: support standard image format (#30864)
Following https://github.com/langchain-ai/langchain/pull/30746
2025-04-15 22:14:50 +00:00
ccurme
47ded80b64 ollama[patch]: fix generation info (#30863)
https://github.com/langchain-ai/langchain/pull/30778 (not released)
broke all invocation modes of ChatOllama (intent was to remove
`"message"` from `generation_info`, but we turned `generation_info` into
`stream_resp["message"]`), resulting in validation errors.
2025-04-15 19:22:58 +00:00
Sydney Runkle
cf2697ec53 chroma: release 0.2.3 (#30860) 2025-04-15 14:11:23 -04:00
ccurme
8e9569cbc8 perplexity: release 0.1.1 (#30859) 2025-04-15 18:02:15 +00:00
ccurme
dd5f5902e3 openai: release 0.3.13 (#30858) 2025-04-15 17:58:12 +00:00
ccurme
3382ee8f57 anthropic: release 0.3.11 (#30857) 2025-04-15 17:57:00 +00:00
Sydney Runkle
ef5aff3b6c core[fix]: Fix __dir__ in __init__.py for output_parsers module (#30856)
We have a `list.py` file which causes a namespace conflict with `list`
from stdlib, unfortunately.

`__all__` is already a list, so no need to coerce.
2025-04-15 13:09:13 -04:00
Christophe Bornet
a4ca1fe0ed core: Remove some noqa (#30855) 2025-04-15 13:08:40 -04:00
ccurme
6baf5c05a6 standard-tests: release 0.3.18 (#30854) 2025-04-15 16:56:54 +00:00
ccurme
c6a8663afb infra: run old standard-tests on core releases (#30852)
On core releases, we check out the latest published package for
langchain-openai and langchain-anthropic and run their tests against the
candidate version of langchain-core.

Because these packages have a local install of langchain-tests, we also
need to check out the previous version of langchain-tests.
2025-04-15 16:04:08 +00:00
Sydney Runkle
1f5e207379 core[fix]: remove load from dynamic imports dict (#30849) 2025-04-15 12:02:46 -04:00
ccurme
7240458619 core: release 0.3.52 (#30850) 2025-04-15 15:28:31 +00:00
Sydney Runkle
6aa5494a75 Fix from langchain_core.load.load import load import (#30843)
TL;DR: you can't optimize imports with a lazy `__getattr__` if there is
a namespace conflict with a module name and an attribute name. We should
avoid introducing conflicts like this in the future.

This PR fixes a bug introduced by my lazy imports PR:
https://github.com/langchain-ai/langchain/pull/30769.

In `langchain_core`, we have utilities for loading and dumping data.
Unfortunately, one of those utilities is a `load` function, located in
`langchain_core/load/load.py`. To make this function more visible, we
make it accessible at the top level `langchain_core.load` module via
importing the function in `langchain_core/load/__init__.py`.

So, either of these imports should work:

```py
from langchain_core.load import load
from langchain_core.load.load import load
```

As you can tell, this is already a bit confusing. You'd think that the
first import would produce the module `load`, but because of the
`__init__.py` shortcut, both produce the function `load`.

<details> More on why the lazy imports PR broke this support...

All was well, except when the absolute import was run first, see the
last snippet:

```
>>> from langchain_core.load import load
>>> load
<function load at 0x101c320c0>
```

```
>>> from langchain_core.load.load import load
>>> load
<function load at 0x1069360c0>
```

```
>>> from langchain_core.load import load
>>> load
<function load at 0x10692e0c0>
>>> from langchain_core.load.load import load
>>> load
<function load at 0x10692e0c0>
```

```
>>> from langchain_core.load.load import load
>>> load
<function load at 0x101e2e0c0>
>>> from langchain_core.load import load
>>> load
<module 'langchain_core.load.load' from '/Users/sydney_runkle/oss/langchain/libs/core/langchain_core/load/load.py'>
```

In this case, the function `load` wasn't stored in the globals cache for
the `langchain_core.load` module (by the lazy import logic), so Python
defers to a module import.

</details>

New `langchain` tongue twister 😜: we've created a problem for ourselves
because you have to load the load function from the load file in the
load module 😨.
2025-04-15 11:06:13 -04:00
Bagatur
7262de4217 core[patch]: dict chat prompt template support (#25674)
- Support passing dicts as templates to chat prompt template
- Support making *any* attribute on a message a runtime variable
- Significantly simpler than trying to update our existing prompt
template classes

```python
    template = ChatPromptTemplate(
        [
            {
                "role": "assistant",
                "content": [
                    {
                        "type": "text",
                        "text": "{text1}",
                        "cache_control": {"type": "ephemeral"},
                    },
                    {"type": "image_url", "image_url": {"path": "{local_image_path}"}},
                ],
                "name": "{name1}",
                "tool_calls": [
                    {
                        "name": "{tool_name1}",
                        "args": {"arg1": "{tool_arg1}"},
                        "id": "1",
                        "type": "tool_call",
                    }
                ],
            },
            {
                "role": "tool",
                "content": "{tool_content2}",
                "tool_call_id": "1",
                "name": "{tool_name1}",
            },
        ]
    )

```

will likely close #25514 if we like this idea and update to use this
logic

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-04-15 11:00:49 -04:00
ccurme
9cfe6bcacd multiple: multi-modal content blocks (#30746)
Introduces standard content block format for images, audio, and files.

## Examples

Image from url:
```
{
    "type": "image",
    "source_type": "url",
    "url": "https://path.to.image.png",
}
```


Image, in-line data:
```
{
    "type": "image",
    "source_type": "base64",
    "data": "<base64 string>",
    "mime_type": "image/png",
}
```


PDF, in-line data:
```
{
    "type": "file",
    "source_type": "base64",
    "data": "<base64 string>",
    "mime_type": "application/pdf",
}
```


File from ID:
```
{
    "type": "file",
    "source_type": "id",
    "id": "file-abc123",
}
```


Plain-text file:
```
{
    "type": "file",
    "source_type": "text",
    "text": "foo bar",
}
```
2025-04-15 09:48:06 -04:00
湛露先生
09438857e8 docs: fix tools_human.ipynb url 404. (#30831)
Fix the 404 pages.

Signed-off-by: zhanluxianshen <zhanluxianshen@163.com>
2025-04-15 09:22:13 -04:00
Sydney Runkle
e3b6cddd5e core: codspeed tweak to make sure it runs on master (#30845) 2025-04-15 13:03:44 +00:00
Sydney Runkle
59f2c9e737 Tinkering with CodSpeed (#30824)
Fix CI to trigger benchmarks on `run-codspeed-benchmarks` label addition

Reduce scope of async benchmark to save time on CI

Waiting to merge this PR until we figure out how to use walltime on
local runners.
2025-04-15 08:49:09 -04:00
William FH
ed5c4805f6 Consistent docstring indentation (#30834)
Should be 4 spaces instead of 3.
2025-04-14 19:04:35 -07:00
Joey Constantino
2282762528 docs: small Tableau docs update (#30827)
Description: small Tableau docs update
Issue: adds required environment variable
Dependencies: tableau-langchain

---------

Co-authored-by: Joe Constantino <joe.constantino@joecons-ltm6v86.internal.salesforce.com>
2025-04-14 15:34:54 -04:00
ccurme
f7c4965fb6 openai[patch]: update imports in test (#30828)
Quick fix to unblock CI, will need to address in core separately.
2025-04-14 19:33:38 +00:00
Sydney Runkle
edb6a23aea core[lint]: fix issue with unused ignore in __init__.py files (#30825)
Fixing a race condition between
https://github.com/langchain-ai/langchain/pull/30769 and
https://github.com/langchain-ai/langchain/pull/30737
2025-04-14 17:57:00 +00:00
湛露先生
3a64c7195f community: redis tool typos fix (#30811) 2025-04-14 09:01:36 -04:00
Sydney Runkle
4f69094b51 core[performance]: use custom __getattr__ in __init__.py files for lazy imports (#30769)
Most easily reviewed with the "hide whitespace" option toggled.

Seeing 10-50% speed ups in import time for common structures 🚀 

The general purpose of this PR is to lazily import structures within
`langchain_core.XXX_module.__init__.py` so that we're not eagerly
importing expensive dependencies (`pydantic`, `requests`, etc).

Analysis of flamegraphs generated with `importtime` motivated these
changes. For example, the one below demonstrates that importing
`HumanMessage` accidentally triggered imports for `importlib.metadata`,
`requests`, etc.

There's still much more to do on this front, and we can start digging
into our own internal code for optimizations now that we're less
concerned about external imports.

<img width="1210" alt="Screenshot 2025-04-11 at 1 10 54 PM"
src="https://github.com/user-attachments/assets/112a3fe7-24a9-4294-92c1-d5ae64df839e"
/>

I've tracked the improvements with some local benchmarks:

## `pytest-benchmark` results

| Name | Before (s) | After (s) | Delta (s) | % Change |

|-----------------------------|------------|-----------|-----------|----------|
| Document | 2.8683 | 1.2775 | -1.5908 | -55.46% |
| HumanMessage | 2.2358 | 1.1673 | -1.0685 | -47.79% |
| ChatPromptTemplate | 5.5235 | 2.9709 | -2.5526 | -46.22% |
| Runnable | 2.9423 | 1.7793 | -1.163 | -39.53% |
| InMemoryVectorStore | 3.1180 | 1.8417 | -1.2763 | -40.93% |
| RunnableLambda | 2.7385 | 1.8745 | -0.864 | -31.55% |
| tool | 5.1231 | 4.0771 | -1.046 | -20.42% |
| CallbackManager | 4.2263 | 3.4099 | -0.8164 | -19.32% |
| LangChainTracer | 3.8394 | 3.3101 | -0.5293 | -13.79% |
| BaseChatModel | 4.3317 | 3.8806 | -0.4511 | -10.41% |
| PydanticOutputParser | 3.2036 | 3.2995 | 0.0959 | 2.99% |
| InMemoryRateLimiter | 0.5311 | 0.5995 | 0.0684 | 12.88% |

Note the lack of change for `InMemoryRateLimiter` and
`PydanticOutputParser` is just random noise, I'm getting comparable
numbers locally.

## Local CodSpeed results

We're still working on configuring CodSpeed on CI. The local usage
produced similar results.
2025-04-14 08:57:54 -04:00
Christophe Bornet
ada740b5b9 community: Add ruff rule PGH003 (#30812)
See https://docs.astral.sh/ruff/rules/blanket-type-ignore/

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-04-14 02:32:13 +00:00
ccurme
f005988e31 community[patch]: fix cost calculations for o3 in OpenAI callback (#30807)
Resolves https://github.com/langchain-ai/langchain/issues/30795
2025-04-13 15:20:46 +00:00
BoyuHu
446361a0d3 docs: fix typo (#30800)
Thank you for contributing to LangChain!

- [ ] **PR title**: "package: description"
- Where "package" is whichever of langchain, community, core, etc. is
being modified. Use "docs: ..." for purely docs changes, "infra: ..."
for CI changes.
  - Example: "community: add foobar LLM"


- [ ] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [ ] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [ ] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.
- If you are adding something to community, do not re-import it in
langchain.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
2025-04-13 10:55:30 -04:00
Marina Gómez
afd457d8e1 perplexity[patch]: Fix #30767: Handle missing citations attribute in ChatPerplexity (#30805)
This PR fixes an issue where ChatPerplexity would raise an
AttributeError when the citations attribute was missing from the model
response (e.g., when using offline models like r1-1776).

The fix checks for the presence of citations, images, and
related_questions before attempting to access them, avoiding crashes in
models that don't provide these fields.

Tested locally with models that omit citations, and the fix works as
expected.
2025-04-13 09:24:05 -04:00
Christophe Bornet
42944f3499 core: Improve mypy config (#30737)
* Cleanup mypy config
* Add mypy `strict` rules except `disallow_any_generics`,
`warn_return_any` and `strict_equality` (TODO)
* Add mypy `strict_byte` rule
* Add mypy support for PEP702 `@deprecated` decorator
* Bump mypy version to 1.15

---------

Co-authored-by: Eugene Yurtsev <eyurtsev@gmail.com>
2025-04-11 16:35:13 -04:00
mpb159753
bb2c2fd885 docs: Add openGauss vector store documentation (#30742)
Hey LangChain community! 👋 Excited to propose official documentation for
our new openGauss integration that brings powerful vector capabilities
to the stack!

### What's Inside 📦  
1. **Full Integration Guide**  
Introducing
[langchain-opengauss](https://pypi.org/project/langchain-opengauss/) on
PyPI - your new toolkit for:
   🔍 Native hybrid search (vectors + metadata)  
   🚀 Production-grade connection pooling  
   🧩 Automatic schema management  

2. **Rigorous Testing Passed**   
![Benchmark
Results](https://github.com/user-attachments/assets/ae3b21f7-aeea-4ae7-a142-f2aec57936a0)
   - 100% non-async test coverage  

ps: Current implementation resides in my personal repository:
https://github.com/mpb159753/langchain-opengauss, How can I transfer
process to langchain-ai org?? *Keen to hear your thoughts and make this
integration shine!* 

---------

Co-authored-by: Eugene Yurtsev <eugene@langchain.dev>
Co-authored-by: Eugene Yurtsev <eyurtsev@gmail.com>
2025-04-11 20:31:39 +00:00
Christophe Bornet
913c896598 core: Add ruff rules FBT001 and FBT002 (#30695)
Add ruff rules
[FBT001](https://docs.astral.sh/ruff/rules/boolean-type-hint-positional-argument/)
and
[FBT002](https://docs.astral.sh/ruff/rules/boolean-default-value-positional-argument/).
Mostly `noqa`s to not introduce breaking changes and possible
non-breaking fixes have already been done in a [previous
PR](https://github.com/langchain-ai/langchain/pull/29424).
These rules will prevent new violations to happen.
2025-04-11 16:26:33 -04:00
William FH
2803a48661 core[patch]: Share executor for async callbacks run in sync context (#30779)
To avoid having to create ephemeral threads, grab the thread lock, etc.
2025-04-11 10:34:43 -07:00
Sydney Runkle
fdc2b4bcac core[lint]: Use 3.9 formatting for docs and tests (#30780)
Looks like `pyupgrade` was already used here but missed some docs and
tests.

This helps to keep our docs looking professional and up to date.
Eventually, we should lint / format our inline docs.
2025-04-11 10:39:25 -04:00
Sydney Runkle
48affc498b langchain[lint]: use pyupgrade to get to 3.9 standards (#30782) 2025-04-11 10:33:26 -04:00
ccurme
d9b628e764 xai: release 0.2.3 (#30790) 2025-04-11 14:05:11 +00:00
ccurme
9cfb95e621 xai[patch]: support reasoning content (#30758)
https://docs.x.ai/docs/guides/reasoning

```python
from langchain.chat_models import init_chat_model

llm = init_chat_model(
    "xai:grok-3-mini-beta",
    reasoning_effort="low"
)
response = llm.invoke("Hello, world!")
```
2025-04-11 14:00:27 +00:00
Christophe Bornet
89f28a24d3 core[lint]: Fix typing in test_async_callbacks (#30788) 2025-04-11 07:26:38 -04:00
Sydney Runkle
8c6734325b partners[lint]: run pyupgrade to get code in line with 3.9 standards (#30781)
Using `pyupgrade` to get all `partners` code up to 3.9 standards
(mostly, fixing old `typing` imports).
2025-04-11 07:18:44 -04:00
Jacob Lee
e72f3c26a0 fix(ollama): Remove redundant message from response_metadata (#30778) 2025-04-10 23:12:57 -07:00
Jannik Maierhöfer
f3c3ec9aec docs: add langfuse integration to provider list (#30573)
This PR adds the Langfuse integration to the provider list.
2025-04-10 22:25:42 -04:00
Christophe Bornet
dc19d42d37 core: Specify code when ignoring type issue (ruff PGH003) (#30675)
See https://docs.astral.sh/ruff/rules/blanket-type-ignore/
2025-04-10 22:23:52 -04:00
Paul Czarkowski
68d16d8a07 Community: Add Managed Identity support for Azure AI Search (#30730)
Add Managed Identity support for Azure AI Search

---------

Signed-off-by: Paul Czarkowski <username.taken@gmail.com>
2025-04-10 22:22:58 -04:00
CtrlMj
5103594a2c replace the deprecated initialize_agent in playwright.ipynb with create_react_agent (#30734)
**Description:** Replaced the example with the deprecated
`intialize_agent` function with `create_react_agent` from
`langgraph.prebuild`

**Issue:** #29277 

**Dependencies:** N/A
**Twitter handle:** N/A
2025-04-10 22:12:12 -04:00
Eugene Yurtsev
e42b3d285a langchain: remove langchain-server script (#30755)
Has been replaced by langsmith a long long time ago
2025-04-10 22:11:42 -04:00
Pol de Font-Réaulx
48cf7c838d feat(community): add oauth2 support for Jira toolkit (#30684)
**Description:** add support for oauth2 in Jira tool by adding the
possibility to pass a dictionary with oauth parameters. I also adapted
the documentation to show this new behavior
2025-04-10 22:04:09 -04:00
Oleg Ovcharuk
b6fe7e8c10 docs: YDB Vector Store docs (#30636)
This PR adds docs about how to use YDB as a vector store

[YDB](https://ydb.tech/) is a versatile open-source distributed SQL
database. It supports [vector
search](https://ydb.tech/docs/en/yql/reference/udf/list/knn) which means
it can be used as a vector store with langchain.

YDB vectore store comes with
[langchain-ydb](https://pypi.org/project/langchain-ydb/) pypi package.

Co-authored-by: ccurme <chester.curme@gmail.com>
2025-04-10 21:33:56 -04:00
湛露先生
7a4ae6fbff community[patch]: simplify cache logic (#30760)
Thank you for contributing to LangChain!

- [ ] **PR title**: "package: description"
- Where "package" is whichever of langchain, community, core, etc. is
being modified. Use "docs: ..." for purely docs changes, "infra: ..."
for CI changes.
  - Example: "community: add foobar LLM"


- [ ] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [ ] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [ ] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.
- If you are adding something to community, do not re-import it in
langchain.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.

Signed-off-by: zhanluxianshen <zhanluxianshen@163.com>
2025-04-10 19:20:57 -04:00
ccurme
8e053ac9d2 core[patch]: support customization of backoff parameters in with_retries (#30773)
Co-authored-by: Sydney Runkle <54324534+sydney-runkle@users.noreply.github.com>
2025-04-10 19:18:36 -04:00
amohan
e981a9810d docs: update links in cloudflare docs (#30776)
Thanks for reviewing again. I was notified of some
[links](https://python.langchain.com/api_reference/cloudflare/) not
being correct in the default integrations so updating them in this PR.
2025-04-10 19:08:18 -04:00
William FH
70532a65f8 Async callback benchmark (#30777) 2025-04-10 15:47:19 -07:00
Sydney Runkle
c6172d167a Only run CodSpeed benchmarks with run-codspeed-benchmarks label (#30774) 2025-04-10 15:48:14 -04:00
amohan
f70df01e01 docs: Update ordering of cloudflare integration examples in providers page (#30768)
Updated the ordering of cloudflare integrations and updated import
examples. Follow up from
https://github.com/langchain-ai/langchain/pull/30749
2025-04-10 15:34:58 -04:00
Sydney Runkle
8f8fea2d7e [performance]: Use hard coded langchain-core version to avoid importlib import (#30744)
This PR aims to reduce import time of `langchain-core` tools by removing
the `importlib.metadata` import previously used in `__init__.py`. This
is the first in a sequence of PRs to reduce import time delays for
`langchain-core` features and structures 🚀.

Because we're now hard coding the version, we need to make sure
`version.py` and `pyproject.toml` stay in sync, so I've added a new CI
job that runs whenever either of those files are modified. [This
run](https://github.com/langchain-ai/langchain/actions/runs/14358012706/job/40251952044?pr=30744)
demonstrates the failure that occurs whenever the version gets out of
sync (thus blocking a PR).

Before, note the ~15% of time spent on the `importlib.metadata` /related
imports

<img width="1081" alt="Screenshot 2025-04-09 at 9 06 15 AM"
src="https://github.com/user-attachments/assets/59f405ec-ee8d-4473-89ff-45dea5befa31"
/>

After (note, lack of `importlib.metadata` time sink):

<img width="1245" alt="Screenshot 2025-04-09 at 9 01 23 AM"
src="https://github.com/user-attachments/assets/9c32e77c-27ce-485e-9b88-e365193ed58d"
/>
2025-04-10 14:15:02 -04:00
Sydney Runkle
cd6a83117c Adding more import time benchmarks for langchain-core (#30770)
Plus minor typo fix in `ChatPromptTemplate` case id.
2025-04-10 11:50:12 -04:00
Chamath K.B. Attanayaka
6c45c9efc3 docs: update clickhouse version in notebook example (#30754)
update clickhouse docker version tag in notebook example to avoid
compatibility issues with clickhouse-connect.
2025-04-10 09:51:54 -04:00
amohan
44b83460b2 docs: Add Cloudflare integrations (#30749)
Description:
This PR adds documentation for the langchain-cloudflare integration
package.

Issue:
N/A

Dependencies:
No new dependencies are required.

Tests and Docs:

Added an example notebook demonstrating the usage of the
langchain-cloudflare package, located in docs/docs/integrations.
Added a new package to libs/packages.yml.

Lint and Format:

Successfully ran make format and make lint.

---------

Co-authored-by: Collier King <collier@cloudflare.com>
Co-authored-by: Collier King <collierking99@gmail.com>
2025-04-10 09:27:23 -04:00
湛露先生
c87a270e5f cookbook: Fix docs typos. (#30763)
Thank you for contributing to LangChain!

- [ ] **PR title**: "package: description"
- Where "package" is whichever of langchain, community, core, etc. is
being modified. Use "docs: ..." for purely docs changes, "infra: ..."
for CI changes.
  - Example: "community: add foobar LLM"


- [ ] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [ ] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [ ] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.
- If you are adding something to community, do not re-import it in
langchain.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.

Signed-off-by: zhanluxianshen <zhanluxianshen@163.com>
2025-04-10 09:13:24 -04:00
ccurme
63c16f5ca8 community: deprecate AzureCosmosDBNoSqlVectorSearch in favor of langchain-azure-ai implementation (#30756) 2025-04-09 21:04:16 +00:00
Christophe Bornet
4cc7bc6c93 core: Add ruff rules PLR (#30696)
Add ruff rules [PLR](https://docs.astral.sh/ruff/rules/#refactor-plr)
Except PLR09xxx and PLR2004.

Co-authored-by: Eugene Yurtsev <eyurtsev@gmail.com>
2025-04-09 15:15:38 -04:00
célina
68361f9c2d partners: (langchain-huggingface) Embeddings - Integrate Inference Providers and remove deprecated code (#30735)
Hi there, This is a complementary PR to #30733.
This PR introduces support for Hugging Face's serverless Inference
Providers (documentation
[here](https://huggingface.co/docs/inference-providers/index)), allowing
users to specify different providers

This PR also removes the usage of `InferenceClient.post()` method in
`HuggingFaceEndpointEmbeddings`, in favor of the task-specific
`feature_extraction` method. `InferenceClient.post()` is deprecated and
will be removed in `huggingface_hub` v0.31.0.

## Changes made

- bumped the minimum required version of the `huggingface_hub` package
to ensure compatibility with the latest API usage.
- added a provider field to `HuggingFaceEndpointEmbeddings`, enabling
users to select the inference provider.
- replaced the deprecated `InferenceClient.post()` call in
`HuggingFaceEndpointEmbeddings` with the task-specific
`feature_extraction` method for future-proofing, `post()` will be
removed in `huggingface-hub` v0.31.0.

 All changes are backward compatible.

---------

Co-authored-by: Lucain <lucainp@gmail.com>
Co-authored-by: ccurme <chester.curme@gmail.com>
2025-04-09 19:05:43 +00:00
Christophe Bornet
98f0016fc2 core: Add ruff rules ARG (#30732)
See https://docs.astral.sh/ruff/rules/#flake8-unused-arguments-arg
2025-04-09 14:39:36 -04:00
Sydney Runkle
66758599a9 [ci]: Quick codspeed.yml tweaks to enable comparisons with master (#30752)
* Only run codspeed logic when `libs/core` is changed (for now, we'll
want to add other benchmarks later
* Also run on `master` so that we can get a reference :)
2025-04-09 13:13:49 -04:00
theosaurus
d47d6ecbc3 dosc: Fix typo in get_separators_for_language method section (#30748)
Thank you for contributing to LangChain!

- [ ] **PR title**: "package: description"
- Where "package" is whichever of langchain, community, core, etc. is
being modified. Use "docs: ..." for purely docs changes, "infra: ..."
for CI changes.
  - Example: "community: add foobar LLM"


- [ ] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [ ] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [ ] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.
- If you are adding something to community, do not re-import it in
langchain.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
2025-04-09 13:03:01 -04:00
Sydney Runkle
78ec7d886d [performance]: Adding benchmarks for common langchain-core imports (#30747)
The first in a sequence of PRs focusing on improving performance in
core. We're starting with reducing import times for common structures,
hence the benchmarks here.

The benchmark looks a little bit complicated - we have to use a process
so that we don't suffer from Python's import caching system. I tried
doing manual modification of `sys.modules` between runs, but that's
pretty tricky / hacky to get right, hence the subprocess approach.

Motivated by extremely slow baseline for common imports (we're talking
2-5 seconds):

<img width="633" alt="Screenshot 2025-04-09 at 12 48 12 PM"
src="https://github.com/user-attachments/assets/994616fe-1798-404d-bcbe-48ad0eb8a9a0"
/>

Also added a `make benchmark` command to make local runs easy :).
Currently using walltimes so that we can track total time despite using
a manual proces.
2025-04-09 13:00:15 -04:00
German Molina
5fb261ce27 community: Google Vertex AI Search now returns the website title as part of the document metadata (#30688)
Google vertex ai search will now return the title of the found website
as part of the document metadata, if available.

Thank you for contributing to LangChain!

- **Description**: Vertex AI Search can be used to index websites and
then develop chatbots that use these websites to answer questions. At
present, the document metadata includes an `id` and `source` (which is
the URL). While the URL is enough to create a link, the ID is not
descriptive enough to show users. Therefore, I propose we return `title`
as well, when available (e.g., it will not be available in `.txt`
documents found during the website indexing).
- **Issue**: No bug in particular, but it would be better if this was
here.
- **Dependencies**: None
- I do not use twitter.

Format, Lint and Test seem to be all good.
2025-04-09 08:54:06 -04:00
theosaurus
636d831d27 docs: Fix typo in 'Query re-writing" section (#30736)
Thank you for contributing to LangChain!

- [ ] **PR title**: "package: description"
- Where "package" is whichever of langchain, community, core, etc. is
being modified. Use "docs: ..." for purely docs changes, "infra: ..."
for CI changes.
  - Example: "community: add foobar LLM"


- [ ] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [ ] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [ ] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.
- If you are adding something to community, do not re-import it in
langchain.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
2025-04-09 08:50:14 -04:00
giulia_p_lib
deec538335 docs: fix small typo in map_rerank_docs_chain.ipynb (#30738)
- [ ] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** fixed a minor typo in map_rerank_docs_chain.ipynb
2025-04-09 08:49:37 -04:00
Akshay Dongare
164e606cae docs: fix import path and update LiteLLM integration docs (#30685)
- [x] **PR title**: "docs: Update import path and LiteLLM integration
docs"
- Update the old import path for `ChatLiteLLM` to reflect the new export
from
[`__init__.py`](https://github.com/Akshay-Dongare/langchain-litellm/blob/main/langchain_litellm/__init__.py)
in
[`langchain-litellm`](https://github.com/Akshay-Dongare/langchain-litellm)
package

- [x] **PR message**:
    - **Description:** 
    - 🔗 **Follow-up to**: PR #30637
    - 🔧 **Fixes**: #30368
- 💬 **Based on this comment from** @ccurme:
https://github.com/langchain-ai/langchain/pull/30637#discussion_r2029084320
 


- [x] **About me**
🔗 LinkedIn:
[akshay-dongare](https://www.linkedin.com/in/akshay-dongare/)
2025-04-08 13:04:17 -04:00
Ikko Eltociear Ashimine
5686fed40b docs: update yellowbrick.ipynb (#30729)
retreival -> retrieval
2025-04-08 11:56:35 -04:00
Sydney Runkle
4556b81b1d Clean up numpy dependencies and speed up 3.13 CI with numpy>=2.1.0 (#30714)
Generally, this PR is CI performance focused + aims to clean up some
dependencies at the same time.

1. Unpins upper bounds for `numpy` in all `pyproject.toml` files where
`numpy` is specified
2. Requires `numpy >= 2.1.0` for Python 3.13 and `numpy > v1.26.0` for
Python 3.12, plus a `numpy` min version bump for `chroma`
3. Speeds up CI by minutes - linting on Python 3.13, installing `numpy <
2.1.0` was taking [~3
minutes](https://github.com/langchain-ai/langchain/actions/runs/14316342925/job/40123305868?pr=30713),
now the entire env setup takes a few seconds
4. Deleted the `numpy` test dependency from partners where that was not
used, specifically `huggingface`, `voyageai`, `xai`, and `nomic`.

It's a bit unfortunate that `langchain-community` depends on `numpy`, we
might want to try to fix that in the future...

Closes https://github.com/langchain-ai/langchain/issues/26026
Fixes https://github.com/langchain-ai/langchain/issues/30555
2025-04-08 09:45:07 -04:00
ccurme
163730aef4 docs: update SQL QA prompt (#30728)
Resolves https://github.com/langchain-ai/langchain/issues/30724

The [prompt in
langchain-hub](https://smith.langchain.com/hub/langchain-ai/sql-query-system-prompt)
used in this guide was composed of just a system message, but the guide
did not add a human message to it. This was incompatible with some
providers (and is generally not a typical usage pattern).

The prompt in prompt hub has been updated to split the question into a
separate HumanMessage. Here we update the guide to reflect this.
2025-04-08 09:42:49 -04:00
湛露先生
9cbe91896e Fix deepseek release tag, as it is update name. (#30717)
Thank you for contributing to LangChain!

- [ ] **PR title**: "package: description"
- Where "package" is whichever of langchain, community, core, etc. is
being modified. Use "docs: ..." for purely docs changes, "infra: ..."
for CI changes.
  - Example: "community: add foobar LLM"


- [ ] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [ ] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [ ] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.
- If you are adding something to community, do not re-import it in
langchain.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.

Signed-off-by: zhanluxianshen <zhanluxianshen@163.com>
2025-04-08 08:43:16 -04:00
Nithish Raghunandanan
893942651b docs: Update couchbase vector store docs (#30710)
-  **Update LangChain-Couchbase documentation**
- Rename `CouchbaseVectorStore` in favor of `CouchbaseSearchVectorStore`

- [x] **Lint and test**
2025-04-07 18:45:14 -04:00
Eugene Yurtsev
3ce0587199 ci: remove unused debug action (#30713)
Removing an unused action
2025-04-07 22:32:37 +00:00
ccurme
a2bec5f2e5 ollama: release 0.3.1 (#30716) 2025-04-07 20:31:25 +00:00
ccurme
e3f15f0a47 ollama[patch]: add model_name to response metadata (#30706)
Fixes [this standard
test](https://python.langchain.com/api_reference/standard_tests/integration_tests/langchain_tests.integration_tests.chat_models.ChatModelIntegrationTests.html#langchain_tests.integration_tests.chat_models.ChatModelIntegrationTests.test_usage_metadata).
2025-04-07 16:27:58 -04:00
ccurme
e106e9602f groq[patch]: add retries to integration tests (#30707)
Tool-calling tests started intermittently failing with
> groq.APIError: Failed to call a function. Please adjust your prompt.
See 'failed_generation' for more details.
2025-04-07 12:45:53 -04:00
aaronlaitner
4f9f97bd12 docs: replaced initialize_agent with create_react_agent in dalle_image_generator.ipynb (#30697)
## Description:

Replaced deprecated 'initialize_agent' with 'create_react_agent' in
dalle_image_generator.ipynb
## Issue:
#29277

## Dependencies:
None

## Twitter handle:
@Thatopman

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-04-07 13:33:52 +00:00
Mohammad Mohtashim
e935da0b12 ChatTongyi reasoning_content fix (#30694)
- **Description:** Small fix for `reasoning_content` key
- **Issue:** #30689
2025-04-07 09:27:33 -04:00
Tin Lai
4d03ba4686 langchain_qdrant: fix showing the missing sparse vector name (#30701)
**Description:** The error message was supposed to display the missing
vector name, but instead, it includes only the existing collection
configs.

This simple PR just includes the correct variable name, so that the user
knows the requested vector does not exist in the collection.

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.
- If you are adding something to community, do not re-import it in
langchain.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.

Signed-off-by: Tin Lai <tin@tinyiu.com>
2025-04-07 09:19:08 -04:00
Eugene Yurtsev
30af9b8166 Update bug-report.yml (#30680)
Update bug report template!
2025-04-04 16:47:50 -04:00
jessicaou
2712ecffeb Update Contributor Docs (#30679)
Deletes statement on integration marketing
2025-04-04 16:35:11 -04:00
Ninad Sinha
a3671ceb71 docs: Add tools for hyperbrowser (#30606)
Description

This PR updates the docs for the
[langchain-hyperbrowser](https://pypi.org/project/langchain-hyperbrowser/)
package. It adds a few tools
 - Scrape Tool
 - Crawl Tool
 - Extract Tool
 - Browser Agents
   - Claude Computer Use
   - OpenAI CUA
   - Browser Use 

[Hyperbrowser](https://hyperbrowser.ai/) is a platform for running and
scaling headless browsers. It lets you launch and manage browser
sessions at scale and provides easy to use solutions for any webscraping
needs, such as scraping a single page or crawling an entire site.

Issue
None

Dependencies
None

Twitter Handle
`@hyperbrowser`
2025-04-04 16:02:47 -04:00
Christophe Bornet
6650b94627 core: Add ruff rules PYI (#29335)
See https://docs.astral.sh/ruff/rules/#flake8-pyi-pyi

---------

Co-authored-by: Eugene Yurtsev <eyurtsev@gmail.com>
2025-04-04 19:59:44 +00:00
Philippe PRADOS
d8e3b7667f community[patch]: Fix empty producer in PDF Parsers (#30620)
Fix an issue where if a pdf file doesn't have a “producer” in metadata, it generates an exception.
2025-04-04 15:53:49 -04:00
Christophe Bornet
f0159c7125 core: Add ruff rules PGH (except PGH003) (#30656)
Add ruff rules PGH: https://docs.astral.sh/ruff/rules/#pygrep-hooks-pgh
Except PGH003 which will be dealt in a dedicated PR.

---------

Co-authored-by: Eugene Yurtsev <eyurtsev@gmail.com>
Co-authored-by: Eugene Yurtsev <eugene@langchain.dev>
2025-04-04 19:53:27 +00:00
Jorge Ángel Juárez Vázquez
2491237473 docs: Add Google Calendar documentation (#30633)
## Docs: Add Google Calendar Toolkit Documentation

### Description:
This PR adds documentation for the Google Calendar Toolkit as part of
the `langchain-google` repository. Refer to the related PR: [community:
Add Google Calendar
Toolkit](https://github.com/langchain-ai/langchain-google/pull/688).

### Issue:
N/A 

### Twitter handle:
@jorgejrzz
2025-04-04 15:53:03 -04:00
Armaanjeet Singh Sandhu
7c2468f36b core: Fix handler removal in BaseCallbackManager (Fixes #30640) (#30659)
**Description:**  
Fixed a bug in `BaseCallbackManager.remove_handler()` that caused a
`ValueError` when removing a handler added via the constructor's
`handlers` parameter. The issue occurred because handlers passed to the
constructor were added only to the `handlers` list and not automatically
to `inheritable_handlers` unless explicitly specified. However,
`remove_handler()` attempted to remove the handler from both lists
unconditionally, triggering a `ValueError` when it wasn't in
`inheritable_handlers`.

The fix ensures the method checks for the handler’s presence in each
list before attempting removal, making it more robust while preserving
its original behavior.

**Issue:** Fixes #30640

**Dependencies:** None

---------

Co-authored-by: Eugene Yurtsev <eyurtsev@gmail.com>
2025-04-04 15:45:15 -04:00
Mohammad Mohtashim
bff56c5fa6 community[patch]: Redundant Parser checker for Webbaseloader (#30632)
- **Description:** We do not need to set parser in `scrape` since it is
already been done in `_scrape`
- **Issue:** #30629, not directly related but makes sure xml parser is
used
2025-04-04 14:11:26 -04:00
Christophe Bornet
150ac0cb79 core: Add ruff rules DTZ (#30657)
Add ruff rules DTZ:
https://docs.astral.sh/ruff/rules/#flake8-datetimez-dtz
2025-04-04 13:43:47 -04:00
Christophe Bornet
5e418c2666 core: Rework pydantic version checks (#30653)
This pull request includes various changes to the `langchain_core`
library, focusing on improving compatibility with different versions of
Pydantic. The primary change involves replacing checks for Pydantic
major versions with boolean flags, which simplifies the code and
improves readability.
This also solves ruff rule checks for
[RUF048](https://docs.astral.sh/ruff/rules/map-int-version-parsing/) and
[PLR2004](https://docs.astral.sh/ruff/rules/magic-value-comparison/).

Key changes include:

### Compatibility Improvements:
*
[`libs/core/langchain_core/output_parsers/json.py`](diffhunk://#diff-5add0cf7134636ae4198a1e0df49ee332ae0c9123c3a2395101e02687c717646L22-R24):
Replaced `PYDANTIC_MAJOR_VERSION` with `IS_PYDANTIC_V1` to check for
Pydantic version 1.
*
[`libs/core/langchain_core/output_parsers/pydantic.py`](diffhunk://#diff-2364b5b4aee01c462aa5dbda5dc3a877dcd20f29df173ad540dc8adf8b192361L14-R14):
Updated version checks from `PYDANTIC_MAJOR_VERSION` to `IS_PYDANTIC_V2`
in the `PydanticOutputParser` class.
[[1]](diffhunk://#diff-2364b5b4aee01c462aa5dbda5dc3a877dcd20f29df173ad540dc8adf8b192361L14-R14)
[[2]](diffhunk://#diff-2364b5b4aee01c462aa5dbda5dc3a877dcd20f29df173ad540dc8adf8b192361L27-R27)

### Utility Enhancements:
*
[`libs/core/langchain_core/utils/pydantic.py`](diffhunk://#diff-ff28020c5f1073a8b63bcd9d8b756a187fd682cb81935295120c63b207071896R23):
Introduced `IS_PYDANTIC_V1` and `IS_PYDANTIC_V2` flags and deprecated
the `get_pydantic_major_version` function. Updated various functions to
use these flags instead of version numbers.
[[1]](diffhunk://#diff-ff28020c5f1073a8b63bcd9d8b756a187fd682cb81935295120c63b207071896R23)
[[2]](diffhunk://#diff-ff28020c5f1073a8b63bcd9d8b756a187fd682cb81935295120c63b207071896R42-R78)
[[3]](diffhunk://#diff-ff28020c5f1073a8b63bcd9d8b756a187fd682cb81935295120c63b207071896L90-R89)
[[4]](diffhunk://#diff-ff28020c5f1073a8b63bcd9d8b756a187fd682cb81935295120c63b207071896L104-R101)
[[5]](diffhunk://#diff-ff28020c5f1073a8b63bcd9d8b756a187fd682cb81935295120c63b207071896L120-R122)
[[6]](diffhunk://#diff-ff28020c5f1073a8b63bcd9d8b756a187fd682cb81935295120c63b207071896L135-R132)
[[7]](diffhunk://#diff-ff28020c5f1073a8b63bcd9d8b756a187fd682cb81935295120c63b207071896L149-R151)
[[8]](diffhunk://#diff-ff28020c5f1073a8b63bcd9d8b756a187fd682cb81935295120c63b207071896L164-R161)
[[9]](diffhunk://#diff-ff28020c5f1073a8b63bcd9d8b756a187fd682cb81935295120c63b207071896L248-R250)
[[10]](diffhunk://#diff-ff28020c5f1073a8b63bcd9d8b756a187fd682cb81935295120c63b207071896L330-R335)
[[11]](diffhunk://#diff-ff28020c5f1073a8b63bcd9d8b756a187fd682cb81935295120c63b207071896L356-R357)
[[12]](diffhunk://#diff-ff28020c5f1073a8b63bcd9d8b756a187fd682cb81935295120c63b207071896L393-R390)
[[13]](diffhunk://#diff-ff28020c5f1073a8b63bcd9d8b756a187fd682cb81935295120c63b207071896L403-R400)

### Test Updates:
*
[`libs/core/tests/unit_tests/output_parsers/test_openai_tools.py`](diffhunk://#diff-694cc0318edbd6bbca34f53304934062ad59ba9f5a788252ce6c5f5452489d67L19-R22):
Updated tests to use `IS_PYDANTIC_V1` and `IS_PYDANTIC_V2` for version
checks.
[[1]](diffhunk://#diff-694cc0318edbd6bbca34f53304934062ad59ba9f5a788252ce6c5f5452489d67L19-R22)
[[2]](diffhunk://#diff-694cc0318edbd6bbca34f53304934062ad59ba9f5a788252ce6c5f5452489d67L532-R535)
[[3]](diffhunk://#diff-694cc0318edbd6bbca34f53304934062ad59ba9f5a788252ce6c5f5452489d67L567-R570)
[[4]](diffhunk://#diff-694cc0318edbd6bbca34f53304934062ad59ba9f5a788252ce6c5f5452489d67L602-R605)
*
[`libs/core/tests/unit_tests/prompts/test_chat.py`](diffhunk://#diff-3e60e744842086a4f3c4b21bc83e819c3435720eab210078e77e2430fb8c7e84R7):
Replaced version tuple checks with `PYDANTIC_VERSION` comparisons.
[[1]](diffhunk://#diff-3e60e744842086a4f3c4b21bc83e819c3435720eab210078e77e2430fb8c7e84R7)
[[2]](diffhunk://#diff-3e60e744842086a4f3c4b21bc83e819c3435720eab210078e77e2430fb8c7e84L35-R38)
[[3]](diffhunk://#diff-3e60e744842086a4f3c4b21bc83e819c3435720eab210078e77e2430fb8c7e84L924-R927)
[[4]](diffhunk://#diff-3e60e744842086a4f3c4b21bc83e819c3435720eab210078e77e2430fb8c7e84L935-R938)
*
[`libs/core/tests/unit_tests/runnables/test_graph.py`](diffhunk://#diff-99a290330ef40103d0ce02e52e21310d6fadea142bfdea13c94d23fc81c0bb5dR3):
Simplified version checks using `PYDANTIC_VERSION`.
[[1]](diffhunk://#diff-99a290330ef40103d0ce02e52e21310d6fadea142bfdea13c94d23fc81c0bb5dR3)
[[2]](diffhunk://#diff-99a290330ef40103d0ce02e52e21310d6fadea142bfdea13c94d23fc81c0bb5dL15-R18)
[[3]](diffhunk://#diff-99a290330ef40103d0ce02e52e21310d6fadea142bfdea13c94d23fc81c0bb5dL234-L239)
*
[`libs/core/tests/unit_tests/runnables/test_runnable.py`](diffhunk://#diff-06bed920c0dad0cfd41d57a8d9e47a7b56832409649c10151061a791860d5bb5L18-R20):
Introduced `PYDANTIC_VERSION_AT_LEAST_29` and
`PYDANTIC_VERSION_AT_LEAST_210` for more readable version checks.
[[1]](diffhunk://#diff-06bed920c0dad0cfd41d57a8d9e47a7b56832409649c10151061a791860d5bb5L18-R20)
[[2]](diffhunk://#diff-06bed920c0dad0cfd41d57a8d9e47a7b56832409649c10151061a791860d5bb5L92-R99)
[[3]](diffhunk://#diff-06bed920c0dad0cfd41d57a8d9e47a7b56832409649c10151061a791860d5bb5L230-R233)
[[4]](diffhunk://#diff-06bed920c0dad0cfd41d57a8d9e47a7b56832409649c10151061a791860d5bb5L652-R655)
2025-04-04 13:42:30 -04:00
Christophe Bornet
43b5dc7191 core: Add ruff rules TD and FIX (#30654)
Add ruff rules:
* FIX: https://docs.astral.sh/ruff/rules/#flake8-fixme-fix
* TD: https://docs.astral.sh/ruff/rules/#flake8-todos-td

Code cleanup:

*
[`libs/core/langchain_core/outputs/chat_generation.py`](diffhunk://#diff-a1017ee46f58fa4005b110ffd4f8e1fb08f6a2a11d6ca4c78ff8be641cbb89e5L56-R56):
Removed the "HACK" prefix from a comment in the `set_text` method.

Configuration adjustments:

*
[`libs/core/pyproject.toml`](diffhunk://#diff-06baaee12b22a370fef9f170c9ed13e2727e377d3b32f5018430f4f0a39d3537R85-R93):
Added new rules `FIX002`, `TD002`, and `TD003` to the ignore list.
*
[`libs/core/pyproject.toml`](diffhunk://#diff-06baaee12b22a370fef9f170c9ed13e2727e377d3b32f5018430f4f0a39d3537L102-L108):
Removed the `FIX` and `TD` rules from the ignore list.

Test refinement:

*
[`libs/core/tests/unit_tests/runnables/test_runnable.py`](diffhunk://#diff-06bed920c0dad0cfd41d57a8d9e47a7b56832409649c10151061a791860d5bb5L3231-R3232):
Updated a TODO comment to improve clarity in the `test_map_stream`
function.
2025-04-04 13:40:42 -04:00
ccurme
a007c57285 docs: update package registry sort order (#30677) 2025-04-04 13:12:39 -04:00
Sydney Runkle
33ed7c31da docs: fix perplexity install instructions in ChatPerplexity docstring (#30676)
* `openai` install no longer needs to be done manually
2025-04-04 12:58:18 -04:00
Dhruvajyoti Sarma
f9bb5ec5d0 feature: removed pandas dataframe dependency for similary_search when using DuckDB as vector store (#30445)
- [ ] **PR title**: "community: Removes pandas dependency for using
DuckDB for similarity search"


- [ ] **PR message**: 
- **Description:** Removes pandas dependency for using DuckDB for
similarity search. The old function still exists as
`similarity_search_pd`, while the new one is at `similarity_search` and
requires no code changes. Return format remains the same.
    - **Issue:** Issue #29933 and update on PR #30435 
    - **Dependencies:** No dependencies
2025-04-04 12:19:18 -04:00
Akshay Dongare
f79473b752 Solved issue Implement langchain-litellm #30368 (#30637)
**PR title**: 
- [x] 1. docs: docs/docs/integrations/providers/LiteLLM.md
- [x] 2. docs: docs/docs/integrations/chat/litellm.ipynb
- [x] 3. libs: libs/packages.yml

- [x] **PR message**:
    - **Description:** Implement langchain-litellm
    - **Issue:** the issue #30368 
    - **Twitter handle:** akshay_d02
    - **LinkedIn Handle** https://linkedin.com/in/akshay-dongare 

- [x] **Add tests and docs**: Done

- [x] **Lint and test**: Done

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-04-04 16:12:10 +00:00
Yiğit Bekir Kaya, PhD
87e82fe1e8 Added langchain-qwq package documentation (Alibaba Cloud) (#30628)
LangChain QwQ allows non-Tongyi users to access thinking models with
extra capabilities which serve as an extension to Alibaba Cloud.

Hi @ccurme I'm back with the updated PR this time with documentation and
a finished package.

- [x] **PR title**: "package: description"
- Where "package" is whichever of langchain, community, core, etc. is
being modified. Use "docs: ..." for purely docs changes, "infra: ..."
for CI changes.
  - Example: "community: add foobar LLM"



- **Description:** adds documentation of `langchain-qwq` integration
package. Also adds it to Alibaba Cloud provider
- **Issue:** #30580 #30317 #30579
- **Dependencies:** openai, json-repair
- **Twitter handle:** YigitBekir


- [x] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [x] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.
- If you are adding something to community, do not re-import it in
langchain.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
2025-04-04 11:47:14 -04:00
Andrew Benton
4e7a9a7014 community: Add support for custom runtimes to Riza tools (#30664)
**Description:**
Adds support for Riza custom runtimes to the two Riza code interpreter
tools, allowing users to run LLM-generated code that depends on
libraries outside stdlib.
**Issue:** N/A
**Dependencies:** None
**Twitter handle:** @rizaio
2025-04-04 11:03:14 -04:00
diego dupin
aa37893c00 MariaDB vector store documentation addition (#30229)
### New Feature

Since version 11.7.1, MariaDB support vector. This is a super fast
implementation (see [some perf
blog](https://smalldatum.blogspot.com/2025/01/evaluating-vector-indexes-in-mariadb.html)
The goal is to support MariaDB with langchain

Implementation is done in
https://github.com/mariadb-corporation/langchain-mariadb, published in
https://pypi.org/project/langchain-mariadb/

This concerns the doc addition
 

(initial PR https://github.com/langchain-ai/langchain/pull/29989)

---------

Co-authored-by: ccurme <chester.curme@gmail.com>
Co-authored-by: Oskar Stark <oskarstark@googlemail.com>
2025-04-04 14:56:25 +00:00
Sydney Runkle
1cdea6ab07 langchain-community: release 0.3.21 (#30673) 2025-04-04 14:14:50 +00:00
Sydney Runkle
901dffe06b langchain: release 0.3.23 (#30670)
* Bump `text-splitters` min version
* Bump `langchain-core` min version
* Bump `langchain` version 🚀
2025-04-04 10:06:29 -04:00
ccurme
0c2c8c36c1 text-splitters: release 0.3.8 (#30671) 2025-04-04 09:58:45 -04:00
ccurme
59d508a2ee openai[patch]: make computer test more reliable (#30672) 2025-04-04 13:53:59 +00:00
Sydney Runkle
c235328b39 Revert "update langchain version and bump min core v"
This reverts commit d0f154dbaa.
2025-04-04 09:31:51 -04:00
Sydney Runkle
d0f154dbaa update langchain version and bump min core v 2025-04-04 09:27:49 -04:00
Sydney Runkle
32cd70d7d2 release: bump core to v0.3.51 (#30668) 2025-04-04 13:23:09 +00:00
Max Forsey
18cf457eec langchain-runpod integration (#30648)
## Description:

This PR adds the necessary documentation for the `langchain-runpod`
partner package integration. It includes:

* A provider page (`docs/docs/integrations/providers/runpod.ipynb`)
explaining the overall setup.
* An LLM component page (`docs/docs/integrations/llms/runpod.ipynb`)
detailing the `RunPod` class usage.
* A Chat Model component page
(`docs/docs/integrations/chat/runpod.ipynb`) detailing the `ChatRunPod`
class usage, including a feature support table.

These documentation files reflect the latest features of the
`langchain-runpod` package (v0.2.0+) such as async support and API
polling logic.

This work also addresses the review feedback provided on the previous
attempt in PR #30246 by:
*   Removing all TODOs from documentation.
*   Adding the required links between provider and component pages.
*   Completing the feature support table in the chat documentation.
*   Linking to the source code on GitHub for API reference.

Finally, it registers the `langchain-runpod` package in
`libs/packages.yml`.

## Dependencies:

None added to the core LangChain repository by these documentation
changes. The required dependency (`langchain-runpod`) is managed as a
separate package.

## Twitter handle:

@runpod_io

---------

Co-authored-by: Max Forsey <maxpod@maxpod.local>
Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-04-03 23:57:06 +00:00
NikeHop
9c03cd5775 Fix tool description in serpapi.ipynb (#30660)
Thank you for contributing to LangChain!

- [x] Fix Tool description of SerpAPI tool: "docs: Fix SerpAPI tool
description"



- [ ] Fix SerpAPI tool description: 
- Tool description + name in example initialization of the SerpAPI tool
was still that of the python repl tool.
    - @RLHoeppi

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-04-03 23:36:29 +00:00
Sydney Runkle
af66ab098e Adding Perplexity extra and deprecating the community version of ChatPerplexity (#30649)
Plus, some accompanying docs updates

Some compelling usage:

```py
from langchain_perplexity import ChatPerplexity


chat = ChatPerplexity(model="llama-3.1-sonar-small-128k-online")
response = chat.invoke(
    "What were the most significant newsworthy events that occurred in the US recently?",
    extra_body={"search_recency_filter": "week"},
)
print(response.content)
# > Here are the top significant newsworthy events in the US recently: ...
```

Also, some confirmation of structured outputs:

```py
from langchain_perplexity import ChatPerplexity
from pydantic import BaseModel


class AnswerFormat(BaseModel):
    first_name: str
    last_name: str
    year_of_birth: int
    num_seasons_in_nba: int


messages = [
    {"role": "system", "content": "Be precise and concise."},
    {
        "role": "user",
        "content": (
            "Tell me about Michael Jordan. "
            "Please output a JSON object containing the following fields: "
            "first_name, last_name, year_of_birth, num_seasons_in_nba. "
        ),
    },
]

llm = ChatPerplexity(model="llama-3.1-sonar-small-128k-online")
structured_llm = llm.with_structured_output(AnswerFormat)
response = structured_llm.invoke(messages)
print(repr(response))
#> AnswerFormat(first_name='Michael', last_name='Jordan', year_of_birth=1963, num_seasons_in_nba=15)
```
2025-04-03 14:29:17 -04:00
ccurme
b8929e3d5f docs: add image generation example to Google genai docs (#30650) 2025-04-03 14:21:54 -04:00
ccurme
374769e8fe core[patch]: log information from certain errors (#30626)
Some exceptions raised by SDKs include information in httpx responses
(see for example
[OpenAI](https://github.com/openai/openai-python/blob/main/src/openai/_exceptions.py)).
Here we trace information from those exceptions.

---------

Co-authored-by: Bagatur <baskaryan@gmail.com>
2025-04-03 16:45:19 +00:00
Sydney Runkle
17a9cd61e9 Bump langchain-core version in perplexity's pyproject.toml (#30647)
Blocking v0.1.0 release of `langchain-perplexity`
2025-04-03 16:19:10 +00:00
Sydney Runkle
3814bd1ea7 partners: Add Perplexity Chat Integration (#30618)
Perplexity's importance in the space has been growing, so we think it's
time to add an official integration!

Note: following the release of `langchain-perplexity` to `pypi`, we
should be able to add `perplexity` as an extra in
`libs/langchain/pyproject.toml`, but we're blocked by a circular import
for now.

---------

Co-authored-by: Eugene Yurtsev <eyurtsev@gmail.com>
Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-04-03 16:09:14 +00:00
vgrfl
87c02a1aff docs: Fixed a typo in 'Google AI vs Google Cloud Vertex AI' section (#30642)
**Description:** Corrected 'encription' spelling to 'encryption'
2025-04-03 09:04:29 -04:00
Alejandro Rodríguez
884125e129 community: support usage_metadata for litellm (#30625)
Support "usage_metadata" for LiteLLM. 

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
2025-04-02 19:45:15 -04:00
Jacob Lee
01d0cfe450 docs: Remove TODO from Ollama docs page (#30627) 2025-04-02 22:59:15 +00:00
Christophe Bornet
f241fd5c11 core: Add ruff rules RET (#29384)
See https://docs.astral.sh/ruff/rules/#flake8-return-ret
All auto-fixes
2025-04-02 16:59:56 -04:00
Eugene Yurtsev
9ae792f56c core: 0.3.50 release (#30623)
0.3.50 release
2025-04-02 14:46:23 -04:00
Christophe Bornet
ccc3d32ec8 core: Add ruff rules for Pylint PLC (Convention) and PLE (Errors) (#29286)
See https://docs.astral.sh/ruff/rules/#pylint-pl
2025-04-02 10:58:03 -04:00
ccurme
fe0fd9dd70 openai[patch]: upgrade tiktoken and fix test (#30621)
Related to https://github.com/langchain-ai/langchain/issues/30344

https://github.com/langchain-ai/langchain/pull/30542 introduced an
erroneous test for token counts for o-series models. tiktoken==0.8 does
not support o-series models in
`tiktoken.encoding_for_model(model_name)`, and this is the version of
tiktoken we had in the lock file. So we would default to `cl100k_base`
for o-series, which is the wrong encoding model. The test tested against
this wrong encoding (so it passed with tiktoken 0.8).

Here we update tiktoken to 0.9 in the lock file, and fix the expected
counts in the test. Verified that we are pulling
[o200k_base](https://github.com/openai/tiktoken/blob/main/tiktoken/model.py#L8),
as expected.
2025-04-02 10:44:48 -04:00
oxy-tg
38807871ec docs: Add Oxylabs integration (#30591)
Description:
This PR adds documentation for the langchain-oxylabs integration
package.

The documentation includes instructions for configuring Oxylabs
credentials and provides example code demonstrating how to use the
package.

Issue:
N/A

Dependencies:
No new dependencies are required.

Tests and Docs:

Added an example notebook demonstrating the usage of the
Langchain-Oxylabs package, located in docs/docs/integrations.
Added a provider page in docs/docs/providers.
Added a new package to libs/packages.yml.

Lint and Test:

Successfully ran make format, make lint, and make test.
2025-04-02 14:40:32 +00:00
ccurme
816492e1d3 openai: release 0.3.12 (#30616) 2025-04-02 13:20:15 +00:00
Bagatur
111dd90a46 openai[patch]: support structured output and tools (#30581)
Co-authored-by: ccurme <chester.curme@gmail.com>
2025-04-02 09:14:02 -04:00
Karol Zmorski
32f7695809 docs: Little update in sample notebook with WatsonxToolkit (#30614)
**Description:**

- Updated sample notebook with valid tools.
2025-04-02 09:08:29 -04:00
Mahir Shah
9d3262c7aa core: Propagate config_factories in RunnableBinding (#30603)
- **Description:** Propagates config_factories when calling decoration
methods for RunnableBinding--e.g. bind, with_config, with_types,
with_retry, and with_listeners. This ensures that configs attached to
the original RunnableBinding are kept when creating the new
RunnableBinding and the configs are merged during invocation. Picks up
where #30551 left off.
  - **Issue:** #30531

Co-authored-by: ccurme <chester.curme@gmail.com>
2025-04-01 18:03:58 -04:00
ccurme
8a69de5c24 openai[patch]: ignore file blocks when counting tokens (#30601)
OpenAI does not appear to document how it transforms PDF pages to
images, which determines how tokens are counted:
https://platform.openai.com/docs/guides/pdf-files?api-mode=chat#usage-considerations

Currently these block types raise ValueError inside
`get_num_tokens_from_messages`. Here we update to generate a warning and
continue.
2025-04-01 15:29:33 -04:00
Christophe Bornet
558191198f core: Add ruff rule FBT003 (boolean-trap) (#29424)
See
https://docs.astral.sh/ruff/rules/boolean-positional-value-in-call/#boolean-positional-value-in-call-fbt003
This PR also fixes some FBT001/002 in private methods but does not
enforce these rules globally atm.

Co-authored-by: Eugene Yurtsev <eyurtsev@gmail.com>
2025-04-01 17:40:12 +00:00
Christophe Bornet
4f8ea13cea core: Add ruff rules PERF (#29375)
See https://docs.astral.sh/ruff/rules/#perflint-perf
2025-04-01 13:34:56 -04:00
Christophe Bornet
8a33402016 core: Add ruff rules PT (pytest) (#29381)
See https://docs.astral.sh/ruff/rules/#flake8-pytest-style-pt
2025-04-01 13:31:07 -04:00
Ben Faircloth
6896c863e8 docs: add seekrflow chat model integration docs (#30596)
### **PR title**  
`docs: add SeekrFlow integration notebook`

---

### 💬 **PR message**  
- **Description:**  
This PR adds an integration notebook for
[`[ChatSeekrFlow](https://pypi.org/project/langchain-seekrflow/)`](https://pypi.org/project/langchain-seekrflow/)
under `docs/docs/integrations/chat/`. Per LangChain’s guidance,
SeekrFlow has been published as a standalone OSS package
(`langchain-seekrflow`) rather than as a direct community integration.
This notebook ensures discoverability, demonstration, and testability of
the integration within LangChain’s documentation structure.

- **Issue:**  
N/A – this is a new integration contribution aligned with LangChain’s
external package policy.

- **Dependencies:**  
-
[`[langchain-seekrflow](https://pypi.org/project/langchain-seekrflow)`](https://pypi.org/project/langchain-seekrflow)
(published to PyPI)
-
[`[seekrai](https://pypi.org/project/seekrai/)`](https://pypi.org/project/seekrai/)
(SeekrFlow client SDK)

- **Twitter handle (optional):**  
  @seekrtechnology

---------

Co-authored-by: Ben Faircloth <bfaircloth@seekr.com>
Co-authored-by: Eugene Yurtsev <eyurtsev@gmail.com>
2025-04-01 13:18:01 -04:00
Christophe Bornet
768e4f695a core: Add ruff rules S110 and S112 (#30599) 2025-04-01 13:17:22 -04:00
Christophe Bornet
88b4233fa1 core: Add ruff rules D (docstring) (#29406)
This ensures that the code is properly documented:
https://docs.astral.sh/ruff/rules/#pydocstyle-d

Related to #21983
2025-04-01 13:15:45 -04:00
Andras L Ferenczi
64df60e690 community[minor]: Add custom sitemap URL parameter to GitbookLoader (#30549)
## Description
This PR adds a new `sitemap_url` parameter to the `GitbookLoader` class
that allows users to specify a custom sitemap URL when loading content
from a GitBook site. This is particularly useful for GitBook sites that
use non-standard sitemap file names like `sitemap-pages.xml` instead of
the default `sitemap.xml`.
The standard `GitbookLoader` assumes that the sitemap is located at
`/sitemap.xml`, but some GitBook instances (including GitBook's own
documentation) use different paths for their sitemaps. This parameter
makes the loader more flexible and helps users extract content from a
wider range of GitBook sites.
## Issue
Fixes bug
[30473](https://github.com/langchain-ai/langchain/issues/30473) where
the `GitbookLoader` would fail to find pages on GitBook sites that use
custom sitemap URLs.
## Dependencies
No new dependencies required.
*I've added*:
* Unit tests to verify the parameter works correctly
* Integration tests to confirm the parameter is properly used with real
GitBook sites
* Updated docstrings with parameter documentation
The changes are fully backward compatible, as the parameter is optional
with a sensible default.

---------

Co-authored-by: andrasfe <andrasf94@gmail.com>
Co-authored-by: Eugene Yurtsev <eugene@langchain.dev>
2025-04-01 16:17:21 +00:00
Christophe Bornet
fdda1aaea1 core: Accept ALL ruff rules with exclusions (#30595)
This pull request updates the `pyproject.toml` configuration file to
modify the linting rules and ignored warnings for the project. The most
important changes include switching to a more comprehensive selection of
linting rules and updating the list of ignored rules to better align
with the project's requirements.

Linting rules update:

* Changed the `select` option to include all available linting rules by
setting it to `["ALL"]`.

Ignored rules update:

* Updated the `ignore` option to include specific rules that interfere
with the formatter, are incompatible with Pydantic, or are temporarily
excluded due to project constraints.
2025-04-01 11:17:51 -04:00
Kacper Włodarczyk
26a3256fc6 community[major]: DynamoDBChatMessageHistory bulk add messages, raise errors (#30572)
This PR addresses two key issues:

- **Prevent history errors from failing silently**: Previously, errors
in message history were only logged and not raised, which can lead to
inconsistent state and downstream failures (e.g., ValidationError from
Bedrock due to malformed message history). This change ensures that such
errors are raised explicitly, making them easier to detect and debug.
(Side note: I’m using AWS Lambda Powertools Logger but hadn’t configured
it properly with the standard Python logger—my bad. If the error had
been raised, I would’ve seen it in the logs 😄) This is a **BREAKING
CHANGE**

- **Add messages in bulk instead of iteratively**: This introduces a
custom add_messages method to add all messages at once. The previous
approach failed silently when individual messages were too large,
resulting in partial history updates and inconsistent state. With this
change, either all messages are added successfully, or none are—helping
avoid obscure history-related errors from Bedrock.

---------

Co-authored-by: Kacper Wlodarczyk <kacper.wlodarczyk@chaosgears.com>
2025-04-01 11:13:32 -04:00
Olexandr88
8c8bca68b2 docs: edited the badge to an acceptable size (#30586)
Thank you for contributing to LangChain!

- [ ] **PR title**: "package: description"
- Where "package" is whichever of langchain, community, core, etc. is
being modified. Use "docs: ..." for purely docs changes, "infra: ..."
for CI changes.
  - Example: "community: add foobar LLM"


- [ ] **PR message**: ***Delete this entire checklist*** and replace
with
    - **Description:** a description of the change
    - **Issue:** the issue # it fixes, if applicable
    - **Dependencies:** any dependencies required for this change
- **Twitter handle:** if your PR gets announced, and you'd like a
mention, we'll gladly shout you out!


- [ ] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [ ] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional
ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.
- If you are adding something to community, do not re-import it in
langchain.

If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
2025-04-01 07:17:12 -04:00
Armaanjeet Singh Sandhu
4bbc249b13 community: Fix attribute access for transcript text in YoutubeLoader (Fixes #30309) (#30582)
**Description:** 
Fixes a bug in the YoutubeLoader where FetchedTranscript objects were
not properly processed. The loader was only extracting the 'text'
attribute from FetchedTranscriptSnippet objects while ignoring 'start'
and 'duration' attributes. This would cause a TypeError when the code
later tried to access these missing keys, particularly when using the
CHUNKS format or any code path that needed timestamp information.

This PR modifies the conversion of FetchedTranscriptSnippet objects to
include all necessary attributes, ensuring that the loader works
correctly with all transcript formats.

**Issue:** Fixes #30309

**Dependencies:** None

**Testing:**
- Tested the fix with multiple YouTube videos to confirm it resolves the
issue
- Verified that both regular loading and CHUNKS format work correctly
2025-04-01 07:13:06 -04:00
Ivan Brko
ecff055096 community[minor]: Improve Brave Search Tool, allow api key in env var (#30364)
- **Description:** 

- Make Brave Search Tool consistent with other tools and allow reading
its api key from `BRAVE_SEARCH_API_KEY` instead of having to pass the
api key manually (no breaking changes)
- Improve Brave Search Tool by storing api key in `SecretStr` instead of
plain `str`.
    - Add unit test for `BraveSearchWrapper`
    - Reflect the changes in the documentation
  - **Issue:** N/A
  - **Dependencies:** N/A
  - **Twitter handle:** ivan_brko
2025-03-31 14:48:52 -04:00
ccurme
0c623045b5 core[patch]: pydantic 2.11 compat (#30554)
Release notes: https://pydantic.dev/articles/pydantic-v2-11-release

Covered here:

- We no longer access `model_fields` on class instances (that is now
deprecated);
- Update schema normalization for Pydantic version testing to reflect
changes to generated JSON schema (addition of `"additionalProperties":
True` for dict types with value Any or object).

## Considerations:

### Changes to JSON schema generation

#### Tool-calling / structured outputs

This may impact tool-calling + structured outputs for some providers,
but schema generation only changes if you have parameters of the form
`dict`, `dict[str, Any]`, `dict[str, object]`, etc. If dict parameters
are typed my understanding is there are no changes.

For OpenAI for example, untyped dicts work for structured outputs with
default settings before and after updating Pydantic, and error both
before/after if `strict=True`.

### Use of `model_fields`

There is one spot where we previously accessed `super(cls,
self).model_fields`, where `cls` is an object in the MRO. This was done
for the purpose of tracking aliases in secrets. I've updated this to
always be `type(self).model_fields`-- see comment in-line for detail.

---------

Co-authored-by: Sydney Runkle <54324534+sydney-runkle@users.noreply.github.com>
2025-03-31 14:22:57 -04:00
keshavshrikant
e8be3cca5c fix huggingface tokenizer default length function (#30185)
#30184
2025-03-31 11:54:30 -04:00
Fai LAW
4419340039 docs: add pre_filter usage in similarity_search_with_score (Azure Cosmos DB No SQL) (#30508)
`pre_filter` should be passed in the `Hybrid Search with filtering`
example. Otherwise, it is just an unused variable.
2025-03-31 11:33:00 -04:00
Wenqi Li
64f97e707e ollama[patch]: Support seed param for OllamaLLM (#30553)
**Description:** a description of the change
add the seed param for OllamaLLM client reproducibility

**Issue:** the issue # it fixes, if applicable
follow up of a similar issue
https://github.com/langchain-ai/langchain/issues/24703
see also https://github.com/langchain-ai/langchain/pull/24782

**Dependencies:** any dependencies required for this change
n/a
2025-03-31 11:28:49 -04:00
Christophe Bornet
8395abbb42 core: Fix test_stream_error_callback (#30228)
Fixes #29436

---------

Co-authored-by: Eugene Yurtsev <eyurtsev@gmail.com>
2025-03-31 10:37:22 -04:00
Jorge Piedrahita Ortiz
b9e19c5f97 Docs: Add sambanova cloud embeddings docs (#30525)
- **Description:** Add samba nova cloud embeddings docs, only
samabastudio embeddings were supported, now in the latest release of
langchan_sambanova sambanova cloud embeddings is also available
2025-03-31 10:16:15 -04:00
Augusto César Perin
f4d1df1b2d docs: add missing with_config method to Runnable templates API reference (#30560)
Broken source/docs links for Runnable methods

### What was changed
Added the `with_config` method to the method lists in both Runnable
template files:
- docs/api_reference/templates/runnable_non_pydantic.rst
- docs/api_reference/templates/runnable_pydantic.rst
2025-03-31 10:08:02 -04:00
Christophe Bornet
026de908eb core: Add ruff rules G, FA, INP, AIR and ISC (#29334)
Fixes mostly for rules G. See
https://docs.astral.sh/ruff/rules/#flake8-logging-format-g
2025-03-31 10:05:23 -04:00
Brayden Zhong
e4515f308f community: update RankLLM integration and fix LangChain deprecation (#29931)
# Community: update RankLLM integration and fix LangChain deprecation

- [x] **Description:**  
- Removed `ModelType` enum (`VICUNA`, `ZEPHYR`, `GPT`) to align with
RankLLM's latest implementation.
- Updated `chain({query})` to `chain.invoke({query})` to resolve
LangChain 0.1.0 deprecation warnings from
https://github.com/langchain-ai/langchain/pull/29840.

- [x] **Dependencies:** No new dependencies added.  

- [x] **Tests and Docs:**  
- Updated RankLLM documentation
(`docs/docs/integrations/document_transformers/rankllm-reranker.ipynb`).
  - Fixed LangChain usage in related code examples.  

- [x] **Lint and Test:**  
- Ran `make format`, `make lint`, and verified functionality after
updates.
  - No breaking changes introduced.  

```
Additional guidelines:
- Make sure optional dependencies are imported within a function.
- Please do not add dependencies to pyproject.toml files (even optional ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.
- If you are adding something to community, do not re-import it in langchain.

If no one reviews your PR within a few days, please @-mention one of baskaryan, efriis, eyurtsev, ccurme, vbarda, hwchase17.
```

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
2025-03-31 09:50:00 -04:00
ccurme
b4fe1f1ec0 groq: release 0.3.2 (#30570) 2025-03-31 13:29:45 +00:00
Karol Zmorski
c1acf6f756 docs: Add docs for WatsonxToolkit from langchain-ibm (#30340)
**Description:**

Added docs for `WatsonxToolkit` from `langchain-ibm`:
- Sample notebook

Updated provider file: `ibm.mdx`.
2025-03-31 09:18:37 -04:00
ccurme
9213d94057 docs: update cassettes for chat token usage tracking guide (#30558) 2025-03-30 14:57:15 -04:00
ccurme
9c682af8f3 langchain: release 0.3.22 (#30557)
Closes https://github.com/langchain-ai/langchain/issues/30536
2025-03-30 14:48:22 -04:00
ccurme
08796802ca docs: keep tutorial runnable in CI (#30556) 2025-03-30 18:34:05 +00:00
William FH
b075eab3e0 Include delayed inputs in langchain tracer (#30546) 2025-03-28 16:07:22 -07:00
Thommy257
372dc7f991 core[patch]: fix loss of partially initialized variables during prompt composition (#30096)
**Description:**
This PR addresses the loss of partially initialised variables when
composing different prompts. I.e. it allows the following snippet to
run:

```python
from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages([('system', 'Prompt {x} {y}')]).partial(x='1')
appendix = ChatPromptTemplate.from_messages([('system', 'Appendix {z}')])

(prompt + appendix).invoke({'y': '2', 'z': '3'})
```

Previously, this would have raised a `KeyError`, stating that variable
`x` remains undefined.

**Issue**
References issue #30049

**Todo**
- [x] **Add tests and docs**: If you're adding a new integration, please
include
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.


- [x] **Lint and test**: Run `make format`, `make lint` and `make test`
from the root of the package(s) you've modified. See contribution
guidelines for more: https://python.langchain.com/docs/contributing/

---------

Co-authored-by: Eugene Yurtsev <eyurtsev@gmail.com>
2025-03-28 20:41:57 +00:00
Koshik Debanath
e7883d5b9f langchain-openai: Support token counting for o-series models in ChatOpenAI (#30542)
Related to #30344

Add support for token counting for o-series models in
`test_token_counts.py`.

* **Update `_MODELS` and `_CHAT_MODELS` dictionaries**
- Add "o1", "o3", and "gpt-4o" to `_MODELS` and `_CHAT_MODELS`
dictionaries.

* **Update token counts**
  - Add token counts for "o1", "o3", and "gpt-4o" models.

---

For more details, open the [Copilot Workspace
session](https://copilot-workspace.githubnext.com/langchain-ai/langchain/pull/30542?shareId=ab208bf7-80a3-4b8d-80c4-2287486fedae).
2025-03-28 16:02:09 -04:00
Eugene Yurtsev
d075ad21a0 core[patch]: specify default event loop scope in pyproject.toml (#30543)
Specify default event loop scope
2025-03-28 19:51:19 +00:00
Ahmed Tammaa
f23c3e2444 text-splitters[patch]: Refactor HTMLHeaderTextSplitter for Enhanced Maintainability and Readability (#29397)
Please see PR #27678 for context

## Overview

This pull request presents a refactor of the `HTMLHeaderTextSplitter`
class aimed at improving its maintainability and readability. The
primary enhancements include simplifying the internal structure by
consolidating multiple private helper functions into a single private
method, thereby reducing complexity and making the codebase easier to
understand and extend. Importantly, all existing functionalities and
public interfaces remain unchanged.

## PR Goals

1. **Simplify Internal Logic**:
- **Consolidation of Private Methods**: The original implementation
utilized multiple private helper functions (`_header_level`,
`_dom_depth`, `_get_elements`) to manage different aspects of HTML
parsing and document generation. This fragmentation increased cognitive
load and potential maintenance overhead.
- **Streamlined Processing**: By merging these functionalities into a
single private method (`_generate_documents`), the class now offers a
more straightforward flow, making it easier for developers to trace and
understand the processing steps. (Thanks to @eyurtsev)

2. **Enhance Readability**:
- **Clearer Method Responsibilities**: With fewer private methods, each
method now has a more focused responsibility. The primary logic resides
within `_generate_documents`, which handles both HTML traversal and
document creation in a cohesive manner.
- **Reduced Redundancy**: Eliminating redundant checks and consolidating
logic reduces the code's verbosity, making it more concise without
sacrificing clarity.

3. **Improve Maintainability**:
- **Easier Debugging and Extension**: A simplified internal structure
allows for quicker identification of issues and easier implementation of
future enhancements or feature additions.
- **Consistent Header Management**: The new implementation ensures that
headers are managed consistently within a single context, reducing the
likelihood of bugs related to header scope and hierarchy.

4. **Maintain Backward Compatibility**:
- **Unchanged Public Interface**: All public methods (`split_text`,
`split_text_from_url`, `split_text_from_file`) and their signatures
remain unchanged, ensuring that existing integrations and usage patterns
are unaffected.
- **Preserved Docstrings**: Comprehensive docstrings are retained,
providing clear documentation for users and developers alike.

## Detailed Changes

1. **Removed Redundant Private Methods**:
- **Eliminated `_header_level`, `_dom_depth`, and `_get_elements`**:
These methods were merged into the `_generate_documents` method,
centralizing the logic for HTML parsing and document generation.

2. **Consolidated Document Generation Logic**:
- **Single Private Method `_generate_documents`**: This method now
handles the entire process of parsing HTML, tracking active headers,
managing document chunks, and yielding `Document` instances. This
consolidation reduces the number of moving parts and simplifies the
overall processing flow.

3. **Simplified Header Management**:
- **Immediate Header Scope Handling**: Headers are now managed within
the traversal loop of `_generate_documents`, ensuring that headers are
added or removed from the active headers dictionary in real-time based
on their DOM depth and hierarchy.
- **Removed `chunk_dom_depth` Attribute**: The need to track chunk DOM
depth separately has been eliminated, as header scopes are now directly
managed within the traversal logic.

4. **Streamlined Chunk Finalization**:
- **Enhanced `finalize_chunk` Function**: The chunk finalization process
has been simplified to directly yield a single `Document` when needed,
without maintaining an intermediate list. This change reduces
unnecessary list operations and makes the logic more straightforward.

5. **Improved Variable Naming and Flow**:
- **Descriptive Variable Names**: Variables such as `current_chunk` and
`node_text` provide clear insights into their roles within the
processing logic.
- **Direct Header Removal Logic**: Headers that are out of scope are
removed immediately during traversal, ensuring that the active headers
dictionary remains accurate and up-to-date.

6. **Preserved Comprehensive Docstrings**:
- **Unchanged Documentation**: All existing docstrings, including
class-level and method-level documentation, remain intact. This ensures
that users and developers continue to have access to detailed usage
instructions and method explanations.

## Testing

All existing test cases from `test_html_header_text_splitter.py` have
been executed against the refactored code. The results confirm that:

- **Functionality Remains Intact**: The splitter continues to accurately
parse HTML content, respect header hierarchies, and produce the expected
`Document` objects with correct metadata.
- **Backward Compatibility is Maintained**: No changes were required in
the test cases, and all tests pass without modifications, demonstrating
that the refactor does not introduce any regressions or alter existing
behaviors.


This example remains fully operational and behaves as before, returning
a list of `Document` objects with the expected metadata and content
splits.

## Conclusion

This refactor achieves a more maintainable and readable codebase by
simplifying the internal structure of the `HTMLHeaderTextSplitter`
class. By consolidating multiple private methods into a single, cohesive
private method, the class becomes easier to understand, debug, and
extend. All existing functionalities are preserved, and comprehensive
tests confirm that the refactor maintains the expected behavior. These
changes align with LangChain’s standards for clean, maintainable, and
efficient code.

---

---------

Co-authored-by: Eugene Yurtsev <eyurtsev@gmail.com>
2025-03-28 15:36:00 -04:00
Christophe Bornet
86beb64b50 docs: Add doc for Vectorize provider (#30436)
This pull request adds documentation and a tutorial for integrating the
[Vectorize](https://vectorize.io/) service with LangChain. The most
important changes include adding a new documentation page for Vectorize
and creating a Jupyter notebook that demonstrates how to use the
Vectorize retriever.

The source code for the langchain-vectorize package can be found
[here](https://github.com/vectorize-io/integrations-python/tree/main/langchain).

Previews:
*
https://langchain-git-fork-cbornet-vectorize-langchain.vercel.app/docs/integrations/providers/vectorize/
*
https://langchain-git-fork-cbornet-vectorize-langchain.vercel.app/docs/integrations/retrievers/vectorize/

Documentation updates:

*
[`docs/docs/integrations/providers/vectorize.mdx`](diffhunk://#diff-7e00d4ce4768f73b4d381a7c7b1f94d138f1b27ebd08e3666b942630a0285606R1-R40):
Added a new documentation page for Vectorize, including an overview of
its features, installation instructions, and a basic usage example.

Tutorial updates:

*
[`docs/docs/integrations/retrievers/vectorize.ipynb`](diffhunk://#diff-ba5bb9a1b4586db7740944b001bcfeadc88be357640ded0c82a329b11d8d6e29R1-R294):
Created a Jupyter notebook tutorial that shows how to set up the
Vectorize environment, create a RAG pipeline, and use the LangChain
Vectorize retriever. The notebook includes steps for account creation,
token generation, environment setup, and pipeline deployment.
2025-03-28 15:25:21 -04:00
omahs
6f8735592b docs,langchain-community: Fix typos in docs and code (#30541)
Fix typos
2025-03-28 19:21:16 +00:00
Agus
47d50f49d9 docs: Add GOAT integration to docs (#30478)
This PR adds:
1. Docs for the GOAT integration 
2. An "Agentic Finance" table to the Tools page that includes GOAT

**Twitter handle**: @0xaguspunk
2025-03-28 15:19:37 -04:00
Shixian Sheng
94a7fd2497 docs: fix broken hyperlinks in fireworks integration package README (#30538)
Fix two broken hyperlinks
2025-03-28 15:18:44 -04:00
Oskar Stark
0d2cea747c docs: streamline LangSmith teasing (#30302)
This can only be reviewed by [hiding
whitespaces](https://github.com/langchain-ai/langchain/pull/30302/files?diff=unified&w=1).

The motivation behind this PR is to get my hands on the docs and make
the LangSmith teasing short and clear.

Right now I don't know how to do it, but this could be an include in the
future.

---------

Co-authored-by: Eugene Yurtsev <eyurtsev@gmail.com>
2025-03-28 15:13:22 -04:00
Eugene Yurtsev
dd0faab07e fix types 2025-03-28 14:23:50 -04:00
Eugene Yurtsev
21ab1dc675 Merge branch 'master' of github.com:xzq-xu/langchain into xzq-xu/master 2025-03-28 13:56:49 -04:00
Eugene Yurtsev
22cee5d983 x 2025-03-28 13:56:10 -04:00
Eugene Yurtsev
a14d8b103b Merge branch 'master' into master 2025-03-28 13:53:58 -04:00
Eugene Yurtsev
6d22f40a0b x 2025-03-28 13:51:06 -04:00
Philippe PRADOS
92189c8b31 community[patch]: Handle gray scale images in ImageBlobParser (Fixes 30261 and 29586) (#30493)
Fix [29586](https://github.com/langchain-ai/langchain/issues/29586) and
[30261](https://github.com/langchain-ai/langchain/pull/30261)
2025-03-28 10:15:40 -04:00
小豆豆学长
1f0686db80 community: add netmind integration (#30149)
Co-authored-by: yanrujing <rujing.yan@protagonist-ai.com>
Co-authored-by: ccurme <chester.curme@gmail.com>
2025-03-27 15:27:04 -04:00
Kyungho Byoun
e6b6c07395 community: add HANA dialect to SQLDatabase (#30475)
This PR includes support for HANA dialect in SQLDatabase, which is a
wrapper class for SQLAlchemy.

Currently, it is unable to set schema name when using HANA DB with
Langchain. And, it does not show any message to user so that it makes
hard for user to figure out why the SQL does not work as expected.

Here is the reference document for HANA DB to set schema for the
session.

- [SET SCHEMA Statement (Session
Management)](https://help.sap.com/docs/SAP_HANA_PLATFORM/4fe29514fd584807ac9f2a04f6754767/20fd550375191014b886a338afb4cd5f.html)
2025-03-27 15:19:50 -04:00
xzq.xu
92dc3f7341 format test lint passed 2025-03-27 13:44:59 +08:00
xzq.xu
d0a9808148 modify test name 2025-03-27 13:34:51 +08:00
xzq.xu
ed2428f902 add a unit test 2025-03-27 12:43:16 +08:00
xzq.xu
913c8b71d9 format import 2025-03-26 23:34:38 +08:00
xzq.xu
7e3dea5db8 add a new-line 2025-03-26 23:32:07 +08:00
xzq.xu
d602141ab1 remove unused e 2025-03-26 23:10:41 +08:00
xzq.xu
dd9031fc82 _prep_run_args,tool_input copy, Exception 2025-03-26 23:06:43 +08:00
xzq.xu
3382b0d8ea _prep_run_args,tool_input copy 2025-03-26 22:56:32 +08:00
xzq.xu
e90abce577 Merge remote-tracking branch 'origin/master' 2025-03-26 22:42:15 +08:00
xzq.xu
c127ae9d26 fix the format 2025-03-26 22:41:58 +08:00
xzq.xu
65ecc22606 # Fix: Prevent run_manager from being added to state object 2025-03-26 22:36:31 +08:00
3349 changed files with 62864 additions and 418117 deletions

View File

@@ -29,14 +29,14 @@ body:
options:
- label: I added a very descriptive title to this issue.
required: true
- label: I searched the LangChain documentation with the integrated search.
required: true
- label: I used the GitHub search to find a similar question and didn't find it.
required: true
- label: I am sure that this is a bug in LangChain rather than my code.
required: true
- label: The bug is not resolved by updating to the latest stable version of LangChain (or the specific integration package).
required: true
- label: I posted a self-contained, minimal, reproducible example. A maintainer can copy it and run it AS IS.
required: true
- type: textarea
id: reproduction
validations:

View File

@@ -1,8 +1,8 @@
Thank you for contributing to LangChain!
- [ ] **PR title**: "package: description"
- Where "package" is whichever of langchain, community, core, etc. is being modified. Use "docs: ..." for purely docs changes, "infra: ..." for CI changes.
- Example: "community: add foobar LLM"
- Where "package" is whichever of langchain, core, etc. is being modified. Use "docs: ..." for purely docs changes, "infra: ..." for CI changes.
- Example: "core: add foobar LLM"
- [ ] **PR message**: ***Delete this entire checklist*** and replace with
@@ -24,6 +24,5 @@ Additional guidelines:
- Please do not add dependencies to pyproject.toml files (even optional ones) unless they are required for unit tests.
- Most PRs should not touch more than one package.
- Changes should be backwards compatible.
- If you are adding something to community, do not re-import it in langchain.
If no one reviews your PR within a few days, please @-mention one of baskaryan, eyurtsev, ccurme, vbarda, hwchase17.

11
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,11 @@
# Please see the documentation for all configuration options:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
# and
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"

View File

@@ -16,7 +16,6 @@ LANGCHAIN_DIRS = [
"libs/core",
"libs/text-splitters",
"libs/langchain",
"libs/community",
]
# when set to True, we are ignoring core dependents
@@ -38,8 +37,7 @@ IGNORED_PARTNERS = [
]
PY_312_MAX_PACKAGES = [
"libs/partners/huggingface", # https://github.com/pytorch/pytorch/issues/130249
"libs/partners/voyageai",
"libs/partners/chroma", # https://github.com/chroma-core/chroma/issues/4382
]
@@ -134,12 +132,6 @@ def _get_configs_for_single_dir(job: str, dir_: str) -> List[Dict[str, str]]:
elif dir_ == "libs/langchain" and job == "extended-tests":
py_versions = ["3.9", "3.13"]
elif dir_ == "libs/community" and job == "extended-tests":
py_versions = ["3.9", "3.12"]
elif dir_ == "libs/community" and job == "compile-integration-tests":
# community integration deps are slow in 3.12
py_versions = ["3.9", "3.11"]
elif dir_ == ".":
# unable to install with 3.13 because tokenizers doesn't support 3.13 yet
py_versions = ["3.9", "3.12"]
@@ -184,11 +176,6 @@ def _get_pydantic_test_configs(
else "0"
)
custom_mins = {
# depends on pydantic-settings 2.4 which requires pydantic 2.7
"libs/community": 7,
}
max_pydantic_minor = min(
int(dir_max_pydantic_minor),
int(core_max_pydantic_minor),
@@ -196,7 +183,6 @@ def _get_pydantic_test_configs(
min_pydantic_minor = max(
int(dir_min_pydantic_minor),
int(core_min_pydantic_minor),
custom_mins.get(dir_, 0),
)
configs = [

View File

@@ -22,7 +22,6 @@ import re
MIN_VERSION_LIBS = [
"langchain-core",
"langchain-community",
"langchain",
"langchain-text-splitters",
"numpy",
@@ -35,7 +34,6 @@ SKIP_IF_PULL_REQUEST = [
"langchain-core",
"langchain-text-splitters",
"langchain",
"langchain-community",
]

View File

@@ -20,6 +20,8 @@ def get_target_dir(package_name: str) -> Path:
base_path = Path("langchain/libs")
if package_name_short == "experimental":
return base_path / "experimental"
if package_name_short == "community":
return base_path / "community"
return base_path / "partners" / package_name_short
@@ -69,7 +71,7 @@ def main():
clean_target_directories([
p
for p in package_yaml["packages"]
if p["repo"].startswith("langchain-ai/")
if (p["repo"].startswith("langchain-ai/") or p.get("include_in_api_ref"))
and p["repo"] != "langchain-ai/langchain"
])
@@ -78,7 +80,7 @@ def main():
p
for p in package_yaml["packages"]
if not p.get("disabled", False)
and p["repo"].startswith("langchain-ai/")
and (p["repo"].startswith("langchain-ai/") or p.get("include_in_api_ref"))
and p["repo"] != "langchain-ai/langchain"
])

View File

@@ -1,4 +1,3 @@
libs/community/langchain_community/llms/yuan2.py
"NotIn": "not in",
- `/checkin`: Check-in
docs/docs/integrations/providers/trulens.mdx

View File

@@ -34,11 +34,6 @@ jobs:
shell: bash
run: uv sync --group test --group test_integration
- name: Install deps outside pyproject
if: ${{ startsWith(inputs.working-directory, 'libs/community/') }}
shell: bash
run: VIRTUAL_ENV=.venv uv pip install "boto3<2" "google-cloud-aiplatform<2"
- name: Run integration tests
shell: bash
env:
@@ -72,10 +67,10 @@ jobs:
ES_CLOUD_ID: ${{ secrets.ES_CLOUD_ID }}
ES_API_KEY: ${{ secrets.ES_API_KEY }}
MONGODB_ATLAS_URI: ${{ secrets.MONGODB_ATLAS_URI }}
VOYAGE_API_KEY: ${{ secrets.VOYAGE_API_KEY }}
COHERE_API_KEY: ${{ secrets.COHERE_API_KEY }}
UPSTAGE_API_KEY: ${{ secrets.UPSTAGE_API_KEY }}
XAI_API_KEY: ${{ secrets.XAI_API_KEY }}
PPLX_API_KEY: ${{ secrets.PPLX_API_KEY }}
run: |
make integration_tests

View File

@@ -322,11 +322,11 @@ jobs:
ES_CLOUD_ID: ${{ secrets.ES_CLOUD_ID }}
ES_API_KEY: ${{ secrets.ES_API_KEY }}
MONGODB_ATLAS_URI: ${{ secrets.MONGODB_ATLAS_URI }}
VOYAGE_API_KEY: ${{ secrets.VOYAGE_API_KEY }}
UPSTAGE_API_KEY: ${{ secrets.UPSTAGE_API_KEY }}
FIREWORKS_API_KEY: ${{ secrets.FIREWORKS_API_KEY }}
XAI_API_KEY: ${{ secrets.XAI_API_KEY }}
DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}
PPLX_API_KEY: ${{ secrets.PPLX_API_KEY }}
run: make integration_tests
working-directory: ${{ inputs.working-directory }}
@@ -340,7 +340,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
partner: [openai, anthropic]
partner: [anthropic]
fail-fast: false # Continue testing other partners if one fails
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
@@ -394,8 +394,11 @@ jobs:
# Checkout the latest package files
rm -rf $GITHUB_WORKSPACE/libs/partners/${{ matrix.partner }}/*
cd $GITHUB_WORKSPACE/libs/partners/${{ matrix.partner }}
git checkout "$LATEST_PACKAGE_TAG" -- .
rm -rf $GITHUB_WORKSPACE/libs/standard-tests/*
cd $GITHUB_WORKSPACE/libs/
git checkout "$LATEST_PACKAGE_TAG" -- standard-tests/
git checkout "$LATEST_PACKAGE_TAG" -- partners/${{ matrix.partner }}/
cd partners/${{ matrix.partner }}
# Print as a sanity check
echo "Version number from pyproject.toml: "

View File

@@ -30,7 +30,7 @@ jobs:
- name: Install langchain editable
run: |
VIRTUAL_ENV=.venv uv pip install langchain-experimental -e libs/core libs/langchain libs/community
VIRTUAL_ENV=.venv uv pip install langchain-experimental langchain-community -e libs/core libs/langchain
- name: Check doc imports
shell: bash

View File

@@ -26,7 +26,20 @@ jobs:
id: get-unsorted-repos
uses: mikefarah/yq@master
with:
cmd: yq '.packages[].repo' langchain/libs/packages.yml
cmd: |
yq '
.packages[]
| select(
(
(.repo | test("^langchain-ai/"))
and
(.repo != "langchain-ai/langchain")
)
or
(.include_in_api_ref // false)
)
| .repo
' langchain/libs/packages.yml
- name: Parse YAML and checkout repos
env:
@@ -38,11 +51,9 @@ jobs:
# Checkout each unique repository that is in langchain-ai org
for repo in $REPOS; do
if [[ "$repo" != "langchain-ai/langchain" && "$repo" == langchain-ai/* ]]; then
REPO_NAME=$(echo $repo | cut -d'/' -f2)
echo "Checking out $repo to $REPO_NAME"
git clone --depth 1 https://github.com/$repo.git $REPO_NAME
fi
REPO_NAME=$(echo $repo | cut -d'/' -f2)
echo "Checking out $repo to $REPO_NAME"
git clone --depth 1 https://github.com/$repo.git $REPO_NAME
done
- name: Setup python ${{ env.PYTHON_VERSION }}

View File

@@ -12,7 +12,7 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: Use Node.js 18.x
uses: actions/setup-node@v3
uses: actions/setup-node@v4
with:
node-version: 18.x
cache: "yarn"

View File

@@ -0,0 +1,29 @@
name: Check `langchain-core` version equality
on:
pull_request:
paths:
- 'libs/core/pyproject.toml'
- 'libs/core/langchain_core/version.py'
jobs:
check_version_equality:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check version equality
run: |
PYPROJECT_VERSION=$(grep -Po '(?<=^version = ")[^"]*' libs/core/pyproject.toml)
VERSION_PY_VERSION=$(grep -Po '(?<=^VERSION = ")[^"]*' libs/core/langchain_core/version.py)
# Compare the two versions
if [ "$PYPROJECT_VERSION" != "$VERSION_PY_VERSION" ]; then
echo "langchain-core versions in pyproject.toml and version.py do not match!"
echo "pyproject.toml version: $PYPROJECT_VERSION"
echo "version.py version: $VERSION_PY_VERSION"
exit 1
else
echo "Versions match: $PYPROJECT_VERSION"
fi

View File

@@ -29,7 +29,7 @@ jobs:
with:
python-version: '3.11'
- id: files
uses: Ana06/get-changed-files@v2.2.0
uses: Ana06/get-changed-files@v2.3.0
- id: set-matrix
run: |
python -m pip install packaging requests

View File

@@ -24,7 +24,7 @@ jobs:
with:
python-version: '3.10'
- id: files
uses: Ana06/get-changed-files@v2.2.0
uses: Ana06/get-changed-files@v2.3.0
with:
filter: |
*.ipynb

44
.github/workflows/codspeed.yml vendored Normal file
View File

@@ -0,0 +1,44 @@
name: CodSpeed
on:
push:
branches:
- master
pull_request:
paths:
- 'libs/core/**'
# `workflow_dispatch` allows CodSpeed to trigger backtest
# performance analysis in order to generate initial data.
workflow_dispatch:
jobs:
codspeed:
name: Run benchmarks
if: (github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'run-codspeed-benchmarks')) || github.event_name == 'workflow_dispatch' || github.event_name == 'push'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# We have to use 3.12, 3.13 is not yet supported
- name: Install uv
uses: astral-sh/setup-uv@v6
with:
python-version: "3.12"
# Using this action is still necessary for CodSpeed to work
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: install deps
run: uv sync --group test
working-directory: ./libs/core
- name: Run benchmarks
uses: CodSpeedHQ/action@v3
with:
token: ${{ secrets.CODSPEED_TOKEN }}
run: |
cd libs/core
uv run --no-sync pytest ./tests/benchmarks --codspeed
mode: walltime

View File

@@ -6,11 +6,6 @@ on:
push:
branches: [jacob/people]
workflow_dispatch:
inputs:
debug_enabled:
description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)'
required: false
default: 'false'
jobs:
langchain-people:
@@ -26,12 +21,6 @@ jobs:
# Ref: https://github.com/actions/runner/issues/2033
- name: Fix git safe.directory in container
run: mkdir -p /home/runner/work/_temp/_github_home && printf "[safe]\n\tdirectory = /github/workspace" > /home/runner/work/_temp/_github_home/.gitconfig
# Allow debugging with tmate
- name: Setup tmate session
uses: mxschmitt/action-tmate@v3
if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.debug_enabled == 'true' }}
with:
limit-access-to-actor: true
- uses: ./.github/actions/people
with:
token: ${{ secrets.LANGCHAIN_PEOPLE_GITHUB_TOKEN }}

View File

@@ -61,6 +61,7 @@ jobs:
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
FIREWORKS_API_KEY: ${{ secrets.FIREWORKS_API_KEY }}
GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
GROQ_API_KEY: ${{ secrets.GROQ_API_KEY }}
MISTRAL_API_KEY: ${{ secrets.MISTRAL_API_KEY }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}

View File

@@ -145,6 +145,7 @@ jobs:
GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
GOOGLE_SEARCH_API_KEY: ${{ secrets.GOOGLE_SEARCH_API_KEY }}
GOOGLE_CSE_ID: ${{ secrets.GOOGLE_CSE_ID }}
PPLX_API_KEY: ${{ secrets.PPLX_API_KEY }}
run: |
cd langchain/${{ matrix.working-directory }}
make integration_tests

1
.gitignore vendored
View File

@@ -59,6 +59,7 @@ coverage.xml
*.py,cover
.hypothesis/
.pytest_cache/
.codspeed/
# Translations
*.mo

View File

@@ -7,12 +7,6 @@ repos:
entry: make -C libs/core format
files: ^libs/core/
pass_filenames: false
- id: community
name: format community
language: system
entry: make -C libs/community format
files: ^libs/community/
pass_filenames: false
- id: langchain
name: format langchain
language: system
@@ -109,12 +103,6 @@ repos:
entry: make -C libs/partners/qdrant format
files: ^libs/partners/qdrant/
pass_filenames: false
- id: voyageai
name: format partners/voyageai
language: system
entry: make -C libs/partners/voyageai format
files: ^libs/partners/voyageai/
pass_filenames: false
- id: root
name: format docs, cookbook
language: system

View File

@@ -48,7 +48,7 @@ api_docs_quick_preview:
api_docs_clean:
find ./docs/api_reference -name '*_api_reference.rst' -delete
git clean -fdX ./docs/api_reference
rm docs/api_reference/index.md
rm -f docs/api_reference/index.md
## api_docs_linkcheck: Run linkchecker on the API Reference documentation.

View File

@@ -15,8 +15,9 @@
[![GitHub star chart](https://img.shields.io/github/stars/langchain-ai/langchain?style=flat-square)](https://star-history.com/#langchain-ai/langchain)
[![Open Issues](https://img.shields.io/github/issues-raw/langchain-ai/langchain?style=flat-square)](https://github.com/langchain-ai/langchain/issues)
[![Open in Dev Containers](https://img.shields.io/static/v1?label=Dev%20Containers&message=Open&color=blue&logo=visualstudiocode&style=flat-square)](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/langchain-ai/langchain)
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/langchain-ai/langchain)
[<img src="https://github.com/codespaces/badge.svg" title="Open in Github Codespace" width="150" height="20">](https://codespaces.new/langchain-ai/langchain)
[![Twitter](https://img.shields.io/twitter/url/https/twitter.com/langchainai.svg?style=social&label=Follow%20%40LangChainAI)](https://twitter.com/langchainai)
[![CodSpeed Badge](https://img.shields.io/endpoint?url=https://codspeed.io/badge.json)](https://codspeed.io/langchain-ai/langchain)
> [!NOTE]
> Looking for the JS/TS library? Check out [LangChain.js](https://github.com/langchain-ai/langchainjs).

View File

@@ -30,7 +30,7 @@
"outputs": [],
"source": [
"# lock to 0.10.19 due to a persistent bug in more recent versions\n",
"! pip install \"unstructured[all-docs]==0.10.19\" pillow pydantic lxml pillow matplotlib tiktoken open_clip_torch torch"
"! pip install \"unstructured[all-docs]==0.10.19\" pillow pydantic lxml matplotlib tiktoken open_clip_torch torch"
]
},
{
@@ -409,7 +409,7 @@
" table_summaries,\n",
" tables,\n",
" image_summaries,\n",
" image_summaries,\n",
" img_base64_list,\n",
")"
]
},

View File

@@ -22,7 +22,19 @@
},
{
"cell_type": "code",
"execution_count": 16,
"execution_count": 1,
"id": "e8d63d14-138d-4aa5-a741-7fd3537d00aa",
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"\n",
"os.environ[\"OPENAI_API_KEY\"] = \"\""
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "2e87c10a",
"metadata": {},
"outputs": [],
@@ -37,7 +49,7 @@
},
{
"cell_type": "code",
"execution_count": 17,
"execution_count": 3,
"id": "0b7b772b",
"metadata": {},
"outputs": [],
@@ -54,19 +66,10 @@
},
{
"cell_type": "code",
"execution_count": 18,
"execution_count": 4,
"id": "f2675861",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Running Chroma using direct local API.\n",
"Using DuckDB in-memory for database. Data will be transient.\n"
]
}
],
"outputs": [],
"source": [
"from langchain_community.document_loaders import TextLoader\n",
"\n",
@@ -81,7 +84,7 @@
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": 5,
"id": "bc5403d4",
"metadata": {},
"outputs": [],
@@ -93,17 +96,25 @@
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": 6,
"id": "1431cded",
"metadata": {},
"outputs": [],
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"USER_AGENT environment variable not set, consider setting it to identify your requests.\n"
]
}
],
"source": [
"from langchain_community.document_loaders import WebBaseLoader"
]
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": 7,
"id": "915d3ff3",
"metadata": {},
"outputs": [],
@@ -113,16 +124,20 @@
},
{
"cell_type": "code",
"execution_count": 7,
"execution_count": 8,
"id": "96a2edf8",
"metadata": {},
"outputs": [
{
"name": "stdout",
"name": "stderr",
"output_type": "stream",
"text": [
"Running Chroma using direct local API.\n",
"Using DuckDB in-memory for database. Data will be transient.\n"
"Created a chunk of size 2122, which is longer than the specified 1000\n",
"Created a chunk of size 3187, which is longer than the specified 1000\n",
"Created a chunk of size 1017, which is longer than the specified 1000\n",
"Created a chunk of size 1049, which is longer than the specified 1000\n",
"Created a chunk of size 1256, which is longer than the specified 1000\n",
"Created a chunk of size 2321, which is longer than the specified 1000\n"
]
}
],
@@ -135,14 +150,6 @@
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "71ecef90",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "c0a6c031",
@@ -153,31 +160,30 @@
},
{
"cell_type": "code",
"execution_count": 43,
"execution_count": 9,
"id": "eb142786",
"metadata": {},
"outputs": [],
"source": [
"# Import things that are needed generically\n",
"from langchain.agents import AgentType, Tool, initialize_agent\n",
"from langchain_openai import OpenAI"
"from langchain.agents import Tool"
]
},
{
"cell_type": "code",
"execution_count": 44,
"execution_count": 10,
"id": "850bc4e9",
"metadata": {},
"outputs": [],
"source": [
"tools = [\n",
" Tool(\n",
" name=\"State of Union QA System\",\n",
" name=\"state_of_union_qa_system\",\n",
" func=state_of_union.run,\n",
" description=\"useful for when you need to answer questions about the most recent state of the union address. Input should be a fully formed question.\",\n",
" ),\n",
" Tool(\n",
" name=\"Ruff QA System\",\n",
" name=\"ruff_qa_system\",\n",
" func=ruff.run,\n",
" description=\"useful for when you need to answer questions about ruff (a python linter). Input should be a fully formed question.\",\n",
" ),\n",
@@ -186,94 +192,116 @@
},
{
"cell_type": "code",
"execution_count": 45,
"id": "fc47f230",
"execution_count": 11,
"id": "70c461d8-aaca-4f2a-9a93-bf35841cc615",
"metadata": {},
"outputs": [],
"source": [
"# Construct the agent. We will use the default agent type here.\n",
"# See documentation for a full list of options.\n",
"agent = initialize_agent(\n",
" tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True\n",
")"
"from langgraph.prebuilt import create_react_agent\n",
"\n",
"agent = create_react_agent(\"openai:gpt-4.1-mini\", tools)"
]
},
{
"cell_type": "code",
"execution_count": 46,
"id": "10ca2db8",
"execution_count": 12,
"id": "a6d2b911-3044-4430-a35b-75832bb45334",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"================================\u001b[1m Human Message \u001b[0m=================================\n",
"\n",
"What did biden say about ketanji brown jackson in the state of the union address?\n",
"==================================\u001b[1m Ai Message \u001b[0m==================================\n",
"Tool Calls:\n",
" state_of_union_qa_system (call_26QlRdsptjEJJZjFsAUjEbaH)\n",
" Call ID: call_26QlRdsptjEJJZjFsAUjEbaH\n",
" Args:\n",
" __arg1: What did Biden say about Ketanji Brown Jackson in the state of the union address?\n",
"=================================\u001b[1m Tool Message \u001b[0m=================================\n",
"Name: state_of_union_qa_system\n",
"\n",
"\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n",
"\u001b[32;1m\u001b[1;3m I need to find out what Biden said about Ketanji Brown Jackson in the State of the Union address.\n",
"Action: State of Union QA System\n",
"Action Input: What did Biden say about Ketanji Brown Jackson in the State of the Union address?\u001b[0m\n",
"Observation: \u001b[36;1m\u001b[1;3m Biden said that Jackson is one of the nation's top legal minds and that she will continue Justice Breyer's legacy of excellence.\u001b[0m\n",
"Thought:\u001b[32;1m\u001b[1;3m I now know the final answer\n",
"Final Answer: Biden said that Jackson is one of the nation's top legal minds and that she will continue Justice Breyer's legacy of excellence.\u001b[0m\n",
" Biden said that he nominated Ketanji Brown Jackson for the United States Supreme Court and praised her as one of the nation's top legal minds who will continue Justice Breyer's legacy of excellence.\n",
"==================================\u001b[1m Ai Message \u001b[0m==================================\n",
"\n",
"\u001b[1m> Finished chain.\u001b[0m\n"
"In the State of the Union address, Biden said that he nominated Ketanji Brown Jackson for the United States Supreme Court and praised her as one of the nation's top legal minds who will continue Justice Breyer's legacy of excellence.\n"
]
},
{
"data": {
"text/plain": [
"\"Biden said that Jackson is one of the nation's top legal minds and that she will continue Justice Breyer's legacy of excellence.\""
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"agent.run(\n",
" \"What did biden say about ketanji brown jackson in the state of the union address?\"\n",
")"
"input_message = {\n",
" \"role\": \"user\",\n",
" \"content\": \"What did biden say about ketanji brown jackson in the state of the union address?\",\n",
"}\n",
"\n",
"for step in agent.stream(\n",
" {\"messages\": [input_message]},\n",
" stream_mode=\"values\",\n",
"):\n",
" step[\"messages\"][-1].pretty_print()"
]
},
{
"cell_type": "code",
"execution_count": 47,
"id": "4e91b811",
"execution_count": 13,
"id": "e836b4cd-abf7-49eb-be0e-b9ad501213f3",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"================================\u001b[1m Human Message \u001b[0m=================================\n",
"\n",
"Why use ruff over flake8?\n",
"==================================\u001b[1m Ai Message \u001b[0m==================================\n",
"Tool Calls:\n",
" ruff_qa_system (call_KqDoWeO9bo9OAXdxOsCb6msC)\n",
" Call ID: call_KqDoWeO9bo9OAXdxOsCb6msC\n",
" Args:\n",
" __arg1: Why use ruff over flake8?\n",
"=================================\u001b[1m Tool Message \u001b[0m=================================\n",
"Name: ruff_qa_system\n",
"\n",
"\n",
"\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n",
"\u001b[32;1m\u001b[1;3m I need to find out the advantages of using ruff over flake8\n",
"Action: Ruff QA System\n",
"Action Input: What are the advantages of using ruff over flake8?\u001b[0m\n",
"Observation: \u001b[33;1m\u001b[1;3m Ruff can be used as a drop-in replacement for Flake8 when used (1) without or with a small number of plugins, (2) alongside Black, and (3) on Python 3 code. It also re-implements some of the most popular Flake8 plugins and related code quality tools natively, including isort, yesqa, eradicate, and most of the rules implemented in pyupgrade. Ruff also supports automatically fixing its own lint violations, which Flake8 does not.\u001b[0m\n",
"Thought:\u001b[32;1m\u001b[1;3m I now know the final answer\n",
"Final Answer: Ruff can be used as a drop-in replacement for Flake8 when used (1) without or with a small number of plugins, (2) alongside Black, and (3) on Python 3 code. It also re-implements some of the most popular Flake8 plugins and related code quality tools natively, including isort, yesqa, eradicate, and most of the rules implemented in pyupgrade. Ruff also supports automatically fixing its own lint violations, which Flake8 does not.\u001b[0m\n",
"There are a few reasons why someone might choose to use Ruff over Flake8:\n",
"\n",
"\u001b[1m> Finished chain.\u001b[0m\n"
"1. Larger rule set: Ruff implements over 800 rules, while Flake8 only implements around 200. This means that Ruff can catch more potential issues in your code.\n",
"\n",
"2. Better compatibility with other tools: Ruff is designed to work well with other tools like Black, isort, and type checkers like Mypy. This means that you can use Ruff alongside these tools to get more comprehensive feedback on your code.\n",
"\n",
"3. Automatic fixing of lint violations: Unlike Flake8, Ruff is capable of automatically fixing its own lint violations. This can save you time and effort when fixing issues in your code.\n",
"\n",
"4. Native implementation of popular Flake8 plugins: Ruff re-implements some of the most popular Flake8 plugins natively, which means you don't have to install and configure multiple plugins to get the same functionality.\n",
"\n",
"Overall, Ruff offers a more comprehensive and user-friendly experience compared to Flake8, making it a popular choice for many developers.\n",
"==================================\u001b[1m Ai Message \u001b[0m==================================\n",
"\n",
"You might choose to use Ruff over Flake8 for several reasons:\n",
"\n",
"1. Ruff has a much larger rule set, implementing over 800 rules compared to Flake8's roughly 200, so it can catch more potential issues.\n",
"2. Ruff is designed to work better with other tools like Black, isort, and type checkers like Mypy, providing more comprehensive code feedback.\n",
"3. Ruff can automatically fix its own lint violations, which Flake8 cannot, saving time and effort.\n",
"4. Ruff natively implements some popular Flake8 plugins, so you don't need to install and configure multiple plugins separately.\n",
"\n",
"Overall, Ruff offers a more comprehensive and user-friendly experience compared to Flake8.\n"
]
},
{
"data": {
"text/plain": [
"'Ruff can be used as a drop-in replacement for Flake8 when used (1) without or with a small number of plugins, (2) alongside Black, and (3) on Python 3 code. It also re-implements some of the most popular Flake8 plugins and related code quality tools natively, including isort, yesqa, eradicate, and most of the rules implemented in pyupgrade. Ruff also supports automatically fixing its own lint violations, which Flake8 does not.'"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"agent.run(\"Why use ruff over flake8?\")"
"input_message = {\n",
" \"role\": \"user\",\n",
" \"content\": \"Why use ruff over flake8?\",\n",
"}\n",
"\n",
"for step in agent.stream(\n",
" {\"messages\": [input_message]},\n",
" stream_mode=\"values\",\n",
"):\n",
" step[\"messages\"][-1].pretty_print()"
]
},
{
@@ -296,20 +324,20 @@
},
{
"cell_type": "code",
"execution_count": 48,
"execution_count": 14,
"id": "f59b377e",
"metadata": {},
"outputs": [],
"source": [
"tools = [\n",
" Tool(\n",
" name=\"State of Union QA System\",\n",
" name=\"state_of_union_qa_system\",\n",
" func=state_of_union.run,\n",
" description=\"useful for when you need to answer questions about the most recent state of the union address. Input should be a fully formed question.\",\n",
" return_direct=True,\n",
" ),\n",
" Tool(\n",
" name=\"Ruff QA System\",\n",
" name=\"ruff_qa_system\",\n",
" func=ruff.run,\n",
" description=\"useful for when you need to answer questions about ruff (a python linter). Input should be a fully formed question.\",\n",
" return_direct=True,\n",
@@ -319,90 +347,92 @@
},
{
"cell_type": "code",
"execution_count": 49,
"id": "8615707a",
"execution_count": 15,
"id": "06f69c0f-c83d-4b7f-a1c8-7614aced3bae",
"metadata": {},
"outputs": [],
"source": [
"agent = initialize_agent(\n",
" tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True\n",
")"
"from langgraph.prebuilt import create_react_agent\n",
"\n",
"agent = create_react_agent(\"openai:gpt-4.1-mini\", tools)"
]
},
{
"cell_type": "code",
"execution_count": 50,
"id": "36e718a9",
"execution_count": 16,
"id": "a6b38c12-ac25-43c0-b9c2-2b1985ab4825",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"================================\u001b[1m Human Message \u001b[0m=================================\n",
"\n",
"What did biden say about ketanji brown jackson in the state of the union address?\n",
"==================================\u001b[1m Ai Message \u001b[0m==================================\n",
"Tool Calls:\n",
" state_of_union_qa_system (call_yjxh11OnZiauoyTAn9npWdxj)\n",
" Call ID: call_yjxh11OnZiauoyTAn9npWdxj\n",
" Args:\n",
" __arg1: What did Biden say about Ketanji Brown Jackson in the state of the union address?\n",
"=================================\u001b[1m Tool Message \u001b[0m=================================\n",
"Name: state_of_union_qa_system\n",
"\n",
"\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n",
"\u001b[32;1m\u001b[1;3m I need to find out what Biden said about Ketanji Brown Jackson in the State of the Union address.\n",
"Action: State of Union QA System\n",
"Action Input: What did Biden say about Ketanji Brown Jackson in the State of the Union address?\u001b[0m\n",
"Observation: \u001b[36;1m\u001b[1;3m Biden said that Jackson is one of the nation's top legal minds and that she will continue Justice Breyer's legacy of excellence.\u001b[0m\n",
"\u001b[32;1m\u001b[1;3m\u001b[0m\n",
"\n",
"\u001b[1m> Finished chain.\u001b[0m\n"
" Biden said that he nominated Ketanji Brown Jackson for the United States Supreme Court and praised her as one of the nation's top legal minds who will continue Justice Breyer's legacy of excellence.\n"
]
},
{
"data": {
"text/plain": [
"\" Biden said that Jackson is one of the nation's top legal minds and that she will continue Justice Breyer's legacy of excellence.\""
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"agent.run(\n",
" \"What did biden say about ketanji brown jackson in the state of the union address?\"\n",
")"
"input_message = {\n",
" \"role\": \"user\",\n",
" \"content\": \"What did biden say about ketanji brown jackson in the state of the union address?\",\n",
"}\n",
"\n",
"for step in agent.stream(\n",
" {\"messages\": [input_message]},\n",
" stream_mode=\"values\",\n",
"):\n",
" step[\"messages\"][-1].pretty_print()"
]
},
{
"cell_type": "code",
"execution_count": 51,
"id": "edfd0a1a",
"execution_count": 17,
"id": "88f08d86-7972-4148-8128-3ac8898ad68a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"================================\u001b[1m Human Message \u001b[0m=================================\n",
"\n",
"Why use ruff over flake8?\n",
"==================================\u001b[1m Ai Message \u001b[0m==================================\n",
"Tool Calls:\n",
" ruff_qa_system (call_GiWWfwF6wbbRFQrHlHbhRtGW)\n",
" Call ID: call_GiWWfwF6wbbRFQrHlHbhRtGW\n",
" Args:\n",
" __arg1: What are the advantages of using ruff over flake8 for Python linting?\n",
"=================================\u001b[1m Tool Message \u001b[0m=================================\n",
"Name: ruff_qa_system\n",
"\n",
"\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n",
"\u001b[32;1m\u001b[1;3m I need to find out the advantages of using ruff over flake8\n",
"Action: Ruff QA System\n",
"Action Input: What are the advantages of using ruff over flake8?\u001b[0m\n",
"Observation: \u001b[33;1m\u001b[1;3m Ruff can be used as a drop-in replacement for Flake8 when used (1) without or with a small number of plugins, (2) alongside Black, and (3) on Python 3 code. It also re-implements some of the most popular Flake8 plugins and related code quality tools natively, including isort, yesqa, eradicate, and most of the rules implemented in pyupgrade. Ruff also supports automatically fixing its own lint violations, which Flake8 does not.\u001b[0m\n",
"\u001b[32;1m\u001b[1;3m\u001b[0m\n",
"\n",
"\u001b[1m> Finished chain.\u001b[0m\n"
" Ruff has a larger rule set, supports automatic fixing of lint violations, and does not require the installation of additional plugins. It also has better compatibility with Black and can be used alongside a type checker for more comprehensive code analysis.\n"
]
},
{
"data": {
"text/plain": [
"' Ruff can be used as a drop-in replacement for Flake8 when used (1) without or with a small number of plugins, (2) alongside Black, and (3) on Python 3 code. It also re-implements some of the most popular Flake8 plugins and related code quality tools natively, including isort, yesqa, eradicate, and most of the rules implemented in pyupgrade. Ruff also supports automatically fixing its own lint violations, which Flake8 does not.'"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"agent.run(\"Why use ruff over flake8?\")"
"input_message = {\n",
" \"role\": \"user\",\n",
" \"content\": \"Why use ruff over flake8?\",\n",
"}\n",
"\n",
"for step in agent.stream(\n",
" {\"messages\": [input_message]},\n",
" stream_mode=\"values\",\n",
"):\n",
" step[\"messages\"][-1].pretty_print()"
]
},
{
@@ -417,19 +447,19 @@
},
{
"cell_type": "code",
"execution_count": 57,
"execution_count": 18,
"id": "d397a233",
"metadata": {},
"outputs": [],
"source": [
"tools = [\n",
" Tool(\n",
" name=\"State of Union QA System\",\n",
" name=\"state_of_union_qa_system\",\n",
" func=state_of_union.run,\n",
" description=\"useful for when you need to answer questions about the most recent state of the union address. Input should be a fully formed question, not referencing any obscure pronouns from the conversation before.\",\n",
" ),\n",
" Tool(\n",
" name=\"Ruff QA System\",\n",
" name=\"ruff_qa_system\",\n",
" func=ruff.run,\n",
" description=\"useful for when you need to answer questions about ruff (a python linter). Input should be a fully formed question, not referencing any obscure pronouns from the conversation before.\",\n",
" ),\n",
@@ -438,60 +468,60 @@
},
{
"cell_type": "code",
"execution_count": 58,
"id": "06157240",
"execution_count": 19,
"id": "41743f29-150d-40ba-aa8e-3a63c32216aa",
"metadata": {},
"outputs": [],
"source": [
"# Construct the agent. We will use the default agent type here.\n",
"# See documentation for a full list of options.\n",
"agent = initialize_agent(\n",
" tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True\n",
")"
"from langgraph.prebuilt import create_react_agent\n",
"\n",
"agent = create_react_agent(\"openai:gpt-4.1-mini\", tools)"
]
},
{
"cell_type": "code",
"execution_count": 59,
"id": "b492b520",
"execution_count": 20,
"id": "e20e81dd-284a-4d07-9160-63a84b65cba8",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"================================\u001b[1m Human Message \u001b[0m=================================\n",
"\n",
"What tool does ruff use to run over Jupyter Notebooks? Did the president mention that tool in the state of the union?\n",
"==================================\u001b[1m Ai Message \u001b[0m==================================\n",
"Tool Calls:\n",
" ruff_qa_system (call_VOnxiOEehauQyVOTjDJkR5L2)\n",
" Call ID: call_VOnxiOEehauQyVOTjDJkR5L2\n",
" Args:\n",
" __arg1: What tool does ruff use to run over Jupyter Notebooks?\n",
" state_of_union_qa_system (call_AbSsXAxwe4JtCRhga926SxOZ)\n",
" Call ID: call_AbSsXAxwe4JtCRhga926SxOZ\n",
" Args:\n",
" __arg1: Did the president mention the tool that ruff uses to run over Jupyter Notebooks in the state of the union?\n",
"=================================\u001b[1m Tool Message \u001b[0m=================================\n",
"Name: state_of_union_qa_system\n",
"\n",
"\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n",
"\u001b[32;1m\u001b[1;3m I need to find out what tool ruff uses to run over Jupyter Notebooks, and if the president mentioned it in the state of the union.\n",
"Action: Ruff QA System\n",
"Action Input: What tool does ruff use to run over Jupyter Notebooks?\u001b[0m\n",
"Observation: \u001b[33;1m\u001b[1;3m Ruff is integrated into nbQA, a tool for running linters and code formatters over Jupyter Notebooks. After installing ruff and nbqa, you can run Ruff over a notebook like so: > nbqa ruff Untitled.html\u001b[0m\n",
"Thought:\u001b[32;1m\u001b[1;3m I now need to find out if the president mentioned this tool in the state of the union.\n",
"Action: State of Union QA System\n",
"Action Input: Did the president mention nbQA in the state of the union?\u001b[0m\n",
"Observation: \u001b[36;1m\u001b[1;3m No, the president did not mention nbQA in the state of the union.\u001b[0m\n",
"Thought:\u001b[32;1m\u001b[1;3m I now know the final answer.\n",
"Final Answer: No, the president did not mention nbQA in the state of the union.\u001b[0m\n",
" No, the president did not mention the tool that ruff uses to run over Jupyter Notebooks in the state of the union.\n",
"==================================\u001b[1m Ai Message \u001b[0m==================================\n",
"\n",
"\u001b[1m> Finished chain.\u001b[0m\n"
"Ruff does not support source.organizeImports and source.fixAll code actions in Jupyter Notebooks. Additionally, the president did not mention the tool that ruff uses to run over Jupyter Notebooks in the state of the union.\n"
]
},
{
"data": {
"text/plain": [
"'No, the president did not mention nbQA in the state of the union.'"
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"agent.run(\n",
" \"What tool does ruff use to run over Jupyter Notebooks? Did the president mention that tool in the state of the union?\"\n",
")"
"input_message = {\n",
" \"role\": \"user\",\n",
" \"content\": \"What tool does ruff use to run over Jupyter Notebooks? Did the president mention that tool in the state of the union?\",\n",
"}\n",
"\n",
"for step in agent.stream(\n",
" {\"messages\": [input_message]},\n",
" stream_mode=\"values\",\n",
"):\n",
" step[\"messages\"][-1].pretty_print()"
]
},
{
@@ -519,7 +549,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.1"
"version": "3.12.4"
}
},
"nbformat": 4,

View File

@@ -358,7 +358,7 @@
"id": "6e5cd014-db86-4d6b-8399-25cae3da5570",
"metadata": {},
"source": [
"## Helper function to plot retrived similar images"
"## Helper function to plot retrieved similar images"
]
},
{

View File

@@ -11,6 +11,7 @@
import json
import os
import sys
from datetime import datetime
from pathlib import Path
import toml
@@ -104,7 +105,7 @@ def skip_private_members(app, what, name, obj, skip, options):
# -- Project information -----------------------------------------------------
project = "🦜🔗 LangChain"
copyright = "2023, LangChain Inc"
copyright = f"{datetime.now().year}, LangChain Inc"
author = "LangChain, Inc"
html_favicon = "_static/img/brand/favicon.png"
@@ -275,3 +276,7 @@ if os.environ.get("READTHEDOCS", "") == "True":
html_context["READTHEDOCS"] = True
master_doc = "index"
# If a signatures length in characters exceeds 60,
# each parameter within the signature will be displayed on an individual logical line
maximum_signature_line_length = 60

View File

@@ -663,6 +663,7 @@ def main(dirs: Optional[list] = None) -> None:
dir_
for dir_ in os.listdir(ROOT_DIR / "libs")
if dir_ not in ("cli", "partners", "packages.yml")
and "pyproject.toml" in os.listdir(ROOT_DIR / "libs" / dir_)
]
dirs += [
dir_

View File

@@ -7,7 +7,7 @@
.. NOTE:: {{objname}} implements the standard :py:class:`Runnable Interface <langchain_core.runnables.base.Runnable>`. 🏃
The :py:class:`Runnable Interface <langchain_core.runnables.base.Runnable>` has additional methods that are available on runnables, such as :py:meth:`with_types <langchain_core.runnables.base.Runnable.with_types>`, :py:meth:`with_retry <langchain_core.runnables.base.Runnable.with_retry>`, :py:meth:`assign <langchain_core.runnables.base.Runnable.assign>`, :py:meth:`bind <langchain_core.runnables.base.Runnable.bind>`, :py:meth:`get_graph <langchain_core.runnables.base.Runnable.get_graph>`, and more.
The :py:class:`Runnable Interface <langchain_core.runnables.base.Runnable>` has additional methods that are available on runnables, such as :py:meth:`with_config <langchain_core.runnables.base.Runnable.with_config>`, :py:meth:`with_types <langchain_core.runnables.base.Runnable.with_types>`, :py:meth:`with_retry <langchain_core.runnables.base.Runnable.with_retry>`, :py:meth:`assign <langchain_core.runnables.base.Runnable.assign>`, :py:meth:`bind <langchain_core.runnables.base.Runnable.bind>`, :py:meth:`get_graph <langchain_core.runnables.base.Runnable.get_graph>`, and more.
{% block attributes %}
{% if attributes %}

View File

@@ -19,6 +19,6 @@
.. NOTE:: {{objname}} implements the standard :py:class:`Runnable Interface <langchain_core.runnables.base.Runnable>`. 🏃
The :py:class:`Runnable Interface <langchain_core.runnables.base.Runnable>` has additional methods that are available on runnables, such as :py:meth:`with_types <langchain_core.runnables.base.Runnable.with_types>`, :py:meth:`with_retry <langchain_core.runnables.base.Runnable.with_retry>`, :py:meth:`assign <langchain_core.runnables.base.Runnable.assign>`, :py:meth:`bind <langchain_core.runnables.base.Runnable.bind>`, :py:meth:`get_graph <langchain_core.runnables.base.Runnable.get_graph>`, and more.
The :py:class:`Runnable Interface <langchain_core.runnables.base.Runnable>` has additional methods that are available on runnables, such as :py:meth:`with_config <langchain_core.runnables.base.Runnable.with_config>`, :py:meth:`with_types <langchain_core.runnables.base.Runnable.with_types>`, :py:meth:`with_retry <langchain_core.runnables.base.Runnable.with_retry>`, :py:meth:`assign <langchain_core.runnables.base.Runnable.assign>`, :py:meth:`bind <langchain_core.runnables.base.Runnable.bind>`, :py:meth:`get_graph <langchain_core.runnables.base.Runnable.get_graph>`, and more.
.. example_links:: {{ objname }}

View File

@@ -1 +0,0 @@
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

View File

@@ -1 +1 @@
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

View File

@@ -1 +1 @@
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

View File

@@ -1 +0,0 @@
eNrtVU9v3EQUV4/c+AiutxKXzNpjr+3dlRBKWrUpTUkKgfCnaPU887Lrrj1jZsZpNiEHAhJctx+hiRIUVdALR245cOALhE/DzGY3CALiwKUSPdjWvHnz5r3fe7+fD093UOlCihsvCmFQATN2oZ8dnir8okFtvjmp0IwkP95Y/2DzqFHFxcbImFr3gyBHriQbE9UIU1TYbjRB0IbQNlSwJwU81W0mq6CSHMsAhBkpWReszUpoOJKdKCjEjhzjcS755OLLff/KZTBPyu97/uKWKIxiEiYkpv6S51eoNQxRW4/P9n0lS3S+jUbldpm0tQjjTJtYll6FHnhP7FX+wefuMOwOjF0Jd5yGUefgdITA7Z3fniwzhrWZnr8JdV0WDBwcwRMtxYvbl0HJ5qTGv9k/+9BeTpaH1mV6/mxFGhkHtB2nbRp7FQ+cgUmFrYWtgSBqh57UQQVM6lYUt1O7tq6g2KgFqko7XgliGNQT2wDRits0anedQz0pqrps3d6YbXhsexgoNGpCHNKtEofAJt7iwkUSZx+T5WqP3AHjsrdoJmEUJpv2SZPepz+B3dN8TFxLLqsiBZ+e30qjvMtitk26OaWkk3YY6fXyjAANgQIkEKfbPy4Oz2dmev4GGINVbd6mPyxgW0MxNKPpEY063yvUtZ0y/PpEGzCNPjxmNvNffzmdt/X5+oNFR767uDlLXJCV+SDc/yPDNVuMYJPpUS+lx7PKft5CvuSFiXcXc88VaV/9JOuHoXfv4ea1WOuNqRvbUjcM5La0gzx9HmXXco7D9MzaBM7YMT0bI9YEymIHL7xr2V0LSOOXuwSc0/uX+Nzn04tbYZpF0LVIctpNSCfKYtIDYATCBLpJTHudlP955l7+deRmxPnKYqgKMfztRrTvF9zv+5UeDnKuxoOQpqvvPVp9KuTK+JO1ZDt/1L3X7O1aAvnGBnSul3hbwyWFfNC6sD2x3FnyZ7y1tjlf7bRa4xW1LO3mQQzuOvfZp++vosK3tOWbLspyMmNd33ssHoutERiPS28iG4+BZSXY1dCrYFiwAsQ73rId99wqEHD34VLddHT1tZH1QFllcXrgo+AD0yjhzze0g1Qwm4doynLJSoCrp2+hcI24ojmNl3w5a/aVKcoODl7L3P9H5rIw/GeZyyFCyhIgeZZHpJOnnEDUoyRmSZhsdzLOu/RVkLn4X2SOvmoyB0jRYhESlqH9f8S8Q/JeRkkCFDEOwxCz6D/L3GoPa3V3vDfZqfDBR+8+3E3k1p3ktcwtZO535liL9g==

View File

@@ -0,0 +1 @@
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

View File

@@ -1 +1 @@
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

View File

@@ -1 +1 @@
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

View File

@@ -1 +1 @@
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

View File

@@ -1 +1 @@
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

View File

@@ -1 +0,0 @@
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

View File

@@ -0,0 +1 @@
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

View File

@@ -1 +1 @@
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

View File

@@ -1 +1 @@
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

View File

@@ -1 +1 @@
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

View File

@@ -1 +1 @@
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

View File

@@ -1 +1 @@
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

View File

@@ -1 +1 @@
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

View File

@@ -1 +1 @@
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

View File

@@ -1 +1 @@
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

View File

@@ -1 +1 @@
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

View File

@@ -1 +1 @@
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

View File

@@ -1 +1 @@
eNqdVXtQE3cexwd3Fp8z0mp91DTYuaGyYTebhBBEB0JA5CmJAvYc3Oz+kqzJPtxHgOATtVpRe+uJelrbUZA4FLCeUK1o1XpqK56jrcphxbNnLa3a4mOQ01O8X2I4YfSv25k8dn/fx+f7+Xy/3y33e4Eg0hw7oI5mJSAQpARvRKXcL4CFMhCllTUMkFwcVZ2bY7VVyQLd9q5LknjRFBtL8LSG4wFL0BqSY2K9WCzpIqRY+J/3gGCYajtHlbbxZWoGiCLhBKLa9F6ZmuRgJlZSm9T5Ai0BFaESXZwgqXgOMCrCzsmSyg4IQVTHqAXOA6CdLAJBvXhejJrhKOCBD5y8hOAaPSLJgp2DdqIkAIJRmxyERwSL/S5AULCsD6tdnCgpDf2B7iVIEkB/wJIcRbNOpd7po/kYFQUcHkICtRAeC4I0KLVuAHiE8NBeUPPcS/mM4HkPTRKB89gFIsfWhcpBpFIevHxcG8COwNpZSWnMgSCS0mNzSyGjrArTGDAN9lkJIkoEzXogRYiHgHhq+OB5c98DniDdMAgSUkupee7c0NeGE5XdWQSZY+0XkhBIl7KbEBiDbn/f54LMSjQDFL859+V0ocMX6XANptUY9/ULLJaypLI7SPmBfs5AEkoRkoMxlJ1oQy8/HsA6JZdShWHaPQIQedgfYEUNdJNksbwaagHOfu0PNcqunIxeEa+FjalOgbooR2wuOUaFGlRZhKDSolq9CjOYcNyk16vSsmx15lAa2ytl2GcTCFZ0QCksvbL7SZfMugFVa36l4EcCgsNqAvBhGyKghOdEgIRQKXUFSN7zCUHSU/Y/7y6EE5wES/uCaZUjQeWLfSXFFClTlMtbzKDxPh1O24FMOhpDLrzABdJAQAgjKtWYNl7bEDrqJb8WFosiGIqg2KESRIBceGiGhoQGv0NzCn31KIoefNlA4twATrRfhwavL/taCICBqgWSvwiji4+PP/xqo95QODSJj9Mf6m8lgr5oMC0jHnzZIBRiFyrWlfRaIzSltE2GN0V2vcGoi3Po4wzxFEUSqENH2YFdq9WSlFZnB9QXcNBpEkYJqMnDpYGIgIRLSSpV2mIYoiQwaIk4pscNsNIEFc2SHpkCVtmewgVqEBNUvAA8HEHtNaciZoJ0AcQabEDFn1KYnZSVbq61QpBmjnPTYOOVAWOLikhHkZ1JTPXN0ZuLc7LF/NI4S7bsJswsmeop8aVnWniLU2P1YLIXnSkXoq4sBIvTYdo4oxHXI5gG1cAxRdLlTAnLTVvAMVq7MX1uqY0pQnNJa1pWBp6Ke6y0xpuRnikasyyOvDxZnwL4gplsbo6DNWcnZZC2DLMnUwDmghRNYUlSqV7rnTXbrc9cSBZl0njSAiHdLhDOTCLeNzfXkFIISyQkV2Jsggp2LA1JTwzNDQLnBglMTZwJ7Z2aBBUVJCZR039HJqhmwCWfw3pKE1TWAMMA/hIMsMJ9nZjNsaBtEyRG9tJUYkmqRqPnM7xakSWtC0k+2UX7sBm+uZTb4mSsKTZu4RxristamGec1YcZFOJBQ+QYUJ0x2JovoP+fqD4vQPquASSHf/4287OcyNIOR40VCHCqlFrSw8kUXPcCqIGNkJdUqDTGYySuw4ABcziMuN1IIclwkfZG+9/SqA68K/yEBzael1T2u/BEtUmnw9UJKoZINBrgjAXfectrAo3KOk8OvDOpYkhY8BoEP8+erbN9v3Z82qjFrfmRD6ZOefivk7cXt4xb9Jph8N7jr80aVf/buKzT7bPNs/+efcrx9lHlny1bVrLfbNxs/NOYebeExx9Z5z2VB5z/2/mryTfKnNNG/nLnt59+6vF3c3fbbz79w69LlnTd4HvugGc/nGiPfXhf/m7ziGtPNlz7UkYSO97eaamZd2Wo6US5796TtpM3H2zf/umn276egFZ+/ut8Z37LbXw8OOHsGLOl9T/nPq5KY9gfWsPDjrU+LjTmHZu+7T0jd9SirT2EGA6sVi9LNVbOuGGr2hblvkJ+i7+Zt/vp5mO+lctWdEVcvbR04tDapvmad/jI+VM2JDfvmqQ6zXC4jahSDWmua4qOj2h5ffHay+a4CGP4zXNnDgyaKKYuX69acnxgyoCLg2l3YkHnsMNR6Fvvr5xfvqfl9fqfR+ywzdn+45OOmSBq6qyn+q4LEZfLlqxpDN9hd9LvH8yPxCnHzFV3BcuksnUDjVVf/Xi2u33rlbyx4drp81O14VlTm6b4Ms4nfJOJZ1pGzK5f+uzRluQtJbUXpz005nd1NZ6N+ktFdWXhB5Gyxt28q3jf/RsXHnZkYavemGk+FbbzMlLxhaljuH9X9/Ws5aMvblVvPD0x7vejMyJ2n+veIHdmZEab7hf80o5P1o1tkkb+fLtt7erj0Wv+XN69FnCFkWMHN308aHTymOhlK5KursubQM24NyCja3TxmXeio+p6bEzzowjH2fGbFpz+XbtL3LnIXtNJRrR8tz36H+tvnXGc3/rttJ6Sg7c+OLDibmr3I/PhisimoqEm8G7r3PWraxyTxoQdvVQ57hNPOj6k4/jlU58oEddPXhrREK+5R98/Oc3t0eyY3BD7fef1+kHbKtJzNv/13rnusRvqTw/3kmsWbSz4aE9P3I5OonNT2pWeSf8mvyqbMOyEb9SwC9MrF8WMjvnw6tLKiX9sWDneUrrmrdY3Zp2ZPNDLZjZ3+C8UDn9wqKLR8ubky3F7sh8vvDcy2NKDwoatcuwtDw8L+y+SEjoQ
eNqdVXtQFPcdR6nK+GgTGmNMxrjeqGla9ti9Fxx4jsjBcSBwcCgPy+De7u/uFvbFPu6BtaWWpDo6gcXamGhoFLxLkaAoxicWO22qg4k6liZUE51UjdrWJghOEVv6u+NIYPSv7tzt3e73/fl+P9/f5rAPiBLNc9M6aE4GIkHK8EFSN4dFUKsASW4IsUD28lSbo9BZ0qqI9MAPvbIsSGnJyYRAa3kBcAStJXk22Ycnk15CTob/BQZE3bS5eCo4IGzUsECSCA+QNGnrN2pIHkbiZE2aplSkZYAQiOTlRRkReMAihItXZMQFCFHSJGlEngFQT5GAqNlUmaRheQow8IVHkFG91ojKiujioZ4ki4BgNWlugpHAprAXEBQsq7HNy0uy2jk10YMESQJoDziSp2jOox7x1NFCEkIBN0PIIAmpk2SqHSbJgSgYansNAAJKMLQPhMZt1UOEIDA0SUTkydUSz3XEikLloACeFLdHKkAhApysdhfCVDLsyY4gxJVDcG0KpsUOBVBJJmiOgUChDAGzCglR+anJAoEga6ATNNYzNTRu3DlZh5fU/fkEWeic4pIQSa+6nxBZk+HI5Peiwsk0C9RwpuPJcDHhN+HCei2Ow0/XFM9SkCPV/VHkj02xBrIYREkeOlH3Yp0TADGA88hetRXHde+JQBLgmIBfhKCZrEib22BLwIVz4di87CvMm+jl53EL2qywPWpPtkgnIZgOySeCiA7TGRHckIZhaQYzYssv6ciMhSl5ah+6SkSCk9ywF1kT3Q+TXoWrAVR75lM73hPpOKwmkj6cRhQEBF4CaCwrtaMMLR4nCmq3HhkfMpQXPQRH10XDqj3R1vvrAn6KVCjK6/OzmLnOoKddQCHd3TETQeQjYWBCKCupbbhOb+qMiSbQb4fFYiiOoRh+MoCKEAuGZmkIaPQeoyu0NWIYdvxJBZmvAZDYYQMWvc5M1hABC7sWCf6tG4PZbD79dKUJV3pz5MJOTtWSwORscB0rHX9SIeZiHyZ1BCa0UZpSB5bChyodmWIGZr1LhxvcODDpUnGMMGGkzmCkXHozaT4B+U6T0EukmwLcHagESLib5KA6kMQSgQjTLHrcqDfBStMRmiMZhQJOxWXlIzVI6YggAoYnqIOkGyUJ0gvQ8QFUw9bygox8e2a7EyaZyfM1NGj+67QXqqpId5WLtZRkr8kDFaxX79H71pWn5q2l9HbFbKWz8+SiMmeVze8XcEd2AVuk+FE8xWDCzQaDwYziWkwLiYN6cFN1eUaFYqupwIsqjNlkiXsNF8h0SqVGI04auECgJMNfKOZT69a61q3NDNaS2bwpxWjzOa2BWsXt0dlXczLmYc3rcrGgK7cK+Cqsot3kyK1Oyec9WGktZ0zN8PnLgzk1sERC9lqS0xE4sTQE3RLjDQp5g46zRj/BmnSEigJj0U5dlelIDtz1hRwTTEecEYQB/CVY4IRr21LAc2DgVxAYxUdTlrpSL18ddAZsPm9WKgvoCmArzCgx2e0BqxLM5QMuG+e0GgwZ2WWeScjgJjjOMXBMmCE1Oprfpv5/ZvVBGTp5DaCFwvihFuZ4iaPd7pATiJBVajvJ8AoFt74IQpnZaHFGudpt1ptTMRLTuUmQSpnMOtSeYT004e2bpdEWOTLCBAMHz0eqR7x6iybNYNBr0hGWsKSaIMeiR9/PQ5FB5Tx/nN62eFtCXPSKh9+xse0lZ7mXbHN7/v6jLSeGDj/fkd1VdN2FvFrRvar+BXYzhziOXHtnq8c8p7kmK+Hxv85ufy6PTkQWLPr3bYuluXGUnnbD9SXXO1J/+0+vVl47Y08eW3j/Ue1Pb7x54MDosdHrIwfzxu7fe4Mbk/OJm/+cNfjwtaNDwT2J5Rd+Ut/zzIvz+/uHH1UPX63rOdPZuys99zXTGt/XzMjj37sHbm/r6z94sfFCU+srSspX16fH3XD+B335RGvj/Zna3ck71ZJaxP9gKKHXXrD/C4exfcnumoJ3LzJ/6H+4eO6m54udd7aEZn7QsA9ZaFsVv3p/6Nbvvo7/bdb3ju4tz3nJseNCPOK/NOfy4Vs/a51xxzPtow1LHo3OftSQji6b9wPnlcHKdy3n9iQkPfMP170NpW81NOfMn753l3Y9N7Lz5rOPT/e73LnHZ/XVf7ZnDbHgwLGr1ce3fB9h9P5Dy5Z3O4aHVxZfPjnnuRkzz59q6/8E0e+ePuK4ltvyy/izDTm7f11Vf6kshDaNbrZOoxZvnfdhz4vnM47fSlmYuPDC7JVN1vfTcsPEWeRc5ZXBmvPZn79RvaQRNO1oal5xqevtplOg7+DhVTfv5SRcKVsj7BzNOtt6iWjGPlzy6ZnOeQ1f9M4eWnX4+ozEiha+8r3fzM+7Fyi4O3fVbaaseP2Dh//dsmLlsqRbRPPp/rGiysXm6k8T9rq1dHHfjgN3/jb9xqb8wcdrUz9bGtzDkCMt966/37Lo5rW7vo97+4afPcrs+ri+X3mwqCff9jp+dwBNbVzp8O9r+e6sL7W39Rtq/zJ8zHcmvOnOisGv9IOv9G58e/vJj5b+OWtM6Qt7Vt+6OtjqKXR2vl5pdwx1d+UUmy4XNUppP+65kvhJ7RXbyznLtw4P9S1f0LjtYnQU4+P6Wma+M/KduLj/AQcpInA=

View File

@@ -1 +0,0 @@
eNrVVk1vG0UY5uPGkV8wWiEhIa+9ttfr2iiHKFRtoVGLaqqitlqNZ1/vDtmd2c7MxnEjHyg9Iy2/oCVRUkUtRQVxgUocOfAHwoHfwjtrO6VO2lThhGXL9vs1z/v1zN7b3wSluRRvP+bCgKLM4B/93b19BXcK0Ob+XgYmkdHOhfODnULxww8SY3LdbzRozus64yapp1TELKFc1JnMGlyM5O5QRpPf9xOgEYa/f/CFBuWuxiBM+bO1rvzcfNLw6s160+8+XWUMcuOeF0xGXMTlk/guz2skglFKDezN1OWPNM9TzqjF2PhKS3GwJoWACnN5sAGQuzTlm/BIgc4xDfhmTxtqCn1vF+PCn3/sZ6A1jeH7K58twP391vu/2fBauxjMKJm6q2kqx+56lbcuH360+wliKJ8PkqJGvICsU0VaXqtDmkG/3e77XXJhffDriTGuKB5zUT74acAzTGtJ+mSNsgQWLuWzvBhidjWS0S0XQa4E3v5qatxrm6w8rCftFafv+23nY9SvtDq9lud5taTttnonKJ4vwTm/lUsN7sVZzpjTyTm/0O9ep2pS7s2g/mCtsHnuZRCxScqdoNv6ZSnAOoLGDqPO83auc1oeYGdJLGWcwtMbrrWuYHDsTfnQ27uqaJzR8pGQLrNleHbDxTLTSMbuAMcQ3EtReUg6TW/YG3UpbfqtJgPai+g51qI96nm9YdRrHZIT81hTECFeTlNd7hpVwONFBoNJDsfnaH8BbN7kJvmUCtLsdT3ief3qbZtcjfXXOFMKm/nXOw+2nfn2OH3Hq/fqncCpOVzgzAkGIY5urJ3+tjNM5TDURmLGEIKgwxQip29h1ZZ1WGzAYNfaGCjCcmgwIWzRLE9Bh1mRGp5TZZaDnG6Bq4fLbSCkPMS9VpNlA6nikCmoShJGXM+VI6wganM6ybB6y045Zi8FTUP01se9dPtVWWugiiXHpIkch8akYcEXImNHITQcVBgVao6OTqqyplLEdtvR38dVsO7KzAVNf1pzxlJt6NwG0EzmYFGGXGxyA/oI411tohBpK8fu206+jAmDDKlBpNhvJEM0FCMe28MLDS9VO8olEuhRJoymEBZ5eEfzu4gftygGhbC8CuhCK0yCJY90mCI9oHMzWCgjORahgCw3kxfePmptuIV1FetIEA4nVWItr9dtdlredPreq1l85TQWxw9KdUOlWQM76OYKa2Qalo21+R/R+7enkftZiHs3eu2FEFiuODN1P2ZzqjInUtV/ZvZjZH7O959UFOyy+U10RMpvSq+vuwz2cDiQJsv9YpMzqcTy5fAyqb57eduZzV6YUJ0gF3Y832/RUbPdhqDZ6QbQ9TvtgAWdTsBgBM0RZThijEZeuzXy293uMPCY3w4gYBEbBoBMmlHBRzi3dnE5rvZN52jYUTsbbY2/UGLwaw2/rlbCAW6gnVDnds1JGa4cMhJ2BVFhqRBxwZDf0GNjTNWM6+cTiL9vvtFZFwsEtz5zOuuZs6CnJTe3qjlnPcYsPPrOl7IgVAHBS5IibdoLz5CRVKRiGxxVlwo9BttRgpfYhq4T5AhiEkArO0JWkXPAoSFyRBRg8wGJm1Szv2WIkWQWofJZRK2TSyMywbMjKT40ZEPIcaWfmdbIV4U2RNMJCqlZMlwgUABEg90Aezg+avGsyDBCRCzB/CucxcK4hvot8fn8/D7ZXkCZkltibQYWpXPYVrhaOferB4G8MOEmVdzeKHYinIW37f/MxZZ/UdgQK5jhVPSdkTtbB2eKr9tvHGo6ffEsgDa3p/8A34xtTA==

View File

@@ -1 +1 @@
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

View File

@@ -1 +1 @@
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

View File

@@ -1 +1 @@
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

View File

@@ -1 +1 @@
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

View File

@@ -1 +0,0 @@
eNrVVk1vG0UY5uPGkV8wWiEhIa+99vojNilSFKq2QGhRTNUqRKvZ3de70+zObGdm47iRD5SekZZf0JIorqKWooK4QCWOHPgD4cBv4Z21nVInbapwwrJl+/2a5/16Zu9OtkEqJvibjxjXIGmg8Y/67u5Ewu0clL53kIKORbh36WJ/L5fs6L1Y60z1ajWasapKmY6rCeVREFPGq4FIa4wPxL4vwtHvkxhoiOHvHX6pQNorEXBd/GysSz87G9Wcar1ab3aerAQBZNq+yAMRMh4Vj6M7LKuQEAYJ1XAwVRc/0ixLWEANxtotJfjhquAcSszF4RZAZtOEbcNDCSrDNOCbA6WpztXdfYwLf/4xSUEpGsH3Vz+dg/v7jXd/M+GVsjGYliKxV5JEDO21Mm9VPPhg/2PEUDzrx3mFOG2yRiVpOI0Wqbd7rttrdsiltf6vp8a4KlnEeHH/pz5LMa0F6eNVGsQwdymeZrmP2VVISndsBHmh7UxWEm2vbwfFUTV2L1i9ZtO1PkT9hUar23AcpxK7dqN7iuLZApyLO5lQYF+e5ow5nZ7zc/3+dSpHxcEU6g/GCptnfwY80nGx1+40flkIsIagscOoc5y964wWh9hZEgkRJfDkhm2sSxgMe1M8cA6uSRqltHjIhR2YMjy9YWOZaSgiu49jCPaVsDgi9S64IQ0dGviNptsMO92u67ZD120N/G7Q8Y/IqXmsSggRL6OJKva1zOHRPIP+KIOTczSZA5s1uU4+oRwP7zjEcXrl2zS5HOuvcaYkNvOvt+7vWrPtsXqWU+1WW22rYjGOM8cD8HB0I2X1di0/Eb6ntMCMwQNO/QRCq2dgVRZ1WGzAYOsuBgqxHAq0Bzs0zRJQXponmmVU6sUgZ1vg6uFya/Ao83Cv5WjRQMjICySUJfFCpmbKAVYQtRkdpVi9RacMsxecJh56q5Neyn1Z1gqoDOIT0lgMPa0TL2dzkTaj4GkG0gtzOUNHR2VZE8Ejs+3o38RVMO5SzwT15rhiDYXcUpkJoAKRgUHpMb7NNKhjjHeUDj2krQy7bzr5IiYM4lONSLHfSIZoyAcsMofnCl6odpgJJNDjTAKagJdn3m3F7iB+3KIIJMJySqBzLdcxljxUXoL0gM719lwZiiH3OKSZHj33bqLWhJtbl7GOBZ4/KhNrON1OvdVwxuN3Xs7iq2exOH5QqmoySWvYQTuTWCNtJwlNac1wstL/I5L/9iyKPw9974evvBbahjHOTeCPghlh6VMJ6z/z+wlKX+q0HpdEbAez++iYml+XZF91JRzgcCBZFpN8mwVC8sUr4kVqfXtr15pOoBdTFSMjtrsubYR+q9nsgOu3lgKn7dA2DZxGp7UUBp1BnZpXE6DdqDfDeqPjDzqOj2Wtt5baroN8mlLOBji3Zn0ZLviGdTzyqJ0OuMJfKNH4tYpf10phH/fQTKi1WbGSABcPeQm7gqiwVIg4D5Dl0GNrSOWU8WcTiL83XuusyzmCW5s6nffMadCzkptZVazzHqPnHj1r48rn6/3N5eX1m+sffURuipxQCQQvTopUai5BTQZCkpKBcHBtytUQTH8JXmxbqkqQMYiOAa3MQBlFxgBHiIgBkYCjAEjmpNyEHU20INMIpc88apVcGZARnh0K/r4mW1wMS/3UtEJu5UoTRUcopHrBcI5AAhAFZh/M4fj4xdI8xQghMXTzr3AGS8AUVJeXa9Osv+JfzID0yO4c0xjFq1PUKJ3hN8KVMkqPbNTK0pVPC1muvW0qmbl2zMBY8yhmPKaupjvzuntY0hSHpmcN7Om2WGN8bb52qPH4+QMD2myO/wFK03fT

View File

@@ -0,0 +1 @@
eNqVVnlwE9cZtzkSh1JKmmYgmTGoGwYS4pV2dUuOGx/CxgRbxhb4Koin3Sdppb28h2TZ9UyBkskE0mYHSBNKpg22ZXANBkw54zQUCMz0dtzO2FCTpslASupp66QZmkD6Vge2Y//THY32Pb3v+H3f+33fp+09MSjJjMDn9jG8AiVAKWgja9t7JNiiQln5QZKDSligu2q8db5OVWJGVocVRZTdJhMQGaMgQh4wRkrgTDHSRIWBYkJrkYUpM10BgU6MzilsxzgoyyAEZczd3I5RAnLFK6m1khAh5sYU2KpgBemXG/NAmZKYADQoYWiIQ4BekoHh0ZaRDQyHDLmxjoL7yqlf/KrEIguTa3c7lnphWbyqyAqANsaZKMNBmgFGQQqZ9J2o73TcHMJsUsIqFzDRJpo2VQRFPM7ICK/M8DgHaEYWeByhwXmgqBLEAwKQ6Dhgo8aIGDKZbXZCbMX/Py2so2NzASYJrB6JKkMJ0/ecQEMde0hUcKuRRIHJigQBh7mDgJUhypQgsPLUDAZVPnV3SPT+EqWAB5x+mkmiX1dDEnQqwWJaaNZ0IyERSEgZkULWDYkSumtJYWBql5VCS8irCFYzJqs8n0BqFCuotL6QAIN+QMFkEKIIGF6PFx0hcjESpHW9rKlJQSEQgZSCBDs2d/SEIaARhLGcxV1hQVa0o9Np1w8oCqIkQZ4SaGReOxJqY8QCAw2DLFBgL7oFHqayofVGIRRxwDIxmExraceAKLIMBfRzUwRdU1+Gm7gOZeZxr35BOGIYr2gnvQhESaWpJoHqgzeQRgdhJI614rKC4mYR33EWIDxJMXV+fuqBCKgoMoJnak9LppWPTpURZK27ClDeumkmgUSFtW4gcXbrwNTfJZVXEKu1nrKame4yh/fd9ViMJIk+x6dZlhM8pXWn6HV6mjZUpAROCciI9gaRpAQhykBtNPdBv58K+gNcUZ3fEvNbAhFPzMFyld6AnWcb1Von79vokNpCzFpbiTGyaf26al+8CicdVqvLaXcRZpw0EkaEArdXcrF4bcOGhMjzmzzlDRTXsq6lPFASLfFz3tKm0rWkTfFtiK6vMEf9PlaqdoQ50OJItFRG1pWysKKkwZMI0eIGX4uDV8iGoLVGoBWy1Ot0rPfVVjdWEy22RiHibamzSaFCA4Ksxhi6iKvdaC8JcYlgIF6/NlaxRoow6yo3EZsIm9PjquQCpRba72+CSn1TaApmh43AiSxswuok9OdoljIs5ENKWOu0OchDEpRFVP9wRxIlUlHl7V2InvA3V3syjfCg97lJZj/W5UFU1QbLJabAQDoNJaJkMBNmm4G0ui02N2EzVFT5+soybnyzMvO4TwK8HETsXJOthB4qrPJRSPeWzVoDg3oNoPvV4aP2g8NWUZAhnkGl9TXgtekRgFd6BtIFh6OOCXimLeVWG0wVQ7ytNU5TKk2HY3GOcLVZLaiTqFTwZEYF9Q3dDQKEc7LWZbbbzEczR1k+9qJgCZxEuSXfasUllAuW4RiU0NQ3w4sq+tb7OioJm57yczOlMuMKedAlzswUUIQoRIMtmb60EWyqhAQ5xHYd4nRnVhd63ppdctKhLvXm7EJZpw6Xy2y2fsWSDL8SXCfJyedmykx6Is2cfGamQMZLl83JyX2tWXmcobWRFWjjt9sdpJ12WkiHy0zazRQBbAGCouwOGyRsdpfjrN6ZKWRHp5AoSAouQwqNeiWhjRRwoFVveEUW0maxo8wVokFMsSoN69SAR9ADlQsNogT12dpPBXEKUGjSpVmv9Xgaq0uqKstONeBT6Yt7xfTfjB5ekHkmGEzWQQmxQetNDQ/UuSWYLCvHa0satZMui9kKzRDaKcJqpUknXop6YtbafbJ36W2/B7AIe4zSBsKWIsxttVqwQgMHipx2K0Gk/oxsS6an0OXcL5bvystJPXN311UJ14iFg5/X5z2zaueecy3vN7ePLmo+PWeQfmrhmiRnO7HiFrV58Qe//MYrj1yrtGz9ztLty5bf+WTtMqz0+0tefnirTe37Y+C/nwxuudS/8e6/N+7/jDv+zs3lQ6tuDw+c9YIh8/B/8l8rHBh/NXKy+Mq+j7cGX3azA78bWtGIL/m586HizgXfwo8M8fuv/zY50XqPeGnPRwUuMnr5saarV/tfWFy66K83Invn39u2+9Keiaodfx5a8O3bO/JyOz3tc4eb+Px9i1bOvbpXebJ5ZOhr5JwDtVjI98Ib4mf55TcvPLnas+WZic//8rcrv/59/b+4R5/t45g/jT93uOLTc8Pt+fP2bTkx9rOHx26E6i/n5Vb+5O27xX+PWBNPT7zozaupu/NAd/QXF4H8w7HiU7m3u68L7+Ut6aKU21/YzZe2foQ/+tPXD9aurmi+cKH39CPSx+cxX/dLo6NPr977Xan55gOHv/6j/PZlr++c99B7ptEFo4fKz18/nP/8wYGRwFj3TjBe/s/357k/PLT03aEPPyh/583iisSt7z3L7j7x+K5thQvzP51f/4Th8cF7AweazxY+eKbv3qq7OcTzo0CL7pgf+rF32a8Wnmq/039s7KZhacH+GwfAuHP/qSfmvzK8i6feHj9ycaXpbN8fwhcvjhYfnvjH3W++u2Js5VOeK7dM6Jq//HJujrk3ea14Xk7O/wDBk1ep

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
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

View File

@@ -0,0 +1 @@
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

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
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

View File

@@ -0,0 +1 @@
eNqVVQtMFFcUhWBNSesPatQaZTtQCHVn/+AutFVYkaDlIyBVROHtzNvdkdmZceYtHxFT0aZRInGMn0YiFllYu0GEQksVq1YtNRVNtaaKMbSptpjaRq1S06TVvlkW0IqfbiY7+969597z7rn3bZW3BIoSw3PBzQyHoAgohBeSXOUV4So3lNCGJhdETp72ZGXm5Da4Rab3dSdCgpSg1QKB0QAOOUVeYCgNxbu0JXqtC0oScEDJY+Pp8svBbAXhAmWFiC+GnEQk6HUGk5oY8iESllUQIs9CIoFwS1Ak1ATFYxYc8ltQuaBYECxD2OJ/JRDzoESJjA2qkBOqSiHAL1HFcHjJSCrGhcMmEJXqYbB/B6Ml3i1SeGPY4BZZvK18JxBDB3ILLA9oTSlTzLggzQANLzq0ykpQVlp8QheujRY53S6bltbStDbVLpCljIRZSwxHugDNSDxHYk4kB5BbhKSNByJdCthizUrBoTXExeuEMvL/oYjKyuWVy3HVeBoqbCkWuGlIGsk4EsM4iEgWIKwUUel1QkBjOfuCJnmcvITktsckOgAoCgqIhBzF0wznkPc7VjOCWkVDuxLFRykR/T0g+4ohFEjAMiWwvYyUEGA4FgtHIlwc3o3kjzMycwtT0/JSMpoGg8qtQBBYhgIKXLsSk2sOyEkqRX/c7FNEJ7FAHJI7k4ZoarPKccNxKp3GZNHoWh9OzQLMuEnw27seNgiAKsZxyEAzy02D4JaHfXhJbkwHVGbOIyGBSDnlRiC64k2PnFJ0c8pBZa816/F0AeNwOq9Ro9fjp+2RyFI5R8mNdsBKsG1YhGGMz6AzGEldPKnTdz4SGyKxnKR4nEKu17UMVZCFnAM55QZjvGmfCCUB9w5c34RhyC1VebCYsOeUNzBYezMXjrTCVM88LKz8xXyRUav0ZlWSIKpw6jiV3pRgxI9BlZqe22wNpMkdVai2XBFwkh2LlTLUN17K6eaKIe2zjtoxvcTIiUWcn2VcDCIDdwoWUlnKHpNOp+uNfqqnCF24MkpGj9FisTwjLq4MRHKHcj5SZyL15tzBUxos+aPnYTjBjdvTfz0FWDUprDCvN57pP8JtCBP9HJjRGRp1+b0xo6HxqD1GsdHszzbr2f4jFAOYmOfBPIGiIb9XNRr8P+UbTBT1FM+HCzforXqq9xNL5gsoTzK0fBj/LtTp9daM1AwjvXgRYpKd4hJudn4GPd92cCQ+vtQBx6z2d7eC640yWuKNcbTRRkKbnSZNFvNs0mIx6EmbwWCmTWb9bBMd31DCANmHh1zl4HkHCw9QdpICFL6zB2dQ9s5bmpGUnmZtXkJm8zYeN2MuwE3L8RxsyoEiHnvZR7G8m8YXrQibrPPJ7KSlcofFaDBBg95mMtvN+LGRyfiCGprG4WnzKLe0/y91HZ55EW99FXwjovrFIP8nhM7+sua7uS//M7lYU3B+8bKSSd9M/lyduiM8eXvi1ei8mLrm33vDfPcTFxxKaTZvvnbv7772t/qPxXaAVq6zb80Dw5XSZRFH1lZMe/vG1J9v3773S46zKjPyjNpwoiY5vOPawffsbM1P9aHWtG3W6bbuXc6BtQOtnxDJRy63dN6rHSiZvmtitXnjB39+/Vf0r3eLucK6+DcHxsQk30xb98JhR8jM1shjq6JyQ7StMXMvhef1W8+MO/nOvi1CVXjFhEhff6hNE5delBrdtd5bty1o+48n4zMmLv308na6qGVD6o7xupX62oHtXX1gz6x1M7wpwX8U1DJ5XTU94y79MM3jk85V7MoxT7hwbElP2Z6YU9fHlAnZsSkfXZ2y9f3VyTNevb4gI+pWgb49M2v8S59NTToYlpjSVSOc7uo5d0etDlXvTYxtHLskLLWAmLll4KaGkk+eTfntUGRs0ZWNZ9ZuUme90lM9fnZEz4mj6e3151/LQQsunp74oXT2IlpYI+vO19vnRmzafLq7sL93ygV0fM2Y6ig0RTOntmhF9+6wfPnbsVs77vjCVgQ39C8Ii+3Ilrjk5fdXVIxXUwO7d0ZufL/kzq3b1nCiu65kUWj/4a7ObQPj3j1+d06e7+ikAl67cw5W9cGDkKD9dd/vnhoSFPQvid/bWw==

View File

@@ -0,0 +1 @@
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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
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

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
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

View File

@@ -1 +1 @@
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

View File

@@ -1 +0,0 @@
eNrtVs1u20YQRoA+CLHoqRAlkpJoiUUOhmEkQGo4QNwWRRAs1uSI3JrcZXaXkhVDh7q59sA+QVsbVmAkbQ9FL23QHnvoC7jnPkhnKSk/jooYOdVABQikdnZ2vpn55lsdz8egNJfixlMuDCgWG/yhvz6eK3hYgTaPzwowmUxObm3vnVSKX7yfGVPqqNNhJW/rgpusnTORxhnjoh3LosPFSJ7uy2T6+zwDluDxj88/1qDczRSEqX+yuxs/t5x2vLbf9oPBD5txDKVxt0UsEy7S+ln6iJctJ4FRzgycLcz1j6wscx4zi7HzuZbifEsKAQ3m+vwAoHRZzsfwRIEuMQ348kwbZip9fIrnwp9/zAvQmqXw3e6dFbivThOMUD//FJKWE3Sd3dg4gRf0HD+MvEHU7Tq3dvaexhKrI4xrpiW8CeO5xae1i2iMkrm7fVhKDe7tRYT62w9+vbRhM8/l5BX7ySec1edYCieVMs3hWcziDNx4sb1+IqTbrJxhHbFh9bwa81gq8cvac3cVT7mov/l+a4n6IxCpyeqT3qD38yWPHXZoG1OfhJ63HuVO03+L8sJZu2FLQYJROMt1fWpUBfPN3Lj3xnF90c66N0nU63XJh07Bbgb9YeB5XivrusFwjaGhzRfYM4Uc+OvG30dkyU4SEa89aIekRbDwgJ2lcFhy1bSAGl4AiUSV5y2yz0ycUXRH7lKs34inJDoiFXoUVW54yZShIJJSIt9JZOG2iI5ZDrQq6UPNHwHF8GkKikS+BfvSKkymsGWa5hz5i+ZwZUzkRFABRWmmL717aLXHrXY3Z71YoPtTA5pEgTfc8PuBN2sRLpCtIgaKpE+1hY0TgzNpgDJOcRzVFKGz/RySFXKpUhojqKYOCddL4wh7YfPK5IQak9OKrxwMjjhmyEHRpFrWL2HTJlouRWrHBw/oNWAzqcxywe8hQA1MYXUvYZhIdaBLe6yOZQnUYuJizJv0Vki6VBupcPRe957N/l1p7rxNafCLq7qTTXBNg7/RwfCCcddImWuXWb3pWP3Q5n9B+i8K0qkf+P1rpEjv/XZEFqSjSLgMVSn2B+FGMPCDjcGQdfeH4XAj7IdJ0u8OIRl5PjZu0E9iBt2wOwwTb7/fGzDoBawHSRiO+ihoBRN8hBS1E8hxLO6TFyxHa6kkqorGN1wx+NjCx91mcQ/1xpKRPEBVjHFEcbqRDRYVUg3TjnHi0ONgwtRCTpZkw/f7V4p1b6oNFDsLr3cNujj1bdktd7XIu4YxK4+IfCYrhylwmJNBXo6q3GFac6utNgAXZWXomCludcjWAmOsvOlIqgJzj8jIXTTdYsM7A7n0qs/RzH5aV6risn76bo4amckcR+zqacnSDjXLV2K7wkAFKxo/jEEzbsV1Sq6K6HaFpLt2bT1qOjdb28LFErkenVzeiZdb2dxXeIcq+xemZAm288HaXN/Y2HqdBq1VNTAvAocMC7Lg+ewf6nhqJA==

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
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

View File

@@ -48,7 +48,7 @@ From the opposite direction, scientists use `LangChain` in research and referenc
| `2205.12654v1` [Bitext Mining Using Distilled Sentence Representations for Low-Resource Languages](http://arxiv.org/abs/2205.12654v1) | Kevin Heffernan, Onur Çelebi, Holger Schwenk | 2022&#8209;05&#8209;25 | `API:` [langchain_community...LaserEmbeddings](https://api.python.langchain.com/en/latest/embeddings/langchain_community.embeddings.laser.LaserEmbeddings.html#langchain_community.embeddings.laser.LaserEmbeddings)
| `2204.00498v1` [Evaluating the Text-to-SQL Capabilities of Large Language Models](http://arxiv.org/abs/2204.00498v1) | Nitarshan Rajkumar, Raymond Li, Dzmitry Bahdanau | 2022&#8209;03&#8209;15 | `Docs:` [docs/tutorials/sql_qa](https://python.langchain.com/docs/tutorials/sql_qa), `API:` [langchain_community...SQLDatabase](https://api.python.langchain.com/en/latest/utilities/langchain_community.utilities.sql_database.SQLDatabase.html#langchain_community.utilities.sql_database.SQLDatabase), [langchain_community...SparkSQL](https://api.python.langchain.com/en/latest/utilities/langchain_community.utilities.spark_sql.SparkSQL.html#langchain_community.utilities.spark_sql.SparkSQL)
| `2202.00666v5` [Locally Typical Sampling](http://arxiv.org/abs/2202.00666v5) | Clara Meister, Tiago Pimentel, Gian Wiher, et al. | 2022&#8209;02&#8209;01 | `API:` [langchain_huggingface...HuggingFaceEndpoint](https://api.python.langchain.com/en/latest/llms/langchain_huggingface.llms.huggingface_endpoint.HuggingFaceEndpoint.html#langchain_huggingface.llms.huggingface_endpoint.HuggingFaceEndpoint), [langchain_community...HuggingFaceTextGenInference](https://api.python.langchain.com/en/latest/llms/langchain_community.llms.huggingface_text_gen_inference.HuggingFaceTextGenInference.html#langchain_community.llms.huggingface_text_gen_inference.HuggingFaceTextGenInference), [langchain_community...HuggingFaceEndpoint](https://api.python.langchain.com/en/latest/llms/langchain_community.llms.huggingface_endpoint.HuggingFaceEndpoint.html#langchain_community.llms.huggingface_endpoint.HuggingFaceEndpoint)
| `2112.01488v3` [ColBERTv2: Effective and Efficient Retrieval via Lightweight Late Interaction](http://arxiv.org/abs/2112.01488v3) | Keshav Santhanam, Omar Khattab, Jon Saad-Falcon, et al. | 2021&#8209;12&#8209;02 | `Docs:` [docs/integrations/retrievers/ragatouille](https://python.langchain.com/docs/integrations/retrievers/ragatouille), [docs/integrations/providers/ragatouille](https://python.langchain.com/docs/integrations/providers/ragatouille), [docs/concepts](https://python.langchain.com/docs/concepts), [docs/integrations/providers/dspy](https://python.langchain.com/docs/integrations/providers/dspy)
| `2112.01488v3` [ColBERTv2: Effective and Efficient Retrieval via Lightweight Late Interaction](http://arxiv.org/abs/2112.01488v3) | Keshav Santhanam, Omar Khattab, Jon Saad-Falcon, et al. | 2021&#8209;12&#8209;02 | `Docs:` [docs/integrations/retrievers/ragatouille](https://python.langchain.com/docs/integrations/retrievers/ragatouille), [docs/integrations/providers/ragatouille](https://python.langchain.com/docs/integrations/providers/ragatouille), [docs/concepts](https://python.langchain.com/docs/concepts)
| `2103.00020v1` [Learning Transferable Visual Models From Natural Language Supervision](http://arxiv.org/abs/2103.00020v1) | Alec Radford, Jong Wook Kim, Chris Hallacy, et al. | 2021&#8209;02&#8209;26 | `API:` [langchain_experimental.open_clip](https://python.langchain.com/api_reference/experimental/open_clip.html)
| `2005.14165v4` [Language Models are Few-Shot Learners](http://arxiv.org/abs/2005.14165v4) | Tom B. Brown, Benjamin Mann, Nick Ryder, et al. | 2020&#8209;05&#8209;28 | `Docs:` [docs/concepts](https://python.langchain.com/docs/concepts)
| `2005.11401v4` [Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks](http://arxiv.org/abs/2005.11401v4) | Patrick Lewis, Ethan Perez, Aleksandra Piktus, et al. | 2020&#8209;05&#8209;22 | `Docs:` [docs/concepts](https://python.langchain.com/docs/concepts)
@@ -970,7 +970,7 @@ reducing degenerate repetitions.
- **arXiv id:** [2112.01488v3](http://arxiv.org/abs/2112.01488v3) **Published Date:** 2021-12-02
- **LangChain:**
- **Documentation:** [docs/integrations/retrievers/ragatouille](https://python.langchain.com/docs/integrations/retrievers/ragatouille), [docs/integrations/providers/ragatouille](https://python.langchain.com/docs/integrations/providers/ragatouille), [docs/concepts](https://python.langchain.com/docs/concepts), [docs/integrations/providers/dspy](https://python.langchain.com/docs/integrations/providers/dspy)
- **Documentation:** [docs/integrations/retrievers/ragatouille](https://python.langchain.com/docs/integrations/retrievers/ragatouille), [docs/integrations/providers/ragatouille](https://python.langchain.com/docs/integrations/providers/ragatouille), [docs/concepts](https://python.langchain.com/docs/concepts)
**Abstract:** Neural information retrieval (IR) has greatly advanced search and other
knowledge-intensive language tasks. While many neural IR methods encode queries

View File

@@ -6,5 +6,5 @@
- `BaseChatModel` methods `__call__`, `call_as_llm`, `predict`, `predict_messages`. Will be removed in 0.2.0. Use `BaseChatModel.invoke` instead.
- `BaseChatModel` methods `apredict`, `apredict_messages`. Will be removed in 0.2.0. Use `BaseChatModel.ainvoke` instead.
- `BaseLLM` methods `__call__, `predict`, `predict_messages`. Will be removed in 0.2.0. Use `BaseLLM.invoke` instead.
- `BaseLLM` methods `__call__`, `predict`, `predict_messages`. Will be removed in 0.2.0. Use `BaseLLM.invoke` instead.
- `BaseLLM` methods `apredict`, `apredict_messages`. Will be removed in 0.2.0. Use `BaseLLM.ainvoke` instead.

View File

@@ -15,7 +15,10 @@
* [Messages](/docs/concepts/messages)
:::
Multimodal support is still relatively new and less common, model providers have not yet standardized on the "best" way to define the API. As such, LangChain's multimodal abstractions are lightweight and flexible, designed to accommodate different model providers' APIs and interaction patterns, but are **not** standardized across models.
LangChain supports multimodal data as input to chat models:
1. Following provider-specific formats
2. Adhering to a cross-provider standard (see [how-to guides](/docs/how_to/#multimodal) for detail)
### How to use multimodal models
@@ -26,38 +29,85 @@ Multimodal support is still relatively new and less common, model providers have
#### Inputs
Some models can accept multimodal inputs, such as images, audio, video, or files. The types of multimodal inputs supported depend on the model provider. For instance, [Google's Gemini](/docs/integrations/chat/google_generative_ai/) supports documents like PDFs as inputs.
Some models can accept multimodal inputs, such as images, audio, video, or files.
The types of multimodal inputs supported depend on the model provider. For instance,
[OpenAI](/docs/integrations/chat/openai/),
[Anthropic](/docs/integrations/chat/anthropic/), and
[Google Gemini](/docs/integrations/chat/google_generative_ai/)
support documents like PDFs as inputs.
Most chat models that support **multimodal inputs** also accept those values in OpenAI's content blocks format. So far this is restricted to image inputs. For models like Gemini which support video and other bytes input, the APIs also support the native, model-specific representations.
The gist of passing multimodal inputs to a chat model is to use content blocks that specify a type and corresponding data. For example, to pass an image to a chat model:
The gist of passing multimodal inputs to a chat model is to use content blocks that
specify a type and corresponding data. For example, to pass an image to a chat model
as URL:
```python
from langchain_core.messages import HumanMessage
message = HumanMessage(
content=[
{"type": "text", "text": "describe the weather in this image"},
{"type": "text", "text": "Describe the weather in this image:"},
{
"type": "image",
"source_type": "url",
"url": "https://...",
},
],
)
response = model.invoke([message])
```
We can also pass the image as in-line data:
```python
from langchain_core.messages import HumanMessage
message = HumanMessage(
content=[
{"type": "text", "text": "Describe the weather in this image:"},
{
"type": "image",
"source_type": "base64",
"data": "<base64 string>",
"mime_type": "image/jpeg",
},
],
)
response = model.invoke([message])
```
To pass a PDF file as in-line data (or URL, as supported by providers such as
Anthropic), just change `"type"` to `"file"` and `"mime_type"` to `"application/pdf"`.
See the [how-to guides](/docs/how_to/#multimodal) for more detail.
Most chat models that support multimodal **image** inputs also accept those values in
OpenAI's [Chat Completions format](https://platform.openai.com/docs/guides/images?api-mode=chat):
```python
from langchain_core.messages import HumanMessage
message = HumanMessage(
content=[
{"type": "text", "text": "Describe the weather in this image:"},
{"type": "image_url", "image_url": {"url": image_url}},
],
)
response = model.invoke([message])
```
:::caution
The exact format of the content blocks may vary depending on the model provider. Please refer to the chat model's
integration documentation for the correct format. Find the integration in the [chat model integration table](/docs/integrations/chat/).
:::
Otherwise, chat models will typically accept the native, provider-specific content
block format. See [chat model integrations](/docs/integrations/chat/) for detail
on specific providers.
#### Outputs
Virtually no popular chat models support multimodal outputs at the time of writing (October 2024).
Some chat models support multimodal outputs, such as images and audio. Multimodal
outputs will appear as part of the [AIMessage](/docs/concepts/messages/#aimessage)
response object. See for example:
The only exception is OpenAI's chat model ([gpt-4o-audio-preview](/docs/integrations/chat/openai/)), which can generate audio outputs.
Multimodal outputs will appear as part of the [AIMessage](/docs/concepts/messages/#aimessage) response object.
Please see the [ChatOpenAI](/docs/integrations/chat/openai/) for more information on how to use multimodal outputs.
- Generating [audio outputs](/docs/integrations/chat/openai/#audio-generation-preview) with OpenAI;
- Generating [image outputs](/docs/integrations/chat/google_generative_ai/#multimodal-usage) with Google Gemini.
#### Tools

View File

@@ -92,7 +92,7 @@ structured_model = model.with_structured_output(Questions)
# Define the system prompt
system = """You are a helpful assistant that generates multiple sub-questions related to an input question. \n
The goal is to break down the input into a set of sub-problems / sub-questions that can be answers in isolation. \n"""
The goal is to break down the input into a set of sub-problems / sub-questions that can be answered independently. \n"""
# Pass the question to the model
question = """What are the main components of an LLM-powered autonomous agent system?"""

View File

@@ -32,7 +32,7 @@ The only requirement for a retriever is the ability to accepts a query and retur
In particular, [LangChain's retriever class](https://python.langchain.com/api_reference/core/retrievers/langchain_core.retrievers.BaseRetriever.html#) only requires that the `_get_relevant_documents` method is implemented, which takes a `query: str` and returns a list of [Document](https://python.langchain.com/api_reference/core/documents/langchain_core.documents.base.Document.html) objects that are most relevant to the query.
The underlying logic used to get relevant documents is specified by the retriever and can be whatever is most useful for the application.
A LangChain retriever is a [runnable](/docs/how_to/lcel_cheatsheet/), which is a standard interface is for LangChain components.
A LangChain retriever is a [runnable](/docs/how_to/lcel_cheatsheet/), which is a standard interface for LangChain components.
This means that it has a few common methods, including `invoke`, that are used to interact with it. A retriever can be invoked with a query:
```python

View File

@@ -126,7 +126,7 @@ Please see the [Configurable Runnables](#configurable-runnables) section for mor
LangChain will automatically try to infer the input and output types of a Runnable based on available information.
Currently, this inference does not work well for more complex Runnables that are built using [LCEL](/docs/concepts/lcel) composition, and the inferred input and / or output types may be incorrect. In these cases, we recommend that users override the inferred input and output types using the `with_types` method ([API Reference](https://python.langchain.com/api_reference/core/runnables/langchain_core.runnables.base.Runnable.html#langchain_core.runnables.base.Runnable.with_types
).
)).
## RunnableConfig
@@ -194,7 +194,7 @@ In Python 3.11 and above, this works out of the box, and you do not need to do a
In Python 3.9 and 3.10, if you are using **async code**, you need to manually pass the `RunnableConfig` through to the `Runnable` when invoking it.
This is due to a limitation in [asyncio's tasks](https://docs.python.org/3/library/asyncio-task.html#asyncio.create_task) in Python 3.9 and 3.10 which did
not accept a `context` argument).
not accept a `context` argument.
Propagating the `RunnableConfig` manually is done like so:

Some files were not shown because too many files have changed in this diff Show More