Spaces:
Sleeping
Sleeping
File size: 5,263 Bytes
b4e5268 8f64959 55a8b20 dd507bb 4f4aca6 b4e5268 c6bf6d7 07c1c70 c6bf6d7 07c1c70 c6bf6d7 6a7d03a 07c1c70 c6bf6d7 1fe0c9e 6a7d03a 07c1c70 b4c9e55 b956157 b4e5268 b4c9e55 c6bf6d7 b4e5268 b4c9e55 b4e5268 c6bf6d7 1fe0c9e b4e5268 0000cad 4f4aca6 b4c9e55 b4e5268 07c1c70 b4e5268 07c1c70 b4c9e55 07c1c70 b4e5268 b4c9e55 b4e5268 6812dc5 07c1c70 d0f636a 3e67ebc 07c1c70 d0f636a 3e67ebc 07c1c70 c6bf6d7 07c1c70 c6bf6d7 07c1c70 c6bf6d7 07c1c70 c6bf6d7 0eec04d c6bf6d7 07c1c70 0eec04d c6bf6d7 07c1c70 e575254 c6bf6d7 |
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 |
import os
import streamlit as st
from langchain_community.vectorstores import FAISS
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_huggingface import HuggingFaceEndpoint
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain, RetrievalQA
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import json
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import json
# Load Google service account credentials from Hugging Face secrets
GOOGLE_SERVICE_ACCOUNT_JSON = st.secrets["GOOGLE_SERVICE_ACCOUNT_JSON"]
# Google Sheets setup
scope = ["https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/drive"]
service_account_info = json.loads(GOOGLE_SERVICE_ACCOUNT_JSON)
creds = ServiceAccountCredentials.from_json_keyfile_dict(service_account_info, scope)
client = gspread.authorize(creds)
sheet = client.open("users feedback").sheet1 # Replace with your Google Sheet name
# Fonction pour enregistrer les retours utilisateur dans Google Sheets
def save_feedback(user_input, bot_response, rating, comment):
feedback = [user_input, bot_response, rating, comment]
sheet.append_row(feedback)
# Connexion API Hugging Face
from huggingface_hub import login
login(token=st.secrets["HF_TOKEN"])
# Initialiser les composants LangChain
db = FAISS.load_local("faiss_index", HuggingFaceEmbeddings(model_name='sentence-transformers/all-MiniLM-L12-v2'), allow_dangerous_deserialization=True)
retriever = db.as_retriever(search_type="mmr", search_kwargs={'k': 1})
prompt_template = """
### [INST]
Instruction: You are a Q&A assistant. Your goal is to answer questions as accurately as possible based on the instructions and context provided without using prior knowledge. You answer in FRENCH.
Analyse carefully the context and provide a direct answer based on the context. If the user says Bonjour or Hello, your only answer will be: Hi! comment puis-je vous aider?
Answer in french only
{context}
Vous devez répondre aux questions en français.
### QUESTION:
{question}
[/INST]
Answer in french only
Vous devez répondre aux questions en français.
"""
repo_id = "mistralai/Mistral-7B-Instruct-v0.3"
mistral_llm = HuggingFaceEndpoint(
repo_id=repo_id, max_length=2048, temperature=0.05, huggingfacehub_api_token=st.secrets["HF_TOKEN"]
)
# Créer le prompt à partir du modèle de prompt
prompt = PromptTemplate(
input_variables=["question"],
template=prompt_template,
)
# Créer la chaîne LLM
llm_chain = LLMChain(llm=mistral_llm, prompt=prompt)
# Créer la chaîne RetrievalQA
qa = RetrievalQA.from_chain_type(
llm=mistral_llm,
chain_type="stuff",
retriever=retriever,
chain_type_kwargs={"prompt": prompt},
)
# Interface Streamlit avec une esthétique améliorée
st.set_page_config(page_title="Alter-IA Chat", page_icon="🤖")
# Définir la fonction pour gérer l'entrée utilisateur et afficher la réponse du chatbot
def chatbot_response(user_input):
response = qa.run(user_input)
return response
# Créer des colonnes pour les logos
col1, col2, col3 = st.columns([2, 3, 2])
with col1:
st.image("Design 3_22.png", width=150, use_column_width=True) # Ajustez le chemin et la taille de l'image selon vos besoins
with col3:
st.image("Altereo logo 2023 original - eau et territoires durables.png", width=150, use_column_width=True) # Ajustez le chemin et la taille de l'image selon vos besoins
# Composants Streamlit
st.markdown("""
<style>
.centered-text {
text-align: center;
}
.centered-orange-text {
text-align: center;
color: darkorange;
}
</style>
""", unsafe_allow_html=True)
# Utiliser les classes CSS pour styliser le texte
st.markdown('<h3 class="centered-text">🤖 AlteriaChat 🤖</h3>', unsafe_allow_html=True)
st.markdown('<p class="centered-orange-text">"Votre Réponse à Chaque Défi Méthodologique"</p>', unsafe_allow_html=True)
# Interface utilisateur avec formulaire
with st.form(key='feedback_form'):
user_input = st.text_input("You:")
submit_button = st.form_submit_button("Ask 📨")
if submit_button:
if user_input.strip() != "":
bot_response = chatbot_response(user_input)
st.markdown("### Bot:")
st.text_area("", value=bot_response, height=600)
# Formulaire de retour d'information
st.markdown("### Rate the response:")
rating = st.slider("Select a rating:", min_value=1, max_value=5, value=1)
st.markdown("### Leave a comment:")
comment = st.text_area("")
# Soumettre les retours d'information
if st.form_submit_button("Submit Feedback"):
if comment.strip() and rating:
save_feedback(user_input, bot_response, rating, comment)
st.success("Thank you for your feedback!")
else:
st.warning("⚠️ Please provide a comment and a rating.")
# Citation motivante en bas de page
st.markdown("---")
st.markdown("La collaboration est la clé du succès. Chaque question trouve sa réponse, chaque défi devient une opportunité.")
|