Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 87 additions & 0 deletions README.fr.md
Original file line number Diff line number Diff line change
@@ -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).
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down