team3 / app.py
charlie0608's picture
Update app.py
9957766 verified
raw
history blame
No virus
5.25 kB
import streamlit as st
import random
import time
from mistralai.client import MistralClient
from mistralai.models.chat_completion import ChatMessage
api_key = st.secrets["MISTRAL_API_KEY"]
model = "mistral-large-latest"
client = MistralClient(api_key=api_key)
chat_response = client.chat(
model=model,
messages=[ChatMessage(role="user", content="What is the best French cheese?")]
)
# Streamed response emulator
def response_generator():
response = client.chat(
model=model,
messages=[ChatMessage(role="user", content="What is the best French cheese?")]
)
st.title("Personality test")
# Initialize chat history
if "messages" not in st.session_state:
st.session_state.messages = []
# Display chat messages from history on app rerun
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])
# Accept user input
if prompt := st.chat_input("What is up?"):
# Add user message to chat history
st.session_state.messages.append({"role": "user", "content": prompt})
# Display user message in chat message container
with st.chat_message("user"):
st.markdown(prompt)
# # Display assistant response in chat message container
# with st.chat_message("assistant"):
# response = st.write_stream(response_generator())
# # Add assistant response to chat history
# st.session_state.messages.append({"role": "assistant", "content": response})
with st.chat_message("assistant"):
message_placeholder = st.empty()
full_response = ""
for response in client.chat_stream(
model=model,
messages=st.session_state.History[1:]
):
full_response += (response.choices[0].delta.content or "")
message_placeholder.markdown(full_response + "|")
message_placeholder.markdown(full_response)
st.session_state.History.append(ChatMessage(role="assistant", content=full_response))
st.session_state.messages.append({"role": "assistant", "content": full_response})
# from mistralai.client import MistralClient
# from mistralai.models.chat_completion import ChatMessage
# import streamlit as st
# import json
# import faiss
# import numpy as np
# model = "open-mixtral-8x7b"
# mistral_api_key = st.secrets["MISTRAL_API_KEY"]
# client = MistralClient(api_key=mistral_api_key)
# st.title("Assistant ChatBot")
# def split_chunk(data, chunk_size):
# data_str = [json.dumps(entry) for entry in data]
# chunk_size = chunk_size
# chunks = [data_str[i:i + chunk_size] for i in range(0, len(data_str), chunk_size)]
# print(f"Nb. chunks = {len(chunks)}")
# return chunks
# def get_text_embedding(input):
# embeddings_batch_response = client.embeddings(
# model='mistral-embed',
# input=input
# )
# return embeddings_batch_response.data[0].embedding
# def load_vector_db(text_embedded):
# d = text_embedded.shape[1]
# index = faiss.IndexFlatL2(d)
# index.add(text_embedded)
# return index
# def find_similar_chunk(index, question_embeddings, chunks):
# D, I = index.search(question_embeddings, k=2) # distance, index
# return [chunks[i] for i in I.tolist()[0]]
# def prompt_chat(retrieved_chunk, question):
# return f"""
# Les informations contextuelles sont les suivantes.
# ---------------------
# {retrieved_chunk}
# ---------------------
# Compte tenu des informations contextuelles et sans connaissances préalables,
# réponds en français à la question suivante de manière concise.
# Utilise des listes pour plus de lisibilité.
# Question: {question}
# Réponse:
# """
# # Chargement des données
# if "messages" not in st.session_state:
# st.session_state["messages"] = [{"role": "assistant", "content": "Comment puis-je vous aider?"}]
# st.session_state["History"] = []
# st.session_state.History.append(ChatMessage(role="assitant", content="Comment puis-je vous aider?"))
# for msg in st.session_state.messages:
# st.chat_message(msg["role"]).write(msg["content"])
# if prompt := st.chat_input():
# question_embeddings = np.array([get_text_embedding(prompt)])
# retrieved_chunk = find_similar_chunk(index, question_embeddings, chunks)
# p = prompt_chat(retrieved_chunk=retrieved_chunk, question=prompt)
# st.session_state.messages.append({"role": "user", "content": prompt})
# st.session_state.History.append(ChatMessage(role="user", content=p))
# st.chat_message("user").write(prompt)
# with st.chat_message("assistant"):
# message_placeholder = st.empty()
# full_response = ""
# for response in client.chat_stream(
# model=model,
# messages=st.session_state.History[1:]
# ):
# full_response += (response.choices[0].delta.content or "")
# message_placeholder.markdown(full_response + "|")
# message_placeholder.markdown(full_response)
# st.session_state.History.append(ChatMessage(role="assistant", content=full_response))
# st.session_state.messages.append({"role": "assistant", "content": full_response})