Skip to content
Open
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
8 changes: 7 additions & 1 deletion ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,13 @@ This document tracks planned improvements and features for Elroy.

## Current Priorities

(No active priorities at this time)
### User Interface
- **System status in live panel** (Issue #475)
- PRD: `prds/system-status-panel.md`
- Expand the "Relevant Context" panel to show system execution info
- Display memory consolidation status and background tasks
- Show counters for messages/memories until next operation
- Configurable toggle for showing system status

## Future Items

Expand Down
53 changes: 30 additions & 23 deletions elroy/cli/chat.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,12 @@
from operator import add

from colorama import init
from rich.live import Live
from rich.table import Table
from sqlmodel import select
from toolz import pipe

from ..cli.ui import print_memory_panel, print_model_selection, print_title_ruler
from ..cli.ui import print_memory_panel, print_model_selection, print_status_panel, print_title_ruler, update_memory_panel
from ..core.async_tasks import schedule_task
from ..core.constants import EXIT, USER
from ..core.ctx import ElroyContext
Expand Down Expand Up @@ -123,31 +125,36 @@ def handle_chat(io: CliIO, enable_greeting: bool, ctx: ElroyContext):
"<Empty user response>",
False,
)
if io.show_memory_panel:
print_memory_panel(io, ctx)

while True:
io.update_completer(
get_active_memories(ctx),
get_active_reminders(ctx),
list(get_context_messages(ctx)),
)

user_input = io.prompt_user(ctx.thread_pool, 3)
if user_input.lower().startswith(f"/{EXIT}") or user_input == EXIT:
break
elif user_input:
process_and_deliver_msg(
io,
USER,
ctx,
user_input,
display = Table()
display.add_column("Memories")

with Live(display, refresh_per_second=4):
update_memory_panel(display, ctx)

while True:
io.update_completer(
get_active_memories(ctx),
get_active_reminders(ctx),
list(get_context_messages(ctx)),
)

if io.show_memory_panel:
io.rule()
print_memory_panel(io, ctx)
schedule_task(refresh_context_if_needed, ctx, replace=True, delay_seconds=5)
user_input = io.prompt_user(ctx.thread_pool, 3)
if user_input.lower().startswith(f"/{EXIT}") or user_input == EXIT:
break
elif user_input:
process_and_deliver_msg(
io,
USER,
ctx,
user_input,
)

if io.show_memory_panel:
io.rule()
print_memory_panel(io, ctx)
print_status_panel(io, ctx)
schedule_task(refresh_context_if_needed, ctx, replace=True, delay_seconds=5)


@tracer.agent
Expand Down
26 changes: 26 additions & 0 deletions elroy/cli/ui.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from rich.table import Table
from rich.text import Text
from toolz import pipe
from toolz.curried import map

from ..core.ctx import ElroyContext
from ..core.logging import get_logger
Expand All @@ -8,6 +10,20 @@
logger = get_logger()


def update_memory_panel(table: Table, ctx: ElroyContext) -> None:
from ..repository.context_messages.queries import get_context_messages
from ..repository.memories.queries import get_in_context_memories_metadata

table.rows = []
pipe(
get_context_messages(ctx),
get_in_context_memories_metadata,
lambda x: x if len(x) > 10 else x[:10] + [f"... {len(x) - 10} more"],
map(table.add_row),
list,
)


def print_memory_panel(io: CliIO, ctx: ElroyContext) -> None:
"""
Fetches memory for printing in UI
Expand All @@ -29,6 +45,16 @@ def print_memory_panel(io: CliIO, ctx: ElroyContext) -> None:
)


def print_status_panel(io: CliIO, ctx: ElroyContext) -> None:
from ..repository.context_messages.queries import get_context_messages

ctx_messages = list(get_context_messages(ctx))
message_count = len(ctx_messages)
memories_count = len(ctx_messages)

io.print_status_panel(message_count, memories_count)


def print_title_ruler(io: CliIO, assistant_name: str):
io.console.rule(
Text(assistant_name, justify="center", style=io.user_input_color),
Expand Down
6 changes: 6 additions & 0 deletions elroy/io/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from prompt_toolkit.lexers import PygmentsLexer
from prompt_toolkit.styles import Style as PTKStyle
from pygments.lexers.special import TextLexer
from rich.columns import Columns
from rich.console import Console
from rich.panel import Panel
from rich.text import Text
Expand Down Expand Up @@ -121,6 +122,11 @@ def print_memory_panel(self, titles: Iterable[str]):
panel = Panel("\n".join(display_titles), title="Relevant Context", expand=False, border_style=self.user_input_color)
self.console.print(panel)

def print_status_panel(self, message_count: int, memories_count: int) -> None:
cols = Columns(["Messages", str(message_count), "Memories", str(memories_count)])
panel = Panel(cols, title="System status")
self.console.print(panel)

def rule(self):
self.last_output_type = None
self.console.rule(style=self.user_input_color)
Expand Down
Loading