yangdx commited on
Commit
a056183
·
1 Parent(s): a85f40c

Improve cache logging and add more detailed log messages

Browse files

• Add cache type to log data structure
• Make debug logs more detailed
• Add high-level info logs for cache hits
• Add null check for best_response
• Improve log message readability

Files changed (1) hide show
  1. lightrag/utils.py +15 -6
lightrag/utils.py CHANGED
@@ -416,7 +416,7 @@ async def get_best_cached_response(
416
 
417
  if best_similarity > similarity_threshold:
418
  # If LLM check is enabled and all required parameters are provided
419
- if use_llm_check and llm_func and original_prompt and best_prompt:
420
  compare_prompt = PROMPTS["similarity_check"].format(
421
  original_prompt=original_prompt, cached_prompt=best_prompt
422
  )
@@ -430,7 +430,9 @@ async def get_best_cached_response(
430
  best_similarity = llm_similarity
431
  if best_similarity < similarity_threshold:
432
  log_data = {
433
- "event": "llm_check_cache_rejected",
 
 
434
  "original_question": original_prompt[:100] + "..."
435
  if len(original_prompt) > 100
436
  else original_prompt,
@@ -440,7 +442,8 @@ async def get_best_cached_response(
440
  "similarity_score": round(best_similarity, 4),
441
  "threshold": similarity_threshold,
442
  }
443
- logger.info(json.dumps(log_data, ensure_ascii=False))
 
444
  return None
445
  except Exception as e: # Catch all possible exceptions
446
  logger.warning(f"LLM similarity check failed: {e}")
@@ -451,12 +454,13 @@ async def get_best_cached_response(
451
  )
452
  log_data = {
453
  "event": "cache_hit",
 
454
  "mode": mode,
455
  "similarity": round(best_similarity, 4),
456
  "cache_id": best_cache_id,
457
  "original_prompt": prompt_display,
458
  }
459
- logger.info(json.dumps(log_data, ensure_ascii=False))
460
  return best_response
461
  return None
462
 
@@ -534,19 +538,24 @@ async def handle_cache(
534
  cache_type=cache_type,
535
  )
536
  if best_cached_response is not None:
 
537
  return best_cached_response, None, None, None
538
  else:
 
 
539
  return None, quantized, min_val, max_val
540
 
541
- # For default mode(extract_entities or naive query) or is_embedding_cache_enabled is False
542
- # Use regular cache
543
  if exists_func(hashing_kv, "get_by_mode_and_id"):
544
  mode_cache = await hashing_kv.get_by_mode_and_id(mode, args_hash) or {}
545
  else:
546
  mode_cache = await hashing_kv.get_by_id(mode) or {}
547
  if args_hash in mode_cache:
 
548
  return mode_cache[args_hash]["return"], None, None, None
549
 
 
550
  return None, None, None, None
551
 
552
 
 
416
 
417
  if best_similarity > similarity_threshold:
418
  # If LLM check is enabled and all required parameters are provided
419
+ if use_llm_check and llm_func and original_prompt and best_prompt and best_response is not None:
420
  compare_prompt = PROMPTS["similarity_check"].format(
421
  original_prompt=original_prompt, cached_prompt=best_prompt
422
  )
 
430
  best_similarity = llm_similarity
431
  if best_similarity < similarity_threshold:
432
  log_data = {
433
+ "event": "cache_rejected_by_llm",
434
+ "type": cache_type,
435
+ "mode": mode,
436
  "original_question": original_prompt[:100] + "..."
437
  if len(original_prompt) > 100
438
  else original_prompt,
 
442
  "similarity_score": round(best_similarity, 4),
443
  "threshold": similarity_threshold,
444
  }
445
+ logger.debug(json.dumps(log_data, ensure_ascii=False))
446
+ logger.info(f"Cache rejected by LLM(mode:{mode} tpye:{cache_type})")
447
  return None
448
  except Exception as e: # Catch all possible exceptions
449
  logger.warning(f"LLM similarity check failed: {e}")
 
454
  )
455
  log_data = {
456
  "event": "cache_hit",
457
+ "type": cache_type,
458
  "mode": mode,
459
  "similarity": round(best_similarity, 4),
460
  "cache_id": best_cache_id,
461
  "original_prompt": prompt_display,
462
  }
463
+ logger.debug(json.dumps(log_data, ensure_ascii=False))
464
  return best_response
465
  return None
466
 
 
538
  cache_type=cache_type,
539
  )
540
  if best_cached_response is not None:
541
+ logger.info(f"Embedding cached hit(mode:{mode} type:{cache_type})")
542
  return best_cached_response, None, None, None
543
  else:
544
+ # if caching keyword embedding is enabled, return the quantized embedding for saving it latter
545
+ logger.info(f"Embedding cached missed(mode:{mode} type:{cache_type})")
546
  return None, quantized, min_val, max_val
547
 
548
+ # For default mode or is_embedding_cache_enabled is False, use regular cache
549
+ # default mode is for extract_entities or naive query
550
  if exists_func(hashing_kv, "get_by_mode_and_id"):
551
  mode_cache = await hashing_kv.get_by_mode_and_id(mode, args_hash) or {}
552
  else:
553
  mode_cache = await hashing_kv.get_by_id(mode) or {}
554
  if args_hash in mode_cache:
555
+ logger.info(f"Non-embedding cached hit(mode:{mode} type:{cache_type})")
556
  return mode_cache[args_hash]["return"], None, None, None
557
 
558
+ logger.info(f"Non-embedding cached missed(mode:{mode} type:{cache_type})")
559
  return None, None, None, None
560
 
561