You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
3.3 KiB
79 lines
3.3 KiB
from django.shortcuts import render, redirect |
|
from django.contrib.auth import authenticate, login, logout |
|
from django.contrib.auth.decorators import login_required |
|
from django.conf import settings |
|
from main.openAIAppreciations import * |
|
from django.urls import reverse |
|
from django.http import JsonResponse |
|
import os |
|
import uuid |
|
import json |
|
|
|
def login_view(request): |
|
if request.method == 'POST': |
|
username = request.POST['username'] |
|
password = request.POST['password'] |
|
user = authenticate(request, username=username, password=password) |
|
if user is not None: |
|
login(request, user) |
|
return redirect('generation') |
|
return render(request, 'login.html') |
|
|
|
@login_required(login_url='/login/') |
|
def generation(request): |
|
if request.method == 'POST': |
|
appreciations_pdf = request.FILES.get('appreciations_pdf') |
|
appreciations_path = None |
|
tmp_dir = os.path.join(settings.BASE_DIR, 'main', 'tmp') |
|
os.makedirs(tmp_dir, exist_ok=True) |
|
if appreciations_pdf: |
|
ext = os.path.splitext(appreciations_pdf.name)[1] |
|
random_name = f"appreciations_{uuid.uuid4().hex}{ext}" |
|
appreciations_path = os.path.join(tmp_dir, random_name) |
|
with open(appreciations_path, 'wb+') as destination: |
|
for chunk in appreciations_pdf.chunks(): |
|
destination.write(chunk) |
|
# Appel du traitement après upload |
|
appreciations_json = convertPdfToJSON(appreciations_path) |
|
if appreciations_path and os.path.exists(appreciations_path): |
|
os.remove(appreciations_path) |
|
request.session['appreciations_json'] = appreciations_json |
|
return redirect('resultat_appreciations') |
|
return render(request, 'generation.html') |
|
|
|
@login_required(login_url='/login/') |
|
def resultat_appreciations(request): |
|
appreciations_result = request.session.get('appreciations_json', []) |
|
return render(request, 'resultat_appreciations.html', {'appreciations_json': appreciations_result}) |
|
|
|
@login_required(login_url='/login/') |
|
def generer_appreciation_ajax(request): |
|
if request.method == 'POST': |
|
data = json.loads(request.body) |
|
eleve = data.get('eleve') |
|
modele = data.get('modele') |
|
appreciation = generer_appreciation_pour_eleve(eleve, request.session.get('appreciations_json', []), modele) |
|
return JsonResponse({'appreciation': appreciation}) |
|
return JsonResponse({'error': 'Méthode non autorisée'}, status=405) |
|
|
|
def logout_view(request): |
|
logout(request) |
|
return redirect('login') |
|
|
|
def generer_appreciation_pour_eleve(eleve, eleves_json, modele=None): |
|
eleve_data = next((e for e in eleves_json if e["eleve"] == eleve), None) |
|
if not eleve_data: |
|
return f"Aucun élève trouvé avec le nom {eleve}" |
|
if modele is None: |
|
modele = "ft:gpt-4o-2024-08-06:personal:app-gen-gangneux2:AYJecsON" |
|
completion = openai.ChatCompletion.create( |
|
model=modele, |
|
messages=[ |
|
{"role": "system", "content": "Rédige une appréciation générale (500 caractères max) pour cet élève"}, |
|
{"role": "user", "content": str(eleve_data["appreciations"])} |
|
], |
|
temperature=0.7, |
|
presence_penalty=0.6, |
|
frequency_penalty=0.6, |
|
top_p=0.5) |
|
return completion.choices[0].message.content |