- Removed commented-out header styles from styles.base.tcss and styles.tcss. - Added new styles for danger buttons and agent selection views in styles.base.tcss and styles.tcss. - Implemented AgentHomeView to manage agent actions and display metadata. - Created AgentSelectView for selecting agents with a new layout and functionality. - Added CreateAgentView for creating new agents with input validation. - Removed obsolete eval.py and replaced it with evaluation.py. - Developed GameSelectView for selecting games with a dynamic loading interface. - Introduced ModelSelectView for selecting models associated with agents. - Created SelectRunView for managing runs associated with agents. - Added SubmissionView and TrainingView for handling model training and submission processes. - Updated requirements.txt to include pyfiglet for ASCII art rendering.
68 lines
2.6 KiB
Python
68 lines
2.6 KiB
Python
from textual.screen import Screen
|
|
from textual.widgets import Button, Static
|
|
from textual.containers import Vertical
|
|
from agentm.utils.logger import log_with_caller
|
|
from agentm.components.footer import AgentMFooter
|
|
from agentm.theme.palette import get_theme
|
|
from agentm.logic.db_functions import get_models_for_run
|
|
from agentm.views.model_select import ModelSelectView
|
|
from pyfiglet import Figlet
|
|
|
|
palette = get_theme()
|
|
|
|
class AgentHomeView(Screen):
|
|
BINDINGS = [("escape", "app.pop_screen", "Back")]
|
|
|
|
def __init__(self, agent: dict, run: dict):
|
|
super().__init__()
|
|
self.agent_metadata = agent
|
|
self.run_metadata = run
|
|
self.models_exist = False
|
|
|
|
def compose(self):
|
|
f = Figlet(font="ansi_shadow")
|
|
ascii_header = f.renderText(self.agent_metadata["name"])
|
|
|
|
yield Static(f"[{palette.ACCENT}]{ascii_header}[/{palette.ACCENT}]", classes="header", expand=False)
|
|
yield Static(
|
|
f"[b]Agent ID:[/] {self.agent_metadata['id']} | "
|
|
f"[b]Run:[/] {self.run_metadata['name']}",
|
|
classes="subheader",
|
|
expand=False
|
|
)
|
|
|
|
# Buttons - only Eval and Submit may be disabled
|
|
self.train_btn = Button("🚀 Train", id="train_btn", classes="confirm_button")
|
|
self.eval_btn = Button("🎮 Eval", id="eval_btn", classes="confirm_button", disabled=True)
|
|
self.submit_btn = Button("📦 Submit", id="submit_btn", classes="confirm_button", disabled=True)
|
|
|
|
yield Vertical(
|
|
self.train_btn,
|
|
self.eval_btn,
|
|
self.submit_btn,
|
|
id="agent_home_menu",
|
|
classes="centered_layout"
|
|
)
|
|
|
|
yield AgentMFooter(compact=True)
|
|
|
|
async def on_mount(self):
|
|
log_with_caller("info", f"Entered AgentHomeView for agent '{self.agent_metadata['name']}'")
|
|
models = get_models_for_run(self.run_metadata["id"])
|
|
self.models_exist = len(models) > 0
|
|
self.eval_btn.disabled = not self.models_exist
|
|
self.submit_btn.disabled = not self.models_exist
|
|
log_with_caller("debug", f"Found {len(models)} model(s) for run '{self.run_metadata['name']}'")
|
|
|
|
async def on_button_pressed(self, event: Button.Pressed) -> None:
|
|
action = event.button.id.replace("_btn", "") # 'train', 'eval', or 'submit'
|
|
log_with_caller("info", f"{action.title()} selected for run '{self.run_metadata['name']}'")
|
|
|
|
# Always go to model select before action
|
|
await self.app.push_screen(
|
|
ModelSelectView(
|
|
agent_metadata=self.agent_metadata,
|
|
mode=action
|
|
)
|
|
)
|