🔨 refactor(endpoints.py): remove unused imports and format code
The imports for `File`, `HTTPException`, `UploadFile`, and `cache_manager` were removed as they were not being used in the code. The code was also formatted to follow PEP8 guidelines. 🔧 chore(base.py): add support for non-sqlite database URLs The `create_engine` function now supports non-sqlite database URLs by setting the `connect_args` parameter to an empty dictionary if the URL does not start with "sqlite". 🔧 chore(flow.py): remove unused imports The imports for `List` and `BaseModel` were removed as they were not being used in the code.
This commit is contained in:
parent
ae0cc86a76
commit
fbfcff74c2
6 changed files with 32 additions and 25 deletions
|
|
@ -18,10 +18,12 @@ def get_number_of_workers(workers=None):
|
||||||
return workers
|
return workers
|
||||||
|
|
||||||
|
|
||||||
def update_settings(config: str, dev: bool = False):
|
def update_settings(config: str, dev: bool = False, database_url: str = None):
|
||||||
"""Update the settings from a config file."""
|
"""Update the settings from a config file."""
|
||||||
if config:
|
if config:
|
||||||
settings.update_from_yaml(config, dev=dev)
|
settings.update_from_yaml(config, dev=dev)
|
||||||
|
if database_url:
|
||||||
|
settings.update_database_url(database_url)
|
||||||
|
|
||||||
|
|
||||||
def serve_on_jcloud():
|
def serve_on_jcloud():
|
||||||
|
|
@ -81,6 +83,10 @@ def serve(
|
||||||
log_file: Path = typer.Option("logs/langflow.log", help="Path to the log file."),
|
log_file: Path = typer.Option("logs/langflow.log", help="Path to the log file."),
|
||||||
jcloud: bool = typer.Option(False, help="Deploy on Jina AI Cloud"),
|
jcloud: bool = typer.Option(False, help="Deploy on Jina AI Cloud"),
|
||||||
dev: bool = typer.Option(False, help="Run in development mode (may contain bugs)"),
|
dev: bool = typer.Option(False, help="Run in development mode (may contain bugs)"),
|
||||||
|
database_url: str = typer.Option(
|
||||||
|
None,
|
||||||
|
help="Database URL to connect to. If not provided, a local SQLite database will be used.",
|
||||||
|
),
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
Run the Langflow server.
|
Run the Langflow server.
|
||||||
|
|
@ -90,7 +96,7 @@ def serve(
|
||||||
return serve_on_jcloud()
|
return serve_on_jcloud()
|
||||||
|
|
||||||
configure(log_level=log_level, log_file=log_file)
|
configure(log_level=log_level, log_file=log_file)
|
||||||
update_settings(config, dev=dev)
|
update_settings(config, dev=dev, database_url=database_url)
|
||||||
app = create_app()
|
app = create_app()
|
||||||
# get the directory of the current file
|
# get the directory of the current file
|
||||||
path = Path(__file__).parent
|
path = Path(__file__).parent
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ from langflow.database.models.flow import Flow
|
||||||
from langflow.utils.logger import logger
|
from langflow.utils.logger import logger
|
||||||
from importlib.metadata import version
|
from importlib.metadata import version
|
||||||
|
|
||||||
from fastapi import APIRouter, Depends, File, HTTPException, UploadFile
|
from fastapi import APIRouter, Depends, HTTPException
|
||||||
|
|
||||||
from langflow.api.schemas import (
|
from langflow.api.schemas import (
|
||||||
GraphData,
|
GraphData,
|
||||||
|
|
@ -12,10 +12,9 @@ from langflow.api.schemas import (
|
||||||
)
|
)
|
||||||
from langflow.interface.run import process_graph_cached
|
from langflow.interface.run import process_graph_cached
|
||||||
from langflow.interface.types import build_langchain_types_dict
|
from langflow.interface.types import build_langchain_types_dict
|
||||||
from langflow.cache import cache_manager
|
|
||||||
from langflow.database.base import get_session
|
from langflow.database.base import get_session
|
||||||
from sqlmodel import Session
|
from sqlmodel import Session
|
||||||
from sqlmodel import select
|
|
||||||
# build router
|
# build router
|
||||||
router = APIRouter(tags=["Base"])
|
router = APIRouter(tags=["Base"])
|
||||||
|
|
||||||
|
|
@ -26,8 +25,11 @@ def get_all():
|
||||||
|
|
||||||
|
|
||||||
@router.post("/predict/{flow_id}", status_code=200, response_model=PredictResponse)
|
@router.post("/predict/{flow_id}", status_code=200, response_model=PredictResponse)
|
||||||
async def get_load(predict_request: PredictRequest, flow_id: str, session: Session= Depends(get_session)):
|
async def get_load(
|
||||||
|
predict_request: PredictRequest,
|
||||||
|
flow_id: str,
|
||||||
|
session: Session = Depends(get_session),
|
||||||
|
):
|
||||||
try:
|
try:
|
||||||
flow_obj = session.get(Flow, flow_id)
|
flow_obj = session.get(Flow, flow_id)
|
||||||
if flow_obj is None:
|
if flow_obj is None:
|
||||||
|
|
@ -35,7 +37,10 @@ async def get_load(predict_request: PredictRequest, flow_id: str, session: Sessi
|
||||||
graph_data: GraphData = json.loads(flow_obj.flow)
|
graph_data: GraphData = json.loads(flow_obj.flow)
|
||||||
data = graph_data.dict()
|
data = graph_data.dict()
|
||||||
response = process_graph_cached(data, predict_request.message)
|
response = process_graph_cached(data, predict_request.message)
|
||||||
return PredictResponse(result=response.get("result", ""), intermediate_steps=response.get("thought", ""))
|
return PredictResponse(
|
||||||
|
result=response.get("result", ""),
|
||||||
|
intermediate_steps=response.get("thought", ""),
|
||||||
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
# Log stack trace
|
# Log stack trace
|
||||||
logger.exception(e)
|
logger.exception(e)
|
||||||
|
|
@ -51,11 +56,3 @@ def get_version():
|
||||||
@router.get("/health")
|
@router.get("/health")
|
||||||
def get_health():
|
def get_health():
|
||||||
return {"status": "OK"}
|
return {"status": "OK"}
|
||||||
|
|
||||||
|
|
||||||
# Make an endpoint to upload a file using the client_id and
|
|
||||||
# cache the file in the backend
|
|
||||||
@router.post("/uploadfile/{client_id}")
|
|
||||||
async def create_upload_file(client_id: str, file: UploadFile = File(...)):
|
|
||||||
|
|
||||||
# TODO: Implement this endpoint
|
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,12 @@
|
||||||
from langflow.settings import settings
|
from langflow.settings import settings
|
||||||
from sqlmodel import SQLModel, Session, create_engine
|
from sqlmodel import SQLModel, Session, create_engine
|
||||||
|
|
||||||
sqlite_file_name = "database.db"
|
|
||||||
sqlite_url = f"sqlite:///{sqlite_file_name}"
|
|
||||||
|
|
||||||
|
if settings.database_url.startswith("sqlite"):
|
||||||
connect_args = {"check_same_thread": False}
|
connect_args = {"check_same_thread": False}
|
||||||
engine = create_engine(sqlite_url, connect_args=connect_args)
|
else:
|
||||||
|
connect_args = {}
|
||||||
|
engine = create_engine(settings.database_url, connect_args=connect_args)
|
||||||
|
|
||||||
|
|
||||||
def create_db_and_tables():
|
def create_db_and_tables():
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
from typing import List
|
|
||||||
from pydantic import BaseModel
|
|
||||||
from sqlmodel import Field, SQLModel
|
from sqlmodel import Field, SQLModel
|
||||||
from uuid import UUID, uuid4
|
from uuid import UUID, uuid4
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,8 @@ from langflow.api.chat import router as chat_router
|
||||||
from langflow.api.endpoints import router as endpoints_router
|
from langflow.api.endpoints import router as endpoints_router
|
||||||
from langflow.api.validate import router as validate_router
|
from langflow.api.validate import router as validate_router
|
||||||
from langflow.api.database import router as database_router
|
from langflow.api.database import router as database_router
|
||||||
from langflow.utils.logger import logger
|
|
||||||
from langflow.database.base import create_db_and_tables
|
from langflow.database.base import create_db_and_tables
|
||||||
from fastapi import APIRouter, HTTPException
|
from fastapi import APIRouter
|
||||||
|
|
||||||
|
|
||||||
# build router
|
# build router
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import os
|
import os
|
||||||
from typing import List
|
from typing import List, Optional
|
||||||
|
|
||||||
import yaml
|
import yaml
|
||||||
from pydantic import BaseSettings, root_validator
|
from pydantic import BaseSettings, root_validator
|
||||||
|
|
@ -20,10 +20,12 @@ class Settings(BaseSettings):
|
||||||
textsplitters: List[str] = []
|
textsplitters: List[str] = []
|
||||||
utilities: List[str] = []
|
utilities: List[str] = []
|
||||||
dev: bool = False
|
dev: bool = False
|
||||||
|
dabatabase_url: str = "sqlite:///./langflow.db"
|
||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
validate_assignment = True
|
validate_assignment = True
|
||||||
extra = "ignore"
|
extra = "ignore"
|
||||||
|
env_prefix = "LANGFLOW_"
|
||||||
|
|
||||||
@root_validator(allow_reuse=True)
|
@root_validator(allow_reuse=True)
|
||||||
def validate_lists(cls, values):
|
def validate_lists(cls, values):
|
||||||
|
|
@ -46,6 +48,10 @@ class Settings(BaseSettings):
|
||||||
self.utilities = new_settings.utilities or []
|
self.utilities = new_settings.utilities or []
|
||||||
self.dev = dev
|
self.dev = dev
|
||||||
|
|
||||||
|
def update_database_url(self, database_url: Optional[str] = None):
|
||||||
|
if database_url:
|
||||||
|
self.database_url = database_url
|
||||||
|
|
||||||
|
|
||||||
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:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue