File size: 3,525 Bytes
62a0596
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#!/bin/bash

# Fonction pour afficher des messages informatifs en vert
info() {
    echo -e "\e[32m[INFO]\e[0m $1"
}

# Fonction pour afficher des messages d'erreur en rouge
error() {
    echo -e "\e[31m[ERREUR]\e[0m $1"
}

# --- Début du script ---

# Étape 1: Vérification et compilation de llama.cpp
info "Étape 1: Vérification et compilation de llama.cpp..."
if [ ! -d "llama.cpp/build/bin" ]; then
    info "Dossier 'llama.cpp/build/bin' introuvable. Démarrage de la compilation."

    if [ ! -d "llama.cpp" ]; then
        info "Clonage du dépôt llama.cpp..."
        git clone https://github.com/ggerganov/llama.cpp.git || { error "Échec du clonage."; exit 1; }
    fi

    cd llama.cpp
    info "Lancement de la compilation..."
    mkdir -p build && cd build
    cmake .. -DLLAMA_CURL=1 || { error "Échec de la configuration CMake."; cd ../..; exit 1; }
    cmake --build . --config Release || { error "Échec de la compilation."; cd ../..; exit 1; }
    cd ../..
    info "Compilation de llama.cpp terminée avec succès."
else
    info "llama.cpp est déjà compilé. Ignoré."
fi

# Étape 2: Vérification et téléchargement du modèle GGUF
info "Étape 2: Vérification et téléchargement du modèle GGUF..."
MODEL_PATH="models/qwen2.5-coder-1.5b-q8_0.gguf"
if [ ! -f "$MODEL_PATH" ]; then
    info "Le modèle $MODEL_PATH est introuvable. Début du téléchargement..."
    mkdir -p models
    wget https://huggingface.co/Qwen/Qwen2.5-1.5B-Instruct-GGUF/resolve/main/qwen2.5-1.5b-instruct-q8_0.gguf -O "$MODEL_PATH" || { error "Échec du téléchargement du modèle."; exit 1; }
    info "Téléchargement du modèle terminé."
else
    info "Le modèle GGUF est déjà présent. Ignoré."
fi

# Étape 3: Création du script de démarrage du serveur
info "Étape 3: Création du script de démarrage du serveur..."
mkdir -p server
START_SCRIPT="server/start_server.sh"
echo '#!/bin/bash' > "$START_SCRIPT"
echo "MODEL_PATH=\"../$MODEL_PATH\"" >> "$START_SCRIPT"
echo 'if [ ! -f "$MODEL_PATH" ]; then' >> "$START_SCRIPT"
echo '    echo "Le modèle GGUF est introuvable à: $MODEL_PATH"' >> "$START_SCRIPT"
echo '    exit 1' >> "$START_SCRIPT"
echo 'fi' >> "$START_SCRIPT"
echo '"../llama.cpp/build/bin/llama-server" \\' >> "$START_SCRIPT"
echo "  -m \"\$MODEL_PATH\" \\" >> "$START_SCRIPT"
echo "  --port 8080 \\" >> "$START_SCRIPT"
echo "  --host 0.0.0.0 \\" >> "$START_SCRIPT"
echo "  -c 4096 \\" >> "$START_SCRIPT"
echo "  -ngl 999 \\" >> "$START_SCRIPT"
echo "  --threads 8 \\" >> "$START_SCRIPT"
echo '  > "logs/llama_server.log" 2>&1 &' >> "$START_SCRIPT"
echo 'echo $! > "server/server.pid"' >> "$START_SCRIPT"
chmod +x "$START_SCRIPT"
info "Script de démarrage du serveur créé."

# Étape 4: Création du script d'arrêt du serveur
info "Étape 4: Création du script d'arrêt du serveur..."
STOP_SCRIPT="server/stop_server.sh"
echo '#!/bin/bash' > "$STOP_SCRIPT"
echo 'PID_FILE="server/server.pid"' >> "$STOP_SCRIPT"
echo 'if [ -f "$PID_FILE" ]; then' >> "$STOP_SCRIPT"
echo '    PID=$(cat "$PID_FILE")' >> "$STOP_SCRIPT"
echo '    kill $PID' >> "$STOP_SCRIPT"
echo '    rm "$PID_FILE"' >> "$STOP_SCRIPT"
echo '    echo "Serveur llama.cpp arrêté."' >> "$STOP_SCRIPT"
echo 'else' >> "$STOP_SCRIPT"
echo '    echo "Aucun PID de serveur trouvé."' >> "$STOP_SCRIPT"
echo 'fi' >> "$STOP_SCRIPT"
chmod +x "$STOP_SCRIPT"
info "Script d'arrêt du serveur créé."

# Étape 5: Lancement de l'application Streamlit
info "Étape 5: Lancement de l'application Streamlit..."
streamlit run app.py