1010from models .cache_entry import CacheEntry
1111from models .config import SQLiteDatabaseConfiguration
1212from models .responses import ConversationData , ReferencedDocument
13- from log import get_logger
1413from utils .connection_decorator import connection
14+ from utils .types import ToolCallSummary , ToolResultSummary
15+ from log import get_logger
1516
1617logger = get_logger ("cache.sqlite_cache" )
1718
@@ -34,6 +35,8 @@ class SQLiteCache(Cache):
3435 provider | text | |
3536 model | text | |
3637 referenced_documents | text | |
38+ tool_calls | text | |
39+ tool_results | text | |
3740 Indexes:
3841 "cache_pkey" PRIMARY KEY, btree (user_id, conversation_id, created_at)
3942 "cache_key_key" UNIQUE CONSTRAINT, btree (key)
@@ -54,6 +57,8 @@ class SQLiteCache(Cache):
5457 provider text,
5558 model text,
5659 referenced_documents text,
60+ tool_calls text,
61+ tool_results text,
5762 PRIMARY KEY(user_id, conversation_id, created_at)
5863 );
5964 """
@@ -74,16 +79,18 @@ class SQLiteCache(Cache):
7479 """
7580
7681 SELECT_CONVERSATION_HISTORY_STATEMENT = """
77- SELECT query, response, provider, model, started_at, completed_at, referenced_documents
82+ SELECT query, response, provider, model, started_at, completed_at,
83+ referenced_documents, tool_calls, tool_results
7884 FROM cache
7985 WHERE user_id=? AND conversation_id=?
8086 ORDER BY created_at
8187 """
8288
8389 INSERT_CONVERSATION_HISTORY_STATEMENT = """
8490 INSERT INTO cache(user_id, conversation_id, created_at, started_at, completed_at,
85- query, response, provider, model, referenced_documents)
86- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
91+ query, response, provider, model, referenced_documents,
92+ tool_calls, tool_results)
93+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
8794 """
8895
8996 QUERY_CACHE_SIZE = """
@@ -187,7 +194,7 @@ def initialize_cache(self) -> None:
187194 self .connection .commit ()
188195
189196 @connection
190- def get (
197+ def get ( # pylint: disable=R0914
191198 self , user_id : str , conversation_id : str , skip_user_id_check : bool = False
192199 ) -> list [CacheEntry ]:
193200 """Get the value associated with the given key.
@@ -228,6 +235,39 @@ def get(
228235 conversation_id ,
229236 e ,
230237 )
238+
239+ # Parse tool_calls back into ToolCallSummary objects
240+ tool_calls_json_str = conversation_entry [7 ]
241+ tool_calls_obj = None
242+ if tool_calls_json_str :
243+ try :
244+ tool_calls_data = json .loads (tool_calls_json_str )
245+ tool_calls_obj = [
246+ ToolCallSummary .model_validate (tc ) for tc in tool_calls_data
247+ ]
248+ except (json .JSONDecodeError , ValueError ) as e :
249+ logger .warning (
250+ "Failed to deserialize tool_calls for conversation %s: %s" ,
251+ conversation_id ,
252+ e ,
253+ )
254+
255+ # Parse tool_results back into ToolResultSummary objects
256+ tool_results_json_str = conversation_entry [8 ]
257+ tool_results_obj = None
258+ if tool_results_json_str :
259+ try :
260+ tool_results_data = json .loads (tool_results_json_str )
261+ tool_results_obj = [
262+ ToolResultSummary .model_validate (tr ) for tr in tool_results_data
263+ ]
264+ except (json .JSONDecodeError , ValueError ) as e :
265+ logger .warning (
266+ "Failed to deserialize tool_results for conversation %s: %s" ,
267+ conversation_id ,
268+ e ,
269+ )
270+
231271 cache_entry = CacheEntry (
232272 query = conversation_entry [0 ],
233273 response = conversation_entry [1 ],
@@ -236,6 +276,8 @@ def get(
236276 started_at = conversation_entry [4 ],
237277 completed_at = conversation_entry [5 ],
238278 referenced_documents = docs_obj ,
279+ tool_calls = tool_calls_obj ,
280+ tool_results = tool_results_obj ,
239281 )
240282 result .append (cache_entry )
241283
@@ -281,6 +323,34 @@ def insert_or_append(
281323 e ,
282324 )
283325
326+ tool_calls_json = None
327+ if cache_entry .tool_calls :
328+ try :
329+ tool_calls_as_dicts = [
330+ tc .model_dump (mode = "json" ) for tc in cache_entry .tool_calls
331+ ]
332+ tool_calls_json = json .dumps (tool_calls_as_dicts )
333+ except (TypeError , ValueError ) as e :
334+ logger .warning (
335+ "Failed to serialize tool_calls for conversation %s: %s" ,
336+ conversation_id ,
337+ e ,
338+ )
339+
340+ tool_results_json = None
341+ if cache_entry .tool_results :
342+ try :
343+ tool_results_as_dicts = [
344+ tr .model_dump (mode = "json" ) for tr in cache_entry .tool_results
345+ ]
346+ tool_results_json = json .dumps (tool_results_as_dicts )
347+ except (TypeError , ValueError ) as e :
348+ logger .warning (
349+ "Failed to serialize tool_results for conversation %s: %s" ,
350+ conversation_id ,
351+ e ,
352+ )
353+
284354 cursor .execute (
285355 self .INSERT_CONVERSATION_HISTORY_STATEMENT ,
286356 (
@@ -294,6 +364,8 @@ def insert_or_append(
294364 cache_entry .provider ,
295365 cache_entry .model ,
296366 referenced_documents_json ,
367+ tool_calls_json ,
368+ tool_results_json ,
297369 ),
298370 )
299371
0 commit comments