File size: 4,944 Bytes
df1c813 23e626d df1c813 23e626d df1c813 23e626d df1c813 a4361ce df1c813 23e626d df1c813 a4361ce df1c813 829a498 ecec5fa a4361ce df1c813 a4361ce df1c813 a4361ce df1c813 a4361ce df1c813 a4361ce df1c813 ecec5fa a4361ce ecec5fa fa3549f 4546ea6 df1c813 dc71633 df1c813 23e626d df1c813 23e626d df1c813 fb015d5 df1c813 23e626d df1c813 7542014 |
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 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
import streamlit as st
from referentials import REFERENTIALS # Chargement des référentiels depuis un fichier
from PyPDF2 import PdfReader
from pocketgroq import GroqProvider
# Fonction pour obtenir le fournisseur Groq
def get_groq_provider():
if "api_key" not in st.session_state or not st.session_state.api_key:
st.error("Veuillez entrer votre clé API Groq.")
return None
return GroqProvider(api_key=st.session_state.api_key)
# Extraction de texte depuis un PDF
def extract_text_from_pdf(file):
try:
reader = PdfReader(file)
text = " ".join(page.extract_text() for page in reader.pages if page.extract_text())
return text
except Exception as e:
st.error(f"Erreur lors de l'extraction du texte : {str(e)}")
return None
# Analyse du CV avec Groq et référentiel
def analyze_cv_with_groq(cv_text, referential):
groq = get_groq_provider()
if not groq:
return "Erreur : clé API non fournie."
referential_data = REFERENTIALS.get(referential, {})
general_requirements = referential_data.get("General_Requirements", {})
qualifications = referential_data.get("Qualifications", {})
audit_experience = referential_data.get("Audit_Experience", {})
advanced_requirements = referential_data.get("Advanced_Requirements", {})
prompt = f"""
Vous êtes un expert en évaluation des compétences selon les référentiels GFSI ({referential}).
Analysez ce CV, sans citer le nom du candidat (toujours faire référence en le nommant : le candidat), pour vérifier sa conformité avec les exigences suivantes :
Général :
{general_requirements}
Qualifications :
{qualifications}
Expérience en audit :
{audit_experience}
Exigences avancées :
{advanced_requirements}
Contenu du CV :
{cv_text}
Fournissez une analyse détaillée rédigée en langue française , de manière prefessionnelle et complète, en identifiant :
1. Les exigences remplies.
2. Les lacunes ou non-conformités.
3. Des recommandations pour combler les lacunes par rapports aux exigences strictes du référentiel.
Il faut rester au plus proche des exigences des référentiels , ne pas ajouter des exigences, toujours faire une vérification
sur la base de la chain of thoughts avec un réévaluation a chaque fois pour confirmer qu'il s'agit bien d'exigences demandés par le referentiel choisi dans REFERENTIALS.keys
il ne faut evaluer le cv que sur le referentiel choisi , il ne faut pas mélanger les référentiels
"""
try:
return groq.generate(prompt, max_tokens=1000, temperature=0.2, use_cot=True)
except Exception as e:
st.error(f"Erreur lors de l'analyse du CV : {str(e)}")
return None
# Génération d'une conclusion
def generate_conclusion(analysis):
if "non-conformité" in analysis:
return "Le candidat répond partiellement aux exigences du référentiel sélectionné. Des améliorations spécifiques sont recommandées."
else:
return "Le candidat satisfait pleinement aux exigences du référentiel sélectionné."
# Interface utilisateur principale
def main():
st.title("Analyse de CV selon les référentiels GFSI")
st.markdown("""
<div style="background-color:#f9f9f9;padding:10px;border-radius:5px;">
<h3>Bienvenue sur l'outil d'analyse de CV GFSI</h3>
<p>Utilisez cet outil pour évaluer un CV selon les référentiels tels que BRCGS, FSSC 22000, et IFS.</p>
<ol>
<li>Entrez votre clé API Groq.</li>
<li>Téléchargez un CV au format PDF.</li>
<li>Sélectionnez un référentiel pour l'analyse.</li>
</ol>
</div>
""", unsafe_allow_html=True)
api_key = st.text_input("Entrez votre clé API Groq :", type="password")
if api_key:
st.session_state.api_key = api_key
uploaded_file = st.file_uploader("Téléchargez un fichier PDF (CV)", type="pdf")
referential = st.selectbox("Sélectionnez un référentiel", list(REFERENTIALS.keys()))
if uploaded_file and referential:
cv_text = extract_text_from_pdf(uploaded_file)
if cv_text:
st.markdown("### Résultat de l'analyse")
analysis = analyze_cv_with_groq(cv_text, referential)
if analysis:
st.markdown(f"<div style='font-size:16px;line-height:1.6;'>{analysis}</div>", unsafe_allow_html=True)
conclusion = generate_conclusion(analysis)
st.markdown(f"""
<div style="background-color:#dff0d8;padding:10px;border-radius:5px;margin-top:20px;">
<strong>Conclusion :</strong> {conclusion}
</div>
""", unsafe_allow_html=True)
else:
st.error("Impossible d'extraire le texte du CV. Vérifiez que le fichier PDF est lisible.")
if __name__ == "__main__":
main()
|