Spaces:
Sleeping
Sleeping
File size: 4,704 Bytes
7b6cbbe 5588e5e 7b6cbbe 5588e5e 7b6cbbe |
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 |
import streamlit as st
from openai import OpenAI
import pandas as pd
import json
import time
import re
# Configuration initiale de Streamlit
st.set_page_config(page_title='Évaluation LLM Way2Call', layout='wide')
st.title('Évaluation de la Performance d’un LLM')
# Configuration de la sidebar pour l'entree utilisateur
st.sidebar.header('Configuration de l’Évaluation')
vLLM_endpoint = st.sidebar.text_input('vLLM Endpoint from RunPod')
model_name = st.sidebar.text_input('Nom du Modèle (e.g., gpt-3.5-turbo)')
num_samples = st.sidebar.number_input('Nombre d’Évaluations à Tester', min_value=1, step=1, value=2)
BASE_URL= vLLM_endpoint+"v1"
API_KEY="SOMEHOW"
client = OpenAI(
base_url=BASE_URL,
api_key=API_KEY
)
############ HELPER FUNCTIONS ###################################
#def extract_maitrise_value(text):
# match = re.search(r"Maîtrise:\s*([A-Za-zé]+)", text)
# if match:
# return match.group(1)
#return None
def get_maitrise_value(text):
# Adding the missing closing curly brace
text += '}'
# Using regular expressions to find the value of "Maitrise"
match = re.search(r'"Maitrise":\s*"(.*?)"', text)
# If a match is found, return the value
if match:
return match.group(1)
else:
return "No match found"
def extract_maitrise_value(text):
# Cette fonction prends les deux cas ou
match = re.search(r'"?Maîtrise"?:\s*"?([A-Za-zé\s]+)"?', text)
if match:
return match.group(1)
return None
def extract_maitrise_real_value(json_text):
try:
# Charger le texte JSON en tant qu'objet Python
data = json.loads(json_text)
# Retourner la valeur associée à la clé "Maitrise"
return data.get("Maitrise", None)
except json.JSONDecodeError:
# Gérer les erreurs de décodage JSON si nécessaire
return None
# Charger le dataset
dataset_path = "instruction_dataset.csv"
if st.sidebar.button('Lancer l’Évaluation') and model_name:
dataset = pd.read_csv(dataset_path)
prompts = dataset['Input'].head(num_samples * 14).tolist()
outputs = dataset['Output'].head(num_samples * 14).tolist()
items = dataset['Item'].head(num_samples * 14).tolist()
phone_numbers = dataset['Phone Number'].head(num_samples * 14).tolist()
results = []
# Initialisation de la barre de progression
progress_text = "Operation in progress. Please wait..."
progress_bar = st.progress(0, text=progress_text)
total_evaluations = len(prompts)
for idx, (prompt, output, item, phone_number) in enumerate(zip(prompts, outputs, items, phone_numbers)):
response = client.completions.create(
model=model_name,
prompt=prompt,
max_tokens=1024
#temperature=0
)
generated_text = response.choices[0].text
#maitrise_generated_value = extract_maitrise_value(generated_text)
maitrise_generated_value = get_maitrise_value(generated_text)
maitrise_value = extract_maitrise_real_value(output)
# Déterminer le statut
status = "OK" if maitrise_generated_value == maitrise_value else "KO"
print(generated_text)
results.append({"Item": item, "Note LLM": maitrise_generated_value, "Note Certifiée": maitrise_value, "Status": status, "Phone Number": phone_number})
# Mise à jour de la barre de progression
time.sleep(0.01)
progress_bar.progress((idx + 1) / total_evaluations, text=progress_text)
# Préparation des résultats pour l'affichage
results_df = pd.DataFrame(results)
time.sleep(1)
progress_bar.empty()
# Calculer la performance globale
num_ok = results_df['Status'].value_counts().get('OK', 0)
total_items = num_samples * 14
performance_globale = (num_ok / total_items) * 100
# Afficher la performance globale
st.write('### Performance Globale')
st.write(f'Performance Globale: {performance_globale:.2f}%')
# Calculer la performance par item
performance_par_item = results_df.groupby('Item').apply(lambda x: (x['Status'].value_counts().get('OK', 0) / len(x)) * 100).reset_index(name='Performance')
# Afficher la performance par item
st.write('### Performance Par Item en %')
st.dataframe(performance_par_item)
# Afficher le tableau
st.write('### Résultats des Évaluations')
st.dataframe(results_df)
# Afficher une instruction si les champs nécessaires ne sont pas remplis
if not model_name:
st.error('Veuillez fournir un modele valide') |