From 7c86f38fb3fa47270acb6a4ed24071ba0ed51b75 Mon Sep 17 00:00:00 2001 From: Gabriel Almeida Date: Thu, 30 Mar 2023 18:09:12 -0300 Subject: [PATCH] fix: settings now can be set from cli --- src/backend/langflow/__main__.py | 14 +++++++++++++- src/backend/langflow/settings.py | 32 +++++++++++++++++++++----------- 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/src/backend/langflow/__main__.py b/src/backend/langflow/__main__.py index ea9386d7f..4171e4da6 100644 --- a/src/backend/langflow/__main__.py +++ b/src/backend/langflow/__main__.py @@ -2,6 +2,7 @@ import logging import multiprocessing import platform from pathlib import Path +from langflow.settings import settings import typer from fastapi.staticfiles import StaticFiles @@ -17,9 +18,20 @@ def get_number_of_workers(workers=None): return workers +def update_settings(config: str): + """Update the settings from a config file.""" + if config: + settings.update_from_yaml(config) + + def serve( - host: str = "127.0.0.1", workers: int = 1, timeout: int = 60, port: int = 7860 + host: str = "127.0.0.1", + workers: int = 1, + timeout: int = 60, + port: int = 7860, + config: str = "config.yaml", ): + update_settings(config) app = create_app() # get the directory of the current file path = Path(__file__).parent diff --git a/src/backend/langflow/settings.py b/src/backend/langflow/settings.py index 2c8d3e8c6..13ce50b2a 100644 --- a/src/backend/langflow/settings.py +++ b/src/backend/langflow/settings.py @@ -2,28 +2,39 @@ import os from typing import List import yaml -from pydantic import BaseSettings, Field, root_validator +from pydantic import BaseSettings, root_validator class Settings(BaseSettings): - chains: List[str] = Field(default=[]) - agents: List[str] = Field(default=[]) - prompts: List[str] = Field(default=[]) - llms: List[str] = Field(default=[]) - tools: List[str] = Field(default=[]) - memories: List[str] = Field(default=[]) - dev: bool = Field(default=False) + chains: List[str] = [] + agents: List[str] = [] + prompts: List[str] = [] + llms: List[str] = [] + tools: List[str] = [] + memories: List[str] = [] + dev: bool = False class Config: validate_assignment = True + extra = "ignore" - @root_validator + @root_validator(allow_reuse=True) def validate_lists(cls, values): for key, value in values.items(): if key != "dev" and not value: values[key] = [] return values + def update_from_yaml(self, file_path: str): + new_settings = load_settings_from_yaml(file_path) + self.chains = new_settings.chains or [] + self.agents = new_settings.agents or [] + self.prompts = new_settings.prompts or [] + self.llms = new_settings.llms or [] + self.tools = new_settings.tools or [] + self.memories = new_settings.memories or [] + self.dev = new_settings.dev or False + def save_settings_to_yaml(settings: Settings, file_path: str): with open(file_path, "w") as f: @@ -41,9 +52,8 @@ def load_settings_from_yaml(file_path: str) -> Settings: with open(file_path, "r") as f: settings_dict = yaml.safe_load(f) - a = Settings.parse_obj(settings_dict) - return a + return Settings(**settings_dict) settings = load_settings_from_yaml("config.yaml")