diff --git a/GPT_PROJET/codeur_gpt.html b/GPT_PROJET/codeur_gpt.html new file mode 100644 index 0000000000000000000000000000000000000000..6aa2ed1b0f628e3fa50997f3c7b3fc0183022acc --- /dev/null +++ b/GPT_PROJET/codeur_gpt.html @@ -0,0 +1,83 @@ +<!DOCTYPE html> +<html lang="fr"> +<head> + <title>GPT Fonctionnel Programmeur</title> +</head> +<body> + <h1>Description de la fonction à créer</h1> + <form action=""> + Quelle fonction voulez-vous que je crée ? + <br> + <textarea rows = "5" cols = "60" name = "description"> +A function to solve a quadratic equation + </textarea><br> + Avec combien de tests ? + <input type="number" id="test_quantity" name="test_quantity" value="5" min="1" max="5"> + <input type="submit" value="Vas-y !" /> + </form> + <div> + <h2>Programme en langage Python</h2> + <form action=""> + <textarea name="program" id="program" cols="70" rows="20"> +def quadratic_equation(a, b, c): + """ + Solves a quadratic equation of the form ax^2 + bx + c = 0 + Parameters + ---------- + a : float + Coefficient of x^2 + b : float + Coefficient of x + c : float + Constant term + Returns + ------- + x1 : float + First solution + x2 : float + Second solution + """ + # Compute the discriminant + discriminant = (b**2) - (4*a*c) + + # Compute the two solutions + x1 = (-b + discriminant**0.5) / (2*a) + x2 = (-b - discriminant**0.5) / (2*a) + + return x1, x2 + + </textarea><br> + <input type="submit" value="Compile et teste !" /> + </form> + </div> + </div> + <div> + <h2>Voici cinq tests unitaires</h2> + <form action=""> + <textarea name="tests" id="tests" cols="70" rows="20"> +import unittest + +class TestQuadraticEquation(unittest.TestCase): + def test_quadratic_equation_1(self): + self.assertEqual(quadratic_equation(1, 0, -4), (2+0j, -2+0j)) + + def test_quadratic_equation_2(self): + self.assertEqual(quadratic_equation(2, -3, 1), (1+0j, 0.5+0j)) + + def test_quadratic_equation_3(self): + self.assertEqual(quadratic_equation(1, -2, -3), (3+0j, -1+0j)) + + def test_quadratic_equation_4(self): + self.assertEqual(quadratic_equation(1, -4, 4), (2+0j, 2+0j)) + + def test_quadratic_equation_5(self): + self.assertEqual(quadratic_equation(2, -7, 3), (3+0j, 0.5+0j)) + +if __name__ == '__main__': + unittest.main() + </textarea><br> + <input type="submit" value="Teste à nouveau !" /> + </form> + </div> +</body> +</html> diff --git a/GPT_PROJET/mini_projet.md b/GPT_PROJET/mini_projet.md new file mode 100644 index 0000000000000000000000000000000000000000..15c925721de00fd2d8c6a83e0ebde3ed0aa227d1 --- /dev/null +++ b/GPT_PROJET/mini_projet.md @@ -0,0 +1,59 @@ +# PROJET : GPT Programmeur + +## But du projet +Réaliser une application Web, qui permet de demander à *ChatGPT* de créer une fonction avec des tests unitaires dans un langage de programmation donné. + +## Dates limites +- point d'étape : **mardi 14 février** matin +- dépôt final : **dimanche 19 février** minuit + +## Moyens +Langage de développement : au choix +Framework Web : au choix +Dépôt GIT : https://gitlab.univ-lorraine.fr + +## Langages cibles +**Groupe 1** : Python / Prolog + +**Groupe 2** : Java / Eiffel + +**Groupe 3** : PHP / Haskell + +## Description de la page WEB + +Un exemple de formulaire Web est fourni dans le ficheir `codeur_gpt.html` + +Le formulaire doit contenir les élements suivants : +- une zone de description de la fonction, par exemple : + - « Résoudre une équation du second degré. » + - « Trier une liste de mots » + - « Tester si un mot est un palindrome. » + - « Calculer le nombre d'occurences de chaque mot dans un texte. » +- une zone de saisie du nombre de tests unitaires +- un bouton pour lancer la création du programme +- un popup menu pour choisir le langage de programmation entre les deux définis pour le groupe +- une zone éditable d’affichage du programme +- une zone éditable avec la liste des tests +- un bouton pour relancer le passage des tests après modification du programme ou des tests + +Votre logiciel de création de fonction devra pouvoir être testé sans accès à ChatGPT, ni Internet. Vous utiliserez donc un *mock* (https://en.wikipedia.org/wiki/Mock_object) avec des réponses prédéfinies pour simuler le comportement de l'accès à *ChatGPT*. + +On mettra en place des scénarios de tests fonctionnels avec le framework *Selenium*. + +La fonction créée devra passer et valider les tests générés par *ChatGPT*. Comme dans le programme *Mira* (voir ci-dessous), il peut être nécessaire de demander à *ChatGPT* de refaire le programme pour qu'il passe les tests. On limitera le nombre d'itérations à 10, et on mettra un message d'erreur si la fonction ne peut pas être validée. + + +## Itérations de développement +1. Un seul langage de programmation cible, pas de validations des tests, pas de modification du programme et des tests, pas d'itérations de *refactoring* auprès de ChatGPT. +2. Ajout de la validation des tests sans *refactoring*, vous mettrez un message pour indiquer si certains tests ne passent pas. +3. Ajout de la modification du programme et des tests par l'utilisateur. +4. Ajout des itérations de *refactoring* auprès de *ChatGPT*. +5. Ajout du second langage de programmation. + +## Références +Ces sources devraient être utiles : +- *Mira*, un programme en Rust qui crée des programems Rust via GPT-3 : https://gitlab.com/corpsmoderne/mira +- API de ChatGPT : + - https://platform.openai.com/docs/guides/code + - https://beta.openai.com/docs/api-reference + - https://openai.com/api/