Compare commits

..

9 Commits

Author SHA1 Message Date
Chester Curme
7d14250bfd enable code interpreter test for v1 2025-07-10 16:02:32 -04:00
Chester Curme
c3add6d3b3 nit 2025-07-10 16:02:26 -04:00
Chester Curme
20c7baca6d add cassette for parsed 2025-07-10 16:02:14 -04:00
Chester Curme
c98ad2edaf fix streaming annotations 2025-07-10 16:02:08 -04:00
Chester Curme
2457f34a89 fix image generation 2025-07-10 16:02:03 -04:00
Chester Curme
1c4a610bf4 remove total 2025-07-10 16:01:55 -04:00
Chester Curme
5c8a6dac35 revert 2025-07-10 16:01:48 -04:00
Chester Curme
c70fb33f67 NotRequired -> Required 2025-07-10 16:01:41 -04:00
Chester Curme
1f30cc0c33 carry over changes 2025-07-10 16:01:18 -04:00
435 changed files with 17620 additions and 29602 deletions

View File

@@ -3,8 +3,4 @@
Hi there! Thank you for even being interested in contributing to LangChain.
As an open-source project in a rapidly developing field, we are extremely open to contributions, whether they involve new features, improved infrastructure, better documentation, or bug fixes.
To learn how to contribute to LangChain, please follow the [contribution guide here](https://python.langchain.com/docs/contributing/).
## New features
For new features, please start a new [discussion](https://forum.langchain.com/), where the maintainers will help with scoping out the necessary changes.
To learn how to contribute to LangChain, please follow the [contribution guide here](https://python.langchain.com/docs/contributing/).

38
.github/DISCUSSION_TEMPLATE/ideas.yml vendored Normal file
View File

@@ -0,0 +1,38 @@
labels: [idea]
body:
- type: checkboxes
id: checks
attributes:
label: Checked
description: Please confirm and check all the following options.
options:
- label: I searched existing ideas and did not find a similar one
required: true
- label: I added a very descriptive title
required: true
- label: I've clearly described the feature request and motivation for it
required: true
- type: textarea
id: feature-request
validations:
required: true
attributes:
label: Feature request
description: |
A clear and concise description of the feature proposal. Please provide links to any relevant GitHub repos, papers, or other resources if relevant.
- type: textarea
id: motivation
validations:
required: true
attributes:
label: Motivation
description: |
Please outline the motivation for the proposal. Is your feature request related to a problem? e.g., I'm always frustrated when [...]. If this is related to another GitHub issue, please link here too.
- type: textarea
id: proposal
validations:
required: false
attributes:
label: Proposal (If applicable)
description: |
If you would like to propose a solution, please describe it here.

122
.github/DISCUSSION_TEMPLATE/q-a.yml vendored Normal file
View File

@@ -0,0 +1,122 @@
labels: [Question]
body:
- type: markdown
attributes:
value: |
Thanks for your interest in LangChain 🦜️🔗!
Please follow these instructions, fill every question, and do every step. 🙏
We're asking for this because answering questions and solving problems in GitHub takes a lot of time --
this is time that we cannot spend on adding new features, fixing bugs, writing documentation or reviewing pull requests.
By asking questions in a structured way (following this) it will be much easier for us to help you.
There's a high chance that by following this process, you'll find the solution on your own, eliminating the need to submit a question and wait for an answer. 😎
As there are many questions submitted every day, we will **DISCARD** and close the incomplete ones.
That will allow us (and others) to focus on helping people like you that follow the whole process. 🤓
Relevant links to check before opening a question to see if your question has already been answered, fixed or
if there's another way to solve your problem:
[LangChain documentation with the integrated search](https://python.langchain.com/docs/get_started/introduction),
[API Reference](https://python.langchain.com/api_reference/),
[GitHub search](https://github.com/langchain-ai/langchain),
[LangChain Github Discussions](https://github.com/langchain-ai/langchain/discussions),
[LangChain Github Issues](https://github.com/langchain-ai/langchain/issues?q=is%3Aissue),
[LangChain ChatBot](https://chat.langchain.com/)
- type: checkboxes
id: checks
attributes:
label: Checked other resources
description: Please confirm and check all the following options.
options:
- label: I added a very descriptive title to this question.
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
- type: checkboxes
id: help
attributes:
label: Commit to Help
description: |
After submitting this, I commit to one of:
* Read open questions until I find 2 where I can help someone and add a comment to help there.
* I already hit the "watch" button in this repository to receive notifications and I commit to help at least 2 people that ask questions in the future.
* Once my question is answered, I will mark the answer as "accepted".
options:
- label: I commit to help with one of those options 👆
required: true
- type: textarea
id: example
attributes:
label: Example Code
description: |
Please add a self-contained, [minimal, reproducible, example](https://stackoverflow.com/help/minimal-reproducible-example) with your use case.
If a maintainer can copy it, run it, and see it right away, there's a much higher chance that you'll be able to get help.
**Important!**
* Use code tags (e.g., ```python ... ```) to correctly [format your code](https://help.github.com/en/github/writing-on-github/creating-and-highlighting-code-blocks#syntax-highlighting).
* INCLUDE the language label (e.g. `python`) after the first three backticks to enable syntax highlighting. (e.g., ```python rather than ```).
* Reduce your code to the minimum required to reproduce the issue if possible. This makes it much easier for others to help you.
* Avoid screenshots when possible, as they are hard to read and (more importantly) don't allow others to copy-and-paste your code.
placeholder: |
from langchain_core.runnables import RunnableLambda
def bad_code(inputs) -> int:
raise NotImplementedError('For demo purpose')
chain = RunnableLambda(bad_code)
chain.invoke('Hello!')
render: python
validations:
required: true
- type: textarea
id: description
attributes:
label: Description
description: |
What is the problem, question, or error?
Write a short description explaining what you are doing, what you expect to happen, and what is currently happening.
placeholder: |
* I'm trying to use the `langchain` library to do X.
* I expect to see Y.
* Instead, it does Z.
validations:
required: true
- type: textarea
id: system-info
attributes:
label: System Info
description: |
Please share your system info with us.
"pip freeze | grep langchain"
platform (windows / linux / mac)
python version
OR if you're on a recent version of langchain-core you can paste the output of:
python -m langchain_core.sys_info
placeholder: |
"pip freeze | grep langchain"
platform
python version
Alternatively, if you're on a recent version of langchain-core you can paste the output of:
python -m langchain_core.sys_info
These will only surface LangChain packages, don't forget to include any other relevant
packages you're using (if you're not sure what's relevant, you can paste the entire output of `pip freeze`).
validations:
required: true

View File

@@ -1,33 +1,33 @@
name: "\U0001F41B Bug Report"
description: Report a bug in LangChain. To report a security issue, please instead use the security option below. For questions, please use the LangChain forum.
labels: ["bug"]
description: Report a bug in LangChain. To report a security issue, please instead use the security option below. For questions, please use the GitHub Discussions.
labels: ["02 Bug Report"]
body:
- type: markdown
attributes:
value: |
value: >
Thank you for taking the time to file a bug report.
Use this to report BUGS in LangChain. For usage questions, feature requests and general design questions, please use the [LangChain Forum](https://forum.langchain.com/).
Use this to report bugs in LangChain.
If you're not certain that your issue is due to a bug in LangChain, please use [GitHub Discussions](https://github.com/langchain-ai/langchain/discussions)
to ask for help with your issue.
Relevant links to check before filing a bug report to see if your issue has already been reported, fixed or
if there's another way to solve your problem:
* [LangChain Forum](https://forum.langchain.com/),
* [LangChain Github Issues](https://github.com/langchain-ai/langchain/issues?q=is%3Aissue),
* [LangChain documentation with the integrated search](https://python.langchain.com/docs/get_started/introduction),
* [LangChain how-to guides](https://python.langchain.com/docs/how_to/),
* [API Reference](https://python.langchain.com/api_reference/),
* [LangChain ChatBot](https://chat.langchain.com/)
* [GitHub search](https://github.com/langchain-ai/langchain),
[LangChain documentation with the integrated search](https://python.langchain.com/docs/get_started/introduction),
[API Reference](https://python.langchain.com/api_reference/),
[GitHub search](https://github.com/langchain-ai/langchain),
[LangChain Github Discussions](https://github.com/langchain-ai/langchain/discussions),
[LangChain Github Issues](https://github.com/langchain-ai/langchain/issues?q=is%3Aissue),
[LangChain ChatBot](https://chat.langchain.com/)
- type: checkboxes
id: checks
attributes:
label: Checked other resources
description: Please confirm and check all the following options.
options:
- label: This is a bug, not a usage question. For questions, please use the LangChain Forum (https://forum.langchain.com/).
required: true
- label: I added a clear and descriptive title that summarizes this issue.
- label: I added a very descriptive title to this issue.
required: true
- label: I used the GitHub search to find a similar question and didn't find it.
required: true
@@ -35,8 +35,6 @@ body:
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 read what a minimal reproducible example is (https://stackoverflow.com/help/minimal-reproducible-example).
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
@@ -47,19 +45,19 @@ body:
label: Example Code
description: |
Please add a self-contained, [minimal, reproducible, example](https://stackoverflow.com/help/minimal-reproducible-example) with your use case.
If a maintainer can copy it, run it, and see it right away, there's a much higher chance that you'll be able to get help.
**Important!**
* Avoid screenshots when possible, as they are hard to read and (more importantly) don't allow others to copy-and-paste your code.
* Reduce your code to the minimum required to reproduce the issue if possible. This makes it much easier for others to help you.
* Use code tags (e.g., ```python ... ```) to correctly [format your code](https://help.github.com/en/github/writing-on-github/creating-and-highlighting-code-blocks#syntax-highlighting).
* INCLUDE the language label (e.g. `python`) after the first three backticks to enable syntax highlighting. (e.g., ```python rather than ```).
* Reduce your code to the minimum required to reproduce the issue if possible. This makes it much easier for others to help you.
* Avoid screenshots when possible, as they are hard to read and (more importantly) don't allow others to copy-and-paste your code.
placeholder: |
The following code:
```python
from langchain_core.runnables import RunnableLambda
@@ -101,18 +99,16 @@ body:
Please share your system info with us. Do NOT skip this step and please don't trim
the output. Most users don't include enough information here and it makes it harder
for us to help you.
Run the following command in your terminal and paste the output here:
`python -m langchain_core.sys_info`
python -m langchain_core.sys_info
or if you have an existing python interpreter running:
```python
from langchain_core import sys_info
sys_info.print_sys_info()
```
alternatively, put the entire output of `pip freeze` here.
placeholder: |
python -m langchain_core.sys_info

View File

@@ -1,6 +1,12 @@
blank_issues_enabled: false
version: 2.1
contact_links:
- name: LangChain Forum
url: https://forum.langchain.com/
about: General community discussions, support, and feature requests
- name: 🤔 Question
about: Ask a question in the LangChain forums
url: https://forum.langchain.com/c/help/langchain/14
- name: Feature Request
url: https://www.github.com/langchain-ai/langchain/discussions/categories/ideas
about: Suggest a feature or an idea
- name: Show and tell
about: Show what you built with LangChain
url: https://www.github.com/langchain-ai/langchain/discussions/categories/show-and-tell

View File

@@ -1,59 +1,58 @@
name: Documentation
description: Report an issue related to the LangChain documentation.
title: "docs: <Please write a comprehensive title after the 'docs: ' prefix>"
labels: [documentation]
title: "DOC: <Please write a comprehensive title after the 'DOC: ' prefix>"
labels: [03 - Documentation]
body:
- type: markdown
attributes:
value: |
Thank you for taking the time to report an issue in the documentation.
Only report issues with documentation here, explain if there are
any missing topics or if you found a mistake in the documentation.
Do **NOT** use this to ask usage questions or reporting issues with your code.
If you have usage questions or need help solving some problem,
please use the [LangChain Forum](https://forum.langchain.com/).
If you're in the wrong place, here are some helpful links to find a better
place to ask your question:
* [LangChain Forum](https://forum.langchain.com/),
* [LangChain Github Issues](https://github.com/langchain-ai/langchain/issues?q=is%3Aissue),
* [LangChain documentation with the integrated search](https://python.langchain.com/docs/get_started/introduction),
* [LangChain how-to guides](https://python.langchain.com/docs/how_to/),
* [API Reference](https://python.langchain.com/api_reference/),
* [LangChain ChatBot](https://chat.langchain.com/)
* [GitHub search](https://github.com/langchain-ai/langchain),
- type: input
id: url
attributes:
label: URL
description: URL to documentation
validations:
required: false
- type: checkboxes
id: checks
attributes:
label: Checklist
description: Please confirm and check all the following options.
options:
- label: I added a very descriptive title to this issue.
required: true
- label: I included a link to the documentation page I am referring to (if applicable).
required: true
- type: textarea
attributes:
label: "Issue with current documentation:"
description: >
Please make sure to leave a reference to the document/code you're
referring to. Feel free to include names of classes, functions, methods
or concepts you'd like to see documented more.
- type: textarea
attributes:
label: "Idea or request for content:"
description: >
Please describe as clearly as possible what topics you think are missing
from the current documentation.
- type: markdown
attributes:
value: >
Thank you for taking the time to report an issue in the documentation.
Only report issues with documentation here, explain if there are
any missing topics or if you found a mistake in the documentation.
Do **NOT** use this to ask usage questions or reporting issues with your code.
If you have usage questions or need help solving some problem,
please use [GitHub Discussions](https://github.com/langchain-ai/langchain/discussions).
If you're in the wrong place, here are some helpful links to find a better
place to ask your question:
[LangChain documentation with the integrated search](https://python.langchain.com/docs/get_started/introduction),
[API Reference](https://python.langchain.com/api_reference/),
[GitHub search](https://github.com/langchain-ai/langchain),
[LangChain Github Discussions](https://github.com/langchain-ai/langchain/discussions),
[LangChain Github Issues](https://github.com/langchain-ai/langchain/issues?q=is%3Aissue),
[LangChain ChatBot](https://chat.langchain.com/)
- type: input
id: url
attributes:
label: URL
description: URL to documentation
validations:
required: false
- type: checkboxes
id: checks
attributes:
label: Checklist
description: Please confirm and check all the following options.
options:
- label: I added a very descriptive title to this issue.
required: true
- label: I included a link to the documentation page I am referring to (if applicable).
required: true
- type: textarea
attributes:
label: "Issue with current documentation:"
description: >
Please make sure to leave a reference to the document/code you're
referring to. Feel free to include names of classes, functions, methods
or concepts you'd like to see documented more.
- type: textarea
attributes:
label: "Idea or request for content:"
description: >
Please describe as clearly as possible what topics you think are missing
from the current documentation.

View File

@@ -5,9 +5,9 @@ body:
attributes:
value: |
Thanks for your interest in LangChain! 🚀
If you are not a LangChain maintainer or were not asked directly by a maintainer to create an issue, then please start the conversation on the [LangChain Forum](https://forum.langchain.com/) instead.
If you are not a LangChain maintainer or were not asked directly by a maintainer to create an issue, then please start the conversation in a [Question in GitHub Discussions](https://github.com/langchain-ai/langchain/discussions/categories/q-a) instead.
You are a LangChain maintainer if you maintain any of the packages inside of the LangChain repository
or are a regular contributor to LangChain with previous merged pull requests.
- type: checkboxes

View File

@@ -1,32 +1,28 @@
Thank you for contributing to LangChain! Follow these steps to mark your pull request as ready for review. **If any of these steps are not completed, your PR will not be considered for review.**
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 title**: Follows the format: {TYPE}({SCOPE}): {DESCRIPTION}
- Examples:
- feat(core): add multi-tenant support
- fix(cli): resolve flag parsing error
- docs(openai): update API usage examples
- Allowed `{TYPE}` values:
- feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert, release
- Allowed `{SCOPE}` values (optional):
- core, cli, langchain, standard-tests, docs, anthropic, chroma, deepseek, exa, fireworks, groq, huggingface, mistralai, nomic, ollama, openai, perplexity, prompty, qdrant, xai
- Note: the `{DESCRIPTION}` must not start with an uppercase letter.
- Once you've written the title, please delete this checklist item; do not include it in the PR.
- [ ] **PR message**: ***Delete this entire checklist*** and replace with
- **Description:** a description of the change. Include a [closing keyword](https://docs.github.com/en/issues/tracking-your-work-with-issues/using-issues/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword) if applicable to a relevant issue.
- **Issue:** the issue # it fixes, if applicable (e.g. Fixes #123)
- **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!
- **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, you must 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. **We will not consider a PR unless these three are passing in CI.** See [contribution guidelines](https://python.langchain.com/docs/contributing/) for more.
- [ ] **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.
- 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.

View File

@@ -1,151 +0,0 @@
### 1. Avoid Breaking Changes (Stable Public Interfaces)
* Carefully preserve **function signatures**, argument positions, and names for any exported/public methods.
* Be cautious when **renaming**, **removing**, or **reordering** arguments — even small changes can break downstream consumers.
* Use keyword-only arguments or clearly mark experimental features to isolate unstable APIs.
Bad:
```python
def get_user(id, verbose=False): # Changed from `user_id`
```
Good:
```python
def get_user(user_id: str, verbose: bool = False): # Maintains stable interface
```
🧠 *Ask yourself:* “Would this change break someone's code if they used it last week?”
---
### 2. Simplify Code and Use Clear Variable Names
* Prefer descriptive, **self-explanatory variable names**. Avoid overly short or cryptic identifiers.
* Break up overly long or deeply nested functions for **readability and maintainability**.
* Avoid unnecessary abstraction or premature optimization.
* All generated Python code must include type hints and return types.
Bad:
```python
def p(u, d):
return [x for x in u if x not in d]
```
Good:
```python
def filter_unknown_users(users: List[str], known_users: Set[str]) -> List[str]:
return [user for user in users if user not in known_users]
```
---
### 3. Ensure Unit Tests Cover New and Updated Functionality
* Every new feature or bugfix should be **covered by a unit test**.
* Test edge cases and failure conditions.
* Use `pytest`, `unittest`, or the projects existing framework consistently.
Checklist:
* [ ] Does the test suite fail if your new logic is broken?
* [ ] Are all expected behaviors exercised (happy path, invalid input, etc)?
* [ ] Do tests use fixtures or mocks where needed?
---
### 4. Look for Suspicious or Risky Code
* Watch out for:
* Use of `eval()`, `exec()`, or `pickle` on user-controlled input.
* Silent failure modes (`except: pass`).
* Unreachable code or commented-out blocks.
* Race conditions or resource leaks (file handles, sockets, threads).
Bad:
```python
def load_config(path):
with open(path) as f:
return eval(f.read()) # ⚠️ Never eval config
```
Good:
```python
import json
def load_config(path: str) -> dict:
with open(path) as f:
return json.load(f)
```
---
### 5. Use Google-Style Docstrings (with Args section)
* All public functions should include a **Google-style docstring**.
* Include an `Args:` section where relevant.
* Types should NOT be written in the docstring — use type hints instead.
Bad:
```python
def send_email(to, msg):
"""Send an email to a recipient."""
```
Good:
```python
def send_email(to: str, msg: str) -> None:
"""
Sends an email to a recipient.
Args:
to: The email address of the recipient.
msg: The message body.
"""
```
📌 *Tip:* Keep descriptions concise but clear. Only document return values if non-obvious.
---
### 6. Propose Better Designs When Applicable
* If there's a **cleaner**, **more scalable**, or **simpler** design, highlight it.
* Suggest improvements, even if they require some refactoring — especially if the new code would:
* Reduce duplication
* Make unit testing easier
* Improve separation of concerns
* Add clarity without adding complexity
Instead of:
```python
def save(data, db_conn):
# manually serializes fields
```
You might suggest:
```python
# Suggest using dataclasses or Pydantic for automatic serialization and validation
```
### 7. Misc
* When suggesting package installation commands, use `uv pip install` as this project uses `uv`.
* When creating tools for agents, use the @tool decorator from langchain_core.tools. The tool's docstring serves as its functional description for the agent.
* Avoid suggesting deprecated components, such as the legacy LLMChain.
* We use Conventional Commits format for pull request titles. Example PR titles:
* feat(core): add multitenant support
* fix(cli): resolve flag parsing error
* docs: update API usage examples
* docs(openai): update API usage examples

View File

@@ -16,7 +16,6 @@ LANGCHAIN_DIRS = [
"libs/core",
"libs/text-splitters",
"libs/langchain",
"libs/langchain_v1",
]
# when set to True, we are ignoring core dependents

View File

@@ -82,7 +82,6 @@ jobs:
cli
langchain
standard-tests
text-splitters
docs
anthropic
chroma
@@ -99,10 +98,14 @@ jobs:
prompty
qdrant
xai
infra
requireScope: false
disallowScopes: |
release
[A-Z]+
subjectPattern: ^(?![A-Z]).+$
subjectPatternError: |
The subject "{subject}" found in the pull request title "{title}"
didn't match the configured pattern. Please ensure that the subject
doesn't start with an uppercase character.
ignoreLabels: |
ignore-lint-pr-title

View File

@@ -79,6 +79,5 @@ guided examples on getting started with LangChain.
snippets for topics such as tool calling, RAG use cases, and more.
- [Conceptual Guides](https://python.langchain.com/docs/concepts/): Explanations of key
concepts behind the LangChain framework.
- [LangChain Forum](https://forum.langchain.com/): Connect with the community and share all of your technical questions, ideas, and feedback.
- [API Reference](https://python.langchain.com/api_reference/): Detailed reference on
navigating base packages and integrations for LangChain.

View File

@@ -31,13 +31,15 @@ LangChain is partnered with [huntr by Protect AI](https://huntr.com/) to provide
a bounty program for our open source projects.
Please report security vulnerabilities associated with the LangChain
open source projects [here](https://huntr.com/bounties/disclose/?target=https%3A%2F%2Fgithub.com%2Flangchain-ai%2Flangchain&validSearch=true).
open source projects by visiting the following link:
[https://huntr.com/bounties/disclose/](https://huntr.com/bounties/disclose/?target=https%3A%2F%2Fgithub.com%2Flangchain-ai%2Flangchain&validSearch=true)
Before reporting a vulnerability, please review:
1) In-Scope Targets and Out-of-Scope Targets below.
2) The [langchain-ai/langchain](https://python.langchain.com/docs/contributing/repo_structure) monorepo structure.
3) The [Best Practices](#best-practices) above to
3) The [Best practices](#best-practices) above to
understand what we consider to be a security vulnerability vs. developer
responsibility.
@@ -62,11 +64,11 @@ All out of scope targets defined by huntr as well as:
bounties. This includes the following directories
- libs/langchain/langchain/tools
- libs/community/langchain_community/tools
- Please review the [Best Practices](#best-practices)
- Please review the [best practices](#best-practices)
for more details, but generally tools interact with the real world. Developers are
expected to understand the security implications of their code and are responsible
for the security of their tools.
- Code documented with security notices. This will be decided on a case by
- Code documented with security notices. This will be decided done on a case by
case basis, but likely will not be eligible for a bounty as the code is already
documented with guidelines for developers that should be followed for making their
application secure.

View File

@@ -229,9 +229,9 @@
" \"smoke\",\n",
" \"temp\",\n",
"]\n",
"assert all([column in df.columns for column in expected_columns]), (\n",
" \"DataFrame does not have the expected columns\"\n",
")"
"assert all(\n",
" [column in df.columns for column in expected_columns]\n",
"), \"DataFrame does not have the expected columns\""
]
},
{

View File

@@ -487,7 +487,7 @@
" print(\"*\" * 40)\n",
" print(\n",
" colored(\n",
" f\"After {i + 1} observations, Tommie's summary is:\\n{tommie.get_summary(force_refresh=True)}\",\n",
" f\"After {i+1} observations, Tommie's summary is:\\n{tommie.get_summary(force_refresh=True)}\",\n",
" \"blue\",\n",
" )\n",
" )\n",

View File

@@ -389,7 +389,7 @@
" ax = axs[idx]\n",
" ax.imshow(img)\n",
" # Assuming similarity is not available in the new data, removed sim_score\n",
" ax.title.set_text(f\"\\nProduct ID: {data['id']}\\n Score: {score}\")\n",
" ax.title.set_text(f\"\\nProduct ID: {data[\"id\"]}\\n Score: {score}\")\n",
" ax.axis(\"off\") # Turn off axis\n",
"\n",
" # Hide any remaining empty subplots\n",

View File

@@ -148,11 +148,11 @@
"\n",
" instructions = \"None\"\n",
" for i in range(max_meta_iters):\n",
" print(f\"[Episode {i + 1}/{max_meta_iters}]\")\n",
" print(f\"[Episode {i+1}/{max_meta_iters}]\")\n",
" chain = initialize_chain(instructions, memory=None)\n",
" output = chain.predict(human_input=task)\n",
" for j in range(max_iters):\n",
" print(f\"(Step {j + 1}/{max_iters})\")\n",
" print(f\"(Step {j+1}/{max_iters})\")\n",
" print(f\"Assistant: {output}\")\n",
" print(\"Human: \")\n",
" human_input = input()\n",

View File

@@ -183,7 +183,7 @@
"outputs": [],
"source": [
"game_description = f\"\"\"Here is the topic for a Dungeons & Dragons game: {quest}.\n",
" The characters are: {(*character_names,)}.\n",
" The characters are: {*character_names,}.\n",
" The story is narrated by the storyteller, {storyteller_name}.\"\"\"\n",
"\n",
"player_descriptor_system_message = SystemMessage(\n",
@@ -334,7 +334,7 @@
" You are the storyteller, {storyteller_name}.\n",
" Please make the quest more specific. Be creative and imaginative.\n",
" Please reply with the specified quest in {word_limit} words or less. \n",
" Speak directly to the characters: {(*character_names,)}.\n",
" Speak directly to the characters: {*character_names,}.\n",
" Do not add anything else.\"\"\"\n",
" ),\n",
"]\n",

View File

@@ -200,7 +200,7 @@
"outputs": [],
"source": [
"game_description = f\"\"\"Here is the topic for the presidential debate: {topic}.\n",
"The presidential candidates are: {\", \".join(character_names)}.\"\"\"\n",
"The presidential candidates are: {', '.join(character_names)}.\"\"\"\n",
"\n",
"player_descriptor_system_message = SystemMessage(\n",
" content=\"You can add detail to the description of each presidential candidate.\"\n",
@@ -595,7 +595,7 @@
" Frame the debate topic as a problem to be solved.\n",
" Be creative and imaginative.\n",
" Please reply with the specified topic in {word_limit} words or less. \n",
" Speak directly to the presidential candidates: {(*character_names,)}.\n",
" Speak directly to the presidential candidates: {*character_names,}.\n",
" Do not add anything else.\"\"\"\n",
" ),\n",
"]\n",

View File

@@ -395,7 +395,8 @@
"prompt_messages = [\n",
" SystemMessage(\n",
" content=(\n",
" \"You are a world class algorithm to answer questions in a specific format.\"\n",
" \"You are a world class algorithm to answer \"\n",
" \"questions in a specific format.\"\n",
" )\n",
" ),\n",
" HumanMessage(content=\"Answer question using the following context\"),\n",

View File

@@ -227,7 +227,7 @@
"outputs": [],
"source": [
"conversation_description = f\"\"\"Here is the topic of conversation: {topic}\n",
"The participants are: {\", \".join(names.keys())}\"\"\"\n",
"The participants are: {', '.join(names.keys())}\"\"\"\n",
"\n",
"agent_descriptor_system_message = SystemMessage(\n",
" content=\"You can add detail to the description of the conversation participant.\"\n",
@@ -396,7 +396,7 @@
" You are the moderator.\n",
" Please make the topic more specific.\n",
" Please reply with the specified quest in {word_limit} words or less. \n",
" Speak directly to the participants: {(*names,)}.\n",
" Speak directly to the participants: {*names,}.\n",
" Do not add anything else.\"\"\"\n",
" ),\n",
"]\n",

View File

@@ -108,7 +108,7 @@ class GalleryGridDirective(SphinxDirective):
# Parse the template with Sphinx Design to create an output container
# Prep the options for the template grid
class_ = "gallery-directive" + f" {self.options.get('class-container', '')}"
class_ = "gallery-directive" + f' {self.options.get("class-container", "")}'
options = {"gutter": 2, "class-container": class_}
options_str = "\n".join(f":{k}: {v}" for k, v in options.items())

View File

@@ -267,7 +267,7 @@ def _construct_doc(
.. _{package_namespace}:
======================================
{package_namespace.replace("_", "-")}: {package_version}
{package_namespace.replace('_', '-')}: {package_version}
======================================
.. automodule:: {package_namespace}
@@ -325,7 +325,7 @@ def _construct_doc(
index_autosummary += f"""
:ref:`{package_namespace}_{module}`
{"^" * (len(package_namespace) + len(module) + 8)}
{'^' * (len(package_namespace) + len(module) + 8)}
"""
if classes:
@@ -364,7 +364,7 @@ def _construct_doc(
"""
index_autosummary += f"""
{class_["qualified_name"]}
{class_['qualified_name']}
"""
if functions:
@@ -427,7 +427,7 @@ def _construct_doc(
"""
index_autosummary += f"""
{class_["qualified_name"]}
{class_['qualified_name']}
"""
if deprecated_functions:

File diff suppressed because one or more lines are too long

View File

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

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

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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

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

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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

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

@@ -0,0 +1 @@
eNrVVk9vG0UU58+NI59gtEJCQl577V3bjVEOUajaQqMW1VRFbbUazz7vDtmd2c7MxnEjHyg9Iy2foCVRXEUtRQVxgUocOfAFwoHPwpu1nbZO2pReEJYt2/P+zG/e+73f7J3pFijNpXj7IRcGFGUG/+jv7kwV3CpAm7v7GZhERrvnzvZ3C8UPP0iMyXWv0aA5r+uMm6SeUhGzhHJRZzJrcDGUewMZjX+fJkAjTH/34AsNyl2LQZjyZ+tdxbn5uOHVm/Vm0H28xhjkxj0rmIy4iMtH8W2e10gEw5Qa2J+Zyx9pnqecUYux8ZWW4mBdCgEV5vJgEyB3acq34IECneMx4Jt9bagp9J09zAt//jHNQGsaw/eXPluA+/ut9x9fc+0GqXt2O+cYWt73HmJig3Dd/jiH4/v+sDBfBBGbpNztdFv7lxWNM1o+ENJllCXwm02qtWt9lUzdtTSVI/f8bNvy/keH5ESHdQURpuY01eWeUQVM11LjXtli5WE98VedXhD4zscko6ut9krL87xa4rutlRMMJwPYqPppAex9grUtn16hpkZaLbJBFWl5rTZpdnr+Sq/tkXMb/SfXXPSikYzdPrID3AtReUgCGjHw/DPeANrtM34TvKDrddvRwPMhiFr+7lVOywNsLYmljFP49UQklxSPuSjvPV2yYhukhucq9Wjd1nNhL5/kxQDbUcOjbrvYzdWO98tSig20IN+wMZ43XbT1aT8pasRrkk+pIM2Vrkc8r1e97Un3rlI1LvdnoH7q8wx5uAS0ovXXyCmFtr/eubfjzKfH6TlefaXe7To1hwvknGAQInVj7fR2nEEqB6E2EvkBIQg6SCFyera1tWUbbgOY7IqPiSKsuwYTwjbN8hR0mBWp4TlVZjnJ6R44ejjcBkLKQ5xrNV52kCoOmYKK4mHE9dw4RBaiNafjDDm5HJTj6aWgaYjR+niU9l92ag1UseTYaiJHoTFpWPDFkrGcCw0HFUaFmqOj46qsqRSxnXaMD3AKbLgy84VmMKk5I6k2dW4TaCZzsChDLra4AX2E8bY2UYiylSNBbCdfxIRJBtQgUuw3iiE6iiGP7eaFhheqHeUSBfToJIymEBZ5eEvz24gf+RODQlheBXRhFSbBkkc6TJFtGNzsLIyRHIlQQJab8bPoAK023cK7ynW0EA7G1cFa3kq32W55k8l7L1fx1dNUHD+4qhsqzRrYQTdXWCPTsGqszf9I3r89JtVnguA/V+Z9LBhKRzkttjiTSjyqLgyXzQXulCvkmYL/O53di16l98GKVcGHbF4uc+LFd6pUnyycr5LnF0X13Ys7zox7YUJ1glrY9oKgRYdN34dOs93tQDdo+x3Wabc7DIbQHFKGFGM08vzWMPC73UHHY4HfgQ6L2KADqKQZFXyIvLWDy3G0rztHZEfrjNoaf+GKwa91/LpcLfZxAi1DnZs1J2U4cqhIWBdEhWVCxAVDfcOIzRFVM62fMxB/X3+tvc4XCG5jFvSme86Snna4uVfNedNtzCKi53wpC0IVELxHKcqmvfAMGUpFKrVBsrhU6BHYjhK8xDZ1naBGEJMAellmWEPOAUlB5JAowOYDCjep2LdtiJFklqGKWWStkwtDMsa9Iyk+NGRTyFFln7nWyFeFNkTTMS5Ss+S4QKAAiAbLcbs5PkHwrMgwQ0SswDyXzmJhXEP9hvh8vn+P7CygTMgNsT4Di6tz2HZxrQruVQ8CeWHCLaq4vVEsI5xFtO3/LMSWf1HYECuYISt6ztCdjYMzwdfN1041mTx7FkCfm5N/AJjRbLE=

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
eNrVVk9v3EQU58+NI59gZCEhofWud9e7bhb1EIWqLTRqUUNV1FbW7PjZnsaecWfGSbbRHig9I5lP0JIoqaKWooK4QCWOHPgC4cBn4Y13nbbblFTlAlGi3bx/85v3fu9n39nfAKW5FG8/5MKAoszgP/rbO/sKbpWgzd29HEwqo52zZ9Z2SsUPP0iNKfSo06EFb+ucm7SdUZGwlHLRZjLvcBHL3bGMJr/tp0AjLH/34AsNyl1OQJjqJxtd57nFpOO1u+2uHzxeZgwK454RTEZcJNWj5DYvWiSCOKMG9mbu6gdaFBln1GLs3NRSHKxIIaDGXB2sAxQuzfgGPFCgC7wGfL2nDTWlvrOLdeGP3/dz0Jom8N3Fzxpwf731/pOr7ifU0Egm7hp2ANzzUXVIuv0oGPtR7I0DFvS84FTEguBUwOIx+AMPxr9aUFq7CMEombnLWSY33XOzqtX9j54u+M9sFVLDcwGPVihLofFXT4pyjJdrkZxuuYjx9NDbucJpdYAdIomUSQa7V6iaVHsXFU+42LukaJLT6oGQLrOVHl917ZH1SRw7UN339puvT9fSskW8LvmUCtJdCjzieaP6l5xdXdvF60P19DI1LdLrkVWqSM/rDUh3OPK9kd+1MYfk2PuuKIhwrJxmuto1qoSfF8JW8TY4+Wpn6HkPrRGj3bVJAS9P8/iOrtb8sw37cY3nSI65fdaF6t7+cmbcyxusOmyn/dPOyPf7zsfYxNO9wVLP87xW2nd7S8c4fjn2uKbs9w3WCyASkyL+oFfT+ivklEIYf75zb9uZb48zcrz2UjsInJbDBXJOMAiRuol2RtvOOJPjUBuJ84IQBB1nEDkj26zWog+PBix2uY+FIuSkBhPCFs2LDHSYl5nhBVVmscjJEbh6uNwGQspD3Gs1WQyQKgmZgnoYYcT13BnjXNFb0EmOvVhMKvD2UtAsxGz9cpbuv+rWGqhi6UvWVG6GxmRhyRuTsfsYGg4qjEo1R0cndVszKRK77Zjv45htujJzQ9eftpxNqdZ1YQtoJguwKEMuNrgBfYTxtjZRiLJV4JbYSb6ICYuMqUGkOG8UQwwUMU/s4aWGF7odFRIF9OgmjGYQlkV4S/PbiB85lYBCWF4NtPEKk2LLIx1mSGxM7g4bZyQ3RSggL8zkWbaPXluuia5rHRnC8aS+WM9bCrqDnjedvvdqFT99korjH1p1R2V5ByfoFgp7ZDpWjbX5H8n7N/9epmtxddlcpo/kdlGc97AJKAfVfrnBmVTidQXzIZsLjTlWFP9JT3ejk3X7vy2qp3z/RVF998K2M+NemFKdohYOPN/v0bjb78OwOwiGEPiD/pANB4Mhgxi6MWVIMUYjr9+L/X4QjIce8/tDGLKIjYeASppTwWPkrV1cjqt9zTkiO3pn1Nb4DS0GP1bw41JtXMMNtAx1brScjOHKoSLhlBAVDg0Rlwz1DTPWN6maaf2cgfj92mudda5EcKuzpDc9c1b0pMvNo1rOmx5jmoyR86UsCVVA8GWComzaB54hsVSkVhukrkuF3gQ7UYIPsXXdJqgRxKSAUZYR1lFwQKoQGRMFOHxA4Sb1LmwZYiSZVahzmqptcj4mEzw7kuJDQ9aF3Kz9s9AWuVlqQzSdoJGahcAGgQIgGiwL7eH4rsXzMscKEbEC81w5i4VxDe3r4vP5+SOy3UCZkutiZQYWrXPY1rhcJ4/qF4GiNOEGVdw+USwjnCbbzn+WYtvfNDbEDubIipETu7N1cKb4c+O1S02nz94FMObG9G9f2m1A

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

@@ -0,0 +1 @@
eNrVVt2O20QU5ueOS55gZCEhoThx7Px0g/ZitVRtoasWNVRFbWVN7GN7WHvGnRlvNl3lgtJrJPMELbvaVKuWooK4gUpccsELLBc8C2eceNtmt91ScUOUKMmcn/nOme984zuzLZCKCf72Q8Y1SBpo/KO+uzOTcKsApe/uZ6ATEe6eOzvcLSQ7/CDROleDVovmrKkyppNmSnkcJJTxZiCyFuOR2BuJcPL7LAEaYvq7B18okPZaDFyXPxvvKs7OJy2n2W62O/3Ha0EAubbP8kCEjMflo/g2yxskhCilGvbn5vJHmucpC6jB2PpKCX6wLjiHCnN5sAmQ2zRlW/BAgsqxDPhmX2mqC3VnD/PCn3/MMlCKxvD9pc9qcH+/9f5vJr1SNibTUqT2WpqKsX1+bi/vf3RITnRYlxBiRYymqtzTsoCfhixD8AvzJclixst7+5cljTNaPuDCDmiQwGwt1faVraA8bCbeqjXodDzrY5LRVbe74jqO00g82105wbB3lcpJuT9PPDu7nTOss3w6TIoGcdrkU8pJe6XvEMcZVG9ybmP4+JptwKd27X7feXLN/oRqGorYHuKBg30hLA+Je8aLekEP2p6He9FRt70y6rtuP/Jo5PSdcPcqo+UBnhaJhYhT+PXEntRFn9zSjYpKpqU/GAM2z74IPNZJudvru78sxWzQbcMZtGHpiBjKp1eobhDXJRtUEtdxu6TdG3jtgbNiSn1Y5xxOcjjOlUfrpvl19vJJXozQ3sD+bttIidWe83QJALZMKHiOCBWtv0ZOSTzmv965t2MtpscaWE5zpdnvWw2LceQcD8BH6sbKGuxYo1SMfKUF8gB84HSUQmgNDGMayzZsHmCyKx4mCvGQFGgftmmWp6D8rEg1y6nUy0lO98DRw+HW4FPm41zLybKDkLEfSKja5YdMLYwRkhutOZ1k2NnloByrF5ymPkar41HKe1nVCqgMkmOriRj7Wqd+weolbQjqawbSDwu5QEcnVVtTwWMz7Rjfwakx4VIvFtqdacMaC7mpcpNABSIHg9JnfItpUEcYbysd+ihbOc6GOckXMWGSEdWIFM8bxRAdecRis3mh4IVuh7lAAT2qJKAp+EXu31LsNuLHqYhBIiynAlpbuU6w5aHyUxQODG73amMoxtznkOV68iy6g1aTrvauch0t+KNJVZjrrPTbXdeZTt97uYqvnqbi+MFV1ZJp1sITtHOJPdIto8ZK/4/k/duHwUIV9Imq8BLNxoJwtMtZscUCIflpcrYsjq+SsjeX//B0DXy1Kh9T3TOdzqPqTrKDhSwe3VL/1aX4L0X13Ys71px7fkJVglrYdTodl0Z4L0Gv3e33oN/penhTdbu9ACJoRzRAigU0dDw36nj9/qjnBB2vB70gDEY9QCXNKGcR8tYMLsPRvm4dkR2tc2or/IUrGr/W8etytTjECTQMtW42rDTAkUNFQhohKuwXIi4C1DeM2BxTOdf6BQPx9/XX2ut8geA25kFvuuc86WnFLbwa1ptuo+uIgfWlKAiVQPCJg6JsmgtPk0hIUqkNzpZNuRqDOVGCl9imahLUCKITQC/DE2PIGSAziIiIBDx8QOEm1bBua6IFmWeoYuqsTXIhIhPcOxT8Q002uRhX9rlrg3xVKE0UneAi1UuONQIJQBSYMTCb4+XPsiLDDCExAvNcOoMlYAqaN/jni/0HZKeGMiU3+PocLK4uYJvFtSp4UD0I5IX2t6hk5kYxjLDqaHP+8xDT/rqxPnYwQ1YMrMiej4M1xdfN1041nT57FkCfm9N/AE7ebHI=

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

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

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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

File diff suppressed because one or more lines are too long

View File

@@ -20,7 +20,8 @@ LangChain is a framework that consists of a number of packages.
This package contains base abstractions for different components and ways to compose them together.
The interfaces for core components like chat models, vector stores, tools and more are defined here.
**No third-party integrations are defined here.** The dependencies are kept purposefully very lightweight.
No third-party integrations are defined here.
The dependencies are very lightweight.
## langchain

View File

@@ -27,15 +27,15 @@ More coming soon! We are working on tutorials to help you make your first contri
## Community
### 💭 Forum
### 💭 GitHub Discussions
We have a [LangChain Forum](https://forum.langchain.com/) where users can ask usage questions, discuss design decisions, and propose new features.
We have a [discussions](https://github.com/langchain-ai/langchain/discussions) page where users can ask usage questions, discuss design decisions, and propose new features.
If you are able to help answer questions, please do so! This will allow the maintainers to spend more time focused on development and bug fixing.
### 🚩 GitHub Issues
Our [issues](https://github.com/langchain-ai/langchain/issues) page is kept up to date with bugs, docs improvements, and triaged feature requests that are being worked on.
Our [issues](https://github.com/langchain-ai/langchain/issues) page is kept up to date with bugs, improvements, and feature requests.
There is a [taxonomy of labels](https://github.com/langchain-ai/langchain/labels?sort=count-desc)
to help with sorting and discovery of issues of interest. Please use these to help
@@ -59,7 +59,7 @@ We have a [community slack](https://www.langchain.com/join-community) where you
### 🙋 Getting Help
Our goal is to have the simplest developer setup possible. Should you experience any difficulty getting setup, please
ask in [community slack](https://www.langchain.com/join-community) or open a [forum post](https://forum.langchain.com/).
ask in [community slack](https://www.langchain.com/join-community) or open a [discussion on GitHub](https://github.com/langchain-ai/langchain/discussions).
In a similar vein, we do enforce certain linting, formatting, and documentation standards in the codebase.
If you are finding these difficult (or even just annoying) to work with, feel free to ask in [community slack](https://www.langchain.com/join-community)!

View File

@@ -32,7 +32,7 @@ by the submitter.
## Review Guidelines
1. **PRs that touch `/libs/core`**:
1. **PRs that touch /libs/core**:
- PRs that directly impact core code and are likely to affect end users.
- **Triage Guideline**: most PRs should either go straight to `In Review` or closed.
- These PRs are given top priority and are reviewed the fastest.
@@ -40,13 +40,13 @@ by the submitter.
- PRs that don't have unit tests are likely to be closed.
- Feature requests should first be opened as a GitHub issue and discussed with the LangChain maintainers. Large PRs submitted without prior discussion are likely to be closed.
2. **PRs that touch `/libs/langchain`**:
2. **PRs that touch /libs/langchain**:
- High-impact PRs that are closely related to core PRs but slightly lower in priority.
- **Triage Guideline**: most PRs should either go straight to `In Review` or closed.
- These are reviewed and closed aggressively, similar to core PRs.
- New feature requests should be discussed with the core maintainer team beforehand in an issue.
3. **PRs that touch `/libs/partners/`**:
3. **PRs that touch /libs/partners/**:
- PRs involving integration packages.
- **Triage Guideline**: most PRs should either go straight to `In Review` or closed.
- The review may be conducted by our team or handed off to the partner's development team, depending on the PR's content.
@@ -59,7 +59,7 @@ by the submitter.
- PRs in the `Needs Support` status for 20 days are marked as “stale” and will be closed after 30 days if no action is taken.
5. **Documentation PRs**:
- PRs that touch the documentation content in `docs/docs`.
- PRs that touch the documentation content in docs/docs.
- **Triage Guideline**:
- PRs that fix typos or small errors in a single file and pass CI should go straight to `In Review`.
- PRs that make changes that have been discussed and agreed upon in an issue should go straight to `In Review`.
@@ -88,3 +88,8 @@ Our goal is to provide the best possible development experience by focusing on m
- Is easy: Is intuitive to use and well-documented.
We believe this process reflects our priorities and are open to feedback if you feel it does not.
## Github Discussion
We welcome your feedback on this process. Please feel free to add a comment in
[this GitHub Discussion](https://github.com/langchain-ai/langchain/discussions/25920).

View File

@@ -25,7 +25,7 @@
"metadata": {},
"outputs": [],
"source": [
"%pip install -qU langchain langchain-openai langchain-anthropic langchain-google-genai"
"%pip install -qU langchain>=0.2.8 langchain-openai langchain-anthropic langchain-google-vertexai"
]
},
{
@@ -38,7 +38,7 @@
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": 2,
"id": "79e14913-803c-4382-9009-5c6af3d75d35",
"metadata": {
"execution": {
@@ -49,15 +49,38 @@
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/var/folders/4j/2rz3865x6qg07tx43146py8h0000gn/T/ipykernel_95293/571506279.py:4: LangChainBetaWarning: The function `init_chat_model` is in beta. It is actively being worked on, so the API may change.\n",
" gpt_4o = init_chat_model(\"gpt-4o\", model_provider=\"openai\", temperature=0)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"GPT-4o: I'm an AI created by OpenAI, and I don't have a personal name. How can I assist you today?\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"GPT-4o: Im called ChatGPT. How can I assist you today?\n",
"\n",
"Claude Opus: My name is Claude. It's nice to meet you!\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gemini 1.5: I am a large language model, trained by Google. \n",
"\n",
"I don't have a name like a person does. You can call me Bard if you like! 😊 \n",
"\n",
"Gemini 2.5: I do not have a name. I am a large language model, trained by Google.\n",
"\n"
]
}
@@ -65,10 +88,6 @@
"source": [
"from langchain.chat_models import init_chat_model\n",
"\n",
"# Don't forget to set your environment variables for the API keys of the respective providers!\n",
"# For example, you can set them in your terminal or in a .env file:\n",
"# export OPENAI_API_KEY=\"your_openai_api_key\"\n",
"\n",
"# Returns a langchain_openai.ChatOpenAI instance.\n",
"gpt_4o = init_chat_model(\"gpt-4o\", model_provider=\"openai\", temperature=0)\n",
"# Returns a langchain_anthropic.ChatAnthropic instance.\n",
@@ -77,13 +96,13 @@
")\n",
"# Returns a langchain_google_vertexai.ChatVertexAI instance.\n",
"gemini_15 = init_chat_model(\n",
" \"gemini-2.5-pro\", model_provider=\"google_genai\", temperature=0\n",
" \"gemini-1.5-pro\", model_provider=\"google_vertexai\", temperature=0\n",
")\n",
"\n",
"# Since all model integrations implement the ChatModel interface, you can use them in the same way.\n",
"print(\"GPT-4o: \" + gpt_4o.invoke(\"what's your name\").content + \"\\n\")\n",
"print(\"Claude Opus: \" + claude_opus.invoke(\"what's your name\").content + \"\\n\")\n",
"print(\"Gemini 2.5: \" + gemini_15.invoke(\"what's your name\").content + \"\\n\")"
"print(\"Gemini 1.5: \" + gemini_15.invoke(\"what's your name\").content + \"\\n\")"
]
},
{
@@ -98,7 +117,7 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 3,
"id": "0378ccc6-95bc-4d50-be50-fccc193f0a71",
"metadata": {
"execution": {
@@ -112,7 +131,7 @@
"source": [
"gpt_4o = init_chat_model(\"gpt-4o\", temperature=0)\n",
"claude_opus = init_chat_model(\"claude-3-opus-20240229\", temperature=0)\n",
"gemini_15 = init_chat_model(\"gemini-2.5-pro\", temperature=0)"
"gemini_15 = init_chat_model(\"gemini-1.5-pro\", temperature=0)"
]
},
{
@@ -127,7 +146,7 @@
},
{
"cell_type": "code",
"execution_count": 7,
"execution_count": 4,
"id": "6c037f27-12d7-4e83-811e-4245c0e3ba58",
"metadata": {
"execution": {
@@ -141,10 +160,10 @@
{
"data": {
"text/plain": [
"AIMessage(content='Im called ChatGPT. How can I assist you today?', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 13, 'prompt_tokens': 11, 'total_tokens': 24, 'completion_tokens_details': {'accepted_prediction_tokens': 0, 'audio_tokens': 0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0}, 'prompt_tokens_details': {'audio_tokens': 0, 'cached_tokens': 0}}, 'model_name': 'gpt-4o-2024-08-06', 'system_fingerprint': 'fp_07871e2ad8', 'id': 'chatcmpl-BwCyyBpMqn96KED6zPhLm4k9SQMiQ', 'service_tier': 'default', 'finish_reason': 'stop', 'logprobs': None}, id='run--fada10c3-4128-406c-b83d-a850d16b365f-0', usage_metadata={'input_tokens': 11, 'output_tokens': 13, 'total_tokens': 24, 'input_token_details': {'audio': 0, 'cache_read': 0}, 'output_token_details': {'audio': 0, 'reasoning': 0}})"
"AIMessage(content=\"I'm an AI created by OpenAI, and I don't have a personal name. How can I assist you today?\", additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 23, 'prompt_tokens': 11, 'total_tokens': 34}, 'model_name': 'gpt-4o-2024-05-13', 'system_fingerprint': 'fp_25624ae3a5', 'finish_reason': 'stop', 'logprobs': None}, id='run-b41df187-4627-490d-af3c-1c96282d3eb0-0', usage_metadata={'input_tokens': 11, 'output_tokens': 23, 'total_tokens': 34})"
]
},
"execution_count": 7,
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
@@ -159,7 +178,7 @@
},
{
"cell_type": "code",
"execution_count": 8,
"execution_count": 5,
"id": "321e3036-abd2-4e1f-bcc6-606efd036954",
"metadata": {
"execution": {
@@ -173,10 +192,10 @@
{
"data": {
"text/plain": [
"AIMessage(content=\"My name is Claude. It's nice to meet you!\", additional_kwargs={}, response_metadata={'id': 'msg_01VDGrG9D6yefanbBG9zPJrc', 'model': 'claude-3-5-sonnet-20240620', 'stop_reason': 'end_turn', 'stop_sequence': None, 'usage': {'cache_creation_input_tokens': 0, 'cache_read_input_tokens': 0, 'input_tokens': 11, 'output_tokens': 15, 'server_tool_use': None, 'service_tier': 'standard'}, 'model_name': 'claude-3-5-sonnet-20240620'}, id='run--f0156087-debf-4b4b-9aaa-f3328a81ef92-0', usage_metadata={'input_tokens': 11, 'output_tokens': 15, 'total_tokens': 26, 'input_token_details': {'cache_read': 0, 'cache_creation': 0}})"
"AIMessage(content=\"My name is Claude. It's nice to meet you!\", additional_kwargs={}, response_metadata={'id': 'msg_01Fx9P74A7syoFkwE73CdMMY', 'model': 'claude-3-5-sonnet-20240620', 'stop_reason': 'end_turn', 'stop_sequence': None, 'usage': {'input_tokens': 11, 'output_tokens': 15}}, id='run-a0fd2bbd-3b7e-46bf-8d69-a48c7e60b03c-0', usage_metadata={'input_tokens': 11, 'output_tokens': 15, 'total_tokens': 26})"
]
},
"execution_count": 8,
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
@@ -375,9 +394,9 @@
],
"metadata": {
"kernelspec": {
"display_name": "langchain",
"display_name": "poetry-venv-2",
"language": "python",
"name": "python3"
"name": "poetry-venv-2"
},
"language_info": {
"codemirror_mode": {
@@ -389,7 +408,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.16"
"version": "3.11.9"
}
},
"nbformat": 4,

View File

@@ -287,7 +287,7 @@
"\n",
"async for event in structured_llm.astream_events(\"Tell me a joke\"):\n",
" if event[\"event\"] == \"on_chat_model_end\":\n",
" print(f\"Token usage: {event['data']['output'].usage_metadata}\\n\")\n",
" print(f'Token usage: {event[\"data\"][\"output\"].usage_metadata}\\n')\n",
" elif event[\"event\"] == \"on_chain_end\" and event[\"name\"] == \"RunnableSequence\":\n",
" print(event[\"data\"][\"output\"])\n",
" else:\n",

View File

@@ -162,7 +162,8 @@
"# Define the function that calls the model\n",
"def call_model(state: MessagesState):\n",
" system_prompt = (\n",
" \"You are a helpful assistant. Answer all questions to the best of your ability.\"\n",
" \"You are a helpful assistant. \"\n",
" \"Answer all questions to the best of your ability.\"\n",
" )\n",
" messages = [SystemMessage(content=system_prompt)] + state[\"messages\"]\n",
" response = model.invoke(messages)\n",
@@ -321,7 +322,8 @@
" # highlight-start\n",
" trimmed_messages = trimmer.invoke(state[\"messages\"])\n",
" system_prompt = (\n",
" \"You are a helpful assistant. Answer all questions to the best of your ability.\"\n",
" \"You are a helpful assistant. \"\n",
" \"Answer all questions to the best of your ability.\"\n",
" )\n",
" messages = [SystemMessage(content=system_prompt)] + trimmed_messages\n",
" # highlight-end\n",

View File

@@ -63,7 +63,7 @@
},
{
"cell_type": "code",
"execution_count": 1,
"execution_count": 4,
"id": "a9e37aa1",
"metadata": {},
"outputs": [],
@@ -84,7 +84,7 @@
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": 3,
"id": "e21a2434",
"metadata": {},
"outputs": [
@@ -114,13 +114,10 @@
" 'c',\n",
" 'lua',\n",
" 'perl',\n",
" 'haskell',\n",
" 'elixir',\n",
" 'powershell',\n",
" 'visualbasic6']"
" 'haskell']"
]
},
"execution_count": 2,
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
@@ -139,7 +136,7 @@
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": 3,
"id": "c92fb913",
"metadata": {},
"outputs": [
@@ -149,7 +146,7 @@
"['\\nclass ', '\\ndef ', '\\n\\tdef ', '\\n\\n', '\\n', ' ', '']"
]
},
"execution_count": 6,
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
@@ -171,18 +168,18 @@
},
{
"cell_type": "code",
"execution_count": 7,
"execution_count": 5,
"id": "a58512b9",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[Document(metadata={}, page_content='def hello_world():\\n print(\"Hello, World!\")'),\n",
" Document(metadata={}, page_content='# Call the function\\nhello_world()')]"
"[Document(page_content='def hello_world():\\n print(\"Hello, World!\")'),\n",
" Document(page_content='# Call the function\\nhello_world()')]"
]
},
"execution_count": 7,
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
@@ -213,18 +210,18 @@
},
{
"cell_type": "code",
"execution_count": 8,
"execution_count": 6,
"id": "7db0d486",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[Document(metadata={}, page_content='function helloWorld() {\\n console.log(\"Hello, World!\");\\n}'),\n",
" Document(metadata={}, page_content='// Call the function\\nhelloWorld();')]"
"[Document(page_content='function helloWorld() {\\n console.log(\"Hello, World!\");\\n}'),\n",
" Document(page_content='// Call the function\\nhelloWorld();')]"
]
},
"execution_count": 8,
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
@@ -257,19 +254,19 @@
},
{
"cell_type": "code",
"execution_count": 9,
"execution_count": 7,
"id": "aee738a4",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[Document(metadata={}, page_content='function helloWorld(): void {'),\n",
" Document(metadata={}, page_content='console.log(\"Hello, World!\");\\n}'),\n",
" Document(metadata={}, page_content='// Call the function\\nhelloWorld();')]"
"[Document(page_content='function helloWorld(): void {'),\n",
" Document(page_content='console.log(\"Hello, World!\");\\n}'),\n",
" Document(page_content='// Call the function\\nhelloWorld();')]"
]
},
"execution_count": 9,
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
@@ -303,7 +300,7 @@
},
{
"cell_type": "code",
"execution_count": 10,
"execution_count": 2,
"id": "ac9295d3",
"metadata": {},
"outputs": [],
@@ -324,7 +321,7 @@
},
{
"cell_type": "code",
"execution_count": 11,
"execution_count": 3,
"id": "bfa1771b-d4b0-48f8-a949-5537cd1df0dd",
"metadata": {},
"outputs": [
@@ -340,7 +337,7 @@
" Document(metadata={}, page_content='are extremely open to contributions.')]"
]
},
"execution_count": 11,
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
@@ -365,7 +362,7 @@
},
{
"cell_type": "code",
"execution_count": 12,
"execution_count": 10,
"id": "77d1049d",
"metadata": {},
"outputs": [],
@@ -392,38 +389,38 @@
},
{
"cell_type": "code",
"execution_count": 13,
"execution_count": 11,
"id": "4dbc47e1",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[Document(metadata={}, page_content='\\\\documentclass{article}\\n\\n\\x08egin{document}\\n\\n\\\\maketitle'),\n",
" Document(metadata={}, page_content='\\\\section{Introduction}'),\n",
" Document(metadata={}, page_content='Large language models (LLMs) are a type of machine learning'),\n",
" Document(metadata={}, page_content='model that can be trained on vast amounts of text data to'),\n",
" Document(metadata={}, page_content='generate human-like language. In recent years, LLMs have'),\n",
" Document(metadata={}, page_content='made significant advances in a variety of natural language'),\n",
" Document(metadata={}, page_content='processing tasks, including language translation, text'),\n",
" Document(metadata={}, page_content='generation, and sentiment analysis.'),\n",
" Document(metadata={}, page_content='\\\\subsection{History of LLMs}'),\n",
" Document(metadata={}, page_content='The earliest LLMs were developed in the 1980s and 1990s,'),\n",
" Document(metadata={}, page_content='but they were limited by the amount of data that could be'),\n",
" Document(metadata={}, page_content='processed and the computational power available at the'),\n",
" Document(metadata={}, page_content='time. In the past decade, however, advances in hardware and'),\n",
" Document(metadata={}, page_content='software have made it possible to train LLMs on massive'),\n",
" Document(metadata={}, page_content='datasets, leading to significant improvements in'),\n",
" Document(metadata={}, page_content='performance.'),\n",
" Document(metadata={}, page_content='\\\\subsection{Applications of LLMs}'),\n",
" Document(metadata={}, page_content='LLMs have many applications in industry, including'),\n",
" Document(metadata={}, page_content='chatbots, content creation, and virtual assistants. They'),\n",
" Document(metadata={}, page_content='can also be used in academia for research in linguistics,'),\n",
" Document(metadata={}, page_content='psychology, and computational linguistics.'),\n",
" Document(metadata={}, page_content='\\\\end{document}')]"
"[Document(page_content='\\\\documentclass{article}\\n\\n\\x08egin{document}\\n\\n\\\\maketitle'),\n",
" Document(page_content='\\\\section{Introduction}'),\n",
" Document(page_content='Large language models (LLMs) are a type of machine learning'),\n",
" Document(page_content='model that can be trained on vast amounts of text data to'),\n",
" Document(page_content='generate human-like language. In recent years, LLMs have'),\n",
" Document(page_content='made significant advances in a variety of natural language'),\n",
" Document(page_content='processing tasks, including language translation, text'),\n",
" Document(page_content='generation, and sentiment analysis.'),\n",
" Document(page_content='\\\\subsection{History of LLMs}'),\n",
" Document(page_content='The earliest LLMs were developed in the 1980s and 1990s,'),\n",
" Document(page_content='but they were limited by the amount of data that could be'),\n",
" Document(page_content='processed and the computational power available at the'),\n",
" Document(page_content='time. In the past decade, however, advances in hardware and'),\n",
" Document(page_content='software have made it possible to train LLMs on massive'),\n",
" Document(page_content='datasets, leading to significant improvements in'),\n",
" Document(page_content='performance.'),\n",
" Document(page_content='\\\\subsection{Applications of LLMs}'),\n",
" Document(page_content='LLMs have many applications in industry, including'),\n",
" Document(page_content='chatbots, content creation, and virtual assistants. They'),\n",
" Document(page_content='can also be used in academia for research in linguistics,'),\n",
" Document(page_content='psychology, and computational linguistics.'),\n",
" Document(page_content='\\\\end{document}')]"
]
},
"execution_count": 13,
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
@@ -448,7 +445,7 @@
},
{
"cell_type": "code",
"execution_count": 14,
"execution_count": 12,
"id": "0fc78794",
"metadata": {},
"outputs": [],
@@ -482,29 +479,29 @@
},
{
"cell_type": "code",
"execution_count": 15,
"execution_count": 13,
"id": "e3e3fca1",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[Document(metadata={}, page_content='<!DOCTYPE html>\\n<html>'),\n",
" Document(metadata={}, page_content='<head>\\n <title>🦜️🔗 LangChain</title>'),\n",
" Document(metadata={}, page_content='<style>\\n body {\\n font-family: Aria'),\n",
" Document(metadata={}, page_content='l, sans-serif;\\n }\\n h1 {'),\n",
" Document(metadata={}, page_content='color: darkblue;\\n }\\n </style>\\n </head'),\n",
" Document(metadata={}, page_content='>'),\n",
" Document(metadata={}, page_content='<body>'),\n",
" Document(metadata={}, page_content='<div>\\n <h1>🦜️🔗 LangChain</h1>'),\n",
" Document(metadata={}, page_content='<p>⚡ Building applications with LLMs through composability ⚡'),\n",
" Document(metadata={}, page_content='</p>\\n </div>'),\n",
" Document(metadata={}, page_content='<div>\\n As an open-source project in a rapidly dev'),\n",
" Document(metadata={}, page_content='eloping field, we are extremely open to contributions.'),\n",
" Document(metadata={}, page_content='</div>\\n </body>\\n</html>')]"
"[Document(page_content='<!DOCTYPE html>\\n<html>'),\n",
" Document(page_content='<head>\\n <title>🦜️🔗 LangChain</title>'),\n",
" Document(page_content='<style>\\n body {\\n font-family: Aria'),\n",
" Document(page_content='l, sans-serif;\\n }\\n h1 {'),\n",
" Document(page_content='color: darkblue;\\n }\\n </style>\\n </head'),\n",
" Document(page_content='>'),\n",
" Document(page_content='<body>'),\n",
" Document(page_content='<div>\\n <h1>🦜️🔗 LangChain</h1>'),\n",
" Document(page_content='<p>⚡ Building applications with LLMs through composability ⚡'),\n",
" Document(page_content='</p>\\n </div>'),\n",
" Document(page_content='<div>\\n As an open-source project in a rapidly dev'),\n",
" Document(page_content='eloping field, we are extremely open to contributions.'),\n",
" Document(page_content='</div>\\n </body>\\n</html>')]"
]
},
"execution_count": 15,
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
@@ -528,18 +525,18 @@
},
{
"cell_type": "code",
"execution_count": 16,
"execution_count": 14,
"id": "49a1df11",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[Document(metadata={}, page_content='pragma solidity ^0.8.20;'),\n",
" Document(metadata={}, page_content='contract HelloWorld {\\n function add(uint a, uint b) pure public returns(uint) {\\n return a + b;\\n }\\n}')]"
"[Document(page_content='pragma solidity ^0.8.20;'),\n",
" Document(page_content='contract HelloWorld {\\n function add(uint a, uint b) pure public returns(uint) {\\n return a + b;\\n }\\n}')]"
]
},
"execution_count": 16,
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
@@ -572,21 +569,21 @@
},
{
"cell_type": "code",
"execution_count": 17,
"execution_count": 15,
"id": "1524ae0f",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[Document(metadata={}, page_content='using System;'),\n",
" Document(metadata={}, page_content='class Program\\n{\\n static void Main()\\n {\\n int age = 30; // Change the age value as needed'),\n",
" Document(metadata={}, page_content='// Categorize the age without any console output\\n if (age < 18)\\n {\\n // Age is under 18'),\n",
" Document(metadata={}, page_content='}\\n else if (age >= 18 && age < 65)\\n {\\n // Age is an adult\\n }\\n else\\n {'),\n",
" Document(metadata={}, page_content='// Age is a senior citizen\\n }\\n }\\n}')]"
"[Document(page_content='using System;'),\n",
" Document(page_content='class Program\\n{\\n static void Main()\\n {\\n int age = 30; // Change the age value as needed'),\n",
" Document(page_content='// Categorize the age without any console output\\n if (age < 18)\\n {\\n // Age is under 18'),\n",
" Document(page_content='}\\n else if (age >= 18 && age < 65)\\n {\\n // Age is an adult\\n }\\n else\\n {'),\n",
" Document(page_content='// Age is a senior citizen\\n }\\n }\\n}')]"
]
},
"execution_count": 17,
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
@@ -634,20 +631,20 @@
},
{
"cell_type": "code",
"execution_count": 18,
"execution_count": 3,
"id": "688185b5",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[Document(metadata={}, page_content='main :: IO ()'),\n",
" Document(metadata={}, page_content='main = do\\n putStrLn \"Hello, World!\"\\n-- Some'),\n",
" Document(metadata={}, page_content='sample functions\\nadd :: Int -> Int -> Int\\nadd x y'),\n",
" Document(metadata={}, page_content='= x + y')]"
"[Document(page_content='main :: IO ()'),\n",
" Document(page_content='main = do\\n putStrLn \"Hello, World!\"\\n-- Some'),\n",
" Document(page_content='sample functions\\nadd :: Int -> Int -> Int\\nadd x y'),\n",
" Document(page_content='= x + y')]"
]
},
"execution_count": 18,
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
@@ -679,23 +676,23 @@
},
{
"cell_type": "code",
"execution_count": 19,
"execution_count": 2,
"id": "90c66e7e-87a5-4a81-bece-7949aabf2369",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[Document(metadata={}, page_content='<?php\\nnamespace foo;'),\n",
" Document(metadata={}, page_content='class Hello {'),\n",
" Document(metadata={}, page_content='public function __construct() { }\\n}'),\n",
" Document(metadata={}, page_content='function hello() {\\n echo \"Hello World!\";\\n}'),\n",
" Document(metadata={}, page_content='interface Human {\\n public function breath();\\n}'),\n",
" Document(metadata={}, page_content='trait Foo { }\\nenum Color\\n{\\n case Red;'),\n",
" Document(metadata={}, page_content='case Blue;\\n}')]"
"[Document(page_content='<?php\\nnamespace foo;'),\n",
" Document(page_content='class Hello {'),\n",
" Document(page_content='public function __construct() { }\\n}'),\n",
" Document(page_content='function hello() {\\n echo \"Hello World!\";\\n}'),\n",
" Document(page_content='interface Human {\\n public function breath();\\n}'),\n",
" Document(page_content='trait Foo { }\\nenum Color\\n{\\n case Red;'),\n",
" Document(page_content='case Blue;\\n}')]"
]
},
"execution_count": 19,
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
@@ -736,25 +733,10 @@
},
{
"cell_type": "code",
"execution_count": 20,
"execution_count": null,
"id": "7e6893ad",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[Document(metadata={}, page_content='$directoryPath = Get-Location\\n\\n$items = Get-ChildItem -Path $directoryPath'),\n",
" Document(metadata={}, page_content='$files = $items | Where-Object { -not $_.PSIsContainer }'),\n",
" Document(metadata={}, page_content='$sortedFiles = $files | Sort-Object LastWriteTime'),\n",
" Document(metadata={}, page_content='foreach ($file in $sortedFiles) {'),\n",
" Document(metadata={}, page_content='Write-Output (\"Name: \" + $file.Name + \" | Last Write Time: \" + $file.LastWriteTime)\\n}')]"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"outputs": [],
"source": [
"POWERSHELL_CODE = \"\"\"\n",
"$directoryPath = Get-Location\n",
@@ -775,58 +757,11 @@
"powershell_docs = powershell_splitter.create_documents([POWERSHELL_CODE])\n",
"powershell_docs"
]
},
{
"cell_type": "markdown",
"id": "3ef77730",
"metadata": {},
"source": [
"## Visual Basic 6"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "1dc3c740",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[Document(metadata={}, page_content='Option Explicit'),\n",
" Document(metadata={}, page_content='Public Sub HelloWorld()\\n MsgBox \"Hello, World!\"\\nEnd Sub'),\n",
" Document(metadata={}, page_content='Private Function Add(a As Integer, b As Integer) As Integer\\n Add = a + b\\nEnd Function')]"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"VISUALBASIC6_CODE = \"\"\"Option Explicit\n",
"\n",
"Public Sub HelloWorld()\n",
" MsgBox \"Hello, World!\"\n",
"End Sub\n",
"\n",
"Private Function Add(a As Integer, b As Integer) As Integer\n",
" Add = a + b\n",
"End Function\n",
"\"\"\"\n",
"visualbasic6_splitter = RecursiveCharacterTextSplitter.from_language(\n",
" Language.VISUALBASIC6,\n",
" chunk_size=128,\n",
" chunk_overlap=0,\n",
")\n",
"visualbasic6_docs = visualbasic6_splitter.create_documents([VISUALBASIC6_CODE])\n",
"visualbasic6_docs"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "langchain",
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
@@ -840,7 +775,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.16"
"version": "3.10.4"
}
},
"nbformat": 4,

View File

@@ -34,7 +34,7 @@
"def pretty_print_docs(docs):\n",
" print(\n",
" f\"\\n{'-' * 100}\\n\".join(\n",
" [f\"Document {i + 1}:\\n\\n\" + d.page_content for i, d in enumerate(docs)]\n",
" [f\"Document {i+1}:\\n\\n\" + d.page_content for i, d in enumerate(docs)]\n",
" )\n",
" )"
]

View File

@@ -18,7 +18,7 @@
"\n",
"Wrapping your LLM with the standard [`BaseChatModel`](https://python.langchain.com/api_reference/core/language_models/langchain_core.language_models.chat_models.BaseChatModel.html) interface allow you to use your LLM in existing LangChain programs with minimal code modifications!\n",
"\n",
"As a bonus, your LLM will automatically become a LangChain [Runnable](/docs/concepts/runnables/) and will benefit from some optimizations out of the box (e.g., batch via a threadpool), async support, the `astream_events` API, etc.\n",
"As an bonus, your LLM will automatically become a LangChain [Runnable](/docs/concepts/runnables/) and will benefit from some optimizations out of the box (e.g., batch via a threadpool), async support, the `astream_events` API, etc.\n",
"\n",
"## Inputs and outputs\n",
"\n",

View File

@@ -212,7 +212,7 @@
"vector_store = InMemoryVectorStore.from_documents(pages, OpenAIEmbeddings())\n",
"docs = vector_store.similarity_search(\"What is LayoutParser?\", k=2)\n",
"for doc in docs:\n",
" print(f\"Page {doc.metadata['page']}: {doc.page_content[:300]}\\n\")"
" print(f'Page {doc.metadata[\"page\"]}: {doc.page_content[:300]}\\n')"
]
},
{

View File

@@ -303,7 +303,7 @@
],
"source": [
"for doc in docs[:5]:\n",
" print(f\"{doc.metadata['category']}: {doc.page_content}\")"
" print(f'{doc.metadata[\"category\"]}: {doc.page_content}')"
]
},
{
@@ -448,7 +448,7 @@
"vector_store = InMemoryVectorStore.from_documents(setup_docs, OpenAIEmbeddings())\n",
"retrieved_docs = vector_store.similarity_search(\"Install Tavily\", k=2)\n",
"for doc in retrieved_docs:\n",
" print(f\"Page {doc.metadata['url']}: {doc.page_content[:300]}\\n\")"
" print(f'Page {doc.metadata[\"url\"]}: {doc.page_content[:300]}\\n')"
]
},
{

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