50 lines
1.8 KiB
Swift
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
|
|
}
|
|
}
|