Spaces:
Running
Running
v0.10.7
#29
by
DmitryRyumin
- opened
- .gradio/certificate.pem +31 -0
- README.md +1 -1
- app.css +29 -3
- app.py +16 -2
- app/authors.py +1 -1
- app/components.py +10 -3
- app/data_init.py +16 -0
- app/event_handlers/calculate_practical_tasks.py +349 -146
- app/event_handlers/calculate_pt_scores_blocks.py +78 -29
- app/event_handlers/clear_blocks.py +42 -14
- app/event_handlers/dropdown_candidates.py +3 -6
- app/event_handlers/event_handlers.py +167 -10
- app/event_handlers/examples_blocks.py +162 -10
- app/event_handlers/files.py +13 -3
- app/event_handlers/languages.py +118 -18
- app/event_handlers/practical_subtasks.py +44 -32
- app/event_handlers/practical_task_sorted.py +13 -8
- app/event_handlers/practical_tasks.py +22 -4
- app/event_handlers/switching_modes.py +226 -0
- app/event_handlers/webcam.py +84 -0
- app/port.py +35 -0
- app/practical_tasks.py +18 -8
- app/tabs.py +91 -27
- app/utils.py +26 -0
- config.toml +20 -7
- images/videos.ico +0 -0
- images/webcam.ico +0 -0
- practical_tasks.yaml → practical_tasks_en.yaml +0 -0
- practical_tasks_ru.yaml +14 -0
- requirements.txt +6 -4
.gradio/certificate.pem
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
-----BEGIN CERTIFICATE-----
|
2 |
+
MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
|
3 |
+
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
|
4 |
+
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4
|
5 |
+
WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu
|
6 |
+
ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY
|
7 |
+
MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc
|
8 |
+
h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+
|
9 |
+
0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U
|
10 |
+
A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW
|
11 |
+
T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH
|
12 |
+
B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC
|
13 |
+
B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv
|
14 |
+
KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn
|
15 |
+
OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn
|
16 |
+
jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw
|
17 |
+
qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI
|
18 |
+
rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
|
19 |
+
HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq
|
20 |
+
hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
|
21 |
+
ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ
|
22 |
+
3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK
|
23 |
+
NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5
|
24 |
+
ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur
|
25 |
+
TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC
|
26 |
+
jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc
|
27 |
+
oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq
|
28 |
+
4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA
|
29 |
+
mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d
|
30 |
+
emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=
|
31 |
+
-----END CERTIFICATE-----
|
README.md
CHANGED
@@ -4,7 +4,7 @@ emoji: 😀🤓😎😉😤
|
|
4 |
colorFrom: gray
|
5 |
colorTo: red
|
6 |
sdk: gradio
|
7 |
-
sdk_version: 5.
|
8 |
app_file: app.py
|
9 |
pinned: false
|
10 |
license: mit
|
|
|
4 |
colorFrom: gray
|
5 |
colorTo: red
|
6 |
sdk: gradio
|
7 |
+
sdk_version: 5.8.0
|
8 |
app_file: app.py
|
9 |
pinned: false
|
10 |
license: mit
|
app.css
CHANGED
@@ -14,9 +14,8 @@ div.app-flex-container {
|
|
14 |
gap: 6px;
|
15 |
}
|
16 |
|
17 |
-
div.
|
18 |
-
|
19 |
-
max-height: 350px;
|
20 |
}
|
21 |
|
22 |
div.video-column-container {
|
@@ -28,11 +27,17 @@ div.video-sorted-container {
|
|
28 |
max-height: 350px;
|
29 |
}
|
30 |
|
|
|
31 |
div.files-container {
|
32 |
height: 350px;
|
33 |
max-height: 350px;
|
34 |
}
|
35 |
|
|
|
|
|
|
|
|
|
|
|
36 |
div.files-container tr {
|
37 |
padding-right: 20px;
|
38 |
}
|
@@ -42,6 +47,8 @@ div.video-sorted-container div.icon-buttons > button {
|
|
42 |
display: none;
|
43 |
}
|
44 |
|
|
|
|
|
45 |
div.files-container:hover label[data-testid="block-label"],
|
46 |
div.video-container:hover label[data-testid="block-label"],
|
47 |
div.video-sorted-container:hover label[data-testid="block-label"] {
|
@@ -58,11 +65,14 @@ div.dataframe div.table-wrap {
|
|
58 |
height: auto !important;
|
59 |
}
|
60 |
|
|
|
61 |
div.files-container div.file-preview-holder {
|
62 |
overflow-y: scroll;
|
63 |
height: 100%;
|
64 |
}
|
65 |
|
|
|
|
|
66 |
div.files-container label[data-testid="block-label"] {
|
67 |
position: absolute;
|
68 |
}
|
@@ -130,6 +140,10 @@ div.files-container label[data-testid="block-label"] {
|
|
130 |
max-width: fit-content;
|
131 |
}
|
132 |
|
|
|
|
|
|
|
|
|
133 |
div.languages-container_wrapper {
|
134 |
display: grid;
|
135 |
justify-content: end;
|
@@ -169,6 +183,10 @@ div.languages-container > div.country_flags div.image-container > button > div.i
|
|
169 |
height: 32px;
|
170 |
}
|
171 |
|
|
|
|
|
|
|
|
|
172 |
.dropdown-language-container {
|
173 |
display: contents;
|
174 |
}
|
@@ -247,6 +265,14 @@ div.surname-container > div.metadata_surname-logo div.image-container,
|
|
247 |
div.email-container > div.metadata_email-logo div.image-container,
|
248 |
div.phone-container > div.metadata_phone-logo div.image-container {
|
249 |
width: fit-content;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
250 |
}
|
251 |
|
252 |
div.name-container > div.metadata_name-logo div.image-container > button > div > img,
|
|
|
14 |
gap: 6px;
|
15 |
}
|
16 |
|
17 |
+
div.media-container {
|
18 |
+
align-items: stretch;
|
|
|
19 |
}
|
20 |
|
21 |
div.video-column-container {
|
|
|
27 |
max-height: 350px;
|
28 |
}
|
29 |
|
30 |
+
div.webcam,
|
31 |
div.files-container {
|
32 |
height: 350px;
|
33 |
max-height: 350px;
|
34 |
}
|
35 |
|
36 |
+
div.webcam div[data-testid="video"] > div.wrap,
|
37 |
+
div.webcam div[data-testid="video"] > div.upload-container {
|
38 |
+
height: 310px;
|
39 |
+
}
|
40 |
+
|
41 |
div.files-container tr {
|
42 |
padding-right: 20px;
|
43 |
}
|
|
|
47 |
display: none;
|
48 |
}
|
49 |
|
50 |
+
div.webcam:hover label[data-testid="block-label"],
|
51 |
+
div.video-container:hover label[data-testid="block-label"],
|
52 |
div.files-container:hover label[data-testid="block-label"],
|
53 |
div.video-container:hover label[data-testid="block-label"],
|
54 |
div.video-sorted-container:hover label[data-testid="block-label"] {
|
|
|
65 |
height: auto !important;
|
66 |
}
|
67 |
|
68 |
+
div.video-container div.file-preview-holder,
|
69 |
div.files-container div.file-preview-holder {
|
70 |
overflow-y: scroll;
|
71 |
height: 100%;
|
72 |
}
|
73 |
|
74 |
+
div.webcam label[data-testid="block-label"],
|
75 |
+
div.video-container label[data-testid="block-label"],
|
76 |
div.files-container label[data-testid="block-label"] {
|
77 |
position: absolute;
|
78 |
}
|
|
|
140 |
max-width: fit-content;
|
141 |
}
|
142 |
|
143 |
+
div.notifications {
|
144 |
+
height: 85px;
|
145 |
+
}
|
146 |
+
|
147 |
div.languages-container_wrapper {
|
148 |
display: grid;
|
149 |
justify-content: end;
|
|
|
183 |
height: 32px;
|
184 |
}
|
185 |
|
186 |
+
div.languages-container > div.country_flags div.image-container > div.icon-button-wrapper {
|
187 |
+
display: none;
|
188 |
+
}
|
189 |
+
|
190 |
.dropdown-language-container {
|
191 |
display: contents;
|
192 |
}
|
|
|
265 |
div.email-container > div.metadata_email-logo div.image-container,
|
266 |
div.phone-container > div.metadata_phone-logo div.image-container {
|
267 |
width: fit-content;
|
268 |
+
min-width: auto;
|
269 |
+
}
|
270 |
+
|
271 |
+
div.name-container > div.metadata_name-logo div.image-container > div.icon-button-wrapper,
|
272 |
+
div.surname-container > div.metadata_surname-logo div.image-container > div.icon-button-wrapper,
|
273 |
+
div.email-container > div.metadata_email-logo div.image-container > div.icon-button-wrapper,
|
274 |
+
div.phone-container > div.metadata_phone-logo div.image-container > div.icon-button-wrapper {
|
275 |
+
display: none;
|
276 |
}
|
277 |
|
278 |
div.name-container > div.metadata_name-logo div.image-container > button > div > img,
|
app.py
CHANGED
@@ -12,12 +12,15 @@ from app.config import CONFIG_NAME, config_data, load_tab_creators
|
|
12 |
from app.event_handlers.event_handlers import setup_app_event_handlers
|
13 |
from app import tabs
|
14 |
from app.components import dropdown_create_ui
|
|
|
15 |
|
16 |
gr.set_static_paths(paths=[config_data.StaticPaths_IMAGES])
|
17 |
|
18 |
|
19 |
def create_gradio_app() -> gr.Blocks:
|
20 |
-
with gr.Blocks(
|
|
|
|
|
21 |
with gr.Column(
|
22 |
visible=True,
|
23 |
render=True,
|
@@ -39,6 +42,7 @@ def create_gradio_app() -> gr.Blocks:
|
|
39 |
visible=True,
|
40 |
show_download_button=False,
|
41 |
elem_classes="country_flags",
|
|
|
42 |
)
|
43 |
|
44 |
languages = dropdown_create_ui(
|
@@ -81,4 +85,14 @@ def create_gradio_app() -> gr.Blocks:
|
|
81 |
|
82 |
|
83 |
if __name__ == "__main__":
|
84 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
from app.event_handlers.event_handlers import setup_app_event_handlers
|
13 |
from app import tabs
|
14 |
from app.components import dropdown_create_ui
|
15 |
+
from app.port import is_port_in_use, free_ports
|
16 |
|
17 |
gr.set_static_paths(paths=[config_data.StaticPaths_IMAGES])
|
18 |
|
19 |
|
20 |
def create_gradio_app() -> gr.Blocks:
|
21 |
+
with gr.Blocks(
|
22 |
+
theme=gr.themes.Default(), css_paths=config_data.AppSettings_CSS_PATH
|
23 |
+
) as gradio_app:
|
24 |
with gr.Column(
|
25 |
visible=True,
|
26 |
render=True,
|
|
|
42 |
visible=True,
|
43 |
show_download_button=False,
|
44 |
elem_classes="country_flags",
|
45 |
+
show_fullscreen_button=False,
|
46 |
)
|
47 |
|
48 |
languages = dropdown_create_ui(
|
|
|
85 |
|
86 |
|
87 |
if __name__ == "__main__":
|
88 |
+
ports_to_check = [config_data.AppSettings_PORT]
|
89 |
+
|
90 |
+
for port in filter(None, ports_to_check):
|
91 |
+
if is_port_in_use(config_data.AppSettings_SERVER_NAME, port):
|
92 |
+
free_ports(port)
|
93 |
+
|
94 |
+
create_gradio_app().queue(api_open=False).launch(
|
95 |
+
share=True,
|
96 |
+
server_name=config_data.AppSettings_SERVER_NAME,
|
97 |
+
server_port=config_data.AppSettings_PORT,
|
98 |
+
)
|
app/authors.py
CHANGED
@@ -76,7 +76,7 @@ AUTHORS = """
|
|
76 |
<a href="https://github.com/DmitryRyumin" style="display: inline-block;">
|
77 |
<img src="https://github-stats-alpha.vercel.app/api?username=DmitryRyumin&cc=3081F7&tc=FFFFFF&ic=FFFFFF&bc=FFFFFF" alt="" />
|
78 |
</a>
|
79 |
-
<div style="display: flex; flex-wrap: wrap;">
|
80 |
<img src="https://custom-icon-badges.demolab.com/badge/dynamic/json?style=flat-square&logo=fire&logoColor=fff&color=orange&label=GitHub%20streak&query=%24.currentStreak.length&suffix=%20days&url=https%3A%2F%2Fstreak-stats.demolab.com%2F%3Fuser%3Ddmitryryumin%26type%3Djson" alt="" style="margin-right: 6px; margin-bottom: 6px;" />
|
81 |
<img src="https://komarev.com/ghpvc/?username=DmitryRyumin&style=flat-square" alt="" style="margin-bottom: 6px;" />
|
82 |
</div>
|
|
|
76 |
<a href="https://github.com/DmitryRyumin" style="display: inline-block;">
|
77 |
<img src="https://github-stats-alpha.vercel.app/api?username=DmitryRyumin&cc=3081F7&tc=FFFFFF&ic=FFFFFF&bc=FFFFFF" alt="" />
|
78 |
</a>
|
79 |
+
<div style="display: flex; flex-wrap: wrap; align-items: flex-start;">
|
80 |
<img src="https://custom-icon-badges.demolab.com/badge/dynamic/json?style=flat-square&logo=fire&logoColor=fff&color=orange&label=GitHub%20streak&query=%24.currentStreak.length&suffix=%20days&url=https%3A%2F%2Fstreak-stats.demolab.com%2F%3Fuser%3Ddmitryryumin%26type%3Djson" alt="" style="margin-right: 6px; margin-bottom: 6px;" />
|
81 |
<img src="https://komarev.com/ghpvc/?username=DmitryRyumin&style=flat-square" alt="" style="margin-bottom: 6px;" />
|
82 |
</div>
|
app/components.py
CHANGED
@@ -13,11 +13,18 @@ from app.config import config_data
|
|
13 |
|
14 |
|
15 |
def html_message(
|
16 |
-
message: str = "",
|
|
|
|
|
|
|
17 |
) -> gr.HTML:
|
18 |
css_class = "noti_err" if not error else "noti_true"
|
19 |
|
20 |
-
return gr.HTML(
|
|
|
|
|
|
|
|
|
21 |
|
22 |
|
23 |
def files_create_ui(
|
@@ -53,7 +60,7 @@ def video_create_ui(
|
|
53 |
show_label: bool = True,
|
54 |
interactive: bool = False,
|
55 |
visible: bool = True,
|
56 |
-
elem_classes: Optional[str] = "
|
57 |
) -> gr.Video:
|
58 |
if file_name is not None:
|
59 |
label += f" ({file_name})"
|
|
|
13 |
|
14 |
|
15 |
def html_message(
|
16 |
+
message: str = "",
|
17 |
+
error: bool = True,
|
18 |
+
visible: bool = True,
|
19 |
+
elem_classes: Optional[str] = "html-container",
|
20 |
) -> gr.HTML:
|
21 |
css_class = "noti_err" if not error else "noti_true"
|
22 |
|
23 |
+
return gr.HTML(
|
24 |
+
value=f"<h3 class='{css_class}'>{message}</h3>",
|
25 |
+
visible=visible,
|
26 |
+
elem_classes=elem_classes,
|
27 |
+
)
|
28 |
|
29 |
|
30 |
def files_create_ui(
|
|
|
60 |
show_label: bool = True,
|
61 |
interactive: bool = False,
|
62 |
visible: bool = True,
|
63 |
+
elem_classes: Optional[str] = "video-container",
|
64 |
) -> gr.Video:
|
65 |
if file_name is not None:
|
66 |
label += f" ({file_name})"
|
app/data_init.py
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"""
|
2 |
+
File: data_init.py
|
3 |
+
Author: Elena Ryumina and Dmitry Ryumin
|
4 |
+
Description: Data initialization.
|
5 |
+
License: MIT License
|
6 |
+
"""
|
7 |
+
|
8 |
+
from app.config import config_data
|
9 |
+
from app.utils import read_csv_file, extract_profession_weights
|
10 |
+
|
11 |
+
|
12 |
+
df_traits_priority_for_professions = read_csv_file(config_data.Links_PROFESSIONS)
|
13 |
+
weights_professions, interactive_professions = extract_profession_weights(
|
14 |
+
df_traits_priority_for_professions,
|
15 |
+
config_data.Settings_DROPDOWN_CANDIDATES[0],
|
16 |
+
)
|
app/event_handlers/calculate_practical_tasks.py
CHANGED
@@ -6,18 +6,23 @@ License: MIT License
|
|
6 |
"""
|
7 |
|
8 |
from app.oceanai_init import b5
|
|
|
9 |
import re
|
10 |
import gradio as gr
|
11 |
from pathlib import Path
|
|
|
12 |
|
13 |
# Importing necessary components for the Gradio app
|
14 |
from app.config import config_data
|
15 |
from app.video_metadata import video_metadata
|
16 |
from app.mbti_description import MBTI_DESCRIPTION, MBTI_DATA
|
|
|
17 |
from app.utils import (
|
18 |
read_csv_file,
|
19 |
apply_rounding_and_rename_columns,
|
20 |
preprocess_scores_df,
|
|
|
|
|
21 |
)
|
22 |
from app.components import (
|
23 |
html_message,
|
@@ -166,7 +171,10 @@ def create_person_metadata(person_id, files, video_metadata):
|
|
166 |
|
167 |
|
168 |
def event_handler_calculate_practical_task_blocks(
|
|
|
|
|
169 |
files,
|
|
|
170 |
practical_subtasks,
|
171 |
pt_scores,
|
172 |
dropdown_mbti,
|
@@ -188,6 +196,11 @@ def event_handler_calculate_practical_task_blocks(
|
|
188 |
number_agreeableness,
|
189 |
number_non_neuroticism,
|
190 |
):
|
|
|
|
|
|
|
|
|
|
|
191 |
if practical_subtasks.lower() == "16 personality types of mbti":
|
192 |
df_correlation_coefficients = read_csv_file(config_data.Links_MBTI)
|
193 |
|
@@ -195,44 +208,107 @@ def event_handler_calculate_practical_task_blocks(
|
|
195 |
|
196 |
preprocess_scores_df(pt_scores_copy, config_data.Dataframes_PT_SCORES[0][0])
|
197 |
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
|
|
205 |
|
206 |
-
|
207 |
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
|
222 |
-
|
|
|
|
|
|
|
|
|
223 |
|
224 |
-
|
225 |
|
226 |
-
|
|
|
|
|
227 |
|
228 |
-
|
229 |
-
|
230 |
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
|
235 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
236 |
|
237 |
existing_tuple = (
|
238 |
gr.Row(visible=True),
|
@@ -277,117 +353,226 @@ def event_handler_calculate_practical_task_blocks(
|
|
277 |
|
278 |
return existing_tuple[:-1] + person_metadata + existing_tuple[-1:]
|
279 |
elif practical_subtasks.lower() == "professional groups":
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
if sum_weights != 100:
|
291 |
-
gr.Warning(config_data.InformationMessages_SUM_WEIGHTS.format(sum_weights))
|
292 |
-
|
293 |
-
return (
|
294 |
-
gr.Row(visible=False),
|
295 |
-
gr.Column(visible=False),
|
296 |
-
dataframe(visible=False),
|
297 |
-
files_create_ui(
|
298 |
-
None,
|
299 |
-
"single",
|
300 |
-
[".csv"],
|
301 |
-
config_data.OtherMessages_EXPORT_PS,
|
302 |
-
True,
|
303 |
-
False,
|
304 |
-
False,
|
305 |
-
"csv-container",
|
306 |
-
),
|
307 |
-
gr.Accordion(visible=False),
|
308 |
-
gr.HTML(visible=False),
|
309 |
-
dataframe(visible=False),
|
310 |
-
gr.Column(visible=False),
|
311 |
-
video_create_ui(visible=False),
|
312 |
-
gr.Column(visible=False),
|
313 |
-
gr.Row(visible=False),
|
314 |
-
gr.Row(visible=False),
|
315 |
-
gr.Image(visible=False),
|
316 |
-
textbox_create_ui(visible=False),
|
317 |
-
gr.Row(visible=False),
|
318 |
-
gr.Image(visible=False),
|
319 |
-
textbox_create_ui(visible=False),
|
320 |
-
gr.Row(visible=False),
|
321 |
-
gr.Row(visible=False),
|
322 |
-
gr.Image(visible=False),
|
323 |
-
textbox_create_ui(visible=False),
|
324 |
-
gr.Row(visible=False),
|
325 |
-
gr.Image(visible=False),
|
326 |
-
textbox_create_ui(visible=False),
|
327 |
-
html_message(
|
328 |
-
config_data.InformationMessages_SUM_WEIGHTS.format(sum_weights),
|
329 |
-
False,
|
330 |
-
True,
|
331 |
-
),
|
332 |
-
)
|
333 |
-
else:
|
334 |
-
b5._candidate_ranking(
|
335 |
-
df_files=pt_scores.iloc[:, 1:],
|
336 |
-
weigths_openness=number_openness,
|
337 |
-
weigths_conscientiousness=number_conscientiousness,
|
338 |
-
weigths_extraversion=number_extraversion,
|
339 |
-
weigths_agreeableness=number_agreeableness,
|
340 |
-
weigths_non_neuroticism=number_non_neuroticism,
|
341 |
-
out=False,
|
342 |
)
|
343 |
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
351 |
|
352 |
-
|
353 |
-
|
354 |
-
)
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
label="Best Person ID - " + str(person_id + 1),
|
384 |
-
visible=True,
|
385 |
-
elem_classes="video-sorted-container",
|
386 |
-
),
|
387 |
-
html_message(config_data.InformationMessages_NOTI_IN_DEV, False, False),
|
388 |
-
)
|
389 |
|
390 |
-
|
391 |
elif practical_subtasks.lower() == "professional skills":
|
392 |
df_professional_skills = read_csv_file(config_data.Links_PROFESSIONAL_SKILLS)
|
393 |
|
@@ -400,26 +585,44 @@ def event_handler_calculate_practical_task_blocks(
|
|
400 |
|
401 |
df = apply_rounding_and_rename_columns(b5.df_files_priority_skill_)
|
402 |
|
403 |
-
|
404 |
-
|
405 |
-
|
|
|
|
|
|
|
406 |
|
407 |
-
|
|
|
|
|
|
|
408 |
|
409 |
df_hidden = df.drop(
|
410 |
columns=config_data.Settings_SHORT_PROFESSIONAL_SKILLS
|
411 |
+ professional_skills_list
|
|
|
412 |
)
|
413 |
|
414 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
415 |
|
416 |
-
df_hidden.reset_index(inplace=True)
|
417 |
|
418 |
-
df_hidden
|
419 |
-
by=[dropdown_professional_skills], ascending=False
|
420 |
-
)
|
421 |
|
422 |
-
|
|
|
|
|
|
|
|
|
|
|
423 |
|
424 |
person_metadata = create_person_metadata(person_id, files, video_metadata)
|
425 |
|
|
|
6 |
"""
|
7 |
|
8 |
from app.oceanai_init import b5
|
9 |
+
import pandas as pd
|
10 |
import re
|
11 |
import gradio as gr
|
12 |
from pathlib import Path
|
13 |
+
from bs4 import BeautifulSoup
|
14 |
|
15 |
# Importing necessary components for the Gradio app
|
16 |
from app.config import config_data
|
17 |
from app.video_metadata import video_metadata
|
18 |
from app.mbti_description import MBTI_DESCRIPTION, MBTI_DATA
|
19 |
+
from app.data_init import df_traits_priority_for_professions
|
20 |
from app.utils import (
|
21 |
read_csv_file,
|
22 |
apply_rounding_and_rename_columns,
|
23 |
preprocess_scores_df,
|
24 |
+
get_language_settings,
|
25 |
+
extract_profession_weights,
|
26 |
)
|
27 |
from app.components import (
|
28 |
html_message,
|
|
|
171 |
|
172 |
|
173 |
def event_handler_calculate_practical_task_blocks(
|
174 |
+
language,
|
175 |
+
type_modes,
|
176 |
files,
|
177 |
+
video,
|
178 |
practical_subtasks,
|
179 |
pt_scores,
|
180 |
dropdown_mbti,
|
|
|
196 |
number_agreeableness,
|
197 |
number_non_neuroticism,
|
198 |
):
|
199 |
+
lang_id, _ = get_language_settings(language)
|
200 |
+
|
201 |
+
if type_modes == config_data.Settings_TYPE_MODES[1]:
|
202 |
+
files = [video]
|
203 |
+
|
204 |
if practical_subtasks.lower() == "16 personality types of mbti":
|
205 |
df_correlation_coefficients = read_csv_file(config_data.Links_MBTI)
|
206 |
|
|
|
208 |
|
209 |
preprocess_scores_df(pt_scores_copy, config_data.Dataframes_PT_SCORES[0][0])
|
210 |
|
211 |
+
if type_modes == config_data.Settings_TYPE_MODES[0]:
|
212 |
+
b5._professional_match(
|
213 |
+
df_files=pt_scores_copy,
|
214 |
+
correlation_coefficients=df_correlation_coefficients,
|
215 |
+
personality_type=remove_parentheses(dropdown_mbti),
|
216 |
+
threshold=threshold_mbti,
|
217 |
+
out=False,
|
218 |
+
)
|
219 |
|
220 |
+
df = apply_rounding_and_rename_columns(b5.df_files_MBTI_job_match_)
|
221 |
|
222 |
+
df_hidden = df.drop(
|
223 |
+
columns=config_data.Settings_SHORT_PROFESSIONAL_SKILLS
|
224 |
+
+ config_data.Settings_DROPDOWN_MBTI_DEL_COLS
|
225 |
+
)
|
226 |
|
227 |
+
df_hidden.rename(
|
228 |
+
columns={
|
229 |
+
"Path": "Filename",
|
230 |
+
"MBTI": "Personality Type",
|
231 |
+
"MBTI_Score": "Personality Type Score",
|
232 |
+
},
|
233 |
+
inplace=True,
|
234 |
+
)
|
235 |
|
236 |
+
df_copy = df_hidden.copy()
|
237 |
+
df_copy["Personality Type"] = df_copy["Personality Type"].apply(
|
238 |
+
lambda x: "".join(BeautifulSoup(x, "html.parser").stripped_strings)
|
239 |
+
)
|
240 |
+
df_copy.to_csv(config_data.Filenames_MBTI_JOB, index=False)
|
241 |
|
242 |
+
df_hidden.reset_index(inplace=True)
|
243 |
|
244 |
+
person_id = (
|
245 |
+
int(df_hidden.iloc[0][config_data.Dataframes_PT_SCORES[0][0]]) - 1
|
246 |
+
)
|
247 |
|
248 |
+
short_mbti = extract_text_in_parentheses(dropdown_mbti)
|
249 |
+
mbti_values = df_hidden["Personality Type"].tolist()
|
250 |
|
251 |
+
df_hidden["Personality Type"] = [
|
252 |
+
compare_strings(short_mbti, mbti, False) for mbti in mbti_values
|
253 |
+
]
|
254 |
|
255 |
+
person_metadata = create_person_metadata(person_id, files, video_metadata)
|
256 |
+
elif type_modes == config_data.Settings_TYPE_MODES[1]:
|
257 |
+
all_hidden_dfs = []
|
258 |
+
|
259 |
+
for dropdown_mbti in config_data.Settings_DROPDOWN_MBTI:
|
260 |
+
b5._professional_match(
|
261 |
+
df_files=pt_scores_copy,
|
262 |
+
correlation_coefficients=df_correlation_coefficients,
|
263 |
+
personality_type=remove_parentheses(dropdown_mbti),
|
264 |
+
threshold=threshold_mbti,
|
265 |
+
out=False,
|
266 |
+
)
|
267 |
+
|
268 |
+
df = apply_rounding_and_rename_columns(b5.df_files_MBTI_job_match_)
|
269 |
+
|
270 |
+
df_hidden = df.drop(
|
271 |
+
columns=config_data.Settings_SHORT_PROFESSIONAL_SKILLS
|
272 |
+
+ config_data.Settings_DROPDOWN_MBTI_DEL_COLS
|
273 |
+
+ config_data.Settings_DROPDOWN_MBTI_DEL_COLS_WEBCAM
|
274 |
+
)
|
275 |
+
|
276 |
+
df_hidden.insert(0, "Popular Occupations", dropdown_mbti)
|
277 |
+
|
278 |
+
df_hidden.rename(
|
279 |
+
columns={
|
280 |
+
"MBTI": "Personality Type",
|
281 |
+
"MBTI_Score": "Personality Type Score",
|
282 |
+
},
|
283 |
+
inplace=True,
|
284 |
+
)
|
285 |
+
|
286 |
+
short_mbti = extract_text_in_parentheses(dropdown_mbti)
|
287 |
+
mbti_values = df_hidden["Personality Type"].tolist()
|
288 |
+
|
289 |
+
df_hidden["Personality Type"] = [
|
290 |
+
compare_strings(short_mbti, mbti, False) for mbti in mbti_values
|
291 |
+
]
|
292 |
+
|
293 |
+
all_hidden_dfs.append(df_hidden)
|
294 |
+
|
295 |
+
df_hidden = pd.concat(all_hidden_dfs, ignore_index=True)
|
296 |
+
|
297 |
+
df_hidden = df_hidden.sort_values(
|
298 |
+
by="Personality Type Score", ascending=False
|
299 |
+
)
|
300 |
+
|
301 |
+
df_hidden.reset_index(drop=True, inplace=True)
|
302 |
+
|
303 |
+
df_copy = df_hidden.copy()
|
304 |
+
df_copy["Personality Type"] = df_copy["Personality Type"].apply(
|
305 |
+
lambda x: "".join(BeautifulSoup(x, "html.parser").stripped_strings)
|
306 |
+
)
|
307 |
+
df_copy.to_csv(config_data.Filenames_MBTI_JOB, index=False)
|
308 |
+
|
309 |
+
person_id = 0
|
310 |
+
|
311 |
+
person_metadata = create_person_metadata(person_id, files, video_metadata)
|
312 |
|
313 |
existing_tuple = (
|
314 |
gr.Row(visible=True),
|
|
|
353 |
|
354 |
return existing_tuple[:-1] + person_metadata + existing_tuple[-1:]
|
355 |
elif practical_subtasks.lower() == "professional groups":
|
356 |
+
if type_modes == config_data.Settings_TYPE_MODES[0]:
|
357 |
+
sum_weights = sum(
|
358 |
+
[
|
359 |
+
number_openness,
|
360 |
+
number_conscientiousness,
|
361 |
+
number_extraversion,
|
362 |
+
number_agreeableness,
|
363 |
+
number_non_neuroticism,
|
364 |
+
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
365 |
)
|
366 |
|
367 |
+
if sum_weights != 100:
|
368 |
+
gr.Warning(
|
369 |
+
config_data.InformationMessages_SUM_WEIGHTS.format(sum_weights)
|
370 |
+
)
|
371 |
+
|
372 |
+
return (
|
373 |
+
gr.Row(visible=False),
|
374 |
+
gr.Column(visible=False),
|
375 |
+
dataframe(visible=False),
|
376 |
+
files_create_ui(
|
377 |
+
None,
|
378 |
+
"single",
|
379 |
+
[".csv"],
|
380 |
+
config_data.OtherMessages_EXPORT_PS,
|
381 |
+
True,
|
382 |
+
False,
|
383 |
+
False,
|
384 |
+
"csv-container",
|
385 |
+
),
|
386 |
+
gr.Accordion(visible=False),
|
387 |
+
gr.HTML(visible=False),
|
388 |
+
dataframe(visible=False),
|
389 |
+
gr.Column(visible=False),
|
390 |
+
video_create_ui(visible=False),
|
391 |
+
gr.Column(visible=False),
|
392 |
+
gr.Row(visible=False),
|
393 |
+
gr.Row(visible=False),
|
394 |
+
gr.Image(visible=False),
|
395 |
+
textbox_create_ui(visible=False),
|
396 |
+
gr.Row(visible=False),
|
397 |
+
gr.Image(visible=False),
|
398 |
+
textbox_create_ui(visible=False),
|
399 |
+
gr.Row(visible=False),
|
400 |
+
gr.Row(visible=False),
|
401 |
+
gr.Image(visible=False),
|
402 |
+
textbox_create_ui(visible=False),
|
403 |
+
gr.Row(visible=False),
|
404 |
+
gr.Image(visible=False),
|
405 |
+
textbox_create_ui(visible=False),
|
406 |
+
html_message(
|
407 |
+
config_data.InformationMessages_SUM_WEIGHTS.format(sum_weights),
|
408 |
+
False,
|
409 |
+
True,
|
410 |
+
),
|
411 |
+
)
|
412 |
+
else:
|
413 |
+
b5._candidate_ranking(
|
414 |
+
df_files=pt_scores.iloc[:, 1:],
|
415 |
+
weigths_openness=number_openness,
|
416 |
+
weigths_conscientiousness=number_conscientiousness,
|
417 |
+
weigths_extraversion=number_extraversion,
|
418 |
+
weigths_agreeableness=number_agreeableness,
|
419 |
+
weigths_non_neuroticism=number_non_neuroticism,
|
420 |
+
out=False,
|
421 |
+
)
|
422 |
+
|
423 |
+
df = apply_rounding_and_rename_columns(b5.df_files_ranking_)
|
424 |
+
|
425 |
+
df_hidden = df.drop(
|
426 |
+
columns=config_data.Settings_SHORT_PROFESSIONAL_SKILLS
|
427 |
+
)
|
428 |
+
|
429 |
+
df_hidden.to_csv(config_data.Filenames_POTENTIAL_CANDIDATES)
|
430 |
+
|
431 |
+
df_hidden.reset_index(inplace=True)
|
432 |
+
|
433 |
+
person_id = (
|
434 |
+
int(df_hidden.iloc[0][config_data.Dataframes_PT_SCORES[0][0]]) - 1
|
435 |
+
)
|
436 |
+
|
437 |
+
person_metadata = create_person_metadata(
|
438 |
+
person_id, files, video_metadata
|
439 |
+
)
|
440 |
+
elif type_modes == config_data.Settings_TYPE_MODES[1]:
|
441 |
+
all_hidden_dfs = []
|
442 |
+
|
443 |
+
for dropdown_candidate in config_data.Settings_DROPDOWN_CANDIDATES[:-1]:
|
444 |
+
weights, _ = extract_profession_weights(
|
445 |
+
df_traits_priority_for_professions,
|
446 |
+
dropdown_candidate,
|
447 |
+
)
|
448 |
+
|
449 |
+
sum_weights = sum(weights)
|
450 |
+
|
451 |
+
if sum_weights != 100:
|
452 |
+
gr.Warning(
|
453 |
+
config_data.InformationMessages_SUM_WEIGHTS.format(sum_weights)
|
454 |
+
)
|
455 |
+
|
456 |
+
return (
|
457 |
+
gr.Row(visible=False),
|
458 |
+
gr.Column(visible=False),
|
459 |
+
dataframe(visible=False),
|
460 |
+
files_create_ui(
|
461 |
+
None,
|
462 |
+
"single",
|
463 |
+
[".csv"],
|
464 |
+
config_data.OtherMessages_EXPORT_PS,
|
465 |
+
True,
|
466 |
+
False,
|
467 |
+
False,
|
468 |
+
"csv-container",
|
469 |
+
),
|
470 |
+
gr.Accordion(visible=False),
|
471 |
+
gr.HTML(visible=False),
|
472 |
+
dataframe(visible=False),
|
473 |
+
gr.Column(visible=False),
|
474 |
+
video_create_ui(visible=False),
|
475 |
+
gr.Column(visible=False),
|
476 |
+
gr.Row(visible=False),
|
477 |
+
gr.Row(visible=False),
|
478 |
+
gr.Image(visible=False),
|
479 |
+
textbox_create_ui(visible=False),
|
480 |
+
gr.Row(visible=False),
|
481 |
+
gr.Image(visible=False),
|
482 |
+
textbox_create_ui(visible=False),
|
483 |
+
gr.Row(visible=False),
|
484 |
+
gr.Row(visible=False),
|
485 |
+
gr.Image(visible=False),
|
486 |
+
textbox_create_ui(visible=False),
|
487 |
+
gr.Row(visible=False),
|
488 |
+
gr.Image(visible=False),
|
489 |
+
textbox_create_ui(visible=False),
|
490 |
+
html_message(
|
491 |
+
config_data.InformationMessages_SUM_WEIGHTS.format(
|
492 |
+
sum_weights
|
493 |
+
),
|
494 |
+
False,
|
495 |
+
True,
|
496 |
+
),
|
497 |
+
)
|
498 |
+
else:
|
499 |
+
b5._candidate_ranking(
|
500 |
+
df_files=pt_scores.iloc[:, 1:],
|
501 |
+
weigths_openness=weights[0],
|
502 |
+
weigths_conscientiousness=weights[1],
|
503 |
+
weigths_extraversion=weights[2],
|
504 |
+
weigths_agreeableness=weights[3],
|
505 |
+
weigths_non_neuroticism=weights[4],
|
506 |
+
out=False,
|
507 |
+
)
|
508 |
+
|
509 |
+
df = apply_rounding_and_rename_columns(b5.df_files_ranking_)
|
510 |
+
|
511 |
+
df_hidden = df.drop(
|
512 |
+
columns=config_data.Settings_SHORT_PROFESSIONAL_SKILLS
|
513 |
+
+ config_data.Settings_DROPDOWN_MBTI_DEL_COLS_WEBCAM
|
514 |
+
)
|
515 |
+
|
516 |
+
df_hidden.insert(0, "Professional Group", dropdown_candidate)
|
517 |
+
|
518 |
+
all_hidden_dfs.append(df_hidden)
|
519 |
+
|
520 |
+
df_hidden = pd.concat(all_hidden_dfs, ignore_index=True)
|
521 |
+
|
522 |
+
df_hidden.rename(
|
523 |
+
columns={
|
524 |
+
"Candidate score": "Summary Score",
|
525 |
+
},
|
526 |
+
inplace=True,
|
527 |
+
)
|
528 |
+
|
529 |
+
df_hidden = df_hidden.sort_values(by="Summary Score", ascending=False)
|
530 |
+
|
531 |
+
df_hidden.reset_index(drop=True, inplace=True)
|
532 |
+
|
533 |
+
df_hidden.to_csv(
|
534 |
+
config_data.Filenames_POTENTIAL_CANDIDATES, index=False
|
535 |
+
)
|
536 |
+
|
537 |
+
person_id = 0
|
538 |
+
|
539 |
+
person_metadata = create_person_metadata(
|
540 |
+
person_id, files, video_metadata
|
541 |
+
)
|
542 |
|
543 |
+
existing_tuple = (
|
544 |
+
gr.Row(visible=True),
|
545 |
+
gr.Column(visible=True),
|
546 |
+
dataframe(
|
547 |
+
headers=df_hidden.columns.tolist(),
|
548 |
+
values=df_hidden.values.tolist(),
|
549 |
+
visible=True,
|
550 |
+
),
|
551 |
+
files_create_ui(
|
552 |
+
config_data.Filenames_POTENTIAL_CANDIDATES,
|
553 |
+
"single",
|
554 |
+
[".csv"],
|
555 |
+
config_data.OtherMessages_EXPORT_PG,
|
556 |
+
True,
|
557 |
+
False,
|
558 |
+
True,
|
559 |
+
"csv-container",
|
560 |
+
),
|
561 |
+
gr.Accordion(visible=False),
|
562 |
+
gr.HTML(visible=False),
|
563 |
+
dataframe(visible=False),
|
564 |
+
gr.Column(visible=True),
|
565 |
+
video_create_ui(
|
566 |
+
value=files[person_id],
|
567 |
+
file_name=Path(files[person_id]).name,
|
568 |
+
label="Best Person ID - " + str(person_id + 1),
|
569 |
+
visible=True,
|
570 |
+
elem_classes="video-sorted-container",
|
571 |
+
),
|
572 |
+
html_message(config_data.InformationMessages_NOTI_IN_DEV, False, False),
|
573 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
574 |
|
575 |
+
return existing_tuple[:-1] + person_metadata + existing_tuple[-1:]
|
576 |
elif practical_subtasks.lower() == "professional skills":
|
577 |
df_professional_skills = read_csv_file(config_data.Links_PROFESSIONAL_SKILLS)
|
578 |
|
|
|
585 |
|
586 |
df = apply_rounding_and_rename_columns(b5.df_files_priority_skill_)
|
587 |
|
588 |
+
if type_modes == config_data.Settings_TYPE_MODES[0]:
|
589 |
+
professional_skills_list = (
|
590 |
+
config_data.Settings_DROPDOWN_PROFESSIONAL_SKILLS.copy()
|
591 |
+
)
|
592 |
+
|
593 |
+
professional_skills_list.remove(dropdown_professional_skills)
|
594 |
|
595 |
+
del_cols = []
|
596 |
+
elif type_modes == config_data.Settings_TYPE_MODES[1]:
|
597 |
+
professional_skills_list = []
|
598 |
+
del_cols = config_data.Settings_DROPDOWN_MBTI_DEL_COLS_WEBCAM
|
599 |
|
600 |
df_hidden = df.drop(
|
601 |
columns=config_data.Settings_SHORT_PROFESSIONAL_SKILLS
|
602 |
+ professional_skills_list
|
603 |
+
+ del_cols
|
604 |
)
|
605 |
|
606 |
+
if type_modes == config_data.Settings_TYPE_MODES[0]:
|
607 |
+
df_hidden = df_hidden.sort_values(
|
608 |
+
by=[dropdown_professional_skills], ascending=False
|
609 |
+
)
|
610 |
+
elif type_modes == config_data.Settings_TYPE_MODES[1]:
|
611 |
+
df_hidden = df_hidden.melt(
|
612 |
+
var_name="Professional Skill", value_name="Summary Score"
|
613 |
+
)
|
614 |
+
df_hidden = df_hidden.sort_values(by=["Summary Score"], ascending=False)
|
615 |
|
616 |
+
df_hidden.reset_index(drop=True, inplace=True)
|
617 |
|
618 |
+
df_hidden.to_csv(config_data.Filenames_PT_SKILLS_SCORES)
|
|
|
|
|
619 |
|
620 |
+
if type_modes == config_data.Settings_TYPE_MODES[0]:
|
621 |
+
person_id = (
|
622 |
+
int(df_hidden.iloc[0][config_data.Dataframes_PT_SCORES[0][0]]) - 1
|
623 |
+
)
|
624 |
+
elif type_modes == config_data.Settings_TYPE_MODES[1]:
|
625 |
+
person_id = 0
|
626 |
|
627 |
person_metadata = create_person_metadata(person_id, files, video_metadata)
|
628 |
|
app/event_handlers/calculate_pt_scores_blocks.py
CHANGED
@@ -26,23 +26,52 @@ from app.components import (
|
|
26 |
)
|
27 |
|
28 |
|
29 |
-
def event_handler_calculate_pt_scores_blocks(
|
|
|
|
|
30 |
_ = evt_data.target.__class__.__name__
|
31 |
|
32 |
lang_id, _ = get_language_settings(language)
|
33 |
|
34 |
out = False
|
35 |
-
b5.get_avt_predictions_gradio(
|
36 |
-
paths=files, url_accuracy="", accuracy=False, lang="en", out=out
|
37 |
-
)
|
38 |
|
39 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
|
41 |
-
|
42 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
43 |
|
44 |
return (
|
45 |
-
html_message(
|
|
|
|
|
|
|
|
|
46 |
dataframe(visible=False),
|
47 |
files_create_ui(
|
48 |
None,
|
@@ -59,23 +88,24 @@ def event_handler_calculate_pt_scores_blocks(language, files, evt_data: gr.Event
|
|
59 |
radio_create_ui(
|
60 |
first_practical_task,
|
61 |
config_data.Labels_PRACTICAL_TASKS_LABEL,
|
62 |
-
list(map(str,
|
63 |
-
config_data.InformationMessages_PRACTICAL_TASKS_INFO,
|
64 |
True,
|
65 |
True,
|
66 |
),
|
67 |
radio_create_ui(
|
68 |
-
|
69 |
-
config_data.Labels_PRACTICAL_SUBTASKS_LABEL,
|
70 |
-
|
71 |
-
config_data.InformationMessages_PRACTICAL_SUBTASKS_INFO,
|
72 |
True,
|
73 |
True,
|
74 |
),
|
75 |
gr.JSON(
|
76 |
value={
|
77 |
-
str(task):
|
78 |
-
for
|
|
|
79 |
},
|
80 |
visible=False,
|
81 |
render=True,
|
@@ -149,9 +179,25 @@ def event_handler_calculate_pt_scores_blocks(language, files, evt_data: gr.Event
|
|
149 |
df_files = b5.df_files_.copy()
|
150 |
df_files.reset_index(inplace=True)
|
151 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
return (
|
153 |
html_message(
|
154 |
-
config_data.InformationMessages_NOTI_VIDEOS[lang_id],
|
|
|
|
|
|
|
155 |
),
|
156 |
dataframe(
|
157 |
headers=(config_data.Dataframes_PT_SCORES[lang_id]),
|
@@ -172,35 +218,38 @@ def event_handler_calculate_pt_scores_blocks(language, files, evt_data: gr.Event
|
|
172 |
gr.Column(visible=True),
|
173 |
radio_create_ui(
|
174 |
first_practical_task,
|
175 |
-
|
176 |
-
|
177 |
-
config_data.InformationMessages_PRACTICAL_TASKS_INFO,
|
178 |
True,
|
179 |
True,
|
180 |
),
|
181 |
radio_create_ui(
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
config_data.InformationMessages_PRACTICAL_SUBTASKS_INFO,
|
186 |
True,
|
187 |
True,
|
188 |
),
|
189 |
gr.JSON(
|
190 |
value={
|
191 |
-
str(task):
|
192 |
-
for
|
|
|
193 |
},
|
194 |
visible=False,
|
195 |
render=True,
|
196 |
),
|
197 |
-
gr.Column(
|
|
|
|
|
198 |
dropdown_create_ui(
|
199 |
label=f"Potential candidates by Personality Type of MBTI ({len(config_data.Settings_DROPDOWN_MBTI)})",
|
200 |
info=config_data.InformationMessages_DROPDOWN_MBTI_INFO,
|
201 |
choices=config_data.Settings_DROPDOWN_MBTI,
|
202 |
value=config_data.Settings_DROPDOWN_MBTI[0],
|
203 |
-
visible=True,
|
204 |
elem_classes="dropdown-container",
|
205 |
),
|
206 |
number_create_ui(
|
@@ -212,7 +261,7 @@ def event_handler_calculate_pt_scores_blocks(language, files, evt_data: gr.Event
|
|
212 |
info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(0, 1.0),
|
213 |
show_label=True,
|
214 |
interactive=True,
|
215 |
-
visible=True,
|
216 |
render=True,
|
217 |
elem_classes="number-container",
|
218 |
),
|
|
|
26 |
)
|
27 |
|
28 |
|
29 |
+
def event_handler_calculate_pt_scores_blocks(
|
30 |
+
language, type_modes, files, video, evt_data: gr.EventData
|
31 |
+
):
|
32 |
_ = evt_data.target.__class__.__name__
|
33 |
|
34 |
lang_id, _ = get_language_settings(language)
|
35 |
|
36 |
out = False
|
|
|
|
|
|
|
37 |
|
38 |
+
try:
|
39 |
+
b5.get_avt_predictions_gradio(
|
40 |
+
paths=(
|
41 |
+
files if type_modes == config_data.Settings_TYPE_MODES[0] else [video]
|
42 |
+
),
|
43 |
+
url_accuracy="",
|
44 |
+
accuracy=False,
|
45 |
+
lang="en",
|
46 |
+
out=out,
|
47 |
+
)
|
48 |
+
except TypeError:
|
49 |
+
out = True
|
50 |
+
|
51 |
+
if type_modes == config_data.Settings_TYPE_MODES[0]:
|
52 |
+
supported_practical_tasks_ren = supported_practical_tasks
|
53 |
+
elif type_modes == config_data.Settings_TYPE_MODES[1]:
|
54 |
+
rename_map = {
|
55 |
+
"Ranking potential candidates by professional responsibilities": "Estimating professional abilities",
|
56 |
+
"Ранжирование потенциальных кандидатов по профессиональным обязанностям": "Определить профессиональные возможности",
|
57 |
+
}
|
58 |
|
59 |
+
supported_practical_tasks_ren = [
|
60 |
+
{rename_map.get(k, k): v for k, v in d.items()}
|
61 |
+
for d in supported_practical_tasks
|
62 |
+
]
|
63 |
+
|
64 |
+
first_practical_task = next(iter(supported_practical_tasks_ren[lang_id]))
|
65 |
+
|
66 |
+
if out or len(b5.df_files_) == 0:
|
67 |
+
gr.Warning(config_data.OtherMessages_CALCULATE_PT_SCORES_ERR[lang_id])
|
68 |
|
69 |
return (
|
70 |
+
html_message(
|
71 |
+
config_data.OtherMessages_CALCULATE_PT_SCORES_ERR[lang_id],
|
72 |
+
False,
|
73 |
+
"notifications",
|
74 |
+
),
|
75 |
dataframe(visible=False),
|
76 |
files_create_ui(
|
77 |
None,
|
|
|
88 |
radio_create_ui(
|
89 |
first_practical_task,
|
90 |
config_data.Labels_PRACTICAL_TASKS_LABEL,
|
91 |
+
list(map(str, supported_practical_tasks_ren[lang_id].keys())),
|
92 |
+
config_data.InformationMessages_PRACTICAL_TASKS_INFO[lang_id],
|
93 |
True,
|
94 |
True,
|
95 |
),
|
96 |
radio_create_ui(
|
97 |
+
supported_practical_tasks_ren[lang_id][first_practical_task][0],
|
98 |
+
config_data.Labels_PRACTICAL_SUBTASKS_LABEL[lang_id],
|
99 |
+
supported_practical_tasks_ren[lang_id][first_practical_task],
|
100 |
+
config_data.InformationMessages_PRACTICAL_SUBTASKS_INFO[lang_id],
|
101 |
True,
|
102 |
True,
|
103 |
),
|
104 |
gr.JSON(
|
105 |
value={
|
106 |
+
str(task): supported_practical_tasks_ren[index].get(task, [None])[0]
|
107 |
+
for index in range(len(supported_practical_tasks_ren))
|
108 |
+
for task in supported_practical_tasks_ren[index].keys()
|
109 |
},
|
110 |
visible=False,
|
111 |
render=True,
|
|
|
179 |
df_files = b5.df_files_.copy()
|
180 |
df_files.reset_index(inplace=True)
|
181 |
|
182 |
+
if type_modes == config_data.Settings_TYPE_MODES[0]:
|
183 |
+
practical_tasks_choices = list(
|
184 |
+
map(str, supported_practical_tasks_ren[lang_id].keys())
|
185 |
+
)
|
186 |
+
elif type_modes == config_data.Settings_TYPE_MODES[1]:
|
187 |
+
practical_tasks_choices = [
|
188 |
+
value
|
189 |
+
for i, value in enumerate(
|
190 |
+
map(str, supported_practical_tasks_ren[lang_id].keys())
|
191 |
+
)
|
192 |
+
if i not in {1}
|
193 |
+
]
|
194 |
+
|
195 |
return (
|
196 |
html_message(
|
197 |
+
config_data.InformationMessages_NOTI_VIDEOS[lang_id],
|
198 |
+
False,
|
199 |
+
False,
|
200 |
+
"notifications",
|
201 |
),
|
202 |
dataframe(
|
203 |
headers=(config_data.Dataframes_PT_SCORES[lang_id]),
|
|
|
218 |
gr.Column(visible=True),
|
219 |
radio_create_ui(
|
220 |
first_practical_task,
|
221 |
+
config_data.Labels_PRACTICAL_TASKS_LABEL[lang_id],
|
222 |
+
practical_tasks_choices,
|
223 |
+
config_data.InformationMessages_PRACTICAL_TASKS_INFO[lang_id],
|
224 |
True,
|
225 |
True,
|
226 |
),
|
227 |
radio_create_ui(
|
228 |
+
supported_practical_tasks_ren[lang_id][first_practical_task][0],
|
229 |
+
config_data.Labels_PRACTICAL_SUBTASKS_LABEL[lang_id],
|
230 |
+
supported_practical_tasks_ren[lang_id][first_practical_task],
|
231 |
+
config_data.InformationMessages_PRACTICAL_SUBTASKS_INFO[lang_id],
|
232 |
True,
|
233 |
True,
|
234 |
),
|
235 |
gr.JSON(
|
236 |
value={
|
237 |
+
str(task): supported_practical_tasks_ren[index].get(task, [None])[0]
|
238 |
+
for index in range(len(supported_practical_tasks_ren))
|
239 |
+
for task in supported_practical_tasks_ren[index].keys()
|
240 |
},
|
241 |
visible=False,
|
242 |
render=True,
|
243 |
),
|
244 |
+
gr.Column(
|
245 |
+
visible=True if type_modes == config_data.Settings_TYPE_MODES[0] else False
|
246 |
+
),
|
247 |
dropdown_create_ui(
|
248 |
label=f"Potential candidates by Personality Type of MBTI ({len(config_data.Settings_DROPDOWN_MBTI)})",
|
249 |
info=config_data.InformationMessages_DROPDOWN_MBTI_INFO,
|
250 |
choices=config_data.Settings_DROPDOWN_MBTI,
|
251 |
value=config_data.Settings_DROPDOWN_MBTI[0],
|
252 |
+
visible=True if type_modes == config_data.Settings_TYPE_MODES[0] else False,
|
253 |
elem_classes="dropdown-container",
|
254 |
),
|
255 |
number_create_ui(
|
|
|
261 |
info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(0, 1.0),
|
262 |
show_label=True,
|
263 |
interactive=True,
|
264 |
+
visible=True if type_modes == config_data.Settings_TYPE_MODES[0] else False,
|
265 |
render=True,
|
266 |
elem_classes="number-container",
|
267 |
),
|
app/event_handlers/clear_blocks.py
CHANGED
@@ -25,20 +25,47 @@ from app.components import (
|
|
25 |
from app.utils import get_language_settings
|
26 |
|
27 |
|
28 |
-
def event_handler_clear_blocks(language):
|
29 |
lang_id, _ = get_language_settings(language)
|
30 |
|
31 |
-
first_practical_task = next(iter(supported_practical_tasks))
|
32 |
|
33 |
-
|
34 |
-
|
35 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
36 |
label="{} ({})".format(
|
37 |
config_data.OtherMessages_VIDEO_FILES[lang_id],
|
38 |
", ".join(config_data.Settings_SUPPORTED_VIDEO_EXT),
|
39 |
),
|
40 |
file_types=[f".{ext}" for ext in config_data.Settings_SUPPORTED_VIDEO_EXT],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
41 |
),
|
|
|
|
|
42 |
video_create_ui(),
|
43 |
button(
|
44 |
config_data.OtherMessages_CALCULATE_PT_SCORES[lang_id],
|
@@ -71,24 +98,25 @@ def event_handler_clear_blocks(language):
|
|
71 |
gr.Column(visible=False),
|
72 |
radio_create_ui(
|
73 |
first_practical_task,
|
74 |
-
|
75 |
-
list(map(str, supported_practical_tasks.keys())),
|
76 |
-
config_data.InformationMessages_PRACTICAL_TASKS_INFO,
|
77 |
True,
|
78 |
True,
|
79 |
),
|
80 |
radio_create_ui(
|
81 |
-
supported_practical_tasks[first_practical_task][0],
|
82 |
-
|
83 |
-
supported_practical_tasks[first_practical_task],
|
84 |
-
config_data.InformationMessages_PRACTICAL_SUBTASKS_INFO,
|
85 |
True,
|
86 |
True,
|
87 |
),
|
88 |
gr.JSON(
|
89 |
value={
|
90 |
-
str(task): supported_practical_tasks.get(task, [None])[0]
|
91 |
-
for
|
|
|
92 |
},
|
93 |
visible=False,
|
94 |
render=True,
|
|
|
25 |
from app.utils import get_language_settings
|
26 |
|
27 |
|
28 |
+
def event_handler_clear_blocks(language, type_modes):
|
29 |
lang_id, _ = get_language_settings(language)
|
30 |
|
31 |
+
first_practical_task = next(iter(supported_practical_tasks[lang_id]))
|
32 |
|
33 |
+
if type_modes == config_data.Settings_TYPE_MODES[0]:
|
34 |
+
files_ui = files_create_ui(
|
35 |
+
label="{} ({})".format(
|
36 |
+
config_data.OtherMessages_VIDEO_FILES[
|
37 |
+
config_data.AppSettings_DEFAULT_LANG_ID
|
38 |
+
],
|
39 |
+
", ".join(config_data.Settings_SUPPORTED_VIDEO_EXT),
|
40 |
+
),
|
41 |
+
file_types=[f".{ext}" for ext in config_data.Settings_SUPPORTED_VIDEO_EXT],
|
42 |
+
)
|
43 |
+
webcam = gr.Video(interactive=False, visible=False)
|
44 |
+
elif type_modes == config_data.Settings_TYPE_MODES[1]:
|
45 |
+
files_ui = files_create_ui(
|
46 |
label="{} ({})".format(
|
47 |
config_data.OtherMessages_VIDEO_FILES[lang_id],
|
48 |
", ".join(config_data.Settings_SUPPORTED_VIDEO_EXT),
|
49 |
),
|
50 |
file_types=[f".{ext}" for ext in config_data.Settings_SUPPORTED_VIDEO_EXT],
|
51 |
+
interactive=False,
|
52 |
+
visible=False,
|
53 |
+
)
|
54 |
+
webcam = gr.Video(interactive=True, visible=True)
|
55 |
+
|
56 |
+
return (
|
57 |
+
html_message(
|
58 |
+
(
|
59 |
+
config_data.InformationMessages_NOTI_VIDEOS[lang_id].split("(")[0]
|
60 |
+
if lang_id == 0
|
61 |
+
else config_data.InformationMessages_NOTI_VIDEOS[lang_id]
|
62 |
+
),
|
63 |
+
False,
|
64 |
+
True,
|
65 |
+
"notifications",
|
66 |
),
|
67 |
+
files_ui,
|
68 |
+
webcam,
|
69 |
video_create_ui(),
|
70 |
button(
|
71 |
config_data.OtherMessages_CALCULATE_PT_SCORES[lang_id],
|
|
|
98 |
gr.Column(visible=False),
|
99 |
radio_create_ui(
|
100 |
first_practical_task,
|
101 |
+
config_data.Labels_PRACTICAL_TASKS_LABEL[lang_id],
|
102 |
+
list(map(str, supported_practical_tasks[lang_id].keys())),
|
103 |
+
config_data.InformationMessages_PRACTICAL_TASKS_INFO[lang_id],
|
104 |
True,
|
105 |
True,
|
106 |
),
|
107 |
radio_create_ui(
|
108 |
+
supported_practical_tasks[lang_id][first_practical_task][0],
|
109 |
+
config_data.Labels_PRACTICAL_SUBTASKS_LABEL[lang_id],
|
110 |
+
supported_practical_tasks[lang_id][first_practical_task],
|
111 |
+
config_data.InformationMessages_PRACTICAL_SUBTASKS_INFO[lang_id],
|
112 |
True,
|
113 |
True,
|
114 |
),
|
115 |
gr.JSON(
|
116 |
value={
|
117 |
+
str(task): supported_practical_tasks[index].get(task, [None])[0]
|
118 |
+
for index in range(len(supported_practical_tasks))
|
119 |
+
for task in supported_practical_tasks[index].keys()
|
120 |
},
|
121 |
visible=False,
|
122 |
render=True,
|
app/event_handlers/dropdown_candidates.py
CHANGED
@@ -7,16 +7,13 @@ License: MIT License
|
|
7 |
|
8 |
# Importing necessary components for the Gradio app
|
9 |
from app.config import config_data
|
10 |
-
from app.utils import
|
11 |
-
from app.
|
|
|
12 |
|
13 |
|
14 |
def event_handler_dropdown_candidates(practical_subtasks, dropdown_candidates):
|
15 |
if practical_subtasks.lower() == "professional groups":
|
16 |
-
df_traits_priority_for_professions = read_csv_file(
|
17 |
-
config_data.Links_PROFESSIONS
|
18 |
-
)
|
19 |
-
|
20 |
weights, interactive = extract_profession_weights(
|
21 |
df_traits_priority_for_professions,
|
22 |
dropdown_candidates,
|
|
|
7 |
|
8 |
# Importing necessary components for the Gradio app
|
9 |
from app.config import config_data
|
10 |
+
from app.utils import extract_profession_weights
|
11 |
+
from app.data_init import df_traits_priority_for_professions
|
12 |
+
from app.components import number_create_ui
|
13 |
|
14 |
|
15 |
def event_handler_dropdown_candidates(practical_subtasks, dropdown_candidates):
|
16 |
if practical_subtasks.lower() == "professional groups":
|
|
|
|
|
|
|
|
|
17 |
weights, interactive = extract_profession_weights(
|
18 |
df_traits_priority_for_professions,
|
19 |
dropdown_candidates,
|
app/event_handlers/event_handlers.py
CHANGED
@@ -9,11 +9,13 @@ import gradio as gr
|
|
9 |
|
10 |
# Importing necessary components for the Gradio app
|
11 |
from app.event_handlers.languages import event_handler_languages
|
|
|
12 |
from app.event_handlers.files import (
|
13 |
event_handler_files,
|
14 |
event_handler_files_select,
|
15 |
event_handler_files_delete,
|
16 |
)
|
|
|
17 |
from app.event_handlers.examples_blocks import event_handler_examples_blocks
|
18 |
from app.event_handlers.clear_blocks import event_handler_clear_blocks
|
19 |
from app.event_handlers.calculate_pt_scores_blocks import (
|
@@ -33,6 +35,9 @@ def setup_app_event_handlers(
|
|
33 |
step_1,
|
34 |
notifications,
|
35 |
files,
|
|
|
|
|
|
|
36 |
video,
|
37 |
examples,
|
38 |
calculate_pt_scores,
|
@@ -101,7 +106,16 @@ def setup_app_event_handlers(
|
|
101 |
# Events
|
102 |
languages.select(
|
103 |
fn=event_handler_languages,
|
104 |
-
inputs=[
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
105 |
outputs=[
|
106 |
description,
|
107 |
step_1,
|
@@ -112,6 +126,8 @@ def setup_app_event_handlers(
|
|
112 |
tab3,
|
113 |
tab4,
|
114 |
files,
|
|
|
|
|
115 |
video,
|
116 |
examples,
|
117 |
calculate_pt_scores,
|
@@ -120,6 +136,77 @@ def setup_app_event_handlers(
|
|
120 |
pt_scores,
|
121 |
csv_pt_scores,
|
122 |
step_2,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
123 |
],
|
124 |
queue=True,
|
125 |
)
|
@@ -141,13 +228,17 @@ def setup_app_event_handlers(
|
|
141 |
[video],
|
142 |
queue=True,
|
143 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
144 |
gr.on(
|
145 |
triggers=[calculate_pt_scores.click],
|
146 |
fn=event_handler_calculate_pt_scores_blocks,
|
147 |
-
inputs=[
|
148 |
-
languages,
|
149 |
-
files,
|
150 |
-
],
|
151 |
outputs=[
|
152 |
notifications,
|
153 |
pt_scores,
|
@@ -208,18 +299,75 @@ def setup_app_event_handlers(
|
|
208 |
)
|
209 |
examples.click(
|
210 |
fn=event_handler_examples_blocks,
|
211 |
-
inputs=[],
|
212 |
outputs=[
|
|
|
213 |
files,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
214 |
],
|
215 |
queue=True,
|
216 |
)
|
217 |
clear_app.click(
|
218 |
fn=event_handler_clear_blocks,
|
219 |
-
inputs=[languages],
|
220 |
outputs=[
|
221 |
notifications,
|
222 |
files,
|
|
|
223 |
video,
|
224 |
calculate_pt_scores,
|
225 |
clear_app,
|
@@ -280,13 +428,19 @@ def setup_app_event_handlers(
|
|
280 |
)
|
281 |
practical_tasks.change(
|
282 |
event_handler_practical_tasks,
|
283 |
-
[practical_tasks, practical_subtasks_selected],
|
284 |
[practical_subtasks],
|
285 |
queue=True,
|
286 |
)
|
287 |
practical_subtasks.change(
|
288 |
event_handler_practical_subtasks,
|
289 |
-
[
|
|
|
|
|
|
|
|
|
|
|
|
|
290 |
[
|
291 |
practical_subtasks_selected,
|
292 |
settings_practical_tasks,
|
@@ -327,7 +481,10 @@ def setup_app_event_handlers(
|
|
327 |
calculate_practical_task.click(
|
328 |
fn=event_handler_calculate_practical_task_blocks,
|
329 |
inputs=[
|
|
|
|
|
330 |
files,
|
|
|
331 |
practical_subtasks,
|
332 |
pt_scores,
|
333 |
dropdown_mbti,
|
@@ -380,7 +537,7 @@ def setup_app_event_handlers(
|
|
380 |
)
|
381 |
practical_task_sorted.select(
|
382 |
event_handler_practical_task_sorted,
|
383 |
-
[files, practical_task_sorted],
|
384 |
[
|
385 |
video_sorted_column,
|
386 |
video_sorted,
|
|
|
9 |
|
10 |
# Importing necessary components for the Gradio app
|
11 |
from app.event_handlers.languages import event_handler_languages
|
12 |
+
from app.event_handlers.switching_modes import event_handler_switching_modes
|
13 |
from app.event_handlers.files import (
|
14 |
event_handler_files,
|
15 |
event_handler_files_select,
|
16 |
event_handler_files_delete,
|
17 |
)
|
18 |
+
from app.event_handlers.webcam import event_handler_webcam
|
19 |
from app.event_handlers.examples_blocks import event_handler_examples_blocks
|
20 |
from app.event_handlers.clear_blocks import event_handler_clear_blocks
|
21 |
from app.event_handlers.calculate_pt_scores_blocks import (
|
|
|
35 |
step_1,
|
36 |
notifications,
|
37 |
files,
|
38 |
+
webcam,
|
39 |
+
switching_modes,
|
40 |
+
type_modes,
|
41 |
video,
|
42 |
examples,
|
43 |
calculate_pt_scores,
|
|
|
106 |
# Events
|
107 |
languages.select(
|
108 |
fn=event_handler_languages,
|
109 |
+
inputs=[
|
110 |
+
languages,
|
111 |
+
files,
|
112 |
+
video,
|
113 |
+
type_modes,
|
114 |
+
pt_scores,
|
115 |
+
csv_pt_scores,
|
116 |
+
practical_tasks,
|
117 |
+
practical_subtasks,
|
118 |
+
],
|
119 |
outputs=[
|
120 |
description,
|
121 |
step_1,
|
|
|
126 |
tab3,
|
127 |
tab4,
|
128 |
files,
|
129 |
+
webcam,
|
130 |
+
switching_modes,
|
131 |
video,
|
132 |
examples,
|
133 |
calculate_pt_scores,
|
|
|
136 |
pt_scores,
|
137 |
csv_pt_scores,
|
138 |
step_2,
|
139 |
+
practical_tasks_column,
|
140 |
+
practical_tasks,
|
141 |
+
practical_subtasks,
|
142 |
+
],
|
143 |
+
queue=True,
|
144 |
+
)
|
145 |
+
switching_modes.click(
|
146 |
+
fn=event_handler_switching_modes,
|
147 |
+
inputs=[languages, type_modes],
|
148 |
+
outputs=[
|
149 |
+
notifications,
|
150 |
+
files,
|
151 |
+
webcam,
|
152 |
+
switching_modes,
|
153 |
+
type_modes,
|
154 |
+
video,
|
155 |
+
examples,
|
156 |
+
calculate_pt_scores,
|
157 |
+
clear_app,
|
158 |
+
pt_scores,
|
159 |
+
csv_pt_scores,
|
160 |
+
step_2,
|
161 |
+
practical_tasks_column,
|
162 |
+
practical_tasks,
|
163 |
+
practical_subtasks,
|
164 |
+
practical_subtasks_selected,
|
165 |
+
settings_practical_tasks,
|
166 |
+
dropdown_mbti,
|
167 |
+
threshold_mbti,
|
168 |
+
threshold_professional_skills,
|
169 |
+
dropdown_professional_skills,
|
170 |
+
target_score_ope,
|
171 |
+
target_score_con,
|
172 |
+
target_score_ext,
|
173 |
+
target_score_agr,
|
174 |
+
target_score_nneu,
|
175 |
+
equal_coefficient,
|
176 |
+
number_priority,
|
177 |
+
number_importance_traits,
|
178 |
+
threshold_consumer_preferences,
|
179 |
+
dropdown_candidates,
|
180 |
+
number_openness,
|
181 |
+
number_conscientiousness,
|
182 |
+
number_extraversion,
|
183 |
+
number_agreeableness,
|
184 |
+
number_non_neuroticism,
|
185 |
+
sorted_videos,
|
186 |
+
sorted_videos_column,
|
187 |
+
practical_task_sorted,
|
188 |
+
csv_practical_task_sorted,
|
189 |
+
mbti_accordion,
|
190 |
+
mbti_description,
|
191 |
+
mbti_description_data,
|
192 |
+
video_sorted_column,
|
193 |
+
video_sorted,
|
194 |
+
metadata,
|
195 |
+
metadata_1,
|
196 |
+
name_row,
|
197 |
+
name_logo,
|
198 |
+
name,
|
199 |
+
surname_row,
|
200 |
+
surname_logo,
|
201 |
+
surname,
|
202 |
+
metadata_2,
|
203 |
+
email_row,
|
204 |
+
email_logo,
|
205 |
+
email,
|
206 |
+
phone_row,
|
207 |
+
phone_logo,
|
208 |
+
phone,
|
209 |
+
in_development,
|
210 |
],
|
211 |
queue=True,
|
212 |
)
|
|
|
228 |
[video],
|
229 |
queue=True,
|
230 |
)
|
231 |
+
gr.on(
|
232 |
+
triggers=[webcam.upload, webcam.stop_recording],
|
233 |
+
fn=event_handler_webcam,
|
234 |
+
inputs=[languages, webcam, pt_scores],
|
235 |
+
outputs=[notifications, video, webcam, calculate_pt_scores, clear_app],
|
236 |
+
queue=True,
|
237 |
+
)
|
238 |
gr.on(
|
239 |
triggers=[calculate_pt_scores.click],
|
240 |
fn=event_handler_calculate_pt_scores_blocks,
|
241 |
+
inputs=[languages, type_modes, files, video],
|
|
|
|
|
|
|
242 |
outputs=[
|
243 |
notifications,
|
244 |
pt_scores,
|
|
|
299 |
)
|
300 |
examples.click(
|
301 |
fn=event_handler_examples_blocks,
|
302 |
+
inputs=[languages, type_modes],
|
303 |
outputs=[
|
304 |
+
notifications,
|
305 |
files,
|
306 |
+
video,
|
307 |
+
calculate_pt_scores,
|
308 |
+
clear_app,
|
309 |
+
pt_scores,
|
310 |
+
csv_pt_scores,
|
311 |
+
step_2,
|
312 |
+
practical_tasks_column,
|
313 |
+
practical_tasks,
|
314 |
+
practical_subtasks,
|
315 |
+
practical_subtasks_selected,
|
316 |
+
settings_practical_tasks,
|
317 |
+
dropdown_mbti,
|
318 |
+
threshold_mbti,
|
319 |
+
threshold_professional_skills,
|
320 |
+
dropdown_professional_skills,
|
321 |
+
target_score_ope,
|
322 |
+
target_score_con,
|
323 |
+
target_score_ext,
|
324 |
+
target_score_agr,
|
325 |
+
target_score_nneu,
|
326 |
+
equal_coefficient,
|
327 |
+
number_priority,
|
328 |
+
number_importance_traits,
|
329 |
+
threshold_consumer_preferences,
|
330 |
+
dropdown_candidates,
|
331 |
+
number_openness,
|
332 |
+
number_conscientiousness,
|
333 |
+
number_extraversion,
|
334 |
+
number_agreeableness,
|
335 |
+
number_non_neuroticism,
|
336 |
+
sorted_videos,
|
337 |
+
sorted_videos_column,
|
338 |
+
practical_task_sorted,
|
339 |
+
csv_practical_task_sorted,
|
340 |
+
mbti_accordion,
|
341 |
+
mbti_description,
|
342 |
+
mbti_description_data,
|
343 |
+
video_sorted_column,
|
344 |
+
video_sorted,
|
345 |
+
metadata,
|
346 |
+
metadata_1,
|
347 |
+
name_row,
|
348 |
+
name_logo,
|
349 |
+
name,
|
350 |
+
surname_row,
|
351 |
+
surname_logo,
|
352 |
+
surname,
|
353 |
+
metadata_2,
|
354 |
+
email_row,
|
355 |
+
email_logo,
|
356 |
+
email,
|
357 |
+
phone_row,
|
358 |
+
phone_logo,
|
359 |
+
phone,
|
360 |
+
in_development,
|
361 |
],
|
362 |
queue=True,
|
363 |
)
|
364 |
clear_app.click(
|
365 |
fn=event_handler_clear_blocks,
|
366 |
+
inputs=[languages, type_modes],
|
367 |
outputs=[
|
368 |
notifications,
|
369 |
files,
|
370 |
+
webcam,
|
371 |
video,
|
372 |
calculate_pt_scores,
|
373 |
clear_app,
|
|
|
428 |
)
|
429 |
practical_tasks.change(
|
430 |
event_handler_practical_tasks,
|
431 |
+
[languages, type_modes, practical_tasks, practical_subtasks_selected],
|
432 |
[practical_subtasks],
|
433 |
queue=True,
|
434 |
)
|
435 |
practical_subtasks.change(
|
436 |
event_handler_practical_subtasks,
|
437 |
+
[
|
438 |
+
languages,
|
439 |
+
type_modes,
|
440 |
+
practical_tasks,
|
441 |
+
practical_subtasks,
|
442 |
+
practical_subtasks_selected,
|
443 |
+
],
|
444 |
[
|
445 |
practical_subtasks_selected,
|
446 |
settings_practical_tasks,
|
|
|
481 |
calculate_practical_task.click(
|
482 |
fn=event_handler_calculate_practical_task_blocks,
|
483 |
inputs=[
|
484 |
+
languages,
|
485 |
+
type_modes,
|
486 |
files,
|
487 |
+
video,
|
488 |
practical_subtasks,
|
489 |
pt_scores,
|
490 |
dropdown_mbti,
|
|
|
537 |
)
|
538 |
practical_task_sorted.select(
|
539 |
event_handler_practical_task_sorted,
|
540 |
+
[type_modes, files, video, practical_task_sorted],
|
541 |
[
|
542 |
video_sorted_column,
|
543 |
video_sorted,
|
app/event_handlers/examples_blocks.py
CHANGED
@@ -6,25 +6,177 @@ License: MIT License
|
|
6 |
"""
|
7 |
|
8 |
import re
|
|
|
9 |
from pathlib import Path
|
10 |
|
11 |
# Importing necessary components for the Gradio app
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
|
13 |
-
# import hashlib
|
14 |
-
# import time
|
15 |
|
16 |
-
|
17 |
-
|
18 |
-
# time_bytes = str(current_time).encode("utf-8")
|
19 |
-
# hash_object = hashlib.sha256(time_bytes)
|
20 |
-
# hex_digest = hash_object.hexdigest()
|
21 |
-
# print(hex_digest[:15])
|
22 |
|
|
|
23 |
|
24 |
-
def event_handler_examples_blocks():
|
25 |
videos_dir = Path("videos")
|
26 |
video_files = sorted(
|
27 |
(str(p) for p in videos_dir.glob("*.mp4")),
|
28 |
key=lambda x: int(re.search(r"\d+", Path(x).stem).group()),
|
29 |
)
|
30 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
"""
|
7 |
|
8 |
import re
|
9 |
+
import gradio as gr
|
10 |
from pathlib import Path
|
11 |
|
12 |
# Importing necessary components for the Gradio app
|
13 |
+
from app.config import config_data
|
14 |
+
from app.description_steps import STEP_2
|
15 |
+
from app.practical_tasks import supported_practical_tasks
|
16 |
+
from app.components import (
|
17 |
+
html_message,
|
18 |
+
files_create_ui,
|
19 |
+
video_create_ui,
|
20 |
+
button,
|
21 |
+
dataframe,
|
22 |
+
radio_create_ui,
|
23 |
+
number_create_ui,
|
24 |
+
dropdown_create_ui,
|
25 |
+
textbox_create_ui,
|
26 |
+
)
|
27 |
+
from app.utils import get_language_settings
|
28 |
|
|
|
|
|
29 |
|
30 |
+
def event_handler_examples_blocks(language, type_modes):
|
31 |
+
lang_id, _ = get_language_settings(language)
|
|
|
|
|
|
|
|
|
32 |
|
33 |
+
first_practical_task = next(iter(supported_practical_tasks[lang_id]))
|
34 |
|
|
|
35 |
videos_dir = Path("videos")
|
36 |
video_files = sorted(
|
37 |
(str(p) for p in videos_dir.glob("*.mp4")),
|
38 |
key=lambda x: int(re.search(r"\d+", Path(x).stem).group()),
|
39 |
)
|
40 |
+
|
41 |
+
if type_modes == config_data.Settings_TYPE_MODES[0]:
|
42 |
+
files_ui = files_create_ui(
|
43 |
+
value=video_files,
|
44 |
+
label="{} ({})".format(
|
45 |
+
config_data.OtherMessages_VIDEO_FILES[lang_id],
|
46 |
+
", ".join(config_data.Settings_SUPPORTED_VIDEO_EXT),
|
47 |
+
),
|
48 |
+
file_types=[f".{ext}" for ext in config_data.Settings_SUPPORTED_VIDEO_EXT],
|
49 |
+
)
|
50 |
+
elif type_modes == config_data.Settings_TYPE_MODES[1]:
|
51 |
+
files_ui = files_create_ui(
|
52 |
+
label="{} ({})".format(
|
53 |
+
config_data.OtherMessages_VIDEO_FILES[lang_id],
|
54 |
+
", ".join(config_data.Settings_SUPPORTED_VIDEO_EXT),
|
55 |
+
),
|
56 |
+
file_types=[f".{ext}" for ext in config_data.Settings_SUPPORTED_VIDEO_EXT],
|
57 |
+
interactive=False,
|
58 |
+
visible=False,
|
59 |
+
)
|
60 |
+
|
61 |
+
return (
|
62 |
+
html_message(
|
63 |
+
config_data.OtherMessages_NOTI_CALCULATE[lang_id],
|
64 |
+
True,
|
65 |
+
True,
|
66 |
+
"notifications",
|
67 |
+
),
|
68 |
+
files_ui,
|
69 |
+
video_create_ui(
|
70 |
+
value=video_files[0],
|
71 |
+
label=config_data.OtherMessages_VIDEO_PLAYER[lang_id],
|
72 |
+
file_name=Path(Path(video_files[0]).name).name,
|
73 |
+
),
|
74 |
+
button(
|
75 |
+
config_data.OtherMessages_CALCULATE_PT_SCORES[lang_id],
|
76 |
+
True,
|
77 |
+
3,
|
78 |
+
"./images/calculate_pt_scores.ico",
|
79 |
+
True,
|
80 |
+
"calculate_oceanai",
|
81 |
+
),
|
82 |
+
button(
|
83 |
+
config_data.OtherMessages_CLEAR_APP[lang_id],
|
84 |
+
True,
|
85 |
+
1,
|
86 |
+
"./images/clear.ico",
|
87 |
+
True,
|
88 |
+
"clear_oceanai",
|
89 |
+
),
|
90 |
+
dataframe(visible=False),
|
91 |
+
files_create_ui(
|
92 |
+
None,
|
93 |
+
"single",
|
94 |
+
[".csv"],
|
95 |
+
config_data.OtherMessages_EXPORT_PT_SCORES[lang_id],
|
96 |
+
True,
|
97 |
+
False,
|
98 |
+
False,
|
99 |
+
"csv-container",
|
100 |
+
),
|
101 |
+
gr.HTML(value=STEP_2[lang_id], visible=False),
|
102 |
+
gr.Column(visible=False),
|
103 |
+
radio_create_ui(
|
104 |
+
first_practical_task,
|
105 |
+
config_data.Labels_PRACTICAL_TASKS_LABEL[lang_id],
|
106 |
+
list(map(str, supported_practical_tasks[lang_id].keys())),
|
107 |
+
config_data.InformationMessages_PRACTICAL_TASKS_INFO[lang_id],
|
108 |
+
True,
|
109 |
+
True,
|
110 |
+
),
|
111 |
+
radio_create_ui(
|
112 |
+
supported_practical_tasks[lang_id][first_practical_task][0],
|
113 |
+
config_data.Labels_PRACTICAL_SUBTASKS_LABEL[lang_id],
|
114 |
+
supported_practical_tasks[lang_id][first_practical_task],
|
115 |
+
config_data.InformationMessages_PRACTICAL_SUBTASKS_INFO[lang_id],
|
116 |
+
True,
|
117 |
+
True,
|
118 |
+
),
|
119 |
+
gr.JSON(
|
120 |
+
value={
|
121 |
+
str(task): supported_practical_tasks[index].get(task, [None])[0]
|
122 |
+
for index in range(len(supported_practical_tasks))
|
123 |
+
for task in supported_practical_tasks[index].keys()
|
124 |
+
},
|
125 |
+
visible=False,
|
126 |
+
render=True,
|
127 |
+
),
|
128 |
+
gr.Column(visible=False),
|
129 |
+
dropdown_create_ui(visible=False),
|
130 |
+
number_create_ui(visible=False),
|
131 |
+
number_create_ui(visible=False),
|
132 |
+
dropdown_create_ui(visible=False),
|
133 |
+
number_create_ui(visible=False),
|
134 |
+
number_create_ui(visible=False),
|
135 |
+
number_create_ui(visible=False),
|
136 |
+
number_create_ui(visible=False),
|
137 |
+
number_create_ui(visible=False),
|
138 |
+
number_create_ui(visible=False),
|
139 |
+
number_create_ui(visible=False),
|
140 |
+
number_create_ui(visible=False),
|
141 |
+
number_create_ui(visible=False),
|
142 |
+
dropdown_create_ui(visible=False),
|
143 |
+
number_create_ui(visible=False),
|
144 |
+
number_create_ui(visible=False),
|
145 |
+
number_create_ui(visible=False),
|
146 |
+
number_create_ui(visible=False),
|
147 |
+
number_create_ui(visible=False),
|
148 |
+
gr.Row(visible=False),
|
149 |
+
gr.Column(visible=False),
|
150 |
+
dataframe(visible=False),
|
151 |
+
files_create_ui(
|
152 |
+
None,
|
153 |
+
"single",
|
154 |
+
[".csv"],
|
155 |
+
config_data.OtherMessages_EXPORT_PS,
|
156 |
+
True,
|
157 |
+
False,
|
158 |
+
False,
|
159 |
+
"csv-container",
|
160 |
+
),
|
161 |
+
gr.Accordion(visible=False),
|
162 |
+
gr.HTML(visible=False),
|
163 |
+
dataframe(visible=False),
|
164 |
+
gr.Column(visible=False),
|
165 |
+
video_create_ui(visible=False),
|
166 |
+
gr.Column(visible=False),
|
167 |
+
gr.Row(visible=False),
|
168 |
+
gr.Row(visible=False),
|
169 |
+
gr.Image(visible=False),
|
170 |
+
textbox_create_ui(visible=False),
|
171 |
+
gr.Row(visible=False),
|
172 |
+
gr.Image(visible=False),
|
173 |
+
textbox_create_ui(visible=False),
|
174 |
+
gr.Row(visible=False),
|
175 |
+
gr.Row(visible=False),
|
176 |
+
gr.Image(visible=False),
|
177 |
+
textbox_create_ui(visible=False),
|
178 |
+
gr.Row(visible=False),
|
179 |
+
gr.Image(visible=False),
|
180 |
+
textbox_create_ui(visible=False),
|
181 |
+
html_message(config_data.InformationMessages_NOTI_IN_DEV, False, False),
|
182 |
+
)
|
app/event_handlers/files.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
"""
|
2 |
-
File:
|
3 |
Author: Elena Ryumina and Dmitry Ryumin
|
4 |
-
Description: Event handler for
|
5 |
License: MIT License
|
6 |
"""
|
7 |
|
@@ -19,7 +19,16 @@ def event_handler_files(language, files, video, pt_scores):
|
|
19 |
|
20 |
if not files:
|
21 |
return (
|
22 |
-
html_message(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
video_create_ui(label=config_data.OtherMessages_VIDEO_PLAYER[lang_id]),
|
24 |
button(
|
25 |
config_data.OtherMessages_CALCULATE_PT_SCORES[lang_id],
|
@@ -47,6 +56,7 @@ def event_handler_files(language, files, video, pt_scores):
|
|
47 |
config_data.OtherMessages_NOTI_CALCULATE[lang_id],
|
48 |
True,
|
49 |
False if pt_scores.shape[1] >= 7 else True,
|
|
|
50 |
),
|
51 |
video_create_ui(
|
52 |
value=video,
|
|
|
1 |
"""
|
2 |
+
File: files.py
|
3 |
Author: Elena Ryumina and Dmitry Ryumin
|
4 |
+
Description: Event handler for files.
|
5 |
License: MIT License
|
6 |
"""
|
7 |
|
|
|
19 |
|
20 |
if not files:
|
21 |
return (
|
22 |
+
html_message(
|
23 |
+
(
|
24 |
+
config_data.InformationMessages_NOTI_VIDEOS[lang_id].split("(")[0]
|
25 |
+
if lang_id == 0
|
26 |
+
else config_data.InformationMessages_NOTI_VIDEOS[lang_id]
|
27 |
+
),
|
28 |
+
False,
|
29 |
+
True,
|
30 |
+
"notifications",
|
31 |
+
),
|
32 |
video_create_ui(label=config_data.OtherMessages_VIDEO_PLAYER[lang_id]),
|
33 |
button(
|
34 |
config_data.OtherMessages_CALCULATE_PT_SCORES[lang_id],
|
|
|
56 |
config_data.OtherMessages_NOTI_CALCULATE[lang_id],
|
57 |
True,
|
58 |
False if pt_scores.shape[1] >= 7 else True,
|
59 |
+
"notifications",
|
60 |
),
|
61 |
video_create_ui(
|
62 |
value=video,
|
app/event_handlers/languages.py
CHANGED
@@ -19,17 +19,91 @@ from app.components import (
|
|
19 |
button,
|
20 |
html_message,
|
21 |
dataframe,
|
|
|
22 |
)
|
23 |
from app.utils import get_language_settings
|
|
|
24 |
|
25 |
|
26 |
-
def event_handler_languages(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
lang_id, choices = get_language_settings(languages)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
|
29 |
if not video:
|
30 |
video = video_create_ui(label=config_data.OtherMessages_VIDEO_PLAYER[lang_id])
|
31 |
noti_videos = html_message(
|
32 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
)
|
34 |
else:
|
35 |
video = video_create_ui(
|
@@ -41,6 +115,7 @@ def event_handler_languages(languages, files, video, pt_scores, csv_pt_scores):
|
|
41 |
config_data.OtherMessages_NOTI_CALCULATE[lang_id],
|
42 |
True,
|
43 |
False if pt_scores.shape[1] >= 7 else True,
|
|
|
44 |
)
|
45 |
|
46 |
csv_pt_scores = files_create_ui(
|
@@ -57,6 +132,10 @@ def event_handler_languages(languages, files, video, pt_scores, csv_pt_scores):
|
|
57 |
value=STEP_2[lang_id], visible=True if pt_scores.shape[1] >= 7 else False
|
58 |
)
|
59 |
|
|
|
|
|
|
|
|
|
60 |
if pt_scores.shape[1] >= 7:
|
61 |
pt_scores = dataframe(
|
62 |
headers=(config_data.Dataframes_PT_SCORES[lang_id]),
|
@@ -66,6 +145,22 @@ def event_handler_languages(languages, files, video, pt_scores, csv_pt_scores):
|
|
66 |
else:
|
67 |
pt_scores = dataframe(visible=False)
|
68 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
69 |
return (
|
70 |
gr.Markdown(value=DESCRIPTIONS[lang_id]),
|
71 |
gr.HTML(value=STEP_1[lang_id]),
|
@@ -85,23 +180,11 @@ def event_handler_languages(languages, files, video, pt_scores, csv_pt_scores):
|
|
85 |
gr.Tab(config_data.Labels_ABOUT_APP_LABEL[lang_id]),
|
86 |
gr.Tab(config_data.Labels_ABOUT_AUTHORS_LABEL[lang_id]),
|
87 |
gr.Tab(config_data.Labels_REQUIREMENTS_LABEL[lang_id]),
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
config_data.OtherMessages_VIDEO_FILES[lang_id],
|
92 |
-
", ".join(config_data.Settings_SUPPORTED_VIDEO_EXT),
|
93 |
-
),
|
94 |
-
file_types=[f".{ext}" for ext in config_data.Settings_SUPPORTED_VIDEO_EXT],
|
95 |
-
),
|
96 |
video,
|
97 |
-
|
98 |
-
config_data.OtherMessages_EXAMPLES_APP[lang_id],
|
99 |
-
True,
|
100 |
-
1,
|
101 |
-
"./images/examples.ico",
|
102 |
-
True,
|
103 |
-
"examples_oceanai",
|
104 |
-
),
|
105 |
button(
|
106 |
config_data.OtherMessages_CALCULATE_PT_SCORES[lang_id],
|
107 |
True if files else False,
|
@@ -122,4 +205,21 @@ def event_handler_languages(languages, files, video, pt_scores, csv_pt_scores):
|
|
122 |
pt_scores,
|
123 |
csv_pt_scores,
|
124 |
step_2,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
125 |
)
|
|
|
19 |
button,
|
20 |
html_message,
|
21 |
dataframe,
|
22 |
+
radio_create_ui,
|
23 |
)
|
24 |
from app.utils import get_language_settings
|
25 |
+
from app.practical_tasks import supported_practical_tasks
|
26 |
|
27 |
|
28 |
+
def event_handler_languages(
|
29 |
+
languages,
|
30 |
+
files,
|
31 |
+
video,
|
32 |
+
type_modes,
|
33 |
+
pt_scores,
|
34 |
+
csv_pt_scores,
|
35 |
+
practical_tasks,
|
36 |
+
practical_subtasks,
|
37 |
+
):
|
38 |
lang_id, choices = get_language_settings(languages)
|
39 |
+
lang_id_inverse = {0: 1, 1: 0}.get(lang_id, None)
|
40 |
+
|
41 |
+
if type_modes == config_data.Settings_TYPE_MODES[0]:
|
42 |
+
files_ui = files_create_ui(
|
43 |
+
label="{} ({})".format(
|
44 |
+
config_data.OtherMessages_VIDEO_FILES[
|
45 |
+
config_data.AppSettings_DEFAULT_LANG_ID
|
46 |
+
],
|
47 |
+
", ".join(config_data.Settings_SUPPORTED_VIDEO_EXT),
|
48 |
+
),
|
49 |
+
file_types=[f".{ext}" for ext in config_data.Settings_SUPPORTED_VIDEO_EXT],
|
50 |
+
)
|
51 |
+
webcam = gr.Video(interactive=False, visible=False)
|
52 |
+
switching_modes = button(
|
53 |
+
config_data.OtherMessages_SWITCHEHG_MODES_ONLINE[lang_id],
|
54 |
+
True,
|
55 |
+
1,
|
56 |
+
"./images/webcam.ico",
|
57 |
+
True,
|
58 |
+
"switching_modes",
|
59 |
+
)
|
60 |
+
examples = button(
|
61 |
+
config_data.OtherMessages_EXAMPLES_APP[lang_id],
|
62 |
+
True,
|
63 |
+
1,
|
64 |
+
"./images/examples.ico",
|
65 |
+
True,
|
66 |
+
"examples_oceanai",
|
67 |
+
)
|
68 |
+
elif type_modes == config_data.Settings_TYPE_MODES[1]:
|
69 |
+
files_ui = files_create_ui(
|
70 |
+
label="{} ({})".format(
|
71 |
+
config_data.OtherMessages_VIDEO_FILES[lang_id],
|
72 |
+
", ".join(config_data.Settings_SUPPORTED_VIDEO_EXT),
|
73 |
+
),
|
74 |
+
file_types=[f".{ext}" for ext in config_data.Settings_SUPPORTED_VIDEO_EXT],
|
75 |
+
interactive=False,
|
76 |
+
visible=False,
|
77 |
+
)
|
78 |
+
webcam = gr.Video(interactive=True, visible=True)
|
79 |
+
switching_modes = button(
|
80 |
+
config_data.OtherMessages_SWITCHEHG_MODES_OFFLINE[lang_id],
|
81 |
+
True,
|
82 |
+
1,
|
83 |
+
"./images/videos.ico",
|
84 |
+
True,
|
85 |
+
"switching_modes",
|
86 |
+
)
|
87 |
+
examples = button(
|
88 |
+
config_data.OtherMessages_EXAMPLE_APP[lang_id],
|
89 |
+
True,
|
90 |
+
1,
|
91 |
+
"./images/examples.ico",
|
92 |
+
True,
|
93 |
+
"examples_oceanai",
|
94 |
+
)
|
95 |
|
96 |
if not video:
|
97 |
video = video_create_ui(label=config_data.OtherMessages_VIDEO_PLAYER[lang_id])
|
98 |
noti_videos = html_message(
|
99 |
+
(
|
100 |
+
config_data.InformationMessages_NOTI_VIDEOS[lang_id].split("(")[0]
|
101 |
+
if lang_id == 0
|
102 |
+
else config_data.InformationMessages_NOTI_VIDEOS[lang_id]
|
103 |
+
),
|
104 |
+
False,
|
105 |
+
True,
|
106 |
+
"notifications",
|
107 |
)
|
108 |
else:
|
109 |
video = video_create_ui(
|
|
|
115 |
config_data.OtherMessages_NOTI_CALCULATE[lang_id],
|
116 |
True,
|
117 |
False if pt_scores.shape[1] >= 7 else True,
|
118 |
+
"notifications",
|
119 |
)
|
120 |
|
121 |
csv_pt_scores = files_create_ui(
|
|
|
132 |
value=STEP_2[lang_id], visible=True if pt_scores.shape[1] >= 7 else False
|
133 |
)
|
134 |
|
135 |
+
practical_tasks_column = gr.Column(
|
136 |
+
visible=True if pt_scores.shape[1] >= 7 else False
|
137 |
+
)
|
138 |
+
|
139 |
if pt_scores.shape[1] >= 7:
|
140 |
pt_scores = dataframe(
|
141 |
headers=(config_data.Dataframes_PT_SCORES[lang_id]),
|
|
|
145 |
else:
|
146 |
pt_scores = dataframe(visible=False)
|
147 |
|
148 |
+
current_lang_tasks = list(map(str, supported_practical_tasks[lang_id].keys()))
|
149 |
+
inverse_lang_tasks = list(
|
150 |
+
map(str, supported_practical_tasks[lang_id_inverse].keys())
|
151 |
+
)
|
152 |
+
|
153 |
+
if practical_tasks in inverse_lang_tasks:
|
154 |
+
practical_task = current_lang_tasks[inverse_lang_tasks.index(practical_tasks)]
|
155 |
+
else:
|
156 |
+
practical_task = next(iter(supported_practical_tasks[lang_id]))
|
157 |
+
|
158 |
+
# print(current_lang_tasks, "\n")
|
159 |
+
# print(inverse_lang_tasks, "\n")
|
160 |
+
# print(practical_tasks, "\n")
|
161 |
+
# print(supported_practical_tasks, "\n")
|
162 |
+
# print(practical_subtasks, "\n")
|
163 |
+
|
164 |
return (
|
165 |
gr.Markdown(value=DESCRIPTIONS[lang_id]),
|
166 |
gr.HTML(value=STEP_1[lang_id]),
|
|
|
180 |
gr.Tab(config_data.Labels_ABOUT_APP_LABEL[lang_id]),
|
181 |
gr.Tab(config_data.Labels_ABOUT_AUTHORS_LABEL[lang_id]),
|
182 |
gr.Tab(config_data.Labels_REQUIREMENTS_LABEL[lang_id]),
|
183 |
+
files_ui,
|
184 |
+
webcam,
|
185 |
+
switching_modes,
|
|
|
|
|
|
|
|
|
|
|
186 |
video,
|
187 |
+
examples,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
188 |
button(
|
189 |
config_data.OtherMessages_CALCULATE_PT_SCORES[lang_id],
|
190 |
True if files else False,
|
|
|
205 |
pt_scores,
|
206 |
csv_pt_scores,
|
207 |
step_2,
|
208 |
+
practical_tasks_column,
|
209 |
+
radio_create_ui(
|
210 |
+
practical_task,
|
211 |
+
config_data.Labels_PRACTICAL_TASKS_LABEL[lang_id],
|
212 |
+
current_lang_tasks,
|
213 |
+
config_data.InformationMessages_PRACTICAL_TASKS_INFO[lang_id],
|
214 |
+
True,
|
215 |
+
True,
|
216 |
+
),
|
217 |
+
radio_create_ui(
|
218 |
+
supported_practical_tasks[lang_id][practical_task][0],
|
219 |
+
config_data.Labels_PRACTICAL_SUBTASKS_LABEL[lang_id],
|
220 |
+
supported_practical_tasks[lang_id][practical_task],
|
221 |
+
config_data.InformationMessages_PRACTICAL_SUBTASKS_INFO[lang_id],
|
222 |
+
True,
|
223 |
+
True,
|
224 |
+
),
|
225 |
)
|
app/event_handlers/practical_subtasks.py
CHANGED
@@ -9,25 +9,36 @@ import gradio as gr
|
|
9 |
|
10 |
# Importing necessary components for the Gradio app
|
11 |
from app.config import config_data
|
12 |
-
from app.utils import read_csv_file,
|
|
|
13 |
from app.components import number_create_ui, dropdown_create_ui
|
14 |
|
15 |
|
16 |
def event_handler_practical_subtasks(
|
17 |
-
|
|
|
|
|
|
|
|
|
18 |
):
|
|
|
|
|
19 |
practical_subtasks_selected[practical_tasks] = practical_subtasks
|
20 |
|
|
|
|
|
|
|
|
|
21 |
if practical_subtasks.lower() == "16 personality types of mbti":
|
22 |
return (
|
23 |
practical_subtasks_selected,
|
24 |
-
gr.Column(visible=
|
25 |
dropdown_create_ui(
|
26 |
label=f"Potential candidates by Personality Type of MBTI ({len(config_data.Settings_DROPDOWN_MBTI)})",
|
27 |
info=config_data.InformationMessages_DROPDOWN_MBTI_INFO,
|
28 |
choices=config_data.Settings_DROPDOWN_MBTI,
|
29 |
value=config_data.Settings_DROPDOWN_MBTI[0],
|
30 |
-
visible=
|
31 |
elem_classes="dropdown-container",
|
32 |
),
|
33 |
number_create_ui(
|
@@ -39,7 +50,7 @@ def event_handler_practical_subtasks(
|
|
39 |
info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(0, 1.0),
|
40 |
show_label=True,
|
41 |
interactive=True,
|
42 |
-
visible=
|
43 |
render=True,
|
44 |
elem_classes="number-container",
|
45 |
),
|
@@ -62,17 +73,9 @@ def event_handler_practical_subtasks(
|
|
62 |
number_create_ui(visible=False),
|
63 |
)
|
64 |
elif practical_subtasks.lower() == "professional groups":
|
65 |
-
df_traits_priority_for_professions = read_csv_file(
|
66 |
-
config_data.Links_PROFESSIONS
|
67 |
-
)
|
68 |
-
weights_professions, interactive_professions = extract_profession_weights(
|
69 |
-
df_traits_priority_for_professions,
|
70 |
-
config_data.Settings_DROPDOWN_CANDIDATES[0],
|
71 |
-
)
|
72 |
-
|
73 |
return (
|
74 |
practical_subtasks_selected,
|
75 |
-
gr.Column(visible=
|
76 |
dropdown_create_ui(visible=False),
|
77 |
number_create_ui(visible=False),
|
78 |
number_create_ui(visible=False),
|
@@ -91,7 +94,7 @@ def event_handler_practical_subtasks(
|
|
91 |
info=config_data.InformationMessages_DROPDOWN_CANDIDATES_INFO,
|
92 |
choices=config_data.Settings_DROPDOWN_CANDIDATES,
|
93 |
value=config_data.Settings_DROPDOWN_CANDIDATES[0],
|
94 |
-
visible=
|
95 |
elem_classes="dropdown-container",
|
96 |
),
|
97 |
number_create_ui(
|
@@ -105,7 +108,7 @@ def event_handler_practical_subtasks(
|
|
105 |
),
|
106 |
show_label=True,
|
107 |
interactive=interactive_professions,
|
108 |
-
visible=
|
109 |
render=True,
|
110 |
elem_classes="number-container",
|
111 |
),
|
@@ -120,7 +123,7 @@ def event_handler_practical_subtasks(
|
|
120 |
),
|
121 |
show_label=True,
|
122 |
interactive=interactive_professions,
|
123 |
-
visible=
|
124 |
render=True,
|
125 |
elem_classes="number-container",
|
126 |
),
|
@@ -135,7 +138,7 @@ def event_handler_practical_subtasks(
|
|
135 |
),
|
136 |
show_label=True,
|
137 |
interactive=interactive_professions,
|
138 |
-
visible=
|
139 |
render=True,
|
140 |
elem_classes="number-container",
|
141 |
),
|
@@ -150,7 +153,7 @@ def event_handler_practical_subtasks(
|
|
150 |
),
|
151 |
show_label=True,
|
152 |
interactive=interactive_professions,
|
153 |
-
visible=
|
154 |
render=True,
|
155 |
elem_classes="number-container",
|
156 |
),
|
@@ -165,7 +168,7 @@ def event_handler_practical_subtasks(
|
|
165 |
),
|
166 |
show_label=True,
|
167 |
interactive=interactive_professions,
|
168 |
-
visible=
|
169 |
render=True,
|
170 |
elem_classes="number-container",
|
171 |
),
|
@@ -173,7 +176,7 @@ def event_handler_practical_subtasks(
|
|
173 |
elif practical_subtasks.lower() == "professional skills":
|
174 |
return (
|
175 |
practical_subtasks_selected,
|
176 |
-
gr.Column(visible=
|
177 |
dropdown_create_ui(visible=False),
|
178 |
number_create_ui(visible=False),
|
179 |
number_create_ui(
|
@@ -185,7 +188,7 @@ def event_handler_practical_subtasks(
|
|
185 |
info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(0, 1.0),
|
186 |
show_label=True,
|
187 |
interactive=True,
|
188 |
-
visible=
|
189 |
render=True,
|
190 |
elem_classes="number-container",
|
191 |
),
|
@@ -194,7 +197,7 @@ def event_handler_practical_subtasks(
|
|
194 |
info=config_data.InformationMessages_DROPDOWN_PROFESSIONAL_SKILLS_INFO,
|
195 |
choices=config_data.Settings_DROPDOWN_PROFESSIONAL_SKILLS,
|
196 |
value=config_data.Settings_DROPDOWN_PROFESSIONAL_SKILLS[0],
|
197 |
-
visible=
|
198 |
elem_classes="dropdown-container",
|
199 |
),
|
200 |
number_create_ui(visible=False),
|
@@ -219,7 +222,7 @@ def event_handler_practical_subtasks(
|
|
219 |
):
|
220 |
return (
|
221 |
practical_subtasks_selected,
|
222 |
-
gr.Column(visible=
|
223 |
dropdown_create_ui(visible=False),
|
224 |
number_create_ui(visible=False),
|
225 |
number_create_ui(visible=False),
|
@@ -233,7 +236,7 @@ def event_handler_practical_subtasks(
|
|
233 |
info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(0, 1.0),
|
234 |
show_label=True,
|
235 |
interactive=True,
|
236 |
-
visible=
|
237 |
render=True,
|
238 |
elem_classes="number-container",
|
239 |
),
|
@@ -246,7 +249,7 @@ def event_handler_practical_subtasks(
|
|
246 |
info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(0, 1.0),
|
247 |
show_label=True,
|
248 |
interactive=True,
|
249 |
-
visible=
|
250 |
render=True,
|
251 |
elem_classes="number-container",
|
252 |
),
|
@@ -259,7 +262,7 @@ def event_handler_practical_subtasks(
|
|
259 |
info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(0, 1.0),
|
260 |
show_label=True,
|
261 |
interactive=True,
|
262 |
-
visible=
|
263 |
render=True,
|
264 |
elem_classes="number-container",
|
265 |
),
|
@@ -272,7 +275,7 @@ def event_handler_practical_subtasks(
|
|
272 |
info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(0, 1.0),
|
273 |
show_label=True,
|
274 |
interactive=True,
|
275 |
-
visible=
|
276 |
render=True,
|
277 |
elem_classes="number-container",
|
278 |
),
|
@@ -285,7 +288,7 @@ def event_handler_practical_subtasks(
|
|
285 |
info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(0, 1.0),
|
286 |
show_label=True,
|
287 |
interactive=True,
|
288 |
-
visible=
|
289 |
render=True,
|
290 |
elem_classes="number-container",
|
291 |
),
|
@@ -298,7 +301,7 @@ def event_handler_practical_subtasks(
|
|
298 |
info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(0, 1.0),
|
299 |
show_label=True,
|
300 |
interactive=True,
|
301 |
-
visible=
|
302 |
render=True,
|
303 |
elem_classes="number-container",
|
304 |
),
|
@@ -349,11 +352,20 @@ def event_handler_practical_subtasks(
|
|
349 |
number_create_ui(
|
350 |
value=1,
|
351 |
minimum=1,
|
352 |
-
maximum=
|
|
|
|
|
|
|
|
|
353 |
step=1,
|
354 |
label=config_data.Labels_NUMBER_PRIORITY_LABEL,
|
355 |
info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(
|
356 |
-
1,
|
|
|
|
|
|
|
|
|
|
|
357 |
),
|
358 |
show_label=True,
|
359 |
interactive=True,
|
|
|
9 |
|
10 |
# Importing necessary components for the Gradio app
|
11 |
from app.config import config_data
|
12 |
+
from app.utils import read_csv_file, get_language_settings
|
13 |
+
from app.data_init import weights_professions, interactive_professions
|
14 |
from app.components import number_create_ui, dropdown_create_ui
|
15 |
|
16 |
|
17 |
def event_handler_practical_subtasks(
|
18 |
+
language,
|
19 |
+
type_modes,
|
20 |
+
practical_tasks,
|
21 |
+
practical_subtasks,
|
22 |
+
practical_subtasks_selected,
|
23 |
):
|
24 |
+
lang_id, _ = get_language_settings(language)
|
25 |
+
|
26 |
practical_subtasks_selected[practical_tasks] = practical_subtasks
|
27 |
|
28 |
+
visible_subtasks = (
|
29 |
+
True if type_modes == config_data.Settings_TYPE_MODES[0] else False
|
30 |
+
)
|
31 |
+
|
32 |
if practical_subtasks.lower() == "16 personality types of mbti":
|
33 |
return (
|
34 |
practical_subtasks_selected,
|
35 |
+
gr.Column(visible=visible_subtasks),
|
36 |
dropdown_create_ui(
|
37 |
label=f"Potential candidates by Personality Type of MBTI ({len(config_data.Settings_DROPDOWN_MBTI)})",
|
38 |
info=config_data.InformationMessages_DROPDOWN_MBTI_INFO,
|
39 |
choices=config_data.Settings_DROPDOWN_MBTI,
|
40 |
value=config_data.Settings_DROPDOWN_MBTI[0],
|
41 |
+
visible=visible_subtasks,
|
42 |
elem_classes="dropdown-container",
|
43 |
),
|
44 |
number_create_ui(
|
|
|
50 |
info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(0, 1.0),
|
51 |
show_label=True,
|
52 |
interactive=True,
|
53 |
+
visible=visible_subtasks,
|
54 |
render=True,
|
55 |
elem_classes="number-container",
|
56 |
),
|
|
|
73 |
number_create_ui(visible=False),
|
74 |
)
|
75 |
elif practical_subtasks.lower() == "professional groups":
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
76 |
return (
|
77 |
practical_subtasks_selected,
|
78 |
+
gr.Column(visible=visible_subtasks),
|
79 |
dropdown_create_ui(visible=False),
|
80 |
number_create_ui(visible=False),
|
81 |
number_create_ui(visible=False),
|
|
|
94 |
info=config_data.InformationMessages_DROPDOWN_CANDIDATES_INFO,
|
95 |
choices=config_data.Settings_DROPDOWN_CANDIDATES,
|
96 |
value=config_data.Settings_DROPDOWN_CANDIDATES[0],
|
97 |
+
visible=visible_subtasks,
|
98 |
elem_classes="dropdown-container",
|
99 |
),
|
100 |
number_create_ui(
|
|
|
108 |
),
|
109 |
show_label=True,
|
110 |
interactive=interactive_professions,
|
111 |
+
visible=visible_subtasks,
|
112 |
render=True,
|
113 |
elem_classes="number-container",
|
114 |
),
|
|
|
123 |
),
|
124 |
show_label=True,
|
125 |
interactive=interactive_professions,
|
126 |
+
visible=visible_subtasks,
|
127 |
render=True,
|
128 |
elem_classes="number-container",
|
129 |
),
|
|
|
138 |
),
|
139 |
show_label=True,
|
140 |
interactive=interactive_professions,
|
141 |
+
visible=visible_subtasks,
|
142 |
render=True,
|
143 |
elem_classes="number-container",
|
144 |
),
|
|
|
153 |
),
|
154 |
show_label=True,
|
155 |
interactive=interactive_professions,
|
156 |
+
visible=visible_subtasks,
|
157 |
render=True,
|
158 |
elem_classes="number-container",
|
159 |
),
|
|
|
168 |
),
|
169 |
show_label=True,
|
170 |
interactive=interactive_professions,
|
171 |
+
visible=visible_subtasks,
|
172 |
render=True,
|
173 |
elem_classes="number-container",
|
174 |
),
|
|
|
176 |
elif practical_subtasks.lower() == "professional skills":
|
177 |
return (
|
178 |
practical_subtasks_selected,
|
179 |
+
gr.Column(visible=visible_subtasks),
|
180 |
dropdown_create_ui(visible=False),
|
181 |
number_create_ui(visible=False),
|
182 |
number_create_ui(
|
|
|
188 |
info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(0, 1.0),
|
189 |
show_label=True,
|
190 |
interactive=True,
|
191 |
+
visible=visible_subtasks,
|
192 |
render=True,
|
193 |
elem_classes="number-container",
|
194 |
),
|
|
|
197 |
info=config_data.InformationMessages_DROPDOWN_PROFESSIONAL_SKILLS_INFO,
|
198 |
choices=config_data.Settings_DROPDOWN_PROFESSIONAL_SKILLS,
|
199 |
value=config_data.Settings_DROPDOWN_PROFESSIONAL_SKILLS[0],
|
200 |
+
visible=visible_subtasks,
|
201 |
elem_classes="dropdown-container",
|
202 |
),
|
203 |
number_create_ui(visible=False),
|
|
|
222 |
):
|
223 |
return (
|
224 |
practical_subtasks_selected,
|
225 |
+
gr.Column(visible=visible_subtasks),
|
226 |
dropdown_create_ui(visible=False),
|
227 |
number_create_ui(visible=False),
|
228 |
number_create_ui(visible=False),
|
|
|
236 |
info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(0, 1.0),
|
237 |
show_label=True,
|
238 |
interactive=True,
|
239 |
+
visible=visible_subtasks,
|
240 |
render=True,
|
241 |
elem_classes="number-container",
|
242 |
),
|
|
|
249 |
info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(0, 1.0),
|
250 |
show_label=True,
|
251 |
interactive=True,
|
252 |
+
visible=visible_subtasks,
|
253 |
render=True,
|
254 |
elem_classes="number-container",
|
255 |
),
|
|
|
262 |
info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(0, 1.0),
|
263 |
show_label=True,
|
264 |
interactive=True,
|
265 |
+
visible=visible_subtasks,
|
266 |
render=True,
|
267 |
elem_classes="number-container",
|
268 |
),
|
|
|
275 |
info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(0, 1.0),
|
276 |
show_label=True,
|
277 |
interactive=True,
|
278 |
+
visible=visible_subtasks,
|
279 |
render=True,
|
280 |
elem_classes="number-container",
|
281 |
),
|
|
|
288 |
info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(0, 1.0),
|
289 |
show_label=True,
|
290 |
interactive=True,
|
291 |
+
visible=visible_subtasks,
|
292 |
render=True,
|
293 |
elem_classes="number-container",
|
294 |
),
|
|
|
301 |
info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(0, 1.0),
|
302 |
show_label=True,
|
303 |
interactive=True,
|
304 |
+
visible=visible_subtasks,
|
305 |
render=True,
|
306 |
elem_classes="number-container",
|
307 |
),
|
|
|
352 |
number_create_ui(
|
353 |
value=1,
|
354 |
minimum=1,
|
355 |
+
maximum=(
|
356 |
+
df_correlation_coefficients.columns.size
|
357 |
+
if practical_subtasks.lower() == "car characteristics"
|
358 |
+
else df_correlation_coefficients.columns.size - 1
|
359 |
+
),
|
360 |
step=1,
|
361 |
label=config_data.Labels_NUMBER_PRIORITY_LABEL,
|
362 |
info=config_data.InformationMessages_VALUE_FROM_TO_INFO.format(
|
363 |
+
1,
|
364 |
+
(
|
365 |
+
df_correlation_coefficients.columns.size
|
366 |
+
if practical_subtasks.lower() == "car characteristics"
|
367 |
+
else df_correlation_coefficients.columns.size - 1
|
368 |
+
),
|
369 |
),
|
370 |
show_label=True,
|
371 |
interactive=True,
|
app/event_handlers/practical_task_sorted.py
CHANGED
@@ -15,16 +15,21 @@ from app.components import video_create_ui, textbox_create_ui
|
|
15 |
|
16 |
|
17 |
def event_handler_practical_task_sorted(
|
18 |
-
files, practical_task_sorted, evt_data: gr.SelectData
|
19 |
):
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
|
|
|
|
|
|
25 |
)
|
26 |
-
|
27 |
-
|
|
|
|
|
28 |
|
29 |
if evt_data.index[0] == 0:
|
30 |
label = "Best"
|
|
|
15 |
|
16 |
|
17 |
def event_handler_practical_task_sorted(
|
18 |
+
type_modes, files, video, practical_task_sorted, evt_data: gr.SelectData
|
19 |
):
|
20 |
+
if type_modes == config_data.Settings_TYPE_MODES[0]:
|
21 |
+
person_id = (
|
22 |
+
int(
|
23 |
+
practical_task_sorted.iloc[evt_data.index[0]][
|
24 |
+
config_data.Dataframes_PT_SCORES[0][0]
|
25 |
+
]
|
26 |
+
)
|
27 |
+
- 1
|
28 |
)
|
29 |
+
elif type_modes == config_data.Settings_TYPE_MODES[1]:
|
30 |
+
files = [video]
|
31 |
+
|
32 |
+
person_id = 0
|
33 |
|
34 |
if evt_data.index[0] == 0:
|
35 |
label = "Best"
|
app/event_handlers/practical_tasks.py
CHANGED
@@ -9,14 +9,32 @@ License: MIT License
|
|
9 |
from app.config import config_data
|
10 |
from app.practical_tasks import supported_practical_tasks
|
11 |
from app.components import radio_create_ui
|
|
|
12 |
|
13 |
|
14 |
-
def event_handler_practical_tasks(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
return radio_create_ui(
|
16 |
practical_subtasks_selected[practical_tasks],
|
17 |
-
config_data.Labels_PRACTICAL_SUBTASKS_LABEL,
|
18 |
-
|
19 |
-
config_data.InformationMessages_PRACTICAL_SUBTASKS_INFO,
|
20 |
True,
|
21 |
True,
|
22 |
)
|
|
|
9 |
from app.config import config_data
|
10 |
from app.practical_tasks import supported_practical_tasks
|
11 |
from app.components import radio_create_ui
|
12 |
+
from app.utils import get_language_settings
|
13 |
|
14 |
|
15 |
+
def event_handler_practical_tasks(
|
16 |
+
language, type_modes, practical_tasks, practical_subtasks_selected
|
17 |
+
):
|
18 |
+
lang_id, _ = get_language_settings(language)
|
19 |
+
|
20 |
+
if type_modes == config_data.Settings_TYPE_MODES[0]:
|
21 |
+
supported_practical_tasks_ren = supported_practical_tasks
|
22 |
+
elif type_modes == config_data.Settings_TYPE_MODES[1]:
|
23 |
+
rename_map = {
|
24 |
+
"Ranking potential candidates by professional responsibilities": "Estimating professional abilities",
|
25 |
+
"Ранжирование потенциальных кандидатов по профессиональным обязанностям": "Определить профессиональные возможности",
|
26 |
+
}
|
27 |
+
|
28 |
+
supported_practical_tasks_ren = [
|
29 |
+
{rename_map.get(k, k): v for k, v in d.items()}
|
30 |
+
for d in supported_practical_tasks
|
31 |
+
]
|
32 |
+
|
33 |
return radio_create_ui(
|
34 |
practical_subtasks_selected[practical_tasks],
|
35 |
+
config_data.Labels_PRACTICAL_SUBTASKS_LABEL[lang_id],
|
36 |
+
supported_practical_tasks_ren[lang_id][practical_tasks],
|
37 |
+
config_data.InformationMessages_PRACTICAL_SUBTASKS_INFO[lang_id],
|
38 |
True,
|
39 |
True,
|
40 |
)
|
app/event_handlers/switching_modes.py
ADDED
@@ -0,0 +1,226 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"""
|
2 |
+
File: switching_modes.py
|
3 |
+
Author: Elena Ryumina and Dmitry Ryumin
|
4 |
+
Description: Event handler for switching modes.
|
5 |
+
License: MIT License
|
6 |
+
"""
|
7 |
+
|
8 |
+
import gradio as gr
|
9 |
+
|
10 |
+
# Importing necessary components for the Gradio app
|
11 |
+
from app.config import config_data
|
12 |
+
from app.description_steps import STEP_2
|
13 |
+
from app.practical_tasks import supported_practical_tasks
|
14 |
+
from app.components import (
|
15 |
+
html_message,
|
16 |
+
files_create_ui,
|
17 |
+
video_create_ui,
|
18 |
+
button,
|
19 |
+
dataframe,
|
20 |
+
radio_create_ui,
|
21 |
+
number_create_ui,
|
22 |
+
dropdown_create_ui,
|
23 |
+
textbox_create_ui,
|
24 |
+
)
|
25 |
+
from app.utils import get_language_settings
|
26 |
+
|
27 |
+
|
28 |
+
def event_handler_switching_modes(language, type_modes):
|
29 |
+
lang_id, _ = get_language_settings(language)
|
30 |
+
|
31 |
+
first_practical_task = next(iter(supported_practical_tasks[lang_id]))
|
32 |
+
|
33 |
+
if type_modes == config_data.Settings_TYPE_MODES[0]:
|
34 |
+
notifications = html_message(
|
35 |
+
(
|
36 |
+
config_data.InformationMessages_NOTI_VIDEOS[lang_id].split("(")[0]
|
37 |
+
if lang_id == 0
|
38 |
+
else config_data.InformationMessages_NOTI_VIDEOS[lang_id]
|
39 |
+
),
|
40 |
+
False,
|
41 |
+
True,
|
42 |
+
"notifications",
|
43 |
+
)
|
44 |
+
files_ui = files_create_ui(
|
45 |
+
label="{} ({})".format(
|
46 |
+
config_data.OtherMessages_VIDEO_FILES[lang_id],
|
47 |
+
", ".join(config_data.Settings_SUPPORTED_VIDEO_EXT),
|
48 |
+
),
|
49 |
+
file_types=[f".{ext}" for ext in config_data.Settings_SUPPORTED_VIDEO_EXT],
|
50 |
+
interactive=False,
|
51 |
+
visible=False,
|
52 |
+
)
|
53 |
+
webcam = gr.Video(interactive=True, visible=True)
|
54 |
+
switching_modes = button(
|
55 |
+
config_data.OtherMessages_SWITCHEHG_MODES_OFFLINE[lang_id],
|
56 |
+
True,
|
57 |
+
1,
|
58 |
+
"./images/videos.ico",
|
59 |
+
True,
|
60 |
+
"switching_modes",
|
61 |
+
)
|
62 |
+
type_modes_ui = gr.Radio(
|
63 |
+
choices=config_data.Settings_TYPE_MODES,
|
64 |
+
value=config_data.Settings_TYPE_MODES[1],
|
65 |
+
)
|
66 |
+
examples = button(
|
67 |
+
config_data.OtherMessages_EXAMPLE_APP[lang_id],
|
68 |
+
True,
|
69 |
+
1,
|
70 |
+
"./images/examples.ico",
|
71 |
+
True,
|
72 |
+
"examples_oceanai",
|
73 |
+
)
|
74 |
+
elif type_modes == config_data.Settings_TYPE_MODES[1]:
|
75 |
+
notifications = html_message(
|
76 |
+
config_data.InformationMessages_NOTI_VIDEOS[lang_id],
|
77 |
+
False,
|
78 |
+
True,
|
79 |
+
"notifications",
|
80 |
+
)
|
81 |
+
files_ui = files_create_ui(
|
82 |
+
label="{} ({})".format(
|
83 |
+
config_data.OtherMessages_VIDEO_FILES[lang_id],
|
84 |
+
", ".join(config_data.Settings_SUPPORTED_VIDEO_EXT),
|
85 |
+
),
|
86 |
+
file_types=[f".{ext}" for ext in config_data.Settings_SUPPORTED_VIDEO_EXT],
|
87 |
+
)
|
88 |
+
webcam = gr.Video(interactive=False, visible=False)
|
89 |
+
switching_modes = button(
|
90 |
+
config_data.OtherMessages_SWITCHEHG_MODES_ONLINE[lang_id],
|
91 |
+
True,
|
92 |
+
1,
|
93 |
+
"./images/webcam.ico",
|
94 |
+
True,
|
95 |
+
"switching_modes",
|
96 |
+
)
|
97 |
+
type_modes_ui = gr.Radio(
|
98 |
+
choices=config_data.Settings_TYPE_MODES,
|
99 |
+
value=config_data.Settings_TYPE_MODES[0],
|
100 |
+
)
|
101 |
+
examples = button(
|
102 |
+
config_data.OtherMessages_EXAMPLES_APP[lang_id],
|
103 |
+
True,
|
104 |
+
1,
|
105 |
+
"./images/examples.ico",
|
106 |
+
True,
|
107 |
+
"examples_oceanai",
|
108 |
+
)
|
109 |
+
|
110 |
+
return (
|
111 |
+
notifications,
|
112 |
+
files_ui,
|
113 |
+
webcam,
|
114 |
+
switching_modes,
|
115 |
+
type_modes_ui,
|
116 |
+
video_create_ui(),
|
117 |
+
examples,
|
118 |
+
button(
|
119 |
+
config_data.OtherMessages_CALCULATE_PT_SCORES[lang_id],
|
120 |
+
False,
|
121 |
+
3,
|
122 |
+
"./images/calculate_pt_scores.ico",
|
123 |
+
True,
|
124 |
+
"calculate_oceanai",
|
125 |
+
),
|
126 |
+
button(
|
127 |
+
config_data.OtherMessages_CLEAR_APP[lang_id],
|
128 |
+
False,
|
129 |
+
1,
|
130 |
+
"./images/clear.ico",
|
131 |
+
True,
|
132 |
+
"clear_oceanai",
|
133 |
+
),
|
134 |
+
dataframe(visible=False),
|
135 |
+
files_create_ui(
|
136 |
+
None,
|
137 |
+
"single",
|
138 |
+
[".csv"],
|
139 |
+
config_data.OtherMessages_EXPORT_PT_SCORES[lang_id],
|
140 |
+
True,
|
141 |
+
False,
|
142 |
+
False,
|
143 |
+
"csv-container",
|
144 |
+
),
|
145 |
+
gr.HTML(value=STEP_2[lang_id], visible=False),
|
146 |
+
gr.Column(visible=False),
|
147 |
+
radio_create_ui(
|
148 |
+
first_practical_task,
|
149 |
+
config_data.Labels_PRACTICAL_TASKS_LABEL[lang_id],
|
150 |
+
list(map(str, supported_practical_tasks[lang_id].keys())),
|
151 |
+
config_data.InformationMessages_PRACTICAL_TASKS_INFO[lang_id],
|
152 |
+
True,
|
153 |
+
True,
|
154 |
+
),
|
155 |
+
radio_create_ui(
|
156 |
+
supported_practical_tasks[lang_id][first_practical_task][0],
|
157 |
+
config_data.Labels_PRACTICAL_SUBTASKS_LABEL[lang_id],
|
158 |
+
supported_practical_tasks[lang_id][first_practical_task],
|
159 |
+
config_data.InformationMessages_PRACTICAL_SUBTASKS_INFO[lang_id],
|
160 |
+
True,
|
161 |
+
True,
|
162 |
+
),
|
163 |
+
gr.JSON(
|
164 |
+
value={
|
165 |
+
str(task): supported_practical_tasks[index].get(task, [None])[0]
|
166 |
+
for index in range(len(supported_practical_tasks))
|
167 |
+
for task in supported_practical_tasks[index].keys()
|
168 |
+
},
|
169 |
+
visible=False,
|
170 |
+
render=True,
|
171 |
+
),
|
172 |
+
gr.Column(visible=False),
|
173 |
+
dropdown_create_ui(visible=False),
|
174 |
+
number_create_ui(visible=False),
|
175 |
+
number_create_ui(visible=False),
|
176 |
+
dropdown_create_ui(visible=False),
|
177 |
+
number_create_ui(visible=False),
|
178 |
+
number_create_ui(visible=False),
|
179 |
+
number_create_ui(visible=False),
|
180 |
+
number_create_ui(visible=False),
|
181 |
+
number_create_ui(visible=False),
|
182 |
+
number_create_ui(visible=False),
|
183 |
+
number_create_ui(visible=False),
|
184 |
+
number_create_ui(visible=False),
|
185 |
+
number_create_ui(visible=False),
|
186 |
+
dropdown_create_ui(visible=False),
|
187 |
+
number_create_ui(visible=False),
|
188 |
+
number_create_ui(visible=False),
|
189 |
+
number_create_ui(visible=False),
|
190 |
+
number_create_ui(visible=False),
|
191 |
+
number_create_ui(visible=False),
|
192 |
+
gr.Row(visible=False),
|
193 |
+
gr.Column(visible=False),
|
194 |
+
dataframe(visible=False),
|
195 |
+
files_create_ui(
|
196 |
+
None,
|
197 |
+
"single",
|
198 |
+
[".csv"],
|
199 |
+
config_data.OtherMessages_EXPORT_PS,
|
200 |
+
True,
|
201 |
+
False,
|
202 |
+
False,
|
203 |
+
"csv-container",
|
204 |
+
),
|
205 |
+
gr.Accordion(visible=False),
|
206 |
+
gr.HTML(visible=False),
|
207 |
+
dataframe(visible=False),
|
208 |
+
gr.Column(visible=False),
|
209 |
+
video_create_ui(visible=False),
|
210 |
+
gr.Column(visible=False),
|
211 |
+
gr.Row(visible=False),
|
212 |
+
gr.Row(visible=False),
|
213 |
+
gr.Image(visible=False),
|
214 |
+
textbox_create_ui(visible=False),
|
215 |
+
gr.Row(visible=False),
|
216 |
+
gr.Image(visible=False),
|
217 |
+
textbox_create_ui(visible=False),
|
218 |
+
gr.Row(visible=False),
|
219 |
+
gr.Row(visible=False),
|
220 |
+
gr.Image(visible=False),
|
221 |
+
textbox_create_ui(visible=False),
|
222 |
+
gr.Row(visible=False),
|
223 |
+
gr.Image(visible=False),
|
224 |
+
textbox_create_ui(visible=False),
|
225 |
+
html_message(config_data.InformationMessages_NOTI_IN_DEV, False, False),
|
226 |
+
)
|
app/event_handlers/webcam.py
ADDED
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"""
|
2 |
+
File: webcam.py
|
3 |
+
Author: Elena Ryumina and Dmitry Ryumin
|
4 |
+
Description: Event handler for webcam.
|
5 |
+
License: MIT License
|
6 |
+
"""
|
7 |
+
|
8 |
+
import gradio as gr
|
9 |
+
from pathlib import Path
|
10 |
+
|
11 |
+
# Importing necessary components for the Gradio app
|
12 |
+
from app.config import config_data
|
13 |
+
from app.components import html_message, video_create_ui, button
|
14 |
+
from app.utils import get_language_settings, webm2mp4
|
15 |
+
|
16 |
+
|
17 |
+
def event_handler_webcam(language, webcam, pt_scores):
|
18 |
+
lang_id, _ = get_language_settings(language)
|
19 |
+
|
20 |
+
if not webcam:
|
21 |
+
return (
|
22 |
+
html_message(
|
23 |
+
(
|
24 |
+
config_data.InformationMessages_NOTI_VIDEOS[lang_id].split("(")[0]
|
25 |
+
if lang_id == 0
|
26 |
+
else config_data.InformationMessages_NOTI_VIDEOS[lang_id]
|
27 |
+
),
|
28 |
+
False,
|
29 |
+
True,
|
30 |
+
"notifications",
|
31 |
+
),
|
32 |
+
video_create_ui(label=config_data.OtherMessages_VIDEO_PLAYER[lang_id]),
|
33 |
+
gr.Video(value=None),
|
34 |
+
button(
|
35 |
+
config_data.OtherMessages_CALCULATE_PT_SCORES[lang_id],
|
36 |
+
False,
|
37 |
+
3,
|
38 |
+
"./images/calculate_pt_scores.ico",
|
39 |
+
True,
|
40 |
+
"calculate_oceanai",
|
41 |
+
),
|
42 |
+
button(
|
43 |
+
config_data.OtherMessages_CLEAR_APP[lang_id],
|
44 |
+
False,
|
45 |
+
1,
|
46 |
+
"./images/clear.ico",
|
47 |
+
True,
|
48 |
+
"clear_oceanai",
|
49 |
+
),
|
50 |
+
)
|
51 |
+
|
52 |
+
if webcam.split(".")[-1] == "webm":
|
53 |
+
webcam = webm2mp4(webcam)
|
54 |
+
|
55 |
+
return (
|
56 |
+
html_message(
|
57 |
+
config_data.OtherMessages_NOTI_CALCULATE[lang_id],
|
58 |
+
True,
|
59 |
+
False if pt_scores.shape[1] >= 7 else True,
|
60 |
+
"notifications",
|
61 |
+
),
|
62 |
+
video_create_ui(
|
63 |
+
value=webcam,
|
64 |
+
label=config_data.OtherMessages_VIDEO_PLAYER[lang_id],
|
65 |
+
file_name=Path(Path(webcam).name).name,
|
66 |
+
),
|
67 |
+
gr.Video(value=None),
|
68 |
+
button(
|
69 |
+
config_data.OtherMessages_CALCULATE_PT_SCORES[lang_id],
|
70 |
+
True,
|
71 |
+
3,
|
72 |
+
"./images/calculate_pt_scores.ico",
|
73 |
+
True,
|
74 |
+
"calculate_oceanai",
|
75 |
+
),
|
76 |
+
button(
|
77 |
+
config_data.OtherMessages_CLEAR_APP[lang_id],
|
78 |
+
True,
|
79 |
+
1,
|
80 |
+
"./images/clear.ico",
|
81 |
+
True,
|
82 |
+
"clear_oceanai",
|
83 |
+
),
|
84 |
+
)
|
app/port.py
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"""
|
2 |
+
File: port.py
|
3 |
+
Author: Elena Ryumina and Dmitry Ryumin
|
4 |
+
Description: Utility functions to check and free ports by terminating processes holding them.
|
5 |
+
License: MIT License
|
6 |
+
"""
|
7 |
+
|
8 |
+
import socket
|
9 |
+
import psutil
|
10 |
+
from typing import Iterable, Union
|
11 |
+
|
12 |
+
|
13 |
+
def is_port_in_use(host: str, port: int) -> bool:
|
14 |
+
try:
|
15 |
+
with socket.create_connection((host, port), timeout=1):
|
16 |
+
return True
|
17 |
+
except (ConnectionRefusedError, OSError):
|
18 |
+
return False
|
19 |
+
|
20 |
+
|
21 |
+
def free_ports(ports: Union[int, Iterable[int]]) -> None:
|
22 |
+
ports_to_free = {ports} if isinstance(ports, int) else set(ports)
|
23 |
+
|
24 |
+
for proc in psutil.process_iter(attrs=["pid", "name"]):
|
25 |
+
try:
|
26 |
+
connections = proc.net_connections(kind="inet")
|
27 |
+
for conn in connections:
|
28 |
+
if conn.laddr.port in ports_to_free:
|
29 |
+
proc.terminate()
|
30 |
+
proc.wait()
|
31 |
+
ports_to_free.discard(conn.laddr.port)
|
32 |
+
if not ports_to_free:
|
33 |
+
return
|
34 |
+
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
|
35 |
+
continue
|
app/practical_tasks.py
CHANGED
@@ -11,17 +11,27 @@ from typing import Dict, List
|
|
11 |
# Importing necessary components for the Gradio app
|
12 |
|
13 |
|
14 |
-
def load_practical_tasks_data(
|
15 |
-
|
16 |
-
return yaml.safe_load(file) or []
|
17 |
|
|
|
|
|
|
|
|
|
18 |
|
19 |
-
|
20 |
-
output_dict = {item["task"]: item["subtasks"] for item in data}
|
21 |
|
22 |
-
return output_dict
|
23 |
|
|
|
|
|
24 |
|
25 |
-
|
26 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
supported_practical_tasks = transform_practical_tasks_data(practical_tasks_data)
|
|
|
11 |
# Importing necessary components for the Gradio app
|
12 |
|
13 |
|
14 |
+
def load_practical_tasks_data(file_paths: List[str]) -> List[Dict]:
|
15 |
+
all_tasks_data = []
|
|
|
16 |
|
17 |
+
for file_path in file_paths:
|
18 |
+
with open(file_path, "r") as file:
|
19 |
+
data = yaml.safe_load(file) or []
|
20 |
+
all_tasks_data.append(data)
|
21 |
|
22 |
+
return all_tasks_data
|
|
|
23 |
|
|
|
24 |
|
25 |
+
def transform_practical_tasks_data(data: List[Dict]) -> List[Dict]:
|
26 |
+
output_list = []
|
27 |
|
28 |
+
for task_data in data:
|
29 |
+
output_dict = {item["task"]: item["subtasks"] for item in task_data}
|
30 |
+
output_list.append(output_dict)
|
31 |
+
|
32 |
+
return output_list
|
33 |
+
|
34 |
+
|
35 |
+
yaml_file_paths = ["./practical_tasks_en.yaml", "./practical_tasks_ru.yaml"]
|
36 |
+
practical_tasks_data = load_practical_tasks_data(yaml_file_paths)
|
37 |
supported_practical_tasks = transform_practical_tasks_data(practical_tasks_data)
|
app/tabs.py
CHANGED
@@ -13,10 +13,11 @@ from app.description_steps import STEP_1, STEP_2
|
|
13 |
from app.mbti_description import MBTI_DESCRIPTION, MBTI_DATA
|
14 |
from app.app import APP
|
15 |
from app.authors import AUTHORS
|
|
|
16 |
from app.requirements_app import read_requirements_to_df
|
17 |
from app.config import config_data
|
18 |
from app.practical_tasks import supported_practical_tasks
|
19 |
-
from app.utils import read_csv_file
|
20 |
from app.components import (
|
21 |
html_message,
|
22 |
files_create_ui,
|
@@ -37,16 +38,59 @@ def app_tab():
|
|
37 |
|
38 |
step_1 = gr.HTML(value=STEP_1[config_data.AppSettings_DEFAULT_LANG_ID])
|
39 |
|
40 |
-
with gr.Row():
|
41 |
-
|
42 |
-
|
43 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
config_data.AppSettings_DEFAULT_LANG_ID
|
45 |
],
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
|
51 |
video = video_create_ui()
|
52 |
|
@@ -87,6 +131,7 @@ def app_tab():
|
|
87 |
config_data.AppSettings_DEFAULT_LANG_ID
|
88 |
],
|
89 |
False,
|
|
|
90 |
)
|
91 |
|
92 |
pt_scores = dataframe(visible=False)
|
@@ -108,23 +153,42 @@ def app_tab():
|
|
108 |
value=STEP_2[config_data.AppSettings_DEFAULT_LANG_ID], visible=False
|
109 |
)
|
110 |
|
111 |
-
first_practical_task = next(
|
|
|
|
|
112 |
|
113 |
with gr.Column(scale=1, visible=False, render=True) as practical_tasks_column:
|
114 |
practical_tasks = radio_create_ui(
|
115 |
first_practical_task,
|
116 |
config_data.Labels_PRACTICAL_TASKS_LABEL,
|
117 |
-
list(
|
118 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
119 |
True,
|
120 |
True,
|
121 |
)
|
122 |
|
123 |
practical_subtasks = radio_create_ui(
|
124 |
-
supported_practical_tasks[
|
125 |
-
|
126 |
-
|
127 |
-
config_data.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
128 |
True,
|
129 |
True,
|
130 |
)
|
@@ -159,7 +223,7 @@ def app_tab():
|
|
159 |
)
|
160 |
|
161 |
threshold_professional_skills = number_create_ui(
|
162 |
-
value=0.
|
163 |
minimum=0.0,
|
164 |
maximum=1.0,
|
165 |
step=0.01,
|
@@ -323,14 +387,6 @@ def app_tab():
|
|
323 |
elem_classes="dropdown-container",
|
324 |
)
|
325 |
|
326 |
-
df_traits_priority_for_professions = read_csv_file(
|
327 |
-
config_data.Links_PROFESSIONS
|
328 |
-
)
|
329 |
-
weights_professions, interactive_professions = extract_profession_weights(
|
330 |
-
df_traits_priority_for_professions,
|
331 |
-
config_data.Settings_DROPDOWN_CANDIDATES[0],
|
332 |
-
)
|
333 |
-
|
334 |
number_openness = number_create_ui(
|
335 |
value=weights_professions[0],
|
336 |
minimum=config_data.Values_0_100[0],
|
@@ -481,6 +537,7 @@ def app_tab():
|
|
481 |
visible=False,
|
482 |
show_download_button=False,
|
483 |
elem_classes="metadata_name-logo",
|
|
|
484 |
)
|
485 |
|
486 |
name = textbox_create_ui(
|
@@ -512,6 +569,7 @@ def app_tab():
|
|
512 |
visible=False,
|
513 |
show_download_button=False,
|
514 |
elem_classes="metadata_surname-logo",
|
|
|
515 |
)
|
516 |
|
517 |
surname = textbox_create_ui(
|
@@ -545,6 +603,7 @@ def app_tab():
|
|
545 |
visible=False,
|
546 |
show_download_button=False,
|
547 |
elem_classes="metadata_email-logo",
|
|
|
548 |
)
|
549 |
|
550 |
email = textbox_create_ui(
|
@@ -576,6 +635,7 @@ def app_tab():
|
|
576 |
visible=False,
|
577 |
show_download_button=False,
|
578 |
elem_classes="metadata_phone-logo",
|
|
|
579 |
)
|
580 |
|
581 |
phone = textbox_create_ui(
|
@@ -595,8 +655,9 @@ def app_tab():
|
|
595 |
|
596 |
practical_subtasks_selected = gr.JSON(
|
597 |
value={
|
598 |
-
str(task): supported_practical_tasks.get(task, [None])[0]
|
599 |
-
for
|
|
|
600 |
},
|
601 |
visible=False,
|
602 |
render=True,
|
@@ -611,6 +672,9 @@ def app_tab():
|
|
611 |
step_1,
|
612 |
notifications,
|
613 |
files,
|
|
|
|
|
|
|
614 |
video,
|
615 |
examples,
|
616 |
calculate_pt_scores,
|
|
|
13 |
from app.mbti_description import MBTI_DESCRIPTION, MBTI_DATA
|
14 |
from app.app import APP
|
15 |
from app.authors import AUTHORS
|
16 |
+
from app.data_init import weights_professions, interactive_professions
|
17 |
from app.requirements_app import read_requirements_to_df
|
18 |
from app.config import config_data
|
19 |
from app.practical_tasks import supported_practical_tasks
|
20 |
+
from app.utils import read_csv_file
|
21 |
from app.components import (
|
22 |
html_message,
|
23 |
files_create_ui,
|
|
|
38 |
|
39 |
step_1 = gr.HTML(value=STEP_1[config_data.AppSettings_DEFAULT_LANG_ID])
|
40 |
|
41 |
+
with gr.Row(elem_classes="media-container"):
|
42 |
+
with gr.Column():
|
43 |
+
files = files_create_ui(
|
44 |
+
label="{} ({})".format(
|
45 |
+
config_data.OtherMessages_VIDEO_FILES[
|
46 |
+
config_data.AppSettings_DEFAULT_LANG_ID
|
47 |
+
],
|
48 |
+
", ".join(config_data.Settings_SUPPORTED_VIDEO_EXT),
|
49 |
+
),
|
50 |
+
file_types=[
|
51 |
+
f".{ext}" for ext in config_data.Settings_SUPPORTED_VIDEO_EXT
|
52 |
+
],
|
53 |
+
)
|
54 |
+
|
55 |
+
webcam = gr.Video(
|
56 |
+
label="{} ({})".format(
|
57 |
+
config_data.OtherMessages_VIDEO_FILES[
|
58 |
+
config_data.AppSettings_DEFAULT_LANG_ID
|
59 |
+
],
|
60 |
+
", ".join(config_data.Settings_SUPPORTED_VIDEO_EXT),
|
61 |
+
),
|
62 |
+
show_label=True,
|
63 |
+
interactive=False,
|
64 |
+
visible=False,
|
65 |
+
mirror_webcam=False,
|
66 |
+
include_audio=True,
|
67 |
+
elem_classes="webcam",
|
68 |
+
autoplay=False,
|
69 |
+
)
|
70 |
+
|
71 |
+
switching_modes = button(
|
72 |
+
config_data.OtherMessages_SWITCHEHG_MODES_ONLINE[
|
73 |
config_data.AppSettings_DEFAULT_LANG_ID
|
74 |
],
|
75 |
+
True,
|
76 |
+
1,
|
77 |
+
"./images/webcam.ico",
|
78 |
+
True,
|
79 |
+
"switching_modes",
|
80 |
+
)
|
81 |
+
|
82 |
+
type_modes = gr.Radio(
|
83 |
+
choices=config_data.Settings_TYPE_MODES,
|
84 |
+
value=config_data.Settings_TYPE_MODES[0],
|
85 |
+
label=None,
|
86 |
+
info=None,
|
87 |
+
show_label=False,
|
88 |
+
container=False,
|
89 |
+
interactive=False,
|
90 |
+
visible=False,
|
91 |
+
render=True,
|
92 |
+
elem_classes="type_modes",
|
93 |
+
)
|
94 |
|
95 |
video = video_create_ui()
|
96 |
|
|
|
131 |
config_data.AppSettings_DEFAULT_LANG_ID
|
132 |
],
|
133 |
False,
|
134 |
+
"notifications",
|
135 |
)
|
136 |
|
137 |
pt_scores = dataframe(visible=False)
|
|
|
153 |
value=STEP_2[config_data.AppSettings_DEFAULT_LANG_ID], visible=False
|
154 |
)
|
155 |
|
156 |
+
first_practical_task = next(
|
157 |
+
iter(supported_practical_tasks[config_data.AppSettings_DEFAULT_LANG_ID])
|
158 |
+
)
|
159 |
|
160 |
with gr.Column(scale=1, visible=False, render=True) as practical_tasks_column:
|
161 |
practical_tasks = radio_create_ui(
|
162 |
first_practical_task,
|
163 |
config_data.Labels_PRACTICAL_TASKS_LABEL,
|
164 |
+
list(
|
165 |
+
map(
|
166 |
+
str,
|
167 |
+
supported_practical_tasks[
|
168 |
+
config_data.AppSettings_DEFAULT_LANG_ID
|
169 |
+
].keys(),
|
170 |
+
)
|
171 |
+
),
|
172 |
+
config_data.InformationMessages_PRACTICAL_TASKS_INFO[
|
173 |
+
config_data.AppSettings_DEFAULT_LANG_ID
|
174 |
+
],
|
175 |
True,
|
176 |
True,
|
177 |
)
|
178 |
|
179 |
practical_subtasks = radio_create_ui(
|
180 |
+
supported_practical_tasks[config_data.AppSettings_DEFAULT_LANG_ID][
|
181 |
+
first_practical_task
|
182 |
+
][0],
|
183 |
+
config_data.Labels_PRACTICAL_SUBTASKS_LABEL[
|
184 |
+
config_data.AppSettings_DEFAULT_LANG_ID
|
185 |
+
],
|
186 |
+
supported_practical_tasks[config_data.AppSettings_DEFAULT_LANG_ID][
|
187 |
+
first_practical_task
|
188 |
+
],
|
189 |
+
config_data.InformationMessages_PRACTICAL_SUBTASKS_INFO[
|
190 |
+
config_data.AppSettings_DEFAULT_LANG_ID
|
191 |
+
],
|
192 |
True,
|
193 |
True,
|
194 |
)
|
|
|
223 |
)
|
224 |
|
225 |
threshold_professional_skills = number_create_ui(
|
226 |
+
value=0.5,
|
227 |
minimum=0.0,
|
228 |
maximum=1.0,
|
229 |
step=0.01,
|
|
|
387 |
elem_classes="dropdown-container",
|
388 |
)
|
389 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
390 |
number_openness = number_create_ui(
|
391 |
value=weights_professions[0],
|
392 |
minimum=config_data.Values_0_100[0],
|
|
|
537 |
visible=False,
|
538 |
show_download_button=False,
|
539 |
elem_classes="metadata_name-logo",
|
540 |
+
show_fullscreen_button=False,
|
541 |
)
|
542 |
|
543 |
name = textbox_create_ui(
|
|
|
569 |
visible=False,
|
570 |
show_download_button=False,
|
571 |
elem_classes="metadata_surname-logo",
|
572 |
+
show_fullscreen_button=False,
|
573 |
)
|
574 |
|
575 |
surname = textbox_create_ui(
|
|
|
603 |
visible=False,
|
604 |
show_download_button=False,
|
605 |
elem_classes="metadata_email-logo",
|
606 |
+
show_fullscreen_button=False,
|
607 |
)
|
608 |
|
609 |
email = textbox_create_ui(
|
|
|
635 |
visible=False,
|
636 |
show_download_button=False,
|
637 |
elem_classes="metadata_phone-logo",
|
638 |
+
show_fullscreen_button=False,
|
639 |
)
|
640 |
|
641 |
phone = textbox_create_ui(
|
|
|
655 |
|
656 |
practical_subtasks_selected = gr.JSON(
|
657 |
value={
|
658 |
+
str(task): supported_practical_tasks[index].get(task, [None])[0]
|
659 |
+
for index in range(len(supported_practical_tasks))
|
660 |
+
for task in supported_practical_tasks[index].keys()
|
661 |
},
|
662 |
visible=False,
|
663 |
render=True,
|
|
|
672 |
step_1,
|
673 |
notifications,
|
674 |
files,
|
675 |
+
webcam,
|
676 |
+
switching_modes,
|
677 |
+
type_modes,
|
678 |
video,
|
679 |
examples,
|
680 |
calculate_pt_scores,
|
app/utils.py
CHANGED
@@ -6,6 +6,8 @@ License: MIT License
|
|
6 |
"""
|
7 |
|
8 |
import pandas as pd
|
|
|
|
|
9 |
|
10 |
# Importing necessary components for the Gradio app
|
11 |
from app.config import config_data
|
@@ -84,3 +86,27 @@ def extract_profession_weights(df, dropdown_candidates):
|
|
84 |
weights_professions = list(map(int, weights_professions))
|
85 |
|
86 |
return weights_professions, interactive_professions
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
"""
|
7 |
|
8 |
import pandas as pd
|
9 |
+
import subprocess
|
10 |
+
from pathlib import Path
|
11 |
|
12 |
# Importing necessary components for the Gradio app
|
13 |
from app.config import config_data
|
|
|
86 |
weights_professions = list(map(int, weights_professions))
|
87 |
|
88 |
return weights_professions, interactive_professions
|
89 |
+
|
90 |
+
|
91 |
+
def webm2mp4(input_file):
|
92 |
+
input_path = Path(input_file)
|
93 |
+
output_path = input_path.with_suffix(".mp4")
|
94 |
+
|
95 |
+
if not output_path.exists():
|
96 |
+
subprocess.run(
|
97 |
+
[
|
98 |
+
"ffmpeg",
|
99 |
+
"-i",
|
100 |
+
str(input_path),
|
101 |
+
"-c:v",
|
102 |
+
"copy",
|
103 |
+
"-c:a",
|
104 |
+
"aac",
|
105 |
+
"-strict",
|
106 |
+
"experimental",
|
107 |
+
str(output_path),
|
108 |
+
],
|
109 |
+
check=True,
|
110 |
+
)
|
111 |
+
|
112 |
+
return str(output_path)
|
config.toml
CHANGED
@@ -1,5 +1,7 @@
|
|
1 |
[AppSettings]
|
2 |
-
APP_VERSION = "0.
|
|
|
|
|
3 |
CSS_PATH = "app.css"
|
4 |
DEFAULT_LANG_ID = 0
|
5 |
|
@@ -9,8 +11,8 @@ DESCRIPTIONS = [
|
|
9 |
"- библиотека с открытым исходным кодом для оценивания большой пятерки качеств личности человека и автоматизации HR-процессов",
|
10 |
]
|
11 |
NOTI_VIDEOS = ["Select the video(s)", "Выберите видео"]
|
12 |
-
PRACTICAL_TASKS_INFO = "Choose a practical task"
|
13 |
-
PRACTICAL_SUBTASKS_INFO = "Choose a practical subtask"
|
14 |
NOTI_IN_DEV = "In development"
|
15 |
DROPDOWN_MBTI_INFO = "What personality type indicator are you interested in?"
|
16 |
DROPDOWN_PROFESSIONAL_SKILLS_INFO = "What professional skill are you interested in?"
|
@@ -31,11 +33,18 @@ STEP_2 = [
|
|
31 |
[OtherMessages]
|
32 |
VIDEO_FILES = ["Video Files", "Видеофайлы"]
|
33 |
VIDEO_PLAYER = ["Video Player", "Видео проигрыватель"]
|
34 |
-
CALCULATE_PT_SCORES = [
|
35 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
36 |
CALCULATE_PRACTICAL_TASK = "Solving practical task"
|
37 |
CLEAR_APP = ["Clear", "Сброс"]
|
38 |
EXAMPLES_APP = ["Examples", "Примеры"]
|
|
|
39 |
EXPORT_PT_SCORES = [
|
40 |
"Export Big Five personality traits to a CSV file",
|
41 |
"Экспорт показателей Большой пятерки персональных качеств личности человека в CSV файл"]
|
@@ -45,14 +54,16 @@ EXPORT_WT = "Export ranking effective work teams results to a CSV file"
|
|
45 |
EXPORT_CP = "Export consumer preferences for industrial goods results to a CSV file"
|
46 |
EXPORT_MBTI = "Export ranking personality type results to a CSV file"
|
47 |
NOTI_CALCULATE = ["You can calculate Big Five personality traits scores", "Вы можете рассчитать показатели Большой пятерки персональных качеств личности человека"]
|
|
|
|
|
48 |
|
49 |
[Labels]
|
50 |
APP_LABEL = ["⭐ App", "⭐ Приложение"]
|
51 |
ABOUT_APP_LABEL = ["💡 About the App", "💡 О приложении"]
|
52 |
ABOUT_AUTHORS_LABEL = ["🎭 About the Authors", "🎭 Об авторах"]
|
53 |
REQUIREMENTS_LABEL = ["📋 Requirements", "📋 Зависимости"]
|
54 |
-
PRACTICAL_TASKS_LABEL = "Practical tasks"
|
55 |
-
PRACTICAL_SUBTASKS_LABEL = "Practical subtasks"
|
56 |
THRESHOLD_MBTI_LABEL = "Polarity traits threshold"
|
57 |
THRESHOLD_PROFESSIONAL_SKILLS_LABEL = "Polarity traits threshold"
|
58 |
TARGET_SCORE_OPE_LABEL = "Openness target score"
|
@@ -138,8 +149,10 @@ DROPDOWN_MBTI = [
|
|
138 |
"The Commander (ENTJ): Construction Supervisor, Health Services Administrator, Financial Accountant, Auditor, Lawyer, School Principal, Chemical Engineer, Database Manager, etc.",
|
139 |
]
|
140 |
DROPDOWN_MBTI_DEL_COLS = ["EI", "SN", "TF", "JP", "Match"]
|
|
|
141 |
SHOW_VIDEO_METADATA = true
|
142 |
SUPPORTED_VIDEO_EXT = ["mp4", "mov", "avi", "flv"]
|
|
|
143 |
|
144 |
[Values]
|
145 |
TARGET_SCORES = [0.527886, 0.522337, 0.458468, 0.51761, 0.444649]
|
|
|
1 |
[AppSettings]
|
2 |
+
APP_VERSION = "0.10.7"
|
3 |
+
SERVER_NAME = "127.0.0.1"
|
4 |
+
PORT = 7860
|
5 |
CSS_PATH = "app.css"
|
6 |
DEFAULT_LANG_ID = 0
|
7 |
|
|
|
11 |
"- библиотека с открытым исходным кодом для оценивания большой пятерки качеств личности человека и автоматизации HR-процессов",
|
12 |
]
|
13 |
NOTI_VIDEOS = ["Select the video(s)", "Выберите видео"]
|
14 |
+
PRACTICAL_TASKS_INFO = ["Choose a practical task", "Выберите практическую задачу"]
|
15 |
+
PRACTICAL_SUBTASKS_INFO = ["Choose a practical subtask", "Выберите практическую подзадачу"]
|
16 |
NOTI_IN_DEV = "In development"
|
17 |
DROPDOWN_MBTI_INFO = "What personality type indicator are you interested in?"
|
18 |
DROPDOWN_PROFESSIONAL_SKILLS_INFO = "What professional skill are you interested in?"
|
|
|
33 |
[OtherMessages]
|
34 |
VIDEO_FILES = ["Video Files", "Видеофайлы"]
|
35 |
VIDEO_PLAYER = ["Video Player", "Видео проигрыватель"]
|
36 |
+
CALCULATE_PT_SCORES = [
|
37 |
+
"Calculation of Big Five personality traits scores",
|
38 |
+
"Вычисление показателей Большой пятерки персональных качеств личности человека"
|
39 |
+
]
|
40 |
+
CALCULATE_PT_SCORES_ERR = [
|
41 |
+
"Personality traits scores have not been calculated. Ensure that there are uncovered face and speech of person in the video",
|
42 |
+
"Оценки персональных качеств личностей человека не были вычислены. Убедитесь, что в видео присутствует не перекрытое лицо и речь человека"
|
43 |
+
]
|
44 |
CALCULATE_PRACTICAL_TASK = "Solving practical task"
|
45 |
CLEAR_APP = ["Clear", "Сброс"]
|
46 |
EXAMPLES_APP = ["Examples", "Примеры"]
|
47 |
+
EXAMPLE_APP = ["Example", "Пример"]
|
48 |
EXPORT_PT_SCORES = [
|
49 |
"Export Big Five personality traits to a CSV file",
|
50 |
"Экспорт показателей Большой пятерки персональных качеств личности человека в CSV файл"]
|
|
|
54 |
EXPORT_CP = "Export consumer preferences for industrial goods results to a CSV file"
|
55 |
EXPORT_MBTI = "Export ranking personality type results to a CSV file"
|
56 |
NOTI_CALCULATE = ["You can calculate Big Five personality traits scores", "Вы можете рассчитать показатели Большой пятерки персональных качеств личности человека"]
|
57 |
+
SWITCHEHG_MODES_ONLINE = ["Webcam", "Веб-камера"]
|
58 |
+
SWITCHEHG_MODES_OFFLINE = ["Video Files", "Видеофайлы"]
|
59 |
|
60 |
[Labels]
|
61 |
APP_LABEL = ["⭐ App", "⭐ Приложение"]
|
62 |
ABOUT_APP_LABEL = ["💡 About the App", "💡 О приложении"]
|
63 |
ABOUT_AUTHORS_LABEL = ["🎭 About the Authors", "🎭 Об авторах"]
|
64 |
REQUIREMENTS_LABEL = ["📋 Requirements", "📋 Зависимости"]
|
65 |
+
PRACTICAL_TASKS_LABEL = ["Practical tasks", "Практические задачи"]
|
66 |
+
PRACTICAL_SUBTASKS_LABEL = ["Practical subtasks", "Практические подзадачи"]
|
67 |
THRESHOLD_MBTI_LABEL = "Polarity traits threshold"
|
68 |
THRESHOLD_PROFESSIONAL_SKILLS_LABEL = "Polarity traits threshold"
|
69 |
TARGET_SCORE_OPE_LABEL = "Openness target score"
|
|
|
149 |
"The Commander (ENTJ): Construction Supervisor, Health Services Administrator, Financial Accountant, Auditor, Lawyer, School Principal, Chemical Engineer, Database Manager, etc.",
|
150 |
]
|
151 |
DROPDOWN_MBTI_DEL_COLS = ["EI", "SN", "TF", "JP", "Match"]
|
152 |
+
DROPDOWN_MBTI_DEL_COLS_WEBCAM = ["Path"]
|
153 |
SHOW_VIDEO_METADATA = true
|
154 |
SUPPORTED_VIDEO_EXT = ["mp4", "mov", "avi", "flv"]
|
155 |
+
TYPE_MODES = ["Files", "Web"]
|
156 |
|
157 |
[Values]
|
158 |
TARGET_SCORES = [0.527886, 0.522337, 0.458468, 0.51761, 0.444649]
|
images/videos.ico
ADDED
images/webcam.ico
ADDED
practical_tasks.yaml → practical_tasks_en.yaml
RENAMED
File without changes
|
practical_tasks_ru.yaml
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
- task: "Ранжирование потенциальных кандидатов по профессиональным обязанностям"
|
2 |
+
subtasks:
|
3 |
+
- "16 персональных типов личности MBTI"
|
4 |
+
- "Профессиональные группы"
|
5 |
+
- "Профессиональные навыки"
|
6 |
+
- task: "Формирование эффективных рабочих коллективов"
|
7 |
+
subtasks:
|
8 |
+
- "Поиск подходящего младшего коллеги"
|
9 |
+
- "Поиск подходящего старшего коллеги"
|
10 |
+
- task: "Прогнозирование потребительских предпочтений в отношении промышленных товаров"
|
11 |
+
subtasks:
|
12 |
+
- "Характеристики автомобиля"
|
13 |
+
- "Категории приложений для мобильных устройств"
|
14 |
+
- "Стиль одежды"
|
requirements.txt
CHANGED
@@ -1,5 +1,7 @@
|
|
1 |
-
gradio==5.
|
2 |
-
PyYAML==6.0.
|
3 |
toml==0.10.2
|
4 |
-
oceanai==1.0.
|
5 |
-
|
|
|
|
|
|
1 |
+
gradio==5.8.0
|
2 |
+
PyYAML==6.0.2
|
3 |
toml==0.10.2
|
4 |
+
oceanai==1.0.0a46
|
5 |
+
torch==2.2.2
|
6 |
+
psutil==6.1.0
|
7 |
+
beautifulsoup4==4.12.3
|