File size: 6,075 Bytes
e7abd9e
 
 
 
 
 
 
 
 
 
a87d18d
e7abd9e
 
 
 
 
7b6b120
 
a87d18d
 
e7abd9e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9cd0edd
 
 
 
 
 
 
 
 
 
a87d18d
9cd0edd
 
 
 
e7abd9e
 
9cd0edd
e7abd9e
 
9cd0edd
 
e7abd9e
 
7b6b120
40a9a5d
7b6b120
 
 
 
a87d18d
 
 
 
7b6b120
9540418
 
a87d18d
7b6b120
9cd0edd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7b6b120
 
 
40a9a5d
7b6b120
40a9a5d
7b6b120
 
 
 
40a9a5d
7b6b120
40a9a5d
7b6b120
 
40a9a5d
7b6b120
40a9a5d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7b6b120
 
 
 
e7abd9e
9cd0edd
 
a87d18d
9cd0edd
 
e7abd9e
 
 
 
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
import React, { useEffect } from "react";
import {
  HashRouter as Router,
  Routes,
  Route,
  useSearchParams,
  useLocation,
} from "react-router-dom";
import { ThemeProvider } from "@mui/material/styles";
import { Box, CssBaseline } from "@mui/material";
// import Navigation from "./components/Navigation/Navigation";
import Navigation from "./components/Navigation/Navigation";
import LeaderboardPage from "./pages/LeaderboardPage/LeaderboardPage";
import AddModelPage from "./pages/AddModelPage/AddModelPage";
import QuotePage from "./pages/QuotePage/QuotePage";
import VoteModelPage from "./pages/VoteModelPage/VoteModelPage";
import { Header } from "@codegouvfr/react-dsfr/Header";
import { Footer } from "@codegouvfr/react-dsfr/Footer";
import MuiDsfrThemeProvider from "@codegouvfr/react-dsfr/mui";
import { headerFooterDisplayItem } from "@codegouvfr/react-dsfr/Display";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import LeaderboardProvider from "./pages/LeaderboardPage/components/Leaderboard/context/LeaderboardContext";
const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      retry: 1,
      refetchOnWindowFocus: false,
    },
  },
});

function UrlHandler() {
  const location = useLocation();
  const [searchParams] = useSearchParams();

  // Synchroniser l'URL avec la page parente HF
  useEffect(() => {
    // Vérifier si nous sommes dans un iframe HF Space
    const isHFSpace = window.location !== window.parent.location;
    if (!isHFSpace) return;

    // Sync query and hash from this embedded app to the parent page URL
    const queryString = window.location.search;
    const hash = window.location.hash;

    // HF Spaces' special message type to update the query string and the hash in the parent page URL
    window.parent.postMessage(
      {
        queryString,
        hash,
      },
      "https://huggingface.co"
    );
  }, [location, searchParams]);

  // Read the updated hash reactively
  useEffect(() => {
    const handleHashChange = (event) => {
      console.log("hash change event", event);
    };

    window.addEventListener("hashchange", handleHashChange);
    return () => window.removeEventListener("hashchange", handleHashChange);
  }, []);

  return null;
}

function App() {

  return (
    <div
      className="App"
      style={{
        height: "100%",
        width: "100%",
        WebkitOverflowScrolling: "touch",
        overflow: "auto",
      }}
    >
      <QueryClientProvider client={queryClient}>
        <MuiDsfrThemeProvider>
          <CssBaseline />
          <Router>
            <LeaderboardProvider>
              <UrlHandler />
              <Box
                sx={{
                  minHeight: "100vh",
                  display: "flex",
                  flexDirection: "column",
                  bgcolor: "background.default",
                  color: "text.primary",
                }}
              >
                <Header
                  brandTop={<>République <br/> française</>}
                  homeLinkProps={{
                    href: '/',
                    title: 'Accueil - Nom de l’entité (ministère, secrétariat d‘état, gouvernement)'
                  }}
                  quickAccessItems={[
                    // other quick access items...
                    headerFooterDisplayItem
                  ]}
                  id="fr-header-simple-header-with-service-title-and-tagline"
                  serviceTagline="Tableau de référence pour les grands modèles de langages en français"
                  serviceTitle="Leaderboard des GML pour le français"
                  navigation={<Navigation />}
                />
                <Box
                  sx={{
                    flex: 1,
                    display: "flex",
                    flexDirection: "column",
                    width: "100%",
                    px: 4,
                    pb: 4,
                  }}
                >
                  <Routes>
                    <Route path="/" element={<LeaderboardPage />} />
                    <Route path="/add" element={<AddModelPage />} />
                    <Route path="/quote" element={<QuotePage />} />
                    <Route path="/vote" element={<VoteModelPage />} />
                  </Routes>
                </Box>
                <Footer
                  accessibility="fully compliant"
                  contentDescription="
                    L'évaluation des systèmes d'IA est un enjeu stratégique sur lequel la France s'est historiquement démarquée.

                    Ce classement, ou leaderboard, s'inspire directement de l'Open LLM Leaderboard et permet de comparer différents modèles d'IA génératifs à l'aide de jeux de données spécifiquement adaptés aux environnements et à la culture francophones.
                    "
                  partnersLogos={{
                    sub: [
                      {
                        alt: 'Logo Inria',
                        href: '#',
                        imgUrl: '/inr_logo_rouge.png'
                      },
                      {
                        alt: 'Logo CNRS',
                        href: '#',
                        imgUrl: '/LOGO_CNRS_BLEU.png'
                      },
                      {
                        alt: 'Logo LNE',
                        href: '#',
                        imgUrl: '/logo-lne.svgz'
                      },
                      {
                        alt: 'Logo DGE',
                        href: '#',
                        imgUrl: '/logo_DGE.png'
                      },
                      {
                        alt: 'Logo huggingface',
                        href: '#',
                        imgUrl: '/hf-logo-with-title.svg'
                      }
                    ]
                  }}
                />
              </Box>
            </LeaderboardProvider>
          </Router>
        </MuiDsfrThemeProvider>
      </QueryClientProvider>
    </div>
  );
}

export default App;