llama.cpp - это C++ библиотека для работы с LLM моделями на iOS. Она поддерживает TinyLlama и другие модели в формате GGUF.
- Откройте Xcode проект
- File → Add Package Dependencies...
- Введите URL:
https://github.com/ggerganov/llama.cpp - Выберите версию (последняя стабильная)
- Добавьте в Target:
shafinMultitool
-
Клонируйте репозиторий:
git clone https://github.com/ggerganov/llama.cpp.git cd llama.cpp -
Соберите для iOS:
# Создайте Xcode проект cmake -B build -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_ARCHITECTURES=arm64 -
Добавьте собранную библиотеку в Xcode проект
-
Перейдите на HuggingFace: https://huggingface.co/TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF
-
Скачайте квантизованную версию:
tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf(~700MB)- Q4_K_M - хороший баланс между размером и качеством
- Можно использовать Q8_0 для лучшего качества (больше размер)
-
Добавьте модель в Xcode проект:
- Перетащите
.ggufфайл в папкуSceneGeneratorModule/Models/ - Убедитесь что "Copy items if needed" отмечено
- Проверьте Target Membership
- Перетащите
Создайте файл SceneGeneratorModule/Services/LlamaCppWrapper.swift:
import Foundation
// Обёртка для C функций llama.cpp
@_cdecl("llama_backend_init")
func llama_backend_init() {
// Вызов C функции
}
// Добавьте другие необходимые функции
// См. документацию llama.cpp для полного списка APIРаскомментируйте и доработайте код в LLMParserService.swift:
- В методе
loadModel()- загрузка модели через llama.cpp - В методе
generateText()- генерация текста
- Запустите приложение
- Введите сложный сценарий
- Проверьте что LLM fallback срабатывает при низкой confidence
let modelPath = Bundle.main.path(forResource: "tinyllama-1.1b-chat-v1.0", ofType: "gguf")
// Инициализация через llama.cpp APIlet prompt = "Парси сцену: 2 актёра идут навстречу"
let response = generateText(prompt: prompt)
// Ожидаемый ответ: JSON с распарсенным сценарием-
Размер модели: GGUF модель занимает ~700MB-1GB
- Убедитесь что есть место в проекте
- Рассмотрите возможность загрузки модели по требованию
-
Производительность:
- Первый запуск может быть медленным (загрузка модели)
- Генерация токенов занимает время (зависит от устройства)
-
Память:
- Модель загружается в RAM
- Убедитесь что устройство имеет достаточно памяти
- llama.cpp репозиторий: https://github.com/ggerganov/llama.cpp
- Документация API: https://github.com/ggerganov/llama.cpp/blob/master/llama.h
- TinyLlama GGUF модели: https://huggingface.co/TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF
- Примеры интеграции: https://github.com/ggerganov/llama.cpp/tree/master/examples
Если интеграция llama.cpp вручную сложна, рассмотрите готовые Swift обёртки:
- llama.swift: https://github.com/ggerganov/llama.swift (если есть)
- Или используйте серверный API для сложных случаев