File size: 2,928 Bytes
ad489d5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
import re
import json
from huggingface_hub import HfApi

# Configura il token di Hugging Face (se necessario)
#TOKEN = "YOUR_HUGGINGFACE_API_TOKEN"
api = HfApi()

# Percorsi delle cartelle
input_folder = "../evalita_llm_results/models_output/"
output_folder = "../evalita_llm_requests2/"

# Creazione della cartella di output se non esiste
os.makedirs(output_folder, exist_ok=True)

# Espressione regolare per trovare il nome del modello
model_pattern = re.compile(r"pretrained=([\w\-./]+)")

# Scansiona i file nella cartella di input
for filename in os.listdir(input_folder):
    file_path = os.path.join(input_folder, filename)

    # Leggi il contenuto del file
    with open(file_path, "r", encoding="utf-8") as f:
        content = f.read()

    # Estrai il nome del modello
    match = model_pattern.search(content)
    if match:
        model_name = match.group(1)
        print(f"Processing model: {model_name}")

        try:
            # Ottieni le informazioni del modello da Hugging Face
            model_info = api.model_info(model_name)

            # Costruisci il dizionario con i metadati richiesti
            model_data = {
                "model": model_name,
                "base_model": model_info.config.get("architectures", [""])[0] if model_info.config else "",
                "revision": model_info.sha,
                "precision": "bfloat16",  # Se disponibile, sostituire con un valore reale
                #"weight_type": "Original",
                #"status": "FINISHED",
                "submitted_time": str(model_info.created_at),
                "model_type": "pretrained",
                #"likes": model_info.likes,
                #"params": model_info.safetensors_size_in_bytes / 1e9 if model_info.safetensors_size_in_bytes else None,
                #"license": model_info.license,
                #"private": model_info.private,
            }

            # Separare il model_name in due parti: prima e dopo "/"
            if "/" in model_name:
                dir_name, file_name = model_name.split("/", 1)
            else:
                dir_name, file_name = model_name, model_name  # Se non c'è "/", usa lo stesso nome

            # Creare la cartella per la prima parte del nome del modello
            model_output_folder = os.path.join(output_folder, dir_name)
            os.makedirs(model_output_folder, exist_ok=True)

            # Salvare il file JSON nella cartella appropriata
            output_file = os.path.join(model_output_folder, f"{file_name}.json")
            with open(output_file, "w", encoding="utf-8") as f:
                json.dump(model_data, f, indent=4)

            print(f"Saved metadata for {model_name} in {output_file}")

        except Exception as e:
            print(f"Error retrieving info for {model_name}: {e}")

        print("Process completed.")