Spaces:
Sleeping
Sleeping
| 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) | |