Skip to content
This repository was archived by the owner on Jan 7, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

Docs for the Bridge2AI Voice Project.

[![GitHub](https://img.shields.io/badge/github-2.0.5-green?style=flat&logo=github)](https://github.com/eipm/bridge2ai-docs) [![Python 3.12.0](https://img.shields.io/badge/python-3.12.0-blue.svg)](https://www.python.org/downloads/release/python-3120/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![DOI](https://zenodo.org/badge/860006845.svg)](https://zenodo.org/doi/10.5281/zenodo.13834653)
[![GitHub](https://img.shields.io/badge/github-3.0.0-green?style=flat&logo=github)](https://github.com/eipm/bridge2ai-docs) [![Python 3.12.0](https://img.shields.io/badge/python-3.12.0-blue.svg)](https://www.python.org/downloads/release/python-3120/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![DOI](https://zenodo.org/badge/860006845.svg)](https://zenodo.org/doi/10.5281/zenodo.13834653)


## 🤝 License
Expand Down
4 changes: 2 additions & 2 deletions SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ currently being supported with security updates.

| Version | Supported |
| ------- | ------------------ |
| v2.0.5 | :white_check_mark: |
| < v2.0.5 | :x: |
| v3.0.0 | :white_check_mark: |
| < v3.0.0 | :x: |

## Reporting a Vulnerability

Expand Down
5 changes: 4 additions & 1 deletion src/dashboard.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from tabs.collection_methods import collection_methods_page
from tabs.data_governance import data_governance_page
from tabs.study_dashboard import study_dashboard_page
from tabs.study_dashboard_peds import study_dashboard_page_peds
from tabs.study_metadata import study_metadata_page
from tabs.healthsheet import healthsheet_page
from tabs.data_pre_processing import data_pre_processing_page
Expand Down Expand Up @@ -47,14 +48,15 @@ def create_tabs(tabs_func):

def main():
# Current version of the app
version = "2.0.5"
version = "3.0.0"
# Map tab names to functions
# In this dictionary, the key is the tab name and the value is the function that will be called when the tab is selected
# The function is defined in the respective file
# overview_page() is defined in tabs/overview.py
# collections_methods_page() is defined in tabs/collections_methods.py
# data_governance_page() is defined in tabs/data_governance.py
# study_dashboard_page() is defined in tabs/study_dashboard.py
# study_dashboard_peds_page() is defined in tabs/peds_study_dashboard.py
Copy link

Copilot AI Dec 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The comment references "tabs/peds_study_dashboard.py" but the actual file is named "tabs/study_dashboard_peds.py". The comment should match the actual filename for consistency and clarity.

Suggested change
# study_dashboard_peds_page() is defined in tabs/peds_study_dashboard.py
# study_dashboard_page_peds() is defined in tabs/study_dashboard_peds.py

Copilot uses AI. Check for mistakes.
# study_metadata_page() is defined in tabs/study_metadata.py
# healthsheet_page() is defined in tabs/healthsheet.py
# data_pre_processing_page() is defined in tabs/data_pre_processing.py
Expand All @@ -69,6 +71,7 @@ def main():
"Collection Methods": collection_methods_page,
"Data Governance": data_governance_page,
"Study Dashboard": study_dashboard_page,
"Pediatric Study Dashboard": study_dashboard_page_peds,
"Study Metadata": study_metadata_page,
"Healthsheet": healthsheet_page,
"Data Pre-Processing": data_pre_processing_page,
Expand Down
81 changes: 74 additions & 7 deletions src/tabs/collection_methods.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,21 @@ def collection_methods_page(tab_name):
st.markdown(

"""
Data is collected across five disease categories. Initial data release contains data collected from four of five categories (pediatric data to be incorporated in subsequent dataset releases.
Data is collected across five disease categories. Initial data release contains data collected from four of five categories.

Participants are recruited across different academic institutions from “high volume expert clinics” based on diagnosis and inclusion/exclusion criteria outlined below **(Table 1)**.

**Pediatric Participants:** Pediatric Participants are recruited strictly from the Hospital for Sick Children (Sickkids) and are based on different age groups.

**High Volume Expert Clinics:** Outpatient clinics within hospital systems or academic institutions that have developed an expertise in a specific disease area and see more than 50 patients per month from the same disease category. Ex: Asthma/COPD pulmonary specialty clinic.

Data is collected in the clinic with the assistance of a trained researched assistant. Future data collection will also occur remotely, however remote data collection did not occur with initial dataset being released. Voice samples are collected prospectively using a custom software application (Bridge2AI-Voice app) with the Bridge2AI-Voice protocols.
Data is collected in the clinic with the assistance of a trained research assistant. Future data collection will also occur remotely, however remote data collection did not occur with initial dataset being released. Voice samples are collected prospectively using a custom software application (Bridge2AI-Voice app) with the Bridge2AI-Voice protocols.

For Pediatrics, all data is collected using [reproschema-ui](https://repronim.org/reproschema-ui/) with the Bridge2AI-Voice pediatric protocol.

**Clinical validation:** Clinical validation is performed by qualified physician or practitioner based on established gold standards for diagnosis **(Table 1)**.

**Acoustic Tasks:** Voice, breathing, cough, and speech data are recorded with the app. A total of 22 acoustic Tasks are recorded through the app **(Table 2)**.
**Acoustic Tasks:** Voice, breathing, cough, and speech data are recorded with the app for adults, and with reproschema-ui for pediatrics. A total of 22 acoustic Tasks are recorded through the app **(Table 2)**.
Copy link

Copilot AI Dec 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The documentation states "A total of 22 acoustic Tasks are recorded through the app" but this count appears to be outdated. Looking at the Acoustic_Tasks_Protocol.csv table, there are now 41 tasks listed (23 original adult tasks + 18 pediatric tasks). The documentation should be updated to reflect the correct total number of acoustic tasks, or clarify that 22 refers only to adult tasks.

Suggested change
**Acoustic Tasks:** Voice, breathing, cough, and speech data are recorded with the app for adults, and with reproschema-ui for pediatrics. A total of 22 acoustic Tasks are recorded through the app **(Table 2)**.
**Acoustic Tasks:** Voice, breathing, cough, and speech data are recorded with the app for adults, and with reproschema-ui for pediatrics. A total of 23 adult and 18 pediatric acoustic tasks (41 total) are included in the protocol **(Table 2)**.

Copilot uses AI. Check for mistakes.

**Demographic surveys and confounders:** Detailed demographic data and surveys about confounding factors such as smoking and drinking history is collected through the smartphone application.

Expand All @@ -34,19 +38,82 @@ def collection_methods_page(tab_name):
>Bensoussan, Y., Ghosh, S. S., Rameau, A., Boyer, M., Bahr, R., Watts, S., Rudzicz, F., Bolser, D., Lerner-Ellis, J., Awan, S., Powell, M. E., Belisle-Pipon, J.-C., Ravitsky, V., Johnson, A., Zisimopoulos, P., Tang, J., Sigaras, A., Elemento, O., Dorr, D., … Bridge2AI-Voice. (2024). eipm/bridge2ai-redcap. Zenodo. [https://zenodo.org/doi/10.5281/zenodo.12760724](https://zenodo.org/doi/10.5281/zenodo.12760724).


Protocols can be found in the Bridge2AI-Voice documentation for v2.0.0 of the dataset at [https://kind-lab.github.io/vbai-fhir/protocol.html](https://kind-lab.github.io/vbai-fhir/protocol.html).

Protocols can be found in the Bridge2AI-Voice documentation for v3.0.0 of the dataset for each cohort in the following:
- [Voice Disorders](<https://github.com/eipm/bridge2ai-redcap/blob/main/docs/adults/Voice%20Disorders%20Protocol.md>)
- [Respiratory](<https://github.com/eipm/bridge2ai-redcap/blob/main/docs/adults/Respiratory%20Disorders%20Protocol.md>)
- [Mood/Psychiatric](<https://github.com/eipm/bridge2ai-redcap/blob/main/docs/adults/Mood%20and%20Psychiatric%20Disorders%20Protocol.md>)
- [Neurological](<https://github.com/eipm/bridge2ai-redcap/blob/main/docs/adults/Neurological%20and%20Neurodegenerative%20Disorders%20Protocol.md>)
- [Controls](<https://github.com/eipm/bridge2ai-redcap/blob/main/docs/adults/Generic%20Protocol%20(Controls).md>)
- [Pediatrics](<https://kind-lab.github.io/vbai-fhir/protocol.html>)
- [Peds 10+](<https://github.com/eipm/bridge2ai-redcap/blob/main/docs/pediatrics/Pediatric%20Disorders%20-%20Ages%2010%2B.md>)
- [Peds 6-10](<https://github.com/eipm/bridge2ai-redcap/blob/main/docs/pediatrics/Pediatric%20Disorders%20-%20Ages%20%5B6-10).md>)
- [Peds 4-6](<https://github.com/eipm/bridge2ai-redcap/blob/main/docs/pediatrics/Pediatric%20Disorders%20-%20Ages%20%5B4-6).md>)
- [Peds 2-4](<https://github.com/eipm/bridge2ai-redcap/blob/main/docs/pediatrics/Pediatric%20Disorders%20-%20Ages%20%5B2-4).md>)
"""
)

csv_file_path = "tables/Disease_cohort_inclusion_exclusion_criteria.csv"
caption = 'Table 1 - Disease cohort inclusion/exclusion criteria and validation methods'

def map_tasks_to_videos(task):
tasks_to_link = {
"Respiration Part A": "https://www.youtube.com/watch?v=Yb4bMj18Iqg",
"Cough part A": "https://www.youtube.com/watch?v=Yb4bMj18Iqg",
"Breath Sounds": "https://www.youtube.com/watch?v=i7BhlwNMk28",
"Voluntary Cough": "https://www.youtube.com/watch?v=2rLMfMjS_R0",
"Prolonged Vowel": "https://www.youtube.com/watch?v=ZanjPvWkB3M",
"Maximum Phonation Time": "https://www.youtube.com/watch?v=1limRFPAtPE",
"Glides": "https://www.youtube.com/watch?v=xKBYdkwEOvU",
"Loudness": "https://www.youtube.com/watch?v=5ssCSqZPb7Y",
"Diadochokinesis": "https://www.youtube.com/watch?v=RlY5KMXtZ4o",
"Rainbow Passage": "https://www.youtube.com/watch?v=Syq_ryCNQKQ",
"Caterpillar Passage": "https://www.youtube.com/watch?v=jN7bGT-PFXY",
"Free Speech Part A": "https://www.youtube.com/watch?v=FqK0WeGCAzg",
"Picture Description": "https://www.youtube.com/watch?v=abjWJEN6jf8",
"Free Speech Voice": "https://www.youtube.com/watch?v=5QMBSHNLRVI",
"Story Recall": "https://www.youtube.com/watch?v=cfkU-N5tWe4",
"Animal Fluency": "https://www.youtube.com/watch?v=4lkEAxDiEE8",
"Open Response Questions": "https://www.youtube.com/watch?v=THfOnGCaALA",
"Word-Color Stroop": "https://www.youtube.com/watch?v=IzotHKbYh30",
"Productive Vocabulary": "https://www.youtube.com/watch?v=TEshcUAlfPA",
"Cape-V Sentences": "https://www.youtube.com/watch?v=1qbiCdWxuSY",
"Random Item generation": "https://www.youtube.com/watch?v=ry__w1Mm2aE",
"Cinderella Story": "https://www.youtube.com/watch?v=eHx-vetG8Fk",
"ABC’s": None,
"Ready For School": None,
"Favorite Show": None,
"Favorite Food": None,
"Outside of School": None,
"Months": None,
"Counting": None,
"Naming Animals": None,
"Naming Food": None,
"Identifying Pictures": None,
"Picture Description (Pediatrics)": None,
"Long Sounds": None,
"Noisy Sounds": None,
"Caterpillar Passage (Pediatrics)": None,
"Repeat Words": None,
"Role naming": None,
"Repeat Sentences": None,
"Silly Sounds": None,
}

link = tasks_to_link[task]
if link:
return f"{task} [<a href=\"{link}\">Example</a>]"
else:
return f"{task}"

def map_questionnaire_link(q_link):
return f"<a href=\"{q_link}\">PDF</a>"

create_html_table(csv_file_path, caption, [], 0)

csv_file_path = "tables/Acoustic_Tasks_Protocol.csv"
caption = 'Table 2 - Acoustic Tasks in Protocol'
create_html_table(csv_file_path, caption)
create_html_table(csv_file_path, caption,link_formattter={"Task": map_tasks_to_videos})
Copy link

Copilot AI Dec 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is a typo in the parameter name. The parameter is named "link_formattter" (with three 't's) but should be "link_formatter" (with two 't's). This is inconsistent with the function parameter definition.

Copilot uses AI. Check for mistakes.

csv_file_path = "tables/Validated_Questionnaires.csv"
caption = 'Table 3 - Validated Questionnaires integrated into App'
create_html_table(csv_file_path, caption, ['X'])
create_html_table(csv_file_path, caption, ['X'],link_formattter={'Example': map_questionnaire_link})
Copy link

Copilot AI Dec 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is a typo in the parameter name. The parameter is named "link_formattter" (with three 't's) but should be "link_formatter" (with two 't's). This is inconsistent with the function parameter definition.

Copilot uses AI. Check for mistakes.
Loading
Loading