Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 49 additions & 11 deletions Package.swift
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// swift-tools-version: 5.9
// swift-tools-version: 6.1
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription
Expand All @@ -10,34 +10,72 @@ let swiftSettings: [SwiftSetting] = [

let package = Package(
name: "swift-transformers",
platforms: [.iOS(.v16), .macOS(.v13)],
platforms: [.iOS(.v17), .macOS(.v14)],
products: [
.library(name: "Hub", targets: ["Hub"]),
// ^ Hub client library
.library(name: "Tokenizers", targets: ["Tokenizers"]),
// ^ Tokenizers with optional chat template support via traits
.library(name: "Transformers", targets: ["Tokenizers", "Generation", "Models"]),
// ^ Everything, including Core ML inference
.executable(name: "transformers", targets: ["TransformersCLI"]),
.executable(name: "hub-cli", targets: ["HubCLI"]),
],
traits: [
.trait(
name: "ChatTemplates",
description:
"Enables chat template support with Jinja templating engine (Swift 6.1+ only)"
),
],
dependencies: [
.package(url: "https://github.com/apple/swift-argument-parser.git", .upToNextMinor(from: "1.4.0")),
.package(
url: "https://github.com/apple/swift-argument-parser.git", .upToNextMinor(from: "1.4.0")
),
.package(url: "https://github.com/johnmai-dev/Jinja", .upToNextMinor(from: "1.2.1")),
],
targets: [
.executableTarget(
name: "TransformersCLI",
dependencies: [
"Models", "Generation", "Tokenizers",
.product(name: "ArgumentParser", package: "swift-argument-parser"),
"Models", .product(name: "ArgumentParser", package: "swift-argument-parser"),
]
Comment on lines 38 to +41

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P0] TransformersCLI target omits Generation dependency

The new TransformersCLI.swift file imports Generation, but the TransformersCLI executable target now only depends on Models and ArgumentParser. Because Generation is not listed, a build will fail with No such module 'Generation', preventing the CLI from compiling. The target still needs a direct dependency on Generation (and any other modules it imports).

Useful? React with 👍 / 👎.

),
.executableTarget(
name: "HubCLI",
dependencies: [
"Hub", .product(name: "ArgumentParser", package: "swift-argument-parser"),
]
),
.executableTarget(name: "HubCLI", dependencies: ["Hub", .product(name: "ArgumentParser", package: "swift-argument-parser")]),
.target(name: "Hub", resources: [.process("FallbackConfigs")], swiftSettings: swiftSettings),
.target(name: "Tokenizers", dependencies: ["Hub", .product(name: "Jinja", package: "Jinja")]),
.target(
name: "Hub", resources: [.process("FallbackConfigs")], swiftSettings: swiftSettings
),
.target(
name: "Tokenizers",
dependencies: [
"Hub",
.product(
name: "Jinja", package: "Jinja", condition: .when(traits: ["ChatTemplates"])
),
],
swiftSettings: swiftSettings
),
.target(name: "TensorUtils"),
.target(name: "Generation", dependencies: ["Tokenizers", "TensorUtils"]),
.target(name: "Models", dependencies: ["Tokenizers", "Generation", "TensorUtils"]),
.testTarget(name: "TokenizersTests", dependencies: ["Tokenizers", "Models", "Hub"], resources: [.process("Resources"), .process("Vocabs")]),
.testTarget(name: "HubTests", dependencies: ["Hub", .product(name: "Jinja", package: "Jinja")], swiftSettings: swiftSettings),
.testTarget(
name: "TokenizersTests", dependencies: ["Tokenizers", "Models", "Hub"],
resources: [.process("Resources"), .process("Vocabs")]
),
.testTarget(
name: "HubTests", dependencies: ["Hub", .product(name: "Jinja", package: "Jinja")],
swiftSettings: swiftSettings
),
.testTarget(name: "PreTokenizerTests", dependencies: ["Tokenizers", "Hub"]),
.testTarget(name: "TensorUtilsTests", dependencies: ["TensorUtils", "Models", "Hub"], resources: [.process("Resources")]),
.testTarget(
name: "TensorUtilsTests", dependencies: ["TensorUtils", "Models", "Hub"],
resources: [.process("Resources")]
),
.testTarget(name: "NormalizerTests", dependencies: ["Tokenizers", "Hub"]),
.testTarget(name: "PostProcessorTests", dependencies: ["Tokenizers", "Hub"]),
]
Expand Down
46 changes: 46 additions & 0 deletions [email protected]
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
// swift-tools-version: 5.9
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

/// Define the strict concurrency settings to be applied to all targets.
let swiftSettings: [SwiftSetting] = [
.enableExperimentalFeature("StrictConcurrency"),
]

let package = Package(
name: "swift-transformers",
platforms: [.iOS(.v16), .macOS(.v13)],
products: [
.library(name: "Hub", targets: ["Hub"]),
// ^ Hub client library
.library(name: "Tokenizers", targets: ["Tokenizers"]),
// ^ Tokenizers library with chat template support
.library(name: "Transformers", targets: ["Tokenizers", "Generation", "Models"]),
// ^ Everything, including Core ML inference
.executable(name: "transformers", targets: ["TransformersCLI"]),
.executable(name: "hub-cli", targets: ["HubCLI"]),
],
dependencies: [
.package(url: "https://github.com/apple/swift-argument-parser.git", .upToNextMinor(from: "1.4.0")),
.package(url: "https://github.com/johnmai-dev/Jinja", .upToNextMinor(from: "1.2.1")),
],
targets: [
.executableTarget(
name: "TransformersCLI",
dependencies: ["Models", .product(name: "ArgumentParser", package: "swift-argument-parser")]
),
.executableTarget(name: "HubCLI", dependencies: ["Hub", .product(name: "ArgumentParser", package: "swift-argument-parser")]),
.target(name: "Hub", resources: [.process("FallbackConfigs")], swiftSettings: swiftSettings),
.target(name: "Tokenizers", dependencies: ["Hub", .product(name: "Jinja", package: "Jinja")]),
.target(name: "TensorUtils"),
.target(name: "Generation", dependencies: ["Tokenizers", "TensorUtils"]),
.target(name: "Models", dependencies: ["Tokenizers", "Generation", "TensorUtils"]),
.testTarget(name: "TokenizersTests", dependencies: ["Tokenizers", "Models", "Hub"], resources: [.process("Resources"), .process("Vocabs")]),
.testTarget(name: "HubTests", dependencies: ["Hub", .product(name: "Jinja", package: "Jinja")], swiftSettings: swiftSettings),
.testTarget(name: "PreTokenizerTests", dependencies: ["Tokenizers", "Hub"]),
.testTarget(name: "TensorUtilsTests", dependencies: ["TensorUtils", "Models", "Hub"], resources: [.process("Resources")]),
.testTarget(name: "NormalizerTests", dependencies: ["Tokenizers", "Hub"]),
.testTarget(name: "PostProcessorTests", dependencies: ["Tokenizers", "Hub"]),
]
)
Loading
Loading