Files
sleepy_agent_ios/SleepyAgent/Core/Models/Message.swift
T
sleepy bbcf0c74bb Initial iOS port - Complete source code and build system
- 19 Swift source files (~4900 lines)
- Complete UI with SwiftUI (MainView, SettingsView, MessageBubble, InputBar)
- Inference layer (LlmEngine, Agent, ToolCalling, ConversationContext)
- Services (Audio, TTS, WebSearch, ModelDownload, Storage)
- Build system: Makefile, Package.swift, Podfile
- Documentation: BUILD.md, plan.md, PROJECT_STATUS.md
- Ready for Xcode build - just need LiteRT dependency added
2026-04-06 14:26:08 +02:00

63 lines
1.6 KiB
Swift

import Foundation
enum MessageRole: String, Codable {
case user
case assistant
case tool
case system
}
struct Message: Identifiable, Codable, Equatable {
let id: UUID
var role: MessageRole
var content: String
var toolCalls: [ToolCall]?
var toolCallId: String?
let timestamp: Date
init(id: UUID = UUID(), role: MessageRole, content: String, toolCalls: [ToolCall]? = nil, toolCallId: String? = nil, timestamp: Date = Date()) {
self.id = id
self.role = role
self.content = content
self.toolCalls = toolCalls
self.toolCallId = toolCallId
self.timestamp = timestamp
}
static func user(_ content: String) -> Message {
Message(role: .user, content: content)
}
static func assistant(_ content: String, toolCalls: [ToolCall]? = nil) -> Message {
Message(role: .assistant, content: content, toolCalls: toolCalls)
}
}
struct ToolCall: Codable, Equatable {
let id: String
let name: String
let arguments: [String: String]
}
enum ModelVariant: String, Codable, CaseIterable {
case e2b = "E2B"
case e4b = "E4B"
case custom = "Custom"
var displayName: String {
switch self {
case .e2b: return "Gemma 4 E2B (Fast)"
case .e4b: return "Gemma 4 E4B (Quality)"
case .custom: return "Custom Model"
}
}
var sizeDescription: String {
switch self {
case .e2b: return "~2.7 GB"
case .e4b: return "~4.5 GB"
case .custom: return "Varies"
}
}
}