Stable state

This commit is contained in:
2026-05-27 22:30:20 -07:00
parent 58f736a5f8
commit 1098bdb2f9
6 changed files with 175 additions and 176 deletions
+29 -41
View File
@@ -79,7 +79,7 @@ class ConfirmationApp(App):
#modal-actions {
height: auto;
margin-top: 1;
align: right;
align: right middle;
}
#edit-input {
@@ -108,17 +108,13 @@ class ConfirmationApp(App):
def __init__(
self,
result: Optional[ExtractionResult] = None,
proposal_queue: Optional[asyncio.Queue] = None,
context_queue: Optional[asyncio.Queue] = None,
query_queue: Optional[asyncio.Queue] = None,
response_queue: Optional[asyncio.Queue] = None,
ui_to_llm_queue: Optional[asyncio.Queue] = None,
llm_to_ui_queue: Optional[asyncio.Queue] = None,
):
super().__init__()
self.result = result
self.proposal_queue = proposal_queue
self.context_queue = context_queue
self.query_queue = query_queue
self.response_queue = response_queue
self.ui_to_llm_queue = ui_to_llm_queue
self.llm_to_ui_queue = llm_to_ui_queue
self.pending_updates: List[Union[LoreUpdate, CharacterStateUpdate]] = []
if result:
@@ -145,12 +141,11 @@ class ConfirmationApp(App):
for i, update in enumerate(self.pending_updates):
self.add_update_to_table(update, i)
if self.proposal_queue:
self.run_worker(self.poll_proposal_queue, thread=False)
if self.context_queue:
self.run_worker(self.poll_context_queue, thread=False)
if self.response_queue:
self.run_worker(self.poll_response_queue, thread=False)
if self.ui_to_llm_queue:
# We don't need a poller for this, just the action_send
pass
if self.llm_to_ui_queue:
self.run_worker(self.poll_llm_updates, thread=False)
self.query_one("#llm-input", Input).focus()
@@ -170,15 +165,18 @@ class ConfirmationApp(App):
change_text += f", Removed: {', '.join(update.status_effects_removed)}"
table.add_row("Char", update.character_name, change_text, key=str(index))
async def poll_proposal_queue(self) -> None:
async def poll_llm_updates(self) -> None:
while True:
try:
result = await self.proposal_queue.get()
self.handle_proposal_result(result)
if hasattr(self.proposal_queue, "task_done"):
self.proposal_queue.task_done()
update = await self.llm_to_ui_queue.get()
display_text = f"Query: {update.query}\nSource: {update.source}\n\n{update.snippet}"
context_list = self.query_one("#context-pane", ListView)
# Insert at the top to show most recent first
context_list.insert(0, ListItem(Static(display_text)))
if hasattr(self.llm_to_ui_queue, "task_done"):
self.llm_to_ui_queue.task_done()
except Exception as e:
self.log(f"Error polling proposal queue: {e}")
self.log(f"Error polling LLM updates: {e}")
def handle_proposal_result(self, result: ExtractionResult) -> None:
table = self.query_one("#pending-facts-table", DataTable)
@@ -188,32 +186,22 @@ class ConfirmationApp(App):
self.add_update_to_table(update, index)
async def poll_context_queue(self) -> None:
while True:
try:
update = await self.context_queue.get()
display_text = f"Query: {update.query}\nSource: {update.source}\n\n{update.snippet}"
context_list = self.query_one("#context-pane", ListView)
context_list.append(ListItem(Static(display_text)))
if hasattr(self.context_queue, "task_done"):
self.context_queue.task_done()
except Exception as e:
self.log(f"Error polling context queue: {e}")
# Obsolete
pass
async def poll_response_queue(self) -> None:
while True:
try:
answer = await self.response_queue.get()
self.notify(answer)
if hasattr(self.response_queue, "task_done"):
self.response_queue.task_done()
except Exception as e:
self.log(f"Error polling response queue: {e}")
# Obsolete
pass
def on_input_submitted(self, event: Input.Submitted) -> None:
if event.input.id == "llm-input":
self.action_send()
def action_send(self) -> None:
input_widget = self.query_one("#llm-input", Input)
text = input_widget.value
if text and self.query_queue:
self.query_queue.put_nowait(text)
if text and self.ui_to_llm_queue:
self.ui_to_llm_queue.put_nowait(text)
input_widget.value = ""
def action_accept(self) -> None: