33800 Docs

← Retour

QIG - État des Lieux & Directions

Date: 25/01/2026 23:00 Status: EN COURS

Ce qui existe aujourd'hui

Architecture actuelle

┌───────────────┐    ┌─────────────┐    ┌────────────────┐
│   User Input  │───►│   Ollama    │───►│  UI Component  │
│  "chercher    │    │   Intent    │    │  (Form ou      │
│   octocat"    │    │   Analysis  │    │   Display)     │
└───────────────┘    └─────────────┘    └────────────────┘
                            │                    │
                            ▼                    ▼
                     ┌─────────────┐    ┌────────────────┐
                     │ connectors  │───►│  API Response  │
                     │    -hub     │    │  (GitHub...)   │
                     └─────────────┘    └────────────────┘

Composants implémentés

Composant Fichier Status Notes
Intent Analysis prompts.ts OK Extrait action, entity, connector, search_term
Endpoint Resolution client.ts OK KNOWN_ENDPOINTS + fallback
Display Mode index.tsx OK Table/cards/list via DisplaySpec
Form Mode index.tsx PARTIEL UISpec généré mais pas testé submit
DisplaySpec Normalization normalize.ts OK Adapte structure Ollama
Schema Discovery client.ts INCOMPLET getSchema() existe mais souvent vide

Flow Display (list/search)

  1. User: "chercher utilisateur octocat"
  2. Ollama: {action: "search", entity: "user", search_term: "octocat", connector: "github"}
  3. resolveEndpoint → /search/users
  4. fetchService → GET /search/users?q=octocat
  5. Response: {total_count: 1086, items: [...]}
  6. Extract data.items
  7. displaySpecPrompt → Ollama génère colonnes/types
  8. normalizeDisplaySpec → Adapte structure
  9. DisplayRenderer → Affiche table

Flow Form (create/update)

  1. User: "créer un projet GitLab"
  2. Ollama: {action: "create", entity: "project", connector: "gitlab"}
  3. uiSpecPrompt → Ollama génère champs
  4. FormRenderer → Affiche form
  5. handleSubmit → POST vers API
  6. (NON TESTÉ en production)

Ce qui manque / Questions ouvertes

1. Utilisation des docs API (OpenAPI/Swagger)

Question: Est-ce qu'on utilise les docs API pour connaître les champs précisément ?

Réponse actuelle:

Pour OUTPUT (Display):

// Dans index.tsx ligne 166-173
let schema: any = {};
try {
  if (matchedConnector?.id) {
    schema = await connectorService.getSchema(state.auth.accessToken!, matchedConnector.id) || {};
  }
} catch (e) {
  console.warn("Could not fetch schema:", e);
}

Pour INPUT (Form):

// Dans index.tsx ligne 240-252
const uiSpec = await chatJSON<UISpec>({
  prompt: uiSpecPrompt(
    {...},
    {}, // <-- Schema vide ! "Could be fetched from API"
    state.language
  ),
  system: SYSTEM_PROMPT,
});

Problème: Le schema est rarement rempli, Ollama devine tout depuis:

2. Composants dynamiques vs fixes

Question: Les composants sont-ils dynamiques ou templates fixes ?

Réponse: Hybride

Aspect Dynamique Fixe
Structure (quels champs) Ollama décide -
Types de champs Ollama suggère Set limité (text, select, badge...)
Labels/placeholders Ollama génère -
Rendu visuel - FormRenderer / DisplayRenderer
Validation Ollama suggère Implémentation fixe

Les composants React (FormRenderer, DisplayRenderer) sont fixes, mais leur contenu (champs, colonnes, types) est dynamique.

3. Forms fonctionnels ?

Question: Les formulaires soumettent-ils vraiment les données ?

Réponse: Oui en théorie, non testé en pratique

// handleSubmit existe (ligne 294-319)
const response = await fetchService.execute(state.auth.accessToken, {
  connector,
  method,
  path,
  body: method !== "GET" ? values : undefined,
});

À tester: Créer un repo GitHub, créer un projet GitLab, etc.


Idées & Directions possibles

Option A: Améliorer le schema discovery

Concept: Enrichir connectors-hub pour retourner les vrais schemas OpenAPI

Avantages:

Inconvénients:

Effort: MOYEN-ÉLEVÉ

Option B: Parser OpenAPI on-the-fly

Concept: QIG récupère le swagger.json et le parse lui-même

User Input → Ollama (intent) → Fetch OpenAPI → Parse → Generate UI

Avantages:

Inconvénients:

Effort: MOYEN

Option C: Base de connaissances API statique

Concept: Fichier de config par API connue avec les schemas essentiels

// api-knowledge/github.ts
export const GITHUB_SCHEMAS = {
  user: {
    list: { endpoint: "/users", response: ["login", "id", "avatar_url"] },
    search: { endpoint: "/search/users", params: ["q"], response: ["login", "id"] },
    create: null, // GitHub ne permet pas de créer des users
  },
  repo: {
    create: {
      endpoint: "/user/repos",
      method: "POST",
      fields: [
        { name: "name", type: "string", required: true },
        { name: "description", type: "string" },
        { name: "private", type: "boolean", default: false },
      ]
    }
  }
}

Avantages:

Inconvénients:

Effort: FAIBLE initial, ÉLEVÉ long terme

Option D: Hybrid LLM + Schema hints

Concept: Ollama génère l'UI mais avec des "hints" de schema injectés

  1. Maintenir KNOWN_ENDPOINTS avec schemas basiques
  2. Passer ces hints à Ollama dans le prompt
  3. Ollama "enrichit" avec sa connaissance
// Prompt enrichi
const hints = KNOWN_SCHEMAS[connector]?.[entity] || {};
prompt: displaySpecPrompt(intent, hints, dataSample, language)

Avantages:

Inconvénients:

Effort: FAIBLE-MOYEN

Option E: Focus POC → Demo simple

Concept: Ne pas over-engineer, garder le POC simple

Avantages:

Inconvénients:

Effort: MINIMAL


Recommandation

Pour demain, je suggère Option E + Option D progressif:

  1. Finir le POC

    • Tester form submit en vrai
    • S'assurer que GitHub/GitLab marchent end-to-end
    • Documenter les erreurs rencontrées
  2. Ajouter schema hints progressivement

    • Enrichir KNOWN_ENDPOINTS avec des infos de schema
    • Un connector à la fois
  3. Recueillir le feedback

    • Quels use cases sont prioritaires ?
    • Quelles APIs sont indispensables ?

Fichiers clés du projet

Fichier Rôle
src/routes/index.tsx Orchestration principale
src/lib/ollama/prompts.ts Prompts Ollama (intent, uiSpec, displaySpec)
src/lib/connector/client.ts KNOWN_ENDPOINTS + resolveEndpoint
src/lib/ui-spec/normalize.ts Normalisation DisplaySpec
src/components/form/FormRenderer.tsx Rendu formulaires
src/components/display/ Rendu display (table, cards, etc.)
GUIDELINES.md Documentation des choix

Erreurs à investiguer demain

(Signalées par l'utilisateur, à détailler lors de la prochaine session)