Tests
import tiktoken
enc = tiktoken.encoding_for_model('gpt-4o-mini')
# Conversation courte qui tient dans le budget
msgs_court = [
{'role': 'system', 'content': 'Ok'},
{'role': 'user', 'content': 'Salut'},
]
result = tronquer_conversation(msgs_court, 1000)
assert len(result) == 2, 'Si tout tient dans le budget, on garde tout'
assert result[0]['role'] == 'system', 'Le system doit toujours etre en premier'
# Budget tres petit : juste le system
msgs_long = [
{'role': 'system', 'content': 'Tu es un assistant.'},
{'role': 'user', 'content': 'Un message qui prend beaucoup de tokens pour tester la troncature.'},
{'role': 'assistant', 'content': 'Une réponse également longue pour bien dépasser le budget de tokens.'},
{'role': 'user', 'content': 'Encore un message.'},
]
result2 = tronquer_conversation(msgs_long, 15)
assert result2[0]['role'] == 'system', 'Meme avec un petit budget, le system doit etre la'
# Le message system est toujours garde
result3 = tronquer_conversation(msgs_long, 15)
assert result3[0] == msgs_long[0], 'Le message system doit etre identique a l original'
# Les messages recents sont prioritaires
result4 = tronquer_conversation(msgs_long, 100)
if len(result4) > 1:
assert result4[-1] == msgs_long[-1], 'Le dernier message doit etre le plus recent'
# Liste vide
assert tronquer_conversation([], 100) == [], 'Liste vide doit retourner liste vide'