gc fixups

This commit is contained in:
AI Christianson 2025-03-02 15:18:16 -05:00
parent 2418506d7e
commit 7ec6535eef
3 changed files with 100 additions and 23 deletions

View File

@ -25,31 +25,51 @@ key_fact_repository = KeyFactRepository()
@tool @tool
def delete_key_fact(fact_id: int) -> str: def delete_key_facts(fact_ids: List[int]) -> str:
"""Delete a key fact by its ID. """Delete multiple key facts by their IDs.
Args: Args:
fact_id: The ID of the key fact to delete fact_ids: List of IDs of the key facts to delete
Returns: Returns:
str: Success or failure message str: Success or failure message
""" """
# Get the fact first to display information deleted_facts = []
fact = key_fact_repository.get(fact_id) not_found_facts = []
if fact: failed_facts = []
# Delete the fact
was_deleted = key_fact_repository.delete(fact_id) for fact_id in fact_ids:
if was_deleted: # Get the fact first to display information
success_msg = f"Successfully deleted fact #{fact_id}: {fact.content}" fact = key_fact_repository.get(fact_id)
console.print( if fact:
Panel(Markdown(success_msg), title="Fact Deleted", border_style="green") # Delete the fact
) was_deleted = key_fact_repository.delete(fact_id)
log_work_event(f"Deleted fact {fact_id}.") if was_deleted:
return success_msg deleted_facts.append((fact_id, fact.content))
log_work_event(f"Deleted fact {fact_id}.")
else:
failed_facts.append(fact_id)
else: else:
return f"Failed to delete fact #{fact_id}" not_found_facts.append(fact_id)
else:
return f"Fact #{fact_id} not found" # Prepare result message
result_parts = []
if deleted_facts:
deleted_msg = "Successfully deleted facts:\n" + "\n".join([f"- #{fact_id}: {content}" for fact_id, content in deleted_facts])
result_parts.append(deleted_msg)
console.print(
Panel(Markdown(deleted_msg), title="Facts Deleted", border_style="green")
)
if not_found_facts:
not_found_msg = f"Facts not found: {', '.join([f'#{fact_id}' for fact_id in not_found_facts])}"
result_parts.append(not_found_msg)
if failed_facts:
failed_msg = f"Failed to delete facts: {', '.join([f'#{fact_id}' for fact_id in failed_facts])}"
result_parts.append(failed_msg)
return "\n".join(result_parts)
def run_key_facts_gc_agent() -> None: def run_key_facts_gc_agent() -> None:
@ -81,8 +101,8 @@ def run_key_facts_gc_agent() -> None:
temperature=llm_config.get("temperature") temperature=llm_config.get("temperature")
) )
# Create the agent with the delete_key_fact tool # Create the agent with the delete_key_facts tool
agent = create_agent(model, [delete_key_fact]) agent = create_agent(model, [delete_key_facts])
# Format the prompt with the current facts # Format the prompt with the current facts
prompt = KEY_FACTS_GC_PROMPT.format(key_facts=formatted_facts) prompt = KEY_FACTS_GC_PROMPT.format(key_facts=formatted_facts)
@ -103,8 +123,8 @@ def run_key_facts_gc_agent() -> None:
console.print( console.print(
Panel( Panel(
f"Cleaned key facts: {fact_count}{updated_count}", f"Cleaned key facts: {fact_count}{updated_count}",
title="🗑 GC Complete" title="🗑 GC Complete"
) )
) )
else: else:
console.print(Panel("No key facts to clean.", title="🗑 GC Info")) console.print(Panel("No key facts to clean.", title="🗑 GC Info"))

View File

@ -0,0 +1,51 @@
"""
Key facts cleaner-specific prompts for the AI agent system.
This module contains the prompt for the key facts cleaner agent that is
responsible for evaluating and trimming down the stored key facts to keep
only the most valuable ones, ensuring that the collection remains manageable.
"""
KEY_FACTS_CLEANER_PROMPT = """
You are a Key Facts Cleaner agent responsible for maintaining the knowledge base by pruning less important facts.
<key facts>
{key_facts}
</key facts>
Task:
Your task is to analyze all the key facts in the system and determine which ones should be kept and which ones should be removed.
Guidelines for evaluation:
1. Review all key facts and their IDs
2. Identify which facts are lowest value/most ephemeral based on:
- Relevance to the overall project
- Specificity and actionability of the information
- Long-term value vs. temporary relevance
- Uniqueness of the information (avoid redundancy)
- How fundamental the fact is to understanding the codebase
3. Trim down the collection to keep no more than 20 highest value, longest-lasting facts
4. For each fact you decide to delete, provide a brief explanation of your reasoning
Retention priority (from highest to lowest):
- Core architectural facts about the project structure
- Critical implementation details that affect multiple parts of the system
- Important design patterns and conventions
- API endpoints and interfaces
- Configuration requirements
- Build and deployment information
- Testing approaches
- Low-level implementation details that are easily rediscovered
For facts of similar importance, prefer to keep more recent facts if they supersede older information.
Output:
1. List the IDs of facts to be deleted
2. Provide a brief explanation for each deletion decision
3. Explain your overall approach to selecting which facts to keep
Remember: Your goal is to maintain a concise, high-value knowledge base that preserves essential project understanding while removing ephemeral or less critical information.
DO NOT MENTION, JUSTIFY, OR SAY ANYTHING ABOUT THE FACTS YOU ARE DELETING. JUST DELETE THEM SILENTLY AND EXIT IMMEDIATELY TO CONSERVE RESOURCES.
"""

View File

@ -41,9 +41,15 @@ Retention priority (from highest to lowest):
For facts of similar importance, prefer to keep more recent facts if they supersede older information. For facts of similar importance, prefer to keep more recent facts if they supersede older information.
Output: Output:
1. List the IDs of facts to be deleted 1. List the IDs of facts to be deleted using the delete_key_facts tool with the IDs provided as a list [ids...], NOT as a comma-separated string
2. Provide a brief explanation for each deletion decision 2. Provide a brief explanation for each deletion decision
3. Explain your overall approach to selecting which facts to keep 3. Explain your overall approach to selecting which facts to keep
IMPORTANT:
- Use the delete_key_facts tool with multiple IDs at once in a single call, rather than making multiple individual deletion calls
- The delete_key_facts tool accepts a list of IDs in the format [id1, id2, id3, ...], not as a comma-separated string
- Batch deletion is much more efficient than calling the deletion function multiple times
- Collect all IDs to delete first, then make a single call to delete_key_facts with the complete list
Remember: Your goal is to maintain a concise, high-value knowledge base that preserves essential project understanding while removing ephemeral or less critical information. Remember: Your goal is to maintain a concise, high-value knowledge base that preserves essential project understanding while removing ephemeral or less critical information.
""" """