--- license: other library_name: transformers pipeline_tag: text-generation language: - ca - code - en - es - eu - gl - pt --- # AL40b-dev Model Card AL40b-dev is a highly multilingual aligned model with 40B parameters. > [!WARNING] > **DISCLAIMER:** This model is an **experimental version** and is provided for **research purposes only**. > Its use is subject to the terms of the **research-only license** governing the data used in its post-training, which **prohibits commercial use**. > Access is **not public** and currently restricted to select partners. ## How to use The instruction-following models use the commonly adopted ChatML template: ```jinja {%- if messages[0]['role'] == 'system' %}{%- set system_message = messages[0]['content'] %}{%- set loop_messages = messages[1:] %}{%- else %}{%- set system_message = 'SYSTEM MESSAGE' %}{%- set loop_messages = messages %}{%- endif %}{%- if not date_string is defined %}{%- set date_string = '2024-09-30' %}{%- endif %}{{ '<|im_start|>system\n' + system_message + '<|im_end|>\n' }}{% for message in loop_messages %}{%- if (message['role'] != 'user') and (message['role'] != 'assistant')%}{{ raise_exception('Only user and assitant roles are suported after the initial optional system message.') }}{% endif %}{% if (message['role'] == 'user') != (loop.index0 % 2 == 0) %}{{ raise_exception('After the optional system message, conversation roles must alternate user/assistant/user/assistant/...') }}{% endif %}{{'<|im_start|>' + message['role'] + '\n' + message['content'] + '<|im_end|>' + '\n'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant\n' }}{% endif %} ``` Where `system_message` is used to guide the model during generation and `date_string` can be set to allow the model to respond with the current date. The exact same chat template should be used for an enhanced conversational experience. The easiest way to apply it is by using the tokenizer's built-in functions, as shown in the following snippet. ```python from datetime import datetime from transformers import AutoTokenizer, AutoModelForCausalLM import transformers import torch model_id = "BSC-LT/AL40b-dev" text = "At what temperature does water boil?" tokenizer = AutoTokenizer.from_pretrained(model_id) model = AutoModelForCausalLM.from_pretrained( model_id, device_map="auto", torch_dtype=torch.bfloat16 ) message = [ { "role": "user", "content": text } ] date_string = datetime.today().strftime('%Y-%m-%d') prompt = tokenizer.apply_chat_template( message, tokenize=False, add_generation_prompt=True, date_string=date_string ) inputs = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt") outputs = model.generate(input_ids=inputs.to(model.device), max_new_tokens=200) print(tokenizer.decode(outputs[0], skip_special_tokens=True)) ``` Using this template, each turn is preceded by a `<|im_start|>` delimiter and the role of the entity (either `user`, for content supplied by the user, or `assistant` for LLM responses), and finished with the `<|im_end|>` token. ### License [RESEARCH-ONLY RAIL-AMS](https://huggingface.co/BSC-LT/AL40b-dev/blob/main/LICENSE)