初始化项目,由ModelHub XC社区提供模型

Model: MTSAIR/Kodify-Nano
Source: Original Platform
This commit is contained in:
ModelHub XC
2026-05-05 15:03:36 +08:00
commit 415160900c
13 changed files with 660 additions and 0 deletions

52
.gitattributes vendored Normal file
View File

@@ -0,0 +1,52 @@
*.7z filter=lfs diff=lfs merge=lfs -text
*.arrow filter=lfs diff=lfs merge=lfs -text
*.bin filter=lfs diff=lfs merge=lfs -text
*.bin.* filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.ftz filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.h5 filter=lfs diff=lfs merge=lfs -text
*.joblib filter=lfs diff=lfs merge=lfs -text
*.lfs.* filter=lfs diff=lfs merge=lfs -text
*.model filter=lfs diff=lfs merge=lfs -text
*.msgpack filter=lfs diff=lfs merge=lfs -text
*.onnx filter=lfs diff=lfs merge=lfs -text
*.ot filter=lfs diff=lfs merge=lfs -text
*.parquet filter=lfs diff=lfs merge=lfs -text
*.pb filter=lfs diff=lfs merge=lfs -text
*.pt filter=lfs diff=lfs merge=lfs -text
*.pth filter=lfs diff=lfs merge=lfs -text
*.rar filter=lfs diff=lfs merge=lfs -text
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
*.tar.* filter=lfs diff=lfs merge=lfs -text
*.tflite filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zstandard filter=lfs diff=lfs merge=lfs -text
*.tfevents* filter=lfs diff=lfs merge=lfs -text
*.db* filter=lfs diff=lfs merge=lfs -text
*.ark* filter=lfs diff=lfs merge=lfs -text
**/*ckpt*data* filter=lfs diff=lfs merge=lfs -text
**/*ckpt*.meta filter=lfs diff=lfs merge=lfs -text
**/*ckpt*.index filter=lfs diff=lfs merge=lfs -text
*.ckpt filter=lfs diff=lfs merge=lfs -text
*.gguf* filter=lfs diff=lfs merge=lfs -text
*.ggml filter=lfs diff=lfs merge=lfs -text
*.llamafile* filter=lfs diff=lfs merge=lfs -text
*.pt2 filter=lfs diff=lfs merge=lfs -text
*.mlmodel filter=lfs diff=lfs merge=lfs -text
*.npy filter=lfs diff=lfs merge=lfs -text
*.npz filter=lfs diff=lfs merge=lfs -text
*.pickle filter=lfs diff=lfs merge=lfs -text
*.pkl filter=lfs diff=lfs merge=lfs -text
*.tar filter=lfs diff=lfs merge=lfs -text
*.wasm filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text
*tfevents* filter=lfs diff=lfs merge=lfs -text
merges.txt filter=lfs diff=lfs merge=lfs -text
tokenizer.json filter=lfs diff=lfs merge=lfs -text
vocab.json filter=lfs diff=lfs merge=lfs -text
model.safetensors filter=lfs diff=lfs merge=lfs -text

BIN
Apache License MTS AI.docx Normal file

Binary file not shown.

284
README.md Normal file
View File

@@ -0,0 +1,284 @@
---
library_name: transformers
language:
- ru
- en
pipeline_tag: text-generation
license: apache-2.0
license_name: apache-2.0
license_link: https://huggingface.co/MTSAIR/Kodify-Nano/blob/main/Apache%20License%20MTS%20AI.docx
---
# Kodify-Nano 🤖
Kodify-Nano это легковесная LLM, разработанная для выполнения задач разработки кода с минимальными ресурсами. Она оптимизирована для быстрого и эффективного взаимодействия с пользователями, обеспечивая высокую производительность даже в условиях ограниченных ресурсов.
Kodify-Nano is a lightweight LLM designed for code development tasks with minimal resource usage. It is optimized for fast and efficient interaction, delivering high performance even in resource-constrained environments.
## Inference with vLLM
```bash
python3 -m vllm.entrypoints.openai.api_server --model MTSAIR/Kodify-Nano --port 8985
```
> **Important!** If you encounter the **"CUDA out of memory. Tried to allocate..."** error despite having sufficient GPU memory, try one of these solutions:
> 1. Add the --enforce-eager argument
> 2. Reduce GPU memory utilization (for example --gpu-memory-utilization 0.8)
>
> Note: This may decrease model performance.
---
## Using the Ollama Image
You can run Kodify Nano on OLLAMA in two ways:
1. **Using Docker**
2. **Locally** (provides faster responses than Docker)
### Method 1: Running Kodify Nano on OLLAMA in Docker
#### Without NVIDIA GPU:
```bash
docker run -e OLLAMA_HOST=0.0.0.0:8985 -p 8985:8985 --name ollama -d ollama/ollama
```
#### With NVIDIA GPU:
```bash
docker run --runtime nvidia -e OLLAMA_HOST=0.0.0.0:8985 -p 8985:8985 --name ollama -d ollama/ollama
```
> **Important:**
> - Ensure Docker is installed and running
> - If port 8985 is occupied, replace it with any available port and update plugin configuration
#### Load the model:
```bash
docker exec ollama ollama pull hf.co/MTSAIR/Kodify-Nano-GGUF
```
#### Rename the model:
```bash
docker exec ollama ollama cp hf.co/MTSAIR/Kodify-Nano-GGUF kodify_nano
```
#### Start the model:
```bash
docker exec ollama ollama run kodify_nano
```
---
### Method 2: Local Kodify Nano on OLLAMA
1. **Download OLLAMA:**
https://ollama.com/download
2. **Set the port:**
```bash
export OLLAMA_HOST=0.0.0.0:8985
```
> **Note:** If port 8985 is occupied, replace it and update plugin configuration
3. **Start OLLAMA server:**
```bash
ollama serve &
```
4. **Download the model:**
```bash
ollama pull hf.co/MTSAIR/Kodify-Nano-GGUF
```
5. **Rename the model:**
```bash
ollama cp hf.co/MTSAIR/Kodify-Nano-GGUF kodify_nano
```
6. **Run the model:**
```bash
ollama run kodify_nano
```
## Plugin Installation
### For Visual Studio Code
1. Download the [latest Kodify plugin](https://mts.ai/ru/product/kodify/?utm_source=huggingface&utm_medium=pr&utm_campaign=post#models) for VS Code.
2. Open the **Extensions** panel on the left sidebar.
3. Click **Install from VSIX...** and select the downloaded plugin file.
### For JetBrains IDEs
1. Download the [latest Kodify plugin](https://mts.ai/ru/product/kodify/?utm_source=huggingface&utm_medium=pr&utm_campaign=post#models) for JetBrains.
2. Open the IDE and go to **Settings > Plugins**.
3. Click the gear icon (⚙️) and select **Install Plugin from Disk...**.
4. Choose the downloaded plugin file.
5. Restart the IDE when prompted.
---
### Changing the Port in Plugin Settings (for Visual Studio Code and JetBrains)
If you changed the Docker port from `8985`, update the plugin's `config.json`:
1. Open any file in the IDE.
2. Open the Kodify sidebar:
- **VS Code**: `Ctrl+L` (`Cmd+L` on Mac).
- **JetBrains**: `Ctrl+J` (`Cmd+J` on Mac).
3. Access the `config.json` file:
- **Method 1**: Click **Open Settings** (VS Code) or **Kodify Config** (JetBrains), then navigate to **Configuration > Chat Settings > Open Config File**.
- **Method 2**: Click the gear icon (⚙️) in the Kodify sidebar.
4. Modify the `apiBase` port under `tabAutocompleteModel` and `models`.
5. Save the file (`Ctrl+S` or **File > Save**).
---
### Example API Request
```python
import openai
openai.api_key = 'xxx' # Replace with your key
openai.api_base = 'http://localhost:8985/v1' # Update if port changed
response = openai.ChatCompletion.create(
model="MTSAIR/Kodify-Nano",
temperature=0.4,
max_tokens=2048,
top_p=0.8,
messages=[
{"role": "user", "content": "Write a Python algorithm to find all unique words in a text."}
]
)
print(response["choices"][0]["message"]["content"])
### Inference with Hugging Face
from transformers import pipeline
pipe = pipeline("text-generation", model="MTSAIR/Kodify-Nano", device="cuda")
messages = [
{"role": "user", "content": "Write a Python algorithm to find all unique words in a text."},
]
response = pipe(messages, max_length=1024)
print(response[0]['generated_text'][-1]['content'])
```
---
## Example Interaction
**User Request:**
*Напиши простой сервер на flask с объяснениями на русском языке.*
#### Kodify-Nano response:
>Конечно! Давайте создадим простой сервер на Flask с объяснениями на русском языке. Flask - это мини-модуль для создания веб-приложений на Python, который позволяет быстро и легко разрабатывать приложения с использованием библиотеки Werkzeug.
>### Установка Flask
>Для начала, убедитесь, что у вас установлен Python. После этого установите Flask с помощью pip:
>```sh
>pip install Flask
>```
>### Пример простого сервера на Flask
>Вот пример простого приложения на Flask, которое будет отвечать на запросы на `/hello` и выводить "Hello, World!".
>1. Создайте новый файл, например, `app.py`.
>2. Откройте файл в текстовом редакторе и вставьте следующий код:
>```python
>from flask import Flask
>app = Flask(__name__)
>@app.route('/hello')
>def hello_world():
> return 'Hello, World!'
>if __name__ == '__main__':
> app.run(debug=True)
>```
>### Объяснение кода
>1. **Импорт Flask**: Мы импортируем класс Flask из модуля `flask`.
>2. **Создание экземпляра Flask**: Создаем экземпляр класса Flask с именем `app`.
>3. **Обработчик запросов**: Мы декорируем функцию `hello_world` с помощью `@app.route('/hello')`. Это означает, что при запросе на `/hello` Flask вызовет функцию `hello_world`.
>4. **Возвращение ответа**: Функция `hello_world` возвращает строку `'Hello, World!'`.
>5. **Запуск сервера**: В конце файла добавляем проверку, чтобы при запуске скрипта он запускался в режиме отладки (`debug=True`).
>### Запуск сервера
>1. Откройте терминал и перейдите в директорию, в которой находится ваш файл `app.py`.
>2. Запустите скрипт с помощью команды:
>```sh
>python app.py
>```
>
>3. Вы увидите сообщение, что сервер запущен на порту 5000. Например:
>```
> * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
>```
>4. Откройте браузер и перейдите на адрес `http://127.0.0.1:5000/hello`. Вы должны увидеть сообщение "Hello, World!".
>### Дополнительные функции
>Flask предоставляет множество других функций для создания более сложных приложений. Вот некоторые из них:
>- **Функции маршрутизации**: Вы можете добавлять дополнительные маршруты, обрабатывать параметры запросов и т.д.
>- **Вьюшки**: Вы можете создавать вьюшки, которые возвращают HTML-страницы.
>- **Сессии**: Вы можете использовать сессии для хранения данных между запросами.
>- **БД**: Вы можете подключаться к базе данных и выполнять запросы.
>Давайте рассмотрим пример с вьюшкой:
>```python
>from flask import Flask, render_template
>app = Flask(__name__)
>@app.route('/')
>def index():
> return render_template('index.html')
>if __name__ == '__main__':
> app.run(debug=True)
>```
>1. **Вьюшка**: Создаем файл `templates/index.html` в папке `templates` (если он еще не существует) и добавляем следующий код:
>
>```html
><!DOCTYPE html>
><html lang="ru">
><head>
> <meta charset="UTF-8">
> <title>Пример вьюшки</title>
></head>
><body>
> <h1>Привет, мир!</h1>
> <p>Это пример вьюшки на Flask.</p>
></body>
></html>
>```
>2. **Запуск сервера**: Сохраните файлы и запустите сервер снова. Откройте браузер и перейдите на адрес `http://127.0.0.1:5000/`. Вы должны увидеть HTML-страницу с текстом "Привет, мир!".

24
added_tokens.json Normal file
View File

@@ -0,0 +1,24 @@
{
"</tool_call>": 151658,
"<tool_call>": 151657,
"<|box_end|>": 151649,
"<|box_start|>": 151648,
"<|endoftext|>": 151643,
"<|file_sep|>": 151664,
"<|fim_middle|>": 151660,
"<|fim_pad|>": 151662,
"<|fim_prefix|>": 151659,
"<|fim_suffix|>": 151661,
"<|im_end|>": 151645,
"<|im_start|>": 151644,
"<|image_pad|>": 151655,
"<|object_ref_end|>": 151647,
"<|object_ref_start|>": 151646,
"<|quad_end|>": 151651,
"<|quad_start|>": 151650,
"<|repo_name|>": 151663,
"<|video_pad|>": 151656,
"<|vision_end|>": 151653,
"<|vision_pad|>": 151654,
"<|vision_start|>": 151652
}

28
config.json Normal file
View File

@@ -0,0 +1,28 @@
{
"architectures": [
"Qwen2ForCausalLM"
],
"attention_dropout": 0.0,
"bos_token_id": 151643,
"eos_token_id": 151645,
"hidden_act": "silu",
"hidden_size": 1536,
"initializer_range": 0.02,
"intermediate_size": 8960,
"max_position_embeddings": 32768,
"max_window_layers": 28,
"model_type": "qwen2",
"num_attention_heads": 12,
"num_hidden_layers": 28,
"num_key_value_heads": 2,
"rms_norm_eps": 1e-06,
"rope_scaling": null,
"rope_theta": 1000000.0,
"sliding_window": null,
"tie_word_embeddings": true,
"torch_dtype": "bfloat16",
"transformers_version": "4.46.1",
"use_cache": true,
"use_sliding_window": false,
"vocab_size": 151936
}

1
configuration.json Normal file
View File

@@ -0,0 +1 @@
{"framework": "pytorch", "task": "text-generation", "allow_remote": true}

18
generation_config.json Normal file
View File

@@ -0,0 +1,18 @@
{
"transformers_version": "4.46.3",
"temperature": 0.4,
"max_len": 8192,
"max_tokens": 4096,
"do_sample": true,
"presence_penalty": 0.0,
"frequency_penalty": 0.0,
"repetition_penalty": 1.0,
"top_p": 0.8,
"top_k": 20,
"n": 1,
"best_of": 1,
"seed": null,
"use_beam_search": false,
"length_penalty": 1.0,
"ignore_eos": false
}

3
merges.txt Normal file
View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:8831e4f1a044471340f7c0a83d7bd71306a5b867e95fd870f74d0c5308a904d5
size 1671853

3
model.safetensors Normal file
View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6801c76a437735f49dcfd41b5b1b08546b370a2cea60b234c2dae0a2a477d348
size 3087467144

31
special_tokens_map.json Normal file
View File

@@ -0,0 +1,31 @@
{
"additional_special_tokens": [
"<|im_start|>",
"<|im_end|>",
"<|object_ref_start|>",
"<|object_ref_end|>",
"<|box_start|>",
"<|box_end|>",
"<|quad_start|>",
"<|quad_end|>",
"<|vision_start|>",
"<|vision_end|>",
"<|vision_pad|>",
"<|image_pad|>",
"<|video_pad|>"
],
"eos_token": {
"content": "<|im_end|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false
},
"pad_token": {
"content": "<|endoftext|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false
}
}

3
tokenizer.json Normal file
View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9c5ae00e602b8860cbd784ba82a8aa14e8feecec692e7076590d014d7b7fdafa
size 11421896

210
tokenizer_config.json Normal file
View File

@@ -0,0 +1,210 @@
{
"add_bos_token": false,
"add_prefix_space": false,
"added_tokens_decoder": {
"151643": {
"content": "<|endoftext|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151644": {
"content": "<|im_start|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151645": {
"content": "<|im_end|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151646": {
"content": "<|object_ref_start|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151647": {
"content": "<|object_ref_end|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151648": {
"content": "<|box_start|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151649": {
"content": "<|box_end|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151650": {
"content": "<|quad_start|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151651": {
"content": "<|quad_end|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151652": {
"content": "<|vision_start|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151653": {
"content": "<|vision_end|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151654": {
"content": "<|vision_pad|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151655": {
"content": "<|image_pad|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151656": {
"content": "<|video_pad|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": true
},
"151657": {
"content": "<tool_call>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": false
},
"151658": {
"content": "</tool_call>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": false
},
"151659": {
"content": "<|fim_prefix|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": false
},
"151660": {
"content": "<|fim_middle|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": false
},
"151661": {
"content": "<|fim_suffix|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": false
},
"151662": {
"content": "<|fim_pad|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": false
},
"151663": {
"content": "<|repo_name|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": false
},
"151664": {
"content": "<|file_sep|>",
"lstrip": false,
"normalized": false,
"rstrip": false,
"single_word": false,
"special": false
}
},
"additional_special_tokens": [
"<|im_start|>",
"<|im_end|>",
"<|object_ref_start|>",
"<|object_ref_end|>",
"<|box_start|>",
"<|box_end|>",
"<|quad_start|>",
"<|quad_end|>",
"<|vision_start|>",
"<|vision_end|>",
"<|vision_pad|>",
"<|image_pad|>",
"<|video_pad|>"
],
"bos_token": null,
"chat_template": "{%- if tools %}\n {{- '<|im_start|>system\\n' }}\n {%- if messages[0]['role'] == 'system' %}\n {{- messages[0]['content'] }}\n {%- else %}\n {{- 'You are Kodify, created by MTS AI, you are a helpful assistant.' }}\n {%- endif %}\n {{- \"\\n\\n# Tools\\n\\nYou may call one or more functions to assist with the user query.\\n\\nYou are provided with function signatures within <tools></tools> XML tags:\\n<tools>\" }}\n {%- for tool in tools %}\n {{- \"\\n\" }}\n {{- tool | tojson }}\n {%- endfor %}\n {{- \"\\n</tools>\\n\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\n<tool_call>\\n{\\\"name\\\": <function-name>, \\\"arguments\\\": <args-json-object>}\\n</tool_call><|im_end|>\\n\" }}\n{%- else %}\n {%- if messages[0]['role'] == 'system' %}\n {{- '<|im_start|>system\\n' + messages[0]['content'] + '<|im_end|>\\n' }}\n {%- else %}\n {{- '<|im_start|>system\\nYou are Kodify, created by MTS AI. You are a helpful assistant.<|im_end|>\\n' }}\n {%- endif %}\n{%- endif %}\n{%- for message in messages %}\n {%- if (message.role == \"user\") or (message.role == \"system\" and not loop.first) or (message.role == \"assistant\" and not message.tool_calls) %}\n {{- '<|im_start|>' + message.role + '\\n' + message.content + '<|im_end|>' + '\\n' }}\n {%- elif message.role == \"assistant\" %}\n {{- '<|im_start|>' + message.role }}\n {%- if message.content %}\n {{- '\\n' + message.content }}\n {%- endif %}\n {%- for tool_call in message.tool_calls %}\n {%- if tool_call.function is defined %}\n {%- set tool_call = tool_call.function %}\n {%- endif %}\n {{- '\\n<tool_call>\\n{\"name\": \"' }}\n {{- tool_call.name }}\n {{- '\", \"arguments\": ' }}\n {{- tool_call.arguments | tojson }}\n {{- '}\\n</tool_call>' }}\n {%- endfor %}\n {{- '<|im_end|>\\n' }}\n {%- elif message.role == \"tool\" %}\n {%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != \"tool\") %}\n {{- '<|im_start|>user' }}\n {%- endif %}\n {{- '\\n<tool_response>\\n' }}\n {{- message.content }}\n {{- '\\n</tool_response>' }}\n {%- if loop.last or (messages[loop.index0 + 1].role != \"tool\") %}\n {{- '<|im_end|>\\n' }}\n {%- endif %}\n {%- endif %}\n{%- endfor %}\n{%- if add_generation_prompt %}\n {{- '<|im_start|>assistant\\n' }}\n{%- endif %}\n",
"clean_up_tokenization_spaces": false,
"eos_token": "<|im_end|>",
"errors": "replace",
"extra_special_tokens": {},
"model_max_length": 32768,
"pad_token": "<|endoftext|>",
"padding_side": "left",
"split_special_tokens": false,
"tokenizer_class": "Qwen2Tokenizer",
"truncation_side": "left",
"unk_token": null
}

BIN
vocab.json (Stored with Git LFS) Normal file

Binary file not shown.