Premier-gheya-innov

3
1
by
LLM-CLEM
Language Model
OTHER
New
3 downloads
Early-stage
Edge AI:
Mobile
Laptop
Server
Unknown
Mobile
Laptop
Server
Quick Summary

AI model with specialized capabilities.

Code Examples

✨🩷 L'avenirtexttransformers
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
import re
from typing import Optional

# --- Constantes (Doivent correspondre à celles utilisées dans l'entraînement) ---
# Tokens utilisés pour structurer l'entrée/sortie (à supprimer)
SEP_TOKEN = "<|sep|>"
PROMPT_STRUCTURE = "Question: "
RESPONSE_STRUCTURE = "Réponse:"

# Paramètres de génération
MAX_NEW_TOKENS = 300
TEMPERATURE = 0.7
MODEL_ID = "Clemylia/Premier-gheya-innov"

def generate_text_public(
    repo_id: str = MODEL_ID,
    prompt: str = "Test?",
    max_new_tokens: int = MAX_NEW_TOKENS,
    temperature: float = TEMPERATURE,
    device: Optional[str] = None
):
    """
    Charge le modèle Gheya-Innov et génère du texte avec un nettoyage strict de la sortie.
    """

    print(f"🔄 Chargement du Tokenizer et du Modèle depuis {repo_id}...")

    try:
        # Déterminer le dispositif (GPU si disponible, sinon CPU)
        if device is None:
            device = "cuda" if torch.cuda.is_available() else "cpu"
        device = torch.device(device)

        # Chargement du Tokenizer (standard)
        tokenizer = AutoTokenizer.from_pretrained(repo_id)

        # Chargement du Modèle (trust_remote_code=True est essentiel)
        model = AutoModelForCausalLM.from_pretrained(
            repo_id,
            trust_remote_code=True,
            torch_dtype=torch.float32, # Explicitly set dtype
            use_cache=False, # Disable cache to avoid TypeError with custom model
        ).to(device).eval()

    except Exception as e:
        print(f"❌ Erreur lors du chargement : {e}")
        print("\nATTENTION : Vérifiez que l'architecture et les poids sont correctement publiés sur le Hub.")
        return

    print(f"✅ Modèle chargé sur {device} et prêt pour la génération.")

    # 1. Préparation du Prompt
    # Format d'entrée : "Question: <question> <|sep|> Réponse:"
    formatted_prompt = f"{PROMPT_STRUCTURE}{prompt} {SEP_TOKEN} {RESPONSE_STRUCTURE}"
    print(f"\nPrompt formaté (pour le modèle): {formatted_prompt.replace(SEP_TOKEN, '[SEP]')}")

    # Encodage du prompt
    input_ids = tokenizer.encode(formatted_prompt, return_tensors='pt').to(device)

    # Crée l'attention_mask comme un LongTensor de 1 (pour contourner l'erreur de NoneType dans generate)
    attention_mask = torch.ones(input_ids.shape, dtype=torch.long, device=device)

    # 2. Génération
    print("⏳ Démarrage de la génération...")
    with torch.no_grad():
        output_ids = model.generate(
            input_ids,
            attention_mask=attention_mask,
            max_new_tokens=max_new_tokens,
            do_sample=True,
            temperature=temperature,
            # Assure que la génération s'arrête si le modèle le demande
            pad_token_id=tokenizer.eos_token_id,
            eos_token_id=tokenizer.eos_token_id,
        )

    # 3. Décodage
    # skip_special_tokens=False est nécessaire pour voir et nettoyer manuellement les balises
    generated_text = tokenizer.decode(output_ids[0], skip_special_tokens=False)

    # 4. Nettoyage du Texte Généré (Rendement Propre)

    # Étape A: Isoler la réponse brute
    # On cherche le début de la réponse pour s'assurer de ne pas inclure le prompt
    try:
        start_index = generated_text.index(RESPONSE_STRUCTURE) + len(RESPONSE_STRUCTURE)
        response = generated_text[start_index:].strip()
    except ValueError:
        # Si la structure "Réponse:" n'est pas trouvée (très rare après entraînement), on prend tout
        response = generated_text

    # Étape B: Suppression des tokens spéciaux et des balises de formatage
    # 1. Suppression des tokens spéciaux (SEP_TOKEN, EOS, BOS, PAD)
    special_tokens = [SEP_TOKEN, tokenizer.eos_token, tokenizer.bos_token, tokenizer.pad_token]

    for token in special_tokens:
        if token is not None:
            # Utilisation de regex pour une suppression plus sûre et pour les cas où les tokens sont collés
            response = re.sub(re.escape(token), '', response, flags=re.IGNORECASE).strip()

    # 2. Suppression des balises de structure de l'input au cas où elles seraient répétées
    response = response.replace(PROMPT_STRUCTURE, "").strip()
    response = response.replace(RESPONSE_STRUCTURE, "").strip()
    
    # 3. Suppression spécifique du caractère 'Ġ' qui représente souvent un espace de préfixe
    response = response.replace('Ġ', '').strip()

    # Étape C: Suppression des répétitions, des sauts de ligne excessifs, et des espaces multiples
    response = re.sub(r'\s+', ' ', response).strip()

    # Si la réponse commence par le prompt d'origine, on le retire (garde en sécurité)
    if response.startswith(prompt):
        response = response[len(prompt):].strip()

    print("\n--- Résultat de Gheya-Innov ---")
    print(f"Question: {prompt}")
    print(f"Réponse: {response}")
    print("-------------------------------")


if __name__ == "__main__":
    # Test avec la question par défaut
    generate_text_public(prompt="Test?")

Deploy This Model

Production-ready deployment in minutes

Together.ai

Instant API access to this model

Fastest API

Production-ready inference API. Start free, scale to millions.

Try Free API

Replicate

One-click model deployment

Easiest Setup

Run models in the cloud with simple API. No DevOps required.

Deploy Now

Disclosure: We may earn a commission from these partners. This helps keep LLMYourWay free.