From fd6f842aa33a87dc92386b2d8a7d1fd84ccde1fe Mon Sep 17 00:00:00 2001 From: Owen Gretzinger Date: Thu, 10 Jul 2025 20:15:32 -0400 Subject: [PATCH] feat: implement OpenAI API integration for generating meeting notes --- notetaker/Services/NotesGenerator.swift | 36 ++++++++++++------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/notetaker/Services/NotesGenerator.swift b/notetaker/Services/NotesGenerator.swift index 17e472e..7999275 100644 --- a/notetaker/Services/NotesGenerator.swift +++ b/notetaker/Services/NotesGenerator.swift @@ -2,6 +2,7 @@ // Handles AI-powered note generation using OpenAI import Foundation +import OpenAI /// Generates meeting notes using OpenAI API class NotesGenerator { @@ -21,30 +22,29 @@ class NotesGenerator { userBlurb: String, systemPrompt: String) async throws -> String { - // TODO: Implement OpenAI API integration - // For now, return a placeholder + guard let apiKey = KeychainHelper.shared.get(forKey: "openAIKey"), !apiKey.isEmpty else { + throw NSError(domain: "NotesGenerator", code: 1, userInfo: [NSLocalizedDescriptionKey: "OpenAI API key not configured"]) + } - // Simulate API delay - try await Task.sleep(nanoseconds: 2_000_000_000) + let openAI = OpenAI(apiToken: apiKey) - // Placeholder response - return """ - # Meeting Notes + // Compose system prompt with user blurb wrapped in XML tags for clarity + let systemContent = "\(systemPrompt)\n\n\n\(userBlurb)\n" + let systemMessage = ChatQuery.ChatCompletionMessageParam(role: .system, content: systemContent)! - ## Summary - This is a placeholder for AI-generated meeting notes. + // Provide the model with structured XML-tagged input variables for improved parsing + let userContent = "Generate concise and well-structured meeting notes using the information below.\n\n\n\(transcript)\n\n\n\n\(userNotes)\n" + let userMessage = ChatQuery.ChatCompletionMessageParam(role: .user, content: userContent)! - ## Key Points - - Transcript length: \(transcript.count) characters - - User notes provided: \(!userNotes.isEmpty) + let query = ChatQuery(messages: [systemMessage, userMessage], model: .gpt4_1_mini) - ## Action Items - - Implement OpenAI API integration - - Add proper prompt engineering + let result = try await openAI.chats(query: query) - ## Next Steps - Once OpenAI API is integrated, this will provide comprehensive meeting notes based on the transcript and any additional context provided. - """ + guard let generatedNotes = result.choices.first?.message.content else { + throw NSError(domain: "NotesGenerator", code: 2, userInfo: [NSLocalizedDescriptionKey: "Failed to generate notes"]) + } + + return generatedNotes } /// Validates if OpenAI API key is configured