Spaces:
Runtime error
Runtime error
| import os | |
| import requests | |
| from enum import Enum | |
| from dotenv import load_dotenv | |
| from prompts import Prompts | |
| import json | |
| # Load environment variables from .env file | |
| load_dotenv() | |
| # Access environment variables | |
| API_KEY = os.environ['CHAT_GPT_KEY'] | |
| class Stage(Enum): | |
| INITIAL_ASSESSMENT = "Initial Assessment" | |
| FOLLOWUP_ASSESSMENT = "Follow Up Assessment" | |
| EVALUATION = "Evaluation" | |
| DETAILED_EVALUATION = "Detailed Evaluation" | |
| PROGRESS_NOTE = "Progress Note" | |
| RECOMMENDATION="Recommendations" | |
| DISCHARGE_SUMMARY = "Discharge Summary" | |
| SHORT_TERM_GOALS = "Short Term Goals" | |
| LONG_TERM_GOALS = "Long Term Goals" | |
| class GPT_Service: | |
| def __init__(self): | |
| self.api_key = API_KEY | |
| self.base_url = 'https://api.openai.com/v1/chat/completions' | |
| def request_gpt_for_response(self, system_prompt, userPrompt): | |
| headers = { | |
| 'Content-Type': 'application/json', | |
| 'Authorization': f'Bearer {self.api_key}' | |
| } | |
| data = { | |
| 'model': 'gpt-3.5-turbo-1106', | |
| 'temperature': 0.3, | |
| 'messages': [ | |
| { | |
| 'role': 'system', | |
| 'content': system_prompt | |
| }, | |
| { | |
| 'role': 'user', | |
| 'content': userPrompt | |
| } | |
| ] | |
| } | |
| try: | |
| response = requests.post( | |
| self.base_url, | |
| json=data, | |
| headers=headers, | |
| ) | |
| response.raise_for_status() | |
| return response.json()['choices'][0]['message']['content'] | |
| except requests.exceptions.RequestException as e: | |
| raise ValueError(f"Error: {e}") | |
| def formulateUserPrompt(self, assessmentPhase, keywords, medicalHistory): | |
| patientData= f""" | |
| Keywords: {keywords}. | |
| {f"Patient has the following medical history: {medicalHistory}" if medicalHistory is not None and medicalHistory != "" | |
| else ""} | |
| """ | |
| print(patientData) | |
| return patientData | |
| def processOutputResults(self, jsonOutput): | |
| preprocessed_json_string = jsonOutput.replace('\n', '') | |
| data = json.loads(preprocessed_json_string) | |
| dataLength=len(data.keys()) | |
| result_list = [] | |
| for key, value in data.items(): | |
| result_list.append(key) | |
| for variant, sentence in value.items(): | |
| result_list.append(sentence) | |
| if dataLength < 5: | |
| additional_keys_needed = 5 - dataLength | |
| for key in range(additional_keys_needed): | |
| result_list.append(f"Keyword {dataLength+key+1}") # Empty key | |
| for _ in range(3): | |
| result_list.append("") # Empty sentence | |
| return result_list | |
| return result_list | |
| def getInitialAssessment(self, keywords,medicalHistory): | |
| userPrompt= self.formulateUserPrompt(Stage.INITIAL_ASSESSMENT.value,keywords,medicalHistory) | |
| response= self.request_gpt_for_response(Prompts.INITIAL_ASSESSMENT_PROMPT.value,userPrompt) | |
| return self.processOutputResults(response) | |
| def getFollowUpAssessment(self, keywords, medicalHistory): | |
| userPrompt= self.formulateUserPrompt(Stage.FOLLOWUP_ASSESSMENT.value,keywords,medicalHistory) | |
| response= self.request_gpt_for_response(Prompts.FOLLOWUP_ASSESSMENT_PROMPT.value,userPrompt) | |
| return self.processOutputResults(response) | |
| def getEvaluation(self, keywords, medicalHistory): | |
| userPrompt= self.formulateUserPrompt(Stage.EVALUATION.value,keywords,medicalHistory) | |
| response= self.request_gpt_for_response(Prompts.EVALUATION_PROMPT.value,userPrompt) | |
| return self.processOutputResults(response) | |
| def getRecommendation(self, keywords, medicalHistory): | |
| userPrompt= self.formulateUserPrompt(Stage.RECOMMENDATION.value,keywords,medicalHistory) | |
| response= self.request_gpt_for_response(Prompts.RECOMMENDATION_PROMPT.value,userPrompt) | |
| return self.processOutputResults(response) | |
| def getDetailedEvaluation(self, keywords,medicalHistory): | |
| userPrompt= self.formulateUserPrompt(Stage.DETAILED_EVALUATION.value,keywords,medicalHistory) | |
| response= self.request_gpt_for_response(Prompts.DETAILED_EVALUATION_PROMPT.value,userPrompt) | |
| return self.processOutputResults(response) | |
| def getProgressNote(self, keywords,medicalHistory): | |
| userPrompt= self.formulateUserPrompt(Stage.PROGRESS_NOTE.value,keywords,medicalHistory) | |
| response = self.request_gpt_for_response(Prompts.PROGRESS_NOTE_PROMPT.value,userPrompt) | |
| return self.processOutputResults(response) | |
| def getDischargeSummary(self, keywords,medicalHistory): | |
| userPrompt= self.formulateUserPrompt(Stage.DISCHARGE_SUMMARY.value,keywords,medicalHistory) | |
| response = self.request_gpt_for_response(Prompts.DISCHARGE_SUMMARY_PROMPT.value,userPrompt) | |
| return self.processOutputResults(response) | |
| def getShortTermGoals(self, keywords,medicalHistory): | |
| userPrompt= self.formulateUserPrompt(Stage.SHORT_TERM_GOALS.value,keywords,medicalHistory) | |
| response = self.request_gpt_for_response(Prompts.SHORT_TERM_GOALS_PROMPT.value,userPrompt) | |
| return self.processOutputResults(response) | |
| def getLongTermGoals(self, keywords,medicalHistory): | |
| userPrompt= self.formulateUserPrompt(Stage.LONG_TERM_GOALS.value,keywords,medicalHistory) | |
| response = self.request_gpt_for_response(Prompts.LONG_TERM_GOALS_PROMPT.value,userPrompt) | |
| return self.processOutputResults(response) | |
| def getRephrasedSentences(self, sentences): | |
| response = self.request_gpt_for_response(Prompts.REPHRASE_PROMPT.value,sentences) | |
| return response |