huggingface/AnyLanguageModel
An API-compatible, drop-in replacement for Apple's Foundation Models framework with support for custom language model providers.
AnyLanguageModel – 다양한 LLM 백엔드에 대한 Swift 중심 추상화
무엇인가요
- Apple의 FoundationModels 임포트를 대체하는 Swift 패키지로, Apple, Core ML, MLX, llama.cpp, Ollama, Anthropic, OpenAI, Gemini 등 다양한 LLM 제공업체에 대해 통합된 API를 제공합니다.
- 단지
import FoundationModels를import AnyLanguageModel로 변경하고 나머지 코드는 그대로 사용할 수 있습니다.
핵심 개념
LanguageModelSession– 모델 인스턴스와 선택적 도구(모델이 호출할 수 있는 함수) 목록을 보유하는 객체입니다. 모든 상호작용은session.respond { … }를 통해 이루어집니다.- 가이드된 생성 –
@Generable과@Guide프로퍼티 래퍼를 사용하여 모델이 원시 텍스트를 파싱하는 대신 강력한 타입의 Swift 구조체를 생성하도록 요청할 수 있습니다. - 도구 호출 –
Tool을 준수하는 타입(예: 날씨 조회)을 정의하고 모델이 언제 호출할지 결정하게 합니다.ToolExecutionDelegate를 통해 각 호출을 관찰하거나 승인할 수 있습니다. - 트레이트 – Swift Package Manager의 트레이트를 사용하여 필요에 따라 무거운 백엔드(CoreML, MLX, Llama)만 선택적으로 활성화할 수 있습니다. 이로 인해 바이너리 크기가 작아집니다.
지원하는 제공업체 (README의 체크박스는 구현된 것을 나타냅니다)
- Apple Foundation Models (iOS 26/macOS 26+에서 시스템 모델)
- Core ML (온디바이스
.mlmodelc파일) - MLX (Apple Silicon 가속 모델,
mlx-swift를 통해) - llama.cpp (GGUF 양자화 모델)
- Ollama HTTP API (로컬 또는 원격 Ollama 서버)
- Anthropic Messages API
- Google Gemini API
- OpenAI Chat Completions & Responses API
- Open Responses (OpenAI 응답 형식과 호환되는 모든 엔드포인트)
설치
// Package.swift
dependencies: [
.package(url: "https://github.com/huggingface/AnyLanguageModel", from: "0.11.0")
]
특정 백엔드가 필요할 경우 해당 트레이트를 활성화합니다:
.package(
url: "https://github.com/huggingface/AnyLanguageModel",
from: "0.11.0",
traits: ["CoreML", "MLX"]
)
트레이트를 사용할 경우, 하위 패키지(CoreML → huggingface/swift-transformers, MLX → ml-explore/mlx-swift-lm, Llama → mattt/llama.swift)도 추가해야 합니다. README에는 트레이트를 직접 선언할 수 없는 프로젝트를 위한 전체 Xcode 쉘 워크플로우가 제공됩니다.
일반적인 사용 예시
import AnyLanguageModel
let model = SystemLanguageModel.default // 또는 CoreMLLanguageModel(...), MLXLanguageModel(...), 등
let session = LanguageModelSession(model: model)
// 간단한 프롬프트
let resp = try await session.respond { Prompt("양자 컴퓨팅을 한 문장으로 설명해 주세요") }
print(resp.content)
가이드된 생성 예시
@Generable(description: "고양이의 기본 프로필 정보")
struct CatProfile {
var name: String
@Guide(description: "고양이의 나이", .range(0...20))
var age: Int
@Guide(description: "한 문장의 성격 설명")
var profile: String
}
let profile = try await session.respond(
to: "귀여운 구조 고양이의 프로필을 생성해 주세요",
generating: CatProfile.self
).content
모델은 CatProfile 인스턴스를 직접 반환합니다.
도구 호출
struct WeatherTool: Tool {
let name = "getWeather"
let description = "도시의 최신 날씨 정보를 가져옵니다"
@Generable
struct Arguments { @Guide var city: String }
func call(arguments: Arguments) async throws -> String {
"The weather in \(arguments.city) is sunny and 72°F"
}
}
let session = LanguageModelSession(model: model, tools: [WeatherTool()])
let answer = try await session.respond { Prompt("Cupertino의 날씨는 어때요?") }
print(answer.content)
데리게이트를 연결하여 도구 호출을 감시하거나 승인할 수 있습니다.
이미지 입력 많은 클라우드 제공업체(OpenAI, Anthropic, Gemini, Open Responses)와 일부 로컬 백엔드(MLX, Ollama)는 이미지를 지원합니다:
let resp = try await session.respond(
to: "보이는 것을 설명해 주세요",
images: [.init(url: URL(string: "https://example.com/photo.jpg")!)]
)
README의 표에는 어떤 제공업체가 이미지를 지원하는지 나와 있습니다.
보안 가이드라인 README는 API 키를 하드코딩하지 말 것을 강조합니다. 두 가지 프로덕션 패턴이 권장됩니다:
- Bring-Your-Own-Key – 사용자가 제공한 키를 시스템 Keychain에 저장하고, 직접 제공업체에 전송합니다.
- 프록시 서버 – 제공업체 키를 당신이 제어하는 백엔드에 보관하고, 앱에 일시적인 토큰을 공개한 후 요청을 전달합니다. 두 가지 접근 방식에 대한 장단점이 설명되어 있습니다.
왜 이 라이브러리를 사용해야 할까
- 한 번 작성하면 어디서나 실행 가능: 동일한 Swift 코드가 온디바이스(Core ML, MLX, llama.cpp)와 클라우드(OpenAI, Anthropic, Gemini, Ollama)에서 모두 작동합니다.
- 가이드된 생성을 통한 강력한 타입 출력은 취약한 문자열 파싱을 줄입니다.
- 내장된 도구 호출 지원으로 에이전트 스타일 앱(날씨 조회, 데이터 검색, 사용자 정의 코드 실행 등)을 구축할 수 있습니다.
- 트레이트 기반 종속성 관리로 최종 앱의 크기를 작게 유지할 수 있습니다.
현재 제한 사항
- Apple Foundation Models는 iOS/macOS 26가 필요하며, 작성 시점에서는 미래의 OS 버전입니다.
- llama.cpp는 도구 호출을 지원하지 않습니다.
- v0.11에서 빌드 시간 문제로
LiteRT백엔드가 제거되었습니다.
더 배우기
- README는 Apple의 Guided Generation 문서, 다양한 제공업체 API, 샘플 Xcode 앱(
chat-ui-swift)에 대한 링크를 제공합니다. - 이슈 #15와 #135는 알려진 Xcode/SwiftPM 버그와 대안에 대해 논의하고 있습니다.
결론: AnyLanguageModel은 다양한 언어 모델 제공업체를 추상화하고, 일급 도구 호출 및 타입 기반 생성을 추가하며, Swift Package Manager 트레이트를 사용해 바이너리 크기를 작게 유지하는 진정한 프로덕션 준비된 Swift 라이브러리입니다. 온디바이스 및 클라우드 LLM에 통일된 API를 원하는 iOS/macOS/visionOS 개발자를 위한 것입니다.
관련
- Dispatch
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트