Merge remote-tracking branch 'origin/dev' into feature/output_dropdown
This commit is contained in:
commit
bd4f4c8724
318 changed files with 14648 additions and 9275 deletions
14
.env.example
14
.env.example
|
|
@ -4,6 +4,19 @@
|
|||
# Do not commit .env file to git
|
||||
# Do not change .env.example file
|
||||
|
||||
# Config directory
|
||||
# Directory where files, logs and database will be stored
|
||||
# Example: LANGFLOW_CONFIG_DIR=~/.langflow
|
||||
LANGFLOW_CONFIG_DIR=
|
||||
|
||||
# Save database in the config directory
|
||||
# Values: true, false
|
||||
# If false, the database will be saved in Langflow's root directory
|
||||
# This means that the database will be deleted when Langflow is uninstalled
|
||||
# and that the database will not be shared between different virtual environments
|
||||
# Example: LANGFLOW_SAVE_DB_IN_CONFIG_DIR=true
|
||||
LANGFLOW_SAVE_DB_IN_CONFIG_DIR=
|
||||
|
||||
# Database URL
|
||||
# Postgres example: LANGFLOW_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/langflow
|
||||
# SQLite example:
|
||||
|
|
@ -56,7 +69,6 @@ LANGFLOW_REMOVE_API_KEYS=
|
|||
# LANGFLOW_REDIS_CACHE_EXPIRE (default: 3600)
|
||||
LANGFLOW_CACHE_TYPE=
|
||||
|
||||
|
||||
# Set AUTO_LOGIN to false if you want to disable auto login
|
||||
# and use the login form to login. LANGFLOW_SUPERUSER and LANGFLOW_SUPERUSER_PASSWORD
|
||||
# must be set if AUTO_LOGIN is set to false
|
||||
|
|
|
|||
2
Makefile
2
Makefile
|
|
@ -141,7 +141,7 @@ backend:
|
|||
@echo 'Setting up the environment'
|
||||
@make setup_env
|
||||
make install_backend
|
||||
@-kill -9 `lsof -t -i:7860`
|
||||
@-kill -9 $(lsof -t -i:7860)
|
||||
ifdef login
|
||||
@echo "Running backend autologin is $(login)";
|
||||
LANGFLOW_AUTO_LOGIN=$(login) poetry run uvicorn --factory langflow.main:create_app --host 0.0.0.0 --port 7860 --reload --env-file .env --loop asyncio
|
||||
|
|
|
|||
|
|
@ -100,6 +100,12 @@ Alternatively, click the **"Open in Cloud Shell"** button below to launch Google
|
|||
|
||||
## Deploy on Railway
|
||||
|
||||
Use this template to deploy Langflow 1.0 Preview on Railway:
|
||||
|
||||
[](https://railway.app/template/UsJ1uB?referralCode=MnPSdg)
|
||||
|
||||
Or this one to deploy Langflow 0.6.x:
|
||||
|
||||
[](https://railway.app/template/JMXEWp?referralCode=MnPSdg)
|
||||
|
||||
## Deploy on Render
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
# PYTHON-BASE
|
||||
# Sets up all our shared environment variables
|
||||
################################
|
||||
FROM python:3.10-slim as python-base
|
||||
FROM python:3.12-slim as python-base
|
||||
|
||||
# python
|
||||
ENV PYTHONUNBUFFERED=1 \
|
||||
|
|
@ -47,7 +47,7 @@ ENV PATH="$POETRY_HOME/bin:$VENV_PATH/bin:$PATH"
|
|||
# Used to build deps + create our virtual environment
|
||||
################################
|
||||
FROM python-base as builder-base
|
||||
RUN
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install --no-install-recommends -y \
|
||||
# deps for installing poetry
|
||||
|
|
@ -55,7 +55,12 @@ RUN apt-get update \
|
|||
# deps for building python deps
|
||||
build-essential \
|
||||
# npm
|
||||
npm
|
||||
npm \
|
||||
# gcc
|
||||
gcc \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
|
||||
|
||||
# Now we need to copy the entire project into the image
|
||||
|
|
@ -70,15 +75,12 @@ RUN --mount=type=cache,target=/root/.cache \
|
|||
RUN python -m pip install requests && cd ./scripts && python update_dependencies.py
|
||||
RUN $POETRY_HOME/bin/poetry lock
|
||||
RUN $POETRY_HOME/bin/poetry build
|
||||
# Final stage for the application
|
||||
FROM python-base as final
|
||||
|
||||
# Copy virtual environment and built .tar.gz from builder base
|
||||
RUN useradd -m -u 1000 user
|
||||
COPY --from=builder-base /app/dist/*.tar.gz ./
|
||||
USER user
|
||||
# Install the package from the .tar.gz
|
||||
RUN python -m pip install *.tar.gz --user
|
||||
RUN python -m pip install /app/dist/*.tar.gz
|
||||
|
||||
WORKDIR /app
|
||||
ENTRYPOINT ["python", "-m", "langflow", "run"]
|
||||
CMD ["--host", "0.0.0.0", "--port", "7860"]
|
||||
CMD ["--host", "0.0.0.0", "--port", "7860"]
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
# PYTHON-BASE
|
||||
# Sets up all our shared environment variables
|
||||
################################
|
||||
FROM python:3.10-slim as python-base
|
||||
FROM python:3.12-slim as python-base
|
||||
|
||||
# python
|
||||
ENV PYTHONUNBUFFERED=1 \
|
||||
|
|
@ -55,6 +55,8 @@ RUN apt-get update \
|
|||
build-essential \
|
||||
# npm
|
||||
npm \
|
||||
# gcc
|
||||
gcc \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
|
|
@ -76,17 +78,14 @@ RUN cd src/frontend && npm run build
|
|||
COPY src/backend ./src/backend
|
||||
RUN cp -r src/frontend/build src/backend/base/langflow/frontend
|
||||
RUN rm -rf src/backend/base/dist
|
||||
RUN cd src/backend/base && $POETRY_HOME/bin/poetry build --format sdist
|
||||
|
||||
# Final stage for the application
|
||||
FROM python-base as final
|
||||
RUN cd src/backend/base && $POETRY_HOME/bin/poetry build
|
||||
|
||||
# Copy virtual environment and built .tar.gz from builder base
|
||||
RUN useradd -m -u 1000 user
|
||||
COPY --from=builder-base /app/src/backend/base/dist/*.tar.gz ./
|
||||
USER user
|
||||
# Install the package from the .tar.gz
|
||||
RUN pip install *.tar.gz --user
|
||||
RUN python -m pip install /app/src/backend/base/dist/*.tar.gz
|
||||
|
||||
|
||||
WORKDIR /app
|
||||
ENTRYPOINT ["python", "-m", "langflow", "run"]
|
||||
CMD ["--host", "0.0.0.0", "--port", "7860"]
|
||||
CMD ["--host", "0.0.0.0", "--port", "7860"]
|
||||
|
|
|
|||
45
docs/docs/administration/global-env.mdx
Normal file
45
docs/docs/administration/global-env.mdx
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
import ZoomableImage from "/src/theme/ZoomableImage.js";
|
||||
import Admonition from "@theme/Admonition";
|
||||
|
||||
# Global environment variables
|
||||
|
||||
Langflow 1.0 alpha includes the option to add **Global Environment Variables** for your application.
|
||||
|
||||
## Add a global variable to a project
|
||||
|
||||
In this example, you'll add the `openai_api_key` credential as a global environment variable to the **Basic Prompting** starter project.
|
||||
|
||||
For more information on the starter flow, see [Basic prompting](../starter-projects/basic-prompting.mdx).
|
||||
|
||||
1. From the Langflow dashboard, click **New Project**.
|
||||
2. Select **Basic Prompting**.
|
||||
|
||||
The **Basic Prompting** flow is created.
|
||||
|
||||
3. To create an environment variable for the **OpenAI** component:
|
||||
1. In the **OpenAI API Key** field, click the **Globe** button, and then click **Add New Variable**.
|
||||
2. In the **Variable Name** field, enter `openai_api_key`.
|
||||
3. In the **Value** field, paste your OpenAI API Key (`sk-...`).
|
||||
4. For the variable **Type**, select **Credential**.
|
||||
5. In the **Apply to Fields** field, select **OpenAI API Key** to apply this variable to all fields named **OpenAI API Key**.
|
||||
6. Click **Save Variable**.
|
||||
|
||||
You now have a `openai_api_key` global environment variable for your Langflow project.
|
||||
|
||||
<Admonition type="tip">
|
||||
You can also create global variables in **Settings** > **Variables and
|
||||
Secrets**.
|
||||
</Admonition>
|
||||
|
||||
<ZoomableImage
|
||||
alt="Docusaurus themed image"
|
||||
sources={{
|
||||
light: "img/global-env.png",
|
||||
dark: "img/global-env.png",
|
||||
}}
|
||||
style={{ width: "40%", margin: "20px auto" }}
|
||||
/>
|
||||
|
||||
4. To view and manage your project's global environment variables, visit **Settings** > **Variables and Secrets**.
|
||||
|
||||
For more on variables in HuggingFace Spaces, see [Managing Secrets](https://huggingface.co/docs/hub/spaces-overview#managing-secrets).
|
||||
29
docs/docs/administration/playground.mdx
Normal file
29
docs/docs/administration/playground.mdx
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
import ThemedImage from "@theme/ThemedImage";
|
||||
import useBaseUrl from "@docusaurus/useBaseUrl";
|
||||
import ZoomableImage from "/src/theme/ZoomableImage.js";
|
||||
import ReactPlayer from "react-player";
|
||||
import Admonition from "@theme/Admonition";
|
||||
|
||||
# Playground
|
||||
|
||||
In Langflow 1.0 alpha, the **Playground** replaces the **Interaction Panel**.
|
||||
|
||||
The **Playground** provides an interface for interacting with flows without opening them in the flow editor.
|
||||
|
||||
It even works for flows hosted on the Langflow store!
|
||||
|
||||
As long as you have a flow's environment variables set, you can run it by clicking the **Playground** button.
|
||||
|
||||
1. From your **Collections** page, click **Playground** in one of your flows.
|
||||
The **Playground** window opens.
|
||||
|
||||
<ZoomableImage
|
||||
alt="Docusaurus themed image"
|
||||
sources={{
|
||||
light: useBaseUrl("img/playground-chat.png"),
|
||||
dark: useBaseUrl("img/playground-chat.png"),
|
||||
}}
|
||||
style={{ width: "50%", maxWidth: "600px", margin: "0 auto" }}
|
||||
/>
|
||||
|
||||
2. Chat with your bot as you normally would, all without having to open the editor.
|
||||
|
|
@ -26,7 +26,8 @@ The `Astra DB` initializes a vector store using Astra DB from records. It create
|
|||
- **Collection Indexing Policy:** Indexing policy for the collection.
|
||||
|
||||
<Admonition type="note" title="Note">
|
||||
Ensure you configure the necessary Astra DB token and API endpoint before starting.
|
||||
Ensure you configure the necessary Astra DB token and API endpoint before
|
||||
starting.
|
||||
</Admonition>
|
||||
|
||||
---
|
||||
|
|
@ -96,6 +97,44 @@ For detailed documentation and integration guides, please refer to the [Chroma C
|
|||
|
||||
---
|
||||
|
||||
### Couchbase
|
||||
|
||||
`Couchbase` builds a Couchbase vector store from records, streamlining the storage and retrieval of documents.
|
||||
|
||||
**Parameters:**
|
||||
|
||||
- **Embedding:** Model used by Couchbase.
|
||||
- **Input:** Documents or records.
|
||||
- **Couchbase Cluster Connection String:** Cluster Connection string.
|
||||
- **Couchbase Cluster Username:** Cluster Username.
|
||||
- **Couchbase Cluster Password:** Cluster Password.
|
||||
- **Bucket Name:** Bucket identifier in Couchbase.
|
||||
- **Scope Name:** Scope identifier in Couchbase.
|
||||
- **Collection Name:** Collection identifier in Couchbase.
|
||||
- **Index Name:** Index identifier.
|
||||
|
||||
For detailed documentation and integration guides, please refer to the [Couchbase Component Documentation](https://python.langchain.com/docs/integrations/vectorstores/couchbase).
|
||||
|
||||
---
|
||||
|
||||
### Couchbase Search
|
||||
|
||||
`CouchbaseSearch` leverages the Couchbase component to search for documents based on similarity metric.
|
||||
|
||||
**Parameters:**
|
||||
|
||||
- **Input:** Search query.
|
||||
- **Embedding:** Model used in the Vector Store.
|
||||
- **Couchbase Cluster Connection String:** Cluster Connection string.
|
||||
- **Couchbase Cluster Username:** Cluster Username.
|
||||
- **Couchbase Cluster Password:** Cluster Password.
|
||||
- **Bucket Name:** Bucket identifier.
|
||||
- **Scope Name:** Scope identifier.
|
||||
- **Collection Name:** Collection identifier in Couchbase.
|
||||
- **Index Name:** Index identifier.
|
||||
|
||||
---
|
||||
|
||||
### FAISS
|
||||
|
||||
The `FAISS` component manages document ingestion into a FAISS Vector Store, optimizing document indexing and retrieval.
|
||||
|
|
@ -278,7 +317,8 @@ For more details, see the [PGVector Component Documentation](https://python.lang
|
|||
For detailed documentation, refer to the [Redis Documentation](https://python.langchain.com/docs/integrations/vectorstores/redis).
|
||||
|
||||
<Admonition type="note" title="Note">
|
||||
Ensure the Redis server URL and index name are configured correctly. Provide a schema if no documents are available.
|
||||
Ensure the Redis server URL and index name are configured correctly. Provide a
|
||||
schema if no documents are available.
|
||||
</Admonition>
|
||||
|
||||
---
|
||||
|
|
@ -389,7 +429,8 @@ For more information, consult the [Vectara Component Documentation](https://pyth
|
|||
For more details, see the [Weaviate Component Documentation](https://python.langchain.com/docs/integrations/vectorstores/weaviate).
|
||||
|
||||
<Admonition type="note" title="Note">
|
||||
Ensure Weaviate instance is running and accessible. Verify API key, index name, text key, and attributes are set correctly.
|
||||
Ensure Weaviate instance is running and accessible. Verify API key, index
|
||||
name, text key, and attributes are set correctly.
|
||||
</Admonition>
|
||||
|
||||
---
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ You have a new document loader called **MyCustomDocumentLoader** and it would lo
|
|||
6. Add the dependency to [/documentloaders/\_\_init\_\_.py](https://github.com/langflow-ai/langflow/blob/dev/src/backend/base/langflow/components/documentloaders/__init__.py) as `from .MyCustomDocumentLoader import MyCustomDocumentLoader`.
|
||||
7. Add any new dependencies to the outer [pyproject.toml](https://github.com/langflow-ai/langflow/blob/dev/pyproject.toml#L27) file.
|
||||
8. Submit documentation for your component. For this example, you'd submit documentation to the [loaders page](https://github.com/langflow-ai/langflow/blob/dev/docs/docs/components/loaders.mdx).
|
||||
8. Submit your changes as a pull request. The Langflow team will have a look, suggest changes, and add your component to Langflow.
|
||||
9. Submit your changes as a pull request. The Langflow team will have a look, suggest changes, and add your component to Langflow.
|
||||
|
||||
## User Sharing
|
||||
|
||||
|
|
@ -27,21 +27,19 @@ If so, you can share your component on the Langflow store.
|
|||
1. [Register at the Langflow store](https://www.langflow.store/login/).
|
||||
2. Undergo pre-validation before receiving an API key.
|
||||
3. To deploy your amazing component directly to the Langflow store, without it being merged into the main source code, navigate to your flow, and then click **Share**.
|
||||
The share window appears:
|
||||
The share window appears:
|
||||
|
||||
<ZoomableImage
|
||||
alt="Docusaurus themed image"
|
||||
sources={{
|
||||
alt="Docusaurus themed image"
|
||||
sources={{
|
||||
light: "img/add-component-to-store.png",
|
||||
dark: "img/add-component-to-store.png",
|
||||
}}
|
||||
style={{ width: "50%", margin: "20px auto" }}
|
||||
style={{ width: "50%", margin: "20px auto" }}
|
||||
/>
|
||||
|
||||
5. Choose whether you want to flow to be public or private.
|
||||
You can also **Export** your flow as a JSON file from this window.
|
||||
When you're ready to share the flow, click **Share Flow**.
|
||||
You should see a **Flow shared successfully** popup.
|
||||
You can also **Export** your flow as a JSON file from this window.
|
||||
When you're ready to share the flow, click **Share Flow**.
|
||||
You should see a **Flow shared successfully** popup.
|
||||
6. To confirm, navigate to the **Langflow Store** and filter results by **Created By Me**. You should see your new flow on the **Langflow Store**.
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -143,7 +143,7 @@ The RAG flow is a bit more complex. It consists of:
|
|||
style={{ width: "80%", margin: "20px auto" }}
|
||||
/>
|
||||
|
||||
To run it all we have to do is click on the ⚡ _Run_ button and start interacting with your RAG application.
|
||||
To run it all we have to do is click on the 🤖 _Playground_ button and start interacting with your RAG application.
|
||||
|
||||
<ZoomableImage
|
||||
alt="Docusaurus themed image"
|
||||
|
|
|
|||
|
|
@ -4,9 +4,7 @@ module.exports = {
|
|||
type: "category",
|
||||
label: "What's New?",
|
||||
collapsed: false,
|
||||
items: [
|
||||
"whats-new/a-new-chapter-langflow"
|
||||
],
|
||||
items: ["whats-new/a-new-chapter-langflow"],
|
||||
},
|
||||
{
|
||||
type: "category",
|
||||
|
|
@ -17,7 +15,7 @@ module.exports = {
|
|||
"getting-started/install-langflow",
|
||||
"getting-started/quickstart",
|
||||
"getting-started/huggingface-spaces",
|
||||
"getting-started/new-to-llms"
|
||||
"getting-started/new-to-llms",
|
||||
],
|
||||
},
|
||||
{
|
||||
|
|
@ -29,7 +27,7 @@ module.exports = {
|
|||
"starter-projects/blog-writer",
|
||||
"starter-projects/document-qa",
|
||||
"starter-projects/memory-chatbot",
|
||||
"starter-projects/vector-store-rag"
|
||||
"starter-projects/vector-store-rag",
|
||||
],
|
||||
},
|
||||
{
|
||||
|
|
@ -40,10 +38,12 @@ module.exports = {
|
|||
"administration/login",
|
||||
"administration/api",
|
||||
"administration/cli",
|
||||
"administration/playground",
|
||||
"administration/global-env",
|
||||
"administration/components",
|
||||
"administration/collection",
|
||||
"administration/prompt-customization",
|
||||
"administration/langfuse_integration"
|
||||
"administration/langfuse_integration",
|
||||
],
|
||||
},
|
||||
{
|
||||
|
|
@ -58,7 +58,7 @@ module.exports = {
|
|||
"components/helpers",
|
||||
"components/vector-stores",
|
||||
"components/embeddings",
|
||||
"components/custom"
|
||||
"components/custom",
|
||||
],
|
||||
},
|
||||
{
|
||||
|
|
@ -74,7 +74,7 @@ module.exports = {
|
|||
"components/retrievers",
|
||||
"components/text-splitters",
|
||||
"components/toolkits",
|
||||
"components/tools"
|
||||
"components/tools",
|
||||
],
|
||||
},
|
||||
{
|
||||
|
|
@ -88,7 +88,7 @@ module.exports = {
|
|||
"examples/csv-loader",
|
||||
"examples/searchapi-tool",
|
||||
"examples/serp-api-tool",
|
||||
"examples/python-function"
|
||||
"examples/python-function",
|
||||
],
|
||||
},
|
||||
{
|
||||
|
|
@ -101,8 +101,8 @@ module.exports = {
|
|||
"migration/inputs-and-outputs",
|
||||
"migration/text-and-record",
|
||||
"migration/compatibility",
|
||||
"migration/global-variables"
|
||||
]
|
||||
"migration/global-variables",
|
||||
],
|
||||
},
|
||||
{
|
||||
type: "category",
|
||||
|
|
@ -111,16 +111,14 @@ module.exports = {
|
|||
items: [
|
||||
"tutorials/chatprompttemplate_guide",
|
||||
"tutorials/loading_document",
|
||||
"tutorials/rag-with-astradb"
|
||||
"tutorials/rag-with-astradb",
|
||||
],
|
||||
},
|
||||
{
|
||||
type: "category",
|
||||
label: "Deployment",
|
||||
collapsed: true,
|
||||
items: [
|
||||
"deployment/gcp-deployment"
|
||||
],
|
||||
items: ["deployment/gcp-deployment"],
|
||||
},
|
||||
{
|
||||
type: "category",
|
||||
|
|
@ -130,7 +128,7 @@ module.exports = {
|
|||
"contributing/how-contribute",
|
||||
"contributing/github-issues",
|
||||
"contributing/community",
|
||||
"contributing/contribute-component"
|
||||
"contributing/contribute-component",
|
||||
],
|
||||
},
|
||||
],
|
||||
|
|
|
|||
6506
docs/static/data/AstraDB-RAG-Flows.json
vendored
6506
docs/static/data/AstraDB-RAG-Flows.json
vendored
File diff suppressed because one or more lines are too long
BIN
docs/static/img/astra-rag-flow-run.png
vendored
BIN
docs/static/img/astra-rag-flow-run.png
vendored
Binary file not shown.
|
Before Width: | Height: | Size: 190 KiB After Width: | Height: | Size: 93 KiB |
BIN
docs/static/img/global-env.png
vendored
Normal file
BIN
docs/static/img/global-env.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 85 KiB |
BIN
docs/static/img/playground-chat.png
vendored
Normal file
BIN
docs/static/img/playground-chat.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 132 KiB |
191
example.har
191
example.har
File diff suppressed because one or more lines are too long
2047
poetry.lock
generated
2047
poetry.lock
generated
File diff suppressed because it is too large
Load diff
|
|
@ -1,6 +1,6 @@
|
|||
[tool.poetry]
|
||||
name = "langflow"
|
||||
version = "1.0.0a33"
|
||||
version = "1.0.0a37"
|
||||
description = "A Python package with a built-in web application"
|
||||
authors = ["Langflow <contact@langflow.org>"]
|
||||
maintainers = [
|
||||
|
|
@ -29,21 +29,20 @@ python = ">=3.10,<3.13"
|
|||
langflow-base = { path = "./src/backend/base", develop = true }
|
||||
beautifulsoup4 = "^4.12.2"
|
||||
google-search-results = "^2.4.1"
|
||||
google-api-python-client = "^2.118.0"
|
||||
google-api-python-client = "^2.130.0"
|
||||
huggingface-hub = { version = "^0.20.0", extras = ["inference"] }
|
||||
llama-cpp-python = { version = "~0.2.0", optional = true }
|
||||
networkx = "^3.1"
|
||||
pysrt = "^1.1.2"
|
||||
fake-useragent = "^1.4.0"
|
||||
fake-useragent = "^1.5.0"
|
||||
psycopg2-binary = "^2.9.6"
|
||||
pyarrow = "^14.0.0"
|
||||
wikipedia = "^1.4.0"
|
||||
qdrant-client = "^1.7.0"
|
||||
qdrant-client = "^1.9.0"
|
||||
weaviate-client = "*"
|
||||
sentence-transformers = { version = "^2.3.1", optional = true }
|
||||
ctransformers = { version = "^0.2.10", optional = true }
|
||||
cohere = "^5.1.7"
|
||||
faiss-cpu = "^1.7.4"
|
||||
cohere = "^5.5.3"
|
||||
faiss-cpu = "^1.8.0"
|
||||
types-cachetools = "^5.3.0.5"
|
||||
pinecone-client = "^3.0.3"
|
||||
pymongo = "^4.6.0"
|
||||
|
|
@ -57,10 +56,9 @@ redis = { version = "^5.0.1", optional = true }
|
|||
flower = { version = "^2.0.0", optional = true }
|
||||
metaphor-python = "^0.1.11"
|
||||
pywin32 = { version = "^306", markers = "sys_platform == 'win32'" }
|
||||
langfuse = "^2.9.0"
|
||||
langfuse = "^2.33.0"
|
||||
metal-sdk = "^2.5.0"
|
||||
markupsafe = "^2.1.3"
|
||||
extract-msg = "^0.47.0"
|
||||
# jq is not available for windows
|
||||
boto3 = "^1.34.0"
|
||||
numexpr = "^2.8.6"
|
||||
|
|
@ -71,41 +69,41 @@ langchain-google-genai = "^1.0.1"
|
|||
langchain-cohere = "^0.1.0rc1"
|
||||
elasticsearch = "^8.12.0"
|
||||
pytube = "^15.0.0"
|
||||
llama-index = "^0.10.13"
|
||||
# unstructured = { extras = ["md"], version = "^0.12.4" }
|
||||
dspy-ai = "^2.4.0"
|
||||
html2text = "^2024.2.26"
|
||||
assemblyai = "^0.23.1"
|
||||
litellm = "^1.34.22"
|
||||
chromadb = "^0.4.24"
|
||||
assemblyai = "^0.26.0"
|
||||
litellm = "^1.38.0"
|
||||
chromadb = "^0.5.0"
|
||||
langchain-anthropic = "^0.1.6"
|
||||
langchain-astradb = "^0.1.0"
|
||||
langchain-astradb = "^0.3.0"
|
||||
langchain-openai = "^0.1.1"
|
||||
zep-python = { version = "^2.0.0rc5", allow-prereleases = true }
|
||||
langchain-google-vertexai = "^1.0.3"
|
||||
langchain-groq = "^0.1.3"
|
||||
langchain-pinecone = "^0.1.0"
|
||||
langchain-mistralai = "^0.1.6"
|
||||
couchbase = "^4.2.1"
|
||||
youtube-transcript-api = "^0.6.2"
|
||||
markdown = "^3.6"
|
||||
|
||||
|
||||
[tool.poetry.group.dev.dependencies]
|
||||
types-redis = "^4.6.0.5"
|
||||
ipykernel = "^6.29.0"
|
||||
mypy = "^1.9.0"
|
||||
ruff = "^0.3.5"
|
||||
mypy = "^1.10.0"
|
||||
ruff = "^0.4.5"
|
||||
httpx = "*"
|
||||
pytest = "^8.1.0"
|
||||
types-requests = "^2.31.0"
|
||||
requests = "^2.31.0"
|
||||
pytest-cov = "^4.1.0"
|
||||
pytest = "^8.2.0"
|
||||
types-requests = "^2.32.0"
|
||||
requests = "^2.32.0"
|
||||
pytest-cov = "^5.0.0"
|
||||
pandas-stubs = "^2.1.4.231227"
|
||||
types-pillow = "^10.2.0.20240213"
|
||||
types-pyyaml = "^6.0.12.8"
|
||||
types-python-jose = "^3.3.4.8"
|
||||
types-passlib = "^1.7.7.13"
|
||||
locust = "^2.23.1"
|
||||
pytest-mock = "^3.12.0"
|
||||
pytest-xdist = "^3.5.0"
|
||||
pytest-mock = "^3.14.0"
|
||||
pytest-xdist = "^3.6.0"
|
||||
types-pywin32 = "^306.0.0.4"
|
||||
types-google-cloud-ndb = "^2.2.0.0"
|
||||
pytest-sugar = "^1.0.0"
|
||||
|
|
@ -134,7 +132,7 @@ ignore-regex = '.*(Stati Uniti|Tense=Pres).*'
|
|||
|
||||
[tool.pytest.ini_options]
|
||||
minversion = "6.0"
|
||||
addopts = "-ra"
|
||||
addopts = "-ra -n auto"
|
||||
testpaths = ["tests", "integration"]
|
||||
console_output_style = "progress"
|
||||
filterwarnings = ["ignore::DeprecationWarning"]
|
||||
|
|
|
|||
|
|
@ -1,65 +1,85 @@
|
|||
import { Construct } from 'constructs';
|
||||
import * as ec2 from 'aws-cdk-lib/aws-ec2'
|
||||
import { Construct } from "constructs";
|
||||
import * as ec2 from "aws-cdk-lib/aws-ec2";
|
||||
import * as rds from "aws-cdk-lib/aws-rds";
|
||||
import * as cdk from 'aws-cdk-lib';
|
||||
import * as cdk from "aws-cdk-lib";
|
||||
|
||||
interface RdsProps {
|
||||
vpc: ec2.Vpc
|
||||
dbSG:ec2.SecurityGroup
|
||||
vpc: ec2.Vpc;
|
||||
dbSG: ec2.SecurityGroup;
|
||||
}
|
||||
|
||||
export class Rds extends Construct{
|
||||
readonly rdsCluster: rds.DatabaseCluster
|
||||
export class Rds extends Construct {
|
||||
readonly rdsCluster: rds.DatabaseCluster;
|
||||
|
||||
constructor(scope: Construct, id:string, props: RdsProps){
|
||||
constructor(scope: Construct, id: string, props: RdsProps) {
|
||||
super(scope, id);
|
||||
|
||||
const {vpc, dbSG} = props
|
||||
const instanceType = ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE4_GRAVITON, ec2.InstanceSize.MEDIUM)
|
||||
const { vpc, dbSG } = props;
|
||||
const instanceType = ec2.InstanceType.of(
|
||||
ec2.InstanceClass.BURSTABLE4_GRAVITON,
|
||||
ec2.InstanceSize.MEDIUM,
|
||||
);
|
||||
|
||||
// RDSのパスワードを自動生成してSecrets Managerに格納
|
||||
const rdsCredentials = rds.Credentials.fromGeneratedSecret('db_user',{
|
||||
secretName: 'langflow-DbSecret',
|
||||
})
|
||||
|
||||
const rdsCredentials = rds.Credentials.fromGeneratedSecret("db_user", {
|
||||
secretName: "langflow-DbSecret",
|
||||
});
|
||||
|
||||
// DB クラスターのパラメータグループ作成
|
||||
const clusterParameterGroup = new rds.ParameterGroup(scope, 'ClusterParameterGroup',{
|
||||
engine: rds.DatabaseClusterEngine.auroraMysql({
|
||||
version: rds.AuroraMysqlEngineVersion.VER_3_02_0
|
||||
}),
|
||||
description: 'for-langflow',
|
||||
})
|
||||
clusterParameterGroup.bindToCluster({})
|
||||
const clusterParameterGroup = new rds.ParameterGroup(
|
||||
scope,
|
||||
"ClusterParameterGroup",
|
||||
{
|
||||
engine: rds.DatabaseClusterEngine.auroraMysql({
|
||||
version: rds.AuroraMysqlEngineVersion.of(
|
||||
"8.0.mysql_aurora.3.05.2",
|
||||
"8.0",
|
||||
),
|
||||
}),
|
||||
description: "for-langflow",
|
||||
},
|
||||
);
|
||||
clusterParameterGroup.bindToCluster({});
|
||||
|
||||
// DB インスタンスのパラメタグループ作成
|
||||
const instanceParameterGroup = new rds.ParameterGroup(scope, 'InstanceParameterGroup',{
|
||||
engine: rds.DatabaseClusterEngine.auroraMysql({
|
||||
version: rds.AuroraMysqlEngineVersion.VER_3_02_0,
|
||||
}),
|
||||
description: 'for-langflow',
|
||||
})
|
||||
instanceParameterGroup.bindToInstance({})
|
||||
const instanceParameterGroup = new rds.ParameterGroup(
|
||||
scope,
|
||||
"InstanceParameterGroup",
|
||||
{
|
||||
engine: rds.DatabaseClusterEngine.auroraMysql({
|
||||
version: rds.AuroraMysqlEngineVersion.of(
|
||||
"8.0.mysql_aurora.3.05.2",
|
||||
"8.0",
|
||||
),
|
||||
}),
|
||||
description: "for-langflow",
|
||||
},
|
||||
);
|
||||
instanceParameterGroup.bindToInstance({});
|
||||
|
||||
this.rdsCluster = new rds.DatabaseCluster(scope, 'LangflowDbCluster', {
|
||||
this.rdsCluster = new rds.DatabaseCluster(scope, "LangflowDbCluster", {
|
||||
engine: rds.DatabaseClusterEngine.auroraMysql({
|
||||
version: rds.AuroraMysqlEngineVersion.VER_3_02_0,
|
||||
version: rds.AuroraMysqlEngineVersion.of(
|
||||
"8.0.mysql_aurora.3.05.2",
|
||||
"8.0",
|
||||
),
|
||||
}),
|
||||
storageEncrypted: true,
|
||||
credentials: rdsCredentials,
|
||||
instanceIdentifierBase: 'langflow-instance',
|
||||
vpc:vpc,
|
||||
vpcSubnets:vpc.selectSubnets({
|
||||
subnetGroupName: 'langflow-Isolated',
|
||||
instanceIdentifierBase: "langflow-instance",
|
||||
vpc: vpc,
|
||||
vpcSubnets: vpc.selectSubnets({
|
||||
subnetGroupName: "langflow-Isolated",
|
||||
}),
|
||||
securityGroups:[dbSG],
|
||||
securityGroups: [dbSG],
|
||||
writer: rds.ClusterInstance.provisioned("WriterInstance", {
|
||||
instanceType: instanceType,
|
||||
enablePerformanceInsights: true,
|
||||
parameterGroup:instanceParameterGroup,
|
||||
parameterGroup: instanceParameterGroup,
|
||||
}),
|
||||
// 2台目以降はreaders:で設定
|
||||
// 2台目以降はreaders:で設定
|
||||
parameterGroup: clusterParameterGroup,
|
||||
defaultDatabaseName: 'langflow',
|
||||
})
|
||||
defaultDatabaseName: "langflow",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
1085
scripts/aws/package-lock.json
generated
1085
scripts/aws/package-lock.json
generated
File diff suppressed because it is too large
Load diff
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue