mirror of https://github.com/OpenSPG/KAG
fix(knext): fix knext project env (#211)
* fix create project * fix create project * fix create project * fix create project
This commit is contained in:
parent
9b11539a42
commit
b415c4d933
|
@ -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()
|
||||||
|
|
|
@ -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()
|
||||||
|
|
Loading…
Reference in New Issue