Анализ переиспользуемых Go-компонентов Ollama для локальной разработки LLM

Автономные компоненты в кодовой базе Ollama
Разработчик недавно проанализировал исходный код Ollama, чтобы определить, какие части можно использовать независимо в других проектах на Go. Исследование выявило несколько компонентов, для которых нет эквивалентных автономных библиотек на Go в других местах.
Реализация семплинга токенов
Пакет sample/ в Ollama содержит чистую реализацию на Go для семплинга с температурой, top-k, top-p, min-p и жадного семплинга. Разработчик не нашёл автономных альтернатив на Go — существующие решения либо обёртывают llama.cpp через CGo, либо отправляют параметры на удалённые API. Порядок пайплайна (сначала topK, затем температура, затем softmax, затем topP, затем minP) является критическим; его изменение приводит к другим результатам.
Обработка файлов GGUF
Хотя существует независимый ридер GGUF (gpustack/gguf-parser-go), который предлагает такие функции, как удалённый парсинг и оценка VRAM, он доступен только для чтения. Пакет fs/ggml в Ollama включает функцию WriteGGUF(), аналогов которой нет в других местах на Go. Низкоуровневый ридер (fs/gguf) особенно чистый, без импортов из остальной кодовой базы Ollama — копирование 5 файлов позволяет скомпилировать его независимо. Однако код парсинга GGUF имеет проблемы с безопасностью: было более 13 CVE, связанных с DoS из-за повреждённых файлов GGUF, и в исходном коде есть пробелы в валидации входных данных, которые могут привести к неограниченным выделениям памяти из-за полей размера, контролируемых злоумышленником.
Возможности конвертации моделей
Пакет convert/ обрабатывает конвертацию SafeTensors и PyTorch в GGUF для более чем 25 архитектур моделей. Единственный эквивалент — это Python-скрипт convert_hf_to_gguf.py. Извлечение этого компонента сложнее из-за зависимостей от внутренних пакетов, но части ридера и токенизатора удивительно независимы.
Система шаблонов чата
Ollama включает более 20 встроенных шаблонов чата и использует подход нечёткого сопоставления с расстоянием Левенштейна для сопоставления строк шаблонов Jinja2 из файлов GGUF с эквивалентами на Go. Существующие библиотеки на Go не предоставляют рендеринг шаблонов чата, специфичных для моделей, хотя каждый новый формат модели требует ручного переноса шаблонов.
Слой совместимости с OpenAI
Примерно 600 строк чистых функций преобразования конвертируют формат OpenAI в формат Ollama без HTTP-логики. Несмотря на эту чистую реализацию, проекты, такие как LocalAI и one-api, создали свои собственные версии с нуля, а не извлекли этот компонент.
Вопросы безопасности
Анализ отметил тревожные аспекты безопасности: более 22 CVE с 2024 года, более 175 тыс. открытых экземпляров, обнаруженных SentinelOne, и отсутствие встроенной аутентификации API. Уязвимости парсинга GGUF затронули бы любое извлечение этого кода, хотя семплер и трансформы OpenAI чисты.
Пробел в экосистеме Go
Разработчик заметил, что хотя экосистема Go имеет хорошие инструменты на верхнем уровне (клиенты API, HTTP-серверы) и нижнем уровне (CGo-биндинги к GGML и CUDA), отсутствует средний слой для семплинга, шаблонов, конвертации форматов и записи GGUF, который в настоящее время существует только внутри Ollama.
📖 Read the full source: r/LocalLLaMA
👀 Смотрите также

LogClaw: Открытая платформа AI SRE для автоматического создания тикетов на основе логов
LogClaw — это платформа с открытым исходным кодом для анализа логов, работающая на Kubernetes, принимающая логи через OpenTelemetry, обнаруживающая аномалии с помощью составного скоринга на основе сигналов и автоматически создающая тикеты с анализом первопричин примерно за 90 секунд.

Упрощение хостинга OpenClaw: BestClaw сохраняет SSH и удобство для пользователя.
BestClaw представляет собой простое решение для хостинга OpenClaw, сочетая легкость использования с жизненно важным доступом по SSH, как обсуждается на r/openclaw.

Сервер LocalSynapse MCP теперь поддерживает macOS и улучшенный поиск.
LocalSynapse, автономный MCP-сервер для поиска по локальным документам, теперь поддерживает macOS и включает исправления для поисковых запросов из нескольких слов. Разработчик внедрил улучшения на основе обратной связи, включая усиление кликов с учётом позиции и временное затухание в качестве продвижения.

Tycono: Открытая платформа для ИИ-агентов с организационной структурой и автономными циклами улучшений
Tycono — это открытая платформа, где вы определяете роли ИИ-агентов в формате YAML (CTO, инженер, QA и т.д.), и они работают вместе, следуя организационной структуре с автономными циклами улучшений. Система выполнила 17 раундов за ночь на задаче создания пиксельной беговой игры, сгенерировав 6 796 строк кода в 43 коммитах.