1010from models .cache_entry import CacheEntry
1111from models .config import SQLiteDatabaseConfiguration
1212from models .responses import ConversationData , ReferencedDocument
13+ from utils .types import ToolCallSummary , ToolResultSummary
1314from log import get_logger
1415from utils .connection_decorator import connection
1516
@@ -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 = """
@@ -228,6 +235,41 @@ 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 "
251+ "conversation %s: %s" ,
252+ conversation_id ,
253+ e ,
254+ )
255+
256+ # Parse tool_results back into ToolResultSummary objects
257+ tool_results_json_str = conversation_entry [8 ]
258+ tool_results_obj = None
259+ if tool_results_json_str :
260+ try :
261+ tool_results_data = json .loads (tool_results_json_str )
262+ tool_results_obj = [
263+ ToolResultSummary .model_validate (tr ) for tr in tool_results_data
264+ ]
265+ except (json .JSONDecodeError , ValueError ) as e :
266+ logger .warning (
267+ "Failed to deserialize tool_results for "
268+ "conversation %s: %s" ,
269+ conversation_id ,
270+ e ,
271+ )
272+
231273 cache_entry = CacheEntry (
232274 query = conversation_entry [0 ],
233275 response = conversation_entry [1 ],
@@ -236,6 +278,8 @@ def get(
236278 started_at = conversation_entry [4 ],
237279 completed_at = conversation_entry [5 ],
238280 referenced_documents = docs_obj ,
281+ tool_calls = tool_calls_obj ,
282+ tool_results = tool_results_obj ,
239283 )
240284 result .append (cache_entry )
241285
@@ -281,6 +325,36 @@ def insert_or_append(
281325 e ,
282326 )
283327
328+ tool_calls_json = None
329+ if cache_entry .tool_calls :
330+ try :
331+ tool_calls_as_dicts = [
332+ tc .model_dump (mode = "json" ) for tc in cache_entry .tool_calls
333+ ]
334+ tool_calls_json = json .dumps (tool_calls_as_dicts )
335+ except (TypeError , ValueError ) as e :
336+ logger .warning (
337+ "Failed to serialize tool_calls for "
338+ "conversation %s: %s" ,
339+ conversation_id ,
340+ e ,
341+ )
342+
343+ tool_results_json = None
344+ if cache_entry .tool_results :
345+ try :
346+ tool_results_as_dicts = [
347+ tr .model_dump (mode = "json" ) for tr in cache_entry .tool_results
348+ ]
349+ tool_results_json = json .dumps (tool_results_as_dicts )
350+ except (TypeError , ValueError ) as e :
351+ logger .warning (
352+ "Failed to serialize tool_results for "
353+ "conversation %s: %s" ,
354+ conversation_id ,
355+ e ,
356+ )
357+
284358 cursor .execute (
285359 self .INSERT_CONVERSATION_HISTORY_STATEMENT ,
286360 (
@@ -294,6 +368,8 @@ def insert_or_append(
294368 cache_entry .provider ,
295369 cache_entry .model ,
296370 referenced_documents_json ,
371+ tool_calls_json ,
372+ tool_results_json ,
297373 ),
298374 )
299375
0 commit comments