Chatbot with SwiftUI & OpenAI API

 

AI chatbots are transforming the way users interact with mobile applications. Whether it’s customer support, personal assistance, or interactive learning, integrating a conversational AI can take your app to the next level. In this tutorial, you’ll learn how to create a SwiftUI-based chatbot powered by the OpenAI API.

✨ What You’ll Build

A fully functional chatbot UI built with SwiftUI that communicates with OpenAI’s GPT model to generate intelligent responses.

๐Ÿš€ Requirements

๐Ÿ”ง Setting Up

  1. Create a new SwiftUI project in Xcode.
  2. Add networking support using URLSession.
  3. Store your API Key securely (avoid hardcoding).

✏️ Define the Model

struct Message: Identifiable {
let id = UUID()
let text: String
let isUser: Bool
}

๐ŸŒ ChatViewModel

class ChatViewModel: ObservableObject {
@Published var messages: [Message] = []
private let apiKey = "YOUR_OPENAI_API_KEY" // Use secure method in production

func sendMessage(_ userInput: String) {
let userMessage = Message(text: userInput, isUser: true)
messages.append(userMessage)
let systemPrompt = "You are a helpful assistant."
let requestBody: [String: Any] = [
"model": "gpt-3.5-turbo",
"messages": [
["role": "system", "content": systemPrompt],
["role": "user", "content": userInput]
]
]
guard let url = URL(string: "https://api.openai.com/v1/chat/completions"),
let bodyData = try? JSONSerialization.data(withJSONObject: requestBody) else { return }
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization")
request.httpBody = bodyData
URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data,
let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any],
let choices = json["choices"] as? [[String: Any]],
let message = choices.first?["message"] as? [String: Any],
let content = message["content"] as? String else {
print("Failed to decode response")
return
}
DispatchQueue.main.async {
let botMessage = Message(text: content.trimmingCharacters(in: .whitespacesAndNewlines), isUser: false)
self.messages.append(botMessage)
}
}.resume()
}
}

๐ŸŽจ Build the Chat UI

struct ChatView: View {
@StateObject private var viewModel = ChatViewModel()
@State private var inputText = ""

var body: some View {
VStack {
ScrollViewReader { proxy in
ScrollView {
VStack(alignment: .leading, spacing: 10) {
ForEach(viewModel.messages) { message in
HStack {
if message.isUser {
Spacer()
Text(message.text)
.padding()
.background(Color.blue.opacity(0.7))
.foregroundColor(.white)
.cornerRadius(12)
} else {
Text(message.text)
.padding()
.background(Color.gray.opacity(0.3))
.cornerRadius(12)
Spacer()
}
}
}
}
.padding()
}
}
HStack {
TextField("Enter your message...", text: $inputText)
.textFieldStyle(RoundedBorderTextFieldStyle())
Button(action: {
guard !inputText.trimmingCharacters(in: .whitespaces).isEmpty else { return }
viewModel.sendMessage(inputText)
inputText = ""
}) {
Image(systemName: "paperplane.fill")
.foregroundColor(.blue)
}
}
.padding()
}
}
}

๐Ÿš€ Final Result

You now have a working SwiftUI chatbot that uses OpenAI’s GPT model to generate responses.

You can customize it further by:

  • Adding chat roles
  • Displaying timestamps
  • Persisting chat history
  • Supporting markdown or rich content

๐Ÿ“Š Wrap-Up

With just a few lines of code, you can integrate cutting-edge AI into your SwiftUI app. Use this power responsibly to build delightful and meaningful user experiences.

Comments

Popular posts from this blog

Using Core ML with SwiftUI: Build an AI-Powered App

CI/CD for iOS Projects with Xcode: A Complete Guide

Dependency Injection in iOS with SwiftUI