Spaces:
Sleeping
Sleeping
File size: 7,121 Bytes
56a3465 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 |
import streamlit as st
from utils.audit.response_llm import generate_response_via_langchain
from textwrap import dedent
import streamlit as st
from langchain_openai import ChatOpenAI
from langchain_mistralai import ChatMistralAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.messages import AIMessage, HumanMessage
#st.set_page_config(page_title="Agents recommandés", page_icon="", layout="wide")
def remove_images_from_content(content):
filtered_content = {}
for page, data in content.items():
# Create a new dictionary excluding the "images" key
filtered_data = {key: value for key, value in data.items() if key != "images"}
filtered_content[page] = filtered_data
return filtered_content
def get_response(user_query, chat_history, db,llm=None,history_limit=10,stream=True):
retriever = db.as_retriever()
context = retriever.invoke(user_query)
template = """
Étant donné l'historique de la conversation : {chat_history}, le contexte qui est le document : {context}, et la question de l'utilisateur : {user_question}, repond comme un expert en agent IA.
Assurez-vous que la réponse soit adaptée au niveau d'expertise de l'utilisateur et aux spécificités du contexte fourni.
"""
prompt = ChatPromptTemplate.from_template(template)
#llm = ChatOpenAI(model="gpt-4o")
if not llm:
llm = ChatOpenAI(model="gpt-4o-mini")
elif llm == "GPT-4o":
llm = ChatOpenAI(model="gpt-4o")
elif llm == "Mistral Large 2 (FR)":
llm = ChatMistralAI(model_name="mistral-large-2407")
elif llm == "GPT-4o-mini":
llm = ChatOpenAI(model="gpt-4o-mini")
elif llm == "Mistral Nemo (FR)":
llm = ChatMistralAI(model_name="open-mistral-nemo-2407")
chain = prompt | llm
if not stream:
return chain.invoke({
"context": context,
"chat_history": chat_history[-history_limit:],
"user_question": user_query,
})
chain = chain | StrOutputParser()
if history_limit:
return chain.stream({
"context": context,
"chat_history": chat_history[-history_limit:],
"user_question": user_query,
})
return chain.stream({
"context": context,
"chat_history": chat_history,
"user_question": user_query,
})
def handle_display_models(index, models_names):
model = st.radio("Choisir un modèle",models_names, index=index)
return model
def recommended_agent_main():
st.title("Agents recommandés")
models_names = ["GPT-4o", "GPT-4o-mini","Mistral Nemo (FR)","Mistral Large 2 (FR)"]
if "chat_history" not in st.session_state:
st.session_state.chat_history = [
]
if "model" not in st.session_state:
st.session_state.model = "GPT-4o-mini"
header = st.container()
col1, col2 = header.columns([1, 2])
with col1.popover("Modèles disponibles"):
new_model = handle_display_models(models_names.index(st.session_state.model), models_names)
st.session_state.model = new_model
st.markdown(f"- **{st.session_state.model}**")
if "audit" not in st.session_state or st.session_state.audit == {}:
st.error("Veuillez d'abord effectuer un audit pour obtenir des recommandations d'agents.")
return
audit = st.session_state.audit_simplified
content = st.session_state.audit["content"]
if "response_llm" not in st.session_state:
st.session_state.response_llm = ""
#filter content, delete images if type is pdf
if audit["type de fichier"] == "pdf":
content = remove_images_from_content(content)
#delete audio if type is audio and keep transcript
elif audit["type de fichier"] == "audio":
content = content["transcription"]
ressources = content
prompt = '''
Tu es designer en intelligence artificielle (IA) spécialisé dans la création d'agents IA autonomes et performants.
A partir de ressources fournies par l'utilisateur (texte, documents, images, audio), tu es chargé de réaliser les tâches suivantes :
A/ Faire un résumé des ressources fournies en 500 caractères maximum
B/ Suggérer la création d'agents autonomes pour mettre en pratique les informations contenues dans les ressources fournies.
Tu proposes deux solutions :
Sol. A : 1 seul agent IA dont tu suggéreras :
* Nom
* Rôle
* Objectifs
* Outils utilisés par l'agent
* Tâches réalisées par l'agents
* Compétences de l'agent (backstory)
Sol. B : 1 équipe d'agents tu suggéreras :
* Le nombre d'agents
* Pour chacune d'eux [Nom, Rôle, Objectifs, Outils utilisés par l'agent, Tâches réalisées par l'agents, Compétences de l'agent (backstory)]
Une fois ce travail réalisé, tu proposes une série de 3 missions avec objectifs SMART pour chacun des agents Sol. A et Sol. B en présentation les résultats dans un tableau contenant :
* Nom de l’agent
* Objectifs à atteindre
'''
#display prompt and modify it
prompt_modified = st.text_area("Prompt par défaut (que vous pouvez modifier, compléter)", prompt, height=300)
prompt_modified = dedent(prompt_modified)
if st.button("Générer les recommandations"):
resource_prompt = f'''Ressources fournies par l'utilisateur :{ressources}'''
prompt_modified = f"{prompt_modified}\n{resource_prompt}"
st.session_state.chat_history = []
with st.chat_message("AI"):
st.session_state.response_llm = st.write_stream(generate_response_via_langchain(query=prompt_modified,stream=True))
st.session_state.chat_history.append(AIMessage(content=st.session_state.response_llm))
elif st.session_state.response_llm:
st.info("la dernière réponse générée est affichée ci-dessous")
with st.chat_message("AI"):
st.write(st.session_state.response_llm)
for message in st.session_state.chat_history[1:]:
if isinstance(message, AIMessage):
with st.chat_message("AI"):
st.markdown(message.content)
elif isinstance(message, HumanMessage):
with st.chat_message("Moi"):
st.write(message.content)
user_query = st.chat_input("Par ici ...")
if user_query is not None and user_query != "":
st.session_state.chat_history.append(HumanMessage(content=user_query))
with st.chat_message("Moi"):
st.markdown(user_query)
with st.chat_message("AI"):
st.markdown(f"**{st.session_state.model}**")
response = st.write_stream(get_response(user_query, st.session_state.chat_history,db=st.session_state.vectorstore, llm=st.session_state.model, stream=True))
st.session_state.chat_history.append(AIMessage(content=response))
recommended_agent_main() |