From 2c7a464fb37df367a51f267746a81cc300dd8dca Mon Sep 17 00:00:00 2001 From: Peter Neuer Date: Wed, 8 May 2024 15:34:46 +0000 Subject: [PATCH] from OpenAI --- .gitignore | 1 + ai_meeting_transcript.py | 121 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 .gitignore create mode 100644 ai_meeting_transcript.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4e167d0 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +EarningsCall.wav diff --git a/ai_meeting_transcript.py b/ai_meeting_transcript.py new file mode 100644 index 0000000..0c0e4d5 --- /dev/null +++ b/ai_meeting_transcript.py @@ -0,0 +1,121 @@ +# Libraries +import os +import openai +#import tiktoken +from dotenv import load_dotenv, find_dotenv +_ = load_dotenv(find_dotenv()) # read local .env file + +openai.api_key = os.environ['OPENAI_API_KEY'] + +from openai import OpenAI + +client = OpenAI( + # defaults to os.environ.get("OPENAI_API_KEY") + # api_key="My API Key", +) +from docx import Document + +def transcribe_audio(audio_file_path): + with open(audio_file_path, 'rb') as audio_file: + transcription = client.audio.transcriptions.create("whisper-1", audio_file) + return transcription['text'] + +def meeting_minutes(transcription): + abstract_summary = abstract_summary_extraction(transcription) + key_points = key_points_extraction(transcription) + action_items = action_item_extraction(transcription) + sentiment = sentiment_analysis(transcription) + return { + 'abstract_summary': abstract_summary, + 'key_points': key_points, + 'action_items': action_items, + 'sentiment': sentiment + } + +def abstract_summary_extraction(transcription): + response = client.chat.completions.create( + model="gpt-4", + temperature=0, + messages=[ + { + "role": "system", + "content": "You are a highly skilled AI trained in language comprehension and summarization. I would like you to read the following text and summarize it into a concise abstract paragraph. Aim to retain the most important points, providing a coherent and readable summary that could help a person understand the main points of the discussion without needing to read the entire text. Please avoid unnecessary details or tangential points." + }, + { + "role": "user", + "content": transcription + } + ] + ) + return completion.choices[0].message.content + + +def key_points_extraction(transcription): + response = client.chat.completions.create( + model="gpt-4", + temperature=0, + messages=[ + { + "role": "system", + "content": "You are a proficient AI with a specialty in distilling information into key points. Based on the following text, identify and list the main points that were discussed or brought up. These should be the most important ideas, findings, or topics that are crucial to the essence of the discussion. Your goal is to provide a list that someone could read to quickly understand what was talked about." + }, + { + "role": "user", + "content": transcription + } + ] + ) + return completion.choices[0].message.content + + +def action_item_extraction(transcription): + response = client.chat.completions.create( + model="gpt-4", + temperature=0, + messages=[ + { + "role": "system", + "content": "You are an AI expert in analyzing conversations and extracting action items. Please review the text and identify any tasks, assignments, or actions that were agreed upon or mentioned as needing to be done. These could be tasks assigned to specific individuals, or general actions that the group has decided to take. Please list these action items clearly and concisely." + }, + { + "role": "user", + "content": transcription + } + ] + ) + return completion.choices[0].message.content + +def sentiment_analysis(transcription): + response = client.chat.completions.create( + model="gpt-4", + temperature=0, + messages=[ + { + "role": "system", + "content": "As an AI with expertise in language and emotion analysis, your task is to analyze the sentiment of the following text. Please consider the overall tone of the discussion, the emotion conveyed by the language used, and the context in which words and phrases are used. Indicate whether the sentiment is generally positive, negative, or neutral, and provide brief explanations for your analysis where possible." + }, + { + "role": "user", + "content": transcription + } + ] + ) + return completion.choices[0].message.content + +def save_as_docx(minutes, filename): + doc = Document() + for key, value in minutes.items(): + # Replace underscores with spaces and capitalize each word for the heading + heading = ' '.join(word.capitalize() for word in key.split('_')) + doc.add_heading(heading, level=1) + doc.add_paragraph(value) + # Add a line break between sections + doc.add_paragraph() + doc.save(filename) + +audio_file_path = "ai_meeting/EarningsCall.wav" +transcription = transcribe_audio(audio_file_path) +minutes = meeting_minutes(transcription) +print(minutes) + +save_as_docx(minutes, 'meeting_minutes.docx') \ No newline at end of file