import os os.environ["OPENAI_API_KEY"] = "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" import openai import gradio as gr from PyPDF2 import PdfReader from math import * from dotenv import load_dotenv, find_dotenv _ = load_dotenv(find_dotenv()) openai.api_key = os.getenv('OPENAI_API_KEY') def get_text_from_file(file): reader = PdfReader(file) pages = reader.pages document="" for page in pages: document = document+page.extract_text() return document def get_prompt_1_shot(document): prompt = """ Extraire du document suivant une liste hiérarchique des rôles professionnels avec les compétences, les exigences et les responsabilités qui y sont associées. Document : """+ document +""" Voici un exemple de résultat attendu : 1. Programmeur .Net : a. Compétences : - Maitrise de la programmation .Net - Maitrise de HTLM - Maitrise de CSS ou Bootstrap - Expérience en JQuery - Expérience en Java Script - Expérience en Visual Studio 2015 ou une version ultérieure - Expérience en SQL Server 2008 ou une version ultérieure - Expérience en SQL Server Reporting Services 2008 ou une version ultérieure - Expérience en Entity Framework b. Exigences : - Détenir un diplôme d'études collégiales en informatique. - Posséder quatre (4) années d'expérience en développement Web.NET - Avoir participé à deux (2) mandats dans lesquelles ont été appliqués les principes de la méthodologie de réalisation Agile. - Posséder trois (3) années d'expérience avec chacun des outils suivants : c. Responsabilités : - Conseiller les architectes, les analystes et le chargé de projet dans les différentes phases d'analyse des systèmes - Participer à l’élaboration des solutions - Réaliser toute documentation pertinente, propre à son domaine d'expertise, selon les normes et standards du Ministère - Participer à la validation de certains livrables d'architecture détaillée et d’analyse si requis - Effectuer le développement nécessaire pour l'adaptation des modules identifiés par les architectes et/ou analystes - Participer à l’analyse des problèmes de production et à leur résolution - Programmer et effectuer les essais unitaires """ return prompt def get_prompt(file, text) : document = get_text_from_file(file) prompt = text+" "+document return prompt def get_response(prompt): response = openai.ChatCompletion.create( model="gpt-3.5-turbo-16k", temperature = 0.8, messages=[ { "role": "system", "content": "You are a helpful assistant." }, { "role": "user", "content": prompt } ] ) return response.choices[0].message['content'] def extract(file, prompt_text): if file is None: return "Please upload a file." prompt = get_prompt(file.name, prompt_text) return get_response(prompt) gr.close_all() demo = gr.Interface( fn=extract, inputs=[ gr.components.File(label="Importez votre document en format PDF ici"), gr.components.Textbox(label="Prompt Text") ], outputs=gr.components.Textbox(label="Voici le résultat"), title="Téléchargement de CV\n(version français)", description="Outil d’importation de CV", examples=[ [None, "Extraire du document suivant une liste hiérarchique des rôles professionnels avec les compétences, les exigences et les responsabilités qui y sont associées."] ] ) demo.launch() #debug=True)