From d0fcdfab014e4b0fa43348ad00df02a3fcdca8bc Mon Sep 17 00:00:00 2001 From: charles Date: Tue, 26 May 2026 21:07:58 -0700 Subject: [PATCH] Improvements --- .gitignore | 2 +- src/__pycache__/__init__.cpython-314.pyc | Bin 142 -> 0 bytes src/llm/__pycache__/__init__.cpython-314.pyc | Bin 146 -> 0 bytes src/llm/__pycache__/models.cpython-314.pyc | Bin 4316 -> 0 bytes src/llm/__pycache__/processor.cpython-314.pyc | Bin 6671 -> 0 bytes src/llm/__pycache__/prompts.cpython-314.pyc | Bin 2462 -> 0 bytes src/llm/processor.py | 72 ++++++++++++------ .../__pycache__/__init__.cpython-314.pyc | Bin 154 -> 0 bytes .../__pycache__/characters.cpython-314.pyc | Bin 4187 -> 0 bytes .../__pycache__/lore.cpython-314.pyc | Bin 2462 -> 0 bytes .../__pycache__/orchestrator.cpython-314.pyc | Bin 7200 -> 0 bytes src/pipeline/orchestrator.py | 69 ++++++++++++++++- src/stt/__pycache__/__init__.cpython-314.pyc | Bin 146 -> 0 bytes src/stt/__pycache__/listener.cpython-314.pyc | Bin 8469 -> 0 bytes .../__pycache__/transcriber.cpython-314.pyc | Bin 2991 -> 0 bytes src/stt/listener.py | 2 +- src/stt/transcriber.py | 2 +- src/ui/__pycache__/__init__.cpython-314.pyc | Bin 145 -> 0 bytes src/ui/__pycache__/cli.cpython-314.pyc | Bin 2760 -> 0 bytes src/ui/__pycache__/tui.cpython-314.pyc | Bin 18000 -> 0 bytes src/ui/tui.py | 7 +- 21 files changed, 121 insertions(+), 33 deletions(-) delete mode 100644 src/__pycache__/__init__.cpython-314.pyc delete mode 100644 src/llm/__pycache__/__init__.cpython-314.pyc delete mode 100644 src/llm/__pycache__/models.cpython-314.pyc delete mode 100644 src/llm/__pycache__/processor.cpython-314.pyc delete mode 100644 src/llm/__pycache__/prompts.cpython-314.pyc delete mode 100644 src/persistence/__pycache__/__init__.cpython-314.pyc delete mode 100644 src/persistence/__pycache__/characters.cpython-314.pyc delete mode 100644 src/persistence/__pycache__/lore.cpython-314.pyc delete mode 100644 src/pipeline/__pycache__/orchestrator.cpython-314.pyc delete mode 100644 src/stt/__pycache__/__init__.cpython-314.pyc delete mode 100644 src/stt/__pycache__/listener.cpython-314.pyc delete mode 100644 src/stt/__pycache__/transcriber.cpython-314.pyc delete mode 100644 src/ui/__pycache__/__init__.cpython-314.pyc delete mode 100644 src/ui/__pycache__/cli.cpython-314.pyc delete mode 100644 src/ui/__pycache__/tui.cpython-314.pyc diff --git a/.gitignore b/.gitignore index 86eb1c0..b824b69 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ artifacts/ -__pycache__ +**/__pycache__/ diff --git a/src/__pycache__/__init__.cpython-314.pyc b/src/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index ba30e24b6914ed2f786555830dfde5f335fae49a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142 zcmdPq_I|p@<2{{|u76rLCWlpPQTZlX-=wL W5i3wX$cADN;}bI@BV!RWkOcqFe`6$&Ol_hli)eN+SRson@|}CTP1$2S(^8+h_q&g}kMDfv z)CaviIfmc=P7Qr&Wf=P>Rl2`ar||j@D74vKW@+%5HDscc?qq#v&7%#YEz+A(F!^V2e7Ityu{x z`Ll!?B2p65tyB!d@?}3GhNV0G(lIP^hn>=_%n0){B5P$u?hX@qOUD*+QSMs6-P_HY zBi!Sya~JVg3iz5C)J-1^XUx*V^^2uhvve(}I4dID3^PY>j%vHINTI&#vbE;z1 z@#Q+qIx6%Y)uDCv0{7gySq&P(eIU#_4_4�Pedylq&_`2-A0KrU+2>!p`8Th9jjv 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 VJ%1*9J|)Sg!aT>p1py`N=U?#@sBHiM diff --git a/src/llm/__pycache__/prompts.cpython-314.pyc b/src/llm/__pycache__/prompts.cpython-314.pyc deleted file mode 100644 index 8d7af04a588e06e0a39e29c2633ebbda265f6ebf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2462 zcmbVO%Wm676qWPngFv$j5ClbW!2*$mN^~AOwP@hjN}|M;1W9Qc1c5LnhawY_!_Ext zutk9WPXDIp(%b$(fc!wuB`H~P+%BqxK+ep)bLO0L@9?{8UpX!Orr%$Gee26s>u-Kp z{kEEi57+SUdu!UVt?8ECnqK<0)wwK6Ogk@BK|)Isw0~=#9*I=ap)gkJwjp6mY^=zv zM~~uTnPHLDA~U{@bK4~?Q+15UBq3GUo(g+@B((4mOxxq}UWf2*@z$k8Es-hqMM6Pr z`~rzpW@uY_ORr1q=aB@2*ic$haQF88cBe}s3n)`rPs>Ce0|Q=SBRywa*u1c$vZN#% zAu8M0Hi!kbDgX-6OC07bT;c%Mc+OKP^D0p3co}CvWO6CqNNw7bA;M4`@_bp*l51%Y zhh3_ev*UZtz5*mmA_%ZsNxn)`tQ5K=rO6a&Ds(K3M^6f4DU1`Qg#lan)_RV(|M@5E z8(Hy!bRsE#mD(eyqiLxC669D#2xWrFSY7zG&@!MvSV5syDb%TV!Qdv&K@(Gfj6}A? z5s~UlD@bfHw*7e0MPgwKLoy7dZ%r5HX4;f4I~ApzBapMLfKbudU&1pP3ctJny z9t`*C$!t9GFw?}vnV%E^i@Hg37i{DSxN5cq>#mJdv5c%sN5Jz2YG0V+jVui*Xu*Pr zj9fmB+a-6+$)e%}L+m5BwvNl$h9N|U^BYgbS*UbcAz+0&}WM^hvZ zD{y^hS_2Xlv80Y(LtHwEZ3GG-VqHl{$>{pd9j{@ePrDU-QehJWI}d~(tx_C5o6RW_ z$FlDbQ4a*dNlUoJ?b9|q%JNei25FcABmm01j&&wvvbsHnAvdG|opT@4O)?&ADwwi_q>4=Pr& zd~%8ri`|@Hy-x!<$`=?yjWXyM@R!^^Rn8t4Nr%P8B)6l-lP07t*+o;b3-luya5Ni_ zx2bh7or{;(P5i$C)-9kxW;T=8UNW_r+}O&L>*$vP4I2XTGuQ@px8vLctxY9uvf03E zj8(spK^-Rn9r3;7tIS8|-;{`tCCJ3f429zJ<&eWXSaB>9m2(?LDGc6M@(jbKV|sUPud)4$EnZgJR;NC<;>-yf zYc3N1<*RdNSgTq?2ThW4q0#*Kvd1?9-&4$lkv@7OfmM7)__zvHHSFs$w-qz5oOh1% z0MQyf5Vt)woojvD^Uct7AI}+eE}h;Sjfb;bJl!A5P|{HwHiB zn%SEV$D@yD{%C#RFQZd$CsL{0;UY|=*~xc;Ea*it$?-L?W3<1MB str: """ Generic method to call the LLM. """ + messages = [ + {"role": "system", "content": system_prompt}, + ] + if context: + messages.append( + { + "role": "system", + "content": f"Context from previous conversation:\n{context}", + } + ) + + messages.append({"role": "user", "content": user_prompt}) + try: response = self.client.chat.completions.create( model=self.model, - messages=[ - {"role": "system", "content": system_prompt}, - {"role": "user", "content": user_prompt}, - ], + messages=messages, response_format=response_format, extra_body={"include_reasoning": False}, ) return response.choices[0].message.content except Exception as e: - print(f"LLM Error: {e}") + logger.error(f"LLM Error: {e}") return "" - def filter_transcript(self, text: str) -> str: + def filter_transcript(self, text: str, context: Optional[str] = None) -> str: """ Stage 1: Raw Transcript -> Filtered Text. """ - result = self._call_llm(NOISE_FILTER_SYSTEM_PROMPT, text) - print(f"LLM Processor (Filter): {text} -> {result}") + result = self._call_llm(NOISE_FILTER_SYSTEM_PROMPT, text, context=context) + logger.info(f"LLM Processor (Filter): {text} -> {result}") return result - def extract_structured_data(self, filtered_text: str) -> ExtractionResult: + def extract_structured_data( + self, filtered_text: str, context: Optional[str] = None + ) -> ExtractionResult: """ Stage 2: Filtered Text -> Structured Data. """ - print(f"LLM Processor (Extract): Calling extraction for: {filtered_text}") + logger.info(f"LLM Processor (Extract): Calling extraction for: {filtered_text}") try: # Using standard chat.completions.create with JSON mode for better compatibility with vLLM - print("LLM Processor (Extract): Sending request to backend...") + logger.info("LLM Processor (Extract): Sending request to backend...") + + messages = [ + {"role": "system", "content": EXTRACTION_SYSTEM_PROMPT}, + ] + if context: + messages.append( + { + "role": "system", + "content": f"Context from previous conversation:\n{context}", + } + ) + messages.append({"role": "user", "content": filtered_text}) + response = self.client.chat.completions.create( model=self.model, - messages=[ - {"role": "system", "content": EXTRACTION_SYSTEM_PROMPT}, - {"role": "user", "content": filtered_text}, - ], + messages=messages, response_format={"type": "json_object"}, extra_body={"include_reasoning": False}, ) - print("LLM Processor (Extract): Response received from backend.") + logger.info("LLM Processor (Extract): Response received from backend.") import json content = response.choices[0].message.content - print(f"LLM Processor (Extract): Raw JSON response: {content}") + logger.info(f"LLM Processor (Extract): Raw JSON response: {content}") data = json.loads(content) # Map the JSON data to the Pydantic model return ExtractionResult(**data) except Exception as e: - print(f"Extraction Error: {e}") + logger.error(f"Extraction Error: {e}") # Return an empty ExtractionResult if parsing fails return ExtractionResult() - def process_pipeline(self, raw_text: str) -> ExtractionResult: + def process_pipeline( + self, raw_text: str, context: Optional[str] = None + ) -> ExtractionResult: """ Executes the two-stage pipeline: Raw Transcript -> Filtered Text -> Structured Data. """ - filtered_text = self.filter_transcript(raw_text) + filtered_text = self.filter_transcript(raw_text, context=context) if not filtered_text: return ExtractionResult() - return self.extract_structured_data(filtered_text) + return self.extract_structured_data(filtered_text, context=context) diff --git a/src/persistence/__pycache__/__init__.cpython-314.pyc b/src/persistence/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 4c10d38788c038e1d692f60b6ba2d018a30c8957..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154 zcmdPqlIYq;;_lh cPbtkwwJTx;ngg<_7{vI*%*e=C#0+Es061YI9RL6T diff --git a/src/persistence/__pycache__/characters.cpython-314.pyc b/src/persistence/__pycache__/characters.cpython-314.pyc deleted file mode 100644 index c5d01df7ffa75ddd43ae5064d8daee95eeb71673..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4187 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 diff --git a/src/pipeline/__pycache__/orchestrator.cpython-314.pyc b/src/pipeline/__pycache__/orchestrator.cpython-314.pyc deleted file mode 100644 index 377ff5d1f10894d4e0d74cd0bde5e26f5ab3e8a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7200 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 Text. @@ -61,9 +75,29 @@ class PipelineOrchestrator: logger.info(f"LLM Worker: Processing text: {raw_text}") + # 1. Prepare Context (Conversation History) + # Maintain history and truncate to max words + self.history.append(raw_text) + full_history_text = " ".join(self.history) + words = full_history_text.split() + if len(words) > self.history_max_words: + # Keep the last N words + kept_words = words[-self.history_max_words :] + context_text = " ".join(kept_words) + else: + context_text = full_history_text + + # 2. Prepare Context (Wiki / Database of Knowledge) + wiki_context = self._get_wiki_context() + + # Combine both + combined_context = f"Conversation History:\n{context_text}\n\nWiki Knowledge:\n{wiki_context}" + # Process via LLM (Filter -> Extract) - # Note: this is currently a synchronous call, which blocks the loop. - result = self.processor.process_pipeline(raw_text) + # Run in a separate thread to avoid blocking the event loop + result = await asyncio.to_thread( + self.processor.process_pipeline, raw_text, context=combined_context + ) if ( result.lore_updates @@ -83,6 +117,30 @@ class PipelineOrchestrator: # Small sleep await asyncio.sleep(0.1) + def _get_wiki_context(self) -> str: + """ + Reads all files in the lore directory and returns them as a single context string. + """ + 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"): + 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}" + ) + 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." + ) + async def tui_worker(self): """ Worker that handles TUI: Proposal -> Persistence. @@ -93,8 +151,11 @@ class PipelineOrchestrator: # Pass the proposal queue to the app. app = ConfirmationApp(proposal_queue=self.proposal_queue) await app.run_async() + # Once the TUI exits, stop the entire pipeline + self.stop() except Exception as e: logger.error(f"TUI Worker error: {e}") + self.stop() async def run(self): """ diff --git a/src/stt/__pycache__/__init__.cpython-314.pyc b/src/stt/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index ffdeb6724422971f2fcc4307836b30f8b91a3b45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146 zcmdPqTZlX-=wL W5i3wX$cADN;}bI@BV!RWkOctjlpoaq diff --git a/src/stt/__pycache__/listener.cpython-314.pyc b/src/stt/__pycache__/listener.cpython-314.pyc deleted file mode 100644 index 393e9fd820b8299d21a3f8c8cdac0567f37e145a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8469 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 Yp2qsVnB0k-SW|ygrv>l|bfMz^0MyXTS^xk5 diff --git a/src/stt/listener.py b/src/stt/listener.py index 73defdc..959311d 100644 --- a/src/stt/listener.py +++ b/src/stt/listener.py @@ -5,7 +5,7 @@ import numpy as np import sounddevice as sd import torch -logging.basicConfig(level=logging.INFO) +# Do not call basicConfig here, as it's called in the orchestrator logger = logging.getLogger(__name__) diff --git a/src/stt/transcriber.py b/src/stt/transcriber.py index 188bbe8..18a276b 100644 --- a/src/stt/transcriber.py +++ b/src/stt/transcriber.py @@ -2,7 +2,7 @@ import logging from faster_whisper import WhisperModel -logging.basicConfig(level=logging.INFO) +# Do not call basicConfig here, as it's called in the orchestrator logger = logging.getLogger(__name__) diff --git a/src/ui/__pycache__/__init__.cpython-314.pyc b/src/ui/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 7db42bd149ab40cca0598128e4766747ab8faa19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145 zcmdPq_I|p@<2{{|u76rKg{fpPQ2KczG$)vkyY Us2yZMF^KVrnURsPh#ANN0J?7 diff --git a/src/ui/__pycache__/cli.cpython-314.pyc b/src/ui/__pycache__/cli.cpython-314.pyc deleted file mode 100644 index 164d568d7c3a5be3bb8e8c3c9e20503b33172301..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2760 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 None: """