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)