File size: 4,048 Bytes
a005c19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import json
from sheet_manager.sheet_crud.sheet_crud import SheetManager
import json
from typing import Optional, Dict

def update_benchmark_json(
    model_name: str, 
    benchmark_data: dict, 
    worksheet_name: str = "metric",
    target_column: str = "benchmark"  # ํƒ€๊ฒŸ ์นผ๋Ÿผ ํŒŒ๋ผ๋ฏธํ„ฐ ์ถ”๊ฐ€
):
    """
    ํŠน์ • ๋ชจ๋ธ์˜ ๋ฒค์น˜๋งˆํฌ ๋ฐ์ดํ„ฐ๋ฅผ JSON ํ˜•ํƒœ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
    
    Args:
        model_name (str): ์—…๋ฐ์ดํŠธํ•  ๋ชจ๋ธ ์ด๋ฆ„
        benchmark_data (dict): ์—…๋ฐ์ดํŠธํ•  ๋ฒค์น˜๋งˆํฌ ๋ฐ์ดํ„ฐ ๋”•์…”๋„ˆ๋ฆฌ
        worksheet_name (str): ์ž‘์—…ํ•  ์›Œํฌ์‹œํŠธ ์ด๋ฆ„ (๊ธฐ๋ณธ๊ฐ’: "metric")
        target_column (str): ์—…๋ฐ์ดํŠธํ•  ํƒ€๊ฒŸ ์นผ๋Ÿผ ์ด๋ฆ„ (๊ธฐ๋ณธ๊ฐ’: "benchmark")
    """
    sheet_manager = SheetManager(worksheet_name=worksheet_name)
    
    # ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ JSON ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜
    json_str = json.dumps(benchmark_data, ensure_ascii=False)
    
    # ๋ชจ๋ธ๋ช…์„ ๊ธฐ์ค€์œผ๋กœ ์ง€์ •๋œ ์นผ๋Ÿผ ์—…๋ฐ์ดํŠธ
    row = sheet_manager.update_cell_by_condition(
        condition_column="Model name",  # ๋ชจ๋ธ๋ช…์ด ์žˆ๋Š” ์นผ๋Ÿผ
        condition_value=model_name,     # ์ฐพ์„ ๋ชจ๋ธ๋ช…
        target_column=target_column,    # ์—…๋ฐ์ดํŠธํ•  ํƒ€๊ฒŸ ์นผ๋Ÿผ
        target_value=json_str          # ์—…๋ฐ์ดํŠธํ•  JSON ๊ฐ’
    )
    
    if row:
        print(f"Successfully updated {target_column} data for model: {model_name}")
    else:
        print(f"Model {model_name} not found in the sheet")



def get_benchmark_dict(
    model_name: str,
    worksheet_name: str = "metric",
    target_column: str = "benchmark",
    save_path: Optional[str] = None
) -> Dict:
    """
    ์‹œํŠธ์—์„œ ํŠน์ • ๋ชจ๋ธ์˜ ๋ฒค์น˜๋งˆํฌ JSON ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ๋”•์…”๋„ˆ๋ฆฌ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    
    Args:
        model_name (str): ๊ฐ€์ ธ์˜ฌ ๋ชจ๋ธ ์ด๋ฆ„
        worksheet_name (str): ์ž‘์—…ํ•  ์›Œํฌ์‹œํŠธ ์ด๋ฆ„ (๊ธฐ๋ณธ๊ฐ’: "metric")
        target_column (str): ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์นผ๋Ÿผ ์ด๋ฆ„ (๊ธฐ๋ณธ๊ฐ’: "benchmark")
        save_path (str, optional): ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์ €์žฅํ•  JSON ํŒŒ์ผ ๊ฒฝ๋กœ
        
    Returns:
        Dict: ๋ฒค์น˜๋งˆํฌ ๋ฐ์ดํ„ฐ ๋”•์…”๋„ˆ๋ฆฌ. ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๊ฑฐ๋‚˜ JSON ํŒŒ์‹ฑ ์‹คํŒจ์‹œ ๋นˆ ๋”•์…”๋„ˆ๋ฆฌ ๋ฐ˜ํ™˜
    """
    sheet_manager = SheetManager(worksheet_name=worksheet_name)
    
    try:
        # ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ
        data = sheet_manager.sheet.get_all_records()
        
        # ํ•ด๋‹น ๋ชจ๋ธ ์ฐพ๊ธฐ
        target_row = next(
            (row for row in data if row.get("Model name") == model_name),
            None
        )
        
        if not target_row:
            print(f"Model {model_name} not found in the sheet")
            return {}
            
        # ํƒ€๊ฒŸ ์นผ๋Ÿผ์˜ JSON ๋ฌธ์ž์—ด ๊ฐ€์ ธ์˜ค๊ธฐ
        json_str = target_row.get(target_column)
        
        if not json_str:
            print(f"No data found in {target_column} for model: {model_name}")
            return {}
            
        # JSON ๋ฌธ์ž์—ด์„ ๋”•์…”๋„ˆ๋ฆฌ๋กœ ๋ณ€ํ™˜
        result_dict = json.loads(json_str)
        
        # ๊ฒฐ๊ณผ ์ €์žฅ (save_path๊ฐ€ ์ œ๊ณต๋œ ๊ฒฝ์šฐ)
        if save_path:
            with open(save_path, 'w', encoding='utf-8') as f:
                json.dump(result_dict, f, ensure_ascii=False, indent=2)
            print(f"Successfully saved dictionary to: {save_path}")
            
        return result_dict
        
    except json.JSONDecodeError:
        print(f"Failed to parse JSON data for model: {model_name}")
        return {}
    except Exception as e:
        print(f"Error occurred: {str(e)}")
        return {}

def str2json(json_str):
    """
    ๋ฌธ์ž์—ด์„ JSON ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    
    Args:
        json_str (str): JSON ํ˜•์‹์˜ ๋ฌธ์ž์—ด
    
    Returns:
        dict: ํŒŒ์‹ฑ๋œ JSON ๊ฐ์ฒด, ์‹คํŒจ์‹œ None
    """
    try:
        return json.loads(json_str)
    except json.JSONDecodeError as e:
        print(f"JSON Parsing Error: {e}")
        return None
    except Exception as e:
        print(f"Unexpected Error: {e}")
        return None