--- 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. [](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"} ```