mana-swift-llm/Sources/ManaLLMShared/ManaAiMeta.swift
till 71ad295b73 mana statt »e.V.«: Schweizer Verein (kein Store-Release, nur Quelltext-Korrektur)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 20:32:29 +02:00

50 lines
1.8 KiB
Swift

import Foundation
/// AI-Transparenz-Metadaten zu einem KI-Aufruf: welches Modell/welcher
/// Dienst, wie lange, und was es verbraucht hat — Tokens, Mana, Strom.
///
/// Geteilter Wire-Format-Typ für alle mana-Apps (Pendant zu
/// `ManaAiMeta` in `@mana/shared-types` und `@mana/llm-client`). Eine
/// Produkt-API liest die `X-Mana-Ai-*`-Header von mana-llm und reicht das
/// Objekt durch; die geteilte `ManaAiActionMetaView` rendert es.
/// SOT: `mana/docs/AI_TRANSPARENCY.md`.
public struct ManaAiMeta: Codable, Equatable, Sendable {
/// Tatsächlich antwortendes Modell, z. B. `ollama/pixtral:12b`.
public let modelResolved: String
/// Upstream-Provider: `ollama` (self-hosted) | `anthropic` | `google` | …
public let provider: String
/// Routing-Quelle aus Nutzersicht: local | byok | server | metered.
public let source: String
public let durationMs: Double?
public let tokensIn: Int?
public let tokensOut: Int?
/// Abgerechnete Mana-Credits. 0 auf dem Gratis-Pfad (self-hosted/unmetered).
public let creditsCharged: Int?
/// Geschätzter Stromverbrauch in Wattstunden — eine SCHÄTZUNG, keine
/// Messung; immer als solche darstellen (≈ / „geschätzt").
public let energyWhEst: Double?
/// Herkunft der Energie-Schätzung, damit die UI sie ehrlich einordnet.
public let energyBasis: String?
public init(
modelResolved: String,
provider: String,
source: String,
durationMs: Double? = nil,
tokensIn: Int? = nil,
tokensOut: Int? = nil,
creditsCharged: Int? = nil,
energyWhEst: Double? = nil,
energyBasis: String? = nil
) {
self.modelResolved = modelResolved
self.provider = provider
self.source = source
self.durationMs = durationMs
self.tokensIn = tokensIn
self.tokensOut = tokensOut
self.creditsCharged = creditsCharged
self.energyWhEst = energyWhEst
self.energyBasis = energyBasis
}
}