Date: 25/01/2026 23:00 Status: EN COURS
┌───────────────┐ ┌─────────────┐ ┌────────────────┐
│ User Input │───►│ Ollama │───►│ UI Component │
│ "chercher │ │ Intent │ │ (Form ou │
│ octocat" │ │ Analysis │ │ Display) │
└───────────────┘ └─────────────┘ └────────────────┘
│ │
▼ ▼
┌─────────────┐ ┌────────────────┐
│ connectors │───►│ API Response │
│ -hub │ │ (GitHub...) │
└─────────────┘ └────────────────┘
| 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 |
{action: "search", entity: "user", search_term: "octocat", connector: "github"}/search/users/search/users?q=octocat{total_count: 1086, items: [...]}data.items{action: "create", entity: "project", connector: "gitlab"}Question: Est-ce qu'on utilise les docs API pour connaître les champs précisément ?
Réponse actuelle:
connectorService.getSchema() existe{}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:
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.
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.
Concept: Enrichir connectors-hub pour retourner les vrais schemas OpenAPI
Avantages:
Inconvénients:
Effort: MOYEN-ÉLEVÉ
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
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
Concept: Ollama génère l'UI mais avec des "hints" de schema injectés
// Prompt enrichi
const hints = KNOWN_SCHEMAS[connector]?.[entity] || {};
prompt: displaySpecPrompt(intent, hints, dataSample, language)
Avantages:
Inconvénients:
Effort: FAIBLE-MOYEN
Concept: Ne pas over-engineer, garder le POC simple
Avantages:
Inconvénients:
Effort: MINIMAL
Pour demain, je suggère Option E + Option D progressif:
Finir le POC
Ajouter schema hints progressivement
Recueillir le feedback
| 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 |
(Signalées par l'utilisateur, à détailler lors de la prochaine session)