mirror of
https://github.com/hwchase17/langchain.git
synced 2026-02-10 03:00:59 +00:00
Compare commits
9 Commits
langchain-
...
standard_o
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7d14250bfd | ||
|
|
c3add6d3b3 | ||
|
|
20c7baca6d | ||
|
|
c98ad2edaf | ||
|
|
2457f34a89 | ||
|
|
1c4a610bf4 | ||
|
|
5c8a6dac35 | ||
|
|
c70fb33f67 | ||
|
|
1f30cc0c33 |
6
.github/CONTRIBUTING.md
vendored
6
.github/CONTRIBUTING.md
vendored
@@ -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
38
.github/DISCUSSION_TEMPLATE/ideas.yml
vendored
Normal 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
122
.github/DISCUSSION_TEMPLATE/q-a.yml
vendored
Normal 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
|
||||
62
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
62
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
@@ -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
|
||||
|
||||
12
.github/ISSUE_TEMPLATE/config.yml
vendored
12
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -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
|
||||
|
||||
109
.github/ISSUE_TEMPLATE/documentation.yml
vendored
109
.github/ISSUE_TEMPLATE/documentation.yml
vendored
@@ -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.
|
||||
|
||||
6
.github/ISSUE_TEMPLATE/privileged.yml
vendored
6
.github/ISSUE_TEMPLATE/privileged.yml
vendored
@@ -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
|
||||
|
||||
40
.github/PULL_REQUEST_TEMPLATE.md
vendored
40
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -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.
|
||||
|
||||
151
.github/copilot-instructions.md
vendored
151
.github/copilot-instructions.md
vendored
@@ -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 project’s 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 multi‐tenant support
|
||||
* fix(cli): resolve flag parsing error
|
||||
* docs: update API usage examples
|
||||
* docs(openai): update API usage examples
|
||||
1
.github/scripts/check_diff.py
vendored
1
.github/scripts/check_diff.py
vendored
@@ -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
|
||||
|
||||
7
.github/workflows/pr_lint.yml
vendored
7
.github/workflows/pr_lint.yml
vendored
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
10
SECURITY.md
10
SECURITY.md
@@ -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.
|
||||
|
||||
@@ -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\""
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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())
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -1 +1 @@
|
||||
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
|
||||
File diff suppressed because one or more lines are too long
@@ -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
|
||||
|
||||
|
||||
@@ -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)!
|
||||
|
||||
@@ -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).
|
||||
|
||||
@@ -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: I’m 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='I’m 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,
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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",
|
||||
" )"
|
||||
]
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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')"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user