Introduction of gemma-2-9b-it-russian-function-calling-GGUF
Model Details of gemma-2-9b-it-russian-function-calling-GGUF
DiTy/gemma-2-9b-it-russian-function-calling-GGUF
This model is a fine-tuned version of
google/gemma-2-9b-it
for the
Function Calling
task on non-synthetic data,
fully annotated by humans only, on the Russian version of the
DiTy/function-calling
dataset.
In addition to
safetensors
, the model is available in
GGUF
formats (in this case, you need to download only a single file (
how to inference GGUF model
)):
Ниже представлены некоторые фрагменты кода о том, как быстро приступить к запуску модели. Сначала установите библиотеку Transformers с помощью:
pip install -U transformers
Как подготовить ваши функции (tools) для
Function Calling
Вы должны написать функции (инструменты), используемые моделью, в
коде на Python
и обязательно добавить
Python docstrings
, как в примере ниже:
defget_weather(city: str):
""" Функция, которая возвращает погоду в заданном городе. Args: city: Город, для которого надо узнать погоду. """import random
return"sunny"if random.random() > 0.5else"rainy"defget_sunrise_sunset_times(city: str):
""" Функция, которая возвращает время восхода и заката для заданного города для текущей даты (дата от пользователя не требуется), в формате списка: [sunrise_time, sunset_time]. Args: city: Город, в котором можно узнать время восхода и захода солнца. """return ["6:00", "18:00"]
Просто используйте chat template для генерации
Далее вам нужно загрузить модель и токенизатор:
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
"DiTy/gemma-2-9b-it-russian-function-calling-GGUF",
device_map="auto",
torch_dtype=torch.bfloat16, # use float16 or float32 if bfloat16 is not available to you.
cache_dir=PATH_TO_MODEL_DIR, # optional
)
tokenizer = AutoTokenizer.from_pretrained(
"DiTy/gemma-2-9b-it-russian-function-calling-GGUF",
cache_dir=PATH_TO_MODEL_DIR, # optional
)
Чтобы получить результат генерации, просто используйте
apply_chat_template
. Чтобы учесть наши написанные функции (инструменты),
нам нужно передать их в виде списка через атрибут
tools
, а также использовать
add_prompt_generation=True
.
history_messages = [
{"role": "system", "content": "Ты - полезный помощник, имеющий доступ к следующим функциям. Используйте их при необходимости - "},
{"role": "user", "content": "Привет, не мог бы ты сказать мне, во сколько в Краснодаре восходит солнце?"}
]
inputs = tokenizer.apply_chat_template(
history_messages,
tokenize=False,
add_generation_prompt=True, # adding prompt for generation
tools=[get_weather, get_sunrise_sunset_times], # our functions (tools)
)
print(inputs)
Тогда наш
inputs
будет выглядеть следующим образом:
<bos><start_of_turn>user
Ты - полезный помощник, имеющий доступ к следующим функциям. Используйте их при необходимости - {
"name": "get_weather",
"description": "Функция, которая возвращает погоду в заданном городе.",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "Город, для которого надо узнать погоду."
}
},
"required": [
"city"
]
}
},
{
"name": "get_sunrise_sunset_times",
"description": "Функция, которая возвращает время восхода и заката для заданного города для текущей даты (дата от пользователя не требуется), в формате списка: [sunrise_time, sunset_time].",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "Город, в котором можно узнать время восхода и захода солнца."
}
},
"required": [
"city"
]
}
}
Привет, не мог бы ты сказать мне, во сколько в Краснодаре восходит солнце?<end_of_turn>
<start_of_turn>model
Теперь мы можем сгенерировать ответ модели.
Будьте осторожны, потому что после
apply_chat_template
нет необходимости
добавлять специальные токены
во время токенизации.
Поэтому используем
add_special_tokens=False
:
Отлично, теперь мы можем получать и обрабатывать результаты с помощью нашей
вызываемой функции
, а затем предоставлять модели ответ
функции
:
history_messages = [
{"role": "system", "content": "Ты - полезный помощник, имеющий доступ к следующим функциям. Используйте их при необходимости - "},
{"role": "user", "content": "Привет, не мог бы ты сказать мне, во сколько в Краснодаре восходит солнце?"},
{"role": "function-call", "content": '{"name": "get_sunrise_sunset_times", "arguments": {"city": "Los Angeles"}}'},
{"role": "function-response", "content": '{"times_list": ["6:00", "18:00"]}'}, # гипотетический ответ от нашей функции
]
inputs = tokenizer.apply_chat_template(
history_messages,
tokenize=False,
add_generation_prompt=True, # добавление запроса для генерации
tools=[get_weather, get_sunrise_sunset_times], # наши функции (tools)
)
print(inputs)
Давайте убедимся, что
inputs
верны:
<bos><start_of_turn>user
Ты - полезный помощник, имеющий доступ к следующим функциям. Используйте их при необходимости - {
"name": "get_weather",
"description": "Функция, которая возвращает погоду в заданном городе.",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "Город, для которого надо узнать погоду."
}
},
"required": [
"city"
]
}
},
{
"name": "get_sunrise_sunset_times",
"description": "Функция, которая возвращает время восхода и заката для заданного города для текущей даты (дата от пользователя не требуется), в формате списка: [sunrise_time, sunset_time].",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "Город, в котором можно узнать время восхода и захода солнца."
}
},
"required": [
"city"
]
}
}
Привет, не мог бы ты сказать мне, во сколько в Краснодаре восходит солнце?<end_of_turn>
<start_of_turn>model
Вызов функции: {"name": "get_sunrise_sunset_times", "arguments": {"city": "Краснодар"}}<end_of_turn>
<start_of_turn>user
Ответ от функции: {"times_list": ["6:00", "18:00"]}<end_of_turn>
<start_of_turn>model
В Краснодаре солнце восходит в 6:00 утра и заходит в 18:00 вечера.<end_of_turn>
Использование через transformers
pipeline
Generation via pipeline
from transformers import pipeline
generation_pipeline = pipeline(
"text-generation",
model="DiTy/gemma-2-9b-it-russian-function-calling-GGUF",
model_kwargs={
"torch_dtype": torch.bfloat16, # use float16 or float32 if bfloat16 is not supported for you. "cache_dir": PATH_TO_MODEL_DIR, # OPTIONAL
},
device_map="auto",
)
history_messages = [
{"role": "system", "content": "Ты - полезный помощник, имеющий доступ к следующим функциям. Используйте их при необходимости - "},
{"role": "user", "content": "Привет, не мог бы ты сказать мне, во сколько в Краснодаре восходит солнце?"},
{"role": "function-call", "content": '{"name": "get_sunrise_sunset_times", "arguments": {"city": "Краснодар"}}'},
{"role": "function-response", "content": '{"times_list": ["6:00", "18:00"]}'}
]
inputs = generation_pipeline.tokenizer.apply_chat_template(
history_messages,
tokenize=False,
add_generation_prompt=True,
tools=[get_weather, get_sunrise_sunset_times],
)
terminator_ids = [
generation_pipeline.tokenizer.eos_token_id,
generation_pipeline.tokenizer.convert_tokens_to_ids("<end_of_turn>")
]
outputs = generation_pipeline(
inputs,
max_new_tokens=512,
eos_token_id=terminator_ids,
)
print(outputs[0]["generated_text"][len(inputs):])
Prompt структура и ожидаемый контент
Для наиболее корректной работы модели предполагается, что будет использоваться
apply_chat_template
.
Необходимо передать историю сообщений в определенном формате.
system
- это необязательная роль, ее содержимое всегда размещается в самом начале и перед перечислением функций, доступных модели (инструментов).
Вы всегда можете воспользоваться стандартным вариантом, который использовался во время обучения:
"Ты - полезный помощник, имеющий доступ к следующим функциям. Используйте их при необходимости - "
user
- запрос пользователя передается через эту роль.
function-call
- тело вызова функции передается через эту роль.
Хотя модель обучена генерировать вызов функции в виде
"Вызов функции: {...}<end_of_turn>"
, вы все равно должны передать только тело
"{...}"
в поле
"content"
, поскольку используя
apply_chat_template
, постскриптум в инструкциях добавляется автоматически.
function-response
- в этой роли мы должны передать ответ нашей функции в поле
"content"
в виде словаря
'{"name_returnable_value": value}'
.
model
- содержимое, относящееся к этой роли, считается сгенерированным текстом модели.
Структура истории чата для
Function Calling
[
{"role": "system", "content": "Ты - полезный помощник, имеющий доступ к следующим функциям. Используйте их при необходимости - "},
{"role": "user", "content": "Привет, не мог бы ты сказать мне, во сколько в Краснодаре восходит солнце?"},
{"role": "function-call", "content": '{"name": "get_sunrise_sunset_times", "arguments": {"city": "Краснодар"}}'},
{"role": "function-response", "content": '{"times_list": ["6:00", "18:00"]}'}
]
Это выглядит как:
<bos><start_of_turn>user
Ты - полезный помощник, имеющий доступ к следующим функциям. Используйте их при необходимости - {
"name": "get_weather",
"description": "Функция, которая возвращает погоду в заданном городе.",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "Город, для которого надо узнать погоду."
}
},
"required": [
"city"
]
}
},
{
"name": "get_sunrise_sunset_times",
"description": "Функция, которая возвращает время восхода и заката для заданного города для текущей даты (дата от пользователя не требуется), в формате списка: [sunrise_time, sunset_time].",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "Город, в котором можно узнать время восхода и захода солнца."
}
},
"required": [
"city"
]
}
}
Привет, не мог бы ты сказать мне, во сколько в Краснодаре восходит солнце?<end_of_turn>
<start_of_turn>model
Вызов функции: {"name": "get_sunrise_sunset_times", "arguments": {"city": "Краснодар"}}<end_of_turn>
<start_of_turn>user
Ответ от функции: {"times_list": ["6:00", "18:00"]}<end_of_turn>
Структура истории чата для обычного user-model шаблона
[
{"role": "system", "content": "Ты добрый помощник"},
{"role": "user", "content": "Расскажи мне о Москве"}
]
Это выглядит как:
<bos><start_of_turn>user
Ты добрый помощник
Расскажи мне о Москве<end_of_turn>
Оценка моделей
В процессе обучения ошибка валидации была приближена к следующим значениям:
gemma-2-9b-it-russian-function-calling-GGUF huggingface.co is an AI model on huggingface.co that provides gemma-2-9b-it-russian-function-calling-GGUF's model effect (), which can be used instantly with this DiTy gemma-2-9b-it-russian-function-calling-GGUF model. huggingface.co supports a free trial of the gemma-2-9b-it-russian-function-calling-GGUF model, and also provides paid use of the gemma-2-9b-it-russian-function-calling-GGUF. Support call gemma-2-9b-it-russian-function-calling-GGUF model through api, including Node.js, Python, http.
gemma-2-9b-it-russian-function-calling-GGUF huggingface.co is an online trial and call api platform, which integrates gemma-2-9b-it-russian-function-calling-GGUF's modeling effects, including api services, and provides a free online trial of gemma-2-9b-it-russian-function-calling-GGUF, you can try gemma-2-9b-it-russian-function-calling-GGUF online for free by clicking the link below.
DiTy gemma-2-9b-it-russian-function-calling-GGUF online free url in huggingface.co:
gemma-2-9b-it-russian-function-calling-GGUF is an open source model from GitHub that offers a free installation service, and any user can find gemma-2-9b-it-russian-function-calling-GGUF on GitHub to install. At the same time, huggingface.co provides the effect of gemma-2-9b-it-russian-function-calling-GGUF install, users can directly use gemma-2-9b-it-russian-function-calling-GGUF installed effect in huggingface.co for debugging and trial. It also supports api for free installation.
gemma-2-9b-it-russian-function-calling-GGUF install url in huggingface.co: