Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
58 changes: 45 additions & 13 deletions app/components/controller/api/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@
from http import HTTPStatus
from pydantic import ValidationError
## Local
from constants import Defaults, DefaultAPIResponseSchema, Names
from constants import Defaults, Names
from logger import logger
from . import service
from .schemas import (
EditSettingsRequest,
GetSettingsResponse, GetVersionDetailsResponse
from models.api_schemas.controller import (
GetVersionDetailsResponse,
GetSettingsResponse, EditSettingsRequest,
GetLLMModelsResponse
)
from models.api_schemas.defaults import DefaultAPIResponse
from . import service


controller_api = FastAPI()
Expand All @@ -25,6 +27,21 @@


# ROUTES
@controller_api.get(
"/version",
response_model=GetVersionDetailsResponse,
description=f"Get the {Names.ACE}'s version data"
)
async def get_version_route() -> dict:
try:
return service.get_version_data()
except ValidationError as error:
logger.error(error)
raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Version data error!")
except Exception as error:
logger.error(error)
raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=Defaults.INTERNAL_SERVER_ERROR_MESSAGE)

@controller_api.get(
"/settings",
response_model=GetSettingsResponse,
Expand All @@ -42,13 +59,13 @@ async def get_settings_route() -> dict:

@controller_api.post(
"/settings",
response_model=DefaultAPIResponseSchema,
response_model=DefaultAPIResponse,
description=f"Edit the {Names.ACE} controller settings data"
)
async def set_settings_route(updated_settings: EditSettingsRequest) -> dict:
try:
service.edit_settings_data(updated_settings=updated_settings.model_dump())
return DefaultAPIResponseSchema(message="Settings data updated successfully!")
return DefaultAPIResponse(message="Settings data updated successfully!")
except ValidationError as error:
logger.error(error)
raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Settings data error!")
Expand All @@ -57,16 +74,31 @@ async def set_settings_route(updated_settings: EditSettingsRequest) -> dict:
raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=Defaults.INTERNAL_SERVER_ERROR_MESSAGE)

@controller_api.get(
"/version",
response_model=GetVersionDetailsResponse,
description=f"Get the {Names.ACE}'s version data"
"/model-provider/model-types",
response_model=dict[str, tuple[str, ...]],
description=f"Get the {Names.ACE} available LLM model types"
)
async def get_version_route() -> dict:
async def get_model_types_route() -> dict[str, tuple[str, ...]]:
try:
return service.get_version_data()
return service.get_model_types()
except ValidationError as error:
logger.error(error)
raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Version data error!")
raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="LLM model types data error!")
except Exception as error:
logger.error(error)
raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=Defaults.INTERNAL_SERVER_ERROR_MESSAGE)

@controller_api.get(
"/model-provider/model-type/llm",
response_model=list[GetLLMModelsResponse],
description=f"Get the {Names.ACE} available LLM models"
)
async def get_llm_models_route() -> list[GetLLMModelsResponse]:
try:
return service.get_llm_models()
except ValidationError as error:
logger.error(error)
raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="LLM model types data error!")
except Exception as error:
logger.error(error)
raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=Defaults.INTERNAL_SERVER_ERROR_MESSAGE)
26 changes: 0 additions & 26 deletions app/components/controller/api/schemas.py

This file was deleted.

47 changes: 34 additions & 13 deletions app/components/controller/api/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,37 +2,58 @@
## Built-In
import json
## Local
from constants import DictKeys, Files, ModelProviders
from .schemas import SettingsSchema
from constants import (
DictKeys,
Files,
ModelProviders,
ModelTypes, ThreeDModelTypes, AudioModelTypes, ImageModelTypes, LLMModelTypes, MultiModalModelTypes, RAGModelTypes, RoboticsModelTypes, VideoModelTypes
)
from models.config.controller import ControllerSettingsSchema
from models.data.initial import INTITAL_LLM_MODEL_PROVIDERS


# HELPERS
def _get_settings() -> dict:
settings: dict = {}
with open(Files.CONTROLLER_SETTINGS, "r", encoding="utf-8") as settings_file:
settings = json.loads(settings_file.read())
settings = SettingsSchema(**settings).model_dump()
settings = ControllerSettingsSchema(**settings).model_dump()
with open(Files.CONTROLLER_SETTINGS, "w", encoding="utf-8") as settings_file:
settings_file.write(json.dumps(settings))
return settings


# ROUTES
# GENERAL
def get_version_data() -> dict:
with open(Files.VERSION, "r", encoding="utf-8") as settings_file:
return json.loads(settings_file.read())

def get_settings_data() -> dict:
return _get_settings()

def edit_settings_data(updated_settings: dict):
settings: dict = _get_settings()
new_model_provider: str | None = updated_settings.get(DictKeys.MODEL_PROVIDER)
if new_model_provider:
available_model_providers: dict = ModelProviders.get_frozenset()
if new_model_provider not in available_model_providers:
raise ValueError(f"Invalid model provider: {new_model_provider}")
settings.update(updated_settings)
with open(Files.CONTROLLER_SETTINGS, "w", encoding="utf-8") as settings_file:
settings_file.write(json.dumps(settings))

def get_version_data() -> dict:
with open(Files.VERSION, "r", encoding="utf-8") as settings_file:
return json.loads(settings_file.read())

# MODEL PROVIDERS
## Model Types
def get_model_types() -> dict[str, tuple[str, ...]]:
return {
ModelTypes.THREE_D: ThreeDModelTypes.get_tuple(),
ModelTypes.AUDIO: AudioModelTypes.get_tuple(),
ModelTypes.IMAGE: ImageModelTypes.get_tuple(),
ModelTypes.LLM: LLMModelTypes.get_tuple(),
ModelTypes.MULTIMODAL: MultiModalModelTypes.get_tuple(),
ModelTypes.RAG: RAGModelTypes.get_tuple(),
ModelTypes.ROBOTICS: RoboticsModelTypes.get_tuple(),
ModelTypes.VIDEO: VideoModelTypes.get_tuple()
}

def get_llm_models() -> list[dict]:
llm_model_providers: list[dict] = [initial_llm_model_provider.model_dump() for initial_llm_model_provider in INTITAL_LLM_MODEL_PROVIDERS]
with open(Files.CONTROLLER_LLM_MODELS, "r", encoding="utf-8") as llm_models_file:
llm_models: dict = json.loads(llm_models_file.read())
llm_model_providers.extend(llm_models)
return llm_model_providers
5 changes: 5 additions & 0 deletions app/components/ui/src/app/app.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,11 @@ export class AppComponent implements OnInit {
icon: "chat",
route: "chat"
},
{
name: "Model Garden",
icon: "local_florist",
route: "model-garden"
},
{
name: "Settings",
icon: "settings",
Expand Down
2 changes: 2 additions & 0 deletions app/components/ui/src/app/app.routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@ import { Routes } from "@angular/router";
import { HomeComponent } from "./pages/home/home.component";
import { DashboardComponent } from "./pages/dashboard/dashboard.component";
import { ChatComponent } from "./pages/chat/chat.component";
import { ModelGardenComponent } from "./pages/model_garden/model-garden.component";
import { SettingsComponent } from "./pages/settings/settings.component";

export const routes: Routes = [
{ path: "", component: HomeComponent },
{ path: "dashboard", component: DashboardComponent },
{ path: "chat", component: ChatComponent },
{ path: "model-garden", component: ModelGardenComponent },
{ path: "settings", component: SettingsComponent },
];
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<p>MODEL GARDEN PAGE</p>
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { Component } from "@angular/core";

@Component({
selector: "page-model-garden",
imports: [],
templateUrl: "./model-garden.component.html",
styleUrl: "./model-garden.component.scss"
})
export class ModelGardenComponent {}
4 changes: 3 additions & 1 deletion app/constants/__init__.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
from .components import Components
from .container_folders import ContainerFolders
from .defaults import Defaults, DefaultAPIResponseSchema
from .defaults import Defaults
from .dict_keys import DictKeys
from .environment_variables import EnvironmentVariables
from .folders import Folders # Folders need to be created before files!
from .files import Files
from .layer_types import LayerTypes
from .logger import CustomLogLevels, TERMINAL_COLOR_CODES
from .model_providers import ModelProviders
from .model_types import ModelTypes, ThreeDModelTypes, ImageModelTypes, AudioModelTypes, LLMModelTypes, MultiModalModelTypes, RAGModelTypes, RoboticsModelTypes, VideoModelTypes
from .names import Names
from .network import NetworkPorts
from .shell_commands import ShellCommands
13 changes: 3 additions & 10 deletions app/constants/defaults.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
# DEPENDENCIES
## Third-Party
from pydantic import BaseModel
## Local
from .base_enum import BaseEnum
from .model_providers import ModelProviders


class Defaults(BaseEnum):
Expand All @@ -12,13 +9,9 @@ class Defaults(BaseEnum):
# Layers
ACE_NAME: str = "PrototypeACE"
# Model Provider
MODEL_PROVIDER: str = ModelProviders.OLLAMA
TEMPERATURE: float = 0.2
CREATIVE_TEMPERATURE: float = 0.7
LOGICAL_TEMPERATURE: float = 0.2
OUTPUT_TOKEN_LIMIT: int = 2048
# Logger
TERMINAL_COLOR_CODE: str = "\033[0m" # Default color
SHUTDOWN_MESSAGE: str = "Shutting down logger..."


# SCHEMAS
class DefaultAPIResponseSchema(BaseModel):
message: str
2 changes: 2 additions & 0 deletions app/constants/dict_keys.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@ class DictKeys(BaseEnum):
DEV: str = "dev"
BUILD: str = "build"
FUNCTION_NAME: str = "function_name"
LAYER_SETTINGS: str = "layer_settings"
LEVEL: str = "level"
MESSAGE: str = "message"
MODEL_PROVIDER: str = "model_provider"
MODEL_PROVIDER_SETTINGS: str = "model_provider_settings"
PROD: str = "prod"
REBUILD_DATE: str = "rebuild_date"
RESTART: str = "restart"
Expand Down
24 changes: 17 additions & 7 deletions app/constants/files.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,28 @@ class Files(BaseEnum):
VERSION: str = "version"
# Storage
CONTROLLER_SETTINGS: str = f"{Folders.CONTROLLER_STORAGE}.settings"
CONTROLLER_THREE_D_MODELS: str = f"{Folders.CONTROLLER_MODEL_TYPES}.three_d_models"
CONTROLLER_AUDIO_MODELS: str = f"{Folders.CONTROLLER_MODEL_TYPES}.audio_models"
CONTROLLER_IMAGE_MODELS: str = f"{Folders.CONTROLLER_MODEL_TYPES}.image_models"
CONTROLLER_LLM_MODELS: str = f"{Folders.CONTROLLER_MODEL_TYPES}.llm_models"
CONTROLLER_MULTIMODAL_MODELS: str = f"{Folders.CONTROLLER_MODEL_TYPES}.multimodal_models"
CONTROLLER_RAG_MODELS: str = f"{Folders.CONTROLLER_MODEL_TYPES}.rag_models"
CONTROLLER_ROBOTICS_MODELS: str = f"{Folders.CONTROLLER_MODEL_TYPES}.robotics_models"
CONTROLLER_VIDEO_MODELS: str = f"{Folders.CONTROLLER_MODEL_TYPES}.video_models"


# INIT
_ENSURE_JSON_FILES: frozenset[str] = frozenset([
Files.STARTUP_HISTORY,
Files.CONTROLLER_SETTINGS
Files.CONTROLLER_SETTINGS,
Files.CONTROLLER_THREE_D_MODELS,
Files.CONTROLLER_AUDIO_MODELS,
Files.CONTROLLER_IMAGE_MODELS,
Files.CONTROLLER_LLM_MODELS,
Files.CONTROLLER_MULTIMODAL_MODELS,
Files.CONTROLLER_RAG_MODELS,
Files.CONTROLLER_ROBOTICS_MODELS,
Files.CONTROLLER_VIDEO_MODELS
])
def _ensure_json_files():
for file in _ENSURE_JSON_FILES:
Expand Down Expand Up @@ -78,12 +94,6 @@ def _ensure_json_files():
"{{ controller_host_path }}": Folders.CONTROLLER_STORAGE,
"{{ controller_container_path }}": ContainerFolders.CONTROLLER_STORAGE,
"{{ controller_volume }}": f"{Names.ACE}_{Components.CONTROLLER}_{Names.VOLUME}",
"{{ layers_host_path }}": Folders.LAYERS_STORAGE,
"{{ layers_container_path }}": ContainerFolders.LAYERS_STORAGE,
"{{ layers_volume }}": f"{Names.ACE}_layers_{Names.VOLUME}",
"{{ model_provider_host_path }}": Folders.MODEL_PROVIDER_STORAGE,
"{{ model_provider_container_path }}": ContainerFolders.MODEL_PROVIDER_STORAGE,
"{{ model_provider_volume }}": f"{Names.ACE}_{Components.MODEL_PROVIDER}_{Names.VOLUME}",
"{{ output_host_path }}": Folders.OUTPUT_STORAGE,
"{{ output_container_path }}": ContainerFolders.OUTPUT_STORAGE,
"{{ output_volume }}": f"{Names.ACE}_output_{Names.VOLUME}"
Expand Down
6 changes: 2 additions & 4 deletions app/constants/folders.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,7 @@ class Folders(BaseEnum):
STORAGE: str = ".storage/"
_HOST_STORAGE: str = f"{os.getcwd()}/{STORAGE}"
CONTROLLER_STORAGE: str = f"{_HOST_STORAGE}controller/"
LAYERS_STORAGE: str = f"{_HOST_STORAGE}layers/"
MODEL_PROVIDER_STORAGE: str = f"{_HOST_STORAGE}model_provider/"
CONTROLLER_MODEL_TYPES: str = f"{CONTROLLER_STORAGE}model_types/"
OUTPUT_STORAGE: str = f"{_HOST_STORAGE}output/"


Expand All @@ -26,8 +25,7 @@ class Folders(BaseEnum):
Folders.LOGS,
Folders.STORAGE,
Folders.CONTROLLER_STORAGE,
Folders.LAYERS_STORAGE,
Folders.MODEL_PROVIDER_STORAGE,
Folders.CONTROLLER_MODEL_TYPES,
Folders.OUTPUT_STORAGE
)

Expand Down
13 changes: 13 additions & 0 deletions app/constants/layer_types.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# DEPENDENCIES
## Local
from .base_enum import BaseEnum
from .components import Components


class LayerTypes(BaseEnum):
ASPIRATIONAL: str = Components.ASPIRATIONAL
GLOBAL_STRATEGY: str = Components.GLOBAL_STRATEGY
AGENT_MODEL: str = Components.AGENT_MODEL
EXECUTIVE_FUNCTION: str = Components.EXECUTIVE_FUNCTION
COGNITIVE_CONTROL: str = Components.COGNITIVE_CONTROL
TASK_PROSECUTION: str = Components.TASK_PROSECUTION
2 changes: 1 addition & 1 deletion app/constants/model_providers.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

class ModelProviders(BaseEnum):
CLAUDE: str = "claude"
DEEPSEEK: str = "deepsee"
DEEPSEEK: str = "deepseek"
GOOGLE_VERTEX_AI: str = "google_vertex_ai"
GROK: str = "grok"
GROQ: str = "groq"
Expand Down
Loading
Loading