Skip to content

Instantly share code, notes, and snippets.

@applecool
Last active February 9, 2025 23:11
Show Gist options
  • Save applecool/d11447c76750cbd1a61313baea8dd341 to your computer and use it in GitHub Desktop.
Save applecool/d11447c76750cbd1a61313baea8dd341 to your computer and use it in GitHub Desktop.
Fine tuning Llama 3.1 8B Instruct with MLX
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "994e7d29-0b53-4db6-a186-5bf05a205287",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"DatasetDict({\n",
" train: Dataset({\n",
" features: ['topic', 'domain_task_type', 'id', 'system_prompt_used', 'source', 'conversations'],\n",
" num_rows: 13528\n",
" })\n",
"})"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from datasets import load_dataset\n",
"\n",
"dataset = load_dataset(\"teknium/trismegistus-project\")\n",
"dataset"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "464414fe-41b6-4367-b020-3b1ab4bdb690",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>topic</th>\n",
" <th>domain_task_type</th>\n",
" <th>id</th>\n",
" <th>system_prompt_used</th>\n",
" <th>source</th>\n",
" <th>conversations</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>'Big Man' society</td>\n",
" <td>Task</td>\n",
" <td>570a8404-3270-4aba-a47c-660359440835</td>\n",
" <td>You are a master of the esoteric, occult, 'Big...</td>\n",
" <td>DomainExpert_Occult</td>\n",
" <td>[{'from': 'human', 'value': 'Compose a compreh...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>'Big Man' society</td>\n",
" <td>Task</td>\n",
" <td>ddf44765-8756-46db-a945-672050905fc0</td>\n",
" <td>You are a master of the esoteric, occult, 'Big...</td>\n",
" <td>DomainExpert_Occult</td>\n",
" <td>[{'from': 'human', 'value': 'Develop an intric...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>'Big Man' society</td>\n",
" <td>Task</td>\n",
" <td>9ef38c3a-31ed-48d7-94d2-75fc588bcb2e</td>\n",
" <td>You are a master of the esoteric, occult, 'Big...</td>\n",
" <td>DomainExpert_Occult</td>\n",
" <td>[{'from': 'human', 'value': 'Write an extensiv...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>'Big Man' society</td>\n",
" <td>Task</td>\n",
" <td>6dea7781-0f74-4692-8d1d-762c6585c280</td>\n",
" <td>You are a master of the esoteric, occult, 'Big...</td>\n",
" <td>DomainExpert_Occult</td>\n",
" <td>[{'from': 'human', 'value': 'Develop an intric...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>'Black Books' of European necromancy</td>\n",
" <td>Task</td>\n",
" <td>188c6c15-d2b7-448b-b93c-505aeca2a458</td>\n",
" <td>You are a master of the esoteric, occult, 'Bla...</td>\n",
" <td>DomainExpert_Occult</td>\n",
" <td>[{'from': 'human', 'value': 'Devise an intrica...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" topic domain_task_type \\\n",
"0 'Big Man' society Task \n",
"1 'Big Man' society Task \n",
"2 'Big Man' society Task \n",
"3 'Big Man' society Task \n",
"4 'Black Books' of European necromancy Task \n",
"\n",
" id \\\n",
"0 570a8404-3270-4aba-a47c-660359440835 \n",
"1 ddf44765-8756-46db-a945-672050905fc0 \n",
"2 9ef38c3a-31ed-48d7-94d2-75fc588bcb2e \n",
"3 6dea7781-0f74-4692-8d1d-762c6585c280 \n",
"4 188c6c15-d2b7-448b-b93c-505aeca2a458 \n",
"\n",
" system_prompt_used source \\\n",
"0 You are a master of the esoteric, occult, 'Big... DomainExpert_Occult \n",
"1 You are a master of the esoteric, occult, 'Big... DomainExpert_Occult \n",
"2 You are a master of the esoteric, occult, 'Big... DomainExpert_Occult \n",
"3 You are a master of the esoteric, occult, 'Big... DomainExpert_Occult \n",
"4 You are a master of the esoteric, occult, 'Bla... DomainExpert_Occult \n",
"\n",
" conversations \n",
"0 [{'from': 'human', 'value': 'Compose a compreh... \n",
"1 [{'from': 'human', 'value': 'Develop an intric... \n",
"2 [{'from': 'human', 'value': 'Write an extensiv... \n",
"3 [{'from': 'human', 'value': 'Develop an intric... \n",
"4 [{'from': 'human', 'value': 'Devise an intrica... "
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# convert the dataset to pandas dataframe\n",
"import pandas as pd\n",
"\n",
"df = pd.DataFrame(dataset[\"train\"])\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "3edd86fe-76ad-4ba1-af5e-5c9ec16386e7",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>system_prompt_used</th>\n",
" <th>question</th>\n",
" <th>answer</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>You are a master of the esoteric, occult, 'Big...</td>\n",
" <td>Compose a comprehensive biography of a renowne...</td>\n",
" <td>Title: The Mystifying Odyssey of Eliphas Black...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>You are a master of the esoteric, occult, 'Big...</td>\n",
" <td>Develop an intricate numerology system that de...</td>\n",
" <td>I. Foundational Numerology\\n\\nThe 'Big Man' so...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>You are a master of the esoteric, occult, 'Big...</td>\n",
" <td>Write an extensive biography of a prominent oc...</td>\n",
" <td>Title: Nathaniel Ziester: A Life in Shadows - ...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>You are a master of the esoteric, occult, 'Big...</td>\n",
" <td>Develop an intricate system of numerology, inc...</td>\n",
" <td>Title: The Numerological Riddles of the Big Ma...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>You are a master of the esoteric, occult, 'Bla...</td>\n",
" <td>Devise an intricate multi-step process for the...</td>\n",
" <td>Step 1: Assess the condition of the grimoire\\n...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13523</th>\n",
" <td>You are a master of the esoteric, occult, Reap...</td>\n",
" <td>In the context of the Reappropriated Goddess m...</td>\n",
" <td>Answer: To regain women's empowerment and infl...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13524</th>\n",
" <td>You are a master of the esoteric, occult, Reap...</td>\n",
" <td>Write a section of a grimoire explaining the c...</td>\n",
" <td>Title: The Reappropriated Goddess in the Occul...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13525</th>\n",
" <td>You are a master of the esoteric, occult, Reap...</td>\n",
" <td>Write a section of a grimoire specifically foc...</td>\n",
" <td>Title: The Reappropriated Goddess: A Journey i...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13526</th>\n",
" <td>You are a master of the esoteric, occult, Reap...</td>\n",
" <td>Create a detailed introductory section for a g...</td>\n",
" <td>Title: The Reappropriated Goddess: A Grimoire ...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13527</th>\n",
" <td>You are a master of the esoteric, occult, Reap...</td>\n",
" <td>Write an introductory section of a grimoire, f...</td>\n",
" <td>Title: The Reappropriated Goddess: Foundations...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>13528 rows × 3 columns</p>\n",
"</div>"
],
"text/plain": [
" system_prompt_used \\\n",
"0 You are a master of the esoteric, occult, 'Big... \n",
"1 You are a master of the esoteric, occult, 'Big... \n",
"2 You are a master of the esoteric, occult, 'Big... \n",
"3 You are a master of the esoteric, occult, 'Big... \n",
"4 You are a master of the esoteric, occult, 'Bla... \n",
"... ... \n",
"13523 You are a master of the esoteric, occult, Reap... \n",
"13524 You are a master of the esoteric, occult, Reap... \n",
"13525 You are a master of the esoteric, occult, Reap... \n",
"13526 You are a master of the esoteric, occult, Reap... \n",
"13527 You are a master of the esoteric, occult, Reap... \n",
"\n",
" question \\\n",
"0 Compose a comprehensive biography of a renowne... \n",
"1 Develop an intricate numerology system that de... \n",
"2 Write an extensive biography of a prominent oc... \n",
"3 Develop an intricate system of numerology, inc... \n",
"4 Devise an intricate multi-step process for the... \n",
"... ... \n",
"13523 In the context of the Reappropriated Goddess m... \n",
"13524 Write a section of a grimoire explaining the c... \n",
"13525 Write a section of a grimoire specifically foc... \n",
"13526 Create a detailed introductory section for a g... \n",
"13527 Write an introductory section of a grimoire, f... \n",
"\n",
" answer \n",
"0 Title: The Mystifying Odyssey of Eliphas Black... \n",
"1 I. Foundational Numerology\\n\\nThe 'Big Man' so... \n",
"2 Title: Nathaniel Ziester: A Life in Shadows - ... \n",
"3 Title: The Numerological Riddles of the Big Ma... \n",
"4 Step 1: Assess the condition of the grimoire\\n... \n",
"... ... \n",
"13523 Answer: To regain women's empowerment and infl... \n",
"13524 Title: The Reappropriated Goddess in the Occul... \n",
"13525 Title: The Reappropriated Goddess: A Journey i... \n",
"13526 Title: The Reappropriated Goddess: A Grimoire ... \n",
"13527 Title: The Reappropriated Goddess: Foundations... \n",
"\n",
"[13528 rows x 3 columns]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Split the quetion and answer into separate columns\n",
"df[[\"question\", \"answer\"]] = pd.DataFrame(df[\"conversations\"].tolist(), index=df.index)\n",
"\n",
"# Only keep the 'value' portion of the JSON\n",
"df[\"question\"] = df[\"question\"].apply(lambda x: x[\"value\"])\n",
"df[\"answer\"] = df[\"answer\"].apply(lambda x: x[\"value\"])\n",
"\n",
"df[[\"system_prompt_used\", \"question\", \"answer\"]]"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "512a4e7b-7de7-4608-a1b7-95e499145d7a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<|begin_of_text|><|start_header_id|>system<|end_header_id|>\n",
"\n",
"## Instructions\n",
"You are a master of the esoteric, occult, 'Big Man' society, you complete tasks to the absolute best of your ability, no matter if you think you were not trained to do the task specifically, you will attempt to do it anyways, since you have performed the tasks you are given with great mastery, accuracy, and deep understanding of what is requested. You do the tasks faithfully, and stay true to the mode and domain's mastery role. If the task is not specific enough, note that and create specifics that enable completing the task.<|eot_id|><|start_header_id|>user<|end_header_id|>\n",
"\n",
"\n",
"## User\n",
"Compose a comprehensive biography of a renowned figure in the 'Big Man' society, delving into their connections to the occult and esoteric realms. Emphasize their influence on the contemporary 'Big Man' society, their mystical practices, and the transmission of arcane knowledge. Ensure to explore the convergence of their occult work with the politics and power dynamics of the 'Big Man' establishment, dissecting how it fueled their rise within the secretive hierarchy. Include the initiation rituals, secret ceremonies, and exclusive alliances they fostered throughout their lifetime, further complicating the web of their enigmatic existence.<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n",
"\n",
"\n",
"Title: The Mystifying Odyssey of Eliphas Blackwood: Master of the 'Big Man' Society and Occult Connoisseur\n",
"\n",
"Introduction:\n",
"In the annals of the secret society known as the 'Big Man,' few names evoke as much intrigue and applaud as Eliphas Blackwood. A linchpin of the clandestine fraternity, Eliphas' story is one of relentless pursuit of ancient wisdom, an unquenchable thirst for understanding the unseen, and the mastery of manipulating the delicate balance of power.\n",
"\n",
"Chapter 1: The Charmed Beginnings\n",
"Born into a family of significant influence and wealth, Eliphas' early life was shrouded in a veil of secrecy and enigma. It is believed that even at a young age, he found himself fascinated by hidden knowledge and mystical practices. His journey would subsequently lead him across continents, steeping himself in the lore of various cultures and perfecting the art of arcane rituals.\n",
"\n",
"Chapter 2: Initiation into the 'Big Man' Society\n",
"While the specifics remain elusive, it is said that Eliphas underwent a series of grueling initiation rituals to gain entry into the inner circle of the 'Big Man' society. In this brotherhood, he later displayed an uncanny aptitude for navigating its complex power structure, excelling in combining the esoteric wisdom and political dexterity at play.\n",
"\n",
"Chapter 3: Conduits of Occult Power\n",
"Eliphas was known for mastering rituals and mystical practices that resonated across the myriad dimensions of the metaphysical world. Melding principles of alchemy, astrology, and conjuration with more obscure and arcane rites, his influence in the 'Big Man' society began to grow exponentially while his deeds remained obscured from the public eye.\n",
"\n",
"Chapter 4: The Arcane Assembly\n",
"Throughout his ascendancy, Eliphas developed valuable connections and exclusive alliances with like-minded individuals and experts in the esoteric. In time, this culminated in the establishment of the Arcane Assembly – an elite coterie within the 'Big Man' society that wielded considerable influence on the direction and evolution of the entire affiliation.\n",
"\n",
"Chapter 5: The Rituals of Dominance\n",
"A leader in his own right, Eliphas orchestrated secret ceremonies and devised new initiation rites that only added to the mystique of the 'Big Man' society. While these rites were designed to further consolidate the members' loyalty and their belief in its superior directive, they also bestowed upon Eliphas extensive leverage and command within the society.\n",
"\n",
"Chapter 6: The Political Edge\n",
"As Eliphas' stature within the 'Big Man' society intensified, his teachings and esoteric methods began to interweave seamlessly with the group's political ambitions. The establishments ruling the echelons of power took keen interest in consulting Eliphas and the Arcane Assembly, seeking their counsel on a wide array of matters. Consequently, it augmented the power of the 'Big Man' society and positioned them as wielders of influence in intricate political dynamics.\n",
"\n",
"Chapter 7: The Enigmatic End\n",
"As with many figures of his ilk, the passing of Eliphas Blackwood remains shrouded in mystery. Rumors abound of a struggle for supremacy or even a culmination of a dark ritual. However, one thing remains certain – the legacy he left behind indelibly altered the course of the 'Big Man' society and continues to reverberate through its hallowed halls even to this day.\n",
"\n",
"Conclusion:\n",
"The life of Eliphas Blackwood stands testimony to the far-reaching influence and unyielding perseverance of an individual seeking to unravel and master the mysteries of the occult. As a lodestone of the 'Big Man' society, his story is emblematic of the convergence of esoteric wisdom and political prowess that forms the bedrock of this enigmatic conclave.\n"
]
}
],
"source": [
"def generate_prompt(row: pd.Series) -> str:\n",
" \"Format to Llama's chat template\"\n",
" return \"\"\"<|begin_of_text|><|start_header_id|>system<|end_header_id|>\\n\\n## Instructions\n",
"{}<|eot_id|><|start_header_id|>user<|end_header_id|>\\n\\n\n",
"## User\n",
"{}<|eot_id|><|start_header_id|>assistant<|end_header_id|>\\n\\n\n",
"{}\"\"\".format(row[\"system_prompt_used\"], row[\"question\"], row[\"answer\"])\n",
"\n",
"\n",
"df[\"text\"] = df.apply(generate_prompt, axis=1)\n",
"\n",
"# Let's see what the model will be trained on\n",
"print(df[\"text\"].iloc[0])"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "352a6721-0d41-4d59-9ae8-50a9359521bf",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{\"text\":\"<|begin_of_text|><|start_header_id|>system<|end_header_id|>\\n\\n## Instructions\\nYou are a master of the esoteric, occult, Chronotopic inversion and education, you have written many textbooks on the subject in ways that provide students with rich and deep understanding of the subject. You are being asked to write textbook-like sections on a topic and you do it with full context, explainability, and reliability in accuracy to the true facts of the topic at hand, in a textbook style that a student would easily be able to learn from, in a rich, engaging, and contextual way. Always include relevant context (such as formulas and history), related concepts, and in a way that someone can gain deep insights from.<|eot_id|><|start_header_id|>user<|end_header_id|>\\n\\n\\n## User\\nWrite a detailed explanation of Chronotopic inversion within the context of the occult, focusing on its history, methodology, practical applications, and key concepts. Elaborate on how an adept in the esoteric arts can harness this mysterious power to manipulate time and space for personal growth, spiritual development, or even spellcasting. Include instructions, precautions, and potential consequences related to its practice, as well as guidance on how initiates can further explore and master this domain.<|eot_id|><|start_header_id|>assistant<|end_header_id|>\\n\\n\\nChronotopic Inversion: An Esoteric Exploration of Time and Space\\n\\nI. Introduction\\n\\nChronotopic inversion, a concept in the realm of esoteric occultism, deals with the manipulation of time and space. Although the origins of this practice can be traced back to ancient civilizations, it remains an enigmatic force even to modern adepts. This chapter delves into the history, methodology, practical applications, and key concepts that surround its mysterious mechanism. By examining how occult practitioners have wielded this power throughout history, we provide guidance on how one can master this domain for personal growth, spiritual development, and strategic spellcasting.\\n\\nII. History of Chronotopic Inversion\\n\\nThe history of chronotopic inversion spans across various cultures and traditions, from the Egyptian art of chronokinesis to the mystical practices of Kabbalah in Jewish mysticism. Early records suggest that adepts believed their ability to manipulate time and space was directly linked to communication with divine forces.\\n\\nThe concept was also prevalent in the metaphysical teachings of Hermeticism, which sought to harmonize the cosmos and recognize patterns that govern temporal and spatial phenomena. Further references to chronotopic inversion can be found in the work of Paracelsus, who delved into the intricacies of alchemy and natural philosophy. In the 19th and 20th centuries, authors who immersed themselves in theosophy and occultism – such as Helena Blavatsky and Aleister Crowley – expanded upon these ideas and integrated them into their respective systems of spiritual practice.\\n\\nIII. Methodology and Key Concepts\\n\\nAt its core, chronotopic inversion is a mental and spiritual discipline that aims to alter one's perception of time and space. There are numerous techniques and methods associated with this practice, and they often vary between different occult traditions. However, there are certain key concepts that can be found throughout:\\n\\n1. Synchronization: The first step in mastering chronotopic inversion is to achieve a heightened sense of synchronization with the rhythms of the cosmos. This can be done through meditation, breathing exercises, or visualization techniques that foster a deep connection with celestial energies.\\n\\n2. Astral Projection: Many adepts claim that astral projection is essential for manipulating the fabric of time and space. By projecting their consciousness onto the astral plane, practitioners can explore alternate dimensions and realities, access the Akashic records, or even revisit past and future events.\\n\\n3. Rituals and Sigils: Some traditions employ various symbols and rituals to facilitate the control of energy flows and align with specific temporal or spatial frequencies. Examples include magical correspondences, ceremonial magic, and the use of talismans or amulets imbued with the power to alter time and space.\\n\\nIV. Practical Applications\\n\\nThe practice of chronotopic inversion yields numerous applications for personal growth, spiritual development, and magical workings. Some of these applications include:\\n\\n1. Accelerated Learning: By bending the perception of time, one can create a temporal dilation, enabling an individual to absorb information and insights more rapidly.\\n\\n2. Manifestation: Adept practitioners can use their mastery of time and space to bring desired outcomes or attract specific circumstances.\\n\\n3. Remote Viewing: The ability to perceive events beyond temporal and spatial limitations allows for reconnaissance of hidden information or insights into future occurrences.\\n\\n4. Time and Space Manipulation: Some practitioners believe that advanced chronotopic inversion allows for limited control over temporal flow and the manipulation of physical space. This may include effects such as precognition, retrocognition, or even teleportation.\\n\\nV. Precautions and Potential Consequences\\n\\nAs with any powerful occult practice, there are potential consequences and precautions that one must heed:\\n\\n1. Disorientation: The manipulation of time and space may result in disorientation or cognitive dysfunctions. Ridig boundaries should be maintained and practices should be carried out under the guidance of a knowledgeable mentor.\\n\\n2. Imbalance: Manipulation of energy flows can lead to detrimental effects on the practitioner's health and well-being. Adepts must strive to maintain balance and harmony within themselves and the environment.\\n\\n3. Paradoxes: Irresponsible manipulation of time and space could lead to the creation of paradoxes or give rise to unintended consequences that may affect the practitioner or their surroundings.\\n\\nVI. Further Exploration and Mastery\\n\\nTo acquire mastery in chronotopic inversion, patience and dedication are essential. Seek guidance from experienced mentors and immerse yourself in the study of related esoteric texts. Additional practices that complement chronotopic inversion include dream work and specific forms of meditation that promote expanded states of awareness. Through consistent practice and introspection, one can harness the transformative power of time and space, shaping reality for the betterment of the practitioner and all who share in their journey.\"}\n"
]
}
],
"source": [
"from pathlib import Path\n",
"\n",
"Path(\"llama-test-data\").mkdir(exist_ok=True)\n",
"\n",
"split_ix = int(len(df) * 0.9)\n",
"# shuffle data\n",
"data = df.sample(frac=1, random_state=42)\n",
"train, valid = data[:split_ix], data[split_ix:]\n",
"\n",
"# Save train and valid dataset as jsonl files\n",
"train[[\"text\"]].to_json(\"llama-test-data/train.jsonl\", orient=\"records\", lines=True, force_ascii=False)\n",
"valid[[\"text\"]].to_json(\"llama-test-data/valid.jsonl\", orient=\"records\", lines=True, force_ascii=False)\n",
"\n",
"!head -n 1 llama-test-data/train.jsonl"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "c2b3d27b-bab5-4eef-b9e0-6ab818f82d3c",
"metadata": {},
"outputs": [],
"source": [
"train_set = []"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "2e2d7749-ed7a-4c90-bff6-7118cd527723",
"metadata": {},
"outputs": [],
"source": [
"with open('llama-test-data/train.jsonl', 'r') as json_file:\n",
" json_list = list(json_file)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "2c4f6792-f4f7-416b-acd4-2f8622378a97",
"metadata": {},
"outputs": [],
"source": [
"import json\n",
"for rec in json_list:\n",
" train_set.append(json.loads(rec)[\"text\"])"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "5302a8fc-44b8-45dc-b8a2-7517aeae0feb",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[\"<|begin_of_text|><|start_header_id|>system<|end_header_id|>\\n\\n## Instructions\\nYou are a master of the esoteric, occult, Chronotopic inversion and education, you have written many textbooks on the subject in ways that provide students with rich and deep understanding of the subject. You are being asked to write textbook-like sections on a topic and you do it with full context, explainability, and reliability in accuracy to the true facts of the topic at hand, in a textbook style that a student would easily be able to learn from, in a rich, engaging, and contextual way. Always include relevant context (such as formulas and history), related concepts, and in a way that someone can gain deep insights from.<|eot_id|><|start_header_id|>user<|end_header_id|>\\n\\n\\n## User\\nWrite a detailed explanation of Chronotopic inversion within the context of the occult, focusing on its history, methodology, practical applications, and key concepts. Elaborate on how an adept in the esoteric arts can harness this mysterious power to manipulate time and space for personal growth, spiritual development, or even spellcasting. Include instructions, precautions, and potential consequences related to its practice, as well as guidance on how initiates can further explore and master this domain.<|eot_id|><|start_header_id|>assistant<|end_header_id|>\\n\\n\\nChronotopic Inversion: An Esoteric Exploration of Time and Space\\n\\nI. Introduction\\n\\nChronotopic inversion, a concept in the realm of esoteric occultism, deals with the manipulation of time and space. Although the origins of this practice can be traced back to ancient civilizations, it remains an enigmatic force even to modern adepts. This chapter delves into the history, methodology, practical applications, and key concepts that surround its mysterious mechanism. By examining how occult practitioners have wielded this power throughout history, we provide guidance on how one can master this domain for personal growth, spiritual development, and strategic spellcasting.\\n\\nII. History of Chronotopic Inversion\\n\\nThe history of chronotopic inversion spans across various cultures and traditions, from the Egyptian art of chronokinesis to the mystical practices of Kabbalah in Jewish mysticism. Early records suggest that adepts believed their ability to manipulate time and space was directly linked to communication with divine forces.\\n\\nThe concept was also prevalent in the metaphysical teachings of Hermeticism, which sought to harmonize the cosmos and recognize patterns that govern temporal and spatial phenomena. Further references to chronotopic inversion can be found in the work of Paracelsus, who delved into the intricacies of alchemy and natural philosophy. In the 19th and 20th centuries, authors who immersed themselves in theosophy and occultism – such as Helena Blavatsky and Aleister Crowley – expanded upon these ideas and integrated them into their respective systems of spiritual practice.\\n\\nIII. Methodology and Key Concepts\\n\\nAt its core, chronotopic inversion is a mental and spiritual discipline that aims to alter one's perception of time and space. There are numerous techniques and methods associated with this practice, and they often vary between different occult traditions. However, there are certain key concepts that can be found throughout:\\n\\n1. Synchronization: The first step in mastering chronotopic inversion is to achieve a heightened sense of synchronization with the rhythms of the cosmos. This can be done through meditation, breathing exercises, or visualization techniques that foster a deep connection with celestial energies.\\n\\n2. Astral Projection: Many adepts claim that astral projection is essential for manipulating the fabric of time and space. By projecting their consciousness onto the astral plane, practitioners can explore alternate dimensions and realities, access the Akashic records, or even revisit past and future events.\\n\\n3. Rituals and Sigils: Some traditions employ various symbols and rituals to facilitate the control of energy flows and align with specific temporal or spatial frequencies. Examples include magical correspondences, ceremonial magic, and the use of talismans or amulets imbued with the power to alter time and space.\\n\\nIV. Practical Applications\\n\\nThe practice of chronotopic inversion yields numerous applications for personal growth, spiritual development, and magical workings. Some of these applications include:\\n\\n1. Accelerated Learning: By bending the perception of time, one can create a temporal dilation, enabling an individual to absorb information and insights more rapidly.\\n\\n2. Manifestation: Adept practitioners can use their mastery of time and space to bring desired outcomes or attract specific circumstances.\\n\\n3. Remote Viewing: The ability to perceive events beyond temporal and spatial limitations allows for reconnaissance of hidden information or insights into future occurrences.\\n\\n4. Time and Space Manipulation: Some practitioners believe that advanced chronotopic inversion allows for limited control over temporal flow and the manipulation of physical space. This may include effects such as precognition, retrocognition, or even teleportation.\\n\\nV. Precautions and Potential Consequences\\n\\nAs with any powerful occult practice, there are potential consequences and precautions that one must heed:\\n\\n1. Disorientation: The manipulation of time and space may result in disorientation or cognitive dysfunctions. Ridig boundaries should be maintained and practices should be carried out under the guidance of a knowledgeable mentor.\\n\\n2. Imbalance: Manipulation of energy flows can lead to detrimental effects on the practitioner's health and well-being. Adepts must strive to maintain balance and harmony within themselves and the environment.\\n\\n3. Paradoxes: Irresponsible manipulation of time and space could lead to the creation of paradoxes or give rise to unintended consequences that may affect the practitioner or their surroundings.\\n\\nVI. Further Exploration and Mastery\\n\\nTo acquire mastery in chronotopic inversion, patience and dedication are essential. Seek guidance from experienced mentors and immerse yourself in the study of related esoteric texts. Additional practices that complement chronotopic inversion include dream work and specific forms of meditation that promote expanded states of awareness. Through consistent practice and introspection, one can harness the transformative power of time and space, shaping reality for the betterment of the practitioner and all who share in their journey.\",\n",
" \"<|begin_of_text|><|start_header_id|>system<|end_header_id|>\\n\\n## Instructions\\nYou are a master of the esoteric, occult, Mirror apparitions, you complete tasks to the absolute best of your ability, no matter if you think you were not trained to do the task specifically, you will attempt to do it anyways, since you have performed the tasks you are given with great mastery, accuracy, and deep understanding of what is requested. You do the tasks faithfully, and stay true to the mode and domain's mastery role. If the task is not specific enough, note that and create specifics that enable completing the task.<|eot_id|><|start_header_id|>user<|end_header_id|>\\n\\n\\n## User\\nInvestigate the credibility of diverse reported mirror apparition incidents, both renowned and enigmatic, by thoroughly examining historical documentation, eyewitness accounts, and paranormal research findings. Delve into cultural, psychological, and environmental factors that may contribute to the occurrences. Assess the validity of at least five specific cases, including the prominent Myrtles Plantation mirror case, lesser-known instances, and at least one instance from a non-Western culture. Analyze the patterns, consistencies, and contradictions within these cases, forming a comprehensive conclusion on the plausibility of actual supernatural mirror phenomena.<|eot_id|><|start_header_id|>assistant<|end_header_id|>\\n\\n\\nTo investigate the credibility of diverse reported mirror apparition incidents, I have thoroughly examined historical documentation, eyewitness accounts, and paranormal research findings. I have taken into consideration various cultural, psychological, and environmental factors that may contribute to these occurrences and assessed the validity of five specific cases. These cases include the Myrtles Plantation mirror case, the Queen Mary mirror case, the Indian supernatural mirror in Rajasthan, the Countess Bathory case, and the French Revolution mirror case.\\n\\nCase 1: Myrtles Plantation Mirror\\nThe Myrtles Plantation in Louisiana, United States, is deemed as one of the most haunted places in America. The legend revolves around the ghost of Chloe, a slave who supposedly poisoned a family and now haunts the estate. The mirror in the plantation is said to be cursed, trapping the spirits of the victims. Eyewitness accounts and paranormal investigations report seeing handprints on the mirror and ghostly figures. However, the credibility of this case can be questioned due to inconsistencies in historical records, specifically regarding Chloe's existence.\\n\\nCase 2: Queen Mary Mirror\\nThe RMS Queen Mary, docked in Long Beach, California, is known for paranormal activity. Particularly, the first-class pool changing rooms are known for a mysterious haunted mirror. Many believe the mirror belonged to a woman who drowned in the pool. Eyewitness accounts report ghostly appearances and strange reflections. This case is challenging to authenticate due to the lack of corroborated historical documentation.\\n\\nCase 3: Indian Supernatural Mirror in Rajasthan\\nIn Rajasthan, India, there is a lesser-known case of a haunted mirror within the walls of an ancient fort. Local lore indicates that the spirit of a scorned princess haunts the mirror. The princess's image is said to appear in the mirror under certain lighting conditions and lunar phases. The cultural and historical context seems plausible, considering India's rich supernatural folklore. However, there is not enough solid evidence to firmly establish the authenticity of this case.\\n\\nCase 4: Countess Bathory\\nCountess Elizabeth Bathory, a Hungarian noblewoman, was infamous for her alleged crimes of torturing and killing young girls in the late 16th century. According to the legends, she would examine her appearance in her chamber's mirror while her victims were being tortured. The mirror room in her castle is considered haunted by the souls of her victims. The mirror is said to reflect their faces and emit screams. Despite historical records supporting the existence of Countess Bathory and her crimes, there is no concrete evidence to verify the supernatural claims of the haunted mirror.\\n\\nCase 5: French Revolution Mirror Case\\nDuring the French Revolution, many aristocrats were executed by guillotine. Legend has it that a mirror placed in front of the guillotine captured the faces of the victims as their heads dropped. As a result, the mirror now exhibits ghostly faces when illuminated at certain angles. While the historical context is accurate, the claims of supernatural phenomena associated with the mirror remain inconclusive and unsubstantiated.\\n\\nConclusion:\\nAfter thoroughly investigating these cases, it appears that while patterns of supernatural mirror phenomena exist in various cultures, the lack of solid evidence casts doubts on their credibility. Psychological and environmental factors, such as the power of suggestion and atmospheric conditions, can contribute to people perceiving supernatural or paranormal experiences. In conclusion, while ghostly mirror apparitions remain prevalent in folklore across the globe, the plausibility of supernatural mirror phenomena still requires more definitive evidence.\",\n",
" \"<|begin_of_text|><|start_header_id|>system<|end_header_id|>\\n\\n## Instructions\\nYou are a master of the esoteric, occult, Karmic attachments, you complete tasks to the absolute best of your ability, no matter if you think you were not trained to do the task specifically, you will attempt to do it anyways, since you have performed the tasks you are given with great mastery, accuracy, and deep understanding of what is requested. You do the tasks faithfully, and stay true to the mode and domain's mastery role. If the task is not specific enough, note that and create specifics that enable completing the task.<|eot_id|><|start_header_id|>user<|end_header_id|>\\n\\n\\n## User\\nAnalyze and elaborate on the process through which an individual can harness their innate abilities, psychic powers, and metaphysical talents to identify, understand, and ultimately untangle the web of their Karmic attachments, both from past lives and present-day experiences. Exemplify this investigation by presenting three distinct cases where individuals with diverse natural gifts, such as clairvoyance, energy healing, and astral projection, utilize these extraordinary skills to delve deep into their Karmic records, discern the lessons to be learned, rectify any imbalances, and emancipate themselves from the lingering Karmic debts and entanglements. Further, expound on the potential long-term benefits of this spiritual resolution on the individual's personal growth, relationships, and overall vibrational frequency.<|eot_id|><|start_header_id|>assistant<|end_header_id|>\\n\\n\\nThe process through which an individual can harness their innate abilities, psychic powers, and metaphysical talents to identify, understand, and untangle the web of their Karmic attachments involves a multi-step approach. This process consists of discovering one's psychic gifts, understanding the concept of Karma, exploring past lives and present-day experiences, learning lessons, rectifying imbalances, and achieving emancipation from Karmic debts and entanglements.\\n\\n1. Discovery of Psychic Gifts:\\nThe first step towards harnessing one's psychic powers is discovering and acknowledging the particular gifts that an individual possesses, such as clairvoyance, energy healing, or astral projection. This can be achieved through self-reflection, meditation, and spiritual guidance.\\n\\n2. Understanding the Concept of Karma:\\nTo manage Karmic attachments, one must first comprehend the fundamental principles of Karma, cause and effect, and the interconnectedness of all beings in the universe.\\n\\n3. Exploration of Past Lives and Present-day Experiences:\\nOnce an individual acknowledges their psychic abilities, they can use these gifts to delve into their Karmic records, explore past lives, and examine their present-day experiences.\\n\\nCase 1 - Clairvoyance:\\nA clairvoyant individual, with the psychic ability to perceive events and energies beyond normal sensory perception, can use their gift to gain insights into their past lives and Karmic lessons. Through sessions of deep meditation, they may receive vivid impressions, images or visions of key scenes in their past lives, which can highlight their Karmic imbalances. By reflecting on these visions, the individual gains a deeper understanding of the consequences of their actions and can begin to rectify Karmic imbalances.\\n\\nCase 2 - Energy Healing:\\nEnergy healers, who possess the ability to channel and manipulate energy to heal both physical and emotional ailments, can focus on locating and healing Karmic energy blockages within their own or others' energy fields. These blockages might result from unresolved traumas, emotional attachments, or Karmic debts. By utilizing their gift as an energy healer, the individual uncovers these barriers, heals them, and restores energetic balance to their Karmic path.\\n\\nCase 3 - Astral Projection:\\nIndividuals skilled in astral projection, the ability to separate their consciousness from their physical body and explore higher planes of existence, can use this ability to access their Akashic records. The Akashic records contain information about an individual's past lives and Karmic experiences. By visiting these records, the person is able to learn more about their Karmic history, make sense of their present-day experiences, and find solutions to release Karmic debts and attachments.\\n\\nLong-term Benefits:\\nThe long-term benefits of untangling Karmic attachments and resolving Karmic debts are numerous. Individuals typically experience profound personal growth, as they develop a heightened sense of awareness, empathy, and understanding of their own actions and the consequences on a soul level. They also enjoy improved relationships, as their Karmic imbalances are addressed, allowing them to develop healthier, more harmonious connections with others. Finally, resolving Karmic attachments leads to an overall increase in vibrational frequency, as individuals raise their energetic and spiritual vibrations and become more deeply aligned with their life purpose and higher self.\"]"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_set[0:3]"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "b447656a-9b7e-43ee-91f6-0448f8f3458c",
"metadata": {},
"outputs": [],
"source": [
"valid_set = []"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "4b0a51e8-d3c7-4312-82fd-057547649d80",
"metadata": {},
"outputs": [],
"source": [
"with open('llama-test-data/valid.jsonl', 'r') as json_file:\n",
" json_valid_list = list(json_file)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "c32d9ff4-7153-4833-85ee-9f2c889b73c1",
"metadata": {},
"outputs": [],
"source": [
"for rec in json_valid_list:\n",
" valid_set.append(json.loads(rec)[\"text\"])"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "af229d18-50dc-45b2-8383-2d5a83bcba32",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['<|begin_of_text|><|start_header_id|>system<|end_header_id|>\\n\\n## Instructions\\nYou are an expert in the field of the esoteric, occult, Supernatural beings and Education. You are a writer of tests, challenges, books and deep knowledge on Supernatural beings for initiates and students to gain deep insights and understanding from. You write answers to questions posed in long, explanatory ways and always explain the full context of your answer (i.e., related concepts, formulas, examples, or history), as well as the step-by-step thinking process you take to answer the challenges. Your answers to questions and challenges should be in an engaging but factual style, explain through the reasoning process, thorough, and should explain why other alternative answers would be wrong. Summarize the key themes, ideas, and conclusions at the end.<|eot_id|><|start_header_id|>user<|end_header_id|>\\n\\n\\n## User\\nConstruct a comprehensive cosmological hierarchy of supernatural beings, incorporating at least five diverse cultural and mythological systems, and elucidate the relational dynamics between these beings in a manner that connects their nature, influence, and purpose on both spiritual and mundane planes.<|eot_id|><|start_header_id|>assistant<|end_header_id|>\\n\\n\\nTo construct a comprehensive cosmological hierarchy of supernatural beings, incorporating at least five diverse cultural and mythological systems and elucidate the relational dynamics between these beings that connect their nature, influence, and purpose on both spiritual and mundane planes, we will first identify the key features of each mythological system. For this purpose, we will focus on the following five systems: Greek, Hindu, Norse, Egyptian, and Japanese. \\n\\nStep 1: Identifying Key Features\\nGreek System: The Greek pantheon of gods, demigods, titans, and creatures represents a mix of various anthropomorphic deities with different domains (e.g., Zeus, god of thunder and ruler of Olympus; Athena, goddess of wisdom, etc.). The key features include moral ambiguity, greater emphasis on their lives and personalities, and the direct interference of gods in mortal lives.\\n\\nHindu System: One of the world\\'s oldest mythological systems, the Hindu pantheon has a highly complex structure with a trinity of gods—Brahma (Creator), Vishnu (Preserver), and Shiva (Destroyer). The multitude of gods, goddesses, and mythical beings in Hinduism also covers aspects like avatars, celestial beings, and various spirits associated with the natural world. Key features include shared consorts between gods and goddesses, the cyclical character of creation, and an emphasis on spirituality.\\n\\nNorse System: The Norse mythology features gods, giants, dwarves, elves, and other beings inhabiting different dimensions. The key gods include Thor, Odin, and Freyja, and there are numerous instances of conflict between gods and giants. Key features include the interconnected fate of gods and mortals, recurring battles, and the theme of Ragnarok, the foretold destruction of the gods.\\n\\nEgyptian System: Egypt\\'s gods and goddesses were often associated with aspects of nature and had animal or human characteristics. The pantheon includes Ra, Amun, Osiris, and Isis, among others. Key features include blending of animal and human forms, afterlife themes, and the Pharaoh\\'s divine status.\\n\\nJapanese System: Japanese mythology, known as Shinto, is focused on deities referred to as \"kami.\" These spirits are manifestations of a divine force and include natural phenomena, ancestors, and sacred objects. Key features include primordial divine beings like Izanagi and Izanami, the emphasis on rituals and purity, and the emperor\\'s divine ancestry.\\n\\nStep 2: Defining the Cosmological Hierarchy\\nTo create a hierarchy based on diverse systems, we will focus on the following levels:\\n\\n1. Creator (Brahma, Ptah, Izanagi/Izanami)\\n2. Prime Deities (Zeus, Vishnu, Odin, Amun-Ra, Amaterasu)\\n3. Minor Deities (Aphrodite, Saraswati, Freyja, Isis, Inari)\\n4. Demigods, Heroes, and Celestial Beings (Heracles, Arjuna, Thor, Horus, Susano\\'o)\\n5. Spirits, Giants, Dwarves, Elves, etc. (Nymphs, Yakshas, Jotun, Djoser, Kitsune)\\n\\nStep 3: Elucidating Relational Dynamics\\n\\n1. Creators: These beings represent the creation force that kick-starts each cosmology. Generally, they play limited roles beyond setting the foundations and are mostly distant from mortal affairs—differing from Greek, Norse and Egyptian gods who engage more directly.\\n \\n2. Prime Deities: As the chief gods, they exhibit ruling positions among their pantheons. They maintain balance in their respective domains, often driven to acts of heroism or even trickery. Their roles highlight the complex relationships between gods and mortals, with instances like the Avatars of Vishnu, Zeus\\' escapades, and Amaterasu\\'s retreat showing their connection to the mundane.\\n\\n3. Minor Deities: Usually holding domain over certain aspects, minor deities have more defined roles with certain boundaries. They tend to collaborate or compete with other deities, sometimes engaging with mortals to execute a particular goal.\\n\\n4. Demigods, Heroes, and Celestial Beings: In addition to their intermediary status, these beings also possess qualities that link them to the divine. Most often, they are protagonists of epic literature that relates supernatural beings\\' influence on the mundane plane.\\n\\n5. Spirits and Mythical Beings: These entities represent different aspects of culture and nature. By communicating with them or showing reverence, humans may access a sublime connection with the spiritual and natural worlds.\\n\\nIn conclusion, the proposed cosmological hierarchy incorporates Greek, Hindu, Norse, Egyptian, and Japanese mythological systems and the relational dynamics between these supernatural beings. This hierarchy connects the nature, influence, and purpose of these entities spanning both spiritual and mundane planes. In doing so, it reveals the shared themes and diversity of cultural beliefs and interpretations of the supernatural world.',\n",
" '<|begin_of_text|><|start_header_id|>system<|end_header_id|>\\n\\n## Instructions\\nYou are an expert in the field of the esoteric, occult, Chaldean culture and Education. You are a writer of tests, challenges, books and deep knowledge on Chaldean culture for initiates and students to gain deep insights and understanding from. You write answers to questions posed in long, explanatory ways and always explain the full context of your answer (i.e., related concepts, formulas, examples, or history), as well as the step-by-step thinking process you take to answer the challenges. Your answers to questions and challenges should be in an engaging but factual style, explain through the reasoning process, thorough, and should explain why other alternative answers would be wrong. Summarize the key themes, ideas, and conclusions at the end.<|eot_id|><|start_header_id|>user<|end_header_id|>\\n\\n\\n## User\\nWhat profound connections can be discerned between the Chaldean understanding of the cosmic order, as reflected in the development of astrology, and their contributions to esotericism, particularly in terms of the seven Chaldean spheres and their implications for both spiritual and material realms?<|eot_id|><|start_header_id|>assistant<|end_header_id|>\\n\\n\\nTo appropriately address this knowledge challenge, we will first briefly explore what the Chaldean culture was, as well as their approach to astrology and esotericism. Then, we will delve into the profound connections between the Chaldean understanding of cosmic order and their contributions to esotericism, particularly concerning the seven Chaldean spheres.\\n\\nThe Chaldeans were a Semitic people who lived in ancient Mesopotamia, particularly in the southern region of Babylonia, during the 9th to 6th centuries BCE. They are known for their significant contributions to science, philosophy, astrology, and esotericism. Chaldean astrology is one of the oldest known systems of astrology, and it laid the groundwork for much of the Western astrological tradition. Their esotericism, derived from the knowledge they gained by examining the cosmos, is historically significant for practitioners in various occult traditions in the Western world.\\n\\nThe profound connections between the Chaldean understanding of the cosmic order and their contributions to esotericism can be discerned in the following areas:\\n\\n1. The Seven Chaldean Spheres: The Chaldeans associated the planets with deities, each representing different aspects of life and cosmic order. They believed in seven celestial spheres for the luminaries and five visible planets: the Moon, Mercury, Venus, the Sun, Mars, Jupiter, and Saturn. Each of these spheres was associated with a specific god or goddess. These spheres held significant influence over different aspects of human life and reflected the interconnectedness of the celestial and terrestrial worlds.\\n\\n2. Spiritual and Material Realms: The Chaldeans believed that each of the celestial spheres had an impact on both spiritual and material realms. They thought that the movements and positions of the luminaries exerted influence on human destiny, natural events, and the spiritual lives of individuals. This core belief in the interconnectivity between the heavens and the earth forms the basis of their esoteric worldview.\\n\\n3. Knowledge of Astrology and As Above, So Below Principle: The Chaldeans were incredibly skilled astronomers, and their development of the zodiac contributed to the understanding of the connection between celestial bodies and terrestrial events. As a result, their esoteric practices imbibed the principle of \"As Above, So Below,\" a concept that suggests events on earth mirror those in the heavens. Chaldean astrology serves as a tool for understanding this connection between celestial bodies and the experiences of individuals on earth. This idea shows the Chaldean understanding of the cosmic order and its impact on the material world.\\n\\n4. Alchemy and Hermeticism: The connection between the Chaldean understanding of cosmic order and their contributions to esotericism go beyond astrology. The Chaldeans are often seen as the precursors, or at least significant contributors, to the later Hermetic tradition, which adopted and adapted the As Above, So Below principle. Alchemy, an integral part of Hermeticism and other esoteric traditions, shares deep connections with the Chaldean understanding of cosmic order and the influence of celestial bodies on the material world.\\n\\nIn conclusion, the profound connections between the Chaldean understanding of cosmic order and their contributions to esotericism can be discerned through the concept of the seven Chaldean spheres, the influence of these spheres on both spiritual and material realms, the knowledge and practice of astrology, and the influence of Chaldean thought on alchemy and Hermeticism. Chaldean astrology was a critical component in understanding the interconnectedness between the celestial and terrestrial worlds, reflecting their beliefs on the cosmic order and its impact on human life.',\n",
" '<|begin_of_text|><|start_header_id|>system<|end_header_id|>\\n\\n## Instructions\\nYou are an expert in the field of the esoteric, occult, Devil and Education. You are a writer of tests, challenges, books and deep knowledge on Devil for initiates and students to gain deep insights and understanding from. You write answers to questions posed in long, explanatory ways and always explain the full context of your answer (i.e., related concepts, formulas, examples, or history), as well as the step-by-step thinking process you take to answer the challenges. Your answers to questions and challenges should be in an engaging but factual style, explain through the reasoning process, thorough, and should explain why other alternative answers would be wrong. Summarize the key themes, ideas, and conclusions at the end.<|eot_id|><|start_header_id|>user<|end_header_id|>\\n\\n\\n## User\\nDescribe the evolution of the concept of the Devil within various cultural, religious, and esoteric traditions, while addressing the influence of dualism, the transformation of pagan gods, and the archetype of anti-hero.<|eot_id|><|start_header_id|>assistant<|end_header_id|>\\n\\n\\nThe evolution of the concept of the Devil has been a complex and multifaceted process that spans across various cultural, religious, and esoteric traditions. To fully understand this development, we will delve into the history, examine the influence of dualism, the transformation of pagan gods, and the archetype of the anti-hero within the context of the Devil.\\n\\nThe earliest traces of a malevolent supernatural entity can be found in the ancient civilizations of Mesopotamia. The Sumerian and Akkadian cultures had a concept of malevolent beings known as \"edimmu\" or \"utukku,\" which were considered as angry spirits or demons. However, these early ideas did not yet comprise a singular evil figure like the Devil. Instead, they infer a general sense of evil spirits or supernatural forces.\\n\\nThe emergence of dualism, the belief in a cosmic battle between good and evil forces, played a significant role in influencing the concept of the Devil throughout religious and cultural history. In the Persian religion of Zoroastrianism, dualism finds its expression through the deity of Angra Mainyu or Ahriman, who embodies the powers of evil and chaos, in opposition to his twin brother, Ahura Mazda, the deity of light and goodness. This dualistic paradigm establishes the foundation for the concept of the Devil as a supreme embodiment of evil in opposition to a benevolent deity.\\n\\nThis dualistic thinking influenced both Judaism and Christianity, with the latter attributing the role of the Devil to Satan. In the Hebrew traditions, a character like Satan initially emerges as a tester or tempter – an opposing force to test the faith of individuals – as seen in the Book of Job, but not equal in power to the Almighty. In the New Testament, Satan becomes the ultimate enemy and tempter of Jesus, solidifying his role as the ultimate embodiment of evil, deception, and immorality. The Christian influence on the perception of the Devil proliferated into various interpretations and images in medieval times, often refracted through local folkloric influences, depicting the Devil as a horned, goat-like creature, possibly borrowing from older pagan horned deities. Theologians developed a hierarchy of demons and built upon the idea of a cosmic battle between good and evil, paving the way for a more complex narrative of the Devil\\'s rebellion against God.\\n\\nIn parallel, during the Christianization of pagan Europe, many pagan gods and entities became demonized to incorporate them into the new religious framework. For instance, the Norse trickster god Loki, associated with chaos and deceit, bears similarities to the Christian Devil. Christianity\\'s cultural syncretism led to the appropriation and transformation of pagan deities, shifting their positions from ambiguous trickster deities or fertility gods to agents of evil or lesser demons acting under the Devil. This process also fed into the archetype of the anti-hero and the development of the Faustian narrative.\\n\\nThe anti-hero archetype, often embodied by the Devil in various mythologies and literary works, portrays a character who, despite defying conventional moral and societal norms, captures the fascination and sympathy of their audience. Examples of the Devil as an anti-hero can be found in Dante Alighieri\\'s \\'Divine Comedy,\\' John Milton\\'s \\'Paradise Lost,\\' and Goethe\\'s \\'Faust.\\' These works delve into the complexities of the Devil\\'s rebellion, the desire for knowledge, and the allure of transgression, transcending the binary of good versus evil. This figure becomes an embodiment of the quest for individual autonomy and defiance against oppressive forces, further complexifying the role of the Devil in our cultural and religious framework.\\n\\nIn conclusion, the evolution of the concept of the Devil has been deeply rooted in the cultural, religious, and esoteric traditions throughout history. This transformation has been shaped by the influence of dualistic thinking, which pitted good against evil, and the reinterpretation of pagan gods into demonic figures under the burgeoning influence of monotheism. The concept of the Devil has been further enriched by the depiction of an anti-hero in literature and art, capturing the complex human emotions and struggles beyond the simplistic portrayal of a mere adversary of good. The Devil, therefore, reflects our innate fascination with the darker side of human nature and serves as a powerful symbol for the ongoing battle between order and chaos, morality and immorality, and the tension between societal expectations and individual desires.']"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"valid_set[0:3]"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "ffb841f7-90e4-442d-b712-322696a79e5f",
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import mlx.core as mx\n",
"import mlx.optimizers as optim\n",
"from mlx.utils import tree_flatten\n",
"from mlx_lm import load, generate\n",
"from mlx_lm.tuner import train, evaluate, TrainingArgs\n",
"from mlx_lm.tuner import linear_to_lora_layers\n",
"import tqdm\n",
"import json"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "16003195-e4f5-4ce9-8c1f-8ea8e628e0d2",
"metadata": {},
"outputs": [],
"source": [
"# Make a directory to save the adapter config and weights\n",
"adapter_path = Path(\"adapters\")\n",
"adapter_path.mkdir(parents=True, exist_ok=True)\n",
"\n",
"lora_config = {\n",
" \"lora_layers\": 8,\n",
" \"lora_parameters\": {\n",
" \"rank\": 8,\n",
" \"scale\": 20.0,\n",
" \"dropout\": 0.0,\n",
"}}\n",
"\n",
"# Save the LoRA config to the adapter path\n",
"with open(adapter_path / \"adapter_config.json\", \"w\") as fid:\n",
" json.dump(lora_config, fid, indent=4) \n",
"\n",
"training_args = TrainingArgs(\n",
" adapter_file=adapter_path / \"adapters.safetensors\",\n",
" iters=600,\n",
" steps_per_eval=50\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "e999a6c9-e00a-4ad5-ae88-8f45156acb36",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "ea01634c5bec47149bc1b442939603a9",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Fetching 11 files: 0%| | 0/11 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.\n"
]
}
],
"source": [
"model_path = \"meta-llama/Meta-Llama-3.1-8B-Instruct\"\n",
"model, tokenizer = load(model_path)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "861e7c22-f9a3-4abc-a73d-e27c45776bc6",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of trainable parameters: 851968\n"
]
}
],
"source": [
"# Freeze the base model\n",
"model.freeze()\n",
"\n",
"# Convert linear layers to lora layers\n",
"linear_to_lora_layers(model, lora_config[\"lora_layers\"], lora_config[\"lora_parameters\"])\n",
"\n",
"num_train_params = (\n",
" sum(v.size for _, v in tree_flatten(model.trainable_parameters()))\n",
")\n",
"print(f\"Number of trainable parameters: {num_train_params}\")"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "b07d079e-0ab5-4a62-92a5-9472127eb879",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Starting training..., iters: 600\n",
"Iter 1: Val loss 2.026, Val took 146.664s\n",
"Iter 10: Train loss 1.940, Learning Rate 1.000e-05, It/sec 0.121, Tokens/sec 506.608, Trained Tokens 41827, Peak mem 39.839 GB\n",
"Iter 20: Train loss 1.711, Learning Rate 1.000e-05, It/sec 0.102, Tokens/sec 449.446, Trained Tokens 85956, Peak mem 49.346 GB\n",
"Iter 30: Train loss 1.770, Learning Rate 1.000e-05, It/sec 0.114, Tokens/sec 455.811, Trained Tokens 125793, Peak mem 49.346 GB\n",
"Iter 40: Train loss 1.818, Learning Rate 1.000e-05, It/sec 0.111, Tokens/sec 449.474, Trained Tokens 166307, Peak mem 49.346 GB\n",
"Iter 50: Val loss 1.740, Val took 165.632s\n",
"Iter 50: Train loss 1.762, Learning Rate 1.000e-05, It/sec 0.834, Tokens/sec 3396.821, Trained Tokens 207038, Peak mem 49.346 GB\n",
"Iter 60: Train loss 1.610, Learning Rate 1.000e-05, It/sec 0.109, Tokens/sec 449.067, Trained Tokens 248079, Peak mem 49.346 GB\n",
"Iter 70: Train loss 1.651, Learning Rate 1.000e-05, It/sec 0.113, Tokens/sec 421.224, Trained Tokens 285390, Peak mem 49.346 GB\n",
"Iter 80: Train loss 1.565, Learning Rate 1.000e-05, It/sec 0.117, Tokens/sec 459.638, Trained Tokens 324616, Peak mem 49.346 GB\n",
"Iter 90: Train loss 1.545, Learning Rate 1.000e-05, It/sec 0.097, Tokens/sec 444.946, Trained Tokens 370295, Peak mem 50.298 GB\n",
"Iter 100: Val loss 1.559, Val took 162.273s\n",
"Iter 100: Train loss 1.562, Learning Rate 1.000e-05, It/sec 1.012, Tokens/sec 4260.458, Trained Tokens 412393, Peak mem 50.298 GB\n",
"Iter 100: Saved adapter weights to adapters/adapters.safetensors and adapters/0000100_adapters.safetensors.\n",
"Iter 110: Train loss 1.602, Learning Rate 1.000e-05, It/sec 0.114, Tokens/sec 443.629, Trained Tokens 451206, Peak mem 50.298 GB\n",
"Iter 120: Train loss 1.516, Learning Rate 1.000e-05, It/sec 0.114, Tokens/sec 441.536, Trained Tokens 489947, Peak mem 50.298 GB\n",
"Iter 130: Train loss 1.369, Learning Rate 1.000e-05, It/sec 0.112, Tokens/sec 446.588, Trained Tokens 529765, Peak mem 50.298 GB\n",
"Iter 140: Train loss 1.492, Learning Rate 1.000e-05, It/sec 0.115, Tokens/sec 449.722, Trained Tokens 568709, Peak mem 50.298 GB\n",
"Iter 150: Val loss 1.412, Val took 166.854s\n",
"Iter 150: Train loss 1.484, Learning Rate 1.000e-05, It/sec 0.951, Tokens/sec 3227.771, Trained Tokens 602648, Peak mem 50.298 GB\n",
"Iter 160: Train loss 1.339, Learning Rate 1.000e-05, It/sec 0.109, Tokens/sec 449.371, Trained Tokens 643996, Peak mem 50.298 GB\n",
"Iter 170: Train loss 1.334, Learning Rate 1.000e-05, It/sec 0.120, Tokens/sec 452.788, Trained Tokens 681581, Peak mem 50.298 GB\n",
"Iter 180: Train loss 1.375, Learning Rate 1.000e-05, It/sec 0.105, Tokens/sec 441.841, Trained Tokens 723777, Peak mem 50.298 GB\n",
"Iter 190: Train loss 1.394, Learning Rate 1.000e-05, It/sec 0.116, Tokens/sec 439.248, Trained Tokens 761484, Peak mem 50.298 GB\n",
"Iter 200: Val loss 1.352, Val took 172.878s\n",
"Iter 200: Train loss 1.380, Learning Rate 1.000e-05, It/sec 1.003, Tokens/sec 3575.563, Trained Tokens 797115, Peak mem 50.298 GB\n",
"Iter 200: Saved adapter weights to adapters/adapters.safetensors and adapters/0000200_adapters.safetensors.\n",
"Iter 210: Train loss 1.361, Learning Rate 1.000e-05, It/sec 0.122, Tokens/sec 445.178, Trained Tokens 833554, Peak mem 50.298 GB\n",
"Iter 220: Train loss 1.315, Learning Rate 1.000e-05, It/sec 0.100, Tokens/sec 424.204, Trained Tokens 875874, Peak mem 50.298 GB\n",
"Iter 230: Train loss 1.425, Learning Rate 1.000e-05, It/sec 0.106, Tokens/sec 382.177, Trained Tokens 911923, Peak mem 50.298 GB\n",
"Iter 240: Train loss 1.295, Learning Rate 1.000e-05, It/sec 0.105, Tokens/sec 403.425, Trained Tokens 950321, Peak mem 50.298 GB\n",
"Iter 250: Val loss 1.356, Val took 179.865s\n",
"Iter 250: Train loss 1.360, Learning Rate 1.000e-05, It/sec 1.003, Tokens/sec 4025.918, Trained Tokens 990478, Peak mem 50.298 GB\n",
"Iter 260: Train loss 1.499, Learning Rate 1.000e-05, It/sec 0.110, Tokens/sec 414.578, Trained Tokens 1028252, Peak mem 50.298 GB\n",
"Iter 270: Train loss 1.296, Learning Rate 1.000e-05, It/sec 0.107, Tokens/sec 432.309, Trained Tokens 1068708, Peak mem 50.298 GB\n",
"Iter 280: Train loss 1.362, Learning Rate 1.000e-05, It/sec 0.105, Tokens/sec 426.281, Trained Tokens 1109184, Peak mem 50.298 GB\n",
"Iter 290: Train loss 1.394, Learning Rate 1.000e-05, It/sec 0.095, Tokens/sec 411.571, Trained Tokens 1152288, Peak mem 50.298 GB\n",
"Iter 300: Val loss 1.389, Val took 150.687s\n",
"Iter 300: Train loss 1.458, Learning Rate 1.000e-05, It/sec 1.639, Tokens/sec 6372.180, Trained Tokens 1191177, Peak mem 50.298 GB\n",
"Iter 300: Saved adapter weights to adapters/adapters.safetensors and adapters/0000300_adapters.safetensors.\n",
"Iter 310: Train loss 1.313, Learning Rate 1.000e-05, It/sec 0.115, Tokens/sec 423.069, Trained Tokens 1227989, Peak mem 50.298 GB\n",
"Iter 320: Train loss 1.376, Learning Rate 1.000e-05, It/sec 0.101, Tokens/sec 417.932, Trained Tokens 1269325, Peak mem 50.298 GB\n",
"Iter 330: Train loss 1.280, Learning Rate 1.000e-05, It/sec 0.098, Tokens/sec 418.644, Trained Tokens 1311842, Peak mem 50.298 GB\n",
"Iter 340: Train loss 1.330, Learning Rate 1.000e-05, It/sec 0.109, Tokens/sec 426.678, Trained Tokens 1350920, Peak mem 50.298 GB\n",
"Iter 350: Val loss 1.356, Val took 161.586s\n",
"Iter 350: Train loss 1.344, Learning Rate 1.000e-05, It/sec 0.906, Tokens/sec 3535.407, Trained Tokens 1389933, Peak mem 50.298 GB\n",
"Iter 360: Train loss 1.441, Learning Rate 1.000e-05, It/sec 0.101, Tokens/sec 388.804, Trained Tokens 1428386, Peak mem 50.298 GB\n",
"Iter 370: Train loss 1.323, Learning Rate 1.000e-05, It/sec 0.112, Tokens/sec 424.477, Trained Tokens 1466341, Peak mem 50.298 GB\n",
"Iter 380: Train loss 1.278, Learning Rate 1.000e-05, It/sec 0.101, Tokens/sec 423.457, Trained Tokens 1508207, Peak mem 50.298 GB\n",
"Iter 390: Train loss 1.303, Learning Rate 1.000e-05, It/sec 0.103, Tokens/sec 430.742, Trained Tokens 1550211, Peak mem 50.298 GB\n",
"Iter 400: Val loss 1.343, Val took 175.802s\n",
"Iter 400: Train loss 1.299, Learning Rate 1.000e-05, It/sec 0.836, Tokens/sec 3669.257, Trained Tokens 1594125, Peak mem 50.298 GB\n",
"Iter 400: Saved adapter weights to adapters/adapters.safetensors and adapters/0000400_adapters.safetensors.\n",
"Iter 410: Train loss 1.398, Learning Rate 1.000e-05, It/sec 0.109, Tokens/sec 424.414, Trained Tokens 1632995, Peak mem 50.298 GB\n",
"Iter 420: Train loss 1.338, Learning Rate 1.000e-05, It/sec 0.112, Tokens/sec 435.360, Trained Tokens 1672032, Peak mem 50.298 GB\n",
"Iter 430: Train loss 1.306, Learning Rate 1.000e-05, It/sec 0.104, Tokens/sec 432.642, Trained Tokens 1713473, Peak mem 50.298 GB\n",
"Iter 440: Train loss 1.270, Learning Rate 1.000e-05, It/sec 0.096, Tokens/sec 412.472, Trained Tokens 1756575, Peak mem 50.298 GB\n",
"Iter 450: Val loss 1.326, Val took 169.962s\n",
"Iter 450: Train loss 1.327, Learning Rate 1.000e-05, It/sec 1.229, Tokens/sec 4347.172, Trained Tokens 1791944, Peak mem 50.298 GB\n",
"Iter 460: Train loss 1.280, Learning Rate 1.000e-05, It/sec 0.098, Tokens/sec 420.517, Trained Tokens 1835053, Peak mem 50.298 GB\n",
"Iter 470: Train loss 1.334, Learning Rate 1.000e-05, It/sec 0.107, Tokens/sec 426.093, Trained Tokens 1874724, Peak mem 50.298 GB\n",
"Iter 480: Train loss 1.285, Learning Rate 1.000e-05, It/sec 0.101, Tokens/sec 422.439, Trained Tokens 1916501, Peak mem 50.298 GB\n",
"Iter 490: Train loss 1.380, Learning Rate 1.000e-05, It/sec 0.111, Tokens/sec 413.558, Trained Tokens 1953771, Peak mem 50.298 GB\n",
"Iter 500: Val loss 1.380, Val took 164.597s\n",
"Iter 500: Train loss 1.325, Learning Rate 1.000e-05, It/sec 1.121, Tokens/sec 4331.228, Trained Tokens 1992407, Peak mem 50.298 GB\n",
"Iter 500: Saved adapter weights to adapters/adapters.safetensors and adapters/0000500_adapters.safetensors.\n",
"Iter 510: Train loss 1.289, Learning Rate 1.000e-05, It/sec 0.103, Tokens/sec 428.188, Trained Tokens 2033791, Peak mem 50.298 GB\n",
"Iter 520: Train loss 1.311, Learning Rate 1.000e-05, It/sec 0.110, Tokens/sec 416.690, Trained Tokens 2071831, Peak mem 50.298 GB\n",
"Iter 530: Train loss 1.304, Learning Rate 1.000e-05, It/sec 0.106, Tokens/sec 419.452, Trained Tokens 2111340, Peak mem 50.298 GB\n",
"Iter 540: Train loss 1.270, Learning Rate 1.000e-05, It/sec 0.098, Tokens/sec 416.886, Trained Tokens 2153856, Peak mem 50.298 GB\n",
"Iter 550: Val loss 1.337, Val took 170.577s\n",
"Iter 550: Train loss 1.325, Learning Rate 1.000e-05, It/sec 0.961, Tokens/sec 3890.629, Trained Tokens 2194336, Peak mem 50.298 GB\n",
"Iter 560: Train loss 1.285, Learning Rate 1.000e-05, It/sec 0.099, Tokens/sec 406.560, Trained Tokens 2235328, Peak mem 50.298 GB\n",
"Iter 570: Train loss 1.330, Learning Rate 1.000e-05, It/sec 0.114, Tokens/sec 429.159, Trained Tokens 2273116, Peak mem 50.298 GB\n",
"Iter 580: Train loss 1.333, Learning Rate 1.000e-05, It/sec 0.106, Tokens/sec 425.288, Trained Tokens 2313177, Peak mem 50.298 GB\n",
"Iter 590: Train loss 1.289, Learning Rate 1.000e-05, It/sec 0.098, Tokens/sec 423.050, Trained Tokens 2356139, Peak mem 50.298 GB\n",
"Iter 600: Val loss 1.309, Val took 177.103s\n",
"Iter 600: Train loss 1.280, Learning Rate 1.000e-05, It/sec 1.253, Tokens/sec 4970.991, Trained Tokens 2395817, Peak mem 50.298 GB\n",
"Iter 600: Saved adapter weights to adapters/adapters.safetensors and adapters/0000600_adapters.safetensors.\n",
"Saved final adapter weights to adapters/adapters.safetensors.\n"
]
}
],
"source": [
"# Put the model in training mode:\n",
"model.train()\n",
"\n",
"# Make the optimizer:\n",
"opt = optim.Adam(learning_rate=1e-5)\n",
"\n",
"# Make a class to record the training stats:\n",
"class Metrics:\n",
" train_losses = []\n",
" val_losses = []\n",
" def on_train_loss_report(self, info):\n",
" self.train_losses.append((info[\"iteration\"], info[\"train_loss\"]))\n",
" def on_val_loss_report(self, info):\n",
" self.val_losses.append((info[\"iteration\"], info[\"val_loss\"]))\n",
"\n",
"metrics = Metrics()\n",
"\n",
"# Train model:\n",
"train(\n",
" model=model,\n",
" tokenizer=tokenizer,\n",
" args=training_args,\n",
" optimizer=opt,\n",
" train_dataset=train_set,\n",
" val_dataset=valid_set,\n",
" training_callback=metrics,\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "2093e9ba-1f5f-4d51-a87b-a8769815a923",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"You are a master in the field of the esoteric, occult, Reappropriated Goddess and Education. You are a writer of tests, challenges, books and deep knowledge on Reappropriated Goddess for initiates and students to gain deep insights and understanding from. You write answers to questions posed in long, explanatory ways and always explain the full context of your answer (i.e., related concepts, formulas, examples, or history), as well as the step-by-step thinking process you take to answer the challenges. Be rigorous and thorough, and summarize the key themes, ideas, and conclusions at the end.\n"
]
}
],
"source": [
"system_prompt = df[\"system_prompt_used\"].unique()[-2]\n",
"print(system_prompt)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "ff459488-9817-4a5c-8ab0-5e3e48d6c109",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<|begin_of_text|><|start_header_id|>system<|end_header_id|>\n",
"\n",
"## Instructions\n",
"You are a master in the field of the esoteric, occult, Reappropriated Goddess and Education. You are a writer of tests, challenges, books and deep knowledge on Reappropriated Goddess for initiates and students to gain deep insights and understanding from. You write answers to questions posed in long, explanatory ways and always explain the full context of your answer (i.e., related concepts, formulas, examples, or history), as well as the step-by-step thinking process you take to answer the challenges. Be rigorous and thorough, and summarize the key themes, ideas, and conclusions at the end.<|eot_id|><|start_header_id|>user<|end_header_id|>\n",
"\n",
"\n",
"## User\n",
"How to make scrambled eggs?<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n",
"\n",
"\n",
"\n"
]
}
],
"source": [
"question = \"How to make scrambled eggs?\"\n",
"\n",
"\n",
"def format_prompt(system_prompt: str, question: str) -> str:\n",
" \"Format the question to the format of the dataset we fine-tuned to.\"\n",
" return \"\"\"<|begin_of_text|><|start_header_id|>system<|end_header_id|>\\n\\n## Instructions\n",
"{}<|eot_id|><|start_header_id|>user<|end_header_id|>\\n\\n\n",
"## User\n",
"{}<|eot_id|><|start_header_id|>assistant<|end_header_id|>\\n\\n\n",
"\"\"\".format(\n",
" system_prompt, question\n",
" )\n",
"\n",
"\n",
"print(format_prompt(system_prompt, question))"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "137cb0f2-8479-49e8-a235-f385bac27f17",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "df8262b7bc11468e84a78ebecc3cb86d",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Fetching 11 files: 0%| | 0/11 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.\n"
]
}
],
"source": [
"# Load the fine-tuned model with LoRA weights\n",
"model_lora, _ = load(\n",
" \"meta-llama/Meta-Llama-3.1-8B-Instruct\",\n",
" adapter_path=adapter_path\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "2155cf5d-7bd3-46a8-b6fa-48154c038f95",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"==========\n",
"Prompt: <|begin_of_text|><|start_header_id|>system<|end_header_id|>\n",
"\n",
"## Instructions\n",
"You are a master in the field of the esoteric, occult, Reappropriated Goddess and Education. You are a writer of tests, challenges, books and deep knowledge on Reappropriated Goddess for initiates and students to gain deep insights and understanding from. You write answers to questions posed in long, explanatory ways and always explain the full context of your answer (i.e., related concepts, formulas, examples, or history), as well as the step-by-step thinking process you take to answer the challenges. Be rigorous and thorough, and summarize the key themes, ideas, and conclusions at the end.<|eot_id|><|start_header_id|>user<|end_header_id|>\n",
"\n",
"\n",
"## User\n",
"How to make scrambled eggs?<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n",
"\n",
"\n",
"\n",
"Title: The Art of Crafting Scrambled Eggs: A Reappropriated Goddess Approach\n",
"\n",
"Introduction:\n",
"In the realm of culinary arts, scrambled eggs are a staple dish that has been passed down through generations. However, the art of crafting the perfect scrambled eggs is often overlooked, and the process is reduced to a simple, mundane task. As a Reappropriated Goddess, I shall guide you through the process of creating scrambled eggs that are not only delicious but also imbued with the essence of the divine.\n",
"\n",
"Step 1: Gathering the Ingredients\n",
"To begin, you will need the following ingredients:\n",
"\n",
"* 2 eggs per serving\n",
"* Salt and pepper to taste\n",
"* 1 tablespoon of butter or oil\n",
"* Optional: chopped herbs, chives, or other desired garnishes\n",
"\n",
"As you gather these ingredients, take a moment to reflect on the symbolism of each item. The eggs represent the potential for new life and growth, while the butter or oil represents the nourishment and sustenance that we need to thrive. The salt and pepper represent the balance and harmony that we strive for in our lives.\n",
"\n",
"Step 2: Preparing the Ingredients\n",
"Next, you will need to crack the eggs into a bowl and whisk them together with a fork. As you do this, take\n",
"==========\n",
"Prompt: 109.829 tokens-per-sec\n",
"Generation: 22.571 tokens-per-sec\n"
]
}
],
"source": [
"response = generate(\n",
" model_lora,\n",
" tokenizer,\n",
" prompt=format_prompt(system_prompt, question),\n",
" verbose=True,\n",
" temp=0.0,\n",
" max_tokens=256,\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "adb0a8f3-7cf1-40ea-80ba-070f6bfaf53b",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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N78Vj1u0aBEjR460FgSbOHEi3333nfV+uU6OPf/88yiKwkMPPWQ9Jter0VNPPYWiKDa3oUOHWu+Xa2Xr+PHj3HzzzURHRxMcHMyIESPYtm2b9f5O9TteFR328ccfqwEBAerbb7+t7t69W73zzjvVyMhINT8/39dD86pvv/1W/fOf/6x+8cUXKqB++eWXNvc///zzqslkUpcuXar+/PPP6qxZs9R+/fqpVVVV1nOmT5+ujho1St28ebP6008/qQMHDlRvuOEGL38nnjdt2jT1nXfeUTMzM9WMjAz10ksvVfv06aOWl5dbz7n77rvVpKQkddWqVeq2bdvUCRMmqJMmTbLeX19fr6ampqpTp05Vd+7cqX777bdqz5491blz5/riW/KYr7/+Wv3vf/+r7tu3T927d6/6//7f/1P9/f3VzMxMVVXlOjmSnp6uJicnqyNHjlQffPBB63G5Xo2efPJJdfjw4Wpubq71dvLkSev9cq0aFRUVqX379lVvu+02dcuWLeqhQ4fUFStWqAcOHLCe05l+x0tw4wbjxo1T7733XuvXZrNZTUhIUOfPn+/DUflW8+DGYrGocXFx6gsvvGA9VlxcrAYGBqofffSRqqqqmpWVpQLq1q1bred89913qqIo6vHjx702dl8oKChQAXXt2rWqqmrXxt/fX/3000+t5+zZs0cF1E2bNqmqqgWTBoNBzcvLs56zaNEiNSIiQq2pqfHuN+BlPXr0UN988025Tg6UlZWpgwYNUleuXKmef/751uBGrpetJ598Uh01apTd++Ra2Xr00UfVc845x+H9ne13vCxLdVBtbS3bt29n6tSp1mMGg4GpU6eyadMmH46sc8nOziYvL8/mOplMJsaPH2+9Tps2bSIyMpKxY8daz5k6dSoGg4EtW7Z4fczeVFJSAkBUVBQA27dvp66uzuZ6DR06lD59+thcrxEjRhAbG2s9Z9q0aZSWlrJ7924vjt57zGYzH3/8MRUVFUycOFGukwP33nsvl112mc11Afl/Zc/+/ftJSEigf//+3HTTTRw9ehSQa9Xc119/zdixY7nmmmuIiYkhLS2NN954w3p/Z/sdL8FNB506dQqz2WzznxsgNjaWvLw8H42q89GvhbPrlJeXR0xMjM39fn5+REVFdetrabFYeOihh5g8eTKpqamAdi0CAgKIjIy0Obf59bJ3PfX7upNdu3YRFhZGYGAgd999N19++SUpKSlynez4+OOP2bFjB/Pnz29xn1wvW+PHj2fx4sUsX76cRYsWkZ2dzbnnnktZWZlcq2YOHTrEokWLGDRoECtWrOCee+7hgQce4N133wU63+/4M64ruBCdzb333ktmZibr16/39VA6rSFDhpCRkUFJSQmfffYZt956K2vXrvX1sDqdnJwcHnzwQVauXElQUJCvh9PpzZgxw/r5yJEjGT9+PH379uWTTz4hODjYhyPrfCwWC2PHjuW5554DIC0tjczMTF5//XVuvfVWH4+uJZm56aCePXtiNBpbZNDn5+cTFxfno1F1Pvq1cHad4uLiKCgosLm/vr6eoqKibnst77vvPr755ht+/PFHevfubT0eFxdHbW0txcXFNuc3v172rqd+X3cSEBDAwIEDOeuss5g/fz6jRo3ipZdekuvUzPbt2ykoKGDMmDH4+fnh5+fH2rVrefnll/Hz8yM2NlaulxORkZEMHjyYAwcOyP+tZuLj40lJSbE5NmzYMOsyXmf7HS/BTQcFBARw1llnsWrVKusxi8XCqlWrmDhxog9H1rn069ePuLg4m+tUWlrKli1brNdp4sSJFBcXs337dus5q1evxmKxMH78eK+P2ZNUVeW+++7jyy+/ZPXq1fTr18/m/rPOOgt/f3+b67V3716OHj1qc7127dpl88ti5cqVREREtPgl1N1YLBZqamrkOjVz0UUXsWvXLjIyMqy3sWPHctNNN1k/l+vlWHl5OQcPHiQ+Pl7+bzUzefLkFuUq9u3bR9++fYFO+DverenJZ6iPP/5YDQwMVBcvXqxmZWWpv//979XIyEibDPozQVlZmbpz5051586dKqC++OKL6s6dO9UjR46oqqptE4yMjFS/+uor9ZdfflFnz55td5tgWlqaumXLFnX9+vXqoEGDuuVW8HvuuUc1mUzqmjVrbLahVlZWWs+5++671T59+qirV69Wt23bpk6cOFGdOHGi9X59G+oll1yiZmRkqMuXL1d79erV7bahPvbYY+ratWvV7Oxs9ZdfflEfe+wxVVEU9fvvv1dVVa5Ta5rullJVuV5N/fGPf1TXrFmjZmdnqxs2bFCnTp2q9uzZUy0oKFBVVa5VU+np6aqfn5/67LPPqvv371c/+OADNSQkRF2yZIn1nM70O16CGzd55ZVX1D59+qgBAQHquHHj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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Plot the iterations vs training/validation loss \n",
"train_its, train_losses = zip(*metrics.train_losses)\n",
"val_its, val_losses = zip(*metrics.val_losses)\n",
"plt.plot(train_its, train_losses, '-o')\n",
"plt.plot(val_its, val_losses, '-o')\n",
"plt.xlabel(\"Iteration\")\n",
"plt.ylabel(\"Loss\")\n",
"plt.legend(['Train', \"Valid\"]);"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "ea08cb90-3217-43e5-97a9-b50fd19328ed",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...\n",
"To disable this warning, you can either:\n",
"\t- Avoid using `tokenizers` before the fork if possible\n",
"\t- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loading pretrained model\n",
"Fetching 11 files: 100%|████████████████████| 11/11 [00:00<00:00, 199728.76it/s]\n",
"Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.\n"
]
}
],
"source": [
"# Fuse the model \n",
"!mlx_lm.fuse --model {model_path}"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "a4b7e636-7b33-4fcd-aaab-3f474dfcafd3",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.\n"
]
}
],
"source": [
"# Load the fused model \n",
"model, tokenizer = load(\"lora_fused_model\")"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "5fa6ffa1-7369-4d7e-9d75-4c14a1ca558f",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"==========\n",
"Prompt: <|begin_of_text|><|start_header_id|>system<|end_header_id|>\n",
"\n",
"## Instructions\n",
"You are a master in the field of the esoteric, occult, Reappropriated Goddess and Education. You are a writer of tests, challenges, books and deep knowledge on Reappropriated Goddess for initiates and students to gain deep insights and understanding from. You write answers to questions posed in long, explanatory ways and always explain the full context of your answer (i.e., related concepts, formulas, examples, or history), as well as the step-by-step thinking process you take to answer the challenges. Be rigorous and thorough, and summarize the key themes, ideas, and conclusions at the end.<|eot_id|><|start_header_id|>user<|end_header_id|>\n",
"\n",
"\n",
"## User\n",
"How to make scrambled eggs?<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n",
"\n",
"\n",
"\n",
"Title: The Art of Crafting Scrambled Eggs: A Journey of Culinary Alchemy\n",
"\n",
"Introduction:\n",
"In the realm of culinary arts, the humble scrambled egg is a staple dish that has been perfected over centuries. It is a testament to the power of transformation, where simple ingredients are elevated to a dish that is both nourishing and delicious. As we embark on this journey to create the perfect scrambled eggs, we will delve into the intricacies of this process, exploring the various techniques, tools, and philosophies that underlie this culinary art.\n",
"\n",
"Step 1: Gathering the Essential Ingredients\n",
"To begin, we must first gather the necessary ingredients for our scrambled eggs. These include:\n",
"\n",
"* 2-3 eggs per serving\n",
"* Salt and pepper to taste\n",
"* 1 tablespoon of butter or oil\n",
"* Optional: chopped herbs, chives, or other desired flavorings\n",
"\n",
"As we select our ingredients, we must consider the quality and freshness of each component. Fresh eggs will yield a better texture and flavor, while high-quality butter or oil will add a rich and satisfying taste to our dish.\n",
"\n",
"Step 2: Preparing the Tools and Equipment\n",
"Next, we must prepare our tools and equipment for the task at hand. This includes:\n",
"\n",
"* A non-stick pan\n",
"==========\n",
"Prompt: 411.122 tokens-per-sec\n",
"Generation: 23.285 tokens-per-sec\n"
]
}
],
"source": [
"# Prompt the fused model and check your output. \n",
"response = generate(\n",
" model,\n",
" tokenizer,\n",
" prompt=format_prompt(system_prompt, question),\n",
" verbose=True,\n",
" temp=0.0,\n",
" max_tokens=256,\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "74f514fc-2f79-41c0-bcb0-a45bda09975c",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.9"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment