@ai-ecom/medusa-plugin-patient-record
Version:
A plugin for patient record
82 lines (81 loc) • 6.44 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _medusa = require("@medusajs/medusa");
var _openai = require("openai");
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
var configuration = new _openai.Configuration({
apiKey: process.env.OPENAI_API_KEY
});
var DiagnosticService = /*#__PURE__*/function (_TransactionBaseServi) {
function DiagnosticService(_ref) {
var _this;
var eventBusService = _ref.eventBusService;
(0, _classCallCheck2["default"])(this, DiagnosticService);
// eslint-disable-next-line prefer-rest-params
_this = _callSuper(this, DiagnosticService, [arguments[0]]);
_this.eventBus_ = eventBusService;
return _this;
}
(0, _inherits2["default"])(DiagnosticService, _TransactionBaseServi);
return (0, _createClass2["default"])(DiagnosticService, [{
key: "processV1",
value: function () {
var _processV = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(payload) {
var openai, prompt, generated, generated_result;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
console.log("👉 Processing diagnostic");
openai = new _openai.OpenAIApi(configuration);
prompt = generatePrompt(payload);
_context.next = 5;
return openai.createChatCompletion({
model: "gpt-4",
messages: [{
role: "system",
content: prompt
}]
});
case 5:
generated = _context.sent;
console.log("👉 Generated", generated);
generated_result = generated.data.choices[0].message.content;
return _context.abrupt("return", {
status: "success",
message: generated_result
});
case 9:
case "end":
return _context.stop();
}
}, _callee);
}));
function processV1(_x) {
return _processV.apply(this, arguments);
}
return processV1;
}()
}]);
}(_medusa.TransactionBaseService);
// eslint-disable-next-line max-len
(0, _defineProperty2["default"])(DiagnosticService, "IndexName", "diagnostic");
(0, _defineProperty2["default"])(DiagnosticService, "Events", {
PROCESSED: "diagnostic.processed"
});
var _default = exports["default"] = DiagnosticService;
function generatePrompt(payload) {
return "\nDu bist \"Genesis\" ein Arzt. Basierend auf den folgenden Laborergebnissen, Vorerkrankungen, Famili\xE4ren Anamnese, Allergien und Intoleranzen sollst du eine Arbeitsdiagnose\nsowie mindestens 5 Differnzialdiagnosen erstellen. Bitte erkl\xE4ren zu jeder Diagnose in einem Satz den Hintergrund und welche Werte dich zu der Annahme f\xFChren und die die Wahrscheinlichkeit in Prozent\nmit der diese Diagnose vorliegt. Schreibe noch dazu, welche n\xE4chsten Schritte du zur Weiteren Diagnosesicherung einleiten w\xFCrdest, falls dir noch Werte oder untersuchungen fehlen um \ndie Diagnose zu sichern. Zuletzt Schlage die erste und zweite Linie Therapie f\xFCr deine Diagnose vor.\n\nHier die Informationen, die dir bereits zur Verf\xFCgung stehen:\n \nVorerkrankungen: ".concat(!!payload.preExistingConditions ? payload.preExistingConditions : "Keine Vorerkrankungen bekannt.", "\n\nAktuelle Medikamente: ").concat(!!payload.currentMedication ? payload.currentMedication : "Keine aktuellen Medikamente bekannt.", "\n}\n\nAktuelle Symptome: ").concat(!!payload.currentSymptoms ? payload.currentSymptoms : "Keine aktuellen Symptome bekannt.", "\n}\n\nAllergien und Unvertr\xE4glichkeiten: ").concat(!!payload.allergiesAndIntolerances ? payload.allergiesAndIntolerances : "Keine Allergien oder Unverträglichkeiten bekannt.", "\n}\n\nFamilienanamnese: ").concat(!!payload.familyHistory ? payload.familyHistory : "Keine familiäre Vorbelastung bekannt.", "\n}\n\nLaborwerte: ").concat(payload.value, "\n\nGeburtsdatum: ").concat(!!payload.birthday ? payload.birthday.toISOString().split("T")[0] : "Kein Geburtsdatum bekannt.", "\n\n Geschlecht: ").concat(!!(payload !== null && payload !== void 0 && payload.gender) ? payload.gender : "Kein Geschlecht bekannt.", "\n}\n\nACHTUNG: Gib mir die Antwort IMMER im JSON Format im folgenden typescript Typ als Antwort:\n{\n diagnosis_1?: {\n text: string;\n explanation: string;\n probability: string;\n },\n diagnosis_2?: {\n text: string;\n explanation: string;\n probability: string;\n },\n diagnosis_3?: {\n text: string;\n explanation: string;\n probability: string;\n },\n diagnosis_4?: {\n text: string;\n explanation: string;\n probability: string;\n },\n diagnosis_5?: {\n text: string;\n explanation: string;\n probability: string;\n },\n next_steps?: string;\n therapy_recommendation?: string;\n notes?: string;\n}\nDu kannst eine Diagnosis auch leer lassen, falls du keine passende Diagnose findest.\n");
}