meeting-audio-processor / services /summarization.py
gusdelact's picture
Upload summarization.py
4568990 verified
import os
from huggingface_hub import InferenceClient
class SummarizationService:
"""Service for summarizing text and extracting action items."""
def __init__(self):
self.summarization_model = "facebook/bart-large-cnn"
self.client = InferenceClient(
provider="hf-inference",
token=os.getenv("HF_TOKEN") or os.getenv("HUGGINGFACE_TOKEN")
)
def _load_prompt(self, prompt_name: str) -> str:
"""Load prompt template from file."""
try:
with open(f"prompts/{prompt_name}.txt", "r") as f:
return f.read().strip()
except FileNotFoundError:
if prompt_name == "summary":
return "Summarize the following meeting transcript in a concise manner:\n\n{transcript}"
elif prompt_name == "action_items":
return "Extract action items from the following meeting transcript. List each action item clearly:\n\n{transcript}"
return "{transcript}"
def summarize(self, transcript: str) -> str:
"""Generate a summary of the transcript."""
try:
if not transcript.strip():
return "No transcript available to summarize"
result = self.client.summarization(
transcript,
model=self.summarization_model
)
return result if result else "Failed to generate summary"
except Exception as e:
print(f"Summarization error: {e}")
return f"Error generating summary: {str(e)}"
def extract_action_items(self, transcript: str) -> str:
"""Extract action items from the transcript."""
try:
if not transcript.strip():
return "No transcript available to extract action items"
# Use summarization with action-item focused input
prompt_template = self._load_prompt("action_items")
prompt = prompt_template.format(transcript=transcript)
result = self.client.summarization(
prompt,
model=self.summarization_model
)
return result if result else "No action items found"
except Exception as e:
print(f"Action items extraction error: {e}")
return f"Error extracting action items: {str(e)}"