Small changes

This commit is contained in:
2026-05-28 22:08:00 -07:00
parent 2363cde160
commit 49127d695a
3 changed files with 42 additions and 45 deletions
+30 -34
View File
@@ -54,6 +54,7 @@ class PipelineOrchestrator:
self.clean_to_llm_queue = asyncio.Queue()
self.llm_to_ui_queue = asyncio.Queue()
self.log_queue = asyncio.Queue()
self.persistence_queue = asyncio.Queue()
self.is_running = False
@@ -186,8 +187,11 @@ class PipelineOrchestrator:
async def feed_ui():
while self.is_running:
try:
text = await self.ui_to_llm_queue.get()
await internal_queue.put(("UI", text))
item = await self.ui_to_llm_queue.get()
if isinstance(item, (LoreUpdate, CharacterStateUpdate)):
await self.persistence_queue.put(item)
else:
await internal_queue.put(("UI", item))
except Exception as e:
logger.error(f"LLM Feeder (UI) error: {e}")
@@ -215,20 +219,8 @@ class PipelineOrchestrator:
context=context,
)
# Persistence: Lore Updates
for lore_update in extraction_result.lore_updates:
file_path = await asyncio.to_thread(update_lore, lore_update)
await asyncio.to_thread(self.rag_manager.ingest_file, file_path)
logger.info(
f"LLM Worker: Lore updated and ingested into RAG: {lore_update.entity_name}"
)
# Persistence: Character State Updates
for char_update in extraction_result.character_updates:
await asyncio.to_thread(update_character_state, char_update)
logger.info(
f"LLM Worker: Character {char_update.character_name} state updated."
)
# Send the entire result to UI for confirmation
await self.llm_to_ui_queue.put(extraction_result)
# UI Notification: Context Updates
for context_update in extraction_result.context_updates:
@@ -245,29 +237,32 @@ class PipelineOrchestrator:
for f in feeders:
f.cancel()
def _get_wiki_context(self) -> str:
async def persistence_worker(self):
"""
Reads all files in the lore directory and returns them as a 저희 context string.
Worker that handles persistence: Confirmed updates -> Disk & RAG.
"""
from src.persistence.lore import DATA_LORE_DIR
wiki_contents = []
# Recursively find all .md files in the lore directory
for path in DATA_LORE_DIR.rglob("*.md"):
logger.info("Persistence Worker started.")
while self.is_running:
try:
with open(path, "r", encoding="utf-8") as f:
content = f.read()
wiki_contents.append(
f"File: {path.relative_to(DATA_LORE_DIR)}\nContent:\n{content}"
update = await self.persistence_queue.get()
if isinstance(update, LoreUpdate):
file_path = await asyncio.to_thread(update_lore, update)
await asyncio.to_thread(self.rag_manager.ingest_file, file_path)
logger.info(
f"Persistence Worker: Lore updated and ingested into RAG: {update.entity_name}"
)
elif isinstance(update, CharacterStateUpdate):
await asyncio.to_thread(update_character_state, update)
logger.info(
f"Persistence Worker: Character {update.character_name} state updated."
)
except Exception as e:
logger.error(f"Error reading wiki file {path}: {e}")
return (
"\n\n".join(wiki_contents)
if wiki_contents
else "No wiki knowledge available."
)
if hasattr(self.persistence_queue, "task_done"):
self.persistence_queue.task_done()
except Exception as e:
logger.error(f"Persistence Worker error: {e}")
await asyncio.sleep(0.1)
async def tui_worker(self):
"""
@@ -308,6 +303,7 @@ class PipelineOrchestrator:
asyncio.create_task(self.stt_worker()),
asyncio.create_task(self.clean_worker()),
asyncio.create_task(self.llm_worker()),
asyncio.create_task(self.persistence_worker()),
asyncio.create_task(self.tui_worker()),
]