Fix typos and update method names

This commit is contained in:
Gabriel Luiz Freitas Almeida 2023-11-21 14:49:47 -03:00
commit 020488e97b
10 changed files with 60 additions and 63 deletions

View file

@ -1,19 +1,15 @@
import asyncio import asyncio
from typing import Any, Dict, List, Optional
from uuid import UUID from uuid import UUID
from langchain.callbacks.base import AsyncCallbackHandler, BaseCallbackHandler from langchain.callbacks.base import AsyncCallbackHandler, BaseCallbackHandler
from langflow.api.v1.schemas import ChatResponse, PromptResponse
from typing import Any, Dict, List, Optional
from langflow.services.deps import get_chat_service
from langflow.utils.util import remove_ansi_escape_codes
from langchain.schema import AgentAction, AgentFinish from langchain.schema import AgentAction, AgentFinish
from loguru import logger from loguru import logger
from langflow.api.v1.schemas import ChatResponse, PromptResponse
from langflow.services.deps import get_chat_service
from langflow.utils.util import remove_ansi_escape_codes
# https://github.com/hwchase17/chat-langchain/blob/master/callback.py # https://github.com/hwchase17/chat-langchain/blob/master/callback.py
class AsyncStreamingLLMCallbackHandler(AsyncCallbackHandler): class AsyncStreamingLLMCallbackHandler(AsyncCallbackHandler):
@ -26,7 +22,7 @@ class AsyncStreamingLLMCallbackHandler(AsyncCallbackHandler):
async def on_llm_new_token(self, token: str, **kwargs: Any) -> None: async def on_llm_new_token(self, token: str, **kwargs: Any) -> None:
resp = ChatResponse(message=token, type="stream", intermediate_steps="") resp = ChatResponse(message=token, type="stream", intermediate_steps="")
await self.websocket.send_json(resp.dict()) await self.websocket.send_json(resp.model_dump())
async def on_tool_start(self, serialized: Dict[str, Any], input_str: str, **kwargs: Any) -> Any: async def on_tool_start(self, serialized: Dict[str, Any], input_str: str, **kwargs: Any) -> Any:
"""Run when tool starts running.""" """Run when tool starts running."""
@ -35,7 +31,7 @@ class AsyncStreamingLLMCallbackHandler(AsyncCallbackHandler):
type="stream", type="stream",
intermediate_steps=f"Tool input: {input_str}", intermediate_steps=f"Tool input: {input_str}",
) )
await self.websocket.send_json(resp.dict()) await self.websocket.send_json(resp.model_dump())
async def on_tool_end(self, output: str, **kwargs: Any) -> Any: async def on_tool_end(self, output: str, **kwargs: Any) -> Any:
"""Run when tool ends running.""" """Run when tool ends running."""
@ -66,7 +62,7 @@ class AsyncStreamingLLMCallbackHandler(AsyncCallbackHandler):
try: try:
# This is to emulate the stream of tokens # This is to emulate the stream of tokens
for resp in resps: for resp in resps:
await self.websocket.send_json(resp.dict()) await self.websocket.send_json(resp.model_dump())
except Exception as exc: except Exception as exc:
logger.error(f"Error sending response: {exc}") logger.error(f"Error sending response: {exc}")
@ -92,7 +88,7 @@ class AsyncStreamingLLMCallbackHandler(AsyncCallbackHandler):
resp = PromptResponse( resp = PromptResponse(
prompt=text, prompt=text,
) )
await self.websocket.send_json(resp.dict()) await self.websocket.send_json(resp.model_dump())
self.chat_service.chat_history.add_message(self.client_id, resp) self.chat_service.chat_history.add_message(self.client_id, resp)
async def on_agent_action(self, action: AgentAction, **kwargs: Any): async def on_agent_action(self, action: AgentAction, **kwargs: Any):
@ -103,10 +99,10 @@ class AsyncStreamingLLMCallbackHandler(AsyncCallbackHandler):
logs = log.split("\n") logs = log.split("\n")
for log in logs: for log in logs:
resp = ChatResponse(message="", type="stream", intermediate_steps=log) resp = ChatResponse(message="", type="stream", intermediate_steps=log)
await self.websocket.send_json(resp.dict()) await self.websocket.send_json(resp.model_dump())
else: else:
resp = ChatResponse(message="", type="stream", intermediate_steps=log) resp = ChatResponse(message="", type="stream", intermediate_steps=log)
await self.websocket.send_json(resp.dict()) await self.websocket.send_json(resp.model_dump())
async def on_agent_finish(self, finish: AgentFinish, **kwargs: Any) -> Any: async def on_agent_finish(self, finish: AgentFinish, **kwargs: Any) -> Any:
"""Run on agent end.""" """Run on agent end."""
@ -115,7 +111,7 @@ class AsyncStreamingLLMCallbackHandler(AsyncCallbackHandler):
type="stream", type="stream",
intermediate_steps=finish.log, intermediate_steps=finish.log,
) )
await self.websocket.send_json(resp.dict()) await self.websocket.send_json(resp.model_dump())
class StreamingLLMCallbackHandler(BaseCallbackHandler): class StreamingLLMCallbackHandler(BaseCallbackHandler):
@ -130,5 +126,5 @@ class StreamingLLMCallbackHandler(BaseCallbackHandler):
resp = ChatResponse(message=token, type="stream", intermediate_steps="") resp = ChatResponse(message=token, type="stream", intermediate_steps="")
loop = asyncio.get_event_loop() loop = asyncio.get_event_loop()
coroutine = self.websocket.send_json(resp.dict()) coroutine = self.websocket.send_json(resp.model_dump())
asyncio.run_coroutine_threadsafe(coroutine, loop) asyncio.run_coroutine_threadsafe(coroutine, loop)

View file

@ -1,8 +1,8 @@
import ast import ast
import inspect import inspect
import traceback import traceback
from typing import Any, Dict, List, Type, Union
from typing import Dict, Any, List, Type, Union
from fastapi import HTTPException from fastapi import HTTPException
from langflow.interface.custom.schema import CallableCodeDetails, ClassCodeDetails from langflow.interface.custom.schema import CallableCodeDetails, ClassCodeDetails
@ -104,7 +104,7 @@ class CodeParser:
func.args = self.parse_function_args(node) func.args = self.parse_function_args(node)
func.body = self.parse_function_body(node) func.body = self.parse_function_body(node)
return func.dict() return func.model_dump()
def parse_function_args(self, node: ast.FunctionDef) -> List[Dict[str, Any]]: def parse_function_args(self, node: ast.FunctionDef) -> List[Dict[str, Any]]:
""" """
@ -233,7 +233,7 @@ class CodeParser:
else: else:
class_details.methods.append(method) class_details.methods.append(method)
self.data["classes"].append(class_details.dict()) self.data["classes"].append(class_details.model_dump())
def parse_global_vars(self, node: ast.Assign) -> None: def parse_global_vars(self, node: ast.Assign) -> None:
""" """

View file

@ -1,20 +1,20 @@
from collections import defaultdict import asyncio
import uuid import uuid
from collections import defaultdict
from typing import Any, Dict, List
import orjson
from fastapi import WebSocket, status from fastapi import WebSocket, status
from starlette.websockets import WebSocketState
from langflow.api.v1.schemas import ChatMessage, ChatResponse, FileResponse from langflow.api.v1.schemas import ChatMessage, ChatResponse, FileResponse
from langflow.interface.utils import pil_to_base64 from langflow.interface.utils import pil_to_base64
from langflow.services import ServiceType, service_manager
from langflow.services.base import Service from langflow.services.base import Service
from langflow.services.chat.cache import Subject from langflow.services.chat.cache import Subject
from langflow.services.chat.utils import process_graph from langflow.services.chat.utils import process_graph
from loguru import logger from loguru import logger
from starlette.websockets import WebSocketState
from .cache import cache_service from .cache import cache_service
import asyncio
from typing import Any, Dict, List
from langflow.services import service_manager, ServiceType
import orjson
class ChatHistory(Subject): class ChatHistory(Subject):
@ -104,7 +104,7 @@ class ChatService(Service):
async def send_json(self, client_id: str, message: ChatMessage): async def send_json(self, client_id: str, message: ChatMessage):
websocket = self.active_connections[client_id] websocket = self.active_connections[client_id]
await websocket.send_json(message.dict()) await websocket.send_json(message.model_dump())
async def close_connection(self, client_id: str, code: int, reason: str): async def close_connection(self, client_id: str, code: int, reason: str):
if websocket := self.active_connections[client_id]: if websocket := self.active_connections[client_id]:
@ -191,7 +191,7 @@ class ChatService(Service):
try: try:
chat_history = self.chat_history.get_history(client_id) chat_history = self.chat_history.get_history(client_id)
# iterate and make BaseModel into dict # iterate and make BaseModel into dict
chat_history = [chat.dict() for chat in chat_history] chat_history = [chat.model_dump() for chat in chat_history]
await websocket.send_json(chat_history) await websocket.send_json(chat_history)
while True: while True:

View file

@ -205,7 +205,7 @@ class Settings(BaseSettings):
def save_settings_to_yaml(settings: Settings, file_path: str): def save_settings_to_yaml(settings: Settings, file_path: str):
with open(file_path, "w") as f: with open(file_path, "w") as f:
settings_dict = settings.dict() settings_dict = settings.model_dump()
yaml.dump(settings_dict, f) yaml.dump(settings_dict, f)

View file

@ -1,12 +1,13 @@
import contextlib import contextlib
import json import json
import os import os
from typing import Optional, List
from pathlib import Path from pathlib import Path
from typing import List, Optional
import yaml import yaml
from pydantic import validator, model_validator from pydantic import model_validator, validator
from pydantic_settings import BaseSettings from pydantic_settings import BaseSettings
from langflow.utils.logger import logger from langflow.utils.logger import logger
BASE_COMPONENTS_PATH = str(Path(__file__).parent / "components") BASE_COMPONENTS_PATH = str(Path(__file__).parent / "components")
@ -141,7 +142,7 @@ class Settings(BaseSettings):
def save_settings_to_yaml(settings: Settings, file_path: str): def save_settings_to_yaml(settings: Settings, file_path: str):
with open(file_path, "w") as f: with open(file_path, "w") as f:
settings_dict = settings.dict() settings_dict = settings.model_dump()
yaml.dump(settings_dict, f) yaml.dump(settings_dict, f)

View file

@ -60,7 +60,7 @@ class TemplateFieldCreator(BaseModel, ABC):
"""Additional information about the field to be shown in the tooltip. Defaults to an empty string.""" """Additional information about the field to be shown in the tooltip. Defaults to an empty string."""
def to_dict(self): def to_dict(self):
result = self.dict() result = self.model_dump()
# Remove key if it is None # Remove key if it is None
for key in list(result.keys()): for key in list(result.keys()):
if result[key] is None or result[key] == []: if result[key] is None or result[key] == []:

View file

@ -1,15 +1,15 @@
from langflow.core.celery_app import celery_app from typing import TYPE_CHECKING, Any, Dict, Optional
from typing import Any, Dict, Optional
from typing import TYPE_CHECKING
from celery.exceptions import SoftTimeLimitExceeded # type: ignore from celery.exceptions import SoftTimeLimitExceeded # type: ignore
from langflow.core.celery_app import celery_app
from langflow.processing.process import ( from langflow.processing.process import (
Result, Result,
generate_result, generate_result,
process_inputs, process_inputs,
) )
from langflow.services.manager import initialize_session_service
from langflow.services.deps import get_session_service from langflow.services.deps import get_session_service
from langflow.services.manager import initialize_session_service
if TYPE_CHECKING: if TYPE_CHECKING:
from langflow.graph.vertex.base import Vertex from langflow.graph.vertex.base import Vertex
@ -55,4 +55,4 @@ def process_graph_cached_task(
# we need to update the cache with the updated langchain_object # we need to update the cache with the updated langchain_object
session_service.update_session(session_id, (graph, artifacts)) session_service.update_session(session_id, (graph, artifacts))
return Result(result=result, session_id=session_id).dict() return Result(result=result, session_id=session_id).model_dump()

View file

@ -224,7 +224,7 @@ def test_user(client):
username="testuser", username="testuser",
password="testpassword", password="testpassword",
) )
response = client.post("/api/v1/users", json=user_data.dict()) response = client.post("/api/v1/users", json=user_data.model_dump())
assert response.status_code == 201 assert response.status_code == 201
return response.json() return response.json()
@ -269,7 +269,7 @@ def flow(client, json_flow: str, active_user):
user_id=active_user.id, user_id=active_user.id,
description="description", description="description",
) )
flow = Flow(**flow_data.dict()) flow = Flow(**flow_data.model_dump())
with session_getter(get_db_service()) as session: with session_getter(get_db_service()) as session:
session.add(flow) session.add(flow)
session.commit() session.commit()
@ -283,7 +283,7 @@ def added_flow(client, json_flow_with_prompt_and_history, logged_in_headers):
flow = orjson.loads(json_flow_with_prompt_and_history) flow = orjson.loads(json_flow_with_prompt_and_history)
data = flow["data"] data = flow["data"]
flow = FlowCreate(name="Basic Chat", description="description", data=data) flow = FlowCreate(name="Basic Chat", description="description", data=data)
response = client.post("api/v1/flows/", json=flow.dict(), headers=logged_in_headers) response = client.post("api/v1/flows/", json=flow.model_dump(), headers=logged_in_headers)
assert response.status_code == 201 assert response.status_code == 201
assert response.json()["name"] == flow.name assert response.json()["name"] == flow.name
assert response.json()["data"] == flow.data assert response.json()["data"] == flow.data
@ -295,7 +295,7 @@ def added_vector_store(client, json_vector_store, logged_in_headers):
vector_store = orjson.loads(json_vector_store) vector_store = orjson.loads(json_vector_store)
data = vector_store["data"] data = vector_store["data"]
vector_store = FlowCreate(name="Vector Store", description="description", data=data) vector_store = FlowCreate(name="Vector Store", description="description", data=data)
response = client.post("api/v1/flows/", json=vector_store.dict(), headers=logged_in_headers) response = client.post("api/v1/flows/", json=vector_store.model_dump(), headers=logged_in_headers)
assert response.status_code == 201 assert response.status_code == 201
assert response.json()["name"] == vector_store.name assert response.json()["name"] == vector_store.name
assert response.json()["data"] == vector_store.data assert response.json()["data"] == vector_store.data

View file

@ -29,7 +29,7 @@ def test_create_flow(client: TestClient, json_flow: str, active_user, logged_in_
flow = orjson.loads(json_flow) flow = orjson.loads(json_flow)
data = flow["data"] data = flow["data"]
flow = FlowCreate(name="Test Flow", description="description", data=data) flow = FlowCreate(name="Test Flow", description="description", data=data)
response = client.post("api/v1/flows/", json=flow.dict(), headers=logged_in_headers) response = client.post("api/v1/flows/", json=flow.model_dump(), headers=logged_in_headers)
assert response.status_code == 201 assert response.status_code == 201
assert response.json()["name"] == flow.name assert response.json()["name"] == flow.name
assert response.json()["data"] == flow.data assert response.json()["data"] == flow.data
@ -45,13 +45,13 @@ def test_read_flows(client: TestClient, json_flow: str, active_user, logged_in_h
flow_data = orjson.loads(json_flow) flow_data = orjson.loads(json_flow)
data = flow_data["data"] data = flow_data["data"]
flow = FlowCreate(name="Test Flow", description="description", data=data) flow = FlowCreate(name="Test Flow", description="description", data=data)
response = client.post("api/v1/flows/", json=flow.dict(), headers=logged_in_headers) response = client.post("api/v1/flows/", json=flow.model_dump(), headers=logged_in_headers)
assert response.status_code == 201 assert response.status_code == 201
assert response.json()["name"] == flow.name assert response.json()["name"] == flow.name
assert response.json()["data"] == flow.data assert response.json()["data"] == flow.data
flow = FlowCreate(name="Test Flow", description="description", data=data) flow = FlowCreate(name="Test Flow", description="description", data=data)
response = client.post("api/v1/flows/", json=flow.dict(), headers=logged_in_headers) response = client.post("api/v1/flows/", json=flow.model_dump(), headers=logged_in_headers)
assert response.status_code == 201 assert response.status_code == 201
assert response.json()["name"] == flow.name assert response.json()["name"] == flow.name
assert response.json()["data"] == flow.data assert response.json()["data"] == flow.data
@ -65,7 +65,7 @@ def test_read_flow(client: TestClient, json_flow: str, active_user, logged_in_he
flow = orjson.loads(json_flow) flow = orjson.loads(json_flow)
data = flow["data"] data = flow["data"]
flow = FlowCreate(name="Test Flow", description="description", data=data) flow = FlowCreate(name="Test Flow", description="description", data=data)
response = client.post("api/v1/flows/", json=flow.dict(), headers=logged_in_headers) response = client.post("api/v1/flows/", json=flow.model_dump(), headers=logged_in_headers)
flow_id = response.json()["id"] # flow_id should be a UUID but is a string flow_id = response.json()["id"] # flow_id should be a UUID but is a string
# turn it into a UUID # turn it into a UUID
flow_id = UUID(flow_id) flow_id = UUID(flow_id)
@ -81,7 +81,7 @@ def test_update_flow(client: TestClient, json_flow: str, active_user, logged_in_
data = flow["data"] data = flow["data"]
flow = FlowCreate(name="Test Flow", description="description", data=data) flow = FlowCreate(name="Test Flow", description="description", data=data)
response = client.post("api/v1/flows/", json=flow.dict(), headers=logged_in_headers) response = client.post("api/v1/flows/", json=flow.model_dump(), headers=logged_in_headers)
flow_id = response.json()["id"] flow_id = response.json()["id"]
updated_flow = FlowUpdate( updated_flow = FlowUpdate(
@ -89,7 +89,7 @@ def test_update_flow(client: TestClient, json_flow: str, active_user, logged_in_
description="updated description", description="updated description",
data=data, data=data,
) )
response = client.patch(f"api/v1/flows/{flow_id}", json=updated_flow.dict(), headers=logged_in_headers) response = client.patch(f"api/v1/flows/{flow_id}", json=updated_flow.model_dump(), headers=logged_in_headers)
assert response.status_code == 200 assert response.status_code == 200
assert response.json()["name"] == updated_flow.name assert response.json()["name"] == updated_flow.name
@ -101,7 +101,7 @@ def test_delete_flow(client: TestClient, json_flow: str, active_user, logged_in_
flow = orjson.loads(json_flow) flow = orjson.loads(json_flow)
data = flow["data"] data = flow["data"]
flow = FlowCreate(name="Test Flow", description="description", data=data) flow = FlowCreate(name="Test Flow", description="description", data=data)
response = client.post("api/v1/flows/", json=flow.dict(), headers=logged_in_headers) response = client.post("api/v1/flows/", json=flow.model_dump(), headers=logged_in_headers)
flow_id = response.json()["id"] flow_id = response.json()["id"]
response = client.delete(f"api/v1/flows/{flow_id}", headers=logged_in_headers) response = client.delete(f"api/v1/flows/{flow_id}", headers=logged_in_headers)
assert response.status_code == 200 assert response.status_code == 200
@ -119,7 +119,7 @@ def test_create_flows(client: TestClient, session: Session, json_flow: str, logg
] ]
) )
# Make request to endpoint # Make request to endpoint
response = client.post("api/v1/flows/batch/", json=flow_list.dict(), headers=logged_in_headers) response = client.post("api/v1/flows/batch/", json=flow_list.model_dump(), headers=logged_in_headers)
# Check response status code # Check response status code
assert response.status_code == 201 assert response.status_code == 201
# Check response data # Check response data
@ -143,7 +143,7 @@ def test_upload_file(client: TestClient, session: Session, json_flow: str, logge
FlowCreate(name="Flow 2", description="description", data=data), FlowCreate(name="Flow 2", description="description", data=data),
] ]
) )
file_contents = orjson_dumps(flow_list.dict()) file_contents = orjson_dumps(flow_list.model_dump())
response = client.post( response = client.post(
"api/v1/flows/upload/", "api/v1/flows/upload/",
files={"file": ("examples.json", file_contents, "application/json")}, files={"file": ("examples.json", file_contents, "application/json")},
@ -216,11 +216,11 @@ def test_update_flow_idempotency(client: TestClient, json_flow: str, active_user
flow_data = orjson.loads(json_flow) flow_data = orjson.loads(json_flow)
data = flow_data["data"] data = flow_data["data"]
flow_data = FlowCreate(name="Test Flow", description="description", data=data) flow_data = FlowCreate(name="Test Flow", description="description", data=data)
response = client.post("api/v1/flows/", json=flow_data.dict(), headers=logged_in_headers) response = client.post("api/v1/flows/", json=flow_data.model_dump(), headers=logged_in_headers)
flow_id = response.json()["id"] flow_id = response.json()["id"]
updated_flow = FlowCreate(name="Updated Flow", description="description", data=data) updated_flow = FlowCreate(name="Updated Flow", description="description", data=data)
response1 = client.put(f"api/v1/flows/{flow_id}", json=updated_flow.dict(), headers=logged_in_headers) response1 = client.put(f"api/v1/flows/{flow_id}", json=updated_flow.model_dump(), headers=logged_in_headers)
response2 = client.put(f"api/v1/flows/{flow_id}", json=updated_flow.dict(), headers=logged_in_headers) response2 = client.put(f"api/v1/flows/{flow_id}", json=updated_flow.model_dump(), headers=logged_in_headers)
assert response1.json() == response2.json() assert response1.json() == response2.json()

View file

@ -1,11 +1,11 @@
from datetime import datetime from datetime import datetime
from langflow.services.auth.utils import create_super_user, get_password_hash
import pytest
from langflow.services.auth.utils import create_super_user, get_password_hash
from langflow.services.database.models.user import UserUpdate
from langflow.services.database.models.user.user import User from langflow.services.database.models.user.user import User
from langflow.services.database.utils import session_getter from langflow.services.database.utils import session_getter
from langflow.services.deps import get_db_service, get_settings_service from langflow.services.deps import get_db_service, get_settings_service
import pytest
from langflow.services.database.models.user import UserUpdate
@pytest.fixture @pytest.fixture
@ -89,7 +89,7 @@ def test_data_consistency_after_update(client, active_user, logged_in_headers, s
user_id = active_user.id user_id = active_user.id
update_data = UserUpdate(is_active=False) update_data = UserUpdate(is_active=False)
response = client.patch(f"/api/v1/users/{user_id}", json=update_data.dict(), headers=super_user_headers) response = client.patch(f"/api/v1/users/{user_id}", json=update_data.model_dump(), headers=super_user_headers)
assert response.status_code == 200, response.json() assert response.status_code == 200, response.json()
# Fetch the updated user from the database # Fetch the updated user from the database
@ -163,13 +163,13 @@ def test_patch_user(client, active_user, logged_in_headers):
username="newname", username="newname",
) )
response = client.patch(f"/api/v1/users/{user_id}", json=update_data.dict(), headers=logged_in_headers) response = client.patch(f"/api/v1/users/{user_id}", json=update_data.model_dump(), headers=logged_in_headers)
assert response.status_code == 200, response.json() assert response.status_code == 200, response.json()
update_data = UserUpdate( update_data = UserUpdate(
profile_image="new_image", profile_image="new_image",
) )
response = client.patch(f"/api/v1/users/{user_id}", json=update_data.dict(), headers=logged_in_headers) response = client.patch(f"/api/v1/users/{user_id}", json=update_data.model_dump(), headers=logged_in_headers)
assert response.status_code == 200, response.json() assert response.status_code == 200, response.json()
@ -181,7 +181,7 @@ def test_patch_reset_password(client, active_user, logged_in_headers):
response = client.patch( response = client.patch(
f"/api/v1/users/{user_id}/reset-password", f"/api/v1/users/{user_id}/reset-password",
json=update_data.dict(), json=update_data.model_dump(),
headers=logged_in_headers, headers=logged_in_headers,
) )
assert response.status_code == 200, response.json() assert response.status_code == 200, response.json()
@ -197,7 +197,7 @@ def test_patch_user_wrong_id(client, active_user, logged_in_headers):
username="newname", username="newname",
) )
response = client.patch(f"/api/v1/users/{user_id}", json=update_data.dict(), headers=logged_in_headers) response = client.patch(f"/api/v1/users/{user_id}", json=update_data.model_dump(), headers=logged_in_headers)
assert response.status_code == 422, response.json() assert response.status_code == 422, response.json()
assert response.json() == { assert response.json() == {
"detail": [ "detail": [