Add Groq provider to screen assistant model selection and API routing

Agent-Logs-Url: https://github.com/AkhilKonduru1/Atoll/sessions/d40c666d-f589-48ca-9539-1fd33c799962

Co-authored-by: AkhilKonduru1 <210101196+AkhilKonduru1@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot] 2026-04-15 03:14:11 +00:00 • committed by GitHub
commit 01c4284270
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 93 additions and 9 deletions

View file

@ -397,6 +397,8 @@ class ScreenAssistantManager: NSObject, ObservableObject {
sendToClaudeAPI(message: message, files: files)
case .local:
sendToLocalAPI(message: message, files: files)
case .groq:
sendToGroqAPI(message: message, files: files)
}
}
@ -445,6 +447,36 @@ class ScreenAssistantManager: NSObject, ObservableObject {
performOpenAIRequest(url: url, requestBody: buildOpenAIRequestBody(message: message, files: files, model: modelId), apiKey: apiKey)
}
private func sendToGroqAPI(message: String, files: [ScreenAssistantFile]) {
let apiKey = Defaults[.groqApiKey]
guard !apiKey.isEmpty else {
print("❌ ScreenAssistant: No Groq API key configured")
addAssistantMessage("Error: No Groq API key configured. Please set your API key in model settings.")
isLoading = false
return
}
// Get selected model or default to llama-3.3-70b-versatile
let selectedModel = Defaults[.selectedAIModel]
let modelId = AIModelProvider.groq.supportedModels.contains(where: { $0.id == selectedModel?.id })
? selectedModel!.id
: "llama-3.3-70b-versatile"
guard let url = URL(string: "https://api.groq.com/openai/v1/chat/completions") else {
print("❌ ScreenAssistant: Invalid Groq API URL")
addAssistantMessage("Error: Invalid API URL")
isLoading = false
return
}
performOpenAIRequest(
url: url,
requestBody: buildOpenAIRequestBody(message: message, files: files, model: modelId),
apiKey: apiKey,
provider: .groq
)
}
private func sendToClaudeAPI(message: String, files: [ScreenAssistantFile]) {
let apiKey = Defaults[.claudeApiKey]
@ -682,7 +714,7 @@ class ScreenAssistantManager: NSObject, ObservableObject {
task?.resume()
}
private func performOpenAIRequest(url: URL, requestBody: [String: Any], apiKey: String) {
private func performOpenAIRequest(url: URL, requestBody: [String: Any], apiKey: String, provider: AIModelProvider = .openai) {
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
@ -710,7 +742,7 @@ class ScreenAssistantManager: NSObject, ObservableObject {
self.isLoading = false
self.activeRequest = nil
self.handleResponse(data: data, response: response, error: error, provider: .openai)
self.handleResponse(data: data, response: response, error: error, provider: provider)
}
}
@ -792,6 +824,8 @@ class ScreenAssistantManager: NSObject, ObservableObject {
parseGeminiResponse(data: data)
case .openai:
parseOpenAIResponse(data: data)
case .groq:
parseOpenAIResponse(data: data)
case .claude:
parseClaudeResponse(data: data)
case .local: