120 lines
3.8 KiB
Markdown
120 lines
3.8 KiB
Markdown
---
|
||
language:
|
||
- en
|
||
- ru
|
||
license: apache-2.0
|
||
base_model: Qwen/Qwen2.5-Coder-3B-Instruct
|
||
tags:
|
||
- lua
|
||
- code
|
||
- code-review
|
||
- gguf
|
||
- qwen2
|
||
library_name: llama-cpp-python
|
||
pipeline_tag: text-generation
|
||
---
|
||
|
||
# Lua Coder — Qwen 2.5 Coder 3B (GGUF)
|
||
|
||
Модель для написания, ревью и объяснения Lua-кода. Обучена на базе Qwen 2.5 Coder 3B Instruct с использованием QLoRA файнтюнинга.
|
||
|
||
## Возможности
|
||
|
||
- **Написание кода** — генерация Lua-функций, модулей, структур данных
|
||
- **Код-ревью** — анализ кода с выявлением багов (SQL injection, утечки переменных, проблемы производительности)
|
||
- **Агентское поведение** — задаёт 1-2 уточняющих вопроса перед написанием, если задача неоднозначная
|
||
- **Объяснение кода** — разбор сложного Lua-кода с пояснениями
|
||
|
||
## Примеры
|
||
|
||
**Написание кода:**
|
||
```
|
||
Запрос: Write a Lua event system with on, off, and emit methods.
|
||
Ответ:
|
||
local Event = {listeners = {}}
|
||
function Event:on(name, fn)
|
||
self.listeners[name] = self.listeners[name] or {}
|
||
table.insert(self.listeners[name], fn)
|
||
end
|
||
function Event:emit(name, ...)
|
||
for _, fn in ipairs(self.listeners[name] or {}) do fn(...) end
|
||
end
|
||
return Event
|
||
```
|
||
|
||
**Код-ревью:**
|
||
```
|
||
Запрос: Review this Lua code (SQL query with string concatenation)
|
||
Ответ: SQL Injection — используйте параметризованные запросы. Stale cache — очищайте кэш при ошибке.
|
||
```
|
||
|
||
**Агентское поведение:**
|
||
```
|
||
Запрос: I need a Lua save system for my game.
|
||
Ответ: Before I write the code, I have a couple questions:
|
||
1. Are you saving data to a file or a database?
|
||
2. Do you need to handle encryption for sensitive information?
|
||
```
|
||
|
||
## Параметры обучения
|
||
|
||
| Параметр | Значение |
|
||
|----------|----------|
|
||
| Базовая модель | Qwen 2.5 Coder 3B Instruct |
|
||
| Метод | QLoRA (4-bit) |
|
||
| LoRA rank | 128 |
|
||
| LoRA alpha | 256 |
|
||
| Learning rate | 8e-5 |
|
||
| Эпох | 3 |
|
||
| Оптимизатор | AdamW 8-bit |
|
||
| Квантизация GGUF | Q8_0 |
|
||
|
||
## Оптимизация
|
||
|
||
Гиперпараметры подобраны с помощью автоматизированного поиска (50 экспериментов). Лучшая конфигурация выбрана по минимальному val_loss.
|
||
|
||
## Использование
|
||
|
||
### Ollama
|
||
```bash
|
||
ollama run hf.co/kertpoli/lua-coder-qwen25-3b-gguf
|
||
```
|
||
|
||
### llama.cpp
|
||
```bash
|
||
./llama-server -m lua-coder-q8_0.gguf -ngl 99 -c 1024 --port 8091
|
||
```
|
||
|
||
### Python (llama-cpp-python)
|
||
```python
|
||
from llama_cpp import Llama
|
||
|
||
llm = Llama(model_path="lua-coder-q8_0.gguf", n_gpu_layers=-1, n_ctx=1024)
|
||
|
||
result = llm.create_chat_completion(
|
||
messages=[{"role": "user", "content": "Write a Lua stack with push and pop"}],
|
||
max_tokens=200,
|
||
temperature=0.3,
|
||
)
|
||
print(result["choices"][0]["message"]["content"])
|
||
```
|
||
|
||
## Темы обучения
|
||
|
||
Модель обучена на примерах из следующих областей:
|
||
- Структуры данных (стеки, очереди, деревья)
|
||
- Игровые механики (ECS, state machine, collision)
|
||
- Утилиты (event system, config loader, object pool)
|
||
- Love2D, Roblox, OpenResty, Neovim
|
||
- Metatables, coroutines, closures
|
||
|
||
## Требования
|
||
|
||
| Формат | Размер | VRAM (GPU) | RAM (CPU) |
|
||
|--------|--------|------------|-----------|
|
||
| Q8_0 | 3.1 ГБ | 4 ГБ | 4 ГБ |
|
||
|
||
## Лицензия
|
||
|
||
Apache 2.0 (наследуется от Qwen 2.5 Coder)
|