Aadityaramrame's picture
Update summarizer/summarizer.py
c07f301 verified
import os
import requests
api_token = os.getenv("API_KEY")
class Summarizer:
def __init__(self):
self.summarizer_api_url = "https://api-inference.huggingface.co/models/Aadityaramrame/carecompanion-summarizer"
self.translation_api_url = "https://carecompanion-summarizer.onrender.com/translate" # Replace with actual Render translation API URL
self.api_token = os.getenv("API_KEY")
if not self.api_token:
raise ValueError("Hugging Face API Key not found in environment variables.")
self.headers = {
"Authorization": f"Bearer {self.api_token}",
"Content-Type": "application/json"
}
def clean_text(self, text: str) -> str:
"""Remove unnecessary spaces and line breaks."""
return ' '.join(text.replace('\n', ' ').split())
def format_summary(self, summary: str) -> str:
"""Apply simple formatting rules to the model output."""
summary = summary.strip()
if summary and not summary[0].isupper():
summary = summary[0].upper() + summary[1:]
if "expected to recover within" in summary and not summary.endswith("days."):
summary = summary.rstrip('. ')
summary += " 7–10 days."
if "antibiotic" in summary.lower() and "supportive" in summary.lower() and "treatment" not in summary.lower():
summary += " Treatment includes antibiotics and supportive care."
return summary
def translate_text(self, text: str, target_lang: str) -> str:
"""Translate text using the Render translation API."""
try:
payload = {"text": text, "target_lang": target_lang}
response = requests.post(self.translation_api_url, headers=self.headers, json=payload)
response.raise_for_status()
response_data = response.json()
return response_data.get("translated_text", text)
except requests.exceptions.RequestException as e:
return f"Translation failed: {str(e)}"
def summarize_text(self, text: str, target_lang: str = 'en') -> str:
"""Detect language, translate if needed, summarize, format, and retranslate if needed."""
try:
cleaned_text = self.clean_text(text)
# Translate if not in English
if target_lang != 'en':
cleaned_text = self.translate_text(cleaned_text, "en")
# Summarize using Hugging Face API
payload = {
"inputs": f"summarize the clinical case with diagnosis, comorbidities, and treatment plan: {cleaned_text}"
}
response = requests.post(self.summarizer_api_url, headers=self.headers, json=payload, timeout=30)
response.raise_for_status()
response_data = response.json()
if isinstance(response_data, list) and "generated_text" in response_data[0]:
summary = response_data[0]["generated_text"]
else:
return "Unexpected response format from Hugging Face API."
formatted_summary = self.format_summary(summary)
# Translate back to target language if needed
if target_lang != 'en':
formatted_summary = self.translate_text(formatted_summary, target_lang)
return formatted_summary
except requests.exceptions.Timeout:
return "Summarization request timed out."
except requests.exceptions.RequestException as e:
return f"Summarization request failed: {str(e)}"
except Exception as e:
return f"An error occurred during summarization: {str(e)}"