Merge branch 'dev' into python_custom_node_component

This commit is contained in:
Gabriel Luiz Freitas Almeida 2023-08-01 15:31:44 -03:00 committed by GitHub
commit d7a13755b3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 156 additions and 408 deletions

View file

@ -51,9 +51,24 @@
You can install Langflow from pip:
```shell
# This installs the package without dependencies for local models
pip install langflow
```
To use local models (e.g llama-cpp-python) run:
```shell
pip install langflow[local]
```
This will install the following dependencies:
- [CTransformers](https://github.com/marella/ctransformers)
- [llama-cpp-python](https://github.com/abetlen/llama-cpp-python)
- [sentence-transformers](https://github.com/UKPLab/sentence-transformers)
You can still use models from projects like LocalAI
Next, run:
```shell
@ -74,7 +89,7 @@ You can also check it out on [HuggingFace Spaces](https://huggingface.co/spaces/
Langflow provides a command-line interface (CLI) for easy management and configuration.
### Usage
## Usage
You can run the Langflow using the following command:
@ -127,6 +142,8 @@ Langflow integrates with langchain-serve to provide a one-command deployment to
Start by installing `langchain-serve` with
```bash
pip install langflow[deploy]
# or
pip install -U langchain-serve
```

501
poetry.lock generated

File diff suppressed because it is too large Load diff

View file

@ -37,9 +37,9 @@ langchain = "^0.0.240"
openai = "^0.27.8"
pandas = "^2.0.0"
chromadb = "^0.3.21"
huggingface-hub = "^0.15.0"
huggingface-hub = { version = "^0.16.0", extras = ["inference"] }
rich = "^13.4.2"
llama-cpp-python = "~0.1.0"
llama-cpp-python = { version = "~0.1.0", optional = true }
networkx = "^3.1"
unstructured = "^0.7.0"
pypdf = "^3.11.0"
@ -56,8 +56,8 @@ qdrant-client = "^1.3.0"
websockets = "^10.3"
weaviate-client = "^3.21.0"
jina = "3.15.2"
sentence-transformers = "^2.2.2"
ctransformers = "^0.2.10"
sentence-transformers = { version = "^2.2.2", optional = true }
ctransformers = { version = "^0.2.10", optional = true }
cohere = "^4.11.0"
python-multipart = "^0.0.6"
sqlmodel = "^0.0.8"
@ -76,7 +76,7 @@ google-cloud-aiplatform = "^1.26.1"
psycopg = "^3.1.9"
psycopg-binary = "^3.1.9"
[tool.poetry.dev-dependencies]
[tool.poetry.group.dev.dependencies]
black = "^23.1.0"
ipykernel = "^6.21.2"
mypy = "^1.1.1"
@ -94,6 +94,9 @@ types-pyyaml = "^6.0.12.8"
[tool.poetry.extras]
deploy = ["langchain-serve"]
local = ["llama-cpp-python", "sentence-transformers", "ctransformers"]
all = ["deploy", "local"]
[tool.pytest.ini_options]
minversion = "6.0"

View file

@ -153,6 +153,8 @@ memories:
documentation: "https://python.langchain.com/docs/modules/memory/how_to/vectorstore_retriever_memory"
MongoDBChatMessageHistory:
documentation: "https://python.langchain.com/docs/modules/memory/integrations/mongodb_chat_message_history"
MotorheadMemory:
documentation: "https://python.langchain.com/docs/integrations/memory/motorhead_memory"
prompts:
ChatMessagePromptTemplate:
documentation: "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/msg_prompt_templates"

View file

@ -94,6 +94,14 @@ class MemoryFrontendNode(FrontendNode):
field.show = False
field.required = False
if name == "MotorheadMemory":
if field.name == "chat_memory":
field.show = False
field.required = False
elif field.name == "client_id":
field.show = True
field.advanced = False
class PostgresChatMessageHistoryFrontendNode(MemoryFrontendNode):
name: str = "PostgresChatMessageHistory"

View file

@ -20,7 +20,7 @@ import {
import { APIClassType, APITemplateType } from "../types/api";
import { FlowType, NodeType } from "../types/flow";
import { TabsContextType, TabsState } from "../types/tabs";
import { updateIds, updateTemplate } from "../utils/reactflowUtils";
import { addVersionToDuplicates, updateIds, updateTemplate } from "../utils/reactflowUtils";
import { getRandomDescription, getRandomName } from "../utils/utils";
import { alertContext } from "./alertContext";
import { typesContext } from "./typesContext";
@ -450,6 +450,10 @@ export function TabsProvider({ children }: { children: ReactNode }) {
processFlowEdges(newFlow);
processFlowNodes(newFlow);
const flowName = addVersionToDuplicates(newFlow, flows);
newFlow.name = flowName;
try {
const { id } = await saveFlowToDatabase(newFlow);
// Change the id to the new id.

View file

@ -75,7 +75,7 @@ function BaseModal({
switch (size) {
case "smaller":
minWidth = "min-w-[40vw]";
height = "h-[25vh]";
height = "h-[27vh]";
break;
case "small":
minWidth = "min-w-[40vw]";

View file

@ -219,3 +219,16 @@ export function validateNodes(reactFlowInstance: ReactFlowInstance) {
.getNodes()
.flatMap((n: NodeType) => validateNode(n, reactFlowInstance));
}
export function addVersionToDuplicates(flow: FlowType, flows: FlowType[]) {
const existingNames = flows.map((item) => item.name);
let newName = flow.name;
let count = 1;
while (existingNames.includes(newName)) {
newName = `${flow.name} (${count})`;
count++;
}
return newName;
}