diff --git a/MyIA.AI.Notebooks/GenAI/Integrations-DotNet/EFCore/01-EFCore-Requetes-Compilees.ipynb b/MyIA.AI.Notebooks/GenAI/Integrations-DotNet/01-EFCore-Requetes-Compilees.ipynb similarity index 99% rename from MyIA.AI.Notebooks/GenAI/Integrations-DotNet/EFCore/01-EFCore-Requetes-Compilees.ipynb rename to MyIA.AI.Notebooks/GenAI/Integrations-DotNet/01-EFCore-Requetes-Compilees.ipynb index 4489b57dcc2..0224f315bd9 100644 --- a/MyIA.AI.Notebooks/GenAI/Integrations-DotNet/EFCore/01-EFCore-Requetes-Compilees.ipynb +++ b/MyIA.AI.Notebooks/GenAI/Integrations-DotNet/01-EFCore-Requetes-Compilees.ipynb @@ -17,7 +17,7 @@ "# EF Core : des requêtes vérifiées à la compilation\n", "\n", "Ce notebook digère l'axe **EF Core — requêtes vérifiées à la compilation** de la série\n", - "*The Unexpected AI Stack: C#/.NET* (issue [#10473](../Aspire/distilled-axes-registry.md)).\n", + "*The Unexpected AI Stack: C#/.NET* (issue [#10473](Aspire/distilled-axes-registry.md)).\n", "La Part 1 de l'auteur promettait ce contraste sans jamais le porter dans le dépôt : c'est\n", "la ligne « Non distillable / À ouvrir » du registre des axes, que ce notebook ferme.\n", "\n", @@ -46,7 +46,7 @@ "\n", "**Position dans la série** : le dossier `GenAI/Integrations-DotNet/Aspire/` couvre l'AppHost et l'observabilité ;\n", "`GenAI/Integrations-DotNet/CopilotSDK/` traite le binding C# (Part 3). Ce notebook se place dans le\n", - "hub `GenAI/Integrations-DotNet/EFCore/`, en amont de l'outillage : il exécute la **librairie** (EF Core en\n", + "hub `GenAI/Integrations-DotNet/`, en amont de l'outillage : il exécute la **librairie** (EF Core en\n", "`.NET Interactive` local), pas un orchestrateur. L'axe est **provider-indépendant** : la\n", "vérification à la compilation porte sur le modèle LD (types), pas sur le moteur de base. On\n", "choisit SQLite *in-memory* pour rester **CPU-only, déterministe, sans conteneur** — mais le\n", diff --git a/MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Aspire/distilled-axes-registry.md b/MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Aspire/distilled-axes-registry.md index 08ce3f3f518..d208d44391b 100644 --- a/MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Aspire/distilled-axes-registry.md +++ b/MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Aspire/distilled-axes-registry.md @@ -23,7 +23,7 @@ Le registre **n'est pas une spec** — il est une **photographie** honnête du d | **CSharpRepl — scripté** | **Livré** | [#10897](https://github.com/jsboige/CoursIA/issues/10897) → PR [#10944](https://github.com/jsboige/CoursIA/pull/10944) | `connect --streamPipedInput` vs `pdb`/`%autoreload` IPython | Densification : **AppHost frontend livré** par [#22370](https://github.com/jsboige/CoursIA/pull/22370) — issue [#22363](https://github.com/jsboige/CoursIA/issues/22363) — (`10-Aspire-AppHost-Frontend.ipynb` + lab `FrontendLab/`) ; Scrutor/minimal API par [#22358](https://github.com/jsboige/CoursIA/issues/22358) → PR [#22361](https://github.com/jsboige/CoursIA/pull/22361) (ouverte) : notebook [`Scrutor/01-Scrutor-Endpoints-Par-Convention.ipynb`](../Scrutor/01-Scrutor-Endpoints-Par-Convention.ipynb) exécuté + lab `ScrutorLab/`, convention `IEndpoint` + `Scan` + mapping automatique, port dynamique, tableau de parité FastAPI↔Scrutor | | **CSharpRepl — attaché à un process .NET vivant** (`#wrap` / `#replace`) | **Livré** (notebook [`Vibe-Coding/docs/CSharpRepl-Live-Patching.ipynb`](../../Vibe-Coding/docs/CSharpRepl-Live-Patching.ipynb), cellules code exécutées) | [#10802](https://github.com/jsboige/CoursIA/issues/10802), [#10971](https://github.com/jsboige/CoursIA/issues/10971) → PR [#10806](https://github.com/jsboige/CoursIA/pull/10806) MERGED (b96df2a3cc3) + densification [#11332](https://github.com/jsboige/CoursIA/pull/11332) | `#wrap`/`#replace` à chaud sur un process attaché vs `pdb`/`%autoreload` IPython | Densification continue (EPIC #11271) | | **Roslyn — analyseurs statiques comme garde-fous** | **Livré** (6 règles : AGENTGUARD001 à AGENTGUARD005b ; AGENTGUARD003 couvre `Task.Run`, `Task.Factory.StartNew` et `Task.Factory.StartNew` nus) | Base [#11849](https://github.com/jsboige/CoursIA/issues/11849) → PR [#11866](https://github.com/jsboige/CoursIA/pull/11866) ; `CancellationToken` [#13696](https://github.com/jsboige/CoursIA/pull/13696) ; `GetAwaiter().GetResult()` [#13819](https://github.com/jsboige/CoursIA/pull/13819) ; variante `ConfigureAwait` [#13885](https://github.com/jsboige/CoursIA/pull/13885) ; `Task.Factory.StartNew` [#15780](https://github.com/jsboige/CoursIA/issues/15780) | Analyseurs dans la compilation vs `mypy`/`ruff` (hors compilation) ; résolution sémantique des symboles Roslyn plutôt que recherche textuelle | E3 absorbée par #15780 ; prochains grains uniquement sur défauts de couverture mesurés | -| **EF Core — requêtes vérifiées à la compilation** | **Livré** | [#12381](https://github.com/jsboige/CoursIA/issues/12381) → PR [#12393](https://github.com/jsboige/CoursIA/pull/12393) | ORM à l'exécution vs vérifié à la compilation — `EF.CompileQuery` (mesuré 2,78×), `ToQueryString()`, `FromSqlInterpolated` | Livré : notebook `GenAI/Integrations-DotNet/EFCore/01-EFCore-Requetes-Compilees.ipynb` ; densification continue possible (EPIC #10473) ; rangé dans le hub .NET via #13581 T2 | +| **EF Core — requêtes vérifiées à la compilation** | **Livré** | [#12381](https://github.com/jsboige/CoursIA/issues/12381) → PR [#12393](https://github.com/jsboige/CoursIA/pull/12393) | ORM à l'exécution vs vérifié à la compilation — `EF.CompileQuery` (mesuré 2,78×), `ToQueryString()`, `FromSqlInterpolated` | Livré : notebook `GenAI/Integrations-DotNet/01-EFCore-Requetes-Compilees.ipynb` ; densification continue possible (EPIC #10473) ; rangé dans le hub .NET via #13581 T2 | | **Channels / Orleans** | **Livré** (notebook [`Orleans/01-Orleans-Grains-Agents.ipynb`](../Orleans/01-Orleans-Grains-Agents.ipynb), code exécution réelle ; lab `OrleansAgentLab/` .NET 10 silo co-hosté `Microsoft.Orleans.Server` 10.3.1) | [#10473](https://github.com/jsboige/CoursIA/issues/10473) (reste OPEN), claim [#16436](https://github.com/jsboige/CoursIA/issues/16436) → PR [#16439](https://github.com/jsboige/CoursIA/pull/16439) (c.1208 lane `myia-po-2027:CoursIA-2`, repair commit `990ac290f699`) | Modèle d'acteurs (grains single-threaded turn-based, identité = clé `(type, key)`) avec concurrence sérialisante sans `lock`/`Interlocked` vs `asyncio`/`ray` où la discipline de concurrence reste au codeur. Concurrence mesurée : 50 appels simultanés de `RecordUsage(10)` sur le même grain → total exact `2125` (somme attendue) sans verrou | ~~co-host Aspire AppHost + `IGrainWithGuidKey`~~ **livré** par [`Orleans/02-Orleans-Aspire-CoHost.ipynb`](../Orleans/02-Orleans-Aspire-CoHost.ipynb) (lab `OrleansAspireLab/` : AppHost file-based `Aspire.Hosting.Orleans` 13.4.6 + CLI `aspire run`, silo ressource orchestrée, identités générées, reprise par Guid cross-process). Persistance livrée côté silo par `Orleans/03-Orleans-Persistance-Redis.ipynb` (lab `OrleansPersistenceLab/`, `Microsoft.Orleans.Persistence.Redis` 10.3.1 contre un Redis réel : survie d'un process à l'autre, conflit d'ETag entre deux silos). ~~Suite éventuelle : câbler `WithGrainStorage` dans l'AppHost Aspire~~ **livré** par [`Orleans/04-Orleans-Aspire-Cluster-Redis.ipynb`](../Orleans/04-Orleans-Aspire-Cluster-Redis.ipynb) (lab `OrleansClusterLab/` : deux répliques, `WithClustering` + `WithGrainStorage` sur Redis, silo réduit à `UseOrleans()`, activation unique mesurée, reprise après arrêt propre et après kill du silo porteur, redémarrage complet) | | **Aspire AppHost orchestrant pile GenAI** (ComfyUI/Qwen/vLLM) + `run --isolated` | **Livré** (AppHost [`GenAiStack.AppHost/`](GenAiStack.AppHost/apphost.cs) + jumeau worktree [`GenAiStack.AppHost-wt2/`](GenAiStack.AppHost-wt2/apphost.cs) = les 2 instances isolées de l'acceptance, notebook [`01-Aspire-Orchestration-GenAi.ipynb`](01-Aspire-Orchestration-GenAi.ipynb), README, échantillon d'appel réel) | [#10838](https://github.com/jsboige/CoursIA/issues/10838), [#10857](https://github.com/jsboige/CoursIA/issues/10857) → PR [#10846](https://github.com/jsboige/CoursIA/pull/10846) MERGED (2026-08-14T04:19Z) | AppHost orchestre la pile réelle vs `docker-compose`/`Helm` pour la pile Python. Le 3ᵉ AppHost [`GenAiStackReel.AppHost/apphost.cs`](GenAiStackReel.AppHost/apphost.cs) (notebook [`02-Aspire-GenAiStack-Reel.ipynb`](02-Aspire-GenAiStack-Reel.ipynb)) **référence** comfyui/vllm comme connection strings au lieu de les conteneuriser — choix d'architecture documenté dans son en-tête : singletons GPU en production, ne pas dupliquer 24 Go de VRAM par worktree ; seul le service léger (whisper-api) est orchestré en conteneur | Densification continue (#11271) | | **Copilot SDK binding C# (Part 3)** | **Livré** (tranche A4 EPIC #11516 ; tranche `OnPermissionRequest` avancée livrée ; **résiduel « Aspire AppHost integration » soldé** par [#22388](https://github.com/jsboige/CoursIA/issues/22388) — notebook [`11-Aspire-Copilot-Harness-AppHost.ipynb`](11-Aspire-Copilot-Harness-AppHost.ipynb) : le harness devient une ressource `Executable` d'un graphe Aspire, port proxy dynamique, configuration injectée par l'orchestrateur et rendue observable par `/config`) | [#11926](https://github.com/jsboige/CoursIA/issues/11926) → PR [#12004](https://github.com/jsboige/CoursIA/pull/12004) (c.1301+268) ; `OnPermissionRequest` [#20090](https://github.com/jsboige/CoursIA/issues/20090) → PR [#20093](https://github.com/jsboige/CoursIA/pull/20093) ; AppHost [#22388](https://github.com/jsboige/CoursIA/issues/22388) | SDK officiel C# + réutilisation credentials OAuth GitHub vs appel API BYOK Azure OpenAI ; permissions **programmables** (`Func>`, refus effectif mesuré) vs allowlists déclaratives Claude Code ; cycle de vie délégué à un orchestrateur (proxy + environnement injecté) vs lancement manuel par l'appelant | BYOK Azure (Exercice 3, user-gated sans clé) — **seul** résiduel restant de l'axe | diff --git a/MyIA.AI.Notebooks/GenAI/Integrations-DotNet/CopilotSDK/README.md b/MyIA.AI.Notebooks/GenAI/Integrations-DotNet/CopilotSDK/README.md new file mode 100644 index 00000000000..001ce9c0d5d --- /dev/null +++ b/MyIA.AI.Notebooks/GenAI/Integrations-DotNet/CopilotSDK/README.md @@ -0,0 +1,9 @@ +# CopilotSDK — le SDK GitHub Copilot piloté depuis C# + +Un seul carnet, un projet compagnon : le dossier existe parce que le carnet +[01-GitHub-Copilot-SDK-Binding.ipynb](01-GitHub-Copilot-SDK-Binding.ipynb) exécute le projet +.NET réel `CopilotAgent.App/` (un agent en streaming avec des endpoints typés) qui vit à côté +de lui. C'est cette raison de niveau — le projet qu'il exécute — qui justifie le dossier. + +Axe **Copilot SDK** de la série *The Unexpected AI Stack: C#/.NET* +([EPIC #10473](https://github.com/jsboige/CoursIA/issues/10473)). diff --git a/MyIA.AI.Notebooks/GenAI/Integrations-DotNet/README.md b/MyIA.AI.Notebooks/GenAI/Integrations-DotNet/README.md new file mode 100644 index 00000000000..8856e59dd2d --- /dev/null +++ b/MyIA.AI.Notebooks/GenAI/Integrations-DotNet/README.md @@ -0,0 +1,31 @@ +# Integrations-DotNet — hub des bindings .NET GenAI + +Point de chute canonique des bindings .NET GenAI de la série *The Unexpected AI Stack: +C#/.NET* ([EPIC #10473](https://github.com/jsboige/CoursIA/issues/10473)) : les axes de la +série qui n'ont pas de série pédagogique à part entière vivent ici, un binding par dossier. +Le registre des axes distillables de la série vit dans +[`Aspire/distilled-axes-registry.md`](Aspire/distilled-axes-registry.md). + +## Contenu + +| Trajectoire | Contenu | +|---|---| +| [Aspire/](Aspire/README.md) | Série principale (11 carnets) : orchestrer la pile GenAI dans un AppHost compilé et typé — observabilité OpenTelemetry, streaming d'agents, tests d'intégration, garde-fous Roslyn, flotte sémantique multi-connecteurs | +| [Orleans/](Orleans/README.md) | 4 carnets : grains acteurs stateful pour les workloads IA, silo co-hosté par un AppHost, persistance Redis, cluster | +| [CopilotSDK/](CopilotSDK/README.md) | Le SDK GitHub Copilot piloté depuis C# en streaming, endpoints typés + projet compagnon `CopilotAgent.App/` | +| [Scrutor/](Scrutor/README.md) | Des endpoints de minimal API découverts par convention (`Scan()`) + lab `ScrutorLab/` | +| [01-EFCore-Requetes-Compilees.ipynb](01-EFCore-Requetes-Compilees.ipynb) | EF Core : le compilateur comme garde-fou jusque dans les requêtes (`EF.CompileQuery` mesuré 2,93×, `ToQueryString()`, `FromSqlInterpolated`) — binding sans projet compagnon, à la racine du hub | + +## Rangement + +La règle de niveau du hub : **un binding sans projet compagnon vit à la racine du hub, un +binding dont le carnet exécute un projet .NET réel garde son dossier** — et c'est cette raison +que chaque README de dossier écrit en une phrase. + +- **EF Core** : mono-carnet, aucun projet compagnon → absorbé à la racine du hub (ce PR, + soldant la promesse d'absorption de [PR #14431](https://github.com/jsboige/CoursIA/pull/14431), + [#13581](https://github.com/jsboige/CoursIA/issues/13581) T2), et listé dans l'index ci-dessus. +- **Copilot SDK** : le carnet exécute `CopilotAgent.App/` → garde son dossier, déclaré dans + [`CopilotSDK/README.md`](CopilotSDK/README.md). +- **Scrutor** : le carnet exécute `ScrutorLab/` → garde son dossier, déclaré dans + [`Scrutor/README.md`](Scrutor/README.md). diff --git a/MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Scrutor/README.md b/MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Scrutor/README.md new file mode 100644 index 00000000000..5b5ebc32914 --- /dev/null +++ b/MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Scrutor/README.md @@ -0,0 +1,10 @@ +# Scrutor — des endpoints de minimal API découverts par convention + +Un seul carnet, un projet compagnon : le dossier existe parce que le carnet +[01-Scrutor-Endpoints-Par-Convention.ipynb](01-Scrutor-Endpoints-Par-Convention.ipynb) +exécute le projet .NET réel `ScrutorLab/` (un minimal API dont les endpoints sont découverts +par `Scan()`/`Registry`) qui vit à côté de lui. C'est cette raison de niveau — le projet qu'il +exécute — qui justifie le dossier. + +Axe **Scrutor** de la série *The Unexpected AI Stack: C#/.NET* +([EPIC #10473](https://github.com/jsboige/CoursIA/issues/10473)). diff --git a/MyIA.AI.Notebooks/GenAI/README.md b/MyIA.AI.Notebooks/GenAI/README.md index 6124f5dd5d7..dc46104a155 100644 --- a/MyIA.AI.Notebooks/GenAI/README.md +++ b/MyIA.AI.Notebooks/GenAI/README.md @@ -156,7 +156,7 @@ GenAI/ └── RAG-et-Memoire-Semantique/ # Mémoire sémantique : Qdrant, embeddings, grounding (SDDD) ``` -> **Note d'arborescence (mars 2026)** : `EFCore/` et `CopilotSDK/` (mono-notebook chacun) seront absorbés dans `Integrations-DotNet/` via [PR #14431](https://github.com/jsboige/CoursIA/pull/14431) — **répertoire pas encore créé sur `main` à la rédaction de cette note** (en attente du merge de #14431). Le hub Integrations-DotNet sera le point de chute canonique des futurs bindings .NET GenAI. `Aspire/` reste au niveau racine, série pédagogique majeure avec sous-série catalog. La provenance des réalisations étudiantes EPF est portée par la section « Généalogie » de [`CaseStudies/README.md`](CaseStudies/README.md). +> **Note d'arborescence** : le hub [`Integrations-DotNet/`](Integrations-DotNet/) est le point de chute canonique des bindings .NET GenAI de la série *The Unexpected AI Stack: C#/.NET*. Créé par [PR #14431](https://github.com/jsboige/CoursIA/pull/14431) ([#13581](https://github.com/jsboige/CoursIA/issues/13581) T2), il regroupe Aspire (série pédagogique majeure), Orleans, Copilot SDK et Scrutor — et le binding **EF Core**, mono-carnet sans projet compagnon, à sa racine (absorbé, cf [`Integrations-DotNet/README.md`](Integrations-DotNet/README.md)). La provenance des réalisations étudiantes EPF est portée par la section « Généalogie » de [`CaseStudies/README.md`](CaseStudies/README.md). ### 00-GenAI-Environment - Votre point de départ diff --git a/README.md b/README.md index 540101d3f36..0034dc6edce 100644 --- a/README.md +++ b/README.md @@ -306,7 +306,7 @@ Chaque modalité (Image, Audio, Video) suit la même montée en quatre niveaux - Côté **mémoire des agents**, la sous-série [RAG et Mémoire Sémantique](MyIA.AI.Notebooks/GenAI/RAG-et-Memoire-Semantique/README.md) est devenue un cursus complet : retrieval avancé, embeddings et tokenisation reconstruits depuis zéro, stockage vectoriel, puis Kernel Memory en processus, en Python, en recherche hybride et multimodale. Qdrant en est le backend opérationnel pour ancrer les agents de codage dans l'historique des conversations et le code des dépôts. -**[Aspire](MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Aspire/README.md) -- la pile IA inattendue : C#/.NET** -- Une sous-série à contre-courant : décrire modèles, bases vectorielles, services, secrets, santé et télémétrie dans un **AppHost** compilé et typé plutôt que dans un assemblage de Compose et de scripts. Partie de l'orchestration GPU et multi-machines, elle couvre désormais observabilité OpenTelemetry, streaming d'agents par Channels, tests d'intégration avec conteneurs éphémères, garde-fous Roslyn exécutés dans le build et flotte sémantique multi-connecteurs. Deux axes vivent en hub dédié [Integrations-DotNet](MyIA.AI.Notebooks/GenAI/Integrations-DotNet/) : [EF Core](MyIA.AI.Notebooks/GenAI/Integrations-DotNet/EFCore/) fait du compilateur un garde-fou jusque dans les requêtes et le [SDK GitHub Copilot](MyIA.AI.Notebooks/GenAI/Integrations-DotNet/CopilotSDK/) pilote depuis C# un agent en streaming avec des endpoints typés. +**[Aspire](MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Aspire/README.md) -- la pile IA inattendue : C#/.NET** -- Une sous-série à contre-courant : décrire modèles, bases vectorielles, services, secrets, santé et télémétrie dans un **AppHost** compilé et typé plutôt que dans un assemblage de Compose et de scripts. Partie de l'orchestration GPU et multi-machines, elle couvre désormais observabilité OpenTelemetry, streaming d'agents par Channels, tests d'intégration avec conteneurs éphémères, garde-fous Roslyn exécutés dans le build et flotte sémantique multi-connecteurs. Deux axes vivent en hub dédié [Integrations-DotNet](MyIA.AI.Notebooks/GenAI/Integrations-DotNet/) : [EF Core](MyIA.AI.Notebooks/GenAI/Integrations-DotNet/01-EFCore-Requetes-Compilees.ipynb) fait du compilateur un garde-fou jusque dans les requêtes et le [SDK GitHub Copilot](MyIA.AI.Notebooks/GenAI/Integrations-DotNet/CopilotSDK/) pilote depuis C# un agent en streaming avec des endpoints typés. **[Vibe-Coding](MyIA.AI.Notebooks/GenAI/Vibe-Coding/README.md)** -- Le développement assisté par agents IA : ateliers progressifs sur Claude Code et Roo Code, compétences, sous-agents, MCP et hooks, complétés par les agents conteneurisés Claw-Systems et le proxy multi-provider Claudish. La question directrice est celle qui suit naturellement l'écriture assistée : *si un agent produit le code, qui le relit et quelles garanties restent indépendantes de lui ?* L'analyseur Roslyn **MyIA.AgentSafetyAnalyzer** compile ces garde-fous dans le build : règles de sécurité, correction automatique des secrets codés en dur, registre de suppressions et tests. Il est distinct d'**AgentGuard.Analyzers**, le volet Roslyn de la sous-série Aspire. Un second chantier branche un REPL C# sur un processus .NET vivant pour l'observer et le corriger sans l'arrêter. diff --git a/_quarto.yml b/_quarto.yml index bd54a4dbacf..ab5a7b15637 100644 --- a/_quarto.yml +++ b/_quarto.yml @@ -1171,7 +1171,7 @@ project: - "MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Aspire/10-Aspire-AppHost-Frontend.ipynb" - "MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Aspire/11-Aspire-Copilot-Harness-AppHost.ipynb" - "MyIA.AI.Notebooks/GenAI/Integrations-DotNet/CopilotSDK/01-GitHub-Copilot-SDK-Binding.ipynb" - - "MyIA.AI.Notebooks/GenAI/Integrations-DotNet/EFCore/01-EFCore-Requetes-Compilees.ipynb" + - "MyIA.AI.Notebooks/GenAI/Integrations-DotNet/01-EFCore-Requetes-Compilees.ipynb" - "MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Orleans/01-Orleans-Grains-Agents.ipynb" - "MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Orleans/02-Orleans-Aspire-CoHost.ipynb" - "MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Orleans/03-Orleans-Persistance-Redis.ipynb" diff --git a/docs/curriculum/genai.md b/docs/curriculum/genai.md index 8570647d631..d46f8378c63 100644 --- a/docs/curriculum/genai.md +++ b/docs/curriculum/genai.md @@ -191,7 +191,7 @@ Génération d'images (DALL-E, Stable Diffusion, Qwen, ComfyUI), synthèse vocal | 10 | [Aspire AppHost : orchestrer un frontend Vite/pnpm](../../MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Aspire/10-Aspire-AppHost-Frontend.ipynb) | ALPHA | Oui | | 11 | [Aspire AppHost : orchestrer un harness d'agent comme…](../../MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Aspire/11-Aspire-Copilot-Harness-AppHost.ipynb) | BETA | Oui | | 12 | [GitHub Copilot SDK en C# : binding, streaming, Scrutor](../../MyIA.AI.Notebooks/GenAI/Integrations-DotNet/CopilotSDK/01-GitHub-Copilot-SDK-Binding.ipynb) | BETA | Non | -| 13 | [EF Core : des requêtes vérifiées à la compilation](../../MyIA.AI.Notebooks/GenAI/Integrations-DotNet/EFCore/01-EFCore-Requetes-Compilees.ipynb) | BETA | Oui | +| 13 | [EF Core : des requêtes vérifiées à la compilation](../../MyIA.AI.Notebooks/GenAI/Integrations-DotNet/01-EFCore-Requetes-Compilees.ipynb) | BETA | Oui | | 14 | [Orleans × Aspire : le silo orchestré, les identités…](../../MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Orleans/02-Orleans-Aspire-CoHost.ipynb) | BETA | Oui | | 15 | [Orleans × Aspire : un cluster de deux silos, l'état…](../../MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Orleans/04-Orleans-Aspire-Cluster-Redis.ipynb) | BETA | Non | | 16 | [Scrutor et minimal API : des endpoints par convention](../../MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Scrutor/01-Scrutor-Endpoints-Par-Convention.ipynb) | BETA | Non | diff --git a/scripts/notebook_tools/pedagogy_density_baseline.json b/scripts/notebook_tools/pedagogy_density_baseline.json index a866dd1a976..2d78fc73aeb 100644 --- a/scripts/notebook_tools/pedagogy_density_baseline.json +++ b/scripts/notebook_tools/pedagogy_density_baseline.json @@ -278,7 +278,7 @@ "MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Aspire/09-Aspire-Harness-CopilotSdk.ipynb": 779.364, "MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Aspire/10-Aspire-AppHost-Frontend.ipynb": 1105.538, "MyIA.AI.Notebooks/GenAI/Integrations-DotNet/CopilotSDK/01-GitHub-Copilot-SDK-Binding.ipynb": 1923.3, - "MyIA.AI.Notebooks/GenAI/Integrations-DotNet/EFCore/01-EFCore-Requetes-Compilees.ipynb": 1397.0, + "MyIA.AI.Notebooks/GenAI/Integrations-DotNet/01-EFCore-Requetes-Compilees.ipynb": 1397.0, "MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Orleans/01-Orleans-Grains-Agents.ipynb": 881.0, "MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Orleans/02-Orleans-Aspire-CoHost.ipynb": 728.133, "MyIA.AI.Notebooks/GenAI/Integrations-DotNet/Orleans/03-Orleans-Persistance-Redis.ipynb": 1234.077,