File size: 1,730 Bytes
cb5b71d
 
 
 
 
6a31b9a
 
 
 
 
dc92053
8a5a6d8
cb5b71d
6a31b9a
cb5b71d
6a31b9a
cb5b71d
 
 
 
 
8a5a6d8
cb5b71d
 
6a31b9a
cb5b71d
 
73ebcab
6a31b9a
73ebcab
6a31b9a
 
cb5b71d
6a31b9a
cb5b71d
 
 
6a31b9a
cb5b71d
6a31b9a
 
 
 
 
 
 
cb5b71d
6a31b9a
cb5b71d
6a31b9a
cb5b71d
6a31b9a
cb5b71d
8a5a6d8
 
cb5b71d
6a31b9a
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
import json

import streamlit as st
import streamlit_nested_layout  # Do not remove this allows nesting columns.

from components.tabs import render_tabs
from core.constants import METADATA
from core.constants import OVERVIEW
from core.constants import RECORD_SETS
from core.constants import RESOURCES
from core.constants import TABS
from core.constants import RAI
from core.past_projects import save_current_project
from core.state import get_tab
from core.state import Metadata
from core.state import set_tab
import mlcroissant as mlc
from views.files import render_files
from views.metadata import render_metadata
from views.overview import render_overview
from views.record_sets import render_record_sets
from views.rai import render_rai_metadata


def _export_json() -> str | None:
    metadata: Metadata = st.session_state[Metadata]
    try:
        name = metadata.name or "metadata"
        return {
            "name": f"croissant-{name.lower()}.json",
            "content": json.dumps(metadata.to_canonical().to_json()),
        }
    except mlc.ValidationError as exception:
        return None


def render_editor():
    export_json = _export_json()

    # Warning: the custom component cannot be nested in a st.columns or it is forced to
    # re-render even if a `key` is set.
    selected_tab = get_tab()
    tab = render_tabs(
        tabs=TABS, selected_tab=selected_tab, json=export_json, key="tabs"
    )
    if tab == OVERVIEW:
        render_overview()
    elif tab == METADATA:
        render_metadata()
    elif tab == RESOURCES:
        render_files()
    elif tab == RECORD_SETS:
        render_record_sets()
    elif tab == RAI:
        render_rai_metadata()
    save_current_project()
    set_tab(tab)