|
--- |
|
base_model: ytu-ce-cosmos/Turkish-Llama-8b-DPO-v0.1 |
|
tags: |
|
- text-generation-inference |
|
- transformers |
|
- unsloth |
|
- llama |
|
- trl |
|
- sft |
|
license: apache-2.0 |
|
language: |
|
- en |
|
- tr |
|
datasets: |
|
- atasoglu/turkish-function-calling-20k |
|
pipeline_tag: text-generation |
|
--- |
|
|
|
# Uploaded model |
|
|
|
**This model was adapted from [ytu-ce-cosmos/Turkish-Llama-8b-DPO-v0.1](https://huggingface.co/ytu-ce-cosmos/Turkish-Llama-8b-DPO-v0.1) and fine-tuned on the [atasoglu/turkish-function-calling-20k](https://huggingface.co/datasets/atasoglu/turkish-function-calling-20k) dataset to perform function calling tasks in Turkish.** |
|
|
|
- **Developed by:** atasoglu |
|
- **License:** apache-2.0 |
|
- **Finetuned from model :** ytu-ce-cosmos/Turkish-Llama-8b-DPO-v0.1 |
|
|
|
This llama model was trained 2x faster with [Unsloth](https://github.com/unslothai/unsloth) and Huggingface's TRL library. |
|
|
|
[<img src="https://raw.githubusercontent.com/unslothai/unsloth/main/images/unsloth%20made%20with%20love.png" width="200"/>](https://github.com/unslothai/unsloth) |
|
|
|
# Usage |
|
|
|
First, load the model: |
|
|
|
```python |
|
import json |
|
from unsloth import FastLanguageModel |
|
|
|
# loading the model and tokenizer |
|
model, tokenizer = FastLanguageModel.from_pretrained( |
|
model_name="atasoglu/Turkish-Llama-3-8B-function-calling", |
|
load_in_4bit=True, |
|
) |
|
FastLanguageModel.for_inference(model) |
|
``` |
|
|
|
Setup the tools and messages: |
|
|
|
```python |
|
# define the prompt templates |
|
system_prompt = """Sen yardımsever, akıllı ve fonksiyon çağrısı yapabilen bir asistansın. |
|
Aşağıda JSON parçası içinde verilen fonksiyonları kullanarak kullanıcının sorusunu uygun şekilde cevaplamanı istiyorum. |
|
|
|
Fonksiyon çağrısı yaparken uyman gereken talimatlar: |
|
|
|
* Fonksiyonlar, JSON şeması olarak ifade edilmiştir. |
|
* Eğer kullanıcının sorusu, bu fonksiyonlardan en az biri kullanılarak cevaplanabiliyorsa; uygun bir fonksiyon çağrısını JSON parçası içinde oluştur. |
|
* Fonksiyonların parametreleri için asla uydurmalar yapma ve sadece kullanıcının verdiği bilgileri kullan. |
|
* Eğer kullanıcının sorusu herhangi bir fonksiyon ile cevaplanamıyorsa, sadece "Verilen fonksiyonlarla cevaplanamaz" metnini döndür ve başka bir açıklama yapma. |
|
|
|
Bu talimatlara uyarak soruları cevaplandır.""" |
|
|
|
user_prompt = """### Fonksiyonlar |
|
|
|
'''json |
|
{tools} |
|
''' |
|
|
|
### Soru |
|
|
|
{query}""" |
|
|
|
# define the tools and messages |
|
tools = [ |
|
{ |
|
"type": "function", |
|
"function": { |
|
"name": "get_weather", |
|
"description": "Get current temperature for a given location.", |
|
"parameters": { |
|
"type": "object", |
|
"properties": { |
|
"location": { |
|
"type": "string", |
|
"description": "City and country e.g. Bogotá, Colombia", |
|
} |
|
}, |
|
"required": ["location"], |
|
"additionalProperties": False, |
|
}, |
|
"strict": True, |
|
}, |
|
} |
|
] |
|
query = "Paris'te hava şu anda nasıl?" |
|
messages = [ |
|
{ |
|
"role": "system", |
|
"content": system_prompt, |
|
}, |
|
{ |
|
"role": "user", |
|
"content": user_prompt.format( |
|
tools=json.dumps(tools, ensure_ascii=False), |
|
query=query, |
|
), |
|
}, |
|
] |
|
``` |
|
|
|
**NOTE:** Change the *single quote* character to a *backtick* in the user prompt before running to specify the JSON snippet. |
|
|
|
Then, generate and evaluate the output: |
|
|
|
```python |
|
import re |
|
|
|
|
|
# define an evaluation function |
|
def eval_function_calling(text): |
|
match_ = re.search(r"```json(.*)```", text, re.DOTALL) |
|
if match_ is None: |
|
return False, text |
|
return True, json.loads(match_.group(1).strip()) |
|
|
|
|
|
# tokenize the inputs |
|
inputs = tokenizer.apply_chat_template( |
|
messages, |
|
add_generation_prompt=True, |
|
return_dict=True, |
|
return_tensors="pt", |
|
).to("cuda") |
|
|
|
# define generation arguments |
|
generation_kwargs = dict( |
|
do_sample=True, |
|
use_cache=True, |
|
max_new_tokens=500, |
|
temperature=0.3, |
|
top_p=0.9, |
|
top_k=40, |
|
) |
|
|
|
# finally, generate the output |
|
outputs = model.generate(**inputs, **generation_kwargs) |
|
output_ids = outputs[:, inputs["input_ids"].shape[1] :] |
|
generated_texts = tokenizer.batch_decode(output_ids, skip_special_tokens=True) |
|
has_function_calling, results = eval_function_calling(generated_texts[0]) |
|
|
|
# print the model response |
|
if has_function_calling: |
|
for result in results: |
|
fn = result["function"] |
|
name, args = fn["name"], fn["arguments"] |
|
print(f"Calling {name!r} function with these arguments: {args}") |
|
else: |
|
print(f"No function call: {results!r}") |
|
``` |
|
|
|
Output: |
|
|
|
```console |
|
Calling 'get_weather' function with these arguments: {"location":"Paris, France"} |
|
``` |