Внесок у проєкт LLiMa
LLiMa містить компілятор GenAI для сторони хоста та C++ середовище виконання для Modalix.
Середовище виконання працює через упаковані точки входу CLI/HTTP/ZMQ; Python використовується для оркестрації CLI, а не як окремий загальнодоступний API середовища виконання. Зберігайте компілятор і середовище виконання, а також їхні залежності, окремо. Під час отримання коду з репозиторію,
CONTRIBUTING.md надає інструкції для швидкого старту, а AGENTS.md визначає
специфічні для агентів правила; цей посібник є детальним описом правил для розробників.
Навички програміста-агента.
Встановіть обидва набори навичок для учасників, LLiMa, як частину стандартного налаштування для учасників. Вони навмисно не встановлюються за допомогою стандартного індексу сценаріїв Neat SDK:
sima-cli playbooks install \
gh:sima-neat/llima/skills/sima-contribute-to-llima
sima-cli playbooks install \
gh:sima-neat/llima/skills/sima-add-llima-model-support
Загальні навички учасника охоплюють компілятор, середовище виконання, пакування, тестування, документацію та зміни, що стосуються всього репозиторію. Навички підтримки моделі додають сумісність і робочий процес реал ізації для архітектур LLM і VLM, контрольних точок, розміщення тензорів, токенізаторів і шаблонів підказок. Переконайтеся, що обидва встановлено, щоб відповідні інструкції були доступні, коли внесок виходить за межі цих параметрів.
Схема репозиторію.
| Площа | Шляхи, стежки | Відповідальність. |
|---|---|---|
| Конфігурація | sima_lmm/config/ | Конфігураційні файли для LLM, VLM та ASR. |
| Вживання. | sima_lmm/hf/, sima_lmm/gguf/ | Завантаження та перетворення форматів Hugging Face і GGUF. |
| Компіляція | sima_lmm/model/, sima_lmm/preproc/ | Компоненти моделі, квантування, графіки та попередня обробка. |
| Інструменти для хостингу. | sima_lmm/host/ | Зберіть, розгорніть, LoRA, і проведіть тестування продуктивності основних точок входу. |
| Оцінювання. | sima_lmm/mole/ | MoLE робочі процеси |
| Інтерфейс командного рядка для середовища виконання. | sima_lmm/devkit/ | Python Оркестрація за допомогою інтерфейсу командного рядка та керування моделлю. |
| C++ середовище виконання | sima_lmm/devkit/cpp/ | Моделі, токенізатор, MLA, реалізації CLI/HTTP/ZMQ та внутрішнє зв’язування CLI. |
| Тести | tests/ | Тести компілятора та середовища виконання Modalix. |
| Упаковка | CMakeLists.txt, cmake/, build*.sh, tools/install_*.sh | Debian, формат wheel та збірка артефактів. |
| Кеші CI | .github/workflows/, tools/ci/, tools/hf-safetensors/ | Здійснює збірку, тестування та зберігає кеш моделі. |
| Документація/навички | README.md, docs/, skills/ | Користувач, автор, інструкції щодо використання Playbooks. |
Залежності, які потрібні лише для компіляції, не повинні включатися до sima_lmm/devkit/ або до пакетів Modalix, що використовуються в середовищі виконання.
Середовища розробки
Середовище виконання та пакування.
Використовуйте Neat SDK як підтримуване середовище для збірки. Зберіть усі пакети для середовища виконання та упаковані тести за допомогою:
./build.sh --all --clean
Під час звичайної збірки виконуються всі необхідні налаштування, зокрема, ініціалізація підмодулів; не потрібно виконувати окремий етап встановлення залежностей для стандартного процесу.
Корисні альтернативні варіанти збірки:
./build.sh --clean --core
./build.sh --clean --core --dev
./build.sh --clean --cli
./build.sh --no-dist
Результати генеруються в рамках build-deb/ і розміщуються в dist/. Modalix необхідний для виконання MLA і для реальної перевірки llima run.
Розробка компіляторів.
Використовуйте середовище Python 3.12, встановлене за допомогою Model Compiler. Здійснюйте пошук у наступному порядку:
/sdk-extensions/model-compiler/sdk-add-on/model-compiler$HOME/sdk-extensions/model-compiler
source <model-compiler-venv>/bin/activate
python -m pip install -e '.[sdk_ext,tests]'
llima-compile --help
Не створюйте додаткове середовище, яке затінюватиме встановлені пакети компілятора. Створюйте профілі для публікації за допомогою:
./build_compiler_wheel.sh
./build_mole_package.sh
Вони використовують інструменти для роботи з колісними приводами під час build/ і розміщують проміжні результати під час dist/compiler/ та dist/mole/.
Розробка Whisper та ASR.
Загальнодоступний процес llima-compile охоплює LLM та VLM. Для наявної Whisper замість попередньої використовується утиліта для розробників:
scripts/gen_models--openai--whisper.py.
python scripts/gen_models--openai--whisper.py \
--model_path /path/to/openai/whisper-small \
--output /path/to/whisper-output \
--part all
Запустіть його в середовищі Model Compiler із зазначенням явного шляху до моделі.
--part приймає all, encoder, language_detect, init, single_pre, single_post та single_cache. Додайте --enable_log_probe, щоб скомпілювати вихідні дані декодера з увімкненим журналюванням; використовуйте --part all --enable_log_probe для повної збірки з увімкненим журналюванням.
Репозиторії моделей Whisper містять один ELF на кожен шар кодувальника. Середовище виконання не підтримує застарілі репозиторії з монолітним ELF кодувальника; завантажте пошарову модель або перекомпілюйте контрольну точку поточною версією LLiMa.
Зазвичай зміни в компіляторі стосуються файлів sima_lmm/config/whisper_config.py, sima_lmm/model/whisper_*.py та скрипту; зміни в середовищі виконання стосуються sima_lmm/devkit/cpp/whisper_*. Перевірте за допомогою упакованого тесту середовища виконання C++ ASR, описаного в tests/README.md, та репрезентативних аудіофайлів на Modalix. Це специфічний шлях для Whisper, а не загальна архітектурна структура ASR.
Тестування
Обирайте тести за типом помилки. Збірка не замінює перевірку поведінки, і пропущений обов’язковий тест не вважається успішно пройденим.
Герметичні випробування.
Забезпечте, щоб чиста конфігурація, відображення, серіалізація, перевірка та числова логіка були незалежними від завантаження моделей:
pytest -q <targeted-test-path>
Тести компілятора, що використовують модель.
Тести компілятора розміщено за адресою tests/compilation/. Оберіть відповідну групу та
маркер, описані в tests/README.md. Наприклад:
export LLIMA_HF_MODELS_PATH=/path/to/llima-model-inputs
python -P -m pytest \
-c pytest.ini \
tests/compilation/configuration \
-m compiler_config \
--strict-markers \
-vv -ra
--model-inputs-path та LLIMA_HF_MODELS_PATH визначають підготовлену кореневу директорію Hugging Face/GGUF. Система безперервної інтеграції (CI) використовує маніфести, що знаходяться в tools/hf-safetensors/.
Налаштуйте необхідні вхідні дані замість того, щоб дозволяти пропуск тестів.
Матриця тестів, очікувані значення та базові правила розміщені в tests/README.md; виклик CI розміщено в .github/workflows/model-compiler-tests.yml. Генеруйте ONNX та числові артефакти порівняння під час виконання, а не зберігайте бінарні базові значення.
Перевірка під час виконання (у середовищі виконання).
Створіть пакети для кандидатів і додаткові компоненти для тестування в середови щі виконання:
./build.sh --all --clean
Це дозволяє зібрати проєкт, але не запускає тести. Встановіть відповідну версію LLiMa та пакети Internals на Modalix, розпакуйте додатковий архів і запустіть упаковані тести CTest і pytest, дотримуючись інструкцій щодо тестування в середовищі виконання DevKit, наведених у файлі tests/README.md.
Запускайте відповідні апаратні тести, коли зміни стосуються завантаження моделі, виконання висновків, токенізації, багатомодальної попередньої обробки, спекулятивного декодування, CLI/HTTP/ZMQ або життєвого циклу ресурсів. За потреби додайте репрезентативний базовий тест.
llima run <model_dir> --mode cli
Для змін, пов’язаних з VLM, додайте запит, що містить зображення. Ручне тестування на наявність помилок доповнює, але не замінює, охоплення відповідних пакетів.
Neat Core використовує встановлені LLiMa API та пакети середовища виконання C++. Коли будь-яка з цих компонентів або поведінка, що реалізується через API GenAI Core, змінюється, створіть Core, використовуючи кандидатські пакети sima-lmm-core та sima-lmm-dev, а не опубліковану або кешовану збірку LLiMa. Запустіть відповідні тести Core GenAI C++ на Modalix. Ця перевірка на наступному етапі не потрібна для ізольованих змін, що стосуються компілятора, документації або лише тестів.
Перевірка відповідності пакування встановленим вимогам.
Зберіть кожен змінений профіль:
./build.sh --all --clean
./build_compiler_wheel.sh
./build_mole_package.sh
Перевірте назви пакетів, права власності на файли, файли маніфестів встановлення, залежності, контрольні суми та метадані.
Стандарти кодування
Сумісність і межі.
Розглядайте встановлені заголовні файли C++, команди інтерфейсу командного рядка, серіалізовану конфігурацію, метадані пакету та згенеровані макети артефактів як сумісні інтерфейси. Віддавайте перевагу інкрементним змінам. У разі внесення несумісних змін, документуйте задіяні компо ненти, процес міграції та заплановані зміни; оновлюйте виклики, тести, приклади та документацію для користувачів.
Тримайте компілятор, середовище виконання та залежності MoLE окремо. Стан середовища виконання не повинен бути вхідними даними для компіляції. Зміни меж пакету середовища виконання повинні зберігати ролі sima-lmm-core, sima-lmm-dev та sima-lmm-cli і включати відповідну валідацію API/ABI.
Якість реалізації.
- Цільові версії C++20 і Python, зазначені у файлі
pyproject.toml. - Дотримуйтеся загального форматування, використовуйте відповідні назви та забезпечте групування; уникайте надмірної узагальненості. механічне переформатування.
- Зберігайте кількість встановлених інтерфейсів на мінімальному рівні та не розголошуйте деталі реалізації.
- Додайте анотації типів Python, де це доцільно.
- Поясніть неявні умови договорів, числові припущення та технічні характеристики обладнання. обмеження; не потрібно описувати код.
- Перш ніж додавати абстракції, повторно використовуйте наявні допоміжні функції.
- Забезпечте збереження детермінованого вибору моделі, структури графа та можливості серіалізації. імена артефактів. Зберігайте початкові значення та уникайте впорядкування файлової системи/процесів.
- Відхиляйте неприйнятні або недійсні вхідні дані, надаючи контекст; зберігайте першопричини. між різними рівнями, і при цьому ніколи не обирає інший шлях виконання мовчки.
- Організуйте взаємодію між працівниками та процес демонтажу. Створіть буфер, обробіть, налаштуйте та... Явно вказуйте власника тимчасових файлів; безпечно видаляйте частково виконану роботу.
- Уникайте зайвого виділення пам’яті, створення копій і синхронізації в критичних ділянках коду.