# Les 18 — Lesstof ## Advanced AI Toolbox — voice, vision, image, local, edge **Vak:** AI-Assisted Development **Vorige les:** Les 17 — AI Production Polish **Volgende les:** Geen — eindopdracht thuis --- ## Inhoud 1. [Het AI-landschap 2026](#1-het-ai-landschap-2026) 2. [Voice — Whisper + TTS](#2-voice--whisper--tts) 3. [Realtime API — voice chat met lage latency](#3-realtime-api--voice-chat-met-lage-latency) 4. [Vision — foto's analyseren](#4-vision--fotos-analyseren) 5. [Image generation — Flux + DALL-E](#5-image-generation--flux--dall-e) 6. [Local LLMs — Ollama](#6-local-llms--ollama) 7. [Edge AI — Vercel AI Gateway + Cloudflare Workers AI](#7-edge-ai--vercel-ai-gateway--cloudflare-workers-ai) 8. [Wanneer welke modaliteit](#8-wanneer-welke-modaliteit) 9. [Resources + community](#9-resources--community) --- ## 1. Het AI-landschap 2026 ### Wat is er beschikbaar **Models per provider (eind 2026):** | Provider | Text | Vision | Voice | Image | |----------|------|--------|-------|-------| | OpenAI | GPT-5, o3 | GPT-5 | GPT-realtime, Whisper, TTS | DALL-E 4 | | Anthropic | Claude Opus 4.6, Sonnet 4.6 | Sonnet 4.6 | (via partners) | — | | Google | Gemini 2.5 Pro/Flash | 2.5 Pro | (via partners) | Imagen 3 | | Meta | Llama 4 (open) | Llama 4 Vision | — | — | | xAI | Grok 4 | Grok 4 Vision | — | Grok image | | Black Forest | — | — | — | Flux 1.1 Pro | | ElevenLabs | — | — | TTS (best in class) | — | ### Modi om te draaien - **Cloud API** — direct via provider - **Edge** — Vercel AI Gateway, Cloudflare Workers AI - **Lokaal** — Ollama, llama.cpp, LM Studio Vandaag zien we alle drie. --- ## 2. Voice — Whisper + TTS ### Whisper voor transcriptie (audio → text) ```typescript import { experimental_transcribe as transcribe } from "ai"; import { openai } from "@ai-sdk/openai"; const result = await transcribe({ model: openai.transcription("whisper-1"), audio: audioBlob, // Blob, Buffer, of file path }); console.log(result.text); ``` **Whisper varianten:** - `whisper-1` — OpenAI cloud, 99 talen, $0.006/minute - `whisper-large-v3` — open-source, lokaal te draaien - Distil-Whisper — sneller, ~6× kleiner ### TTS — text → audio ```typescript import { experimental_generateSpeech as speak } from "ai"; const result = await speak({ model: openai.speech("tts-1-hd"), text: "Welkom bij Polderfest 2027!", voice: "alloy", // alloy, echo, fable, onyx, nova, shimmer }); // result.audio.uint8Array of result.audio.base64 ``` **Voor productie:** ElevenLabs voor natuurlijkere stemmen, of OpenAI tts-1-hd. Voor demo: tts-1 is goed genoeg. ### Volledige voice-loop ```typescript // 1. User spreekt → audio blob const transcription = await transcribe({ model, audio: audioBlob }); // 2. LLM antwoordt op tekst const { text } = await generateText({ model: openai("gpt-4o-mini"), prompt: transcription.text, }); // 3. AI spreekt antwoord const speech = await speak({ model: openai.speech("tts-1"), text }); // 4. Play in browser const audio = new Audio(`data:audio/mp3;base64,${speech.audio.base64}`); audio.play(); ``` Latency: ~2-4 seconden total. Voor "echte" voice-chat met lagere latency: Realtime API. --- ## 3. Realtime API — voice chat met lage latency ### Wat is anders Standaard voice-loop heeft 3 calls: Whisper + LLM + TTS. Elk een roundtrip. OpenAI Realtime API = één persistent WebSocket. Audio streamt naar OpenAI, audio streamt terug. Latency 200-500ms. **Features:** - Interruptions (user kan AI onderbreken) - Function calling (tools tijdens voice) - Verschillende voices - Multi-modal (text + voice in zelfde sessie) ### Setup (concept) ```typescript // Browser const ws = new WebSocket("wss://api.openai.com/v1/realtime?model=gpt-realtime"); ws.onopen = () => { ws.send(JSON.stringify({ type: "session.update", session: { voice: "alloy", instructions: "Je bent een helpdesk." } })); }; ws.onmessage = (e) => { const event = JSON.parse(e.data); if (event.type === "response.audio.delta") { playAudio(event.delta); // streaming audio } }; // User microphone audio → ws.send(audio) ``` Voor demo: complex maar magisch. Voor productie: hire een specialist of gebruik bestaande wrappers. --- ## 4. Vision — foto's analyseren ### Basis call ```typescript const result = await generateText({ model: openai("gpt-4o"), messages: [{ role: "user", content: [ { type: "text", text: "Beschrijf wat er op deze foto staat." }, { type: "image", image: "https://example.com/foto.jpg" }, // of: { type: "image", image: buffer }, voor lokale file ], }], }); ``` ### Multiple images ```typescript content: [ { type: "text", text: "Vergelijk deze twee foto's." }, { type: "image", image: url1 }, { type: "image", image: url2 }, ], ``` ### Use cases - **OCR** — tekst uit foto's halen - **Defect detection** — productie-foto's checken - **Visual search** — "toon producten zoals deze" - **Accessibility** — automatische alt-tekst - **Receipt scanning** — bonnetjes naar gestructureerde data - **Code from screenshot** — Excel-screenshot → JSON ### Cost Vision is 2-5× duurder dan tekst voor zelfde input. Reden: image wordt naar veel tokens omgezet (een 1024×1024 plaatje = ~1100 tokens). ### Provider keuze - GPT-4o — beste algemeen, snel - Claude Sonnet 4.6 — beste voor diagrammen en tabellen - Gemini 2.5 — goed + cheap --- ## 5. Image generation — Flux + DALL-E ### Flux via Fal ```typescript import { experimental_generateImage as generateImage } from "ai"; import { fal } from "@ai-sdk/fal"; const { image } = await generateImage({ model: fal.image("fal-ai/flux/dev"), prompt: "Een retro festival-poster voor Polderfest 2027, oranje en cream kleuren, vintage typografie", size: "1024x1024", }); // image.base64 of image.url ``` **Flux varianten:** - `flux/schnell` — snelle, goedkope variant (~$0.003/image) - `flux/dev` — middle ground - `flux/pro` — hoogste kwaliteit (~$0.05/image) ### DALL-E via OpenAI ```typescript const { image } = await generateImage({ model: openai.image("dall-e-3"), prompt: "...", size: "1024x1024", quality: "hd", }); ``` DALL-E is duurder maar bekender. Voor productie: Flux meestal de winnaar (kwaliteit + cost). ### Goede prompts **Slecht:** "Een mooie afbeelding" **Goed:** "Een retro festival-poster, stijl van 70s rockconcert-flyers, hoofdtitel 'POLDERFEST 2027' in art-deco lettertype, oranje en cream kleurpallet, decoratieve geometrische randen, geen mensen, op afgeleefd papier" Specifieker = beter. Style, palette, compositie, wat NIET te tonen. ### Use cases - Landing page hero-images - Social media posts on-the-fly - Avatar-generatie per user - Product-mockups - Email illustrations ### Storage Images zijn groot. Voor productie: - Generate → upload to Supabase Storage of S3 - Save URL in database - Gebruik CDN voor delivery --- ## 6. Local LLMs — Ollama ### Wat is Ollama Tool om open-source LLMs lokaal te runnen. Eén command per model. Werkt op macOS, Linux, Windows. ### Setup ```bash # Install brew install ollama # macOS # of via download van ollama.com # Pull a model ollama pull llama4:8b ollama pull qwen3:14b ollama pull mistral-small:24b ``` ### Run ```bash ollama run llama4:8b # Interactieve chat in terminal — 100% lokaal ``` ### Via AI SDK ```bash pnpm add ollama-ai-provider ``` ```typescript import { createOllama } from "ollama-ai-provider"; const ollama = createOllama({ baseURL: "http://localhost:11434/api", }); const result = await generateText({ model: ollama("llama4:8b"), prompt: "Wat zijn de hoofdfuncties van een AI Developer?", }); ``` ### Wanneer lokaal **Voordelen:** - Privacy — data verlaat je laptop niet - Cost — geen API-cost - Offline — werkt zonder internet - Latency — vaak snel op M-series Mac **Nadelen:** - Kwaliteit < GPT-5 / Claude voor complex - Hardware vereist (8GB+ RAM voor klein, 32GB+ voor groot) - Eerste keer downloaden duurt lang (5-50GB per model) **Use cases:** - POC zonder cost - Privacy-critical apps (healthcare, legal) - Offline tools (developer tooling) - Cost-sensitive massa-apps ### Aanrader modellen 2026 | Model | Size | Best voor | |-------|------|-----------| | `llama4:8b` | 5GB | Algemeen, klein | | `qwen3:14b` | 9GB | Code, reasoning | | `mistral-small:24b` | 15GB | Best kwaliteit / size | | `llama4:70b` | 40GB | Top kwaliteit | --- ## 7. Edge AI — Vercel AI Gateway + Cloudflare Workers AI ### Vercel AI Gateway Eén endpoint voor alle providers. Voordelen: - **Unified API** — switch providers met 1 line change - **Fallback chains** — als OpenAI down, automatisch Claude - **Cost optimization** — cheapest available model - **Key management** — Vercel beheert keys, jij niet - **Caching** — built-in response caching ```typescript import { vercel } from "@ai-sdk/vercel"; // Direct gebruik const result = await generateText({ model: vercel("openai/gpt-4o"), prompt: "...", }); // Met fallback const result = await generateText({ model: vercel.fallback([ "openai/gpt-4o", "anthropic/claude-sonnet-4.5", "google/gemini-2.5-flash", ]), prompt: "...", }); ``` ### Cloudflare Workers AI LLMs op Cloudflare's edge (250+ datacenters wereldwijd). Lage latency overal. ```bash pnpm add @ai-sdk/cloudflare ``` ```typescript import { workersai } from "@ai-sdk/cloudflare"; const result = await generateText({ model: workersai("@cf/meta/llama-3.1-8b-instruct"), prompt: "...", }); ``` **Models beschikbaar:** - Llama 4 (klein + groot) - Mistral, Qwen - Whisper (voice) - Stable Diffusion (image gen) **Cost:** gratis tier 10k requests/dag. Daarna betaal per gebruik. ### Wanneer edge - Globale app, latency belangrijk - Cost-sensitive (free tiers ruim) - Geen vendor lock-in - Vercel deploy stack (logical extension) --- ## 8. Wanneer welke modaliteit Vuistregel — denk per feature: | Feature | Beste modaliteit | |---------|------------------| | FAQ-zoeken | Text RAG | | Foto-upload met analyse | Vision | | Handsfree input | Voice | | Marketing-asset generen | Image gen | | Real-time conversation | Voice (Realtime API) | | Privacy-critical data | Local LLM | | Globale snelle response | Edge AI | | Massa goedkope calls | Edge AI of Local | Niet één tool voor alles — combineer. --- ## 9. Resources + community ### Communities - **r/LocalLLaMA** — Reddit, dagelijkse model-updates - **AI Engineer Foundation** — Discord, productie-focus - **Latent Space** — podcast + Discord, breed - **Hugging Face Discord** — modellen + papers - **AI SDK Discord** — Vercel's eigen ### Blogs + nieuws - **Simon Willison** — https://simonwillison.net (#1 AI blog) - **Latent Space** — wekelijks podcast - **The Rundown AI** — daily newsletter - **Stratechery** — strategisch perspectief (paid) ### Twitter/X-accounts - @karpathy, @swyx, @sama, @AnthropicAI, @OpenAIDevs, @simonw ### Voor diepere kennis - **Karpathy Zero to Hero** — neural networks vanaf nul (YouTube, gratis) - **Andrew Ng Courses** — Coursera, structureel - **Hugging Face NLP course** — gratis, hands-on ### Conferenties - **AI Engineer Summit** — SF, jaarlijks - **NeurIPS, ICLR** — research-focus - **Devbase, MAINSTAGE** — Nederlands --- ## Bronnen — alle docs - **AI SDK voice + vision:** https://ai-sdk.dev/docs/ai-sdk-core/transcription - **AI SDK image gen:** https://ai-sdk.dev/docs/ai-sdk-core/image-generation - **Ollama models library:** https://ollama.com/library - **Vercel AI Gateway:** https://vercel.com/docs/ai/ai-gateway - **Cloudflare Workers AI:** https://developers.cloudflare.com/workers-ai - **Fal models:** https://fal.ai/models - **Replicate models:** https://replicate.com - **OpenAI Realtime:** https://platform.openai.com/docs/guides/realtime - **ElevenLabs:** https://elevenlabs.io