Aller au contenu

D2COpenAIPlugin : Acheminer le texte vers les moteurs de diagrammes

D2COpenAIPlugin est un service FastAPI de diagrammes avec un manifeste de plugin et une interface OpenAPI. L’implémentation choisit un parcours PlantUML, Mermaid ou Kroki selon le langage demandé.

Application et services
  • Mis à jour
  • 9
  • Python · 100%
  • MIT
Langages du dépôtPython 100%1

Parts calculées à partir des octets GitHub Linguist.

Langage%Octets
Python100%60 743

GitHub · README · Statistiques de langages

Aperçu

Pourquoi il existe

Plugin ChatGPT officiel avec spécification OpenAPI pour convertir des descriptions en diagrammes.

Cas d’usage

Intégration ChatGPT pour architectes et développeurs logiciels.

Démarrage

Ces commandes viennent de la documentation du dépôt. Elles n’ont pas été exécutées pendant cette revue.

README.md · Quick start
git clone https://github.com/antoinebou12/D2COpenAIPlugin.git
cd D2COpenAIPlugin
python -m venv .venv
README.md · Quick start
.\.venv\Scripts\Activate.ps1
README.md · Quick start
source .venv/bin/activate
README.md · Quick start
pip install -r requirements-dev.txt
python -m pytest
uvicorn app:app --host 127.0.0.1 --port 5003
README.md · Quick start
python app.py
plantuml/README.md · Installation
pip install plantumlapi
plantuml/README.md · Installation
pip install git+https://github.com/antoinebou12/plantumlapi
plantuml/README.md · Command Line Usage
usage: plantuml.py [-h] [-o OUT] [-s SERVER] filename [filename ...]
Generate images from PlantUML defined files using PlantUML server
positional arguments: 
  filename            file(s) to generate images from
optional arguments: 
  -h, --help          show this help message and exit 
  -o OUT, --out OUT   directory to put the files into 
  -s SERVER, --server SERVER 
                      server to generate from; defaults to plantuml.com 
Commandes déclarées dans les manifestes

Références du dépôt

Extraits des guides du dépôt, dans leur langue d’origine. Les liens ouvrent la version du code consultée.

Prérequis et premier essai

Requirements

README.md

  • Python 3.10+ (CI uses 3.12)
  • pip and a virtual environment (recommended) Optional:
  • D2/main — small helper binary expected at ./D2/main for D2 encoding in D2/run_d2.py (only needed if you use the D2 code paths locally)

Lire les instructions complètes ↗

Quick start

README.md

Activate the venv (Windows PowerShell): Activate the venv (macOS / Linux): Install dependencies and run the API: Equivalent one-liner after activation:

Lire les instructions complètes ↗

Installation

plantuml/README.md

To install, run the following command:
Lire les instructions complètes ↗
API et intégration

API

README.md

FieldTypeRequiredDescription
langstringyese.g. plantuml, mermaid, d2, or a Kroki type allowed by the server
typestringyese.g. class, sequence, activity (used for validation / logging)
codestringyesDiagram source (max length enforced in app.py)
themestringnoPlantUML / Mermaid theming where applicable
Example (PlantUML) with curl (bash / Git Bash):
Example with PowerShell:

POST /generate_diagram JSON body:

Lire les instructions complètes ↗
Exploitation et dépannage

Deployment (Vercel)

README.md


Lire les instructions complètes ↗
Développement et contributions

Contributing / security

README.md

  • Tests: python -m pytest (see .github/workflows/CI.yml)
  • Security policy: SECURITY.md

Lire les instructions complètes ↗
Documentation source

2 documents lus parmi 2 candidats.

Fonctions et composants 2

Modèle de requête
DiagramRequest contient lang, type, code et theme. Des validations contrôlent le langage et la longueur de la source. /generate_diagram rejette les champs manquants avant de choisir un moteur et de construire les liens de résultat et d’édition.
Adaptateurs de rendu
PlantUML utilise son client dédié, Mermaid construit un état d’éditeur et les alias D2 passent au moteur d2 de Kroki. Les autres langages utilisent le registre Kroki. Les adaptateurs isolent les conventions de liens et d’encodage.

Architecture

Les composants et leurs liens restent lisibles en texte. Le diagramme ajoute une vue interactive.

Contexte système Contexte
  1. Requête structurée
  2. Modèle et route FastAPI
  3. Adaptateur PlantUML
  4. Encodeur d’état Mermaid
  5. Adaptateur Kroki
  6. Liens de résultat et d’édition

Liens vérifiés dans le dépôt.

Mermaid Diagramme interactif (chargement à l’ouverture)

Vue générale des composants et des échanges vérifiés dans le dépôt.

Vue statique de l’architecture de D2COpenAIPlugin
Aperçu statique. Le diagramme interactif le remplace après le chargement de Mermaid.
flowchart LR

subgraph group_api["API surface"]
  node_api["FastAPI endpoint<br/>[app.py]"]
  node_request["Request validation<br/>[app.py]"]
  node_response["Diagram response<br/>[app.py]"]
end

subgraph group_formats["Diagram formats"]
  node_plantuml["PlantUML renderer<br/>[__init__.py]"]
  node_mermaid["Mermaid state and links<br/>[mermaid.py]"]
  node_d2encoder["D2 encoder<br/>[d2.py]"]
  node_d2runner["D2 binary runner<br/>[run_d2.py]"]
  node_kroki["Kroki client<br/>[kroki.py]"]
end

subgraph group_integration["Rendering services"]
  node_plantservice["PlantUML server"]
  node_mermaidink["Mermaid image service"]
  node_mermaidlive["Mermaid Live Editor"]
  node_krokiservice["Kroki service"]
end

subgraph group_assets["Plugin assets"]
  node_pluginassets["Plugin metadata<br/>[ai-plugin.json]"]
  node_openapi["OpenAPI specification<br/>[openapi.yaml]"]
  node_privacy["Privacy policy<br/>[privacy.txt]"]
  node_logo["Plugin logo"]
end

node_client(("Plugin client"))

node_client -->|"submits request"| node_api
node_api -->|"validates"| node_request
node_api -->|"dispatches PlantUML"| node_plantuml
node_plantuml -->|"requests rendering"| node_plantservice
node_api -->|"dispatches Mermaid"| node_mermaid
node_api -->|"dispatches D2 or allow-list"| node_kroki
node_kroki -->|"requests rendering"| node_krokiservice
node_mermaid -->|"creates image URL"| node_mermaidink
node_mermaid -->|"creates editor URL"| node_mermaidlive
node_api -->|"returns result"| node_response
node_pluginassets -->|"served by"| node_api
node_openapi -->|"describes API"| node_api
node_privacy -->|"served by"| node_api
node_logo -->|"served by"| node_api
node_d2runner -.->|"runs encoder binary"| node_d2encoder


class node_api,node_request,node_response,node_client toneBlue
class node_plantuml,node_mermaid,node_d2encoder,node_d2runner,node_kroki toneAmber
class node_plantservice,node_mermaidink,node_mermaidlive,node_krokiservice toneMint
class node_pluginassets,node_openapi,node_privacy,node_logo toneRose

Un service FastAPI de diagrammes qui valide les requêtes, choisit un parcours PlantUML, Mermaid, D2 ou Kroki, puis renvoie le rendu et les liens d’édition. Le service publie aussi les fichiers du plugin, la description OpenAPI et la politique de confidentialité.

Composants
17
Connexions
15
Liens appuyés par le code ou le README
13/15
Version texte du diagramme
  • Requête structurée → Modèle et route FastAPI
  • Modèle et route FastAPI → Adaptateur PlantUML
  • Modèle et route FastAPI → Encodeur d’état Mermaid
  • Modèle et route FastAPI → Adaptateur Kroki
  • Adaptateur PlantUML → Liens de résultat et d’édition
  • Encodeur d’état Mermaid → Liens de résultat et d’édition
  • Adaptateur Kroki → Liens de résultat et d’édition
Suivre un parcours dans le code

Comparez les branches PlantUML et D2 dans app.py. Elles partagent le modèle d’entrée, mais utilisent des adaptateurs distincts. La validation de type journalise une valeur invalide sans lever d’erreur; elle diffère donc du contrôle strict du langage.

Types et structure des fichiers

21 types déclarés, dont 12 dans l’aperçu des relations de base.

Diagramme des types
classDiagram
direction TB
class te235e58dd5f7["DiagramRequest"] {
  validate_lang()
  validate_type()
  validate_code()
}
class t4e73a5f77051["KrokiError"] {
}
class t7b9c286d0daa["KrokiConnectionError"] {
}
class t125669ef086e["KrokiHTTPError"] {
  __init__()
}
class te53f5e9c5fc5["Kroki"] {
  __init__()
  get_url()
  get_playground_url()
  render_diagram()
}
class t8bdd6c0a1a17["Serde"] {
  serialize()
  deserialize()
}
class tb6d1e408057f["Base64Serde"] {
  serialize()
  deserialize()
}
class td8a94fefdf74["PakoSerde"] {
  serialize()
  deserialize()
  pako_deflate()
  pako_inflate()
}
class t3d10982f0435["Layout"] {
}
class tda3378b45b31["Theme"] {
}
class tc157562f2b44["PlantUMLError"] {
}
class t0b0db7ecf15c["PlantUMLConnectionError"] {
}
class bda110f9bf6d7["BaseModel"] {
  <<unresolved_base>>
}
bda110f9bf6d7 <|-- te235e58dd5f7
class b03e969ca3e08["Exception"] {
  <<unresolved_base>>
}
b03e969ca3e08 <|-- t4e73a5f77051
t4e73a5f77051 <|-- t7b9c286d0daa
t4e73a5f77051 <|-- t125669ef086e
t8bdd6c0a1a17 <|-- tb6d1e408057f
t8bdd6c0a1a17 <|-- td8a94fefdf74
class bb5991911b5e9["Enum"] {
  <<unresolved_base>>
}
bb5991911b5e9 <|-- t3d10982f0435
bb5991911b5e9 <|-- tda3378b45b31
class b864a57f6df91["Exception"] {
  <<unresolved_base>>
}
b864a57f6df91 <|-- tc157562f2b44
tc157562f2b44 <|-- t0b0db7ecf15c

Les bases non résolues restent identifiées; les signatures complètes ne sont pas reconstruites.

Index des types
  • DiagramRequest (class) · app.py:47

    Méthodes dans l’aperçu : validate_lang, validate_type, validate_code.

    Bases déclarées : BaseModel.

  • KrokiError (class) · kroki/kroki.py:50

    Bases déclarées : Exception.

  • KrokiConnectionError (class) · kroki/kroki.py:55

    Bases déclarées : KrokiError.

  • KrokiHTTPError (class) · kroki/kroki.py:60

    Méthodes dans l’aperçu : __init__.

    Bases déclarées : KrokiError.

  • Kroki (class) · kroki/kroki.py:70

    Méthodes dans l’aperçu : __init__, get_url, get_playground_url, render_diagram.

  • Serde (class) · mermaid/mermaid.py:32

    Méthodes dans l’aperçu : serialize, deserialize.

  • Base64Serde (class) · mermaid/mermaid.py:39

    Méthodes dans l’aperçu : serialize, deserialize.

    Bases déclarées : Serde.

  • PakoSerde (class) · mermaid/mermaid.py:48

    Méthodes dans l’aperçu : serialize, deserialize, pako_deflate, pako_inflate.

    Bases déclarées : Serde.

  • Layout (class) · D2/d2.py:90

    Bases déclarées : Enum.

  • Theme (class) · D2/d2.py:95

    Bases déclarées : Enum.

  • PlantUMLError (class) · plantuml/__init__.py:23

    Bases déclarées : Exception.

  • PlantUMLConnectionError (class) · plantuml/__init__.py:30

    Bases déclarées : PlantUMLError.

Référence

17 / 17 fichiers admissibles lus (35 dans l’arbre); 0 trop volumineux, 0 échec de lecture et 0 diagnostic de syntaxe.

Ce que couvre l’analyse

Les dossiers connus de dépendances et de compilation, les fichiers d’identifiants et les binaires sont exclus. La collecte couvre les README, les manifestes reconnus et les fichiers source pris en charge.

Les statistiques Linguist couvrent l’ensemble du dépôt et peuvent inclure d’autres langages.

Carte des fichiers
flowchart TD
  root["D2COpenAIPlugin"]
  f0["app.py"]
  root --> f0
  f1["kroki/kroki.py"]
  root --> f1
  f2["mermaid/mermaid.py"]
  root --> f2
  f3["README.md"]
  root --> f3
  f4["__init__.py"]
  root --> f4
  f5["package.json"]
  root --> f5
  f6["requirements.txt"]
  root --> f6
  f7["test_app.py"]
  root --> f7
  f8["D2/__init__.py"]
  root --> f8
  f9["D2/d2.py"]
  root --> f9
  f10["D2/run_d2.py"]
  root --> f10
  f11["kroki/__init__.py"]
  root --> f11
  f12["mermaid/__init__.py"]
  root --> f12
  f13["plantuml/README.md"]
  root --> f13
  f14["plantuml/__init__.py"]
  root --> f14
  f15["plantuml/themes/__init__.py"]
  root --> f15

Fichiers à lire 3

Références