// // ChatParameters.swift // Zyquo Agent // // Author: Simon-Pierre Boucher // Mail: contact@spboucher.ai // // Shared value types extracted from Zyquo Cloud's Conversation.swift // (docs/PROVIDER-REUSE.md §6). Cloud's Conversation itself is superseded by // Zyquo Agent's Task model (Phase 2 Models/), which owns these parameters. // import Foundation /// Per-task generation parameters. `nil` means "provider default" and the /// parameter is omitted from the request entirely. struct ChatParameters: Codable, Hashable { var temperature: Double? var topP: Double? var maxTokens: Int? var frequencyPenalty: Double? var presencePenalty: Double? /// "low" / "medium" / "high" for models supporting reasoning_effort. var reasoningEffort: String? /// Explicit thinking toggle for Anthropic/Qwen-style models. var thinkingEnabled: Bool? } /// A reusable configuration: system prompt + preferred model + parameters. /// Zyquo Agent adds `safetyMode` — the safety default a persona applies to /// new tasks (nil = keep the app default). struct Persona: Codable, Identifiable, Hashable { let id: UUID var name: String /// SF Symbol name for the persona glyph. var symbolName: String var systemPrompt: String var modelID: String? var provider: ProviderID? var parameters: ChatParameters /// Default safety mode applied when a new task adopts this persona. var safetyMode: SafetyMode? init( id: UUID = UUID(), name: String, symbolName: String = "person.crop.circle", systemPrompt: String, modelID: String? = nil, provider: ProviderID? = nil, parameters: ChatParameters = ChatParameters(), safetyMode: SafetyMode? = nil ) { self.id = id self.name = name self.symbolName = symbolName self.systemPrompt = systemPrompt self.modelID = modelID self.provider = provider self.parameters = parameters self.safetyMode = safetyMode } }