diff --git a/README.fr.md b/README.fr.md new file mode 100644 index 0000000..7188c45 --- /dev/null +++ b/README.fr.md @@ -0,0 +1,87 @@ +# API auto-modifiante + +Disponible aussi en: [English](README.md) + +AVERTISSEMENT: NE PAS UTILISER CECI EN PRODUCTION — PREUVE DE CONCEPT UNIQUEMENT + +## Qu'est-ce que c'est + +Ceci est une tentative de créer une API qui peut accepter des requêtes POST +entraînant des modifications de son propre code source et donc de sa surface d'API. + +Dans son état actuel, il est TRÈS DANGEREUX de déployer ceci n'importe où sur Internet. + +Le cœur de cette API est un unique gestionnaire de requête POST qui : + +1. Accepte du code Python sous forme de chaîne de caractères + 1. On s'attend à un format particulier — voir `healthcheck.py` pour référence +2. Valide (commit) le code dans un fichier de son propre dépôt GitHub +3. Met à jour `app.py` pour exposer la nouvelle route dans l'API +4. Déclenche un nouveau déploiement (nous avons utilisé Render parce que nous le connaissons bien) + +## Pourquoi ?? + +Nous avions l'intuition que cela pourrait bien fonctionner avec les GPTs/l'Assistants API d'OpenAI +pour permettre à un GPT d'amorcer ses propres actions. + +Il s'avère que les GPTs n'importent pas dynamiquement la documentation d'API depuis une URL fournie, +donc cela ne fonctionne pas vraiment sans devoir recharger les actions à chaque fois qu'un +nouvel endpoint est créé. + +Pour plus de détails sur la configuration du GPT, voir ci-dessous. + +## Utilisation et installation + +C'est un projet FastAPI, donc installez les dépendances depuis `requirements.txt` et +exécutez `./bin/dev` pour démarrer le serveur de développement en local. + +## Utiliser cette API avec un GPT + +Nous avons testé cette API comme backend pour des actions GPT. La configuration utilisée est ci-dessous. + +Nom: `API Builder` + +Description: `Créer des endpoints API à la volée` + +Instructions: + + Vous créez des endpoints d'API en écrivant du code Python pour un backend FastAPI. Un exemple de code que vous pourriez écrire est : + + ```python + from fastapi import APIRouter + router = APIRouter() + @router.get("/test") + def test(): + return {"status": "test"} + ``` + + pour lequel vous utiliseriez par exemple le chemin de fichier "test.py". + + Assurez-vous d'utiliser toujours + + ```python + from fastapi import APIRouter + router = APIRouter() + ``` + + lorsque vous créez de nouveaux endpoints. + +Les actions ont été importées depuis l'endpoint `/openai.json` exposé par le serveur FastAPI, mais nous +avons dû ajouter manuellement l'URL de notre serveur au document pour que les actions fonctionnent. + +### Exemple : +![](self-modifying-gpt.png) + +Requête envoyée au backend : + +```json +{ + "code": "from fastapi import APIRouter\nimport random\n\nrouter = APIRouter()\n\n@router.get(\"/random-number\")\ndef generate_random_number():\n return {\"random_number\": random.randint(1, 100)}", + "filepath": "random_number.py" +} +``` + +## Limitations connues + +Les nouvelles dépendances ne sont actuellement pas gérées (par ex. si du code Python pour un nouvel endpoint +utilise numpy, nous n'essayons pas d'installer les dépendances manquantes). diff --git a/README.md b/README.md index 9ce2530..37414a8 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Self Modifying API +Also available in: [Français](README.fr.md) + WARNING: PLEASE DO NOT USE THIS IN REAL LIFE - PROOF OF CONCEPT ONLY ## What is this