Create app.py
Browse files
app.py
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import streamlit as st
|
| 2 |
+
from referentials import REFERENTIALS # Import des exigences depuis le fichier referentials.py
|
| 3 |
+
from PyPDF2 import PdfReader # Pour extraire le texte des CV en PDF
|
| 4 |
+
from pocketgroq import GroqProvider # Assurez-vous d'installer et configurer cette bibliothèque
|
| 5 |
+
|
| 6 |
+
# Initialisation du fournisseur Groq
|
| 7 |
+
def get_groq_provider():
|
| 8 |
+
if "api_key" not in st.session_state or not st.session_state.api_key:
|
| 9 |
+
st.error("Veuillez entrer votre clé API Groq.")
|
| 10 |
+
return None
|
| 11 |
+
return GroqProvider(api_key=st.session_state.api_key)
|
| 12 |
+
|
| 13 |
+
# Extraction de texte depuis un fichier PDF
|
| 14 |
+
def extract_text_from_pdf(file):
|
| 15 |
+
try:
|
| 16 |
+
reader = PdfReader(file)
|
| 17 |
+
text = " ".join(page.extract_text() for page in reader.pages if page.extract_text())
|
| 18 |
+
return text
|
| 19 |
+
except Exception as e:
|
| 20 |
+
st.error(f"Erreur lors de l'extraction du texte : {str(e)}")
|
| 21 |
+
return None
|
| 22 |
+
|
| 23 |
+
# Analyse du CV avec les exigences du référentiel et Groq
|
| 24 |
+
def analyze_cv_with_groq(cv_text, referential):
|
| 25 |
+
groq = get_groq_provider()
|
| 26 |
+
if not groq:
|
| 27 |
+
return "Erreur : clé API non fournie."
|
| 28 |
+
|
| 29 |
+
# Charger les exigences du référentiel
|
| 30 |
+
referential_data = REFERENTIALS.get(referential, {})
|
| 31 |
+
general_requirements = referential_data.get("General_Requirements", {})
|
| 32 |
+
qualifications = referential_data.get("Qualifications", {})
|
| 33 |
+
audit_experience = referential_data.get("Audit_Experience", {})
|
| 34 |
+
advanced_requirements = referential_data.get("Advanced_Requirements", {})
|
| 35 |
+
|
| 36 |
+
# Construire le prompt pour l'API Groq
|
| 37 |
+
prompt = f"""
|
| 38 |
+
Vous êtes un expert en évaluation des compétences selon les référentiels GFSI ({referential}).
|
| 39 |
+
Analysez ce CV pour vérifier sa conformité avec les exigences suivantes :
|
| 40 |
+
|
| 41 |
+
Général :
|
| 42 |
+
{general_requirements}
|
| 43 |
+
|
| 44 |
+
Qualifications :
|
| 45 |
+
{qualifications}
|
| 46 |
+
|
| 47 |
+
Expérience en audit :
|
| 48 |
+
{audit_experience}
|
| 49 |
+
|
| 50 |
+
Exigences avancées :
|
| 51 |
+
{advanced_requirements}
|
| 52 |
+
|
| 53 |
+
Contenu du CV :
|
| 54 |
+
{cv_text}
|
| 55 |
+
|
| 56 |
+
Fournissez une analyse détaillée en identifiant :
|
| 57 |
+
1. Les exigences remplies.
|
| 58 |
+
2. Les lacunes ou non-conformités.
|
| 59 |
+
3. Des recommandations pour combler les lacunes.
|
| 60 |
+
"""
|
| 61 |
+
|
| 62 |
+
try:
|
| 63 |
+
return groq.generate(prompt, max_tokens=1000, temperature=0.5, use_cot=True)
|
| 64 |
+
except Exception as e:
|
| 65 |
+
st.error(f"Erreur lors de l'analyse du CV : {str(e)}")
|
| 66 |
+
return None
|
| 67 |
+
|
| 68 |
+
# Interface utilisateur Streamlit
|
| 69 |
+
def main():
|
| 70 |
+
st.title("Analyse de CV selon les référentiels GFSI")
|
| 71 |
+
st.markdown("""
|
| 72 |
+
Cette application permet d'évaluer un CV en fonction des référentiels GFSI tels que BRCGS, FSSC 22000, et IFS.
|
| 73 |
+
Téléchargez un CV en PDF, sélectionnez un référentiel, et lancez l'analyse.
|
| 74 |
+
""")
|
| 75 |
+
|
| 76 |
+
# Entrée clé API
|
| 77 |
+
api_key = st.text_input("Entrez votre clé API Groq :", type="password")
|
| 78 |
+
if api_key:
|
| 79 |
+
st.session_state.api_key = api_key
|
| 80 |
+
|
| 81 |
+
# Téléversement de fichier PDF
|
| 82 |
+
uploaded_file = st.file_uploader("Téléchargez un fichier PDF (CV)", type="pdf")
|
| 83 |
+
referential = st.selectbox("Sélectionnez un référentiel", list(REFERENTIALS.keys()))
|
| 84 |
+
|
| 85 |
+
if uploaded_file and referential:
|
| 86 |
+
# Extraire le texte du CV
|
| 87 |
+
cv_text = extract_text_from_pdf(uploaded_file)
|
| 88 |
+
if cv_text:
|
| 89 |
+
st.markdown("### Résultat de l'analyse")
|
| 90 |
+
analysis = analyze_cv_with_groq(cv_text, referential)
|
| 91 |
+
if analysis:
|
| 92 |
+
st.text_area("Analyse générée :", analysis, height=300)
|
| 93 |
+
else:
|
| 94 |
+
st.error("Impossible d'extraire le texte du CV. Vérifiez que le fichier PDF est lisible.")
|
| 95 |
+
|
| 96 |
+
if __name__ == "__main__":
|
| 97 |
+
main()
|