2024-08-23 13:01:33 -07:00
"""
Copyright 2024 , Zep Software , Inc .
Licensed under the Apache License , Version 2.0 ( the " License " ) ;
you may not use this file except in compliance with the License .
You may obtain a copy of the License at
http : / / www . apache . org / licenses / LICENSE - 2.0
Unless required by applicable law or agreed to in writing , software
distributed under the License is distributed on an " AS IS " BASIS ,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
See the License for the specific language governing permissions and
limitations under the License .
"""
2024-08-23 08:15:44 -07:00
from typing import Any , Protocol , TypedDict
2024-08-22 12:26:13 -07:00
from . models import Message , PromptFunction , PromptVersion
2024-08-20 16:29:19 -04:00
class Prompt ( Protocol ) :
2024-08-23 14:18:45 -04:00
v1 : PromptVersion
2024-08-20 16:29:19 -04:00
class Versions ( TypedDict ) :
2024-08-23 14:18:45 -04:00
v1 : PromptFunction
2024-08-20 16:29:19 -04:00
2024-08-23 08:15:44 -07:00
def v1 ( context : dict [ str , Any ] ) - > list [ Message ] :
2024-08-23 14:18:45 -04:00
return [
Message (
role = ' system ' ,
content = ' You are an AI assistant that helps determine which relationships in a knowledge graph should be invalidated based solely on explicit contradictions in newer information. ' ,
) ,
Message (
role = ' user ' ,
content = f """
2024-08-22 18:09:44 -04:00
Based on the provided existing edges and new edges with their timestamps , determine which existing relationships , if any , should be invalidated due to contradictions or updates in the new edges .
2024-08-20 16:29:19 -04:00
Only mark a relationship as invalid if there is clear evidence from new edges that the relationship is no longer true .
2024-08-22 18:09:44 -04:00
Do not invalidate relationships merely because they weren ' t mentioned in new edges. You may use the current episode and previous episodes as well as the facts of each edge to understand the context of the relationships.
Previous Episodes :
{ context [ ' previous_episodes ' ] }
Current Episode :
{ context [ ' current_episode ' ] }
2024-08-20 16:29:19 -04:00
Existing Edges ( sorted by timestamp , newest first ) :
{ context [ ' existing_edges ' ] }
New Edges :
{ context [ ' new_edges ' ] }
2024-08-22 18:09:44 -04:00
Each edge is formatted as : " UUID | SOURCE_NODE - EDGE_NAME - TARGET_NODE (fact: EDGE_FACT), TIMESTAMP) "
2024-08-20 16:29:19 -04:00
For each existing edge that should be invalidated , respond with a JSON object in the following format :
{ {
" invalidated_edges " : [
{ {
" edge_uuid " : " The UUID of the edge to be invalidated (the part before the | character) " ,
2024-08-22 18:09:44 -04:00
" fact " : " Updated fact of the edge "
2024-08-20 16:29:19 -04:00
} }
]
} }
2024-08-22 18:09:44 -04:00
If no relationships need to be invalidated based on these strict criteria , return an empty list for " invalidated_edges " .
2024-08-20 16:29:19 -04:00
""" ,
2024-08-23 14:18:45 -04:00
) ,
]
2024-08-20 16:29:19 -04:00
2024-08-22 13:06:42 -07:00
versions : Versions = { ' v1 ' : v1 }