284 lines
9.8 KiB
Markdown
284 lines
9.8 KiB
Markdown
---
|
||
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-страницу с текстом "Привет, мир!". |