YAML Metadata Warning: empty or missing yaml metadata in repo card (https://huggingface.co/docs/hub/model-cards#model-card-metadata)

Llama-8b-DH-RAG

Llama-8b-DH-RAG is a fine-tuned version of Llama-8b built for RAG in Digital humanities using multilingual sources.

Usage

Llama-8b-DH-RAG uses a custom syntax for parsing sources and generating sourced output. Each source should be preceded by an ID encapsulated in double asterisks (e.g., **SOURCE_ID**).

The input structure expected by Llama-8b-DH-RAG is the following

prompt = f"""### Query Digital Humanities ###\n{user_message}\n\n### Source ###\n{sources}\n\n### Query Analysis ###\n"""

The "Query Digital Humanities" section consists on the question or keywords that the user inputs.

The "Source" part consists of the documents that have been retrieved using a vector database, like duckdb, lancedb or others.

The "Query Analysis" starts the proper generation from the model itself. It include three phases: the query analysis, the document analysis and the proper answer (with an ### Answer ### tag). For an application end use, you may want to use only the Answer part.

<ref text="[Quoted text from source]">[Source ID]</ref>

Example Usage

In this example, we will be using BGE for the embeddings and lancedb for the retrieval part. You can use your preffered embedding model to create the embeddings and add them to the database, LanceDB hybrid search feature allows us to combine vector search with keyword search for better retrieval.

import lancedb
from vllm import LLM, SamplingParams
import pandas as pd
import lancedb
from lancedb.pydantic import LanceModel, Vector
from lancedb.embeddings import get_registry

# Initialize LanceDB
db = lancedb.connect("lancedb_data")

# We will create some ficticious education documents to add to the database
documents = [
    {
        "hash": "DOC001",
        "main_title": "Inscription à l'école primaire",
        "text": "L'inscription à l'école primaire en France se fait en deux étapes. Premièrement, les parents doivent se rendre à la mairie avec un justificatif de domicile, le livret de famille et le carnet de santé de l'enfant. Ensuite, ils doivent finaliser l'inscription directement à l'école. L'âge minimal pour l'inscription est de 3 ans."
    },
    {
        "hash": "DOC002",
        "main_title": "Calendrier des inscriptions scolaires",
        "text": "Les inscriptions à l'école primaire doivent être effectuées au plus tard au mois de juin précédant la rentrée scolaire. Il est conseillé de s'y prendre à l'avance car certaines communes ont des périodes d'inscription spécifiques. La rentrée scolaire a généralement lieu début septembre."
    },
    {
        "hash": "DOC003",
        "main_title": "Documents requis pour l'inscription scolaire",
        "text": "Pour inscrire un enfant à l'école primaire, les documents suivants sont généralement requis : justificatif de domicile de moins de 3 mois, livret de famille ou extrait d'acte de naissance, carnet de santé avec vaccinations à jour, et éventuellement le certificat de radiation si l'enfant était précédemment inscrit dans une autre école."
    }
]

#BGE embedding model loading and creating the structure adapted to lance
model = get_registry().get("sentence-transformers").create(name="BAAI/bge-m3", device="cuda")

class Documents(LanceModel):
    main_title: str
    text: str = model.SourceField()
    hash: str
    vector: Vector(model.ndims()) = model.VectorField()

#Create table
table = db.create_table("example", schema=Documents, mode="overwrite")

def process_batch(batch):
    processed_documents = []
    for item in batch:
        try:
            processed_documents.append({
                "hash": item.get("hash", ""),
                "main_title": item.get("main_title", ""),
                "text": item.get("text", "")
                # Add any other fields you want to include
            })
        except Exception as e:
            print(f"Error processing item: {item}")
            print(f"Error message: {str(e)}")
    return processed_documents

# Process and add documents in batches
batch_size = 2  # Adjust as needed
for i in tqdm(range(0, len(documents), batch_size)):
    batch = documents[i:i+batch_size]
    processed_batch = process_batch(batch)
    if processed_batch:  # Only add if the batch is not empty
        table.add(processed_batch)

# Load the model
model_name = "PleIAs/Cassandre-RAG"
llm = LLM(model_name, max_model_len=8128)

# Set sampling parameters
sampling_params = SamplingParams(
    temperature=0.7,
    top_p=0.95,
    max_tokens=3000,
    presence_penalty=1.2,
    stop=["#END#"]
)

def hybrid_search(text):
    results = table.search(text, query_type="hybrid").limit(3).to_pandas()
    document = []
    for _, row in results.iterrows():
        hash_id = str(row['hash'])
        title = row['main_title']
        content = row['text']
        document.append(f"**{hash_id}**\n{title}\n{content}")
    return "\n\n".join(document)

def prepare_prompt(query, sources):
    return f"### Query ###\n{query}\n\n### Source ###\n{sources}\n\n### Analysis ###\n"

# Example query
query = "Quelles sont les démarches pour inscrire un enfant à l'école primaire en France?"

# Perform hybrid search
sources = hybrid_search(query)

# Prepare the prompt
prompt = prepare_prompt(query, sources)

# Generate the response
outputs = llm.generate([prompt], sampling_params)
generated_text = outputs[0].outputs[0].text

print("Query:", query)
print("\nSources:")
print(sources)
print("\nGenerated Response:")
print(generated_text)

print("\nFormatted Response:")
print(simple_format_references(generated_text))

Here we have an example of the respnse we will get:

### Query ###
Quelles sont les démarches pour inscrire un enfant à l'école primaire en France?

### Source ###
**DOC001**
Inscription à l'école primaire
L'inscription à l'école primaire en France se fait en deux étapes. Premièrement, les parents doivent se rendre à la mairie avec un justificatif de domicile, le livret de famille et le carnet de santé de l'enfant. Ensuite, ils doivent finaliser l'inscription directement à l'école. L'âge minimal pour l'inscription est de 3 ans.

**DOC002**
Calendrier des inscriptions scolaires
Les inscriptions à l'école primaire doivent être effectuées au plus tard au mois de juin précédant la rentrée scolaire. Il est conseillé de s'y prendre à l'avance car certaines communes ont des périodes d'inscription spécifiques. La rentrée scolaire a généralement lieu début septembre.

**DOC003**
Documents requis pour l'inscription scolaire
Pour inscrire un enfant à l'école primaire, les documents suivants sont généralement requis : justificatif de domicile de moins de 3 mois, livret de famille ou extrait d'acte de naissance, carnet de santé avec vaccinations à jour, et éventuellement le certificat de radiation si l'enfant était précédemment inscrit dans une autre école.

### Analysis ###
[To add]

### Answer ###
Pour inscrire un enfant à l'école primaire en France :

1. Allez à la mairie avec les documents nécessaires. <ref text="L'inscription à l'école primaire en France se fait en deux étapes. Premièrement, les parents doivent se rendre à la mairie avec un justificatif de domicile, le livret de famille et le carnet de santé de l'enfant">DOC001</ref>

2. Inscrivez-vous avant juin pour la rentrée de septembre. <ref text="Les inscriptions à l'école primaire doivent être effectuées au plus tard au mois de juin précédant la rentrée scolaire">DOC002</ref>

3. L'enfant doit avoir au moins 3 ans. <ref text="L'âge minimal pour l'inscription est de 3 ans">DOC001</ref>

4. Finalisez l'inscription à l'école. <ref text="Ensuite, ils doivent finaliser l'inscription directement à l'école">DOC001</ref>

Apportez un certificat de radiation si l'enfant change d'école. <ref text="et éventuellement le certificat de radiation si l'enfant était précédemment inscrit dans une autre école">DOC003</ref>

Contactez votre mairie pour plus d'informations.

#END#
Downloads last month
7
Safetensors
Model size
8.03B params
Tensor type
BF16
·
Inference API
Unable to determine this model's library. Check the docs .