Files
Mark-X.1/memory/temporary_memory.py
T
2026-02-08 23:15:01 +03:00

137 lines
3.8 KiB
Python

# memory/temporary_memory.py
from typing import Any
class TemporaryMemory:
"""
Temporary runtime memory (session-only).
Resets when program restarts.
Purpose:
- Track multi-step intents
- Keep short conversation context
- Store last actions (search / open_app)
- Support follow-up questions like:
"why did he executed?"
"""
def __init__(self, max_history: int = 5):
self.max_history = max_history
self.reset()
def reset(self):
self.pending_intent: str | None = None
self.parameters: dict[str, Any] = {}
self.current_question: str | None = None
self.last_user_text: str | None = None
self.last_ai_response: str | None = None
# --- Action memory ---
self.last_search: dict | None = None
self.last_opened_app: str | None = None
# --- Conversation ---
self.conversation_history: list[dict[str, str]] = []
def set_pending_intent(self, intent: str):
self.pending_intent = intent
def clear_pending_intent(self):
self.pending_intent = None
self.parameters = {}
self.current_question = None
def has_pending_intent(self) -> bool:
return self.pending_intent is not None
def update_parameters(self, new_params: dict):
if not isinstance(new_params, dict):
return
for k, v in new_params.items():
if v not in (None, ""):
self.parameters[k] = v
def get_parameters(self) -> dict:
return self.parameters.copy()
def get_parameter(self, key: str):
return self.parameters.get(key)
def set_current_question(self, param_name: str):
self.current_question = param_name
def get_current_question(self) -> str | None:
return self.current_question
def clear_current_question(self):
self.current_question = None
def set_last_user_text(self, text: str):
self.last_user_text = text
self._add_to_history("user", text)
def set_last_ai_response(self, text: str):
self.last_ai_response = text
self._add_to_history("ai", text)
def get_last_user_text(self):
return self.last_user_text
def get_last_ai_response(self):
return self.last_ai_response
def set_last_search(self, query: str, answer: str):
self.last_search = {
"query": query,
"answer": answer
}
def get_last_search(self):
return self.last_search
def set_open_app(self, app_name: str):
self.last_opened_app = app_name
def get_last_opened_app(self):
return self.last_opened_app
def _add_to_history(self, role: str, text: str):
if role not in ("user", "ai"):
return
self.conversation_history.append({
"role": role,
"text": text
})
if len(self.conversation_history) > self.max_history:
self.conversation_history.pop(0)
def get_history_for_prompt(self) -> str:
"""
Returns compact history for LLM prompt.
"""
return "\n".join(
f"{m['role'].capitalize()}: {m['text']}"
for m in self.conversation_history
)
def get_context_summary(self) -> dict:
"""
Useful for debugging or smarter LLM prompts.
"""
return {
"pending_intent": self.pending_intent,
"parameters": self.parameters,
"last_search": self.last_search,
"last_opened_app": self.last_opened_app,
"last_user_text": self.last_user_text,
"last_ai_response": self.last_ai_response,
}