|
--- |
|
library_name: transformers |
|
datasets: |
|
- jeromecondere/bank-chat |
|
--- |
|
|
|
# Model Card for Meta-Llama-3-8B-for-bank (Adapter) |
|
|
|
This model, **Meta-Llama-3-8B-for-bank**, is a fine-tuned version of the `meta-llama/Meta-Llama-3-8B-Instruct` model (just the **adapter** from lora). |
|
This is a **naive version**. |
|
## Model Details |
|
|
|
### Model Description |
|
|
|
- **Model Name**: Meta-Llama-3-8B-for-bank |
|
- **Base Model**: `meta-llama/Meta-Llama-3-8B-Instruct` |
|
- **Fine-tuning Dataset used**: jeromecondere/bank-chat |
|
- **Fine-tuning Data**: Custom bank chat examples |
|
- **License**: Free |
|
|
|
### Model Type |
|
|
|
- **Architecture**: LLaMA-3 |
|
- **Type**: Instruction-based language model |
|
|
|
### Model Usage |
|
|
|
This model is designed for conversational interaction between an assistant and the user: |
|
|
|
- **Balance Inquiry**: |
|
- *Example*: "Can you provide the current balance for my account?" |
|
- **Stock List Retrieval**: |
|
- *Example*: "Can you provide me with a list of my stocks?" |
|
- **Stock Purchase**: |
|
- *Example*: "I'd like to buy stocks worth 1,000.00 in Tesla." |
|
- **Deposit Transactions**: |
|
- *Example*: "I'd like to deposit 500.00 into my account." |
|
- **Withdrawal Transactions**: |
|
- *Example*: "I'd like to withdraw 200.00 from my account." |
|
- **Transaction History**: |
|
- *Example*: "I would like to view my transactions. Can you provide it?" |
|
|
|
### Inputs and Outputs |
|
|
|
- **Inputs**: Natural language queries related to financial services. |
|
- **Outputs**: Textual responses or actions based on the input query. |
|
|
|
### Fine-tuning |
|
|
|
This model has been fine-tuned with a dataset specifically created to implement a bank chatbot. |
|
|
|
|
|
## Limitations |
|
|
|
- **Misinterpretation Risks**: Right now this is the first version, so when the query is too complex, inconsistent results will be returned. |
|
|
|
|
|
|
|
## How to Use |
|
|
|
```python |
|
from transformers import AutoModelForCausalLM, AutoTokenizer |
|
|
|
base_model = 'meta-llama/Meta-Llama-3-8B-Instruct' |
|
adapter_model = "jeromecondere/Meta-Llama-3-8B-for-bank" |
|
|
|
|
|
tokenizer = AutoTokenizer.from_pretrained(base_model, use_fast=True, use_auth_token=token) |
|
tokenizer.pad_token = tokenizer.eos_token |
|
|
|
bnb_config = BitsAndBytesConfig( |
|
load_in_4bit=True, |
|
bnb_4bit_quant_type="nf4", #normalized floating 4 quantization |
|
bnb_4bit_compute_dtype=torch.float16, |
|
bnb_4bit_use_double_quant=True |
|
) |
|
|
|
#loading base model |
|
model = AutoModelForCausalLM.from_pretrained( |
|
base_model, |
|
load_in_8bit=True, |
|
torch_dtype=torch.bfloat16, |
|
device_map= "cuda" |
|
) |
|
# merge model with adaptaters |
|
model = PeftModel.from_pretrained(model= model, model_id = adapter_model, quantization_config=bnb_config) |
|
model = model.merge_and_unload() |
|
|
|
|
|
|
|
name = 'Izimir Sensei' |
|
company = 'Amazon Inc.' |
|
stock_value = 42.24 |
|
messages = [ |
|
{'role': 'system', 'content': f'Hi {name}, I\'m your assistant how can I help you\n'}, |
|
{"role": "user", "content": f"I'd like to buy stocks worth {stock_value:.2f} in {company}.\n"}, |
|
{"role": "system", "content": f"Sure, we have purchased stocks worth ###StockValue({stock_value:.2f}) in ###Company({company}) for you.\n"}, |
|
{"role": "user", "content": f"Now I want to see my balance, hurry up!\n"}, |
|
{"role": "system", "content": f"Sure, here's your balance ###Balance\n"}, |
|
{"role": "user", "content": f"Again, my balance?\n"}, |
|
{"role": "system", "content": f"We have your account details. Your balance is: ###Balance"}, |
|
{"role": "user", "content": f"Okay now my list of stocks"}, |
|
{"role": "system", "content": f"Here is the list of your stocks: ###ListStocks"}, |
|
] |
|
|
|
# prepare the messages for the model |
|
input_ids = tokenizer.apply_chat_template(messages, truncation=True, add_generation_prompt=True, return_tensors="pt").to("cuda") |
|
|
|
# inference |
|
outputs = model.generate( |
|
input_ids=input_ids, |
|
max_new_tokens=120, |
|
#do_sample=True, |
|
temperature=0.1, |
|
top_k=50, |
|
top_p=0.95 |
|
) |
|
print(tokenizer.batch_decode(outputs)[0]) |