diff --git a/.mega-linter.yml b/.mega-linter.yml index e60448cdd..6718f2b2f 100644 --- a/.mega-linter.yml +++ b/.mega-linter.yml @@ -23,8 +23,8 @@ FILTER_REGEX_EXCLUDE: tsconfig.json EXCLUDED_DIRECTORIES: [ .obsidian, - plugins/optomitron-real-time-decision-support-plugin/analysis-data, - plugins/optomitron-real-time-decision-support-plugin/analysis-data/*, + plugins/optomitron-decision-support-notifications-plugin/analysis-data, + plugins/optomitron-decision-support-notifications-plugin/analysis-data/*, .git, .github, .vscode, diff --git a/README.md b/README.md index fe26086f2..2c03ee90c 100644 --- a/README.md +++ b/README.md @@ -11,9 +11,9 @@ This [monorepo](docs/contributing/repo-structure.md) contains libraries and tool # πŸ˜• Why are we doing this? -Billions of people are suffering and dying from chronic diseases. +The current system of clinical research, diagnosis, and treatment is failing the billions of people are suffering from chronic diseases. -πŸ‘‰ [Learn why the current system is failing...](docs/stuff-that-sucks.md) +[πŸ‘‰ Problems we're trying to fix...](docs/stuff-that-sucks.md) # πŸ§ͺ Our Hypothesis @@ -43,9 +43,15 @@ Our crazy theory is that we can accomplish the same great feat in the realm of c -# πŸ–₯️ dFDA Framework +# πŸ–₯️ dFDA Framework Components -This is a very high-level overview of the architecture. It's a work in progress. Please contribute! +This is a very high-level overview of the architecture. + +The dFDA is intended to be: +- a set of modular libraries and tools that can be reused in any project +- an abstract framework of core primitive components rather than a specific implementation +- a directory of existing open-source projects that can be used to fulfill the requirements of each primitive or component +- a collaborative effort, so please feel free to [contribute](docs/contributing.md)! ![dfda-stack-diagram-white-background.svg](docs/images/dfda-stack-diagram-white-background.svg) @@ -142,11 +148,11 @@ dFDa-1 is an initial prototype of the decentralized FDA located in [apps/dfda-1]

-dFDA screenshots +dFDA screenshots  

- Reminder Inbox + Reminder Inbox

Collects and aggregate data on symptoms, diet, sleep, exercise, weather, medication, and anything else from dozens @@ -159,11 +165,11 @@ Web and mobile push notifications with action buttons. ![web notification action buttons](docs/components/data-collection/web-notification-action-buttons.png) -## Chrome Extension +## Browser Extensions -By using the Chrome Extension, you can track your mood, symptoms, or any outcome you want to optimize in a fraction of a second using a unique popup interface. +By using the Browser Extension, you can track your mood, symptoms, or any outcome you want to optimize in a fraction of a second using a unique popup interface. -![Chrome Extension](docs/components/browser-extension/chrome-extension.png) +![Chrome Extension](docs/components/browser-extension/browser-extension.png) ## Data Analysis @@ -181,19 +187,21 @@ It then pairs every combination of variables and identifies likely causal relati ### Real-time Decision Support Notifications -![](docs/components/real-time-decision-support/notifications-screenshot.png) +![](docs/components/decision-support-notifications/notifications-screenshot-slide.png) [More info about real time decision support](docs/components/outcome-labels/outcome-labels.md) ### πŸ“ˆ Predictor Search Engine -![Predictor Search](docs/components/predictor-search-engine/predictor-search-simple-list-zoom.png) +[![Predictor Search Engine](docs/components/predictor-search-engine/predictor-search-simple-list-zoom.png)](docs/components/predictor-search-engine/predictor-search-engine.md) + +[πŸ‘‰ More info about the predictor search engine...](docs/components/predictor-search-engine/predictor-search-engine.md) ### Auto-Generated Observational Studies ![](docs/components/observational-studies/observational-studies.png) -[More info about observational studies](docs/components/observational-studies/observational-studies.md) +[πŸ‘‰ More info about observational studies...](docs/components/observational-studies/observational-studies.md) ## Prototype Demos @@ -230,3 +238,6 @@ It's our goal to avoid any duplication of effort. So please include existing pro **[πŸ‘‰ Click Here to Contribute](docs/contributing.md)** +# πŸ›Ÿ Support + +If you have any questions or need help, please [create an issue](https://github.com/decentralized-fda/decentralized-fda/issues/new) instead of emailing us so that others can benefit from the discussion. diff --git a/SECURITY.md b/SECURITY.md index 2cf6029fc..6f88f5b87 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -5,7 +5,7 @@ The following table displays the versions of the Decentralized FDA project currently being supported with security updates: | Version | Supported | -| ------- | ------------------ | +|---------|--------------------| | 1.0.x | :white_check_mark: | | < 1.0 | :x: | @@ -18,11 +18,11 @@ To report a security vulnerability within the Decentralized FDA project, follow 3. In the email, include a detailed description of the vulnerability, along with the affected component(s) and version(s) of the project. 4. Optionally, provide a proof of concept, screenshots, or any other relevant information to help us understand and reproduce the issue. -The CUREDAO security team will acknowledge receipt of your vulnerability report within 48 hours and will provide an estimated timeline for addressing the issue. Once the vulnerability has been resolved, the security team will coordinate with you to disclose the issue publicly, if appropriate. +The security team will acknowledge receipt of your vulnerability report within 48 hours and will provide an estimated timeline for addressing the issue. Once the vulnerability has been resolved, the security team will coordinate with you to disclose the issue publicly, if appropriate. ## Security Update Process -The CUREDAO team is committed to addressing security vulnerabilities in a timely manner. Once a vulnerability has been reported, the following process will be followed: +The team is committed to addressing security vulnerabilities in a timely manner. Once a vulnerability has been reported, the following process will be followed: 1. The security team will evaluate the reported vulnerability and assign a severity level based on the potential impact. 2. The security team will work on developing a fix for the vulnerability. diff --git a/apps/dfda-1/README.md b/apps/dfda-1/README.md index 922d61dfa..2f6df0144 100644 --- a/apps/dfda-1/README.md +++ b/apps/dfda-1/README.md @@ -15,12 +15,13 @@ The main purpose is to make it easier, cheaper, and faster to ## Features -* [Outcome Labels](https://www.curedao.org/blog/outcome-labels-plugind) -* [Predictor Search Engines](https://www.curedao.org/blog/predictor-search-engine-plugin) -* [Root Cause Analysis Reports](https://www.curedao.org/blog/root-cause-analysis-plugins) -* [Observational Mega-Studies](https://www.curedao.org/blog/observational-studies-plugin) -* [Real-Time Decision Support Notifications](https://www.curedao.org/blog/optomitron) -* [No Code Health App Builder](https://www.curedao.org/blog/no-code-health-app-builder) +[outcome-labels.md](../../docs/components/outcome-labels/outcome-labels.md) +* [Outcome Labels](../../docs/components/outcome-labels/outcome-labels.md) +* [Predictor Search Engine](../../docs/components/predictor-search-engine/predictor-search-engine.md) +* [Root Cause Analysis Reports](../../docs/components/root-cause-analysis-reports/root-cause-analysis-reports.md) +* [Observational Mega-Studies](../../docs/components/observational-studies/observational-studies.md) +* [Real-Time Decision Support Notifications](../../docs/components/decision-support-notifications/decision-support-notifications.md) +* [No Code Health App Builder](../../docs/components/no-code-app-builder/no-code-app-builder.md) * [AI Robot Doctor](https://www.curedao.org/blog/optomitron) * [Chrome Extension](https://www.curedao.org/blog/chrome-extension) diff --git a/apps/dfda-1/docs/features/decision-support.md b/apps/dfda-1/docs/features/decision-support.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/dfda-1/public/app/public/chrome_build.js b/apps/dfda-1/public/app/public/chrome_build.js new file mode 100644 index 000000000..7b1fe53a6 --- /dev/null +++ b/apps/dfda-1/public/app/public/chrome_build.js @@ -0,0 +1,86 @@ +const fs = require('fs'); +const path = require('path'); +const axios = require('axios'); +const cheerio = require('cheerio'); + +const downloadFile = async (url, filePath) => { + const dir = path.dirname(filePath); + if (!fs.existsSync(dir)) { + console.log(`Creating directory: ${dir}`); + fs.mkdirSync(dir, { recursive: true }); + } + + console.log(`Downloading ${url}...`); + const writer = fs.createWriteStream(filePath); + const response = await axios({ + url, + method: 'GET', + responseType: 'stream' + }); + + response.data.pipe(writer); + return new Promise((resolve, reject) => { + writer.on('finish', () => { + console.log(`Downloaded and saved to ${filePath}`); + resolve(); + }); + writer.on('error', reject); + }); +}; + +const generateSafeFilename = (url) => { + const urlObj = new URL(url); + let baseName = path.basename(urlObj.pathname); + if (urlObj.search) { + // Handling query strings + baseName += '_' + encodeURIComponent(urlObj.search).replace(/%/g, ''); + } + return baseName; +}; + +const processHTML = async (htmlFilePath) => { + console.log(`Processing HTML file: ${htmlFilePath}`); + const htmlContent = fs.readFileSync(htmlFilePath, 'utf8'); + const $ = cheerio.load(htmlContent); + + // Handle script tags + const scriptTags = $('script[src]'); + for (let i = 0; i < scriptTags.length; i++) { + const src = scriptTags[i].attribs.src; + if (src.startsWith('http')) { + const filename = generateSafeFilename(src); + const localPath = `./local-libs/${filename}`; + try { + await downloadFile(src, localPath); + $(scriptTags[i]).attr('src', localPath); + } catch (error) { + console.error(`Error downloading ${src}: ${error.message}`); + } + } + } + + // Handle link tags for CSS + const linkTags = $('link[rel="stylesheet"]'); + for (let i = 0; i < linkTags.length; i++) { + const href = linkTags[i].attribs.href; + if (href && href.startsWith('http')) { + const filename = generateSafeFilename(href); + const localPath = `./local-libs/${filename}`; + try { + await downloadFile(href, localPath); + $(linkTags[i]).attr('href', localPath); + } catch (error) { + console.error(`Error downloading ${href}: ${error.message}`); + } + } + } + + const modifiedHtml = $.html(); + const newHtmlFilePath = './chrome_index.html'; + fs.writeFileSync(newHtmlFilePath, modifiedHtml); + console.log(`Created modified HTML file: ${newHtmlFilePath}`); +}; + +processHTML('./index.html').catch(error => { + console.error(`An error occurred: ${error.message}`); +}); diff --git a/apps/dfda-1/public/app/public/data/qmStates.js b/apps/dfda-1/public/app/public/data/qmStates.js index b7603c0b9..c217abd84 100644 --- a/apps/dfda-1/public/app/public/data/qmStates.js +++ b/apps/dfda-1/public/app/public/data/qmStates.js @@ -1641,6 +1641,7 @@ var qmStates = [ ] if (typeof window !== "undefined") { window.qmStates = qmStates; + window.qm = window.qm || {}; window.qm.qmStaticData = window.qm.qmStaticData || {}; window.qm.qmStaticData.states = qmStates; } else { diff --git a/apps/dfda-1/public/app/public/img/screenshots/collect-import-analyze-screenshot-ionic-qm-text.png b/apps/dfda-1/public/app/public/img/screenshots/collect-import-analyze-screenshot-ionic-qm-text.png deleted file mode 100644 index a36163cdd..000000000 Binary files a/apps/dfda-1/public/app/public/img/screenshots/collect-import-analyze-screenshot-ionic-qm-text.png and /dev/null differ diff --git a/apps/dfda-1/public/app/public/img/screenshots/all-ionic-quantimodo-screenshots.png b/apps/dfda-1/public/app/public/img/screenshots/record-inbox-import-connectors-analyze-study.png similarity index 100% rename from apps/dfda-1/public/app/public/img/screenshots/all-ionic-quantimodo-screenshots.png rename to apps/dfda-1/public/app/public/img/screenshots/record-inbox-import-connectors-analyze-study.png diff --git a/apps/dfda-1/public/app/public/img/screenshots/ionic-inbox-screenshot-bg.png b/apps/dfda-1/public/app/public/img/screenshots/reminder-inbox-screenshot-bg.png similarity index 100% rename from apps/dfda-1/public/app/public/img/screenshots/ionic-inbox-screenshot-bg.png rename to apps/dfda-1/public/app/public/img/screenshots/reminder-inbox-screenshot-bg.png diff --git a/apps/dfda-1/public/app/public/img/screenshots/reminder-inbox-screenshot-no-text.png b/apps/dfda-1/public/app/public/img/screenshots/reminder-inbox-screenshot-no-text.png new file mode 100644 index 000000000..6c8eaf00c Binary files /dev/null and b/apps/dfda-1/public/app/public/img/screenshots/reminder-inbox-screenshot-no-text.png differ diff --git a/apps/dfda-1/public/app/public/index.html b/apps/dfda-1/public/app/public/index.html index 7571a675a..41bc989bf 100644 --- a/apps/dfda-1/public/app/public/index.html +++ b/apps/dfda-1/public/app/public/index.html @@ -26,6 +26,7 @@ + @@ -156,7 +157,7 @@ - + diff --git a/apps/dfda-1/public/app/public/js/qmChrome.js b/apps/dfda-1/public/app/public/js/qmChrome.js index d83b490f4..5cd7002a2 100644 --- a/apps/dfda-1/public/app/public/js/qmChrome.js +++ b/apps/dfda-1/public/app/public/js/qmChrome.js @@ -261,16 +261,28 @@ window.qm.chrome = { } }; if(typeof screen !== "undefined"){ + var qmChrome = window.qm.chrome; + debugger + // TODO: Remove this redundant definition when you figure out why it's not available + qm.chrome.multiplyScreenHeight = function (factor){ + if(typeof screen === "undefined"){return false;} + return parseInt(factor * screen.height); + } + qm.chrome.multiplyScreenWidth = function (factor){ + if(typeof screen === "undefined"){return false;} + return parseInt(factor * screen.width); + } qm.chrome.windowParams = { - introWindowParams: { url: "index.html#/app/intro", type: 'panel', top: multiplyScreenHeight(0.2), left: multiplyScreenWidth(0.4), width: 450, height: 750, focused: true}, + introWindowParams: { url: "index.html#/app/intro", type: 'panel', top: qm.chrome.multiplyScreenHeight(0.2), left: qm.chrome.multiplyScreenWidth(0.4), width: 450, height: 750, focused: true}, facesWindowParams: { url: "android_popup.html", type: 'panel', top: screen.height - 150, left: screen.width - 380, width: 390, height: 110, focused: true}, - loginWindowParams: { url: "index.html#/app/login", type: 'panel', top: multiplyScreenHeight(0.2), left: multiplyScreenWidth(0.4), width: 450, height: 750, focused: true}, + loginWindowParams: { url: "index.html#/app/login", type: 'panel', top: qm.chrome.multiplyScreenHeight(0.2), left: qm.chrome.multiplyScreenWidth(0.4), width: 450, height: 750, focused: true}, fullInboxWindowParams: { url: "index.html#/app/reminders-inbox", type: 'panel', top: screen.height - 800, left: screen.width - 455, width: 450, height: 750}, compactInboxWindowParams: { url: "index.html#/app/reminders-inbox-compact", type: 'panel', top: screen.height - 360 - 30, left: screen.width - 350, width: 350, height: 360}, inboxNotificationParams: { type: "basic", title: "How are you?", message: "Click to open reminder inbox", iconUrl: "img/icons/icon_700.png", priority: 2}, signInNotificationParams: { type: "basic", title: "How are you?", message: "Click to sign in and record a measurement", iconUrl: "img/icons/icon_700.png", priority: 2}, }; } +qm.chrome.initialize(); if(qm.platform.isChromeExtension()){ qm.chrome.initialize(); } diff --git a/apps/dfda-1/public/app/public/js/qmHelpers.js b/apps/dfda-1/public/app/public/js/qmHelpers.js index 9e3c1a558..3b595ae58 100644 --- a/apps/dfda-1/public/app/public/js/qmHelpers.js +++ b/apps/dfda-1/public/app/public/js/qmHelpers.js @@ -594,6 +594,9 @@ var qm = { }, getQMOrigin: function(){ var origin; + if(qm.platform.isChromeExtension()){ + return "https://app.quantimo.do"; + } //return "https://app.quantimo.do"; if(qm.appMode.isBackEnd()){ origin = process.env.QM_API_ORIGIN || "https://app.quantimo.do"; @@ -11189,6 +11192,7 @@ var qm = { return fullUrl; }, validateUrl: function(url){ + return; // Not sure what this was for but it breaks chrome_index.html if(url.indexOf('index.html') !== -1 && url.indexOf('2Findex.html') === -1 && url.indexOf('/index.html') === -1){ diff --git a/apps/dfda-1/public/app/public/js/services/qmService.js b/apps/dfda-1/public/app/public/js/services/qmService.js index 343b292a6..ac0954ab7 100644 --- a/apps/dfda-1/public/app/public/js/services/qmService.js +++ b/apps/dfda-1/public/app/public/js/services/qmService.js @@ -6078,7 +6078,7 @@ angular.module('starter').factory('qmService', ["$http", "$q", "$rootScope", "$i } else { psychedelicLoader.start(); } - debugger + //debugger // var templateUrl = "templates/loaders/triangles-loader.html" // I think the high GPU usage crashes the browser // $ionicLoading.show({templateUrl: templateUrl, duration: duration * 1000}); diff --git a/apps/dfda-1/public/app/public/manifest-chrome.json b/apps/dfda-1/public/app/public/manifest-chrome.json index e46fd140b..d0585a091 100644 --- a/apps/dfda-1/public/app/public/manifest-chrome.json +++ b/apps/dfda-1/public/app/public/manifest-chrome.json @@ -50,7 +50,7 @@ }, "background": { "scripts": [ - "qmChromeBackground.js" + "js/qmChrome.js" ], "persistent": true } diff --git a/apps/dfda-1/public/app/public/test_generated_background_page.html b/apps/dfda-1/public/app/public/test_generated_background_page.html new file mode 100644 index 000000000..254f6c905 --- /dev/null +++ b/apps/dfda-1/public/app/public/test_generated_background_page.html @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/components/browser-extension/browser-extension.md b/docs/components/browser-extension/browser-extension.md new file mode 100644 index 000000000..3d42eca0f --- /dev/null +++ b/docs/components/browser-extension/browser-extension.md @@ -0,0 +1,15 @@ +# Browser Extension + +By using the Browser Extension, you can track your mood, symptoms, or any outcome you want to optimize in a fraction of a second using a unique popup interface. + +![Chrome Extension](browser-extension.png) + +# πŸ’» Code + +For development, you need to copy manifest-chrome.json into manifest.json and then load the [apps/dfda-1/public/app/public](../../../apps/dfda-1/public/app/public) folder as an unpacked extension in Chrome. + +[πŸ‘‰ Code here...](../../../apps/dfda-1/public/app/public) + +# πŸ›Ÿ Support + +If you have any questions or need help, please [create an issue](https://github.com/decentralized-fda/decentralized-fda/issues/new) instead of emailing us so that others can benefit from the discussion. diff --git a/docs/components/browser-extension/chrome-extension.png b/docs/components/browser-extension/browser-extension.png similarity index 100% rename from docs/components/browser-extension/chrome-extension.png rename to docs/components/browser-extension/browser-extension.png diff --git a/docs/components/data-analysis/3-steps-to-optimization.png b/docs/components/data-analysis/3-steps-to-optimization.png new file mode 100644 index 000000000..67bd53095 Binary files /dev/null and b/docs/components/data-analysis/3-steps-to-optimization.png differ diff --git a/docs/components/data-analysis/causal-inference.png b/docs/components/data-analysis/causal-inference-wide.png similarity index 100% rename from docs/components/data-analysis/causal-inference.png rename to docs/components/data-analysis/causal-inference-wide.png diff --git a/docs/components/data-analysis/causal-inference.svg b/docs/components/data-analysis/causal-inference-wide.svg similarity index 100% rename from docs/components/data-analysis/causal-inference.svg rename to docs/components/data-analysis/causal-inference-wide.svg diff --git a/docs/components/data-analysis/correlation-over-various-duration-of-action-hyperparameters.PNG b/docs/components/data-analysis/correlation-over-various-duration-of-action-hyperparameters.PNG new file mode 100644 index 000000000..9f08ab728 Binary files /dev/null and b/docs/components/data-analysis/correlation-over-various-duration-of-action-hyperparameters.PNG differ diff --git a/docs/components/real-time-decision-support/diagram-curedao.gif b/docs/components/data-analysis/self-improving-ai-protocol-recommendations.gif similarity index 100% rename from docs/components/real-time-decision-support/diagram-curedao.gif rename to docs/components/data-analysis/self-improving-ai-protocol-recommendations.gif diff --git a/docs/components/decision-support-notifications/decision-support-notifications.md b/docs/components/decision-support-notifications/decision-support-notifications.md new file mode 100644 index 000000000..d5e63446e --- /dev/null +++ b/docs/components/decision-support-notifications/decision-support-notifications.md @@ -0,0 +1,38 @@ +--- +title: Decision Support Notifications +description: Get notifications telling you the most important thing (MIT) you can do at any given time to optimize your health and happiness. +cover: notifications-screenshot-slide.png +coverY: 203.93538913362704 +--- + +# πŸ€– Decision Support Notifications + +![notifications-screenshot-slide.png](notifications-screenshot-slide.png) + +## What is it? + +Decision Support Notifications are a way to get notifications telling you the most important thing (MIT) you can do at any given time to optimize your health and happiness. + +## How does it work? + +Decision Support Notifications work by using a combination of machine learning and control theory to predict the future and optimize your health and happiness. + +Time-series data on food, drugs, and symptoms is fed into a machine learning model that which input values produce the most significant improvements in symptom severity ratings or biomarker levels. + +The system monitors your body and environment in real-time, and then identifies when the most significant input factors are outside their optimal ranges. When this happens, the system sends you a notification telling you what you can do to optimize your health and happiness. + +## References + +1. [SunilDeshpande\_S2014\_ETD.pdf (asu.edu)](https://keep.lib.asu.edu/\_flysystem/fedora/c7/114023/Deshpande\_asu\_0010E\_14022.pdf) +2. [LocalControl: An R Package for Comparative Safety and Effectiveness Research | Journal of Statistical Software (jstatsoft.org)](https://www.jstatsoft.org/article/view/v096i04) +3. [bbotk: A brief introduction (r-project.org)](https://cran.r-project.org/web/packages/bbotk/vignettes/bbotk.html) +4. [artemis-toumazi/dfpk (github.com)](https://github.com/artemis-toumazi/dfpk) +5. [miroslavgasparek/MPC\_Cancer: Model Predictive Control for the optimisation of the tumour treatment through the combination of the chemotherapy and immunotherapy. (github.com)](https://github.com/miroslavgasparek/MPC\_Cancer) +6. [Doubly Robust Learning β€” econml 0.12.0 documentation](https://econml.azurewebsites.net/spec/estimation/dr.html) +7. [A control systems engineering approach for adaptive behavioral interventions: illustration with a fibromyalgia intervention (nih.gov)](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4167895/) +8. [The promise of machine learning in predicting treatment outcomes in psychiatry - Chekroud - 2021 - World Psychiatry - Wiley Online Library](https://onlinelibrary.wiley.com/doi/full/10.1002/wps.20882) +9. [CURATE.AI: Optimizing Personalized Medicine with Artificial Intelligence - Agata Blasiak, Jeffrey Khong, Theodore Kee, 2020 (sagepub.com)](https://journals.sagepub.com/doi/full/10.1177/2472630319890316) +10. [Using nonlinear model predictive control to find optimal therapeutic strategies to modulate inflammation (aimspress.com)](https://www.aimspress.com/article/id/2665) +11. [Forecasting Treatment Responses Over Time Using Recurrent Marginal Structural Networks (nips.cc)](https://papers.nips.cc/paper/2018/hash/56e6a93212e4482d99c84a639d254b67-Abstract.html) +12. [Estimating counterfactual treatment outcomes over time through adversarially balanced representations | OpenReview](https://openreview.net/forum?id=BJg866NFvB) +13. [https://dash.harvard.edu/bitstream/handle/1/37366470/AGUILAR-SENIORTHESIS-2019.pdf?isAllowed=y\&sequence=1](https://dash.harvard.edu/bitstream/handle/1/37366470/AGUILAR-SENIORTHESIS-2019.pdf?isAllowed=y\&sequence=1) diff --git a/docs/components/real-time-decision-support/how-much-we-know.png b/docs/components/decision-support-notifications/how-much-we-know.png similarity index 100% rename from docs/components/real-time-decision-support/how-much-we-know.png rename to docs/components/decision-support-notifications/how-much-we-know.png diff --git a/docs/components/real-time-decision-support/screenshots/notifications-screenshot-blue.png b/docs/components/decision-support-notifications/notifications-screenshot-blue.png similarity index 100% rename from docs/components/real-time-decision-support/screenshots/notifications-screenshot-blue.png rename to docs/components/decision-support-notifications/notifications-screenshot-blue.png diff --git a/docs/components/real-time-decision-support/notifications-screenshot.png b/docs/components/decision-support-notifications/notifications-screenshot-slide.png similarity index 100% rename from docs/components/real-time-decision-support/notifications-screenshot.png rename to docs/components/decision-support-notifications/notifications-screenshot-slide.png diff --git a/docs/components/real-time-decision-support/optomitron-cover.png b/docs/components/decision-support-notifications/optomitron-cover.png similarity index 100% rename from docs/components/real-time-decision-support/optomitron-cover.png rename to docs/components/decision-support-notifications/optomitron-cover.png diff --git a/docs/components/real-time-decision-support/optomitron-logo.png b/docs/components/decision-support-notifications/optomitron-logo.png similarity index 100% rename from docs/components/real-time-decision-support/optomitron-logo.png rename to docs/components/decision-support-notifications/optomitron-logo.png diff --git a/docs/components/real-time-decision-support/optomitron-square-24.png b/docs/components/decision-support-notifications/optomitron-square-24.png similarity index 100% rename from docs/components/real-time-decision-support/optomitron-square-24.png rename to docs/components/decision-support-notifications/optomitron-square-24.png diff --git a/docs/components/real-time-decision-support/screenshots/real-time-decision-support-notification-400x717.png b/docs/components/decision-support-notifications/real-time-decision-support-notification-400x717.png similarity index 100% rename from docs/components/real-time-decision-support/screenshots/real-time-decision-support-notification-400x717.png rename to docs/components/decision-support-notifications/real-time-decision-support-notification-400x717.png diff --git a/docs/components/real-time-decision-support/screenshots/real-time-decision-support-notification-852x1528.png b/docs/components/decision-support-notifications/real-time-decision-support-notification-852x1528.png similarity index 100% rename from docs/components/real-time-decision-support/screenshots/real-time-decision-support-notification-852x1528.png rename to docs/components/decision-support-notifications/real-time-decision-support-notification-852x1528.png diff --git a/docs/components/real-time-decision-support/screenshots/real-time-decision-support-notification-small.png b/docs/components/decision-support-notifications/real-time-decision-support-notification-small.png similarity index 100% rename from docs/components/real-time-decision-support/screenshots/real-time-decision-support-notification-small.png rename to docs/components/decision-support-notifications/real-time-decision-support-notification-small.png diff --git a/docs/components/real-time-decision-support/robot-guy.png b/docs/components/decision-support-notifications/robot-guy.png similarity index 100% rename from docs/components/real-time-decision-support/robot-guy.png rename to docs/components/decision-support-notifications/robot-guy.png diff --git a/docs/components/optimiton-ai-agent/optomitron-ai-agent.md b/docs/components/optimiton-ai-agent/optomitron-ai-agent.md index c4fc077f0..c7de5d09a 100644 --- a/docs/components/optimiton-ai-agent/optomitron-ai-agent.md +++ b/docs/components/optimiton-ai-agent/optomitron-ai-agent.md @@ -19,3 +19,5 @@ Currently, we've implemented causal inference analysis of sparse time series dat We're working on implementing a more robust pharmacokinetic predictive model control recurrent neural network. Ideally, Optimitron AI agent will be able to further improve the precision and accuracy of the real-time recommendations over time by leveraging reinforcement learning and community contributions. + +[πŸ‘‰ Learn more about the data analysis here...](../data-analysis/data-analysis.md) diff --git a/docs/components/real-time-decision-support/3-steps.png b/docs/components/real-time-decision-support/3-steps.png deleted file mode 100644 index 5f263a4a4..000000000 Binary files a/docs/components/real-time-decision-support/3-steps.png and /dev/null differ diff --git a/docs/components/real-time-decision-support/correlation-over-various-duration-of-action-hyperparameters.PNG b/docs/components/real-time-decision-support/correlation-over-various-duration-of-action-hyperparameters.PNG deleted file mode 100644 index 08c523456..000000000 Binary files a/docs/components/real-time-decision-support/correlation-over-various-duration-of-action-hyperparameters.PNG and /dev/null differ diff --git a/docs/components/real-time-decision-support/real-time-notifications.md b/docs/components/real-time-decision-support/real-time-notifications.md deleted file mode 100644 index 7778a67a6..000000000 --- a/docs/components/real-time-decision-support/real-time-notifications.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -description: >- - Optomitron is an AI assistant that analyzes your data discover which hidden - factors are most likely to worsen or improve inflammatory symptom severity. -cover: optomitron-cover.png -coverY: 203.93538913362704 ---- - -# πŸ€– Optomitron Real-Time Decision Support Plugin - -[![Click Here for Demo Video](images/optimitron-ai-assistant.png)](https://youtu.be/hd50A74o8YI) - -#### [DEMO WEBSITE](https://demo.quantimo.do/dev/src/index.html#/app/chat) - -Optimitron is an AI assistant that asks you about your symptoms and potential factors. Then she applies pharmacokinetic predictive analysis to inform you of the most important things you can do to minimize symptom severity. - -![inflammation worldwide](inflammation-worldwide.png) - -A half-billion are suffering from autoimmune diseases like Crone's disease, psoriasis, and Fibromyalgia. There’s also a great deal of mounting evidence that treatment-resistant depression and other mental illnesses are strongly related to immune dysregulation. What all these diseases have in common is that they can be exacerbated or improved by hundreds of factors in daily life. - -![inflammation factors](autoimmune-factors.png) - -Probably the most significant is the 3 pounds of thousands of chemicals that we consume every day through our diets. Since the thousands of chemicals in our food have been GRAS or β€œGenerally recognized as safe” by the FDA, there’s no incentive to do research. - -![](how-much-we-know.png) - -We've built a connector framework that imports data on diet, physical activity, sleep, social interaction, environmental factors, symptom severity, vital signs, and others. - -![optomitron diagram](robot-guy.png) - -Then we apply pharmacokinetic predictive analysis that accounts for onset delays and durations of action. This enables her to obtain personalized effectiveness values (similar to recommended daily values) for treatments and reveal potential root causes of chronic conditions. - -![screenshot](correlation-over-various-duration-of-action-hyperparameters.png) - -The accuracy of the results obtained from quasi-experimental techniques and observational data is highly dependent on the quantity and quality of the data. To maximize the amount of available data, we're currently in the process of creating a decentralized autonomous organization called CureDAO. Its mission is to create an open-source platform for crowdsourced clinical research. It incentivizes collaboration and data sharing by competing entities by issuing non-fungible tokens to any contributor of intellectual property or data. - -Contributors of data and intellectual property will receive ongoing royalties for their contributions linked to their non-fungible tokens. We are currently meeting with investors and recruiting members. We plan to hold a fair and public auction for CureDAO tokens in May 2022. - -## References - -1. [SunilDeshpande\_S2014\_ETD.pdf (asu.edu)](https://keep.lib.asu.edu/\_flysystem/fedora/c7/114023/Deshpande\_asu\_0010E\_14022.pdf) -2. [LocalControl: An R Package for Comparative Safety and Effectiveness Research | Journal of Statistical Software (jstatsoft.org)](https://www.jstatsoft.org/article/view/v096i04) -3. [bbotk: A brief introduction (r-project.org)](https://cran.r-project.org/web/packages/bbotk/vignettes/bbotk.html) -4. [artemis-toumazi/dfpk (github.com)](https://github.com/artemis-toumazi/dfpk) -5. [miroslavgasparek/MPC\_Cancer: Model Predictive Control for the optimisation of the tumour treatment through the combination of the chemotherapy and immunotherapy. (github.com)](https://github.com/miroslavgasparek/MPC\_Cancer) -6. [Doubly Robust Learning β€” econml 0.12.0 documentation](https://econml.azurewebsites.net/spec/estimation/dr.html) -7. [A control systems engineering approach for adaptive behavioral interventions: illustration with a fibromyalgia intervention (nih.gov)](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4167895/) -8. [The promise of machine learning in predicting treatment outcomes in psychiatry - Chekroud - 2021 - World Psychiatry - Wiley Online Library](https://onlinelibrary.wiley.com/doi/full/10.1002/wps.20882) -9. [CURATE.AI: Optimizing Personalized Medicine with Artificial Intelligence - Agata Blasiak, Jeffrey Khong, Theodore Kee, 2020 (sagepub.com)](https://journals.sagepub.com/doi/full/10.1177/2472630319890316) -10. [Using nonlinear model predictive control to find optimal therapeutic strategies to modulate inflammation (aimspress.com)](https://www.aimspress.com/article/id/2665) -11. [Forecasting Treatment Responses Over Time Using Recurrent Marginal Structural Networks (nips.cc)](https://papers.nips.cc/paper/2018/hash/56e6a93212e4482d99c84a639d254b67-Abstract.html) -12. [Estimating counterfactual treatment outcomes over time through adversarially balanced representations | OpenReview](https://openreview.net/forum?id=BJg866NFvB) -13. [https://dash.harvard.edu/bitstream/handle/1/37366470/AGUILAR-SENIORTHESIS-2019.pdf?isAllowed=y\&sequence=1](https://dash.harvard.edu/bitstream/handle/1/37366470/AGUILAR-SENIORTHESIS-2019.pdf?isAllowed=y\&sequence=1) diff --git a/docs/stuff-that-sucks.md b/docs/stuff-that-sucks.md index 8465d47a7..c16b7bdb3 100644 --- a/docs/stuff-that-sucks.md +++ b/docs/stuff-that-sucks.md @@ -1,6 +1,6 @@ # What We're Trying to Fix -The current system of clinical research, diagnosis, and treatment is miserably failing the billions of people are suffering from chronic diseases. +The current system of clinical research, diagnosis, and treatment is failing the billions of people are suffering from chronic diseases. It takes over [10 years and 2.6 billion dollars](https://www.semanticscholar.org/paper/Innovation-in-the-pharmaceutical-industry%3A-New-of-DiMasiGrabowski/3275f31c072ac11c6ca7a5260bd535720f07df41) to bring a drug to market (including failed attempts). It costs [$41k](https://www.clinicalleader.com/doc/getting-a-handle-on-clinical-trial-costs-0001) per subject in Phase III clinical trials. diff --git a/libs/sdk-javascript/.babelrc b/libs/sdk-javascript/.babelrc deleted file mode 100644 index cf7ddd99c..000000000 --- a/libs/sdk-javascript/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "presets": [["@nrwl/web/babel", { "useBuiltIns": "usage" }]] -} diff --git a/libs/sdk-javascript/README.md b/libs/sdk-javascript/README.md deleted file mode 100644 index 62b76d633..000000000 --- a/libs/sdk-javascript/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE - -Inside an autogenerated lib. - -## Next step - -To actually use this lib, you must now run the `generate-sources` builder. - -The `generate-sources` builder has been pre-configured with the options you supplied when creating this lib with the `api-lib` schematic. -You can go check those options, and modify them if you need to, in `workspace.json`. - -When you are good, generate the sources running: - -```sh -nx run sdk-javascript:generate-sources -``` - -You should run - either manually or via CI - this `generate-sources` builder every time the API spec file changes. - -## Multiple libs - -You can have multiple libs like this one, and configure them to use different OpenAPITools generators, or generate sources from different API spec files. - -### Example - -```sh -# Create a lib preconfigured to generate a TypeScript SDK based on Axios -nx generate @trumbitta/nx-plugin-openapi:api-lib api-axios --generator typescript-axios - -# Create a lib preconfigured to generate HTML docs -nx generate @trumbitta/nx-plugin-openapi:api-lib api-docs --generator html - -# Generate or update the TypeScript SDK based on Axios -nx run api-axios:generate-sources - -# Generate or update the HTML API docs -nx run api-docs:generate-sources -``` diff --git a/libs/sdk-javascript/project.json b/libs/sdk-javascript/project.json deleted file mode 100644 index 25c6135ea..000000000 --- a/libs/sdk-javascript/project.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "name": "sdk-javascript", - "sourceRoot": "libs/sdk-javascript/src", - "projectType": "library", - "targets": { - "generate-sources": { - "executor": "@trumbitta/nx-plugin-openapi:generate-api-lib-sources", - "options": { - "useDockerBuild": true, - "generator": "javascript", - "sourceSpecPathOrUrl": "libs/dfda-api-spec/src/dfda-api-spec.openapi.yml", - "additionalProperties": "", - "globalProperties": "" - } - } - }, - "implicitDependencies": ["dfda-api-spec"], - "tags": ["api-sdk"] -}