Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions plexe/cli/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# PLEXE CLI
Empty file added plexe/cli/__init__.py
Empty file.
79 changes: 79 additions & 0 deletions plexe/cli/model_config.py
Original file line number Diff line number Diff line change
@@ -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 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) 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
)
13 changes: 13 additions & 0 deletions plexe/cli/plexe.json
Original file line number Diff line number Diff line change
@@ -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"
}