From 1f7d54590f6079eda9415b413969f5e54733b28a Mon Sep 17 00:00:00 2001 From: Tyler <68524461+TySP-Dev@users.noreply.github.com> Date: Sun, 17 May 2026 15:44:53 -0400 Subject: [PATCH] Adding conversation memory --- ollama_answers.py | 206 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 190 insertions(+), 16 deletions(-) diff --git a/ollama_answers.py b/ollama_answers.py index 97b170b..9f0b678 100644 --- a/ollama_answers.py +++ b/ollama_answers.py @@ -26,6 +26,7 @@ except ImportError: TOKEN_EXPIRY_SEC = 3600 STREAM_CHUNK_SIZE = 512 STREAM_TIMEOUT_SEC = 60 +CONV_TTL = 1800 def _get_streaming_connection(url: str, verify_ssl: bool = True): parsed = urlparse(url) @@ -116,6 +117,26 @@ def _get_valkey(): return _valkey_mod.Valkey(connection_pool=_get_valkey_pool()) +def _load_conversation(session_id: str) -> list: + try: + v = _get_valkey() + raw = v.get(f"ai:conv:{session_id}") + if raw: + return json.loads(raw) + except Exception as e: + logger.debug(f"{PLUGIN_NAME}: conv load failed: {e}") + return [] + + +def _save_conversation(session_id: str, turns: list) -> None: + try: + v = _get_valkey() + turns = turns[-20:] + v.setex(f"ai:conv:{session_id}", CONV_TTL, json.dumps(turns)) + except Exception as e: + logger.debug(f"{PLUGIN_NAME}: conv save failed: {e}") + + def stream_to_valkey(job_id: str, payload: str, headers: dict, endpoint_url: str, model: str): chunks_key = f"ai:job:{job_id}:chunks" status_key = f"ai:job:{job_id}:status" @@ -370,6 +391,23 @@ INTERACTIVE_CSS = ''' opacity: 1; text-decoration: underline; } + .sxng-prior-history { + margin-bottom: 0.75rem; + padding: 0.5rem; + border-left: 2px solid var(--color-result-link, #5e81ac); + opacity: 0.6; + font-size: 0.85em; + } + .sxng-prior-history summary { + cursor: pointer; + color: var(--color-result-link, #5e81ac); + font-weight: 600; + } + .sxng-prior-answer { + margin: 0.25rem 0; + padding-left: 0.5rem; + color: var(--color-base-font, #cdd6f4); + } ''' INTERACTIVE_HTML = ''' @@ -380,6 +418,9 @@ INTERACTIVE_HTML = ''' +