fr license:apache-2.0 region:us
---
license: apache-2.0
language:
- fr
---

## MistrAdventures:

MistrAdventures is a QLoRA finetune of Mistral-7B-Instruct-v0.1 on 10,000 excerpts of french Adventures novels.

MistrAdventures has been trained to complete the plot of an adventures novel based on a summary of previous events and a given chunk of a novel. 

It completes the plot with the style / thematic background of the genre, making up possible plot continuation. 

## Examples

> prompt = "[INST] Here is a summary of events from a novel, \nDes observations de navires sur un monstre marin géant entraînent une controverse internationale, alimentant des récits fantaisistes et des débats passionnés au sein de la société savante et des médias, suite à des incidents marins mystérieux impliquant des collisions avec des rochers inexpliqués, ce qui pousse un professeur à participer à une expédition à bord de la frégate Abraham-Lin Un professeur et son équipage entreprennent une expédition à bord de l'Abraham-Lincoln pour traquer un mystérieux narval, suscitant espoirs et débats sur l'existence de créatures marines géantes avant de finalement renoncer à leur quête infructueuse., with a passage of text that follows this summary\ndis ?– je dis qu’au moment où je me précipitai à la mer, j’entendis les hommes de barre s’écrier : « l’hélice et le gouvernail sont brisés… »– brisés ?– oui ! brisés par la dent du monstre. c’est la seule avarie, je pense, que l’abraham-lincoln ait éprouvée. mais, circonstance fâcheuse pour nous, il ne gouverne plus.– alors, nous sommes perdus !– peut-être, répondit tranquillement conseil. cependant, nous avons encore quelques heures devant nous, et en quelques heures, on fait bien des choses ! »l’imperturbable sang-froid de conseil me remonta. je nageai plus vigoureusement ; mais, gêné par mes vêtements qui me serraient comme une chape de plomb, j’éprouvais une extrême difficulté à me soutenir. conseil s’en aperçut.« que monsieur me permette de lui faire une incision », dit-il.et glissant un couteau ouvert sous mes habits, il les fendit de haut en bas d’un coup rapide. puis, il m’en débarrassa lestement, tandis que je nageais pour tous deux.à mon tour, je rendis le même service à conseil, et nous continuâmes de « naviguer » l’un près de l’autre.cependant, la situation n’en était pas moins terrible. peut-être notre disparition n’avait-elle pas été remarquée, et l’eût-elle été, la frégate ne pouvait revenir sous le vent à nous, étant démontée de son gouvernail. il ne fallait donc compter que sur ses embarcations.conseil raisonna froidement dans cette hypothèse et fit son plan en conséquence. étonnante nature ! ce phlegmatique garçon était là comme chez lui !il fut donc décidé que notre seule chance de salut étant d’être recueillis par les embarcations de l’abraham-lincoln, nous devions nous organiser de manière à les attendre le plus longtemps possible. je résolus alors de diviser nos forces afin de ne pas les épuiser simultanément, et voici ce qui fut convenu : pendant que l’un de nous, étendu sur le dos, se tiendrait, immobile, les bras croisés, les jambes allongées, l’autre nagerait et le pousserait en avant. ce rôle de remorqueur ne devait pas durer plus de dix minutes, et nous relayant ainsi, nous pouvions surnager pendant quelques heures, et peut-être jusqu’au lever du jour.faible chance ! mais l’espoir est si fortement enraciné au cœur de l’homme ! puis, nous étions deux. enfin je l’affirme bien que cela paraisse improbable, –, si je cherchais à détruire en moi toute illusion, si je voulais « désespérer », je ne le pouvais pas !la collision de la frégate et du cétacé s’était produite vers onze heures du soir environ. je comptais donc sur huit heures de nage jusqu’au lever du soleil. opération rigoureusement praticable, en nous relayant. la mer assez belle, nous fatiguait peu. parfois, je cherchais à percer du regard ces épaisses ténèbres que rompait seule la phosphorescence provoquée par nos mouvements. je regardais ces ondes lumineuses qui se brisaient sur ma main et dont la nappe miroitante se tachait de plaques livides. on eût dit que nous étions plongés dans un bain de mercure.vers une heure du matin, je fus pris d’une extrême fatigue. mes membres se raidirent sous l’étreinte de crampes violentes. conseil dut me soutenir, et le soin de. Write what will happen next in the novel. Write it in french and start with a new sentence.[/INST]"

> MistrAdventures:
> Ces précieux matériaux servaient de guide ouvert et étendu sur les larges vastissimes étendues dans l’espace d’amidie terrestre et marine  pour liser le nautilus hors de ces cercles limités comme le cadastre du monde et peut compter ses heures et minutes en toutes les parties connaise pour être considérables dans un moment et à travers plusieurs kilomètres dans un instant , la grande superficie des eaux. Ainsi le nautilus voyageait, grâce à tout ce gala, ainsi il voyage après avoir été dans des régions encore inconnue et sans cesse de nouveauté.Le capitaine Nemo, fort satisfait, attend les avis du professeur Aracharnx, lorsqu’il sera amené au monde au milieu des décennies, et qu’il donnera le soin à sa propre réputation en racontant l’histoire d’un nautilus fabriqué selon un plan qui aurait parmi peu la chance d’être mis à la disposition du grand public. Nous attendrons, nous .—, comme moi également. Mon nom le comporte , c’est une promesse . Je suis venu , sans autre prévention que d'une invitation, reçue au dernier moment de l’année dernières.... À mes ordres le commandant pourra ouvrir la petite boîte bleue, située à côté de vous au premier plan... Celle qui va surmonter la plaque verte. Il lui faut deux clés; voici-en une maintenant dans cette pointe carrée . Elle fait partie d’aurores en forme simple: La clef noirs. Pour le petit appartement de péritage dont nous parlions. elle doit vous entrer aussi facilement dans son antichamps bleudâtre délacée au sommet du tableaud d’ardoises. Par le petite patio où on descend de la terrasse aux crayères et pattie où viendrons les loups!




## Usage:

Download the file Mistral7B_fine_tuned_AVENTURES.pt to local.



```python

model_name = "mistralai/Mistral-7B-Instruct-v0.1"
ft_model = "path/to/mistradventures/local_download/Mistral7B_fine_tuned_AVENTURES.pt"
model = load_model(model_name, adapt = True, from_finetuned = True, model_path = ft_model)
tokenizer = load_tokenizer(model_name)
    
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model_inputs = tokenizer(prompt, return_tensors = "pt", add_special_tokens = False).to(device)
        
generated_ids = model.generate(**model_inputs, max_new_tokens=512, min_new_tokens=50, do_sample=True, temperature=1.2, repetition_penalty=1.2)
decoded = tokenizer.batch_decode(generated_ids)
```



#### Load Model with QLoRA & bnb config:


```python
def load_model(model_name, adapt=False, from_finetuned=False, model_path=None):
    bnb_config = BitsAndBytesConfig(
    load_in_4bit= True,
    bnb_4bit_quant_type= "nf4",
    bnb_4bit_compute_dtype= torch.bfloat16,
    bnb_4bit_use_double_quant= False,
    )
    model = AutoModelForCausalLM.from_pretrained(
       model_name,
        quantization_config=bnb_config,
        device_map={"": 0}
    )
    model.config.use_cache = False # silence the warnings. Please re-enable for inference!
    model.config.pretraining_tp = 1
    model.gradient_checkpointing_enable()

    #Adding the adapters in the layers in case of adaptation
    if adapt:
        model = prepare_model_for_kbit_training(model)
        peft_config = LoraConfig(
                r=16,
                lora_alpha=16,
                lora_dropout=0.05,
                bias="none",
                task_type="CAUSAL_LM",
                target_modules=["q_proj", "k_proj", "v_proj", "o_proj","gate_proj"]
            )
        model = get_peft_model(model, peft_config)
    # Load the model from the fine-tuned model state dict
    if from_finetuned:
        model.load_state_dict(torch.load(model_path))
    return model

def load_tokenizer(model_name):
    tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
    tokenizer.padding_side = 'left'
    tokenizer.pad_token = tokenizer.eos_token
    tokenizer.add_eos_token = True
    tokenizer.add_bos_token, tokenizer.add_eos_token
    return tokenizer
```

