fra-lupo's picture
Update app.py
795b1f7 verified
Raw
History Blame Contribute Delete
5.17 kB
import streamlit as st
import requests
import pandas as pd
import io
import re
#from io import StringIO
token = st.secrets["HF_TOKEN"]
API_URLGemma = "https://api-inference.huggingface.co/models/google/gemma-1.1-7b-it"
API_URLMistral = "https://api-inference.huggingface.co/models/mistralai/Mistral-7B-Instruct-v0.2"
headersGemma = {"Authorization": "Bearer " + token}
headersMistral = {"Authorization": "Bearer " + token}
def queryMistral(payload):
response = requests.post(API_URLMistral, headers=headersMistral, json=payload)
return response.json()
def queryGemma(payload):
return requests.post(API_URLGemma, headers=headersGemma, json=payload).json() #post and get
#Upload csv
uploaded_file = st.file_uploader("Choose a file")
if uploaded_file is not None:
# To read file as bytes:
bytes_data = uploaded_file.getvalue()
#st.write(bytes_data)
my_df = pd.read_csv(uploaded_file)
st.write(my_df)
#8
#Stampa delle colonne del cvs ( my df)
colonne = ""
for col in my_df.columns:
colonne =colonne + col + ","
print(col)
#colonne.pop()
colonne = colonne[:-1]
print(colonne)
#9
#definiamo un contesto
contesto = "dati di impianti industriali"
contesto = st.text_input("Specifica il contesto dei dati", "dati di impianti industriali")
st.write("Il contesto di riferimento dei dati è: ", contesto)
#10
# Dividi la stringa in righe
righe = colonne.strip().split(',') #--> questo ritorna una lista
# Estrai i valori e crea il DataFrame
df = pd.DataFrame(righe, columns=['campo'])
print(df.shape)
print("===========================")
print(df["campo"][1])
#11
try:
df.insert(1,"Regole di Qualità","")
except:
pass
try:
df.insert(1,"descrizioneMistral","")
except:
pass
try:
df.insert(1,"descrizioneGemma","")
except:
pass
#12
for i in range(0,df.shape[0]):
#è IMPORTANTE CHIEDERE ESPLICITAMENTE UNA DESCRIZIONE DEL CAMPO IN ANALISI
# "inputs": "Descrivi il campo di una tabella che contiene " + contesto + ". Il nome del campo è " + df["campo"][i] + " Il formato desiderato è \' Descrizione: risposta \' ",
rispostaGemma = queryGemma({
"inputs": "Descrivi il campo di una tabella che contiene " + contesto + ". Il nome del campo è " + df["campo"][i] + " Rispondimi solo con la descrizione richiesta",
})
# print(rispostaGemma)
df["descrizioneGemma"][i] = rispostaGemma[0]["generated_text"]
#ipotetico problema con i modelli di AI, guardare print rispostaGemma
rispostaMistral = queryMistral({
"inputs": "Genera una descrizione, in italiano, per il campo di una tabella che contiene " + contesto + ". Il nome del campo è " + df["campo"][i] + " Il formato desiderato è \' Descrizione: risposta \'",
})
# print(rispostaMistral)
df["descrizioneMistral"][i] = rispostaMistral[0]["generated_text"]
# print("GEMMA ")
# print(df["descrizioneGemma"][i])
# print("MISTRAL")
#louput di mistral è diverso da quello di Gemma, bisogna pulire dal regex in modo corretto
# print(df["descrizioneMistral"][i])
# print(rispostaGemma[0]["generated_text"])
#print("#######################")
#print(rispostaMistral[0]["generated_text"])
#12
#duplico il dataframe
df_pulito = df
#13 Pulizia Gemma
queryNumber = int(df.shape[0])
for i in range(0,queryNumber):
input_string = df["descrizioneGemma"][i]
parti = str(df["descrizioneGemma"][i]).split("\n\n")
if len(parti) > 1:
descrizione = parti[1]
print(descrizione)
df_pulito["descrizioneGemma"][i] = descrizione
else:
print("Descrizione non trovata.")
######
###pulizia mistral
queryNumber = int(df.shape[0])
for i in range(0,queryNumber):
input_string = df["descrizioneMistral"][i]
parti = str(df["descrizioneMistral"][i]).split("\n\n")
if len(parti) > 1:
descrizione = parti[1]
print(descrizione)
df_pulito["descrizioneMistral"][i] = descrizione
else:
print("Descrizione non trovata.")
#definizione quality rules
for i in range(0,df.shape[0]):
rispostaGemma = queryGemma({
"inputs": "Generami una regola di data quality associata al campo " + df["campo"][i] + " Rispondimi solo con la descrizione richiesta",
})
df["Regole di Qualità"][i] = rispostaGemma[0]["generated_text"]
# quality rules
queryNumber = int(df.shape[0])
for i in range(0,queryNumber):
input_string = df["Regole di Qualità"][i]
parti = str(df["Regole di Qualità"][i]).split("\n\n")
if len(parti) > 1:
descrizione = parti[1]
print(descrizione)
df_pulito["Regole di Qualità"][i] = descrizione
else:
print("Descrizione non trovata.")
st.table(df_pulito)