diff --git a/plexe/cli/README.md b/plexe/cli/README.md new file mode 100644 index 0000000..ec8c962 --- /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 0000000..e69de29 diff --git a/plexe/cli/model_config.py b/plexe/cli/model_config.py new file mode 100644 index 0000000..c1601c2 --- /dev/null +++ b/plexe/cli/model_config.py @@ -0,0 +1,79 @@ +""" +Provides a way to read configurate file instead of hard code. +WARNING: This file has not been intergrated with other files. +""" + +from typing import Optional +from plexe.model_builder import ModelBuilder +from plexe.internal.common.provider import ProviderConfig + +import json +from dataclasses import dataclass, 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: + 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) is 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}") + + def get_model_builder(self) -> ModelBuilder: + if self.model_config is 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 + ) diff --git a/plexe/cli/plexe.json b/plexe/cli/plexe.json new file mode 100644 index 0000000..14c7b07 --- /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