File size: 2,342 Bytes
50e75cf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3c0df4a
 
 
 
 
 
 
 
7f71cc7
50e75cf
 
 
 
 
 
 
 
 
72c7221
 
50e75cf
 
8e2e988
 
 
 
 
 
3c0df4a
50e75cf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import pathlib
from pathlib import Path
import tempfile
from typing import BinaryIO, Literal
import json
import pandas as pd

import gradio as gr
from huggingface_hub import upload_file, hf_hub_download
from evaluation import evaluate_problem
from datetime import datetime
import os

from about import PROBLEM_TYPES, TOKEN, CACHE_PATH, API, submissions_repo, results_repo

def make_user_clickable(name):
    link =f'https://huggingface.co/{name}'
    return f'<a target="_blank" href="{link}" style="color: var(--link-text-color); text-decoration: underline;text-decoration-style: dotted;">{name}</a>'

def make_boundary_clickable(filename):
    link =f'https://huggingface.co/datasets/proxima-fusion/constellaration-bench-results/blob/main/{filename}'
    return f'<a target="_blank" href="{link}" style="color: var(--link-text-color); text-decoration: underline;text-decoration-style: dotted;">link</a>'

def read_file_from_hub(filename):
    local_path = hf_hub_download(
        repo_id=submissions_repo,
        repo_type="dataset",
        filename=filename,
    )
    return local_path

def write_results(record, result):
    record.update(result)
    record['result_filename'] = record['submission_filename'].rstrip('.json') + '_results.json'
    print(record['result_filename'])
    record['evaluated'] = True

    record["objectives"] = json.dumps(record.get("objectives", []))
    record["feasibilities"] = json.dumps(record.get("feasibility", []))
    
    if 'objective' not in record.keys():
        record['objective'] = 0.0
        record['minimize_objective'] = True
        record['feasibility'] = sum(record['feasibility'])/len(record['feasibility'])

    with tempfile.NamedTemporaryFile(mode="w", suffix=".json", delete=False) as tmp:
        json.dump(record, tmp, indent=2)
        tmp.flush()
        tmp_name = tmp.name
    
    API.upload_file(
            path_or_fileobj=tmp_name, 
            path_in_repo=record['result_filename'],
            repo_id=results_repo,
            repo_type="dataset",
            commit_message=f"Add result data for {record['result_filename']}"
        )
    
    pathlib.Path(tmp_name).unlink()
    return

def get_user(profile: gr.OAuthProfile | None) -> str:
    if profile is None:
        return "Please login to submit a boundary for evaluation."
    return profile.username