Spaces:
				
			
			
	
			
			
		Sleeping
		
	
	
	
			
			
	
	
	
	
		
		
		Sleeping
		
	Uploading new App version
Browse files- app.py +0 -0
- evaluation_p_metrics.csv +0 -0
- style.css +28 -8
- utilities.py +66 -11
    	
        app.py
    CHANGED
    
    | The diff for this file is too large to render. 
		See raw diff | 
|  | 
    	
        evaluation_p_metrics.csv
    ADDED
    
    | The diff for this file is too large to render. 
		See raw diff | 
|  | 
    	
        style.css
    CHANGED
    
    | @@ -1,19 +1,18 @@ | |
|  | |
| 1 | 
             
            .prose h1 {
         | 
| 2 | 
            -
                font-family: ' | 
| 3 | 
             
                font-size: 3rem;
         | 
| 4 | 
            -
                font-weight:  | 
| 5 | 
            -
                text-transform:  | 
| 6 | 
            -
                letter-spacing:  | 
| 7 | 
             
                text-align: center;
         | 
| 8 | 
            -
                color: # | 
| 9 | 
            -
                background: linear-gradient(45deg, #d4c9cc, #c4b8bb);
         | 
| 10 | 
            -
                -webkit-background-clip: text;
         | 
| 11 | 
            -
                -webkit-text-fill-color: transparent;
         | 
| 12 | 
             
                padding: 20px;
         | 
| 13 | 
             
                margin: 20px 0;
         | 
| 14 | 
             
                position: relative;
         | 
| 15 | 
             
            }
         | 
| 16 |  | 
|  | |
| 17 | 
             
            .prose h1::after {
         | 
| 18 | 
             
                content: "";
         | 
| 19 | 
             
                width: 60px;
         | 
| @@ -24,6 +23,23 @@ | |
| 24 | 
             
                border-radius: 2px;
         | 
| 25 | 
             
            }
         | 
| 26 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 27 | 
             
            #bar_plot, #line_plot {
         | 
| 28 | 
             
                width: 100% !important;
         | 
| 29 | 
             
                max-width: none !important;
         | 
| @@ -45,6 +61,7 @@ | |
| 45 | 
             
                margin: 20px 0;
         | 
| 46 | 
             
                position: center;
         | 
| 47 | 
             
            }
         | 
|  | |
| 48 | 
             
            .fish{
         | 
| 49 | 
             
                    font-family: 'Poppins', sans-serif;
         | 
| 50 | 
             
                    font-size: 1.5rem;
         | 
| @@ -75,11 +92,13 @@ | |
| 75 | 
             
                /*margin: 20px 0;*/
         | 
| 76 | 
             
                position: center;
         | 
| 77 | 
             
            }
         | 
|  | |
| 78 | 
             
            .barcontainer {
         | 
| 79 | 
             
                display: flex;
         | 
| 80 | 
             
                justify-content: center; 
         | 
| 81 | 
             
                align-items: center; 
         | 
| 82 | 
             
            }
         | 
|  | |
| 83 | 
             
            .leftarrow, .rightarrow {
         | 
| 84 | 
             
                display: flex;
         | 
| 85 | 
             
                justify-content: center; 
         | 
| @@ -87,6 +106,7 @@ | |
| 87 | 
             
                font-size: 2.7rem;
         | 
| 88 | 
             
                color: #1d60dd;
         | 
| 89 | 
             
            }
         | 
|  | |
| 90 | 
             
            .leftarrow {
         | 
| 91 | 
             
                transform: rotate(-270deg);
         | 
| 92 | 
             
            }
         | 
|  | |
| 1 | 
            +
            /* Titoli principali h1 */
         | 
| 2 | 
             
            .prose h1 {
         | 
| 3 | 
            +
                font-family: 'Playfair Display', serif;
         | 
| 4 | 
             
                font-size: 3rem;
         | 
| 5 | 
            +
                font-weight: 600;
         | 
| 6 | 
            +
                text-transform: none;
         | 
| 7 | 
            +
                letter-spacing: 0.5px;
         | 
| 8 | 
             
                text-align: center;
         | 
| 9 | 
            +
                color: #ffffff;
         | 
|  | |
|  | |
|  | |
| 10 | 
             
                padding: 20px;
         | 
| 11 | 
             
                margin: 20px 0;
         | 
| 12 | 
             
                position: relative;
         | 
| 13 | 
             
            }
         | 
| 14 |  | 
| 15 | 
            +
            /* Linea decorativa sotto l'h1 */
         | 
| 16 | 
             
            .prose h1::after {
         | 
| 17 | 
             
                content: "";
         | 
| 18 | 
             
                width: 60px;
         | 
|  | |
| 23 | 
             
                border-radius: 2px;
         | 
| 24 | 
             
            }
         | 
| 25 |  | 
| 26 | 
            +
            /* Titoli secondari h2 */
         | 
| 27 | 
            +
            .prose h2 {
         | 
| 28 | 
            +
                font-family: 'Playfair Display', serif;
         | 
| 29 | 
            +
                font-size: 2.2rem;
         | 
| 30 | 
            +
                font-weight: 500;
         | 
| 31 | 
            +
                letter-spacing: 0.3px;
         | 
| 32 | 
            +
                color: #ffffff;
         | 
| 33 | 
            +
                text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.4);
         | 
| 34 | 
            +
                padding: 10px 0;
         | 
| 35 | 
            +
                margin: 10px 0 20px 0;
         | 
| 36 | 
            +
                text-align: left;
         | 
| 37 | 
            +
            }
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            body, label, button, span, li, p, .prose {
         | 
| 40 | 
            +
                font-family: 'Playfair Display', serif;
         | 
| 41 | 
            +
            }
         | 
| 42 | 
            +
             | 
| 43 | 
             
            #bar_plot, #line_plot {
         | 
| 44 | 
             
                width: 100% !important;
         | 
| 45 | 
             
                max-width: none !important;
         | 
|  | |
| 61 | 
             
                margin: 20px 0;
         | 
| 62 | 
             
                position: center;
         | 
| 63 | 
             
            }
         | 
| 64 | 
            +
             | 
| 65 | 
             
            .fish{
         | 
| 66 | 
             
                    font-family: 'Poppins', sans-serif;
         | 
| 67 | 
             
                    font-size: 1.5rem;
         | 
|  | |
| 92 | 
             
                /*margin: 20px 0;*/
         | 
| 93 | 
             
                position: center;
         | 
| 94 | 
             
            }
         | 
| 95 | 
            +
             | 
| 96 | 
             
            .barcontainer {
         | 
| 97 | 
             
                display: flex;
         | 
| 98 | 
             
                justify-content: center; 
         | 
| 99 | 
             
                align-items: center; 
         | 
| 100 | 
             
            }
         | 
| 101 | 
            +
             | 
| 102 | 
             
            .leftarrow, .rightarrow {
         | 
| 103 | 
             
                display: flex;
         | 
| 104 | 
             
                justify-content: center; 
         | 
|  | |
| 106 | 
             
                font-size: 2.7rem;
         | 
| 107 | 
             
                color: #1d60dd;
         | 
| 108 | 
             
            }
         | 
| 109 | 
            +
             | 
| 110 | 
             
            .leftarrow {
         | 
| 111 | 
             
                transform: rotate(-270deg);
         | 
| 112 | 
             
            }
         | 
    	
        utilities.py
    CHANGED
    
    | @@ -1,32 +1,35 @@ | |
| 1 | 
             
            import csv
         | 
|  | |
| 2 | 
             
            import pandas as pd
         | 
| 3 | 
             
            import sqlite3
         | 
| 4 | 
             
            import gradio as gr
         | 
| 5 | 
             
            import os
         | 
| 6 | 
             
            from qatch.connectors.sqlite_connector import SqliteConnector
         | 
| 7 | 
            -
             | 
| 8 | 
            -
            def carica_sqlite(file_path, db_id):
         | 
| 9 | 
             
                conn = sqlite3.connect(file_path)
         | 
| 10 | 
             
                cursor = conn.cursor()
         | 
| 11 | 
             
                cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
         | 
| 12 | 
             
                tabelle = cursor.fetchall()
         | 
| 13 | 
             
                tabelle = [tabella for tabella in tabelle if tabella[0] != 'sqlite_sequence']
         | 
| 14 | 
            -
                
         | 
|  | |
|  | |
|  | |
|  | |
| 15 | 
             
                dfs = {}
         | 
| 16 | 
             
                for tabella in tabelle:
         | 
| 17 | 
             
                    nome_tabella = tabella[0]
         | 
| 18 | 
             
                    df = pd.read_sql_query(f"SELECT * FROM {nome_tabella}", conn)
         | 
| 19 | 
             
                    dfs[nome_tabella] = df
         | 
| 20 | 
             
                conn.close()
         | 
| 21 | 
            -
                 | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
                 | 
| 25 | 
            -
                # )
         | 
| 26 | 
             
                return data_output
         | 
| 27 |  | 
| 28 | 
             
            # Funzione per leggere un file CSV
         | 
| 29 | 
            -
            def  | 
| 30 | 
             
                df = pd.read_csv(file)
         | 
| 31 | 
             
                return df
         | 
| 32 |  | 
| @@ -44,7 +47,7 @@ def load_data(data_path : str, db_name : str): | |
| 44 | 
             
                if data_path.endswith(".sqlite") :
         | 
| 45 | 
             
                    data_output = carica_sqlite(data_path, db_name)
         | 
| 46 | 
             
                elif data_path.endswith(".csv"):
         | 
| 47 | 
            -
                    data_output['data_frames'] = {f"{table_name}_table" :  | 
| 48 | 
             
                elif data_path.endswith(".xlsx"):
         | 
| 49 | 
             
                    data_output['data_frames'] = carica_excel(data_path)
         | 
| 50 | 
             
                else:
         | 
| @@ -74,4 +77,56 @@ def csv_to_dict(file_path): | |
| 74 | 
             
                        if "price" in row:
         | 
| 75 | 
             
                            row["price"] = float(row["price"])
         | 
| 76 | 
             
                        data.append(row)
         | 
| 77 | 
            -
                return data
         | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | 
|  | |
| 1 | 
             
            import csv
         | 
| 2 | 
            +
            import re
         | 
| 3 | 
             
            import pandas as pd
         | 
| 4 | 
             
            import sqlite3
         | 
| 5 | 
             
            import gradio as gr
         | 
| 6 | 
             
            import os
         | 
| 7 | 
             
            from qatch.connectors.sqlite_connector import SqliteConnector
         | 
| 8 | 
            +
            def extract_tables(file_path):
         | 
|  | |
| 9 | 
             
                conn = sqlite3.connect(file_path)
         | 
| 10 | 
             
                cursor = conn.cursor()
         | 
| 11 | 
             
                cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
         | 
| 12 | 
             
                tabelle = cursor.fetchall()
         | 
| 13 | 
             
                tabelle = [tabella for tabella in tabelle if tabella[0] != 'sqlite_sequence']
         | 
| 14 | 
            +
                return tabelle
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            def extract_dataframes(file_path):
         | 
| 17 | 
            +
                conn = sqlite3.connect(file_path)
         | 
| 18 | 
            +
                tabelle = extract_tables(file_path) 
         | 
| 19 | 
             
                dfs = {}
         | 
| 20 | 
             
                for tabella in tabelle:
         | 
| 21 | 
             
                    nome_tabella = tabella[0]
         | 
| 22 | 
             
                    df = pd.read_sql_query(f"SELECT * FROM {nome_tabella}", conn)
         | 
| 23 | 
             
                    dfs[nome_tabella] = df
         | 
| 24 | 
             
                conn.close()
         | 
| 25 | 
            +
                return dfs
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            def carica_sqlite(file_path, db_id):
         | 
| 28 | 
            +
                data_output = {'data_frames': extract_dataframes(file_path),'db':SqliteConnector(relative_db_path=file_path, db_name=db_id)}
         | 
|  | |
| 29 | 
             
                return data_output
         | 
| 30 |  | 
| 31 | 
             
            # Funzione per leggere un file CSV
         | 
| 32 | 
            +
            def load_csv(file):
         | 
| 33 | 
             
                df = pd.read_csv(file)
         | 
| 34 | 
             
                return df
         | 
| 35 |  | 
|  | |
| 47 | 
             
                if data_path.endswith(".sqlite") :
         | 
| 48 | 
             
                    data_output = carica_sqlite(data_path, db_name)
         | 
| 49 | 
             
                elif data_path.endswith(".csv"):
         | 
| 50 | 
            +
                    data_output['data_frames'] = {f"{table_name}_table" : load_csv(data_path)}
         | 
| 51 | 
             
                elif data_path.endswith(".xlsx"):
         | 
| 52 | 
             
                    data_output['data_frames'] = carica_excel(data_path)
         | 
| 53 | 
             
                else:
         | 
|  | |
| 77 | 
             
                        if "price" in row:
         | 
| 78 | 
             
                            row["price"] = float(row["price"])
         | 
| 79 | 
             
                        data.append(row)
         | 
| 80 | 
            +
                return data
         | 
| 81 | 
            +
             | 
| 82 | 
            +
             | 
| 83 | 
            +
            def increment_filename(filename):
         | 
| 84 | 
            +
                base, ext = os.path.splitext(filename)
         | 
| 85 | 
            +
                numbers = re.findall(r'\d+', base)
         | 
| 86 | 
            +
                
         | 
| 87 | 
            +
                if numbers:
         | 
| 88 | 
            +
                    max_num = max(map(int, numbers)) + 1
         | 
| 89 | 
            +
                    new_base = re.sub(r'(\d+)', lambda m: str(max_num) if int(m.group(1)) == max(map(int, numbers)) else m.group(1), base)
         | 
| 90 | 
            +
                else:
         | 
| 91 | 
            +
                    new_base = base + '1'
         | 
| 92 | 
            +
                
         | 
| 93 | 
            +
                return new_base + ext
         | 
| 94 | 
            +
             | 
| 95 | 
            +
            def prepare_prompt(prompt, question, schema, samples):
         | 
| 96 | 
            +
                prompt = prompt.replace("{schema}", schema).replace("{question}", question)
         | 
| 97 | 
            +
                prompt += f" Some istanze: {samples}"
         | 
| 98 | 
            +
                return prompt
         | 
| 99 | 
            +
             | 
| 100 | 
            +
            def generate_some_samples(connector, tbl_name):
         | 
| 101 | 
            +
                samples = []
         | 
| 102 | 
            +
                query = f"SELECT * FROM {tbl_name} LIMIT 3"
         | 
| 103 | 
            +
                try:
         | 
| 104 | 
            +
                    sample_data = connector.execute_query(query)
         | 
| 105 | 
            +
                    samples.append(str(sample_data))
         | 
| 106 | 
            +
                except Exception as e:
         | 
| 107 | 
            +
                    samples.append(f"Error: {e}")
         | 
| 108 | 
            +
                return samples
         | 
| 109 | 
            +
            def extract_tables_dict(pnp_path):
         | 
| 110 | 
            +
                tables_dict = {}
         | 
| 111 | 
            +
                # df = pd.read_csv(pnp_path)
         | 
| 112 | 
            +
                # with open(pnp_path, mode='r', encoding='utf-8') as file:
         | 
| 113 | 
            +
                #     reader = csv.DictReader(file)
         | 
| 114 | 
            +
                #     for row in reader:
         | 
| 115 | 
            +
                #         tbl_name = row.get("tbl_name")
         | 
| 116 | 
            +
                #         db_path = row.get("db_path")
         | 
| 117 | 
            +
                #         if tbl_name and db_path:
         | 
| 118 | 
            +
                #             print(db_path, tbl_name)
         | 
| 119 | 
            +
                #             connector = SqliteConnector(relative_db_path=db_path, db_name=os.path.basename(db_path))
         | 
| 120 | 
            +
                #             instances = generate_some_samples(connector, tbl_name)
         | 
| 121 | 
            +
                #             if tbl_name not in tables_dict:
         | 
| 122 | 
            +
                #                 tables_dict[tbl_name] = []
         | 
| 123 | 
            +
                #             tables_dict[tbl_name].extend(instances)
         | 
| 124 | 
            +
             | 
| 125 | 
            +
                with open(pnp_path, mode='r', encoding='utf-8') as file:
         | 
| 126 | 
            +
                    reader = csv.DictReader(file)
         | 
| 127 | 
            +
                    for row in reader:
         | 
| 128 | 
            +
                        tbl_name = row.get("tbl_name")
         | 
| 129 | 
            +
                        if tbl_name not in tables_dict:
         | 
| 130 | 
            +
                            tables_dict[tbl_name] = []
         | 
| 131 | 
            +
                        #tables_dict[tbl_name].append(row)
         | 
| 132 | 
            +
                return tables_dict
         | 
