""" Natural language understanding for TalkToDoc. Interprets basic health-related queries to identify symptoms, intent, or information requests, per functional requirement 5 in the research document. This is a communication aid, not a diagnostic tool. The document is explicit that the system does not provide formal medical diagnosis, so this module only summarizes what the patient is communicating, it never suggests a diagnosis or treatment. Uses the OpenAI API, same as translation.py. MOCK_MODE: if set to "true" in the env file, this uses simple keyword matching instead of a real API call, so the rest of the app can be tested for free, with no API key. Not a substitute for testing real NLU quality. """ import os from dotenv import load_dotenv load_dotenv("env") MOCK_MODE = os.environ.get("MOCK_MODE", "").lower() == "true" if not MOCK_MODE: from openai import OpenAI _client = OpenAI(api_key=os.environ["OPENAI_API_KEY"]) MODEL = "gpt-5.6-terra" _MOCK_KEYWORDS = ["headache", "fever", "stomach", "cough", "dizzy", "pain", "vomit", "rash"] def interpret_query(english_text): """ english_text: the patient's message, already translated to English Returns a short plain-language summary of the likely symptoms, intent, or information request, to help the provider quickly understand what the patient needs. Not a diagnosis. """ if MOCK_MODE: text_lower = english_text.lower() found = [word for word in _MOCK_KEYWORDS if word in text_lower] symptoms = ", ".join(found) if found else "an unspecified concern" return f"Patient reports {symptoms}. Requesting guidance. (Mock summary, no AI used.)" prompt = ( "A patient sent the following message to a healthcare provider. " "In two sentences or less, summarize the likely symptoms, intent, " "or information request. Do not diagnose or suggest treatment, " "only summarize what the patient is communicating.\n\n" f"Message: {english_text}" ) response = _client.chat.completions.create( model=MODEL, messages=[{"role": "user", "content": prompt}], ) return response.choices[0].message.content.strip() if __name__ == "__main__": import sys if len(sys.argv) < 2: print('Usage: python nlu.py "english text"') else: print(interpret_query(sys.argv[1]))