Compare commits

..

1 Commits

Author SHA1 Message Date
Erick Friis
796da053c6 x 2024-11-15 10:06:24 -08:00
656 changed files with 16275 additions and 28458 deletions

View File

@@ -22,7 +22,7 @@ body:
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/),
[API Reference](https://api.python.langchain.com/en/stable/),
[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),

View File

@@ -16,7 +16,7 @@ body:
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/),
[API Reference](https://api.python.langchain.com/en/stable/),
[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),

View File

@@ -21,7 +21,7 @@ body:
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/),
[API Reference](https://api.python.langchain.com/en/stable/),
[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),

View File

@@ -32,8 +32,18 @@ IGNORED_PARTNERS = [
"huggingface",
]
# Cap python version at 3.12 for some packages with dependencies that are not yet
# compatible with python 3.13 (mostly hf tokenizers).
PY_312_MAX_PACKAGES = [
"libs/partners/huggingface", # https://github.com/pytorch/pytorch/issues/130249
f"libs/partners/{integration}"
for integration in [
"chroma",
"couchbase",
"huggingface",
"mistralai",
"nomic",
"qdrant",
]
]
@@ -124,11 +134,10 @@ def _get_configs_for_single_dir(job: str, dir_: str) -> List[Dict[str, str]]:
elif dir_ in PY_312_MAX_PACKAGES:
py_versions = ["3.9", "3.12"]
elif dir_ == "libs/langchain" and job == "extended-tests":
py_versions = ["3.9", "3.13"]
elif dir_ == "libs/community" and job == "extended-tests":
py_versions = ["3.9", "3.12"]
elif dir_ in ["libs/community", "libs/langchain"] and job == "extended-tests":
# community extended test resolution in 3.12 is slow
# even in uv
py_versions = ["3.9", "3.11"]
elif dir_ == "libs/community" and job == "compile-integration-tests":
# community integration deps are slow in 3.12
@@ -272,9 +281,6 @@ if __name__ == "__main__":
# TODO: update to include all packages that rely on standard-tests (all partner packages)
# note: won't run on external repo partners
dirs_to_run["lint"].add("libs/standard-tests")
dirs_to_run["test"].add("libs/standard-tests")
dirs_to_run["lint"].add("libs/cli")
dirs_to_run["test"].add("libs/cli")
dirs_to_run["test"].add("libs/partners/mistralai")
dirs_to_run["test"].add("libs/partners/openai")
dirs_to_run["test"].add("libs/partners/anthropic")
@@ -282,9 +288,8 @@ if __name__ == "__main__":
dirs_to_run["test"].add("libs/partners/groq")
elif file.startswith("libs/cli"):
dirs_to_run["lint"].add("libs/cli")
dirs_to_run["test"].add("libs/cli")
# todo: add cli makefile
pass
elif file.startswith("libs/partners"):
partner_dir = file.split("/")[2]
if os.path.isdir(f"libs/partners/{partner_dir}") and [

View File

@@ -23,7 +23,6 @@ MIN_VERSION_LIBS = [
"langchain-community",
"langchain",
"langchain-text-splitters",
"numpy",
"SQLAlchemy",
]

View File

@@ -23,19 +23,24 @@ def get_target_dir(package_name: str) -> Path:
return base_path / "partners" / package_name_short
def clean_target_directories(packages: list) -> None:
def clean_target_directories(packages: Dict[str, Any]) -> None:
"""Remove old directories that will be replaced."""
for package in packages:
target_dir = get_target_dir(package["name"])
if target_dir.exists():
print(f"Removing {target_dir}")
shutil.rmtree(target_dir)
for package in packages["packages"]:
if package["repo"] != "langchain-ai/langchain":
target_dir = get_target_dir(package["name"])
if target_dir.exists():
print(f"Removing {target_dir}")
shutil.rmtree(target_dir)
def move_libraries(packages: list) -> None:
def move_libraries(packages: Dict[str, Any]) -> None:
"""Move libraries from their source locations to the target directories."""
for package in packages:
for package in packages["packages"]:
# Skip if it's the main langchain repo or disabled
if package["repo"] == "langchain-ai/langchain" or package.get(
"disabled", False
):
continue
repo_name = package["repo"].split("/")[1]
source_path = package["path"]
@@ -63,14 +68,7 @@ def main():
"""Main function to orchestrate the library sync process."""
try:
# Load packages configuration
package_yaml = load_packages_yaml()
packages = [
p
for p in package_yaml["packages"]
if not p.get("disabled", False)
and p["repo"].startswith("langchain-ai/")
and p["repo"] != "langchain-ai/langchain"
]
packages = load_packages_yaml()
# Clean target directories
clean_target_directories(packages)

View File

@@ -13,7 +13,7 @@ on:
description: "Python version to use"
env:
POETRY_VERSION: "1.8.4"
POETRY_VERSION: "1.7.1"
jobs:
build:
@@ -21,7 +21,6 @@ jobs:
run:
working-directory: ${{ inputs.working-directory }}
runs-on: ubuntu-latest
timeout-minutes: 20
name: "poetry run pytest -m compile tests/integration_tests #${{ inputs.python-version }}"
steps:
- uses: actions/checkout@v4

View File

@@ -12,7 +12,7 @@ on:
description: "Python version to use"
env:
POETRY_VERSION: "1.8.4"
POETRY_VERSION: "1.7.1"
jobs:
build:

View File

@@ -13,7 +13,7 @@ on:
description: "Python version to use"
env:
POETRY_VERSION: "1.8.4"
POETRY_VERSION: "1.7.1"
WORKDIR: ${{ inputs.working-directory == '' && '.' || inputs.working-directory }}
# This env var allows us to get inline annotations when ruff has complaints.
@@ -23,7 +23,6 @@ jobs:
build:
name: "make lint #${{ inputs.python-version }}"
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@v4

View File

@@ -21,7 +21,7 @@ on:
env:
PYTHON_VERSION: "3.11"
POETRY_VERSION: "1.8.4"
POETRY_VERSION: "1.7.1"
jobs:
build:
@@ -167,7 +167,6 @@ jobs:
- release-notes
- test-pypi-publish
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@v4
@@ -192,12 +191,7 @@ jobs:
poetry-version: ${{ env.POETRY_VERSION }}
working-directory: ${{ inputs.working-directory }}
- uses: actions/download-artifact@v4
with:
name: dist
path: ${{ inputs.working-directory }}/dist/
- name: Import dist package
- name: Import published package
shell: bash
working-directory: ${{ inputs.working-directory }}
env:
@@ -213,7 +207,15 @@ jobs:
# - attempt install again after 5 seconds if it fails because there is
# sometimes a delay in availability on test pypi
run: |
poetry run pip install dist/*.whl
poetry run pip install \
--extra-index-url https://test.pypi.org/simple/ \
"$PKG_NAME==$VERSION" || \
( \
sleep 15 && \
poetry run pip install \
--extra-index-url https://test.pypi.org/simple/ \
"$PKG_NAME==$VERSION" \
)
# Replace all dashes in the package name with underscores,
# since that's how Python imports packages with dashes in the name.
@@ -222,10 +224,10 @@ jobs:
poetry run python -c "import $IMPORT_NAME; print(dir($IMPORT_NAME))"
- name: Import test dependencies
run: poetry install --with test --no-root
run: poetry install --with test
working-directory: ${{ inputs.working-directory }}
# Overwrite the local version of the package with the built version
# Overwrite the local version of the package with the test PyPI version.
- name: Import published package (again)
working-directory: ${{ inputs.working-directory }}
shell: bash
@@ -233,7 +235,9 @@ jobs:
PKG_NAME: ${{ needs.build.outputs.pkg-name }}
VERSION: ${{ needs.build.outputs.version }}
run: |
poetry run pip install dist/*.whl
poetry run pip install \
--extra-index-url https://test.pypi.org/simple/ \
"$PKG_NAME==$VERSION"
- name: Run unit tests
run: make tests

62
.github/workflows/_release_docker.yml vendored Normal file
View File

@@ -0,0 +1,62 @@
name: release_docker
on:
workflow_call:
inputs:
dockerfile:
required: true
type: string
description: "Path to the Dockerfile to build"
image:
required: true
type: string
description: "Name of the image to build"
env:
TEST_TAG: ${{ inputs.image }}:test
LATEST_TAG: ${{ inputs.image }}:latest
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Get git tag
uses: actions-ecosystem/action-get-latest-tag@v1
id: get-latest-tag
- name: Set docker tag
env:
VERSION: ${{ steps.get-latest-tag.outputs.tag }}
run: |
echo "VERSION_TAG=${{ inputs.image }}:${VERSION#v}" >> $GITHUB_ENV
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build for Test
uses: docker/build-push-action@v5
with:
context: .
file: ${{ inputs.dockerfile }}
load: true
tags: ${{ env.TEST_TAG }}
- name: Test
run: |
docker run --rm ${{ env.TEST_TAG }} python -c "import langchain"
- name: Build and Push to Docker Hub
uses: docker/build-push-action@v5
with:
context: .
file: ${{ inputs.dockerfile }}
# We can only build for the intersection of platforms supported by
# QEMU and base python image, for now build only for
# linux/amd64 and linux/arm64
platforms: linux/amd64,linux/arm64
tags: ${{ env.LATEST_TAG }},${{ env.VERSION_TAG }}
push: true

View File

@@ -13,7 +13,7 @@ on:
description: "Python version to use"
env:
POETRY_VERSION: "1.8.4"
POETRY_VERSION: "1.7.1"
jobs:
build:
@@ -21,7 +21,6 @@ jobs:
run:
working-directory: ${{ inputs.working-directory }}
runs-on: ubuntu-latest
timeout-minutes: 20
name: "make test #${{ inputs.python-version }}"
steps:
- uses: actions/checkout@v4

View File

@@ -9,12 +9,11 @@ on:
description: "Python version to use"
env:
POETRY_VERSION: "1.8.4"
POETRY_VERSION: "1.7.1"
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 20
name: "check doc imports #${{ inputs.python-version }}"
steps:
- uses: actions/checkout@v4

View File

@@ -18,7 +18,7 @@ on:
description: "Pydantic version to test."
env:
POETRY_VERSION: "1.8.4"
POETRY_VERSION: "1.7.1"
jobs:
build:
@@ -26,7 +26,6 @@ jobs:
run:
working-directory: ${{ inputs.working-directory }}
runs-on: ubuntu-latest
timeout-minutes: 20
name: "make test # pydantic: ~=${{ inputs.pydantic-version }}, python: ${{ inputs.python-version }}, "
steps:
- uses: actions/checkout@v4

View File

@@ -14,7 +14,7 @@ on:
description: "Release from a non-master branch (danger!)"
env:
POETRY_VERSION: "1.8.4"
POETRY_VERSION: "1.7.1"
PYTHON_VERSION: "3.10"
jobs:

View File

@@ -5,7 +5,7 @@ on:
schedule:
- cron: '0 13 * * *'
env:
POETRY_VERSION: "1.8.4"
POETRY_VERSION: "1.8.1"
PYTHON_VERSION: "3.11"
jobs:
@@ -37,9 +37,9 @@ jobs:
# Get unique repositories
REPOS=$(echo "$REPOS_UNSORTED" | sort -u)
# Checkout each unique repository that is in langchain-ai org
# Checkout each unique repository
for repo in $REPOS; do
if [[ "$repo" != "langchain-ai/langchain" && "$repo" == langchain-ai/* ]]; then
if [ "$repo" != "langchain-ai/langchain" ]; then
REPO_NAME=$(echo $repo | cut -d'/' -f2)
echo "Checking out $repo to $REPO_NAME"
git clone --depth 1 https://github.com/$repo.git $REPO_NAME
@@ -73,7 +73,7 @@ jobs:
working-directory: langchain
run: |
python -m uv pip install $(ls ./libs/partners | xargs -I {} echo "./libs/partners/{}")
python -m uv pip install libs/core libs/langchain libs/text-splitters libs/community libs/experimental libs/standard-tests
python -m uv pip install libs/core libs/langchain libs/text-splitters libs/community libs/experimental
python -m uv pip install -r docs/api_reference/requirements.txt
- name: Set Git config

View File

@@ -17,7 +17,7 @@ concurrency:
cancel-in-progress: true
env:
POETRY_VERSION: "1.8.4"
POETRY_VERSION: "1.7.1"
jobs:
build:
@@ -119,7 +119,6 @@ jobs:
job-configs: ${{ fromJson(needs.build.outputs.extended-tests) }}
fail-fast: false
runs-on: ubuntu-latest
timeout-minutes: 20
defaults:
run:
working-directory: ${{ matrix.job-configs.working-directory }}

View File

@@ -0,0 +1,14 @@
---
name: docker/langchain/langchain Release
on:
workflow_dispatch: # Allows to trigger the workflow manually in GitHub UI
workflow_call: # Allows triggering from another workflow
jobs:
release:
uses: ./.github/workflows/_release_docker.yml
with:
dockerfile: docker/Dockerfile.base
image: langchain/langchain
secrets: inherit

View File

@@ -15,7 +15,7 @@ on:
- cron: '0 13 * * *'
env:
POETRY_VERSION: "1.8.4"
POETRY_VERSION: "1.7.1"
jobs:
build:

View File

@@ -2,60 +2,32 @@ name: Scheduled tests
on:
workflow_dispatch: # Allows to trigger the workflow manually in GitHub UI
inputs:
working-directory-force:
type: string
description: "From which folder this pipeline executes - defaults to all in matrix - example value: libs/partners/anthropic"
python-version-force:
type: string
description: "Python version to use - defaults to 3.9 and 3.11 in matrix - example value: 3.9"
schedule:
- cron: '0 13 * * *'
env:
POETRY_VERSION: "1.8.4"
DEFAULT_LIBS: '["libs/partners/openai", "libs/partners/anthropic", "libs/partners/fireworks", "libs/partners/groq", "libs/partners/mistralai", "libs/partners/google-vertexai", "libs/partners/google-genai", "libs/partners/aws"]'
POETRY_VERSION: "1.7.1"
jobs:
compute-matrix:
if: github.repository_owner == 'langchain-ai' || github.event_name != 'schedule'
runs-on: ubuntu-latest
name: Compute matrix
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- name: Set matrix
id: set-matrix
env:
DEFAULT_LIBS: ${{ env.DEFAULT_LIBS }}
WORKING_DIRECTORY_FORCE: ${{ github.event.inputs.working-directory-force || '' }}
PYTHON_VERSION_FORCE: ${{ github.event.inputs.python-version-force || '' }}
run: |
# echo "matrix=..." where matrix is a json formatted str with keys python-version and working-directory
# python-version should default to 3.9 and 3.11, but is overridden to [PYTHON_VERSION_FORCE] if set
# working-directory should default to DEFAULT_LIBS, but is overridden to [WORKING_DIRECTORY_FORCE] if set
python_version='["3.9", "3.11"]'
working_directory="$DEFAULT_LIBS"
if [ -n "$PYTHON_VERSION_FORCE" ]; then
python_version="[\"$PYTHON_VERSION_FORCE\"]"
fi
if [ -n "$WORKING_DIRECTORY_FORCE" ]; then
working_directory="[\"$WORKING_DIRECTORY_FORCE\"]"
fi
matrix="{\"python-version\": $python_version, \"working-directory\": $working_directory}"
echo $matrix
echo "matrix=$matrix" >> $GITHUB_OUTPUT
build:
if: github.repository_owner == 'langchain-ai' || github.event_name != 'schedule'
name: Python ${{ matrix.python-version }} - ${{ matrix.working-directory }}
runs-on: ubuntu-latest
needs: [compute-matrix]
timeout-minutes: 20
strategy:
fail-fast: false
matrix:
python-version: ${{ fromJSON(needs.compute-matrix.outputs.matrix).python-version }}
working-directory: ${{ fromJSON(needs.compute-matrix.outputs.matrix).working-directory }}
python-version:
- "3.9"
- "3.11"
working-directory:
- "libs/partners/openai"
- "libs/partners/anthropic"
- "libs/partners/fireworks"
- "libs/partners/groq"
- "libs/partners/mistralai"
- "libs/partners/google-vertexai"
- "libs/partners/google-genai"
- "libs/partners/aws"
steps:
- uses: actions/checkout@v4

View File

@@ -69,11 +69,7 @@ lint lint_package lint_tests:
poetry run ruff check docs cookbook
poetry run ruff format docs cookbook cookbook --diff
poetry run ruff check --select I docs cookbook
git --no-pager grep 'from langchain import' docs cookbook | grep -vE 'from langchain import (hub)' && echo "Error: no importing langchain from root in docs, except for hub" && exit 1 || exit 0
git --no-pager grep 'api.python.langchain.com' -- docs/docs ':!docs/docs/additional_resources/arxiv_references.mdx' ':!docs/docs/integrations/document_loaders/sitemap.ipynb' || exit 0 && \
echo "Error: you should link python.langchain.com/api_reference, not api.python.langchain.com in the docs" && \
exit 1
git grep 'from langchain import' docs/docs cookbook | grep -vE 'from langchain import (hub)' && exit 1 || exit 0
## format: Format the project files.
format format_diff:

View File

@@ -123,13 +123,13 @@ Please see [here](https://python.langchain.com) for full documentation, which in
- [Tutorials](https://python.langchain.com/docs/tutorials/): If you're looking to build something specific or are more of a hands-on learner, check out our tutorials. This is the best place to get started.
- [How-to guides](https://python.langchain.com/docs/how_to/): Answers to “How do I….?” type questions. These guides are goal-oriented and concrete; they're meant to help you complete a specific task.
- [Conceptual guide](https://python.langchain.com/docs/concepts/): Conceptual explanations of the key parts of the framework.
- [API Reference](https://python.langchain.com/api_reference/): Thorough documentation of every class and method.
- [API Reference](https://api.python.langchain.com): Thorough documentation of every class and method.
## 🌐 Ecosystem
- [🦜🛠️ LangSmith](https://docs.smith.langchain.com/): Trace and evaluate your language model applications and intelligent agents to help you move from prototype to production.
- [🦜🕸️ LangGraph](https://langchain-ai.github.io/langgraph/): Create stateful, multi-actor applications with LLMs. Integrates smoothly with LangChain, but can be used without it.
- [🦜🕸️ LangGraph Platform](https://langchain-ai.github.io/langgraph/concepts/#langgraph-platform): Deploy LLM applications built with LangGraph into production.
- [🦜🏓 LangServe](https://python.langchain.com/docs/langserve): Deploy LangChain runnables and chains as REST APIs.
## 💁 Contributing

View File

@@ -1,30 +1,5 @@
# Security Policy
LangChain has a large ecosystem of integrations with various external resources like local and remote file systems, APIs and databases. These integrations allow developers to create versatile applications that combine the power of LLMs with the ability to access, interact with and manipulate external resources.
## Best practices
When building such applications developers should remember to follow good security practices:
* [**Limit Permissions**](https://en.wikipedia.org/wiki/Principle_of_least_privilege): Scope permissions specifically to the application's need. Granting broad or excessive permissions can introduce significant security vulnerabilities. To avoid such vulnerabilities, consider using read-only credentials, disallowing access to sensitive resources, using sandboxing techniques (such as running inside a container), specifying proxy configurations to control external requests, etc. as appropriate for your application.
* **Anticipate Potential Misuse**: Just as humans can err, so can Large Language Models (LLMs). Always assume that any system access or credentials may be used in any way allowed by the permissions they are assigned. For example, if a pair of database credentials allows deleting data, its safest to assume that any LLM able to use those credentials may in fact delete data.
* [**Defense in Depth**](https://en.wikipedia.org/wiki/Defense_in_depth_(computing)): No security technique is perfect. Fine-tuning and good chain design can reduce, but not eliminate, the odds that a Large Language Model (LLM) may make a mistake. Its best to combine multiple layered security approaches rather than relying on any single layer of defense to ensure security. For example: use both read-only permissions and sandboxing to ensure that LLMs are only able to access data that is explicitly meant for them to use.
Risks of not doing so include, but are not limited to:
* Data corruption or loss.
* Unauthorized access to confidential information.
* Compromised performance or availability of critical resources.
Example scenarios with mitigation strategies:
* A user may ask an agent with access to the file system to delete files that should not be deleted or read the content of files that contain sensitive information. To mitigate, limit the agent to only use a specific directory and only allow it to read or write files that are safe to read or write. Consider further sandboxing the agent by running it in a container.
* A user may ask an agent with write access to an external API to write malicious data to the API, or delete data from that API. To mitigate, give the agent read-only API keys, or limit it to only use endpoints that are already resistant to such misuse.
* A user may ask an agent with access to a database to drop a table or mutate the schema. To mitigate, scope the credentials to only the tables that the agent needs to access and consider issuing READ-ONLY credentials.
If you're building applications that access external resources like file systems, APIs
or databases, consider speaking with your company's security team to determine how to best
design and secure your applications.
## Reporting OSS Vulnerabilities
LangChain is partnered with [huntr by Protect AI](https://huntr.com/) to provide
@@ -39,7 +14,7 @@ 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 practicies](#best-practices) above to
3) LangChain [security guidelines](https://python.langchain.com/docs/security) to
understand what we consider to be a security vulnerability vs. developer
responsibility.
@@ -58,13 +33,13 @@ The following packages and repositories are eligible for bug bounties:
All out of scope targets defined by huntr as well as:
- **langchain-experimental**: This repository is for experimental code and is not
eligible for bug bounties (see [package warning](https://pypi.org/project/langchain-experimental/)), bug reports to it will be marked as interesting or waste of
eligible for bug bounties, bug reports to it will be marked as interesting or waste of
time and published with no bounty attached.
- **tools**: Tools in either langchain or langchain-community are not eligible for bug
bounties. This includes the following directories
- libs/langchain/langchain/tools
- libs/community/langchain_community/tools
- Please review the [best practices](#best-practices)
- langchain/tools
- langchain-community/tools
- Please review our [security guidelines](https://python.langchain.com/docs/security)
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.
@@ -72,7 +47,7 @@ All out of scope targets defined by huntr as well as:
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.
- Any LangSmith related repositories or APIs (see [Reporting LangSmith Vulnerabilities](#reporting-langsmith-vulnerabilities)).
- Any LangSmith related repositories or APIs see below.
## Reporting LangSmith Vulnerabilities

View File

@@ -63,5 +63,4 @@ Notebook | Description
[oracleai_demo.ipynb](https://github.com/langchain-ai/langchain/tree/master/cookbook/oracleai_demo.ipynb) | This guide outlines how to utilize Oracle AI Vector Search alongside Langchain for an end-to-end RAG pipeline, providing step-by-step examples. The process includes loading documents from various sources using OracleDocLoader, summarizing them either within or outside the database with OracleSummary, and generating embeddings similarly through OracleEmbeddings. It also covers chunking documents according to specific requirements using Advanced Oracle Capabilities from OracleTextSplitter, and finally, storing and indexing these documents in a Vector Store for querying with OracleVS.
[rag-locally-on-intel-cpu.ipynb](https://github.com/langchain-ai/langchain/tree/master/cookbook/rag-locally-on-intel-cpu.ipynb) | Perform Retrieval-Augmented-Generation (RAG) on locally downloaded open-source models using langchain and open source tools and execute it on Intel Xeon CPU. We showed an example of how to apply RAG on Llama 2 model and enable it to answer the queries related to Intel Q1 2024 earnings release.
[visual_RAG_vdms.ipynb](https://github.com/langchain-ai/langchain/tree/master/cookbook/visual_RAG_vdms.ipynb) | Performs Visual Retrieval-Augmented-Generation (RAG) using videos and scene descriptions generated by open source models.
[contextual_rag.ipynb](https://github.com/langchain-ai/langchain/tree/master/cookbook/contextual_rag.ipynb) | Performs contextual retrieval-augmented generation (RAG) prepending chunk-specific explanatory context to each chunk before embedding.
[rag-agents-locally-on-intel-cpu.ipynb](https://github.com/langchain-ai/langchain/tree/master/cookbook/local_rag_agents_intel_cpu.ipynb) | Build a RAG agent locally with open source models that routes questions through one of two paths to find answers. The agent generates answers based on documents retrieved from either the vector database or retrieved from web search. If the vector database lacks relevant information, the agent opts for web search. Open-source models for LLM and embeddings are used locally on an Intel Xeon CPU to execute this pipeline.
[contextual_rag.ipynb](https://github.com/langchain-ai/langchain/tree/master/cookbook/contextual_rag.ipynb) | Performs contextual retrieval-augmented generation (RAG) prepending chunk-specific explanatory context to each chunk before embedding.

File diff suppressed because one or more lines are too long

3
docker/Dockerfile.base Normal file
View File

@@ -0,0 +1,3 @@
FROM python:3.11
RUN pip install langchain

12
docker/Makefile Normal file
View File

@@ -0,0 +1,12 @@
# Makefile
build_graphdb:
docker build --tag graphdb ./graphdb
start_graphdb:
docker-compose up -d graphdb
down:
docker-compose down -v --remove-orphans
.PHONY: build_graphdb start_graphdb down

84
docker/docker-compose.yml Normal file
View File

@@ -0,0 +1,84 @@
# docker-compose to make it easier to spin up integration tests.
# Services should use NON standard ports to avoid collision with
# any existing services that might be used for development.
# ATTENTION: When adding a service below use a non-standard port
# increment by one from the preceding port.
# For credentials always use `langchain` and `langchain` for the
# username and password.
version: "3"
name: langchain-tests
services:
redis:
image: redis/redis-stack-server:latest
# We use non standard ports since
# these instances are used for testing
# and users may already have existing
# redis instances set up locally
# for other projects
ports:
- "6020:6379"
volumes:
- ./redis-volume:/data
graphdb:
image: graphdb
ports:
- "6021:7200"
mongo:
image: mongo:latest
container_name: mongo_container
ports:
- "6022:27017"
environment:
MONGO_INITDB_ROOT_USERNAME: langchain
MONGO_INITDB_ROOT_PASSWORD: langchain
postgres:
image: postgres:16
environment:
POSTGRES_DB: langchain
POSTGRES_USER: langchain
POSTGRES_PASSWORD: langchain
ports:
- "6023:5432"
command: |
postgres -c log_statement=all
healthcheck:
test:
[
"CMD-SHELL",
"psql postgresql://langchain:langchain@localhost/langchain --command 'SELECT 1;' || exit 1",
]
interval: 5s
retries: 60
volumes:
- postgres_data:/var/lib/postgresql/data
pgvector:
# postgres with the pgvector extension
image: ankane/pgvector
environment:
POSTGRES_DB: langchain
POSTGRES_USER: langchain
POSTGRES_PASSWORD: langchain
ports:
- "6024:5432"
command: |
postgres -c log_statement=all
healthcheck:
test:
[
"CMD-SHELL",
"psql postgresql://langchain:langchain@localhost/langchain --command 'SELECT 1;' || exit 1",
]
interval: 5s
retries: 60
volumes:
- postgres_data_pgvector:/var/lib/postgresql/data
vdms:
image: intellabs/vdms:latest
container_name: vdms_container
ports:
- "6025:55555"
volumes:
postgres_data:
postgres_data_pgvector:

View File

@@ -0,0 +1,5 @@
FROM ontotext/graphdb:10.5.1
RUN mkdir -p /opt/graphdb/dist/data/repositories/langchain
COPY config.ttl /opt/graphdb/dist/data/repositories/langchain/
COPY graphdb_create.sh /run.sh
ENTRYPOINT bash /run.sh

46
docker/graphdb/config.ttl Normal file
View File

@@ -0,0 +1,46 @@
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
@prefix rep: <http://www.openrdf.org/config/repository#>.
@prefix sr: <http://www.openrdf.org/config/repository/sail#>.
@prefix sail: <http://www.openrdf.org/config/sail#>.
@prefix graphdb: <http://www.ontotext.com/config/graphdb#>.
[] a rep:Repository ;
rep:repositoryID "langchain" ;
rdfs:label "" ;
rep:repositoryImpl [
rep:repositoryType "graphdb:SailRepository" ;
sr:sailImpl [
sail:sailType "graphdb:Sail" ;
graphdb:read-only "false" ;
# Inference and Validation
graphdb:ruleset "empty" ;
graphdb:disable-sameAs "true" ;
graphdb:check-for-inconsistencies "false" ;
# Indexing
graphdb:entity-id-size "32" ;
graphdb:enable-context-index "false" ;
graphdb:enablePredicateList "true" ;
graphdb:enable-fts-index "false" ;
graphdb:fts-indexes ("default" "iri") ;
graphdb:fts-string-literals-index "default" ;
graphdb:fts-iris-index "none" ;
# Queries and Updates
graphdb:query-timeout "0" ;
graphdb:throw-QueryEvaluationException-on-timeout "false" ;
graphdb:query-limit-results "0" ;
# Settable in the file but otherwise hidden in the UI and in the RDF4J console
graphdb:base-URL "http://example.org/owlim#" ;
graphdb:defaultNS "" ;
graphdb:imports "" ;
graphdb:repository-type "file-repository" ;
graphdb:storage-folder "storage" ;
graphdb:entity-index-size "10000000" ;
graphdb:in-memory-literal-properties "true" ;
graphdb:enable-literal-index "true" ;
]
].

View File

@@ -0,0 +1,28 @@
#! /bin/bash
REPOSITORY_ID="langchain"
GRAPHDB_URI="http://localhost:7200/"
echo -e "\nUsing GraphDB: ${GRAPHDB_URI}"
function startGraphDB {
echo -e "\nStarting GraphDB..."
exec /opt/graphdb/dist/bin/graphdb
}
function waitGraphDBStart {
echo -e "\nWaiting GraphDB to start..."
for _ in $(seq 1 5); do
CHECK_RES=$(curl --silent --write-out '%{http_code}' --output /dev/null ${GRAPHDB_URI}/rest/repositories)
if [ "${CHECK_RES}" = '200' ]; then
echo -e "\nUp and running"
break
fi
sleep 30s
echo "CHECK_RES: ${CHECK_RES}"
done
}
startGraphDB &
waitGraphDBStart
wait

View File

@@ -38,7 +38,7 @@ install-py-deps:
generate-files:
mkdir -p $(INTERMEDIATE_DIR)
cp -rp $(SOURCE_DIR)/* $(INTERMEDIATE_DIR)
cp -r $(SOURCE_DIR)/* $(INTERMEDIATE_DIR)
$(PYTHON) scripts/tool_feat_table.py $(INTERMEDIATE_DIR)
@@ -47,7 +47,6 @@ generate-files:
$(PYTHON) scripts/partner_pkg_table.py $(INTERMEDIATE_DIR)
curl https://raw.githubusercontent.com/langchain-ai/langserve/main/README.md | sed 's/<=/\&lt;=/g' > $(INTERMEDIATE_DIR)/langserve.md
cp ../SECURITY.md $(INTERMEDIATE_DIR)/security.md
$(PYTHON) scripts/resolve_local_links.py $(INTERMEDIATE_DIR)/langserve.md https://github.com/langchain-ai/langserve/tree/main/
copy-infra:

View File

@@ -80,8 +80,6 @@
html {
--pst-font-family-base: 'Inter';
--pst-font-family-heading: 'Inter Tight', sans-serif;
--pst-icon-versionmodified-deprecated: var(--pst-icon-exclamation-triangle);
}
/*******************************************************************************
@@ -391,13 +389,6 @@ html[data-theme=dark] .MathJax_SVG * {
div.deprecated {
margin-top: 0.5em;
margin-bottom: 2em;
background-color: var(--pst-color-info-bg);
border-color: var(--pst-color-info);
}
span.versionmodified.deprecated:before {
color: var(--pst-color-info);
}
.admonition-beta.admonition, div.admonition-beta.admonition {
@@ -417,4 +408,4 @@ dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.
p {
font-size: 0.9rem;
margin-bottom: 0.5rem;
}
}

View File

@@ -479,11 +479,11 @@ def _package_namespace(package_name: str) -> str:
Returns:
modified package_name: Can be either "langchain" or "langchain_{package_name}"
"""
if package_name == "langchain":
return "langchain"
if package_name == "standard-tests":
return "langchain_tests"
return f"langchain_{package_name.replace('-', '_')}"
return (
package_name
if package_name == "langchain"
else f"langchain_{package_name.replace('-', '_')}"
)
def _package_dir(package_name: str = "langchain") -> Path:
@@ -495,7 +495,6 @@ def _package_dir(package_name: str = "langchain") -> Path:
"core",
"cli",
"text-splitters",
"standard-tests",
):
return ROOT_DIR / "libs" / package_name / _package_namespace(package_name)
else:
@@ -650,7 +649,7 @@ def main(dirs: Optional[list] = None) -> None:
dirs = [
dir_
for dir_ in os.listdir(ROOT_DIR / "libs")
if dir_ not in ("cli", "partners", "packages.yml")
if dir_ not in ("cli", "partners", "standard-tests", "packages.yml")
]
dirs += [
dir_

View File

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

View File

@@ -0,0 +1 @@
eNq1VWtsFFUUblMhkEJMCgaJRm4XDQnpbPfR3e1WUWopL4E2to2pBJq7M3d2L525M87cKV2gEFqjAXyNGo2ikUdtmwKlFNAIocQGrQkPf0ACFa1KxWCIRMFIVAiemX0IFPyl82P3zr3nfuc753znTGtnEzFMqrHcnZRxYmCRw4tpt3Ya5DmLmPz5DpXwhCa1V1fV1G63DDo0M8G5bpYVF2OdelVqcgMrXkyLm/zFYgLzYlFTdYW4MO0xTUp+lff9ao9KTBPHiekpQ0tXewxNIbDymEmTE9VThDyiBt4ZdzbrNQthgyDMEGnWicHhj6eJIazENYPyhOpFVUxJZo6QQRTShBlHlMmaoWLXWDY0FfEEQRzMvGiBjJKALWmIaRw1Mm2le9iEFYsgTXYcYs4NGrM4eDcbiYS4lvFQBC64ZTDELEVB4MO9m7WfYaZwvJ6WIvRPgJZJjNvCK1fAT40KMSBqojCSCeGIYwDFTEIJbKKYorkragDaMritahJRnLvpbAsKNuIEfjkUyIGHJEKiMPBzvPq8PmdP0xt0ePPD2sQyadAhG7pDQcaKSVwLTUkXhCd1l69sMTfPDmh2XQYBMay6BtWgltSxREzRoHrawrPgprzjmGZxhJHuGnsdax0bgAACM1044OJUlhLzZvTVHsySVfKtlCBiyuKptGb2nBqkUiMRGVuKE5WzN5pWLRTJQXfq6xQsRclB8zgJbhA1RTP+P9cu/K2+QSmOZ0RlV4JpLoTGE7yBsoabkvSfM5rvekEqwSYoRYJeQWl3LQ6JDKAWW0FEDnsuqKOSBjGhUdE9BFJOPYEIwWpGTC2dCYIlAHqxPaGZ3O65dTTsxqJIdC4QJmoS8Ld3xVdRvQgBX0fD3dAdjLhas7sbCdEFrNAm0u00jwBDg3F7r56EIcQEZ/Q0F/u8gYg3sDPdVILD2+7Fuq5Q0RVg8QrIc0fK6eiDnsw9hbA4T9jbo9Fgl0FMHQYWaeswOfSR2doOVMmxLzrTg2tb1VOZGIdz7mufA7TtQ3MNWoQCEVRDdBTwBUqQP1zmC5UFS9G8xbU7K9Juau9Ib0+tgZkpQ4SVmax0igmLwdTprrhjPj6BBicKhckRS5p0FREMomLK3Jv+aDgSLfHvv93EXdudAZ/77B+NYBJubwuUHLj9BGa/kRREp5gfBgO+UHTI0yzclYCgUgZDMMujf7Stu87apQkduqsd5C5h7/D7ss9Q4b/6d+27o9FoKFwaCYeCgExYk5YULD0lVQHE1AQaFjhVid0OBAIHHYWYpuDoAQY2ZFnRVgrweYlTZm+d+XGz0KgBdhbB0SoTk+7l4L70KUyy5mT2aKtvT3o//fkUqGQPIRyN+kojwUBAxjE55gsQMST7cTgcCIUlMRYI766YK1RgMUGEGld9duec+iXlixdUdNQAa2LY3aKiWRJ0i0E6wPbp8np7X6kYFWNiJBQSff4SyScKT1bV9GZElxVVu9Nq7nd4fUdqenyWu3DapnE57pO3yD7KBmZPqFw35htr4/xxhcd6rrcurHtm4sZjRwpPnsg7fv+GgvPf7qj+80z94/0f7Z41wKsvXDm3ZVP/d6ySvD2p7jxb2bVx+enNdcsuvVb44HB9/uTfZved+vT9ok3jH5rKpYJLWy6re4TIxTXLiL5VzB8Tf31O371vnbOnFY2f8U6owvfupFNnx4082j97V6B0yYZXJoQ8Y49Wb3lzUcHlyOJfBtYO5059+J6zK/p+Hx6RR+p6qk7nH/7y2pWSi3/tPX01tK4iNPDG5p+Cg1yc/Gp8cHnB5M9/fOGBrsq2eU+t/fXcSxMm9lW2rV+kWL2Fa6+0Tew/OD08WP7syNLBAX/LlB+OHui6OHZSB32CXHg5QhPTTz5Wf/2q/+fge+uufRDTZ9BH1vRWVVf2b56VP3S4tu545I/kEa3/6yUnp0DSbtzIyzmxXWk+k5uT8zfUHYmM

View File

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

View File

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

View File

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

View File

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

View File

@@ -1 +0,0 @@
eNrtVstu20YUbRfdeNVN9wzRVaGRSImSSBleOJJfiW35GcsJAmE0HIpjkRyGM5QlB1407Q/wE5o4UmG4ToIEbfpI10XRH3AX/Yh+QS8lGZbhAN230cLSzNx77mPOmesnwy6NBOPBx2cskDTCRMJCJE+GEX0UUyG/HvhUutw+2ahv7zyLI3bxhStlKCq5HA5Zloc0wCxLuJ/r6jniYpmD36FHRzAnLW73L35/rPpUCNymQq0oDx6rhEOoQMJC3YlwIDwsqSJdqjjc8/ghC9qKE3FfWQjaHhOuAplxZUVij+FAzShqxD2aOou+kNRXjzPKNUyX3Zq2igWN1OOHsONzm3rpVjuUyODIZwFLLQPY0+FbyIhiHxYyiimsATyElsg4SoG0bPl46FJsQ8P++ujTE5cLmZxfb8ILTAgFcBoQbkMdyXftIxZmFJs6aZGnkGVARy1OTjuUhghq6tLB2Ct5icPQYwSn57kDwYOzSVVI9kN68/g0LQ1BXwOZvKlDEvMruY0+3Fag6NliPpt/2UNCYhZ40H7kYchnEI7Of54+CDHpAAiaMCEZjJ3Pp224SJ6vYVLfvgaJI+Imz3Hkl4zX0/tRHEjm02RY3bgZbnJ4Fa6Q1fVs+dU1YNEPSPLcwZ6gP1xzpjLqI8IBI/lGGxDOO4wmF383m8Rptvw5vbYQRs2A14OdbrvLGqLYs7T4Nlve0Ei7t+VtNsqP4uzmerB7iPRyIV/QjHzeRHpWy+pZHeVX94NmbHVX6z7u83vbe1WPhQe0VbuzqNVwffnOwm5hv3+7v9TAG7p7FFjiTq+zudW9n19aWt49snBjpd25x2Nu375r380Syzls1jdnFcgu7jJ7rmDr7p6ubYl1e7dobO6vLury4GBrXrsfF7Nr8Y7W2MLzLbm5Z4ip9AxdR9okw5JmmFr6Ob/khkeDtnSTZ3kt/21ERQi6o18NoGUyFk9OgIf0j9+GEwE+rd+9ovBnJzXgZPJuMWIZJZ9X1nlXARBD0a1KoVzRTGVpbeesOgmzk1LwQpG0J3O0m+6M5TKrgOojQeVcLB1kvhop2gFeLlxqYEjcOOhQ+7T6Xva/S9kPV5vWA5pFtBdyQdEkzeSsgbbGTxFaqb0eSw3xqI0DdjSSQvJuJIPDo96hTWLbdruHvmYdGQXWojFx3kxcwoinYSAh5IvkmW6Z55OTSyKeQvEa0jWk6T/1EOieesxn0ODR38l7KJKTInT/7U0DyTsUXs6hMboe7ddpi4j6wOA09hWMYVnWL+83uoQqgIlVsn66bgW9noLR8754e9NgAvFUE2e9S2vE7OTic1g0TVpsmXnTKplFxyyVWybFpZJRNHBB16hWLP8Id8sIoKSXGfIILpsSePxlP7nI+LiXPjpzBb1YKEGls/BAEy+26XbcqvG0BjGrhBH1OLZfVBdRFROXou0RIZNhbX99fm2l+n0DTTML1cPx4BkGXATMcQbbNIKLSU6Jx2MbXs+IDgBra34/eWPSUqvoFAs2aWHTsR10u749xB4k2SXJa7cwp1YMo6DOKj6eM0twH6M59OUgLSpo//nJuo0lrsDQYLZaUdOhRWBkofm9nQ7znfuL8SNSXu6vtXljla4c+EVj1WqpGZW3DoC9E4/s1ZjLjvgNBgT0IClgXkk3czl0pmcOSlWGtDLSTfAaT7GmA6nRKIQM0xBO2NTKWrHlmGWipdAuZySdnzA+WWDTnlrRMiogS6xWHk9mnYqB3yB8QMhcDUQVFhF1YoEhjSD2vOOM6vE26KElxhsZFYLDoG1C/jBWJlYPj2dm/nONuupKVf3Qh9SRYf6hEyPHW//nPvx76fDvMQ/VqeIf1OrrCw9nZv4BLV1b7w==

View File

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

View File

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

View File

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

View File

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

File diff suppressed because one or more lines are too long

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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

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

File diff suppressed because one or more lines are too long

View File

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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

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

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