fix(knext): fix knext project env (#211)

* fix create project

* fix create project

* fix create project

* fix create project
This commit is contained in:
Xinhong Zhang 2025-01-07 14:28:31 +08:00 committed by GitHub
parent 9b11539a42
commit b415c4d933
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 58 additions and 22 deletions

View File

@ -33,6 +33,8 @@ from kag.common.vectorize_model.vectorize_model_config_checker import (
from shutil import copy2 from shutil import copy2
yaml = YAML() yaml = YAML()
yaml.default_flow_style = False
yaml.indent(mapping=2, sequence=4, offset=2)
def _render_template(namespace: str, tmpl: str, **kwargs): def _render_template(namespace: str, tmpl: str, **kwargs):
@ -95,10 +97,10 @@ def _recover_project(prj_path: str):
client = ProjectClient() client = ProjectClient()
project = client.get(namespace=namespace) or client.create( project = client.get(namespace=namespace) or client.create(
name=project_name, desc=desc, namespace=namespace name=project_name, desc=desc, namespace=namespace, config=json.dumps(env.config)
) )
env.config["project"]["id"] = project.id env._config["project"]["id"] = project.id
env.dump() env.dump()
click.secho( click.secho(
@ -117,7 +119,7 @@ def _recover_project(prj_path: str):
@click.option( @click.option(
"--delete_cfg", "--delete_cfg",
help="whether delete your defined .yaml file.", help="whether delete your defined .yaml file.",
default=True, default=False,
hidden=True, hidden=True,
) )
def create_project( def create_project(
@ -147,6 +149,19 @@ def create_project(
tmpl = "default" tmpl = "default"
project_id = None project_id = None
llm_config_checker = LLMConfigChecker()
vectorize_model_config_checker = VectorizeModelConfigChecker()
llm_config = config.get("chat_llm", {})
vectorize_model_config = config.get("vectorizer", {})
try:
llm_config_checker.check(json.dumps(llm_config))
dim = vectorize_model_config_checker.check(json.dumps(vectorize_model_config))
config["vectorizer"]["vector_dimensions"] = dim
except Exception as e:
click.secho(f"Error: {e}", fg="bright_red")
sys.exit()
if host_addr: if host_addr:
client = ProjectClient(host_addr=host_addr) client = ProjectClient(host_addr=host_addr)
project = client.create(name=name, namespace=namespace, config=json.dumps(config)) project = client.create(name=name, namespace=namespace, config=json.dumps(config))
@ -168,6 +183,10 @@ def create_project(
delete_cfg=delete_cfg, delete_cfg=delete_cfg,
) )
current_dir = os.getcwd()
os.chdir(project_dir)
update_project(project_dir)
os.chdir(current_dir)
if delete_cfg and os.path.exists(config_path): if delete_cfg and os.path.exists(config_path):
os.remove(config_path) os.remove(config_path)
@ -193,14 +212,13 @@ def restore_project(host_addr, proj_path):
if not project_wanted: if not project_wanted:
if host_addr: if host_addr:
client = ProjectClient(host_addr=host_addr) client = ProjectClient(host_addr=host_addr)
project = client.create(name=env.name, namespace=env.namespace) project = client.create(name=env.name, namespace=env.namespace, config=json.dumps(env.config))
project_id = project.id project_id = project.id
else: else:
project_id = project_wanted.id project_id = project_wanted.id
# write project id and host addr to kag_config.yaml # write project id and host addr to kag_config.yaml
env._config["project"]["id"] = project_id
env.config["project"]["id"] = project_id env._config["project"]["host_addr"] = host_addr
env.config["project"]["host_addr"] = host_addr
env.dump() env.dump()
if proj_path: if proj_path:
_recover_project(proj_path) _recover_project(proj_path)
@ -220,7 +238,7 @@ def update_project(proj_path):
try: try:
llm_config_checker.check(json.dumps(llm_config)) llm_config_checker.check(json.dumps(llm_config))
dim = vectorize_model_config_checker.check(json.dumps(vectorize_model_config)) dim = vectorize_model_config_checker.check(json.dumps(vectorize_model_config))
env.config["vectorizer"]["vector_dimensions"] = dim env._config["vectorizer"]["vector_dimensions"] = dim
except Exception as e: except Exception as e:
click.secho(f"Error: {e}", fg="bright_red") click.secho(f"Error: {e}", fg="bright_red")
sys.exit() sys.exit()

View File

@ -19,7 +19,8 @@ from pathlib import Path
from typing import Union, Optional from typing import Union, Optional
yaml = YAML() yaml = YAML()
yaml.default_flow_style = False
yaml.indent(mapping=2, sequence=4, offset=2)
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
DEFAULT_HOST_ADDR = "http://127.0.0.1:8887" DEFAULT_HOST_ADDR = "http://127.0.0.1:8887"
@ -42,11 +43,20 @@ class Environment:
@property @property
def config(self): def config(self):
closest_config = self._closest_config()
if not hasattr(self, '_config_path') or self._config_path != closest_config:
self._config_path = closest_config
if self._config is None: if self._config is None:
self._config = self.get_config() self._config = self.get_config()
if self._config != self.get_config():
with open(self.config_path, "w") as f: current_config = self.get_config()
if self._config != current_config:
self._config = current_config
with open(self._config_path, "w") as f:
yaml.dump(self._config, f) yaml.dump(self._config, f)
return self._config return self._config
@property @property
@ -56,7 +66,9 @@ class Environment:
@property @property
def config_path(self): def config_path(self):
return self._closest_config() if not hasattr(self, '_config_path') or self._config_path is None:
self._config_path = self._closest_config()
return self._config_path
@property @property
def project_config(self): def project_config(self):
@ -64,10 +76,13 @@ class Environment:
@property @property
def id(self): def id(self):
if os.getenv("KAG_PROJECT_ID"):
return os.getenv("KAG_PROJECT_ID")
id = self.project_config.get("id", None) id = self.project_config.get("id", None)
if id is None: if id is None:
logger.warning("can not find id in project config")
if os.getenv("KAG_PROJECT_ID",None):
return os.getenv("KAG_PROJECT_ID")
else:
raise Exception( raise Exception(
"project id not restore in spgserver, please restore project first" "project id not restore in spgserver, please restore project first"
) )
@ -124,20 +139,23 @@ class Environment:
prev_path: Optional[Union[str, os.PathLike]] = None, prev_path: Optional[Union[str, os.PathLike]] = None,
) -> str: ) -> str:
""" """
Return the path to the closest .knext.cfg file by traversing the current Return the path to the closest kag_config.yaml file by traversing the current
directory and its parents directory and its parents
""" """
if prev_path is not None and str(path) == str(prev_path): if prev_path is not None and str(path) == str(prev_path):
return "" return ""
path = Path(path).resolve() path = Path(path).resolve()
cfg_file = path / "kag_config.yaml" cfg_files = list(path.glob("*.yaml"))
if cfg_file.exists(): cfg_file = next((f for f in cfg_files if f.name == "kag_config.yaml"), cfg_files[0] if cfg_files else None)
if cfg_file and cfg_file.exists():
return str(cfg_file) return str(cfg_file)
if path.parent == path:
raise FileNotFoundError("No kag_config.yaml file found in current directory or any parent directories")
return self._closest_config(path.parent, path) return self._closest_config(path.parent, path)
def dump(self, path=None, **kwargs): def dump(self, path=None, **kwargs):
with open(path or self.config_path, "w") as f: with open(path or self._config_path, "w") as f:
yaml.dump(self.config, f, **kwargs) yaml.dump(self._config, f)
env = Environment() env = Environment()