Files
firebase-ios-sdk/FirebaseAI/Sources/ModalityTokenCount.swift

72 lines
2.1 KiB
Swift

// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import Foundation
/// Represents token counting info for a single modality.
public struct ModalityTokenCount: Sendable {
/// The modality associated with this token count.
public let modality: ContentModality
/// The number of tokens counted.
public let tokenCount: Int
}
/// Content part modality.
public struct ContentModality: DecodableProtoEnum, Hashable, Sendable {
enum Kind: String {
case text = "TEXT"
case image = "IMAGE"
case video = "VIDEO"
case audio = "AUDIO"
case document = "DOCUMENT"
}
/// Plain text.
public static let text = ContentModality(kind: .text)
/// Image.
public static let image = ContentModality(kind: .image)
/// Video.
public static let video = ContentModality(kind: .video)
/// Audio.
public static let audio = ContentModality(kind: .audio)
/// Document, e.g. PDF.
public static let document = ContentModality(kind: .document)
/// Returns the raw string representation of the `ContentModality` value.
public let rawValue: String
static let unrecognizedValueMessageCode =
AILog.MessageCode.generateContentResponseUnrecognizedContentModality
}
// MARK: Codable Conformances
extension ModalityTokenCount: Decodable {
enum CodingKeys: CodingKey {
case modality
case tokenCount
}
public init(from decoder: any Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
modality = try container.decode(ContentModality.self, forKey: .modality)
tokenCount = try container.decodeIfPresent(Int.self, forKey: .tokenCount) ?? 0
}
}