from openai import OpenAI # from dotenv import load_dotenv import yt_dlp import modal import torch class Summarizer: def __init__(self): self.system='''You are an intelligent assistant working for a company that builds advanced tools to automate real hiring decisions. Your task is to analyze speech-to-text transcripts from candidate interviews. For each candidate’s response, you will: Provide a clear and concise summary of what the candidate said. Identify the candidate’s motivation and key skills expressed in their speech. Highlight any additional insights or relevant observations that could assist recruiters in making informed hiring decisions. Focus on delivering objective, actionable, and relevant information that captures the candidate’s potential skills''' self.transcriber="gpt-4o-transcribe" self.summarizer="gpt-4.1-mini" self.Accentizer= modal.Cls.lookup("ClassifierAudio", "Accentizer") self.client=OpenAI() def download_audio(self,url, output_path='audio'): import yt_dlp ydl_opts = { 'format': 'bestaudio/best', 'outtmpl': output_path, 'postprocessors': [{ 'key': 'FFmpegExtractAudio', 'preferredcodec': 'mp3', # or 'wav' 'preferredquality': '192', }], } with yt_dlp.YoutubeDL(ydl_opts) as ydl: ydl.download([url]) def classify(self,url): raw= self.Accentizer.classify.remote(url) accent = raw["label"][0] if isinstance(raw["label"], list) else str(raw["label"]) score = raw["score"].item() if isinstance(raw["score"], torch.Tensor) else float(raw["score"]) return { "label": accent, "score": round(score, 4) } return result def summarize(self,url): self.download_audio(url=url) audio_file=open("./audio.mp3", "rb") transcription = self.client.audio.transcriptions.create( model=self.transcriber, file=audio_file ) user_prompt="Here is transcription of the audio \n " user_prompt+=transcription.text prompts = [ {"role": "system", "content": self.system}, {"role": "user", "content": user_prompt} ] chat=self.client.chat.completions.create( model=self.summarizer, messages=prompts ) return chat.choices[0].message.content