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
- 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": "
|
|
|
|
|
|
|
| 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.
|
|
|
|
| 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.
|
| 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
|
| 542 |
-
#
|
| 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 |
|