CoolFace
Modelpublic

atasoglu/Turkish-Llama-3-8B-function-calling

sourceHugging Faceapache-2.0updated 1y agoView on Hugging Face
4likes27downloads
Model Card

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 and Huggingface's TRL library.

<img src="https://raw.githubusercontent.com/unslothai/unsloth/main/images/unsloth%20made%20with%20love.png" width="200"/>

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"}