Architecture de la réduction contexte
Architecture uniquement, pas implémenté
This commit is contained in:
@@ -3,11 +3,12 @@ from langgraph.graph import MessagesState
|
||||
from langgraph.prebuilt import ToolNode
|
||||
from langchain.chat_models import init_chat_model
|
||||
from langgraph.graph import START, END
|
||||
from langchain.messages import HumanMessage, AIMessage, SystemMessage
|
||||
from langchain.messages import HumanMessage, AIMessage, SystemMessage, ToolMessage
|
||||
from langgraph.types import interrupt
|
||||
import os
|
||||
import sys
|
||||
from pathlib import Path
|
||||
import json
|
||||
|
||||
from .tools import getTools, getWeeklyReportTools
|
||||
from .state import CustomState
|
||||
@@ -66,6 +67,30 @@ def LLM_central(state: MessagesState):
|
||||
# Appel du LLM
|
||||
return {"messages": [model.invoke(state["messages"])]}
|
||||
|
||||
def context_shortener(state: CustomState):
|
||||
""" Noeud visant à réduire la taille du contexte pour éviter une explosion de la taille de la mémoire court-terme/contexte """
|
||||
raise NotImplementedError('TODO, faut que je le fasse')
|
||||
|
||||
# fonction de routage
|
||||
def should_shorten(state: CustomState)->str:
|
||||
"""
|
||||
Fonction de routage, permet de savoir s'il est temps de résumer la contexte de la conversation
|
||||
|
||||
Args:
|
||||
state (CustomState): Le State actuel
|
||||
|
||||
Returns:
|
||||
str: Faut-il réduire le contexte ?
|
||||
"""
|
||||
TAILLE_CONTEXTE_MAX = 20000 #charactères
|
||||
count = 0
|
||||
for msg in state['messages']: count += len(msg.content) # Compter le nombre total de caractères dans le contexte
|
||||
|
||||
if count < TAILLE_CONTEXTE_MAX:
|
||||
# OK
|
||||
return 'sous la limite'
|
||||
return 'réduire contexte'
|
||||
|
||||
# fonction de routage : Après reponse_question, si le LLM veut appeler un outil, on va au tool_node
|
||||
def should_continue(state: MessagesState):
|
||||
"""
|
||||
@@ -82,21 +107,6 @@ def should_continue(state: MessagesState):
|
||||
return "tools"
|
||||
return "no_tools"
|
||||
|
||||
def task_ended(state: MessagesState):
|
||||
"""
|
||||
Vérifier si l'agent a terminé son cycle, ou s'il faut le relancer
|
||||
"""
|
||||
if isinstance(state, list):
|
||||
ai_message = state[-1]
|
||||
elif messages := state.get("messages", []):
|
||||
ai_message = messages[-1]
|
||||
else:
|
||||
raise ValueError(f"No messages found in input state to tool_edge: {state}")
|
||||
|
||||
if "terminé" in ai_message.content.lower():
|
||||
return END
|
||||
return "continue"
|
||||
|
||||
weekly_report_tools = ToolNode(tools=getWeeklyReportTools())
|
||||
tool_node = ToolNode(tools=getTools())
|
||||
|
||||
@@ -127,8 +137,7 @@ class BasicToolNode: # De mon ancien projet, https://github.com/LJ5O/Assistant/b
|
||||
)
|
||||
return {"messages": outputs}
|
||||
|
||||
# UTILS
|
||||
|
||||
# fonction de routage
|
||||
def is_resumes_reports_already_initialised(state: CustomState)->str:
|
||||
"""Permet de savoirr si les résumés de comptes-rendu ont déjà été générés.
|
||||
S'ils le sont, inutile de recréer ce dossier.
|
||||
|
||||
Reference in New Issue
Block a user