v2: Initial clean branch with unit tests + CI/CD pipeline
CI / build (push) Waiting to run
CI / unit-tests (push) Blocked by required conditions
CI / lint (push) Blocked by required conditions

- Started from ac75faa (initial E4B-MarkBase integration)
- Kept Sources/ (all engine code) + Package.swift + .gitignore
- Removed all ad-hoc tests, documentation, scripts, Python files
- Added Tests/00_Unit/ (MathTest, TokenizerTest, SamplerTest)
- Added .gitea/workflows/ci.yaml (build + unit tests + lint)
- Added Scripts/check_resources.sh (memory-aware test runner)
- Added Tests/Manifest.json (resource requirements for all tests)
- Focus: 4-bit quantized models only
This commit is contained in:
MarkBase Admin
2026-07-05 13:29:25 +08:00
commit 8a66b9086a
90 changed files with 22252 additions and 0 deletions
+112
View File
@@ -0,0 +1,112 @@
import Foundation
//
// Embeddings API Models
// OpenAI Compatible Format
//
/// Embeddings request
public struct EmbeddingsRequest: Codable {
public let model: String
public let input: InputType
public let encoding_format: String?
public enum InputType: Codable, Sendable {
case string(String)
case strings([String])
case tokens([Int])
case tokensList([[Int]])
public init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
if let string = try? container.decode(String.self) {
self = .string(string)
} else if let strings = try? container.decode([String].self) {
self = .strings(strings)
} else if let tokens = try? container.decode([Int].self) {
self = .tokens(tokens)
} else if let tokensList = try? container.decode([[Int]].self) {
self = .tokensList(tokensList)
} else {
throw DecodingError.dataCorruptedError(
in: container,
debugDescription: "Invalid input type"
)
}
}
public func encode(to encoder: Encoder) throws {
var container = encoder.singleValueContainer()
switch self {
case .string(let string):
try container.encode(string)
case .strings(let strings):
try container.encode(strings)
case .tokens(let tokens):
try container.encode(tokens)
case .tokensList(let tokensList):
try container.encode(tokensList)
}
}
}
public init(
model: String,
input: InputType,
encoding_format: String? = nil
) {
self.model = model
self.input = input
self.encoding_format = encoding_format
}
}
/// Embeddings response
public struct EmbeddingsResponse: Codable, Sendable {
public let object: String
public let data: [EmbeddingData]
public let model: String
public let usage: EmbeddingUsage
public init(
object: String = "list",
data: [EmbeddingData],
model: String,
usage: EmbeddingUsage
) {
self.object = object
self.data = data
self.model = model
self.usage = usage
}
}
/// Single embedding data
public struct EmbeddingData: Codable, Sendable {
public let object: String
public let index: Int
public let embedding: [Float]
public init(
object: String = "embedding",
index: Int,
embedding: [Float]
) {
self.object = object
self.index = index
self.embedding = embedding
}
}
/// Embedding usage
public struct EmbeddingUsage: Codable, Sendable {
public let prompt_tokens: Int
public let total_tokens: Int
public init(prompt_tokens: Int, total_tokens: Int) {
self.prompt_tokens = prompt_tokens
self.total_tokens = total_tokens
}
}