From 887721f062204db912d13109975eee490f35dfd9 Mon Sep 17 00:00:00 2001 From: JasonAlbertEinstien Date: Sun, 17 Aug 2025 15:33:35 +0800 Subject: [PATCH 1/4] config reader --- plexe/cli/README.md | 1 + plexe/cli/__init__.py | 0 plexe/cli/model_config.py | 59 +++++++++++++++++++++++++++++++++++++++ plexe/cli/plexe.json | 13 +++++++++ 4 files changed, 73 insertions(+) create mode 100644 plexe/cli/README.md create mode 100644 plexe/cli/__init__.py create mode 100644 plexe/cli/model_config.py create mode 100644 plexe/cli/plexe.json diff --git a/plexe/cli/README.md b/plexe/cli/README.md new file mode 100644 index 00000000..ec8c962d --- /dev/null +++ b/plexe/cli/README.md @@ -0,0 +1 @@ +# PLEXE CLI \ No newline at end of file diff --git a/plexe/cli/__init__.py b/plexe/cli/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/plexe/cli/model_config.py b/plexe/cli/model_config.py new file mode 100644 index 00000000..1154c30b --- /dev/null +++ b/plexe/cli/model_config.py @@ -0,0 +1,59 @@ +""" + Provides a way to read configurate file instead of hard code. + WARNING: This file has not been intergrated with other files. +""" + +from typing import Dict, List, Type, Optional + +import json +from dataclasses import dataclass, field, fields + + +@dataclass +class ModelProviderJSONConfig: + default_provider: str + orchestrator_provider: Optional[str] + research_provider: Optional[str] + engineer_provider: Optional[str] + ops_provider: Optional[str] + tool_provider: Optional[str] + + +@dataclass +class ModelJSONConfig: + provider: ModelProviderJSONConfig + verbose: bool + distributed: bool + working_dir: Optional[str] + + +class ModelConfigFactory: + + def __init__(self, config_file: str = "./plexe.json"): + try: + data = None + + with open(config_file, "r") as f: + data = json.load(f) + + if not data or len(data) == 0: + raise Exception(f"Config Error: No data in {config_file}") + + # now the data consist of something + model_provider = ModelProviderJSONConfig(**data["provider"]) + + # check model_provider + if model_provider.default_provider == "": + raise Exception("Config Error: Default provider must be provided") + + for field in fields(ModelProviderJSONConfig): + if getattr(model_provider, field.name) == None: + setattr(model_provider, field.name, model_provider.default_provider) + + model_config = ModelJSONConfig( + provider=model_provider, **{k: v for k, v in data.items() if k != "provider"} + ) + + self.model_config = model_config + except Exception as e: + raise Exception(f"Parsing Config Error {e}") diff --git a/plexe/cli/plexe.json b/plexe/cli/plexe.json new file mode 100644 index 00000000..14c7b077 --- /dev/null +++ b/plexe/cli/plexe.json @@ -0,0 +1,13 @@ +{ + "provider": { + "default_provider": "openai/gpt-4o-mini", + "orchestrator_provider": "openai/gpt-4o-mini", + "research_provider": null, + "engineer_provider": "openai/gpt-4o-mini", + "ops_provider": null, + "tool_provider": "openai/gpt-4o-mini" + }, + "verbose": true, + "distributed": false, + "working_dir": "/path/to/dir" +} \ No newline at end of file From 97f30a4387596348375d88ad91837765d03790d2 Mon Sep 17 00:00:00 2001 From: JasonAlbertEinstien Date: Sun, 17 Aug 2025 15:39:07 +0800 Subject: [PATCH 2/4] get model builder --- plexe/cli/model_config.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/plexe/cli/model_config.py b/plexe/cli/model_config.py index 1154c30b..aecff61f 100644 --- a/plexe/cli/model_config.py +++ b/plexe/cli/model_config.py @@ -4,6 +4,8 @@ """ from typing import Dict, List, Type, Optional +from plexe.model_builder import ModelBuilder +from plexe.internal.common.provider import ProviderConfig import json from dataclasses import dataclass, field, fields @@ -57,3 +59,23 @@ def __init__(self, config_file: str = "./plexe.json"): self.model_config = model_config except Exception as e: raise Exception(f"Parsing Config Error {e}") + + def get_model_builder(self) -> ModelBuilder: + + if self.model_config == None: + raise Exception("No config found") + + model_provider = self.model_config.provider + + _provider_config = ProviderConfig( + default_provider=model_provider.default_provider, + orchestrator_provider=model_provider.orchestrator_provider, + research_provider=model_provider.research_provider, + engineer_provider=model_provider.engineer_provider, + ops_provider=model_provider.ops_provider, + tool_provider=model_provider.tool_provider, + ) + + return ModelBuilder( + _provider_config, self.model_config.verbose, self.model_config.distributed, self.model_config.working_dir + ) From 1ab64cbfe4f0c2c2761bb7a0fccb24ee527988ba Mon Sep 17 00:00:00 2001 From: JasonAlbertEinstien Date: Sun, 17 Aug 2025 15:42:09 +0800 Subject: [PATCH 3/4] ci cd fix --- plexe/cli/model_config.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/plexe/cli/model_config.py b/plexe/cli/model_config.py index aecff61f..7cf9d32a 100644 --- a/plexe/cli/model_config.py +++ b/plexe/cli/model_config.py @@ -1,14 +1,14 @@ """ - Provides a way to read configurate file instead of hard code. - WARNING: This file has not been intergrated with other files. +Provides a way to read configurate file instead of hard code. +WARNING: This file has not been intergrated with other files. """ -from typing import Dict, List, Type, Optional +from typing import Optional from plexe.model_builder import ModelBuilder from plexe.internal.common.provider import ProviderConfig import json -from dataclasses import dataclass, field, fields +from dataclasses import dataclass, fields @dataclass @@ -30,7 +30,6 @@ class ModelJSONConfig: class ModelConfigFactory: - def __init__(self, config_file: str = "./plexe.json"): try: data = None @@ -49,7 +48,7 @@ def __init__(self, config_file: str = "./plexe.json"): raise Exception("Config Error: Default provider must be provided") for field in fields(ModelProviderJSONConfig): - if getattr(model_provider, field.name) == None: + if getattr(model_provider, field.name) is None: setattr(model_provider, field.name, model_provider.default_provider) model_config = ModelJSONConfig( @@ -61,8 +60,7 @@ def __init__(self, config_file: str = "./plexe.json"): raise Exception(f"Parsing Config Error {e}") def get_model_builder(self) -> ModelBuilder: - - if self.model_config == None: + if self.model_config is None: raise Exception("No config found") model_provider = self.model_config.provider From 243564b399fc258e60d4b4a6b56c01ba714507fe Mon Sep 17 00:00:00 2001 From: JasonAlbertEinstien Date: Sun, 17 Aug 2025 16:01:23 +0800 Subject: [PATCH 4/4] code-review --- plexe/cli/model_config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexe/cli/model_config.py b/plexe/cli/model_config.py index 7cf9d32a..c1601c22 100644 --- a/plexe/cli/model_config.py +++ b/plexe/cli/model_config.py @@ -37,7 +37,7 @@ def __init__(self, config_file: str = "./plexe.json"): with open(config_file, "r") as f: data = json.load(f) - if not data or len(data) == 0: + if not data: raise Exception(f"Config Error: No data in {config_file}") # now the data consist of something