├── honeypot-server
├── logs
│ ├── auth.log
│ └── log_2024-05-31_15-09-54.txt
├── README.md
├── main.py
├── server.key.pub
├── llm.py
├── server.key
└── ssh_server.py
├── .DS_Store
├── supervised-finetuning
├── model_inference.yaml
├── multi_gpu_sft_script.sh
├── merge_lora_sft.yaml
├── multi_gpu_phi3.yaml
├── multi_gpu_llama3.yaml
├── multi_gpu_codellama.yaml
└── README.md
├── notebooks
├── ssh_server.png
├── training_loss.png
├── similarity_score_distribution_140samples.png
├── preprocess.ipynb
└── postprocess.ipynb
└── README.md
/honeypot-server/logs/auth.log:
--------------------------------------------------------------------------------
1 | root:dagshj
2 |
--------------------------------------------------------------------------------
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AI-in-Complex-Systems-Lab/LLM-Honeypot/HEAD/.DS_Store
--------------------------------------------------------------------------------
/supervised-finetuning/model_inference.yaml:
--------------------------------------------------------------------------------
1 | model_name_or_path: models/honeypot-llama3-8B
2 | template: llama3
3 |
--------------------------------------------------------------------------------
/notebooks/ssh_server.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AI-in-Complex-Systems-Lab/LLM-Honeypot/HEAD/notebooks/ssh_server.png
--------------------------------------------------------------------------------
/honeypot-server/README.md:
--------------------------------------------------------------------------------
1 | ## Start server
2 | > python main.py
3 |
4 | ## Connect with SSH
5 | > ssh -T -p 2222 "root@localhost"
--------------------------------------------------------------------------------
/notebooks/training_loss.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AI-in-Complex-Systems-Lab/LLM-Honeypot/HEAD/notebooks/training_loss.png
--------------------------------------------------------------------------------
/notebooks/similarity_score_distribution_140samples.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AI-in-Complex-Systems-Lab/LLM-Honeypot/HEAD/notebooks/similarity_score_distribution_140samples.png
--------------------------------------------------------------------------------
/honeypot-server/logs/log_2024-05-31_15-09-54.txt:
--------------------------------------------------------------------------------
1 | @CMD: ls
2 | @RESP: ```
3 | bin desktop documents downloads music pictures public videos
4 | ```
5 |
6 | @CMD:
7 | @RESP: ```
8 | bash: command not found
9 | ```
10 |
11 |
--------------------------------------------------------------------------------
/honeypot-server/main.py:
--------------------------------------------------------------------------------
1 | from ssh_server import start_ssh_server
2 | from llm import LLM
3 |
4 | MODEL_NAME = "../models/honeypot-llama3-8B"
5 | llama = LLM(MODEL_NAME)
6 | print(llama.answer('ls -al', ['mkdir test_directory; touch test.txt','\n']))
7 |
8 | start_ssh_server(llama)
--------------------------------------------------------------------------------
/supervised-finetuning/multi_gpu_sft_script.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | CUDA_VISIBLE_DEVICES=0,1 accelerate launch src/train.py multi_gpu_phi3.yaml
4 |
5 | CUDA_VISIBLE_DEVICES=0,1 accelerate launch src/train.py multi_gpu_llama3.yaml
6 |
7 | CUDA_VISIBLE_DEVICES=0,1 accelerate launch src/train.py multi_gpu_codellama.yaml
--------------------------------------------------------------------------------
/supervised-finetuning/merge_lora_sft.yaml:
--------------------------------------------------------------------------------
1 | # Note: DO NOT use quantized model or quantization_bit when merging lora adapters
2 |
3 | # model
4 | model_name_or_path: NousResearch/Meta-Llama-3-8B-Instruct
5 | adapter_name_or_path: saves/Custom/lora/honeypot_llama3_v3
6 | template: llama3
7 | finetuning_type: lora
8 |
9 | # export
10 | export_dir: models/honeypot-llama3-8B
11 | export_size: 1
12 | export_device: cuda
13 | export_legacy_format: false
14 |
--------------------------------------------------------------------------------
/honeypot-server/server.key.pub:
--------------------------------------------------------------------------------
1 | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDsqkBcRScrwI5rbuAbaiEUurBruU6R3s4BW8iDSXCtVlA7/SK9zBNnswjUdJDIzhA4Q/gb1n3q+jp8Ivmn8fQhuqOzfeQY/m5iAxA547/lkYrppwpRuKCUn5uBfwLI2G94BdGUQI2XBYW/foDkSr+j1sYQm3XZJnjkkljQ7F0lWA7bQx5RdcRASn0/LMa+eFqlkFmKqG7AsPHApFXsHs8E+4QGhvdDUifB/99aDCthDA0Jn5OpOXqnZ2mImQcSDwcoHOvTG9CvRY0fBfRBXTOt4Pw+RU3qFzJJHx/8wsoR5yBFJDoTRYt3KpaWyd0zdkhxRVPYN6ePhofCMmCG8CJuJNtBYYuc1pvWMGgNescNMX3qeQc2fT8B3PetMkU1yYAFx3Wquf4mIdbSWr2A+8DYt3lPvKCHEheY8z5+bLQ5aICj89hQoeB8h4DFoapMA0gCDSPm+Oa/p/32f7zUB2f68V76UHA42EKzQXy0XN2B20LqIn7lz5QYuk0QC8khriU= hotal@dyn-169-226-53-44.etec.albany.edu
2 |
--------------------------------------------------------------------------------
/supervised-finetuning/multi_gpu_phi3.yaml:
--------------------------------------------------------------------------------
1 | bf16: true
2 | cutoff_len: 1024
3 | dataset: honeypot_logs
4 | dataset_dir: data
5 | do_train: true
6 | finetuning_type: lora
7 | flash_attn: fa2
8 | gradient_accumulation_steps: 8
9 | learning_rate: 5.0e-05
10 | logging_steps: 1
11 | lora_alpha: 16
12 | lora_dropout: 0
13 | lora_rank: 8
14 | lora_target: qkv_proj
15 | lr_scheduler_type: cosine
16 | max_grad_norm: 1.0
17 | max_samples: 100000
18 | model_name_or_path: microsoft/Phi-3-mini-4k-instruct
19 | num_train_epochs: 2.0
20 | optim: adamw_torch
21 | output_dir: saves/Custom/lora/honeypot_phi3
22 | packing: false
23 | per_device_train_batch_size: 16
24 | quantization_bit: 8
25 | report_to: none
26 | save_steps: 100
27 | stage: sft
28 | template: phi
29 | warmup_steps: 0
30 |
--------------------------------------------------------------------------------
/supervised-finetuning/multi_gpu_llama3.yaml:
--------------------------------------------------------------------------------
1 | bf16: true
2 | cutoff_len: 2048
3 | dataset: honeypot_logs
4 | dataset_dir: data
5 | do_train: true
6 | finetuning_type: lora
7 | flash_attn: fa2
8 | gradient_accumulation_steps: 8
9 | learning_rate: 1.0e-04
10 | logging_steps: 1
11 | lora_alpha: 16
12 | lora_dropout: 0
13 | lora_rank: 8
14 | lora_target: q_proj,v_proj
15 | lr_scheduler_type: cosine
16 | max_grad_norm: 1.0
17 | max_samples: 100000
18 | model_name_or_path: NousResearch/Meta-Llama-3-8B-Instruct
19 | num_train_epochs: 3.0
20 | optim: adamw_torch
21 | output_dir: saves/Custom/lora/honeypot_llama3_v3
22 | packing: false
23 | per_device_train_batch_size: 8
24 | quantization_bit: 8
25 | report_to: none
26 | save_steps: 100
27 | stage: sft
28 | template: llama3
29 | warmup_steps: 0
30 |
--------------------------------------------------------------------------------
/supervised-finetuning/multi_gpu_codellama.yaml:
--------------------------------------------------------------------------------
1 | bf16: true
2 | cutoff_len: 1024
3 | dataset: honeypot_logs
4 | dataset_dir: data
5 | do_train: true
6 | finetuning_type: lora
7 | flash_attn: fa2
8 | gradient_accumulation_steps: 8
9 | learning_rate: 5.0e-05
10 | logging_steps: 1
11 | lora_alpha: 16
12 | lora_dropout: 0
13 | lora_rank: 8
14 | lora_target: q_proj,v_proj
15 | lr_scheduler_type: cosine
16 | max_grad_norm: 1.0
17 | max_samples: 100000
18 | model_name_or_path: codellama/CodeLlama-7b-Instruct-hf
19 | num_train_epochs: 2.0
20 | optim: adamw_torch
21 | output_dir: saves/Custom/lora/honeypot_codellama
22 | packing: false
23 | per_device_train_batch_size: 16
24 | quantization_bit: 8
25 | report_to: none
26 | save_steps: 100
27 | stage: sft
28 | template: llama2
29 | warmup_steps: 0
30 |
--------------------------------------------------------------------------------
/supervised-finetuning/README.md:
--------------------------------------------------------------------------------
1 | > conda activate python3-11
2 |
3 | ### Single-GPU:
4 |
5 | > CUDA_VISIBLE_DEVICES=0 GRADIO_SHARE=0 llamafactory-cli webui
6 |
7 | - Update data/dataset_info.json
8 |
9 |
10 | ### Multi-GPU:
11 |
12 | > sh multi_gpu_sft_script.sh
13 |
14 | > CUDA_VISIBLE_DEVICES=0,1 accelerate launch src/train.py multi_gpu_llama3.yaml
15 |
16 |
17 | ### Merge:
18 |
19 | > CUDA_VISIBLE_DEVICES=0 llamafactory-cli export merge_lora_sft.yaml
20 |
21 |
22 |
23 | #### Prompt:
24 |
25 | You are mimicking a linux server. Respond with what the terminal would respond when a code given. I want you to only reply with the terminal outputs inside one unique code block and nothing else. Do not write any explanations. Do not type any commands unless I instruct you to do so.
--------------------------------------------------------------------------------
/honeypot-server/llm.py:
--------------------------------------------------------------------------------
1 | import torch
2 | import gc
3 | import re
4 | from transformers import (
5 | AutoModelForCausalLM,
6 | AutoTokenizer,
7 | BitsAndBytesConfig,
8 | pipeline
9 | )
10 |
11 | class LLM:
12 | def __init__(self, model_name="NousResearch/Meta-Llama-3-8B-Instruct"):
13 | gc.collect()
14 | torch.cuda.empty_cache()
15 | print("Cleared GPU...")
16 |
17 | self.DEVICE = "cuda:0" if torch.cuda.is_available() else "cpu"
18 | self.BASE_MODEL_NAME = model_name
19 | self.SYSTEM_PROMPT = "You are mimicking a linux server. Respond with what the terminal would respond when a code given. I want you to only reply with the terminal outputs inside one unique code block and nothing else. Do not write any explanations. Do not type any commands unless I instruct you to do so."
20 |
21 | # Model configuration
22 | self.pipeline = pipeline(
23 | "text-generation",
24 | model=self.BASE_MODEL_NAME,
25 | tokenizer=self.BASE_MODEL_NAME,
26 | model_kwargs={"torch_dtype": torch.bfloat16},
27 | device=self.DEVICE,
28 | )
29 |
30 | print("Loaded Model: ", self.BASE_MODEL_NAME)
31 |
32 | def answer(self, query, log_history=[], max_tokens=4096, temperature=0.01, top_p=0.8):
33 |
34 | message_history = [{"role": "system", "content": self.SYSTEM_PROMPT}]
35 | if len(log_history) > 0:
36 | for i, item in enumerate(log_history):
37 | if i % 2 == 0:
38 | message_history.append({"role": "user", "content": item})
39 | else:
40 | message_history.append({"role": "assistant", "content": item})
41 |
42 | user_prompt = message_history + [{"role": "user", "content": query}]
43 | prompt = self.pipeline.tokenizer.apply_chat_template(
44 | user_prompt, tokenize=False, add_generation_prompt=True
45 | )
46 | outputs = self.pipeline(
47 | prompt,
48 | max_new_tokens=max_tokens,
49 | eos_token_id=self.pipeline.tokenizer.eos_token_id,
50 | do_sample=True,
51 | temperature=temperature,
52 | top_p=top_p,
53 | )
54 | response = outputs[0]["generated_text"][len(prompt):]
55 |
56 | # remove unnecessary quotes
57 | if response.startswith("```") and response.endswith("```"):
58 | response = response[3:-3]
59 | elif response.startswith("`") and response.endswith("`"):
60 | response = response[1:-1]
61 |
62 | return response
63 |
--------------------------------------------------------------------------------
/honeypot-server/server.key:
--------------------------------------------------------------------------------
1 | -----BEGIN OPENSSH PRIVATE KEY-----
2 | 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
38 | dQECAw==
39 | -----END OPENSSH PRIVATE KEY-----
40 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # LLM Honeypot: Leveraging Large Language Models as Advanced Interactive Honeypot Systems
2 |
3 | Code for our paper "LLM Honeypot: Leveraging Large Language Models as Advanced Interactive Honeypot Systems" published in 2024 IEEE Conference on Communications and Network Security (CNS).
4 |
5 | You can download the paper via: [[IEEE]](https://ieeexplore.ieee.org/iel8/10735442/10735467/10735607.pdf) - [[DOI]](https://doi.org/10.1109/CNS62487.2024.10735607)
6 |
7 | [Dataset](https://huggingface.co/datasets/hotal/honeypot_logs)
8 |
9 | [Finetuned Model](https://huggingface.co/hotal/honeypot-llama3-8B)
10 |
11 | ## Training
12 |
13 | The training and fine-tuning process for the model presented in the paper utilized the [Llama-Factory](https://github.com/hiyouga/LLaMA-Factory) tool. Consequently, specific training scripts are not included in this repository.
14 |
15 | Please be aware that the Llama-Factory repository is actively maintained and frequently updated. The methods or scripts used during our research might require adjustments to remain compatible with the latest versions of Llama-Factory.
16 |
17 | To replicate the model training:
18 | 1. Use our custom dataset available on Hugging Face: [hotal/honeypot_logs](https://huggingface.co/datasets/hotal/honeypot_logs).
19 | 2. Follow the Llama-Factory documentation on using custom datasets, which can be found here: [Llama-Factory Custom Data Documentation](https://github.com/hiyouga/LLaMA-Factory/tree/main/data).
20 |
21 | Combining our dataset with the instructions provided by Llama-Factory should offer the most direct path to reproduce the training process.
22 |
23 | ## Running the Model
24 |
25 | The code relevant for running the honeypot server with the trained model can be found within the `/honeypot-server` directory of this repository.
26 |
27 | You can use the pre-trained model available on Hugging Face: [hotal/honeypot-llama3-8B](https://huggingface.co/hotal/honeypot-llama3-8B).
28 |
29 | **Note:** Similar to the training dependencies, the code in `/honeypot-server` may require updates to ensure compatibility with the current versions of dependent libraries (e.g., huggingface, transformers, etc.). Please check library compatibility if you encounter issues.
30 |
31 | ## Abstract
32 |
33 | The rapid evolution of cyber threats necessitates innovative solutions for detecting and analyzing malicious activity. Honeypots, which are decoy systems designed to lure and interact with attackers, have emerged as a critical component in cybersecurity. In this paper, we present a novel approach to creating realistic and interactive honeypot systems using Large Language Models (LLMs). By fine-tuning a pre-trained open-source language model on a diverse dataset of attacker-generated commands and responses, we developed a honeypot capable of sophisticated engagement with attackers. Our methodology involved several key steps: data collection and processing, prompt engineering, model selection, and supervised fine-tuning to optimize the model’s performance. Evaluation through similarity metrics and live deployment demonstrated that our approach effectively generates accurate and informative responses. The results highlight the potential of LLMs to revolutionize honeypot technology, providing cybersecurity professionals with a powerful tool to detect and analyze malicious activity, thereby enhancing overall security infrastructure.
34 |
35 | ## Citation
36 |
37 | If this work is helpful, please cite as:
38 |
39 | ```bibtex
40 | @INPROCEEDINGS{
41 | 10735607,
42 | author={Otal, Hakan T. and Canbaz, M. Abdullah},
43 | booktitle={2024 IEEE Conference on Communications and Network Security (CNS)},
44 | title={LLM Honeypot: Leveraging Large Language Models as Advanced Interactive Honeypot Systems},
45 | year={2024},
46 | pages={1-6},
47 | doi={10.1109/CNS62487.2024.10735607}
48 | }
49 | ```
50 |
51 | ## Contact
52 |
53 | hotal [AT] albany [DOT] edu
54 |
--------------------------------------------------------------------------------
/honeypot-server/ssh_server.py:
--------------------------------------------------------------------------------
1 | import socket, sys, threading
2 | import paramiko
3 | from datetime import datetime
4 |
5 | # Generate keys with 'ssh-keygen -t rsa -f server.key'
6 | HOST_KEY = paramiko.RSAKey(filename='server.key')
7 | SSH_PORT = 2222
8 |
9 | # Log the user:password combinations to files
10 | LOGFILE = 'logs/auth.log'
11 | LOGFILE_LOCK = threading.Lock()
12 |
13 | class SSHServerHandler(paramiko.ServerInterface):
14 | def __init__(self, llm_model):
15 | self.event = threading.Event()
16 | self.llm_model = llm_model
17 | self.log_history = []
18 |
19 | def check_channel_request(self, kind, channelID):
20 | return paramiko.OPEN_SUCCEEDED
21 |
22 | def check_channel_shell_request(self, channel):
23 | print("Channel", channel)
24 | self.channel = channel
25 | return True
26 |
27 | def check_channel_pty_request(self, c, t, w, h, p, ph, m):
28 | return True
29 |
30 | def get_allowed_auths(self, username):
31 | return 'password'
32 |
33 | def check_auth_password(self, username, password):
34 | self.username = username
35 |
36 | # save login info to a file
37 | LOGFILE_LOCK.acquire()
38 | try:
39 | logfile_handle = open(LOGFILE,"a")
40 | print("New login: " + username + ":" + password)
41 | logfile_handle.write(username + ":" + password + "\n")
42 | logfile_handle.close()
43 | finally:
44 | LOGFILE_LOCK.release()
45 |
46 | return paramiko.AUTH_SUCCESSFUL
47 |
48 | def handle_shell(self):
49 | log_filename = f"logs/log_{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.txt"
50 |
51 | while not self.channel.exit_status_ready():
52 | try:
53 | # Receive user input
54 | self.channel.sendall(f'{self.username}@localhost:~/ $')
55 | command = self.channel.recv(1024).decode("utf-8").strip()
56 | print("CMD:", command)
57 |
58 | # Produce output with LLM
59 | response = self.llm_model.answer(command, self.log_history)
60 |
61 | # Save the logs
62 | self.log_history.append(command)
63 | self.log_history.append(response)
64 | log_file = open(log_filename, "a")
65 | log_file.write(f"@CMD: {command}\n@RESP: {response}\n\n")
66 | log_file.close()
67 |
68 | # Send response
69 | self.channel.sendall(f'{response}\n')
70 |
71 | except Exception as e:
72 | print("Channel closed:", e)
73 | self.channel.close()
74 | self.event.set()
75 | return
76 |
77 | self.channel.close()
78 | self.event.set()
79 |
80 |
81 | def handleConnection(client, llm_model):
82 | transport = paramiko.Transport(client)
83 | transport.add_server_key(HOST_KEY)
84 |
85 | server_handler = SSHServerHandler(llm_model)
86 | transport.start_server(server=server_handler)
87 |
88 | channel = transport.accept()
89 |
90 | if channel is None:
91 | transport.close()
92 | return
93 |
94 | server_handler.channel = channel
95 | server_handler.handle_shell()
96 |
97 | def start_ssh_server(llm_model):
98 | try:
99 | server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
100 | server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
101 | server_socket.bind(('', SSH_PORT))
102 | server_socket.listen(100)
103 | print('Server started...')
104 |
105 | while(True):
106 | try:
107 | client_socket, client_addr = server_socket.accept()
108 | print(f'New Connection: {client_addr}')
109 | threading.Thread(target=handleConnection, args=(client_socket,llm_model,)).start()
110 | except Exception as e:
111 | print("ERROR: Client handling")
112 | print(e)
113 |
114 | except Exception as e:
115 | print("ERROR: Failed to create socket")
116 | print(e)
117 | sys.exit(1)
118 |
--------------------------------------------------------------------------------
/notebooks/preprocess.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 10,
6 | "metadata": {},
7 | "outputs": [],
8 | "source": [
9 | "from datetime import datetime\n",
10 | "import pandas as pd\n",
11 | "import json\n",
12 | "from datasets import load_dataset, Dataset, DatasetDict"
13 | ]
14 | },
15 | {
16 | "cell_type": "code",
17 | "execution_count": 11,
18 | "metadata": {},
19 | "outputs": [
20 | {
21 | "name": "stderr",
22 | "output_type": "stream",
23 | "text": [
24 | "Downloading readme: 100%|██████████| 405/405 [00:00<00:00, 3.61MB/s]\n",
25 | "Downloading data: 100%|██████████| 116k/116k [00:10<00:00, 10.9kB/s]\n",
26 | "Generating train split: 100%|██████████| 481/481 [00:00<00:00, 108763.83 examples/s]\n"
27 | ]
28 | },
29 | {
30 | "data": {
31 | "text/plain": [
32 | "DatasetDict({\n",
33 | " train: Dataset({\n",
34 | " features: ['system', 'command', 'response', '__index_level_0__'],\n",
35 | " num_rows: 481\n",
36 | " })\n",
37 | "})"
38 | ]
39 | },
40 | "execution_count": 11,
41 | "metadata": {},
42 | "output_type": "execute_result"
43 | }
44 | ],
45 | "source": [
46 | "dataset = load_dataset(\"hotal/linux_commands\")\n",
47 | "dataset"
48 | ]
49 | },
50 | {
51 | "cell_type": "code",
52 | "execution_count": 12,
53 | "metadata": {},
54 | "outputs": [
55 | {
56 | "data": {
57 | "text/html": [
58 | "
\n",
59 | "\n",
72 | "
\n",
73 | " \n",
74 | " \n",
75 | " \n",
76 | " system \n",
77 | " command \n",
78 | " response \n",
79 | " __index_level_0__ \n",
80 | " \n",
81 | " \n",
82 | " \n",
83 | " \n",
84 | " 0 \n",
85 | " I want you to understand what every Linux term... \n",
86 | " chgrp \n",
87 | " # chgrp\\n> Change group ownership of files and... \n",
88 | " 0 \n",
89 | " \n",
90 | " \n",
91 | " 1 \n",
92 | " I want you to understand what every Linux term... \n",
93 | " more \n",
94 | " # more\\n> Open a file for interactive reading,... \n",
95 | " 1 \n",
96 | " \n",
97 | " \n",
98 | " 2 \n",
99 | " I want you to understand what every Linux term... \n",
100 | " git-hash-object \n",
101 | " # git hash-object\\n> Computes the unique hash ... \n",
102 | " 2 \n",
103 | " \n",
104 | " \n",
105 | " 3 \n",
106 | " I want you to understand what every Linux term... \n",
107 | " id \n",
108 | " # id\\n> Display current user and group identit... \n",
109 | " 3 \n",
110 | " \n",
111 | " \n",
112 | " 4 \n",
113 | " I want you to understand what every Linux term... \n",
114 | " nl \n",
115 | " # nl\\n> A utility for numbering lines, either ... \n",
116 | " 4 \n",
117 | " \n",
118 | " \n",
119 | " ... \n",
120 | " ... \n",
121 | " ... \n",
122 | " ... \n",
123 | " ... \n",
124 | " \n",
125 | " \n",
126 | " 476 \n",
127 | " I want you to understand what every Linux term... \n",
128 | " sleep \n",
129 | " # sleep\\n> Delay for a specified amount of tim... \n",
130 | " 476 \n",
131 | " \n",
132 | " \n",
133 | " 477 \n",
134 | " I want you to understand what every Linux term... \n",
135 | " manpath \n",
136 | " # manpath\\n> Determine the search path for man... \n",
137 | " 477 \n",
138 | " \n",
139 | " \n",
140 | " 478 \n",
141 | " I want you to understand what every Linux term... \n",
142 | " mv \n",
143 | " # mv\\n> Move or rename files and directories. ... \n",
144 | " 478 \n",
145 | " \n",
146 | " \n",
147 | " 479 \n",
148 | " I want you to understand what every Linux term... \n",
149 | " whereis \n",
150 | " # whereis\\n> Locate the binary, source, and ma... \n",
151 | " 479 \n",
152 | " \n",
153 | " \n",
154 | " 480 \n",
155 | " I want you to understand what every Linux term... \n",
156 | " git-daemon \n",
157 | " # git daemon\\n> A really simple server for Git... \n",
158 | " 480 \n",
159 | " \n",
160 | " \n",
161 | "
\n",
162 | "
481 rows × 4 columns
\n",
163 | "
"
164 | ],
165 | "text/plain": [
166 | " system command \\\n",
167 | "0 I want you to understand what every Linux term... chgrp \n",
168 | "1 I want you to understand what every Linux term... more \n",
169 | "2 I want you to understand what every Linux term... git-hash-object \n",
170 | "3 I want you to understand what every Linux term... id \n",
171 | "4 I want you to understand what every Linux term... nl \n",
172 | ".. ... ... \n",
173 | "476 I want you to understand what every Linux term... sleep \n",
174 | "477 I want you to understand what every Linux term... manpath \n",
175 | "478 I want you to understand what every Linux term... mv \n",
176 | "479 I want you to understand what every Linux term... whereis \n",
177 | "480 I want you to understand what every Linux term... git-daemon \n",
178 | "\n",
179 | " response __index_level_0__ \n",
180 | "0 # chgrp\\n> Change group ownership of files and... 0 \n",
181 | "1 # more\\n> Open a file for interactive reading,... 1 \n",
182 | "2 # git hash-object\\n> Computes the unique hash ... 2 \n",
183 | "3 # id\\n> Display current user and group identit... 3 \n",
184 | "4 # nl\\n> A utility for numbering lines, either ... 4 \n",
185 | ".. ... ... \n",
186 | "476 # sleep\\n> Delay for a specified amount of tim... 476 \n",
187 | "477 # manpath\\n> Determine the search path for man... 477 \n",
188 | "478 # mv\\n> Move or rename files and directories. ... 478 \n",
189 | "479 # whereis\\n> Locate the binary, source, and ma... 479 \n",
190 | "480 # git daemon\\n> A really simple server for Git... 480 \n",
191 | "\n",
192 | "[481 rows x 4 columns]"
193 | ]
194 | },
195 | "execution_count": 12,
196 | "metadata": {},
197 | "output_type": "execute_result"
198 | }
199 | ],
200 | "source": [
201 | "df = pd.DataFrame(dataset['train'])\n",
202 | "df"
203 | ]
204 | },
205 | {
206 | "cell_type": "code",
207 | "execution_count": 17,
208 | "metadata": {},
209 | "outputs": [
210 | {
211 | "data": {
212 | "text/html": [
213 | "\n",
214 | "\n",
227 | "
\n",
228 | " \n",
229 | " \n",
230 | " \n",
231 | " system \n",
232 | " command \n",
233 | " response \n",
234 | " \n",
235 | " \n",
236 | " \n",
237 | " \n",
238 | " 0 \n",
239 | " You are a linux expert. You understand what ev... \n",
240 | " chgrp \n",
241 | " # chgrp\\n> Change group ownership of files and... \n",
242 | " \n",
243 | " \n",
244 | " 1 \n",
245 | " You are a linux expert. You understand what ev... \n",
246 | " more \n",
247 | " # more\\n> Open a file for interactive reading,... \n",
248 | " \n",
249 | " \n",
250 | " 2 \n",
251 | " You are a linux expert. You understand what ev... \n",
252 | " git-hash-object \n",
253 | " # git hash-object\\n> Computes the unique hash ... \n",
254 | " \n",
255 | " \n",
256 | " 3 \n",
257 | " You are a linux expert. You understand what ev... \n",
258 | " id \n",
259 | " # id\\n> Display current user and group identit... \n",
260 | " \n",
261 | " \n",
262 | " 4 \n",
263 | " You are a linux expert. You understand what ev... \n",
264 | " nl \n",
265 | " # nl\\n> A utility for numbering lines, either ... \n",
266 | " \n",
267 | " \n",
268 | " ... \n",
269 | " ... \n",
270 | " ... \n",
271 | " ... \n",
272 | " \n",
273 | " \n",
274 | " 476 \n",
275 | " You are a linux expert. You understand what ev... \n",
276 | " sleep \n",
277 | " # sleep\\n> Delay for a specified amount of tim... \n",
278 | " \n",
279 | " \n",
280 | " 477 \n",
281 | " You are a linux expert. You understand what ev... \n",
282 | " manpath \n",
283 | " # manpath\\n> Determine the search path for man... \n",
284 | " \n",
285 | " \n",
286 | " 478 \n",
287 | " You are a linux expert. You understand what ev... \n",
288 | " mv \n",
289 | " # mv\\n> Move or rename files and directories. ... \n",
290 | " \n",
291 | " \n",
292 | " 479 \n",
293 | " You are a linux expert. You understand what ev... \n",
294 | " whereis \n",
295 | " # whereis\\n> Locate the binary, source, and ma... \n",
296 | " \n",
297 | " \n",
298 | " 480 \n",
299 | " You are a linux expert. You understand what ev... \n",
300 | " git-daemon \n",
301 | " # git daemon\\n> A really simple server for Git... \n",
302 | " \n",
303 | " \n",
304 | "
\n",
305 | "
481 rows × 3 columns
\n",
306 | "
"
307 | ],
308 | "text/plain": [
309 | " system command \\\n",
310 | "0 You are a linux expert. You understand what ev... chgrp \n",
311 | "1 You are a linux expert. You understand what ev... more \n",
312 | "2 You are a linux expert. You understand what ev... git-hash-object \n",
313 | "3 You are a linux expert. You understand what ev... id \n",
314 | "4 You are a linux expert. You understand what ev... nl \n",
315 | ".. ... ... \n",
316 | "476 You are a linux expert. You understand what ev... sleep \n",
317 | "477 You are a linux expert. You understand what ev... manpath \n",
318 | "478 You are a linux expert. You understand what ev... mv \n",
319 | "479 You are a linux expert. You understand what ev... whereis \n",
320 | "480 You are a linux expert. You understand what ev... git-daemon \n",
321 | "\n",
322 | " response \n",
323 | "0 # chgrp\\n> Change group ownership of files and... \n",
324 | "1 # more\\n> Open a file for interactive reading,... \n",
325 | "2 # git hash-object\\n> Computes the unique hash ... \n",
326 | "3 # id\\n> Display current user and group identit... \n",
327 | "4 # nl\\n> A utility for numbering lines, either ... \n",
328 | ".. ... \n",
329 | "476 # sleep\\n> Delay for a specified amount of tim... \n",
330 | "477 # manpath\\n> Determine the search path for man... \n",
331 | "478 # mv\\n> Move or rename files and directories. ... \n",
332 | "479 # whereis\\n> Locate the binary, source, and ma... \n",
333 | "480 # git daemon\\n> A really simple server for Git... \n",
334 | "\n",
335 | "[481 rows x 3 columns]"
336 | ]
337 | },
338 | "execution_count": 17,
339 | "metadata": {},
340 | "output_type": "execute_result"
341 | }
342 | ],
343 | "source": [
344 | "for i, data in df.iterrows():\n",
345 | " df.loc[i, 'system'] = \"You are a linux expert. You understand what every Linux terminal command does and you reply with the explanation when asked.\"\n",
346 | "\n",
347 | "df = df.drop('__index_level_0__', axis=1)\n",
348 | "df"
349 | ]
350 | },
351 | {
352 | "cell_type": "code",
353 | "execution_count": 19,
354 | "metadata": {},
355 | "outputs": [
356 | {
357 | "data": {
358 | "text/html": [
359 | "\n",
360 | "\n",
373 | "
\n",
374 | " \n",
375 | " \n",
376 | " \n",
377 | " system \n",
378 | " command \n",
379 | " response \n",
380 | " \n",
381 | " \n",
382 | " \n",
383 | " \n",
384 | " 0 \n",
385 | " You are a linux expert. You understand what ev... \n",
386 | " w \n",
387 | " # w\\n> Show who is logged on and what they are... \n",
388 | " \n",
389 | " \n",
390 | " 1 \n",
391 | " You are a linux expert. You understand what ev... \n",
392 | " ar \n",
393 | " # ar\\n> Create, modify, and extract from Unix ... \n",
394 | " \n",
395 | " \n",
396 | " 2 \n",
397 | " You are a linux expert. You understand what ev... \n",
398 | " mv \n",
399 | " # mv\\n> Move or rename files and directories. ... \n",
400 | " \n",
401 | " \n",
402 | " 3 \n",
403 | " You are a linux expert. You understand what ev... \n",
404 | " ps \n",
405 | " # ps\\n> Information about running processes. M... \n",
406 | " \n",
407 | " \n",
408 | " 4 \n",
409 | " You are a linux expert. You understand what ev... \n",
410 | " ld \n",
411 | " # ld\\n> Link object files together. More infor... \n",
412 | " \n",
413 | " \n",
414 | " ... \n",
415 | " ... \n",
416 | " ... \n",
417 | " ... \n",
418 | " \n",
419 | " \n",
420 | " 476 \n",
421 | " You are a linux expert. You understand what ev... \n",
422 | " git-cvsexportcommit \n",
423 | " # git cvsexportcommit\\n> Export a single `Git`... \n",
424 | " \n",
425 | " \n",
426 | " 477 \n",
427 | " You are a linux expert. You understand what ev... \n",
428 | " update-alternatives \n",
429 | " # update-alternatives\\n> A convenient tool for... \n",
430 | " \n",
431 | " \n",
432 | " 478 \n",
433 | " You are a linux expert. You understand what ev... \n",
434 | " git-credential-store \n",
435 | " # git credential-store\\n> `git` helper to stor... \n",
436 | " \n",
437 | " \n",
438 | " 479 \n",
439 | " You are a linux expert. You understand what ev... \n",
440 | " git-credential-cache \n",
441 | " # git credential-cache\\n> Git helper to tempor... \n",
442 | " \n",
443 | " \n",
444 | " 480 \n",
445 | " You are a linux expert. You understand what ev... \n",
446 | " git-check-ref-format \n",
447 | " # git check-ref-format\\n> Checks if a given re... \n",
448 | " \n",
449 | " \n",
450 | "
\n",
451 | "
481 rows × 3 columns
\n",
452 | "
"
453 | ],
454 | "text/plain": [
455 | " system command \\\n",
456 | "0 You are a linux expert. You understand what ev... w \n",
457 | "1 You are a linux expert. You understand what ev... ar \n",
458 | "2 You are a linux expert. You understand what ev... mv \n",
459 | "3 You are a linux expert. You understand what ev... ps \n",
460 | "4 You are a linux expert. You understand what ev... ld \n",
461 | ".. ... ... \n",
462 | "476 You are a linux expert. You understand what ev... git-cvsexportcommit \n",
463 | "477 You are a linux expert. You understand what ev... update-alternatives \n",
464 | "478 You are a linux expert. You understand what ev... git-credential-store \n",
465 | "479 You are a linux expert. You understand what ev... git-credential-cache \n",
466 | "480 You are a linux expert. You understand what ev... git-check-ref-format \n",
467 | "\n",
468 | " response \n",
469 | "0 # w\\n> Show who is logged on and what they are... \n",
470 | "1 # ar\\n> Create, modify, and extract from Unix ... \n",
471 | "2 # mv\\n> Move or rename files and directories. ... \n",
472 | "3 # ps\\n> Information about running processes. M... \n",
473 | "4 # ld\\n> Link object files together. More infor... \n",
474 | ".. ... \n",
475 | "476 # git cvsexportcommit\\n> Export a single `Git`... \n",
476 | "477 # update-alternatives\\n> A convenient tool for... \n",
477 | "478 # git credential-store\\n> `git` helper to stor... \n",
478 | "479 # git credential-cache\\n> Git helper to tempor... \n",
479 | "480 # git check-ref-format\\n> Checks if a given re... \n",
480 | "\n",
481 | "[481 rows x 3 columns]"
482 | ]
483 | },
484 | "execution_count": 19,
485 | "metadata": {},
486 | "output_type": "execute_result"
487 | }
488 | ],
489 | "source": [
490 | "s = df.command.str.len().sort_values(ascending=True).index\n",
491 | "df = df.reindex(s).reset_index(drop=True)\n",
492 | "df"
493 | ]
494 | },
495 | {
496 | "cell_type": "code",
497 | "execution_count": 8,
498 | "metadata": {},
499 | "outputs": [],
500 | "source": [
501 | "from huggingface_hub.hf_api import HfFolder; HfFolder.save_token('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')"
502 | ]
503 | },
504 | {
505 | "cell_type": "code",
506 | "execution_count": 20,
507 | "metadata": {},
508 | "outputs": [
509 | {
510 | "name": "stderr",
511 | "output_type": "stream",
512 | "text": [
513 | "Creating parquet from Arrow format: 100%|██████████| 1/1 [00:00<00:00, 958.04ba/s]\n",
514 | "Uploading the dataset shards: 100%|██████████| 1/1 [00:01<00:00, 1.49s/it]\n"
515 | ]
516 | },
517 | {
518 | "data": {
519 | "text/plain": [
520 | "CommitInfo(commit_url='https://huggingface.co/datasets/hotal/linux_commands/commit/96c38caacb53d0b586cb93731b94e3e0dad1fa10', commit_message='Upload dataset', commit_description='', oid='96c38caacb53d0b586cb93731b94e3e0dad1fa10', pr_url=None, pr_revision=None, pr_num=None)"
521 | ]
522 | },
523 | "execution_count": 20,
524 | "metadata": {},
525 | "output_type": "execute_result"
526 | }
527 | ],
528 | "source": [
529 | "dataset = Dataset.from_pandas(df)\n",
530 | "dataset.push_to_hub(\"hotal/linux_commands\")"
531 | ]
532 | },
533 | {
534 | "cell_type": "code",
535 | "execution_count": null,
536 | "metadata": {},
537 | "outputs": [],
538 | "source": []
539 | }
540 | ],
541 | "metadata": {
542 | "kernelspec": {
543 | "display_name": "venv",
544 | "language": "python",
545 | "name": "python3"
546 | },
547 | "language_info": {
548 | "codemirror_mode": {
549 | "name": "ipython",
550 | "version": 3
551 | },
552 | "file_extension": ".py",
553 | "mimetype": "text/x-python",
554 | "name": "python",
555 | "nbconvert_exporter": "python",
556 | "pygments_lexer": "ipython3",
557 | "version": "3.11.8"
558 | }
559 | },
560 | "nbformat": 4,
561 | "nbformat_minor": 2
562 | }
563 |
--------------------------------------------------------------------------------
/notebooks/postprocess.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "## Upload Model to HF"
8 | ]
9 | },
10 | {
11 | "cell_type": "code",
12 | "execution_count": null,
13 | "metadata": {},
14 | "outputs": [],
15 | "source": [
16 | "from transformers import AutoModel,AutoTokenizer\n",
17 | "\n",
18 | "model = AutoModel.from_pretrained('../models/honeypot-llama3-8B')\n",
19 | "tokenizer = AutoTokenizer.from_pretrained('../models/honeypot-llama3-8B')\n",
20 | "\n",
21 | "model.push_to_hub(\"honeypot-llama3-8B\")\n",
22 | "tokenizer.push_to_hub(\"honeypot-llama3-8B\")"
23 | ]
24 | },
25 | {
26 | "cell_type": "markdown",
27 | "metadata": {},
28 | "source": [
29 | "## LLM Inference"
30 | ]
31 | },
32 | {
33 | "cell_type": "code",
34 | "execution_count": 29,
35 | "metadata": {},
36 | "outputs": [
37 | {
38 | "name": "stdout",
39 | "output_type": "stream",
40 | "text": [
41 | "Cleared GPU...\n"
42 | ]
43 | },
44 | {
45 | "name": "stderr",
46 | "output_type": "stream",
47 | "text": [
48 | "Loading checkpoint shards: 100%|██████████| 17/17 [00:05<00:00, 3.38it/s]\n",
49 | "Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.\n"
50 | ]
51 | },
52 | {
53 | "name": "stdout",
54 | "output_type": "stream",
55 | "text": [
56 | "Loaded Model: ../models/honeypot-llama3-8B\n"
57 | ]
58 | }
59 | ],
60 | "source": [
61 | "import torch\n",
62 | "import gc\n",
63 | "import re\n",
64 | "from transformers import (\n",
65 | " AutoModelForCausalLM,\n",
66 | " AutoTokenizer,\n",
67 | " BitsAndBytesConfig,\n",
68 | " pipeline\n",
69 | ")\n",
70 | "\n",
71 | "class LLM:\n",
72 | " def __init__(self, model_name=\"NousResearch/Meta-Llama-3-8B-Instruct\"):\n",
73 | " gc.collect()\n",
74 | " torch.cuda.empty_cache()\n",
75 | " print(\"Cleared GPU...\")\n",
76 | "\n",
77 | " self.DEVICE = \"cuda:1\" if torch.cuda.is_available() else \"cpu\"\n",
78 | " self.BASE_MODEL_NAME = model_name\n",
79 | " self.SYSTEM_PROMPT = \"You are mimicking a linux server. Respond with what the terminal would respond when a code given. I want you to only reply with the terminal outputs inside one unique code block and nothing else. Do not write any explanations. Do not type any commands unless I instruct you to do so.\"\n",
80 | "\n",
81 | " # Model configuration\n",
82 | " self.pipeline = pipeline(\n",
83 | " \"text-generation\",\n",
84 | " model=self.BASE_MODEL_NAME,\n",
85 | " tokenizer=self.BASE_MODEL_NAME,\n",
86 | " model_kwargs={\"torch_dtype\": torch.bfloat16},\n",
87 | " device=self.DEVICE,\n",
88 | " )\n",
89 | "\n",
90 | " print(\"Loaded Model: \", self.BASE_MODEL_NAME)\n",
91 | "\n",
92 | " def answer(self, query, log_history=[], max_tokens=4096, temperature=0.01, top_p=0.8):\n",
93 | "\n",
94 | " message_history = [{\"role\": \"system\", \"content\": self.SYSTEM_PROMPT}]\n",
95 | " if len(log_history) > 0:\n",
96 | " for i, item in enumerate(log_history):\n",
97 | " if i % 2 == 0:\n",
98 | " message_history.append({\"role\": \"user\", \"content\": item})\n",
99 | " else:\n",
100 | " message_history.append({\"role\": \"assistant\", \"content\": item})\n",
101 | "\n",
102 | " user_prompt = message_history + [{\"role\": \"user\", \"content\": query}]\n",
103 | " prompt = self.pipeline.tokenizer.apply_chat_template(\n",
104 | " user_prompt, tokenize=False, add_generation_prompt=True\n",
105 | " )\n",
106 | " outputs = self.pipeline(\n",
107 | " prompt,\n",
108 | " max_new_tokens=max_tokens,\n",
109 | " eos_token_id=self.pipeline.tokenizer.eos_token_id,\n",
110 | " do_sample=True,\n",
111 | " temperature=temperature,\n",
112 | " top_p=top_p,\n",
113 | " )\n",
114 | " response = outputs[0][\"generated_text\"][len(prompt):]\n",
115 | "\n",
116 | " # remove unnecessary quotes\n",
117 | " if response.startswith(\"```\") and response.endswith(\"```\"):\n",
118 | " response = response[3:-3]\n",
119 | " elif response.startswith(\"`\") and response.endswith(\"`\"):\n",
120 | " response = response[1:-1]\n",
121 | " \n",
122 | " return response\n",
123 | " \n",
124 | "\n",
125 | "llama = LLM(\"../models/honeypot-llama3-8B\")\n",
126 | "#print(llama.answer('ls -al', ['mkdir test_directory; touch test.txt','\\n']))"
127 | ]
128 | },
129 | {
130 | "cell_type": "markdown",
131 | "metadata": {},
132 | "source": [
133 | "## Evaluation"
134 | ]
135 | },
136 | {
137 | "cell_type": "code",
138 | "execution_count": 52,
139 | "metadata": {},
140 | "outputs": [],
141 | "source": [
142 | "from openai import OpenAI\n",
143 | "\n",
144 | "client = OpenAI(base_url=\"http://localhost:1234/v1\", api_key=\"lm-studio\")\n",
145 | "\n",
146 | "\n",
147 | "def measure_correctness(prompt, command, generated_answer, reference_answer):\n",
148 | " try:\n",
149 | " correctness_prompt = f\"\"\"###Task Description: An instruction (might include an Input inside it), a query, a response to evaluate, a reference answer that gets a score of 5, and a score rubric representing a evaluation criteria are given. \n",
150 | " 1. Write a detailed feedback that assesses the quality of the response strictly based on the given score rubric, not evaluating in general. \n",
151 | " 2. After writing a feedback, write a score that is either 1 or 2 or 3 or 4 or 5. You should refer to the score rubric. \n",
152 | " 3. The output format should look as follows: \"Feedback: (write a feedback for criteria) [RESULT] (1 or 2 or 3 or 4 or 5)\" \n",
153 | " 4. Please do not generate any other opening, closing, and explanations. \n",
154 | " 5. Generated answer and reference answer can be completely different, consider if it makes sense for the given command.\n",
155 | " 6. Error messages in the generated answer are fine as long as the reference answer has error messages too.\n",
156 | "\n",
157 | " ###The instruction to evaluate: Your task is to evaluate the generated answer and reference answer for the query: {prompt}\\nCommand:{command}\n",
158 | "\n",
159 | " ###Generate answer to evaluate: {generated_answer} \n",
160 | "\n",
161 | " ###Reference Answer (Score 5): {reference_answer}\n",
162 | "\n",
163 | " ###Score Rubrics: \n",
164 | " Score 1: The response is completely irrelevant to the given command.\n",
165 | " Score 2: The response executes the command but provides incomplete or inaccurate information.\n",
166 | " Score 3: The response provides some accurate information but lacks detail or has minor errors.\n",
167 | " Score 4: The response provides mostly accurate and complete information but has some minor errors or omissions.\n",
168 | " Score 5: The response provides a complete and accurate response to the given command, identical to what a Linux terminal would output.\n",
169 | " \n",
170 | " ###Feedback:\"\"\"\n",
171 | "\n",
172 | " completion = client.chat.completions.create(\n",
173 | " model=\"RichardErkhov/prometheus-eval_-_prometheus-7b-v2.0-gguf\",\n",
174 | " messages=[\n",
175 | " {\"role\": \"system\", \"content\": \"You are a language model evaluator. Respond according to the given task.\"},\n",
176 | " {\"role\": \"user\", \"content\": correctness_prompt}\n",
177 | " ],\n",
178 | " temperature=0.01,\n",
179 | " )\n",
180 | "\n",
181 | " return int(completion.choices[0].message.content.split('[RESULT] ')[1])\n",
182 | " except:\n",
183 | " return -1"
184 | ]
185 | },
186 | {
187 | "cell_type": "code",
188 | "execution_count": 53,
189 | "metadata": {},
190 | "outputs": [
191 | {
192 | "data": {
193 | "text/plain": [
194 | "2"
195 | ]
196 | },
197 | "execution_count": 53,
198 | "metadata": {},
199 | "output_type": "execute_result"
200 | }
201 | ],
202 | "source": [
203 | "prompt = 'You are mimicking a linux server. Respond with what the terminal would respond when a code given. I want you to only reply with the terminal outputs inside one unique code block and nothing else. Do not write any explanations. Do not type any commands unless I instruct you to do so.'\n",
204 | "command = 'ls'\n",
205 | "generated_answer = 'bin boot dev etc home '\n",
206 | "reference_answer = 'bin boot dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var'\n",
207 | "\n",
208 | "measure_correctness(prompt, command, generated_answer, reference_answer)"
209 | ]
210 | },
211 | {
212 | "cell_type": "code",
213 | "execution_count": 72,
214 | "metadata": {},
215 | "outputs": [
216 | {
217 | "name": "stderr",
218 | "output_type": "stream",
219 | "text": [
220 | "12it [00:28, 6.20s/it]"
221 | ]
222 | },
223 | {
224 | "name": "stdout",
225 | "output_type": "stream",
226 | "text": [
227 | "Skipping row 9 due to timeout (> 15 seconds)\n"
228 | ]
229 | },
230 | {
231 | "name": "stderr",
232 | "output_type": "stream",
233 | "text": [
234 | "16it [00:45, 6.26s/it]"
235 | ]
236 | },
237 | {
238 | "name": "stdout",
239 | "output_type": "stream",
240 | "text": [
241 | "Skipping row 132 due to timeout (> 15 seconds)\n"
242 | ]
243 | },
244 | {
245 | "name": "stderr",
246 | "output_type": "stream",
247 | "text": [
248 | "42it [01:32, 5.52s/it]"
249 | ]
250 | },
251 | {
252 | "name": "stdout",
253 | "output_type": "stream",
254 | "text": [
255 | "Skipping row 42 due to timeout (> 15 seconds)\n"
256 | ]
257 | },
258 | {
259 | "name": "stderr",
260 | "output_type": "stream",
261 | "text": [
262 | "60it [02:28, 9.42s/it]"
263 | ]
264 | },
265 | {
266 | "name": "stdout",
267 | "output_type": "stream",
268 | "text": [
269 | "Skipping row 179 due to timeout (> 15 seconds)\n"
270 | ]
271 | },
272 | {
273 | "name": "stderr",
274 | "output_type": "stream",
275 | "text": [
276 | "67it [02:58, 6.99s/it]"
277 | ]
278 | },
279 | {
280 | "name": "stdout",
281 | "output_type": "stream",
282 | "text": [
283 | "Skipping row 60 due to timeout (> 15 seconds)\n"
284 | ]
285 | },
286 | {
287 | "name": "stderr",
288 | "output_type": "stream",
289 | "text": [
290 | "76it [03:24, 5.86s/it]"
291 | ]
292 | },
293 | {
294 | "name": "stdout",
295 | "output_type": "stream",
296 | "text": [
297 | "Skipping row 177 due to timeout (> 15 seconds)\n"
298 | ]
299 | },
300 | {
301 | "name": "stderr",
302 | "output_type": "stream",
303 | "text": [
304 | "90it [03:50, 3.73s/it]"
305 | ]
306 | },
307 | {
308 | "name": "stdout",
309 | "output_type": "stream",
310 | "text": [
311 | "Skipping row 185 due to timeout (> 15 seconds)\n"
312 | ]
313 | },
314 | {
315 | "name": "stderr",
316 | "output_type": "stream",
317 | "text": [
318 | "142it [05:04, 4.91s/it]"
319 | ]
320 | },
321 | {
322 | "name": "stdout",
323 | "output_type": "stream",
324 | "text": [
325 | "Skipping row 221 due to timeout (> 15 seconds)\n"
326 | ]
327 | },
328 | {
329 | "name": "stderr",
330 | "output_type": "stream",
331 | "text": [
332 | "150it [05:30, 2.20s/it]"
333 | ]
334 | },
335 | {
336 | "name": "stdout",
337 | "output_type": "stream",
338 | "text": [
339 | "Skipping row 222 due to timeout (> 15 seconds)\n"
340 | ]
341 | },
342 | {
343 | "name": "stderr",
344 | "output_type": "stream",
345 | "text": [
346 | "\n"
347 | ]
348 | },
349 | {
350 | "data": {
351 | "text/html": [
352 | "\n",
353 | "\n",
366 | "
\n",
367 | " \n",
368 | " \n",
369 | " \n",
370 | " system \n",
371 | " command \n",
372 | " response \n",
373 | " generated \n",
374 | " \n",
375 | " \n",
376 | " \n",
377 | " \n",
378 | " 25 \n",
379 | " You are mimicking a linux server. Respond with... \n",
380 | " ps \n",
381 | " PID TTY TIME COMMAND ... \n",
382 | " \\n PID TTY TIME CMD\\n 1234 pts/0 ... \n",
383 | " \n",
384 | " \n",
385 | " 309 \n",
386 | " You are mimicking a linux server. Respond with... \n",
387 | " uptime -u \n",
388 | " 18:42:29 up 3:14, 1 user, load average: 0.... \n",
389 | " \\n 00:00:00\\n \n",
390 | " \n",
391 | " \n",
392 | " 73 \n",
393 | " You are mimicking a linux server. Respond with... \n",
394 | " chmod u+rw /home/phil/file_or_directory1,/home... \n",
395 | " chmod: cannot access '/home/phil/file_or_direc... \n",
396 | " \\nchmod: cannot access '/home/phil/file_or_dir... \n",
397 | " \n",
398 | " \n",
399 | " 195 \n",
400 | " You are mimicking a linux server. Respond with... \n",
401 | " mv /home/phil/source/myfile.txt /home/phil/tar... \n",
402 | " mv: cannot create regular file `/home/phil/tar... \n",
403 | " mv: cannot move '/home/phil/source/myfile.txt'... \n",
404 | " \n",
405 | " \n",
406 | " 57 \n",
407 | " You are mimicking a linux server. Respond with... \n",
408 | " cat /test2 \n",
409 | " ELF\u0002\u0001\u0001 \n",
410 | " cat: /test2: No such file or directory \n",
411 | " \n",
412 | " \n",
413 | " ... \n",
414 | " ... \n",
415 | " ... \n",
416 | " ... \n",
417 | " ... \n",
418 | " \n",
419 | " \n",
420 | " 283 \n",
421 | " You are mimicking a linux server. Respond with... \n",
422 | " uname -h \n",
423 | " uname: invalid option -- 'h'\\nTry 'uname --hel... \n",
424 | " Linux \n",
425 | " \n",
426 | " \n",
427 | " 148 \n",
428 | " You are mimicking a linux server. Respond with... \n",
429 | " gcc -Wall -O2 -o path/to/output_executable pat... \n",
430 | " gcc: path/to/source.cpp: No such file or direc... \n",
431 | " \\ngcc: error: path/to/output_executable: No su... \n",
432 | " \n",
433 | " \n",
434 | " 291 \n",
435 | " You are mimicking a linux server. Respond with... \n",
436 | " uptime \n",
437 | " 18:42:08 up 3:13, 1 user, load average: 0.... \n",
438 | " \\n 21:34:12 up 2 days, 1:04, 1 user, load a... \n",
439 | " \n",
440 | " \n",
441 | " 239 \n",
442 | " You are mimicking a linux server. Respond with... \n",
443 | " rmdir -p /home/phil/directory1 /home/phil/dire... \n",
444 | " rmdir: failed to remove `-p': No such file or ... \n",
445 | " \\nrmdir: failed to remove `/home/phil/director... \n",
446 | " \n",
447 | " \n",
448 | " 222 \n",
449 | " You are mimicking a linux server. Respond with... \n",
450 | " ps aux \n",
451 | " USER PID %CPU %MEM VSZ ... \n",
452 | " None \n",
453 | " \n",
454 | " \n",
455 | "
\n",
456 | "
150 rows × 4 columns
\n",
457 | "
"
458 | ],
459 | "text/plain": [
460 | " system \\\n",
461 | "25 You are mimicking a linux server. Respond with... \n",
462 | "309 You are mimicking a linux server. Respond with... \n",
463 | "73 You are mimicking a linux server. Respond with... \n",
464 | "195 You are mimicking a linux server. Respond with... \n",
465 | "57 You are mimicking a linux server. Respond with... \n",
466 | ".. ... \n",
467 | "283 You are mimicking a linux server. Respond with... \n",
468 | "148 You are mimicking a linux server. Respond with... \n",
469 | "291 You are mimicking a linux server. Respond with... \n",
470 | "239 You are mimicking a linux server. Respond with... \n",
471 | "222 You are mimicking a linux server. Respond with... \n",
472 | "\n",
473 | " command \\\n",
474 | "25 ps \n",
475 | "309 uptime -u \n",
476 | "73 chmod u+rw /home/phil/file_or_directory1,/home... \n",
477 | "195 mv /home/phil/source/myfile.txt /home/phil/tar... \n",
478 | "57 cat /test2 \n",
479 | ".. ... \n",
480 | "283 uname -h \n",
481 | "148 gcc -Wall -O2 -o path/to/output_executable pat... \n",
482 | "291 uptime \n",
483 | "239 rmdir -p /home/phil/directory1 /home/phil/dire... \n",
484 | "222 ps aux \n",
485 | "\n",
486 | " response \\\n",
487 | "25 PID TTY TIME COMMAND ... \n",
488 | "309 18:42:29 up 3:14, 1 user, load average: 0.... \n",
489 | "73 chmod: cannot access '/home/phil/file_or_direc... \n",
490 | "195 mv: cannot create regular file `/home/phil/tar... \n",
491 | "57 ELF\u0002\u0001\u0001 \n",
492 | ".. ... \n",
493 | "283 uname: invalid option -- 'h'\\nTry 'uname --hel... \n",
494 | "148 gcc: path/to/source.cpp: No such file or direc... \n",
495 | "291 18:42:08 up 3:13, 1 user, load average: 0.... \n",
496 | "239 rmdir: failed to remove `-p': No such file or ... \n",
497 | "222 USER PID %CPU %MEM VSZ ... \n",
498 | "\n",
499 | " generated \n",
500 | "25 \\n PID TTY TIME CMD\\n 1234 pts/0 ... \n",
501 | "309 \\n 00:00:00\\n \n",
502 | "73 \\nchmod: cannot access '/home/phil/file_or_dir... \n",
503 | "195 mv: cannot move '/home/phil/source/myfile.txt'... \n",
504 | "57 cat: /test2: No such file or directory \n",
505 | ".. ... \n",
506 | "283 Linux \n",
507 | "148 \\ngcc: error: path/to/output_executable: No su... \n",
508 | "291 \\n 21:34:12 up 2 days, 1:04, 1 user, load a... \n",
509 | "239 \\nrmdir: failed to remove `/home/phil/director... \n",
510 | "222 None \n",
511 | "\n",
512 | "[150 rows x 4 columns]"
513 | ]
514 | },
515 | "execution_count": 72,
516 | "metadata": {},
517 | "output_type": "execute_result"
518 | }
519 | ],
520 | "source": [
521 | "import pandas as pd\n",
522 | "from datasets import load_dataset\n",
523 | "from tqdm import tqdm\n",
524 | "import time\n",
525 | "import spacy\n",
526 | "import signal\n",
527 | "nlp = spacy.load(\"en_core_web_sm\")\n",
528 | "\n",
529 | "dataset = load_dataset(\"hotal/honeypot_logs\")\n",
530 | "df = pd.DataFrame(dataset['train'])[:334].sample(n=150, random_state=42)\n",
531 | "\n",
532 | "def timeout_handler(signum, frame):\n",
533 | " raise TimeoutError\n",
534 | "\n",
535 | "for index, row in tqdm(df.iterrows()):\n",
536 | " signal.signal(signal.SIGALRM, timeout_handler)\n",
537 | " signal.alarm(15) # 10 seconds\n",
538 | " try:\n",
539 | " df.loc[index, 'generated'] = llama.answer(row['command'], [])\n",
540 | " except TimeoutError:\n",
541 | " print(f\"Skipping row {index} due to timeout (> 15 seconds)\")\n",
542 | " df.loc[index, 'generated'] = None\n",
543 | " finally:\n",
544 | " signal.alarm(0) # reset the alarm\n",
545 | "\n",
546 | "df\n"
547 | ]
548 | },
549 | {
550 | "cell_type": "code",
551 | "execution_count": 78,
552 | "metadata": {},
553 | "outputs": [
554 | {
555 | "name": "stderr",
556 | "output_type": "stream",
557 | "text": [
558 | "0it [00:00, ?it/s]/tmp/ipykernel_1638383/3606016577.py:5: UserWarning: [W007] The model you're using has no word vectors loaded, so the result of the Doc.similarity method will be based on the tagger, parser and NER, which may not give useful similarity judgements. This may happen if you're using one of the small models, e.g. `en_core_web_sm`, which don't ship with word vectors and only use context-sensitive tensors. You can always add your own word vectors, or use one of the larger models instead if available.\n",
559 | " similarity = doc1.similarity(doc2)\n",
560 | "150it [00:01, 130.00it/s]\n"
561 | ]
562 | },
563 | {
564 | "data": {
565 | "text/plain": [
566 | "[0.9266226889377728,\n",
567 | " 0.7483038693015535,\n",
568 | " 0.9854740744166057,\n",
569 | " 0.8750943762180343,\n",
570 | " 0.1222527798910181,\n",
571 | " 0.9599760967911799,\n",
572 | " 0.15790873052795754,\n",
573 | " 0.3427842031666325,\n",
574 | " 0.8901137910677026,\n",
575 | " 0.9250525849039357,\n",
576 | " 0.6146497515738819,\n",
577 | " 0.6783382553049272,\n",
578 | " 0.9551248995922451,\n",
579 | " 0.627599031453704,\n",
580 | " 0.8775345504719663,\n",
581 | " 0.8153339463875003,\n",
582 | " 0.43039500631938543,\n",
583 | " 0.4415520404516888,\n",
584 | " 0.6499677098298162,\n",
585 | " 0.7572771114785681,\n",
586 | " 0.7478363709157725,\n",
587 | " 0.517494247868626,\n",
588 | " 0.5214024835335245,\n",
589 | " 0.5217871483441932,\n",
590 | " 0.4151627115886709,\n",
591 | " 0.7464344056291038,\n",
592 | " 0.5545979492340203,\n",
593 | " 0.7469779958000291,\n",
594 | " 0.3084552815614088,\n",
595 | " 0.9770636258190092,\n",
596 | " 0.42111358743318955,\n",
597 | " 0.508898890243933,\n",
598 | " 0.4691406705359161,\n",
599 | " 0.8500015026444628,\n",
600 | " 0.7013135151145201,\n",
601 | " 0.9176107960715111,\n",
602 | " 0.8260988634215954,\n",
603 | " 0.47781991339817054,\n",
604 | " 0.41822584352315856,\n",
605 | " 0.40500443370038985,\n",
606 | " 0.6149629113333346,\n",
607 | " 0.672761011302793,\n",
608 | " 0.9757408913151834,\n",
609 | " 0.7929636702502307,\n",
610 | " 0.28980344659973345,\n",
611 | " 0.5850302585113578,\n",
612 | " 0.5611672372311479,\n",
613 | " 0.8562951543701436,\n",
614 | " 0.950702976797263,\n",
615 | " 0.91938663377379,\n",
616 | " 0.9457809333641432,\n",
617 | " 0.4807638058305509,\n",
618 | " 0.9092084540315909,\n",
619 | " 0.6367839109198675,\n",
620 | " 0.9812164222549482,\n",
621 | " 0.8186939002754022,\n",
622 | " 0.9771496763658669,\n",
623 | " 0.7486600345735321,\n",
624 | " 0.41910924509250236,\n",
625 | " 0.4091024332843984,\n",
626 | " 0.3836090746137256,\n",
627 | " 0.9759682589885805,\n",
628 | " 0.44465350719130636,\n",
629 | " 0.6120472117886202,\n",
630 | " 0.9789453902284974,\n",
631 | " 0.7153902543235714,\n",
632 | " 0.7426386062855006,\n",
633 | " 0.9744701036083163,\n",
634 | " 0.6558226640808129,\n",
635 | " 0.9532569160570045,\n",
636 | " 0.6264219005218772,\n",
637 | " 0.468927884859053,\n",
638 | " 0.5790208651494848,\n",
639 | " 0.9093797194028849,\n",
640 | " 0.8619641459279357,\n",
641 | " 0.40928139596157587,\n",
642 | " 0.05515600619347201,\n",
643 | " 0.5654284362318464,\n",
644 | " 0.705511556698048,\n",
645 | " 0.7566292069891919,\n",
646 | " 0.5345443710608845,\n",
647 | " 0.9750915300170969,\n",
648 | " 0.2812566174949539,\n",
649 | " 0.9016269139383067,\n",
650 | " 0.7629358538450524,\n",
651 | " 0.9885831370195848,\n",
652 | " 0.8946553398557442,\n",
653 | " 0.40125993982842567,\n",
654 | " 0.9216778170046728,\n",
655 | " 0.3842899033080288,\n",
656 | " 0.9172229385791985,\n",
657 | " 0.5771070729807252,\n",
658 | " 0.34359980264799184,\n",
659 | " 0.8792366989444065,\n",
660 | " 0.9686253387818091,\n",
661 | " 0.8772259641843925,\n",
662 | " 0.28082071452590873,\n",
663 | " 0.6648062023302003,\n",
664 | " 0.7091523172314665,\n",
665 | " 0.9308563527991272,\n",
666 | " 0.6379564087919317,\n",
667 | " 0.2941533246890943,\n",
668 | " 0.40961384119132643,\n",
669 | " 0.9830999518848895,\n",
670 | " 0.8573340272480829,\n",
671 | " 0.6096735436269064,\n",
672 | " 0.867486599832943,\n",
673 | " 0.3184837440305669,\n",
674 | " 0.3161855948383834,\n",
675 | " 0.9135009372705184,\n",
676 | " 0.8137313915768604,\n",
677 | " 0.8123733670376505,\n",
678 | " 0.9667515554007875,\n",
679 | " 0.8935746811734981,\n",
680 | " 0.8542122675981001,\n",
681 | " 0.9885607732671146,\n",
682 | " 0.9491577734752112,\n",
683 | " 0.6577316278883858,\n",
684 | " 0.8955741072535015,\n",
685 | " 0.35920635435693815,\n",
686 | " 0.9752386936788853,\n",
687 | " 0.7163785906107277,\n",
688 | " 0.7413162555648729,\n",
689 | " 0.76000288795456,\n",
690 | " 0.8606838733019466,\n",
691 | " 0.6496282700594403,\n",
692 | " 0.40762294957370837,\n",
693 | " 0.8426753638284821,\n",
694 | " 0.9070421984574294,\n",
695 | " 0.9451967510573314,\n",
696 | " 0.07869086945968735,\n",
697 | " 0.5564012886490949,\n",
698 | " 0.9267505365363619,\n",
699 | " 0.6127896978889558,\n",
700 | " 0.41232448670824684,\n",
701 | " 0.6403345808255426,\n",
702 | " 0.2019148676242682,\n",
703 | " 0.929285189521436,\n",
704 | " 0.9783733409331761,\n",
705 | " 0.906493423110178]"
706 | ]
707 | },
708 | "execution_count": 78,
709 | "metadata": {},
710 | "output_type": "execute_result"
711 | }
712 | ],
713 | "source": [
714 | "def measure_similarity(sentence1, sentence2):\n",
715 | " try:\n",
716 | " doc1 = nlp(sentence1)\n",
717 | " doc2 = nlp(sentence2)\n",
718 | " similarity = doc1.similarity(doc2)\n",
719 | " return similarity\n",
720 | " except Exception as e:\n",
721 | " return -1\n",
722 | "\n",
723 | "results = []\n",
724 | "for index, row in tqdm(df.iterrows()):\n",
725 | " \n",
726 | " prompt = row['system']\n",
727 | " command = row['command']\n",
728 | " reference_answer = row['response']\n",
729 | " generated_answer = row['generated']\n",
730 | "\n",
731 | " #result = measure_correctness(prompt, command, generated_answer, reference_answer)\n",
732 | " result = measure_similarity(generated_answer, reference_answer)\n",
733 | " if result != -1:\n",
734 | " results.append(result)\n",
735 | " #time.sleep(0.05)\n",
736 | "\n",
737 | "results"
738 | ]
739 | },
740 | {
741 | "cell_type": "markdown",
742 | "metadata": {},
743 | "source": [
744 | "## Visualizations"
745 | ]
746 | },
747 | {
748 | "cell_type": "code",
749 | "execution_count": 113,
750 | "metadata": {},
751 | "outputs": [
752 | {
753 | "data": {
754 | "text/plain": [
755 | "(0.6885405904371525, 140)"
756 | ]
757 | },
758 | "execution_count": 113,
759 | "metadata": {},
760 | "output_type": "execute_result"
761 | }
762 | ],
763 | "source": [
764 | "import numpy as np\n",
765 | "np.array(results).mean(), len(results)"
766 | ]
767 | },
768 | {
769 | "cell_type": "code",
770 | "execution_count": 146,
771 | "metadata": {},
772 | "outputs": [
773 | {
774 | "data": {
775 | "image/png": "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Kadkk002yfHHH5/nn3++occAAAAAAIAP1ODRfLmlS5dm0aJFWbhwYZKkKIosXLgw119/fXbaaad89rOfzbvvvttY4wAAAAAAwCoaPJo/++yzOfHEE7PJJpvkC1/4Ql544YV86lOfyt1335133303N998c7bZZpvccccdOe200xp6HAAAAAAAWKP1GuKkc+fOzU033ZQf/ehHefHFF1MURXr37p1///d/zwknnJBNN910xbFHHXVUjjjiiGy//fb59a9/3RDjAAAAAADAWql6NP/Xf/3X3H777Vm4cGEqlUoOPPDAfOELX8ghhxySNm1Wf2P7euutlx133DE33HBDtccBAAAAAIC1VvVofsstt2TjjTfOcccdlxNPPDF9+/Zdq9cddthha30sAAAAAAA0hKpH85///Of59Kc/nfXW+3CnPvTQQ3PooYdWexwAAAAAAFhrVY/mhx9+eLVPCQAAAAAAjWL1DxlfB0899VSOO+64PP300x94zIQJE6p9eQAAAAAAqLeqR/Orr74648aNy9Zbb73GY7beeuv87Gc/yzXXXFPtywMAAAAAQL1VPZo/88wz2X777dOtW7c1HrPhhhtm6NCh+c1vflPtywMAAAAAQL1VPZq//fbb6dOnzwce16dPn8ycObPalwcAAAAAgHqrejTv3LlzZs+e/YHHzZ49O+3atav25QEAAAAAoN6qHs233XbbPPnkk5kxY8Yaj5kxY0aeeOKJDBkypNqXBwAAAACAeqt6ND/uuOOyYMGCHHrooXnhhRdW2f/CCy/kn//5n7No0aIcd9xx1b48AAAAAADU23rVPuHnP//5jB8/Prfffnt23HHHDB06NP3790+lUsnrr7+eSZMmZdmyZTnssMNy7LHHVvvyAAAAAABQb1WP5kkybty4fPOb38y3v/3tTJw4MRMnTlyxr1u3bjnzzDNz3nnnNcSlAQAAAACg3hokmrdp0ybnn39+zjnnnEycODFvvfVWkmSzzTbLDjvskJqamoa4LAAAAAAArJMGiebL1dTUZPjw4Rk+fHhDXgYAAAAAAKqi6l8ECgAAAAAALVWD3Gm+cOHC/PSnP83jjz+emTNnZuHChas9rlKp5KGHHmqIEQAAAAAA4EOrejT/v//3/2bffffNa6+9lqIo3vfYSqVS7csDAAAAAEC9VT2af+UrX8mrr76aXXfdNV/+8pczaNCgdOnSpdqXAQAAAOBDKIoidXV1TT0Gjay2trapR4AWp+rR/L777kufPn3y4IMPpkOHDtU+PQAAAAD1UFdX58ZGgLVQ9S8CXbhwYXbccUfBHAAAAACAFqfqd5pvs802mTFjRrVPCwAAAECV9D715lRq3PDYGiytm5u3rzuhqceAFqXq0fycc87J4Ycfnsceeyx77rlntU8PAAAAwDqq1HRIm3aieWuwbLF1hg+r6tF86NCh+fKXv5xDDz00Z511Vvbff//07t07lUpltcf36dOn2iMAAAAAAEC9VD2a9+vXL5VKJUVR5OKLL87FF1+8xmMrlUqWLFlS7REAAAAAAKBeqh7NR4wYsca7ygEAAAAAoDmrejR/9NFHq31KAAAAAABoFG2aegAAAAAAAGguqn6n+T967bXXMnv27HTv3j2DBg1q6MsBAAAAAEC9Ncid5vPnz88555yT7t27Z6uttsruu++eyy67bMX+66+/PkOHDs3kyZMb4vIAAAAAAFAvVY/mtbW12XPPPXPFFVekffv2GTlyZIqiWOmYESNGZPLkyRk3bly1Lw8AAAAAAPVW9Wj+rW99KxMnTsyJJ56YN954I//zP/+zyjH9+/fPVlttlQcffLDalwcAAAAAgHqrejQfN25c+vXrl6uvvjrt27df43F9+/bNjBkz6nWNurq6jB8/Pscff3yGDBmSDTbYIJ07d862226br3/965k3b94aX3vjjTdmp512SpcuXbLRRhvl4IMPzlNPPVWvOQAAAAAA+GipejSfPn16hg0blrZt277vcRtssEHmzJlTr2vceuutOeyww/KTn/wky5Yty4EHHpg99tgjb7zxRi688MLsuOOO+fOf/7zK684666wce+yxefHFF7Pffvtlp512ygMPPJARI0bkzjvvrNcsAAAAAAB8dFQ9mnfu3DmzZ8/+wOPeeOONdO/evV7XaNeuXU4++eS8+uqrefHFF/Pzn/889957b1555ZVsv/32efnll/OlL31ppdc8/PDD+c53vpPu3bvnt7/9bcaPH5977703jz/+eNq2bZsxY8bUO+IDAAAAAPDRUPVoPmzYsDz77LN566231njM1KlT88ILL2T48OH1usYxxxyTa665JgMHDlxp+yabbJKrr746SXLHHXdk0aJFK/ZdeeWVSZLzzz9/pdcNHz48J510Uv7617/mJz/5Sb3mAQAAAADgo6Hq0fzUU0/N/PnzM2rUqLz++uur7H/zzTdzzDHHZNmyZTn11FOrfflsu+22SZKFCxfmnXfeSZIsWLAgDz30UJLk8MMPX+U1y7fdddddVZ8HAAAAAICWo+rR/NBDD82ZZ56Z559/PltuuWU+8YlPpFKp5P77788OO+yQgQMH5oUXXsjZZ5+dvfbaq9qXz+9///skSU1NTTbaaKMkycsvv5yFCxemZ8+e6d279yqvGTp0aJJkypQpVZ8HAAAAAICWo+rRPPnbo1B+9rOfZZtttsn//u//piiKvP3225k0aVL69++fm266KZdeemlDXDpXXXVVkuTAAw9M+/btk/zty0mTrDaYJ397Dnu3bt0yZ86cvPfeew0yFwAAAAAAzd96DXXiI444IkcccURmzZqVN998M0uXLk3v3r3Tq1evhrpk7r777vz4xz9OTU1NLr744hXb582blyTp1KnTGl/buXPnzJ07N/Pmzcv666//vtcZPHjwardPmzYt/fv3r8fkAAAAAAA0Bw0WzZfr2bNnevbs2dCXyUsvvZSjjz46RVHk8ssvX/Fs8yQpiiJJUqlU1vj65ccAAAAAANB6NXg0bwwzZszIgQcemDlz5uSss87KGWecsdL+5XeO19bWrvEcdXV1SZIuXbp84PWmTp262u1rugMdAAAAAICWoerRfJ999lnrYyuVSh566KF1ut7s2bOz//77Z/r06RkzZkyuuOKKVY7p06dPkr/F9dWpra3N3Llz061btw98NAsAAAAAAB9dVY/mjz766AceU6lUUhTF+z4uZW289957Oeigg/Lyyy9n1KhR+eEPf7jac2655ZZp3759Zs2alRkzZqzyhaCTJk1KkgwZMmSd5gEAAAAAoGVrU+0TvvHGG6v9MW3atDz66KP56le/mo4dO+YrX/lKfv/739f7OgsXLsynPvWpTJw4MQcccEB++tOfpm3btqs9tmPHjivugL/ttttW2b982yGHHFLveQAAAAAAaPmqfqd5375917hv8803z4gRI7L33nvnoIMOyi677PK+x6/J0qVL87nPfS6PPPJI9thjj9xxxx1p167d+77mrLPOyj333JNvfOMbGTlyZAYOHJgkefrpp3Pddddlgw02yPHHH/+hZwEAAAAA4KOjSb4IdL/99suwYcNy2WWX5bDDDvvQr//+97+fO++8M0nSo0ePnHLKKas97oorrkiPHj1WXPOMM87IVVddle222y77779/Fi1alAceeCDLli3LLbfcko022qj+bwoAAAAAgBavSaJ5kmy22Wa555576vXaOXPmrPjn5fF8dS666KIV0TxJvvvd72a77bbL97///TzwwAOpqanJvvvum/PPPz+77757vWYBAAAAAOCjo0mi+fz58/Pcc8+lQ4cO9Xr9RRddlIsuuqherx09enRGjx5dr9cCAAAAAPDRVvVoPn369DXumzdvXl599dVceeWVeeutt/K5z32u2pcHAAAAAIB6q3o079evXyqVyvseUxRFttxyy1x++eXVvjwAAAAAANRb1aP5iBEj1hjN27Vrl0022SR77rlnPve5z9X78SwAAAAAANAQqh7NH3300WqfEgAAAAAAGkWbph4AAAAAAACaC9EcAAAAAABKVX88y3HHHVfv11Yqlfz4xz+u4jQAAAAAALD2qh7Nx44dmyQrvgy0KIqV9q9p+/J9ojkAAAAAAE2l6tH8kUceyc9//vNce+212XXXXfMv//Iv6dOnT5Jk+vTp+elPf5qnn346J598co444ohqXx4AAAAAAOqt6tG8trY21113XX70ox+t9lEtp556aq6//vqceOKJOfjggzNy5MhqjwAAAAAAAPVS9S8CveSSS7LTTju977PNx4wZk5122imXXHJJtS8PAAAAAAD1VvVoPmXKlGy++eYfeNzmm2+e3/3ud9W+PAAAAAAA1FvVo3n79u0zadKk9z2mKIpMmjQp7du3r/blAQAAAACg3qoezffff/+8+uqrOf300zN//vxV9s+fPz9f+tKX8uqrr2b//fev9uUBAAAAAKDeqv5FoJdddlkefvjhXH311bn11ltz8MEHp0+fPqlUKnnzzTdz9913Z86cOenZs2cuvfTSal8eAAAAAADqrerRvG/fvnn66adz8skn54EHHsjNN9+8yjH77rtvrr322vTr16/alwcAAAAAgHqrejRPki222CL33Xdffv/73+c3v/lN3n777RRFkU033TS77bZb+vfv3xCXBQAAAACAddIg0Xy5LbbYIltssUVDXgIAAAAAAKqmQaN5krz22muZPXt2unfvnkGDBjX05QAAAAAAoN7aNMRJ58+fn3POOSfdu3fPVlttld133z2XXXbZiv3XX399hg4dmsmTJzfE5QEAAAAAoF6qHs1ra2uz55575oorrkj79u0zcuTIFEWx0jEjRozI5MmTM27cuGpfHgAAAAAA6q3q0fxb3/pWJk6cmBNPPDFvvPFG/ud//meVY/r375+tttoqDz74YLUvDwAAAAAA9Vb1aD5u3Lj069cvV199ddq3b7/G4/r27ZsZM2ZU+/IAAAAAAFBvVY/m06dPz7Bhw9K2bdv3PW6DDTbInDlzqn15AAAAAACot6pH886dO2f27NkfeNwbb7yR7t27V/vyAAAAAABQb1WP5sOGDcuzzz6bt956a43HTJ06NS+88EKGDx9e7csDAAAAAEC9VT2an3rqqZk/f35GjRqV119/fZX9b775Zo455pgsW7Ysp556arUvDwAAAAAA9Vb1aH7ooYfmzDPPzPPPP58tt9wyn/jEJ1KpVHL//fdnhx12yMCBA/PCCy/k7LPPzl577VXtywMAAAAAQL1VPZonyZVXXpmf/exn2WabbfK///u/KYoib7/9diZNmpT+/fvnpptuyqWXXtoQlwYAAAAAgHpbr9onfPfdd1OpVHLEEUfkiCOOyKxZs/Lmm29m6dKl6d27d3r16lXtSwIAUGVFUaSurq6px6AJderUKZVKpanHAACARlf1aN6tW7fsvPPOefrpp5MkPXv2TM+ePat9GQAAGlBdXV26dOnS1GPQhObNm5fOnTs39RgAANDoqv54lq5du2aLLbao9mkBAAAAAKDBVf1O8+233z7Tpk2r9mkBAGgivU+9OZWaDk09Bo2gWLwgM75/dFOPAQAATarq0fycc87JwQcfnNtuuy2HH354tU8PAEAjq9R0SJt2onlrsKypBwAAgGag6tG8Y8eOOeGEE3LkkUfmkEMOyaGHHpo+ffqkQ4fV/4vWiBEjqj0CAAAAAADUS9Wj+V577ZVKpZKiKHLXXXflV7/61fsev3Tp0mqPAAAAAAAA9VL1aH7MMcekUqlU+7QAAAAAANDgqh7Nx44dW+1TAgAAAABAo2izrifYZ5998p//+Z+r3ffuu+9mwYIF63oJAAAAAABoFOsczR999NG8/PLLq9234YYb5otf/OK6XgIAAAAAABrFOkfz91MURYqiaMhLAAAAAABA1TRoNAcAAAAAgJZENAcAAAAAgJJoDgAAAAAAJdEcAAAAAABKVYnmN9xwQ9q2bbvKj0qlssZ9bdu2zXrrrVeNywMAAAAAQFVUpVoXRdGorwMAAAAAgIawztF82bJl1ZgDAAAAAACanGeaAwAAAABAyUPFAQAAWrGiKFJXV9fUY9DI/n7dO3XqlEql0sQT0Rhqa2ubegSAFkE0BwAAaMXq6urSpUuXph4DAKDZ8HgWAAAAAAAoudMcAACAJEnvU29OpaZDU49BI1haNzdvX3dCEuvemvz9ugOwZqI5AAAASZJKTYe0aSeetgbLFv//dbburcffrzsAa+bxLAAAAAAAUBLNAQAAAACgJJoDAAAAAEBJNAcAAAAAgJJoDgAAAAAAJdEcAAAAAABKojkAAAAAAJREcwAAAAAAKInmAAAAAABQEs0BAAAAAKAkmgMAAAAAQEk0BwAAAACAkmgOAAAAAAAl0RwAAAAAAEqiOQAAAAAAlERzAAAAAAAoieYAAAAAAFASzQEAAAAAoCSaAwAAAABASTQHAAAAAICSaA4AAAAAACXRHAAAAAAASqI5AAAAAACURHMAAAAAACiJ5gAAAAAAUBLNAQAAAACgJJoDAAAAAEBJNAcAAAAAgFKLjebPP/98LrvssowaNSq9evVKpVJJhw4d1nj8RRddlEqlssYf5557biNODwAAAABAc7ReUw9QXxdffHF++ctffujX7bbbbhkwYMAq24cNG1aNsQAAAAAAaMFabDQfPnx4tt122+y4447Zcccds/HGG6/V60444YSMHj26YYcDAAAAAKBFarHR/JxzzmnqEQAAAAAA+Ihpsc80BwAAAACAamuxd5rX18MPP5zJkydnwYIF6d27dw466CDPMwcAAAAAIEkrjOY33XTTSj+/4IIL8pnPfCZjx45Nly5dmmgqAAAAAACag1YTzQcMGJArrrgiBx10UPr27Zs5c+bk8ccfz9lnn53bb789S5cuzZ133rlW5xo8ePBqt0+bNi39+/ev5tgAAAAAADSiVhPNjz766JV+3rlz5xx11FHZe++9s80222T8+PF56qmnsuuuuzbRhAAAAAAANLVWE83XZJNNNsmYMWNyxRVX5L777luraD516tTVbl/THegAAAAAALQMbZp6gOZg4MCBSZKZM2c28SQAAAAAADQl0TzJnDlzksQXgQIAAAAAtHKtPpoXRbHiC0CHDRvWxNMAAAAAANCUWkU0nz17dm688cYsXLhwpe3z5s3LySefnAkTJmTjjTfOYYcd1kQTAgAA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T705lZoOTT0GjWBp3dy8fd0JSax7a/L36w4AAADwUSSaU1WVmg5p0048bQ2WLf7/62zdW4+/X3cAAACAjyKPZwEAAAAAgJJoDgAAAAAAJdEcAAAAAABKojkAAAAAAJREcwAAAAAAKInmAAAAAABQEs0BAAAAAKAkmgMAAAAAQEk0BwAAAACAkmgOAAAAAAAl0RwAAAAAAEqiOQAAAAAAlERzAAAAAAAoieYAAAAAAFASzQEAAAAAoCSaAwAAAABASTQHAAAAAICSaA4AAAAAACXRHAAAAAAASqI5AAAAAACURHMAAAAAACiJ5gAAAAAAUBLNAQAAAACgJJoDAAAAAEBJNAcAAAAAgJJoDgAAAAAAJdEcAAAAAABKojkAAAAAAJREcwAAAAAAKLW6aL5gwYJceOGFGTRoUDp06JBNN900xx13XGbMmNHUowEAAAAA0MRaVTRfsGBB9t1333z961/PvHnz8qlPfSqbbbZZrr/++gwdOjTTpk1r6hEBAAAAAGhCrSqaf/Ob38xTTz2V4cOH59VXX824ceMyYcKEXHnllZk1a1aOO+64ph4RAAAAAIAm1Gqi+eLFi/O9730vSXL11VenS5cuK/adddZZGTJkSB5//PE8//zzTTUiAAAAAABNrNVE8yeffDJz585N//79s/3226+y//DDD0+S3HXXXY09GgAAAAAAzUSriea//e1vkyRDhw5d7f7l25cfBwAAAABA67NeUw/QWKZPn54k6d2792r3L9++/Djqp1i8IMuaeggaRbF4wUr/bN1bB+veOln31sm6t07WvXWy7q2TdW+drHvrZN1bp79fdz68SlEURVMP0Rj+7d/+LT/84Q/zta99Ld/4xjdW2f/6669n4MCBGTRoUF555ZX3PdfgwYNXu/3ll19OTU1N+vfvX5WZW4ply5bl5ZdfbuoxAAAAAIB/sNVWW6VNm1bzwJEkybRp01JTU5P33nuvXq9vNXeaL/+7gUql8r7710WlUklNTc06n6eladOmTdq3b58kre4vDFq7adOmJbHurY11b52se+tk3Vsn6946WffWybq3Tta9dbLurdPydW9twTxJampq0rlz53q/vtVE8/XXXz9JUltbu9r9dXV1SZIuXbp84LmmTp1avcE+Ipbffe9/m9bFurdO1r11su6tk3Vvnax762TdWyfr3jpZ99bJurdO1r3+Ws1fM/Tp0ydJMmPGjNXuX759+XEAAAAAALQ+rSaab7vttkmSSZMmrXb/8u1DhgxptJkAAAAAAGheWk0032233dK1a9dMmzYtL7zwwir7b7vttiTJIYcc0tijAQAAAADQTLSaaN6uXbuceuqpSZJTTz11pWebf/vb386UKVOy++67Z8cdd2yqEQEAAAAAaGKt5otAk+T888/Pgw8+mKeeeioDBw7MHnvskTfffDMTJkxI9+7dc/311zf1iAAAAAAANKFKURRFUw/RmObPn59LL700t956a956661suOGGOfDAA3PxxRdns802a+rxAAAAAABoQq0umgMAAAAAwJq0mmeaAwAAAADABxHNAQAAAACgJJoDAAAAAEBJNAcAAAAAgJJoDgAAAAAAJdEcAAAAAABKojmrtWDBglx44YUZNGhQOnTokE033TTHHXdcZsyY8aHPNXfu3HzpS19K37590759+/Tt2zdnnHFG5s6dW/3BWSfVWvfHHnss/+f//J+MHDkyPXv2TKVSyVZbbdVAU7OuqrHuc+fOza233pqjjjoq//RP/5TOnTtn/fXXz84775yrrroqixcvbsB3QH1UY92XLFmSiy66KCNHjswWW2yR9ddfPx06dMjAgQPzxS9+MdOnT2/Ad0B9VPP397/32muvpWPHjqlUKjnwwAOrNC3VUq1179evXyqVyhp/vPzyyw30DqiPan/eX3/99Zx44onp169fOnTokJ49e2bXXXfN5ZdfXuXJWRfVWPexY8e+72d9+Y8bb7yxAd8JH0Y1P+/33ntvDjrooPTo0SM1NTX52Mc+lkMOOSQPPfRQA0zOuqjmut9zzz3Zf//9061bt3Tq1CnbbLNNLr/88ixZsqQBJqe+nn/++Vx22WUZNWpUevXqlUqlkg4dOtT7fHrd+6sURVE09RA0LwsWLMi+++6bp556Kptsskn22GOP/OEPf8izzz6bnj175umnn07//v3X6lzvvPNOhg8fntdeey1bbLFFdthhh0ydOjVTp07NgAED8swzz6R79+4N/I5YG9Vc9+222y6//e1vV9q25ZZb+pfpZqha637++efnkksuSZs2bbL99ttnwIABmTVrVn7zm99k4cKF2X333XPfffelU6dOjfCu+CDVWvd58+Zl/fXXT5cuXTJkyJBsuummWbRoUSZPnpzp06ena9euefjhhzN06NBGeFd8kGr+Ov+P9tlnnzz66KMpiiIHHHBA7r333ipPT31Vc9379euXN998M8cee+xq91966aXZZJNNqjk+9VTtz/udd96Zo446KgsXLsz222+fQYMG5Z133snvfve7dO7cOa+//noDvhvWVrXW/cknn8yPfvSj1e7761//mvHjxydJpk2bli222KKab4F6qObn/dvf/na+/OUvp1KpZLfddkuvXr3y+9//Ps8991yS5Nprr81JJ53UkG+HtVTNdf/Wt76Vc889N23atMnOO++cnj175plnnsmf//znfPKTn8yvf/3rrLfeeg38jlgbn/70p/PLX/5ypW3t27fPggULPvS59Lq1UMA/uOCCC4okxfDhw4v33ntvxfYrr7yySFKMGDFirc/1r//6r0WSYtSoUcXixYtXbD/ttNOKJMUxxxxT1dmpv2qu+1e+8pXikksuKe6///5i0qRJRZJiyy23bIixWUfVWvdLL720OO+884oZM2astP3VV18t+vTpUyQpvvrVr1Z1duqvWuu+ePHi4sknn1zp1/eiKIolS5YUX/3qV4skxc4771zV2am/av46//d+9KMfFUmKf/u3fyuSFAcccEC1RqYKqrnuffv2LfzrQ8tQzXWfPHly0a5du6J79+7FE088sdK+pUuXFs8991zV5mbdNNSv83/vmmuuKZIUu+222zqfi+qo1rr/+c9/Ltq1a1e0a9dulc/6bbfdVlQqlaJTp04rXYOmU611f/bZZ4tKpVLU1NQU991334rtc+fOLUaMGFEkKS677LKqz0/9XHbZZcV//Md/FHfddVfxxz/+sUhStG/fvl7n0us+mD/1spJFixYV3bp1K5IUkyZNWmX/kCFDiiTFxIkTP/BcM2fOLNq0aVPU1NQUf/zjH1fat2DBgqJnz55F27ZtV9lH46vmuv+jN954QzRvphpy3f/erbfeWiQp+vXrt07noToaa90XL15cdOjQoUhSzJs3b53OxbprqHX/05/+VGy44YbFfvvtVzzyyCOieTNT7XUXzVuGaq/7HnvsUSQp7rrrrmqPShU11u/vu+66a5Gk+MEPfrBO56E6qrnud911V5GkOPDAA1e7f9ttty2SFBMmTFjnuVk31Vz3448/vkhSnHjiiavse/HFF4skRc+ePYslS5ZUZXaqq77RXK9bO55pzkqefPLJzJ07N/3798/222+/yv7DDz88SXLXXXd94LnuueeeLFu2LCNGjMjHP/7xlfa1b98+hx56aJYuXZp77rmnOsNTb9Vcd1qOxlr3bbfdNkny9ttvr9N5qI7GWvdKpZI2bdqkTZs2/nPOZqCh1v3000/P/Pnzc+2111ZlTqrL7++tUzXX/aWXXsoTTzyRQYMG5ZBDDqn6rFRPY3ze33jjjTz11FNp165djjjiiHqfh+qp5rq3b99+ra650UYbfbghqbpqrvvzzz+fJNlrr71W2Td48OD06NEjs2bNylNPPbVuQ9Os6HVrRzRnJcufQ72m588u3/6Pz6tu6HPRsKxV69RY6/773/8+SbLxxhuv03mojsZY96Ioctlll6Wuri777LPPWv9LGA2nIdb97rvvzrhx43LeeedlwIAB6z4kVddQn/fLL788J510Us4444z893//d2bNmrVug1JV1Vz35V/8t//++2fBggW54YYbctppp+X000/Pj370o7z77rtVmpp11Ri/v998881JkpEjR2bDDTes93monmqu+4477rji+2iefPLJlfbdcccdmTJlSnbddVe/5zcD1Vz32traJFnjZ3r5X5JoAR8tGtDacesXK5k+fXqSpHfv3qvdv3z78uMa61w0LGvVOjXWul911VVJkk996lPrdB6qo6HW/Zxzzsmf/vSnvPvuu5kyZUqmTZuWrbbaKv/93/+9bgNTFdVe99ra2pxyyinZcsstc84551RnSKquoT7vZ5999ko/P/PMM/Nf//VfOf744+sxJdVWzXWfOnVqkqRjx47Zbrvt8sorr6y0/6tf/Wpuv/32jBgxYl1Gpgoa4891t9xyS5LkX//1X+t9DqqrmuverVu3/OhHP8rnP//5jBgxYsUXgb7xxht57rnncuCBB2bs2LFVm536q+a69+zZM6+99lrefPPNVfYtW7Ysb731VpLkD3/4Qz2npTnSgNaOO81Zybx585IknTp1Wu3+zp07r3RcY52LhmWtWqfGWPcf/OAHefDBB9OtW7ece+659T4P1dNQ63777bfnhhtuyJ133plp06blE5/4RMaNG5fNN9983QamKqq97ueff37efPPNXHvttWnXrl11hqTqqr3u//zP/5w77rgjb775Zurq6vLiiy/mrLPOysKFC3PCCSdk/PjxVZmbdVPNdZ8zZ06S5Lvf/W7+8pe/5I477sjcuXPzyiuv5Kijjsrs2bPz6U9/OjNnzqzS9NRXQ/+57tlnn80rr7ySDTfcMCNHjqzfkFRdtdf98MMPzz333JPu3bvnySefzLhx4/Lss8/mYx/7WPbZZ5907969OoOzTqq57nvuuWeS5IYbblhl37hx4zJ//vwkyXvvvVevWWmeNKC1I5qzkqIokvztWbTvt7+xz0XDslatU0Ov+2OPPZYzzjgjlUolP/nJT7Lpppuu0/mojoZa99dffz1FUWTWrFm599570759+wwbNmy1fwCn8VVz3SdOnJjvfe97OeaYY7L33ntXZT4aRrU/7//1X/+Vww47LH369EnHjh0zePDgXHnllbnmmmuSxH910ExUc92XLl2aJFmyZEluvvnmHHbYYenatWsGDRqUW265JTvuuGPmzJmTq6++et0HZ5009J/rlj+a5cgjj/SXpc1Itdf9yiuvzP77758RI0ZkypQpmTdvXqZMmZLhw4fnK1/5So488sh1npl1V811/+IXv5iuXbvmmWeeyejRo/P6669n7ty5GTduXL74xS+u+G6iNm3kw48SDWjt+H89K1l//fWT/P/nWv2jurq6JEmXLl0a9Vw0LGvVOjXkuk+ZMiWf/vSns2jRolx11VU57LDD6j8oVdXQn/cePXrkgAMOyEMPPZRNN900J5988or/rJOmU611X7JkSU488cR07do1V1xxRXWHpOoa6/f3E044IR/72Mfy6quv5o033linc7HuGuLP87169conP/nJVfaPGTMmSfLoo4/WZ1SqqCE/70uWLMm4ceOSeDRLc1PNdX/sscfy7//+79luu+3yi1/8Ittss006d+6cbbbZJrfddlu233773H777bn//vur9waol2que69evXLnnXdmo402yg033JCBAwdmww03zL/8y79ks802y3HHHZdkzc88p2XSgNaOZ5qzkj59+iRJZsyYsdr9y7cvP66xzkXDslatU0Ot+7Rp03LAAQdk7ty5ueiii3Laaaet26BUVWN93rt27ZpDDjkk11xzTR544IEVf+CmaVRr3WfMmJHJkydn4403zmc/+9mV9s2dOzfJ3/4T/r322itdunTJr371q3WcnHXRWJ/3Nm3apH///vnzn/+cmTNneixTE6vmuvfr1y9J0rdv3/fd/+c///lDTkm1NeTn/f7778+f//znbLHFFtl1113rPyRVV811v/HGG5Mko0aNWuWu4rZt22bUqFF54YUX8uijj672L9FoPNX+vO+9996ZNm1axo0blylTpqRNmzbZeeed89nPfjbHHHNMkmTw4MFVmJzmQgNaO6I5K9l2222TJJMmTVrt/uXbhwwZ0qjnomFZq9apIdb97bffzv77758//vGPOeOMM3LhhReu+6BUVWN+3nv06JEkmTVr1jqfi3VT7XX/4x//mD/+8Y+r3Tdnzpw89thj6dq1az0mpZoa8/O+/NnXrf2OpOagmuu+/fbbJ0n+8pe/rHb/O++8k8S6NwcN+Xlf/miWo48+up7T0VCque7LI9kGG2yw2v3Lt6/p1wMaT0N83rt165YvfOELK21bsmRJHnvssbRp08YXPn/EaEBrqYC/s3DhwqJr165FkmLSpEmr7B8yZEiRpHj22Wc/8Fxvv/120aZNm6Jdu3bFn/70p5X2LViwoOjZs2fRpk2bYubMmVWbn/qp5rr/ozfeeKNIUmy55ZbVGJUqqva6/+Uvfyk+8YlPFEmKMWPGFMuWLav2yFRBQ37e/9Gee+5ZJCl+8YtfrPO5WDeNse6PPPJIkaQ44IAD1mVUqqixPu8vvvhiUalUik6dOhULFy5cp3Ox7qq57rW1tUXnzp2LmpqaYvr06avsP/7444skxfHHH1+V2am/hvq8v/fee0WnTp2KJMWrr75arXGpkmqu+zHHHFMkKY455pjV7j/66KOLJMWll166znOzbhrr9/exY8cWSYqDDz54nc5Dw0lStG/f/kO/Tq9bO6I5q/ja175WJCl23XXXYt68eSu2X3nllUWSYvfdd1/p+O9973vFlltuWZx77rmrnOvzn/98kaT4zGc+UyxevHjF9tNPP71IUhx99NEN90b4UKq57n9PNG/eqrXutbW1xS677FIkKY444ohiyZIljTI/9VOtdf/lL39Z3H333av8BUltbW1x3nnnFUmKjTfeuHjvvfca7s2w1hrq1/nlRPPmqVrrfu+99xYTJ05c5fy//e1vi6233rpIUpx++ukN8yb40Kr5eT/33HOLJMXIkSNXOtc999xTrLfeekWlUikmTJjQcG+GtdYQv87fcMMNRZJil112abC5WTfVWvc77rijSFK0bdu2+J//+Z+V9o0fP75o06ZN0aZNm+Lll19uuDfDWqvm533ixImr/Hn+/vvvL9Zff/2iQ4cO1rwZ+6BortetG9GcVcyfP7/YeeediyTFJptsUhxxxBErft69e/fitddeW+n4Cy+8sEhSHHvssauca9asWUX//v2LJEX//v2LI488csWdqP379y9mzZrVSO+KD1LNdf/hD39Y7LzzzsXOO+9cbLfddkWSokOHDiu27bzzzsXzzz/fSO+M91Otdf/Sl7604g/ZRx11VHHssceu9gfNQ7XWffn2TTfdtBg5cmRx1FFHFfvss0+x0UYbFUmKrl27Fo8//ngjvjPeTzV/nV8d0bx5qvbnvW/fvsU+++xTHHnkkcVOO+1UrLfeekWSYs899yxqa2sb8Z3xfqr5eZ8/f36x2267rTjXpz/96WLXXXct2rRpUyQpLrnkkkZ6V3yQhvh1fv/99y+SFFdffXUDT099VWvdly1bVnz2s58tkhRJih122KH47Gc/W+ywww4rtvm8Nx/V/Lz37du36N27d3HQQQcV//Iv/1Jsv/32RZKiY8eOxa9+9atGekesjV/96lcrdZUkRaVSWWnb36+ZXrduVv52B0jSoUOHPPLII7ngggvSqVOnjB8/Pn/4wx9y7LHH5oUXXsiAAQPW+lw9evTIc889l9NOOy2LFi3KnXfemb/+9a859dRT8+yzz6543i1Nr5rrPmPGjEyYMCETJkzI5MmTkyQLFixYsW3ChAl59913G+id8GFUa92XP8t26dKlufXWW3PDDTes9gfNQ7XWfdSoUTnrrLPSq1evPPfcc/n5z3+e5557Ln379s1Xv/rVvPTSS9ljjz0a+N2wtqr56zwtR7XW/YADDshxxx2XDTbYIL/97W9z++235/XXX8/uu++eH/7wh3nooYfSqVOnBn43rK1qft47dOiQhx9+OJdcckm6deuWe+65J1OnTs3ee++dX/3qVznvvPMa8J3wYVT71/mZM2fm4YcfTk1NTY488sgGmpp1Va11r1QqGTduXH784x9nxIgRef3113PnnXfmD3/4Qw4++ODcc889Pu/NSDU/7yeddFJ69eqVCRMm5I477shf/vKX/Nu//VtefPHFjBw5sgHfBR/WrFmzVuoqSVIUxUrb1vb7pPS6D1YpiqJo6iEAAAAAAKA5cKc5AAAAAACURHMAAAAAACiJ5gAAAAAAUBLNAQAAAACgJJoDAAAAAEBJNAcAAAAAgJJoDgAAAAAAJdEcAAAAAABKojkAAAAAAJREcwAAAAAAKInmAAAAAABQEs0BAFhntbW1+c53vpO99947H//4x9OuXbtsuOGGGT58eP7jP/4j06dPb9R5+vXrl0ql0qjXXFtz587NBRdckO222y6dO3dOx44d06dPn4wYMSJf+9rXMnny5JWOHzt2bCqVSi666KIGnevRRx9NpVLJ6NGjm+T6SfKHP/whlUole+21V4Nf64P84he/yAEHHJAePXqkpqYmH/vYxzJkyJAcf/zxueWWW5p6PAAAGtB6TT0AAAAt2zPPPJNRo0Zl5syZ6dSpU3bZZZd8/OMfz1//+tc899xzeeaZZ/Kf//mf+dWvfpX99tuvqcdtUm+++WZGjBiR6dOnZ/3118+uu+6aj33sY5k9e3YmTpyYJ554Iu+8805+8IMfNPWozcrYsWMzZsyYXHjhhY0S70ePHp0bbrghSbLDDjtk8803z9KlSzN16tT85Cc/yS233JLPf/7zDT4HAABNQzQHAKDepkyZkn322Sfz58/POeeckwsuuCCdO3desX/ZsmUZP358zj777MyYMaPR5nrooYeyePHiRrve2jr11FMzffr0HHLIIbn55pvTtWvXFfuWLFmSBx54IH/6059Wes1hhx2WXXbZJT169GjQ2Xbaaae89NJLK83U2Hr16pWXXnopnTp1arIZbr/99txwww3ZcMMNc//992eHHXZYaf9rr72WH//4x000HQAAjUE0BwCgXoqiyNFHH5358+fnoosuyoUXXrjKMW3atMmoUaOy77775q233mq02fr3799o11pb8+fPz7333psk+e53v7tKnF5vvfVy0EEHrfK6rl27NkrI7tSpU7baaqsGv877qampafIZ7rjjjiTJF7/4xVWCeZIMHDgwl112WWOPBQBAI/JMcwAA6uW+++7L7373u/Tu3Ttf+9rX3vfYrl275hOf+MRK2+rq6nLxxRfnE5/4RDp27JiuXbtmxIgR+dnPfrbac7zzzjs577zzMnjw4HTp0iVdu/6/9u49qOo6/+P48wABooCGEoiVA5jstiCMBBoqmiagFGiW45BCLSLbppujqyZpramks+RlM0oqjVob1zbwwmpmhhd2XfBCXjba9ZJL6gIqoBKGwvf3h5yzng7IRX7btr0eM8zo5/45348zzvt8eH/due+++5g0aRKFhYVWbZvKaX5zvuza2lrmzJnDvffei5OTE/7+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acSIEQDk5uZ2+NhNOXHiBPDvwOp/q8rKSqDpVDeVlZWWHNsdxdHREYDr16/fsl1ycjL29vZkZWW1OzVLS7n6m3pG5nOyevXqFsc35xfPy8ujqqrKpt58/s3pelrjP31ORURERP7XKWguIiIiIu1iMpl4//33cXZ25qWXXuL555+npqbGqo1hGGzatInQ0FDLSwg7d+7M008/TUNDA7/85S+t+vz9739n4cKFAEydOtVSnpuba/WCR7NDhw5RVlaGq6sr3bp16/A9jhs3joCAANauXcuSJUu4du2aVX1dXR0fffSR5cWXt1JVVUV4eDg5OTk241y7do2FCxdSXFxMp06diI6O7tB9dDR/f3/s7OzYuXOn1RcfV69eJTU1lYsXL3bofOYA9ZdffnnLdj4+PsTGxrJ//34KCgro16+fJe98ayUnJ7No0SL+9a9/2dQVFRXx8ssvAzB27FirPt27d2fz5s289tprNoH3PXv2UF1dDdx4Sevo0aO5fPkyv/rVr6zOwl/+8hcyMzOxt7fnmWeeafWaBwwYwPDhw/nss8+YPn06V65csapvaGhg+/btlpeQioiIiMitKT2LiIiIiLRbcHAwO3bs4LHHHuOVV15h5cqVDBw4kLvuuovq6mr2799PWVkZzs7O3H333ZZ+6enp7Nu3j08++QRfX18iIyOpqalh586dXL16lWnTpjF69GhL+/z8fFasWIGPjw8hISG4ublx9uxZ9u7dS0NDAy+//DJ33HFHh+/PwcGBnJwcoqKimDNnDitWrCAoKAg3NzdKS0spKSmhqqqKnJwcAgMDWxyvsLCQsWPH4ubmRv/+/fHy8qKqqori4mLOnTuHvb09mZmZeHl5dfheOpKnpyc///nPycrKol+/fjz00EN06tSJPXv2UF9fT1JSEmvXru2w+QYMGICnpycffvghQ4cOxdfXFzs7O55++mkefPBBq7bmvPdAq/PC3+zChQu88847zJ8/n8DAQPr06QPcuGF+6NAh4EaO+1/84heWPnfeeSd/+MMfiIuLY+rUqSxfvpz+/fvzzTffcOzYMU6dOsWpU6dwd3cH4M0332Tw4MFkZ2eza9cuBg4cSEVFBfn5+dTX15ORkUFQUFCb1v373/+ekSNHsnz5crKzswkODqZHjx6cOXOGL7/8koqKCpYtW2a56S4iIiIizVPQXERERERuS0REBMePH+fNN99k8+bNHD58mMrKSrp06ULfvn1JTU0lOTnZKpWHq6sru3btIiMjg/Xr17Np0yYcHR0JDQ3lmWeeYcKECVZzJCUl4eDgwO7duyksLKS6uhovLy9GjRrF9OnTGTp06P/b/gICAiguLmblypXk5OSwd+9eDMPA29ubIUOGMGbMGEt6jFtxd3fnz3/+M9u2bSM/P5+TJ09SUFCAvb0999xzD6NHj2bq1KltDpZ+XzIzMwkICODtt9/m008/xd3dnREjRrBo0SLWrFnToXM5OzuTl5fH3LlzKSwsZPfu3RiGwaBBg2yC5pGRkdjb2+Po6EhCQkKb53rttdcYNWoU27dv529/+xvbt2+ntrYWDw8PoqOjSUhIICEhwSZ10LBhwyguLmbJkiV8/PHH5Obm4ubmhp+fHykpKVZfhPj4+FBUVER6ejq5ubl89NFHuLi4MHz4cGbMmMHIkSPbvO677rqLffv28cYbb7B+/XqKioqoq6vD29ubkJAQ4uLieOKJJ9o8roiIiMiPkcloKWmfiIiIiIjID8S6detISEggMTGxQ2+7i4iIiMiPh4LmIiIiIiLyP+HatWs88MADfP755xQWFvLAAw9830sSERERkR8gpWcREREREZEftE2bNpGbm0thYSHHjh1jzJgxCpiLiIiISLvZfd8LEBERERERuR0HDx5kzZo1nD17loSEBN55553ve0kiIiIi8gOm9CwiIiIiIiIiIiIiIo1001xEREREREREREREpJGC5iIiIiIiIiIiIiIijRQ0FxERERERERERERFppKC5iIiIiIiIiIiIiEgjBc1FRERERERERERERBopaC4iIiIiIiIiIiIi0khBcxERERERERERERGRRgqai4iIiIiIiIiIiIg0UtBcRERERERERERERKSRguYiIiIiIiIiIiIiIo0UNBcRERERERERERERaaSguYiIiIiIiIiIiIhIIwXNRUREREREREREREQaKWguIiIiIiIiIiIiItLo/wAlcFUptrTwSAAAAABJRU5ErkJggg==",
776 | "text/plain": [
777 | ""
778 | ]
779 | },
780 | "metadata": {},
781 | "output_type": "display_data"
782 | }
783 | ],
784 | "source": [
785 | "import matplotlib.pyplot as plt\n",
786 | " \n",
787 | "n, bins = np.histogram(results, bins=np.arange(0, 1.1, 0.1))\n",
788 | "plt.figure(figsize=(10, 6), dpi=150)\n",
789 | "plt.bar(bins[:-1], n, width=0.1, align='edge', edgecolor='black')\n",
790 | "plt.xticks(np.arange(0, 1.1, 0.1))\n",
791 | " \n",
792 | "plt.xlabel('Cosine Similarity Score')\n",
793 | "plt.ylabel('Frequency')\n",
794 | "\n",
795 | "#plt.title('Similarity Score Distribution between Generated and Reference Output ', fontweight = \"bold\")\n",
796 | "plt.tight_layout()\n",
797 | "plt.savefig('similarity_score_distribution_140samples.png')\n",
798 | "plt.show()\n"
799 | ]
800 | },
801 | {
802 | "cell_type": "code",
803 | "execution_count": 145,
804 | "metadata": {},
805 | "outputs": [
806 | {
807 | "data": {
808 | "image/png": "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qswuo8FiwoIcwbc7FRcX69prr1Vpaanmz5+v2267zfHZvHnzdM899+iaa67R9u3bHWcmzpkzRzabTatWrVL//v1rzbdq1SolJCQ4xrNmzVJMTIw2bNjgCNIl+/+XpUuX1nr3/fff19NPP61+/frpo48+cjxfWVmpO+64Qy+99JJmzJihOXPmSJKWL1+uFStW6K9//as++uijWuFyYWGhtm/fbsRvkV9r9jvNly1bpqFDh+rkk0/W6tWra/0hslqtGjhwoNatW6evv/5a5513XqPra+pPNwAAAAAAAID6Ot6u3MLSSvWZ+T8zSmuSDdPPU2x4cKPfr+9O89dff1033nijhgwZou+///6ozwcMGKA1a9bo3Xff1VVXXSVJ6tmzp/bu3auDBw8et46IiAh169ZN69evP+6zffv21YYNG7RlyxZ179691mdlZWVKTU1VWVmZ8vPzFRAQoPfff19XXnml5s2bpwkTJhx3fl/hyZ3mzf7fZbz55puSpFGjRh31Gx0YGKhRo0ZJ0lE/4QEAAAAAAADgn5YvXy5Juvbaa+v8fMyYMbWek6T+/furoKBAN910k3799dc/nb9///7asGGDJk+erB07dhzzuf3792vDhg064YQTjgrMJSksLEwDBgxQQUGBtm3bJskesgcEBGjOnDn6z3/+o6Kioj//xeIozT4037VrlyQpJiamzs9r7h84cMBjNQEAAAAAAAAwz549eySpVusUVzX3a56TpMcff1x9+vTRa6+9ppNOOkktW7bUX//6V73++usqLy+v9f5zzz2n1NRUzZ49W126dFFSUpKuuuoqLVy4UNXV1Y7nsrKyJEm//fabLBZLnV+ff/65JDnOauzWrZvmzJmj3NxcXX311YqPj1ffvn01ceJEumDUU7Pvad6mTRtJUlpaWp2fr169WtKxv0FwbLlF5XpvdbZWZhzQ4fIqRYUG6dROCRo9IFkto0PNLg8AAAAAAKDZigkL0obpjW9FbJaYMM/Gmcfrn+76eXJystLS0vTdd9/p888/17Jly/TZZ5/p008/1ZNPPqkVK1YoPj5ektS7d29t3rxZX331lb744gstW7ZM7733nt577z2dccYZWrx4sUJCQmS1WiVJbdu2PW7raNee6ffcc4+uuOIK/fe//9U333yj5cuX66mnntK8efP0zDPP6Pbbb2/sb0mz0GxC82ef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5MiRatOmjUJCQpSQkKCePXvq2muv1csvv6yKigqzS3SrzMxMWSwWDR061NQ6hg4dKovFoszMTFPr+CNCc3hMeEigBndKcIyXpu+XrFZpwQKpWzdp1izzigMAAAAAAECzMH36dJ133nn65JNP1LJlS11yySUaPny4goOD9e677+pvf/ubDhw4YHaZTbJ06VJZLBaNHTvW7FJ8UpDZBaB5Gda9pZZtzZUkLUnfrynbv5Huusv+4VNPSbfdJiUlmVghAAAAAAAA/FVaWpoefvhhhYSE6OOPP9aFF15Y6/Pdu3fr5ZdfVmhoqEkVwhuw0xweNfTIYaCStPX3w9o98kqpdWv7jdJSado0kyoDAAAAAACAv/v4448lSaNHjz4qMJekpKQkzZgxQ/Hx8Z4uDV6E0BwelZIYqU6JkY7xkj1l0syZzgcWLJA2bPB8YQAAAAAAAPB7ubn2DggtW7as9zsWi0UpKSmqqqrSI488oi5duig8PFwnnHCCXn/9dcdz3333nYYNG6aYmBjFx8fruuuuU35+fp1z5ufna9KkSeratavCwsLUokULnX/++frf//53zDo2b96sa6+9Vm3btlVISIiSkpJ03XXXKT09vdZzY8eO1bBhwyRJb7zxhiwWi+NrxowZR81bWlqqyZMnq2PHjgoNDVWXLl00e/Zs2Wy2OuvIzc3VxIkT1b17d4WFhSk+Pl4XXHCBvv/++2PW/tJLL+mkk05SWFiYkpKSNH78eBUWFh7zebMRmsPjXHebL03fL910k3TCCfYbNpt0330mVQYAAAAAAAB/1r59e0nShx9+6AjQ62v06NGaM2eOOnfurDPPPFMZGRm68cYb9frrr2vhwoUaMWKEioqKdO655yoyMlL//ve/NXLkyKPC5927d2vQoEGaO3euKioqNHLkSPXr10/ffvutRowYoXnz5h219uLFizVgwAC98847ateunS677DK1atVK//73vzVgwAAtX77c8ewZZ5yhESNGSJI6d+6s66+/3vHVt2/fWvNWVFTovPPO00svvaQTTjhBw4YN0+7duzV58mRNq6MjxJYtW9SvXz899dRTslqtuvDCC9W7d2/HDwzeeeedo96ZOHGibr31Vm3btk1nn322Bg8erLffflvDhg1TeXl5g/4feIrFdqwfGcBQvXr1kiRt2rTJ5ErMt3xbrv7v1VWSpPDgQK176FyFff2ldMklzoe++ko68s0NAAAAAACAhqmurnbsQO7evbsCAtg7K0k7duzQiSeeqLKyMsXExGjkyJEaMmSIBg8erJ49e8pisRz1Ts29E088UV9++aUjeF+yZInOPvtstW3bVhUVFXrxxRd12WWXSZIOHTqk0047TZs2bXIEyjUuueQSff755/q///s/vfrqqwoODpYk/fDDDxoxYoTKy8u1du1a9e7dW5JUXFyszp076/fff9f8+fN12223OeaaN2+e7rnnHrVv317bt2939GJfunSphg0bpuuvv14LFiw46teUmZmp1NRUSdKQIUP00UcfKTExUZK97/vgwYMVEhKi33//XVFRUZIkq9Wqvn376tdff9U///lPjR8/3vF7s27dOp177rkqKyvTzp071aqVfdPsihUrdPrpp6tFixb6/vvvHRlpfn6+zj77bG3cuFGSlJGRoZSUlD/9f9eQP9NNzWL5boHHDUptofDgQElSaaVVqzIOSBddJA0d6nxo0iTJajWnQAAAAAAAgOairEwqKKj/V137bwsL6/9+ScnR71dUHP+9sjJDfrmdO3fWJ598onbt2unQoUN68803dcstt+jEE09UmzZtdN9996mgoKDOd5955hlHYC5Jw4YN08knn6y9e/fqoosucgTmkhQTE6O//e1vkqRly5Y57u/cuVOff/65YmJi9MwzzzgCc8m+Q/y2226T1WrV888/77j//vvv6/fff9eQIUNqBeaSdPfdd6t///7atWuXo197QwQEBOiVV15xBOaSNGDAAF1wwQUqKSlRWlqa4/5nn32mX3/9VVdffbXuvPPOWj9g6Nevn6ZNm6bi4mK99dZbjvsvvPCCJOnee+91BNmSlJCQoDlz5jS4Xk8hNIfHhQYF6vQuzm/EJen7JYtFmjvX+dAvv0hvvmlCdQAAAAAAAM3IrFlSfHz9v+rqQ92xY/3fHzfu6Pffeef4782aZdgv+bzzztPOnTv1/vvv65ZbblHv3r0VEBCg/fv3a86cORo4cOBRrVtCQkJ01llnHTVXp06dJEnnnnvuUZ917txZkrR3717HvR9++EGSdOGFFyouLu6od/7v//5Pkmq1W6m5vvbaa+v89YwZM+aod+orJSVF3bp1O+p+zT3X2r/55htJ0siRI+uc64wzzpAkrV692nGv5tc7evToo54/77zz1KJFiwbX7AmE5jDFsB7OwxaWph/5S6h/f8n1m3/qVKm42MOVAQAAAAAAwN+Fhobqiiuu0EsvvaQNGzZo3759evLJJxUREaHt27frgQceqPV8mzZt6mwHEhkZKUlKSko65meufbv37NkjScdsRVJzv+a5xr5TX647513VtGRxrT0zM1OSdOWVV9Y6XLTma8CAAZKkvLy8WrVbLBYlJyfXuU6HDh0aXLMnBJldAJon18NAM/KKlZFXrNTESOmxx6SFC6XycmnPHunZZ6X77zexUgAAAAAAAPi7li1batKkSQoPD9f48eO1aNGiWp/X1eu8IZ/X9/ma+3/WW92oGhr6jvVIK+ULLrjA0bO8Lj169GhwHd6G0BymSIoLV/fW0Ur/vUiStDR9v1ITU+3/nOeuu6RnnpHuvlv6Q58mAAAAAAAAGGjyZGnChPo/Hxt79L2srLp7ndclJOToe9dcIx2j5YdDWFj95m+ioUfO3HPdLW2kdu3aSbIffFmXmt3cbdu2rfc7WVlZR73jDjW70m+77Tb95S9/qdc7bdu2VWZmpnJyctSlS5ejPs/Ozja0RqPQngWmGerSomVJukufqAcekLZulR5/vO6/iAEAAAAAAGCMsDApLq7+X3XtTI6Nrf/7ERFHvx8Scvz3DArNbccJ93fs2CHJGVQbrabv96JFi+o8cLTmEM0hQ4Y47tVcv/3223XOWXPf9Z2QIz+cqKqqanrRR5xzzjmSpP/+97/1fqfm1/vBBx8c9dk333yjAwcOGFKb0QjNYZphLi1aft6Zr5KKI9/EsbHSMfocAQAAAAAAAI01bdo03XfffXXu2t62bZvuvfdeSdKoUaPcsn6nTp100UUXqaioSHfddZcqKysdn/3000+aP3++AgMDNc7lwNTRo0erdevWWr58uV566aVa8z3zzDNavXq12rdvr0svvdRxvyb0T09PN6z2yy+/XD169NCCBQs0e/bsWrVLUkVFhT766CP98ssvjnu33nqrJOnpp5/Wb7/95rh/4MAB3XfffYbVZjRCc5imf8d4RYfaOwRVVFXrpx35JlcEAAAAAAAAf3b48GHNmTNHnTt31gknnKBRo0bpyiuv1ODBg9WjRw/t2LFD/fv31/Tp091Ww4svvqjU1FS9+eab6tq1q66++mqdc845GjJkiIqLi/Xkk0+qd+/ejucjIyP19ttvKzw8XLfeeqsGDBiga665RieffLLuuusuRUZG6p133lFoaKjjnZSUFPXu3VtpaWkaNGiQbrjhBt1888369NNPG113UFCQPv74YyUnJ2vy5Mnq2LGjzj//fI0ePVqDBw9W69atddlllzl260v2neYTJkxQXl6e+vXrp4svvlhXXHGFunbtKkk69dRTG12POxGawzTBgQEa0i3RMV6Svr/uBysqpH/9S1q+3EOVAQAAAAAAwB9NnTpVb775pq655hoFBQVp2bJl+uijj7R9+3adddZZeu6557RixQrFurFlcFJSklavXq17771XQUFB+uijj7RmzRoNHz5cX3/9te65556j3hk+fLhWr16tq6++Wrt27dLChQu1b98+jRkzRmvWrKnVmqXGhx9+qJEjR2rnzp1688039eqrr2rt2rVNqr1Hjx5av369ZsyYoVatWumHH37QokWLlJubqzPPPFOvv/66o41Ljaefflrz589Xly5d9M033+jHH3/U6NGjtWTJklpBvzex2I7XyAeG6NWrlyRp06ZNJlfiXd5Py9F9CzdKsh8O+sP9w2qf2rt0qXTLLdL27VL//tKqVVIAP+sBAAAAAAD4M9XV1Y7WHN27d1cAeQp8XEP+TDc1i+W7BaYa2s15GOjuglJt33+49gOhofbAXJLWrJH+8x8PVgcAAAAAAACguSE0h6laxYTpxKQYx/ioFi2DB0uXX+4cP/CAVFbmoeoAAAAAAAAANDeE5jDdsO6tHNdLtuQe/cATT0jBwfbrrCx7f3MAAAAAAAAAcANCc5huqEtovjrzgIrKKms/0KWLNG6cc/zYY1J+voeqAwAAAAAAANCcEJrDdH2T4xQXYd9JXlVt04/b845+aNo0qebU4sJC6dFHPVghAAAAAAAAgOaC0BymCwyw6CyXA0G/27L/6IcSEqQHH3SOn3tO2rHDA9UBAAAAAAAAaE4IzeEVavU1T8+VzWY7+qHx46WOHe3XlZXSlCkeqg4AAAAAAABAc0FoDq9wZreWsljs17lF5dq059DRD4WF2fuZ1/jgA+mnnzxTIAAAAAAAgA+x1AQtUt2bEwEfU11d7bh2/fPtDoTm8AotIkPULznOMV6aXkeLFkm6+mqpf3/7dXS0lJHh/uIAAAAAAAB8jMViUWBgoCSpvLzc5GqApisrK5MkBQUFEZqj+fhji5Y6BQRITz0l3X67tH27dM01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AAAAAAAaxbDQfOrUqerRo4cefPBBBQQcPa3FYtEDDzygHj16aNq0aZKk8ePHq1OnTlq6dKlRZQBeLTXxz3ear3HpZ96zbYwiQgz7xyDNnusPIH7ZXahKa7VnFr7wQunss53jiRPtfc4BAAAAAADglQwLzX/++Wf17NnzuM/17NlTK1eudIxPPPFE7d+/36gyAK/mutN8f1G5io/sKq+R5tLPnNYsxurZNkbBgfbzFMqrqpW+r8gzC1ss0ty59v9K0q+/SgsWeGZtAAAAAAAANJhhobkkpaenN/iZwMBAhYeHG1kG4LXaxoQpNMj5bZf5hxYtawjN3SYsOFA928Y4xus81aJFkvr1k/7v/5zjadOkw4c9tz4AAAAAAADqzbDQfPDgwVq3bp2efvrpYz4zb948rV27Vqeddprj3s6dO9WunQcO5AO8QECARR0TIhzjzLwSx/Xvh8q062CpYzwghdDcaP06OH9P17scuOoRjz4qhYXZr/fulZ56yrPrAwAAAAAAoF4Ma5j8+OOP6/vvv9ekSZP02muv6bLLLlNycrIsFouys7P14Ycf6rffflN4eLgee+wxSVJ2drY2btyov//970aVAXi9jgmR2vq7fZex607ztEznLvOkuHC1jeVfYBit9mGgB4/9oDskJ0t33y098YR9/OST0t/+JrVt69k6AAAAAAAA8KcMC8379eunb775RjfccIM2b96szZs3y3Kkh6/NZpMkdenSRa+//rr69esnSYqOjtaKFSvUqVMno8oAvN6xDgNNczkElNYs7uEamu/ILVZhaaViw4M9V8DkydIrr0i5uVJJifTQQ9LLL3tufQAAAAAAAByXYaG5JJ122mnasmWLvvvuO61YsUJ79uyRJLVt21annXaazj77bAUEODvCxMfH65RTTjGyBMDrpSS4hOYuO83XuvQzpzWLe3RMiFB8RLAOllRKkjbuKtCQri09V0BMjDRjhnT77fZWLW3aSDab85BQAAAAAAAAmM7Q0FySLBaLhg8fruHDhxs9NeAXUhKdPc0zjvQ0L62watOeQ477J3cgNHcHi8WiPslxWpqeK8ne19yjobkk3XKLlJkpjR9vb9kCAAAAAAAAr2LYQaAA6se1PUve4XIVlVVqfU6BqqrtbYwiQwLVo020WeX5PdcWLetyCjxfQHCwvZ85gTkAAAAAAIBXMnyneUZG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5+Y7FxERERERERGRibBoTkTUiQwJ7wJ/DycAgEqtwdazeeY7mYMDMHSotv3f/wJFReY7HxERERERERGRCbBoTkTUiUilElwbEyi2zR7R8uqrgKen8Ly0VCicExERERERERHZMBbNiYg6mRk6ueZ7UwtRpqg138n8/ICXXtK2ly4F0tLMdz4iIiIiIiIionZi0ZyIqJMZ3sMHXVzlAIAalRo7zuab94SPPgqEhwvPa2uBF14w7/mIiIiIiIiIiNqBRXMiok7GQSbF1L7aBUE3nc4x7wmdnYG339a2V60C9u837zmJiIiIiIiIiNqIRXMiok5oeqy2aL4ruQCVyjrznvCmm/QXBX3qKUCjMe85iYiIiIiIiIjagEVzIqJOaFSkHzycHQAAyjo1diUXmPeEUinw/vva9sGDwoxzIiIiIiIiIiIbw6I5EVEn5OggxZQ+gWLb7BEtADBuHDBnjrb9/POAUmn+8xIRERERERERtQKL5kREndT02CDx+c5z+VDUqsx/0nffBWQywNERuP56oM7MsTBERERERERERK3EojkRUSc1tqcf3BxlAIDKGhX+TTFzRAsA9OoFfP89kJwM/O9/gJub+c9JRERERERERNQKLJoTEXVSznIZJvQOENubT+da5sR33gl0726ZcxERERERERERtRKL5kREndj0ftqIlq1n81BTp7biaIiIiIiIiIiIrI9FcyKiTmx8L384y4UfBeWKOuw/X2j5QdTVAVu2WP68REREREREREQGsGhORNSJuTk5YFy0v9jelGihiBYA0GiAdeuA2Fjg2muBhATLnZuIiIiIiIiIqBksmhMRdXK6ES1bzuSiTmWhiBaNBli8GDh3Tmg//bSwjYiIiIiIiIjIilg0JyLq5Cb2CYCjTPhxcKWqFocuFFvmxFIp8P772vbevcDq1ZY5NxERERERERFRM1g0JyLq5Dyd5RjT009sbzydY7mTT5wIzJypbT/7LFBTY7nzExERERERERE1wqI5ERFhWr+u4vN/kvKgVlswJuV//xNmnQNAWhrw9deWOzcRERERERERUSMsmhMREab2DYSDVAIAKChX4mjGFcudvG9f4N57te0lS4CSEsudn4iIiIiIiIhIB4vmREQEb1dHjIz0FdsbEy0Y0QIAr70GuLsLz4uKgLfftuz5iYiIiIiIiIjqsWhOREQAGkW0nM6F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",
809 | "text/plain": [
810 | ""
811 | ]
812 | },
813 | "metadata": {},
814 | "output_type": "display_data"
815 | }
816 | ],
817 | "source": [
818 | "logs = [\n",
819 | " {\"current_steps\": 1, \"total_steps\": 36, \"loss\": 1.7841, \"learning_rate\": 0.0004990486745229364, \"epoch\": 0.1, \"percentage\": 2.78, \"elapsed_time\": \"0:00:18\", \"remaining_time\": \"0:11:00\"},\n",
820 | "{\"current_steps\": 2, \"total_steps\": 36, \"loss\": 1.6008, \"learning_rate\": 0.000496201938253052, \"epoch\": 0.2, \"percentage\": 5.56, \"elapsed_time\": \"0:00:35\", \"remaining_time\": \"0:09:59\"},\n",
821 | "{\"current_steps\": 3, \"total_steps\": 36, \"loss\": 1.2327, \"learning_rate\": 0.0004914814565722671, \"epoch\": 0.3, \"percentage\": 8.33, \"elapsed_time\": \"0:00:56\", \"remaining_time\": \"0:10:26\"},\n",
822 | "{\"current_steps\": 4, \"total_steps\": 36, \"loss\": 1.4636, \"learning_rate\": 0.0004849231551964771, \"epoch\": 0.41, \"percentage\": 11.11, \"elapsed_time\": \"0:01:08\", \"remaining_time\": \"0:09:09\"},\n",
823 | "{\"current_steps\": 5, \"total_steps\": 36, \"loss\": 1.4043, \"learning_rate\": 0.00047657694675916254, \"epoch\": 0.51, \"percentage\": 13.89, \"elapsed_time\": \"0:01:22\", \"remaining_time\": \"0:08:31\"},\n",
824 | "{\"current_steps\": 6, \"total_steps\": 36, \"loss\": 1.1577, \"learning_rate\": 0.00046650635094610973, \"epoch\": 0.61, \"percentage\": 16.67, \"elapsed_time\": \"0:01:51\", \"remaining_time\": \"0:09:18\"},\n",
825 | "{\"current_steps\": 7, \"total_steps\": 36, \"loss\": 1.1639, \"learning_rate\": 0.00045478801107224796, \"epoch\": 0.71, \"percentage\": 19.44, \"elapsed_time\": \"0:02:05\", \"remaining_time\": \"0:08:40\"},\n",
826 | "{\"current_steps\": 8, \"total_steps\": 36, \"loss\": 1.001, \"learning_rate\": 0.0004415111107797445, \"epoch\": 0.81, \"percentage\": 22.22, \"elapsed_time\": \"0:02:22\", \"remaining_time\": \"0:08:18\"},\n",
827 | "{\"current_steps\": 9, \"total_steps\": 36, \"loss\": 1.0497, \"learning_rate\": 0.00042677669529663686, \"epoch\": 0.91, \"percentage\": 25.0, \"elapsed_time\": \"0:02:37\", \"remaining_time\": \"0:07:53\"},\n",
828 | "{\"current_steps\": 10, \"total_steps\": 36, \"loss\": 0.9004, \"learning_rate\": 0.0004106969024216348, \"epoch\": 1.01, \"percentage\": 27.78, \"elapsed_time\": \"0:03:00\", \"remaining_time\": \"0:07:49\"},\n",
829 | "{\"current_steps\": 11, \"total_steps\": 36, \"loss\": 0.9483, \"learning_rate\": 0.00039339410908776154, \"epoch\": 1.11, \"percentage\": 30.56, \"elapsed_time\": \"0:03:13\", \"remaining_time\": \"0:07:19\"},\n",
830 | "{\"current_steps\": 12, \"total_steps\": 36, \"loss\": 0.8806, \"learning_rate\": 0.000375, \"epoch\": 1.22, \"percentage\": 33.33, \"elapsed_time\": \"0:03:28\", \"remaining_time\": \"0:06:57\"},\n",
831 | "{\"current_steps\": 13, \"total_steps\": 36, \"loss\": 1.0342, \"learning_rate\": 0.00035565456543517487, \"epoch\": 1.32, \"percentage\": 36.11, \"elapsed_time\": \"0:03:43\", \"remaining_time\": \"0:06:35\"},\n",
832 | "{\"current_steps\": 14, \"total_steps\": 36, \"loss\": 0.8794, \"learning_rate\": 0.0003355050358314172, \"epoch\": 1.42, \"percentage\": 38.89, \"elapsed_time\": \"0:04:06\", \"remaining_time\": \"0:06:26\"},\n",
833 | "{\"current_steps\": 15, \"total_steps\": 36, \"loss\": 0.767, \"learning_rate\": 0.00031470476127563017, \"epoch\": 1.52, \"percentage\": 41.67, \"elapsed_time\": \"0:04:27\", \"remaining_time\": \"0:06:14\"},\n",
834 | "{\"current_steps\": 16, \"total_steps\": 36, \"loss\": 0.8725, \"learning_rate\": 0.00029341204441673266, \"epoch\": 1.62, \"percentage\": 44.44, \"elapsed_time\": \"0:04:41\", \"remaining_time\": \"0:05:51\"},\n",
835 | "{\"current_steps\": 17, \"total_steps\": 36, \"loss\": 0.7652, \"learning_rate\": 0.0002717889356869146, \"epoch\": 1.72, \"percentage\": 47.22, \"elapsed_time\": \"0:05:09\", \"remaining_time\": \"0:05:45\"},\n",
836 | "{\"current_steps\": 18, \"total_steps\": 36, \"loss\": 0.9222, \"learning_rate\": 0.00025, \"epoch\": 1.82, \"percentage\": 50.0, \"elapsed_time\": \"0:05:34\", \"remaining_time\": \"0:05:34\"},\n",
837 | "{\"current_steps\": 19, \"total_steps\": 36, \"loss\": 0.8331, \"learning_rate\": 0.00022821106431308543, \"epoch\": 1.92, \"percentage\": 52.78, \"elapsed_time\": \"0:05:49\", \"remaining_time\": \"0:05:12\"},\n",
838 | "{\"current_steps\": 20, \"total_steps\": 36, \"loss\": 0.9051, \"learning_rate\": 0.00020658795558326743, \"epoch\": 2.03, \"percentage\": 55.56, \"elapsed_time\": \"0:06:02\", \"remaining_time\": \"0:04:49\"},\n",
839 | "{\"current_steps\": 21, \"total_steps\": 36, \"loss\": 0.7643, \"learning_rate\": 0.0001852952387243698, \"epoch\": 2.13, \"percentage\": 58.33, \"elapsed_time\": \"0:06:16\", \"remaining_time\": \"0:04:28\"},\n",
840 | "{\"current_steps\": 22, \"total_steps\": 36, \"loss\": 0.7853, \"learning_rate\": 0.00016449496416858284, \"epoch\": 2.23, \"percentage\": 61.11, \"elapsed_time\": \"0:06:29\", \"remaining_time\": \"0:04:07\"},\n",
841 | "{\"current_steps\": 23, \"total_steps\": 36, \"loss\": 0.8496, \"learning_rate\": 0.0001443454345648252, \"epoch\": 2.33, \"percentage\": 63.89, \"elapsed_time\": \"0:06:53\", \"remaining_time\": \"0:03:53\"},\n",
842 | "{\"current_steps\": 24, \"total_steps\": 36, \"loss\": 0.8802, \"learning_rate\": 0.00012500000000000006, \"epoch\": 2.43, \"percentage\": 66.67, \"elapsed_time\": \"0:07:07\", \"remaining_time\": \"0:03:33\"},\n",
843 | "{\"current_steps\": 25, \"total_steps\": 36, \"loss\": 0.8165, \"learning_rate\": 0.00010660589091223854, \"epoch\": 2.53, \"percentage\": 69.44, \"elapsed_time\": \"0:07:21\", \"remaining_time\": \"0:03:14\"},\n",
844 | "{\"current_steps\": 26, \"total_steps\": 36, \"loss\": 0.9055, \"learning_rate\": 8.930309757836516e-05, \"epoch\": 2.63, \"percentage\": 72.22, \"elapsed_time\": \"0:07:38\", \"remaining_time\": \"0:02:56\"},\n",
845 | "{\"current_steps\": 27, \"total_steps\": 36, \"loss\": 0.7184, \"learning_rate\": 7.322330470336314e-05, \"epoch\": 2.73, \"percentage\": 75.0, \"elapsed_time\": \"0:08:09\", \"remaining_time\": \"0:02:43\"},\n",
846 | "{\"current_steps\": 28, \"total_steps\": 36, \"loss\": 0.8326, \"learning_rate\": 5.848888922025553e-05, \"epoch\": 2.84, \"percentage\": 77.78, \"elapsed_time\": \"0:08:30\", \"remaining_time\": \"0:02:25\"},\n",
847 | "{\"current_steps\": 29, \"total_steps\": 36, \"loss\": 0.8122, \"learning_rate\": 4.521198892775202e-05, \"epoch\": 2.94, \"percentage\": 80.56, \"elapsed_time\": \"0:08:52\", \"remaining_time\": \"0:02:08\"},\n",
848 | "{\"current_steps\": 30, \"total_steps\": 36, \"loss\": 0.8105, \"learning_rate\": 3.3493649053890325e-05, \"epoch\": 3.04, \"percentage\": 83.33, \"elapsed_time\": \"0:09:07\", \"remaining_time\": \"0:01:49\"},\n",
849 | "{\"current_steps\": 31, \"total_steps\": 36, \"loss\": 0.7703, \"learning_rate\": 2.3423053240837516e-05, \"epoch\": 3.14, \"percentage\": 86.11, \"elapsed_time\": \"0:09:22\", \"remaining_time\": \"0:01:30\"},\n",
850 | "{\"current_steps\": 32, \"total_steps\": 36, \"loss\": 0.8548, \"learning_rate\": 1.5076844803522921e-05, \"epoch\": 3.24, \"percentage\": 88.89, \"elapsed_time\": \"0:09:37\", \"remaining_time\": \"0:01:12\"},\n",
851 | "{\"current_steps\": 33, \"total_steps\": 36, \"loss\": 0.8, \"learning_rate\": 8.51854342773295e-06, \"epoch\": 3.34, \"percentage\": 91.67, \"elapsed_time\": \"0:09:59\", \"remaining_time\": \"0:00:54\"},\n",
852 | "{\"current_steps\": 34, \"total_steps\": 36, \"loss\": 0.7628, \"learning_rate\": 3.798061746947995e-06, \"epoch\": 3.44, \"percentage\": 94.44, \"elapsed_time\": \"0:10:17\", \"remaining_time\": \"0:00:36\"},\n",
853 | "{\"current_steps\": 35, \"total_steps\": 36, \"loss\": 0.7972, \"learning_rate\": 9.513254770636137e-07, \"epoch\": 3.54, \"percentage\": 97.22, \"elapsed_time\": \"0:10:31\", \"remaining_time\": \"0:00:18\"},\n",
854 | "{\"current_steps\": 36, \"total_steps\": 36, \"loss\": 0.7941, \"learning_rate\": 0.0, \"epoch\": 3.65, \"percentage\": 100.0, \"elapsed_time\": \"0:10:45\", \"remaining_time\": \"0:00:00\"}\n",
855 | "]\n",
856 | "\n",
857 | "import numpy as np\n",
858 | "import matplotlib.pyplot as plt\n",
859 | "from scipy.interpolate import interp1d\n",
860 | "\n",
861 | "\n",
862 | "plt.figure(figsize=(10, 6), dpi=150)\n",
863 | "losses = np.array([x[\"loss\"] for x in logs])\n",
864 | "steps = range(1, len(logs)+1)\n",
865 | "\n",
866 | "plt.plot(steps, losses, label='Losses')\n",
867 | "plt.scatter(steps, losses)\n",
868 | "\n",
869 | "f_cubic = interp1d(steps, losses)\n",
870 | "xnew = np.linspace(1, 36, num=10, endpoint=True)\n",
871 | "plt.plot(xnew, f_cubic(xnew), '--', label='Smoothed', c='r')\n",
872 | "\n",
873 | "\n",
874 | "plt.xlabel('Steps')\n",
875 | "plt.ylabel('Training Loss')\n",
876 | "plt.legend(loc='best')\n",
877 | "plt.tight_layout()\n",
878 | "plt.savefig('training_loss.png')\n",
879 | "plt.show()\n"
880 | ]
881 | },
882 | {
883 | "cell_type": "code",
884 | "execution_count": null,
885 | "metadata": {},
886 | "outputs": [],
887 | "source": []
888 | }
889 | ],
890 | "metadata": {
891 | "kernelspec": {
892 | "display_name": "python3-11",
893 | "language": "python",
894 | "name": "python3"
895 | },
896 | "language_info": {
897 | "codemirror_mode": {
898 | "name": "ipython",
899 | "version": 3
900 | },
901 | "file_extension": ".py",
902 | "mimetype": "text/x-python",
903 | "name": "python",
904 | "nbconvert_exporter": "python",
905 | "pygments_lexer": "ipython3",
906 | "version": "3.11.8"
907 | }
908 | },
909 | "nbformat": 4,
910 | "nbformat_minor": 2
911 | }
912 |
--------------------------------------------------------------------------------