Globusfiguren fra Eco², bearbejdet til denne portfolio ud fra den seneste officielle hovedfigur: en himmelblå globus med grønne landmasser, en spire på toppen og et brunt smilende ansigt
Tilbage til salen

Eco²

Backend · Cloud infrastructure

Vejledning i affaldssortering ud fra ét foto og en samtale.

En samlet AI-assistent, der forstår, hvordan affaldssortering fungerer i Korea.

2025.10.31 — 2026.02.10

Teamprojekt · fundament for infrastruktur og udrulning → domænebackend → asynkron behandling, samtaleagent, verifikation

2025 새싹 해커톤 (Saessak Hackathon)Excellence Award · 2. december 2025

  • WebappDrift ophørt

Eco² vocabulary

Lens
Service Path
Request Path
Async Work
Operations
Infrastructure
Measurement
  1. edge
  2. auth offload
  3. domain api
  1. task queue
  2. scan pipeline
  3. chat agent
  4. event bus
  1. cluster
  2. gitops
  3. autoscaling
  1. observability
  2. load test
  3. evaluation

Edge: ROUTE 53 · ALB · HTTPS 443 · internet-facing · external-dns · istio-ingressgateway · NodePort · eco2-gateway · VirtualService · x-canary · AuthorizationPolicy · ENVOY SIDECAR · kiali-serverAuth Offload: AuthorizationPolicy · action: CUSTOM · notPaths · envoyExtAuthzGrpc · failOpen: false · CheckRequest · x-user-id · BlacklistCache · BootstrapFromRedis · outbox:blacklist · blacklist.events · UsersServiceDomain API: VirtualService · x-user-id · /api/v1/scan · X-Idempotency-Key · job_id · stream_url · 202 ACCEPTED · Retry-After · ScanTask · UsersService · ImageService · ENVOY SIDECARTask Queue: outbox:blacklist · blacklist.events · RabbitmqCluster · scan.direct · reward.events · dlx · x-dead-letter-exchange · chat.process · AioPikaBroker · task_acks_late · apply_async · gevent · scan.vision · scan.rule · scan.answer · scan.reward · CELERY CHAIN · QueueLength · inspect ping · QUEUE SATURATIONScan Pipeline: ScanTask · scan.direct · reward.events · apply_async · gevent · scan.vision · scan.rule · scan.answer · scan.reward · CELERY CHAIN · RewardStep · item_class_list.yaml · situation_tags.yaml · LITE RAG · JsonRegulationRetriever · PipelineStage · waste_rag · XADD · domain: worker-ai · pipeline_duration · vision_stage_durationChat Agent: ImageService · chat.process · AioPikaBroker · create_chat_graph · route_by_intent · MULTI-INTENT FANOUT · waste_rag · recyclable_price · collection_point · image_generation · aggregator · thread_id · SyncableRedisSaver · AsyncPostgresSaver · LANGSMITH_TRACING · regenerateEvent Bus: job_id · stream_url · PipelineStage · XADD · scan:events:{shard} · XREADGROUP · XACK · XAUTOCLAIM · PendingReclaimer · STATE KV · scan:state:{job_id} · sse:events:{shard} · SSEBroadcastManager · Last-Event-ID · scan_sse_connections_active · ServiceMonitor · traceparentCluster: NodePort · kubeadm init · kubeadm join · vxlanMode · BGPConfiguration · module "vpc" · worker_ai · nodeSelector · domain: worker-ai · NoSchedule · 24-NODE CLUSTERGitOps: external-dns · x-canary · dev-root · ApplicationSet · sync-wave · selfHeal · ignoreDifferences · argocd-image-updater · update-strategy: digest · write-back-method · targetRevision · ci-services.ymlAutoscaling: ignoreDifferences · ScaledObject · QueueLength · cooldownPeriod · pollingInterval · fallback · maxReplicaCount · stabilizationWindowSeconds · HorizontalPodAutoscaler · scan_sse_connections_active · prometheus-adapterObservability: 24-NODE CLUSTER · prometheus-adapter · FLUENT BIT · Elasticsearch · Kibana · kube-prometheus-stack · AlertmanagerConfig · ServiceMonitor · JAEGER · OPENTELEMETRY · traceparent · kiali-server · LANGSMITH_TRACINGLoad Test: k6 · ramping-vus · thresholds · pipeline_duration · vision_stage_duration · poll_timeout · inspect ping · WORKER RESTART · POLLING TIMEOUT · QUEUE SATURATIONEvaluation: EvalConfig · eval_mode · eval_sample_rate · eval_cost_budget_daily_usd · EvalResult · EvalGrade · code_grader · llm_grader · CUSUM · regenerate · OpenAIBARSEvaluator

Hvordan de 24 noder faktisk forbindes, ét flow ad gangen.

Selvadministreret Kubernetes bygget med kubeadm. Kortet placerer de 24 fysiske noder og deres workloads inden for README's fem lag og tegner de faktiske forbindelser mellem dem. Når et flow vælges, fremhæves kun den sti, med nummererede trin.

Den identificerer affald ud fra et foto og forklarer, hvordan det skal bortskaffes, og i samtalen kalder den værktøjer til steder, vejr, genbrugspriser og websøgning og genererer billeder. I dette teamprojekt begyndte jeg med fundamentet for klynge og udrulning og udvidede mit ansvar til domænebackend, asynkron behandling, samtaleagenten og verifikation.

Fra udviklingen til konkurrencen til styrkelse af backend og drift

Tjenesten er afsluttet; en optaget demo og den tekniske rapport viser den i funktion.

Klyngens forbindelseskort · gentegnet ud fra manifester og kode ved commit a072127
Forbindelseskort for Eco²-klyngen · 24 noderEt kort over de 24 fysiske noder inden for README's fem lagbånd. Browseren slår kun navnet op i Route 53; efter at TLS afsluttes ved ALB'en på 443, sender Istio ingress Envoy på en NodePort forespørgslen til et domæne-API. Scan API'et sætter arbejdet i kø på RabbitMQ og returnerer straks et job_id; scan-worker i AI-puljen skriver fremdriftshændelser til Redis Streams med XADD. Event Router læser dem, opdaterer State KV og publicerer til Pub/Sub, og SSE Gateway sender dem til browseren. checkpoint-syncer gemmer Chat-checkpoints, og persistence consumer på Chat-noden gemmer beskeder i PostgreSQL. Platform Layer er ikke en forespørgselssti; det konfigurerer, skalerer og observerer.BrowserHTTPS · SSEAWS ALB443 · TLS afsluttes herRoute 53DNSGitHub Actions · Docker Hubimage · manifest-revisionLLM APIOpenAI · GoogleLangSmithsporing af LLM-kørslerFluent BitDaemonSet · alle noderk8s-masterALB Controller · ExternalDNSArgo CD image updaterIstiodcontrol planek8s-ingress-gatewayIstio ingress Envoyk8s-api-scanScan APIk8s-api-chatChat APImessage consumerpersistence consumerk8s-api-authauth APIext-authzk8s-api-infoInfo APIinfo-workerk8s-api-charactercharacter APIk8s-api-imageimages APIk8s-api-usersusers APIk8s-api-locationlocation APIk8s-sse-gatewaySSE Gatewayk8s-event-routerEvent Routerk8s-rabbitmqRabbitMQk8s-worker-aik8s-worker-ai-2k8s-worker-storagek8s-worker-storage-2k8s-redis-pubsubPub/Subk8s-redis-streamsStreamsState KVk8s-redis-cacheCachek8s-postgresqlPostgreSQLk8s-redis-authblacklistk8s-monitoringKEDAPrometheusGrafanaAlertmanagerk8s-loggingElasticsearchKibanascan-workerchat-workercheckpoint-syncerauth-relayauth-workerusers-workercharacter-workercharacter-match-workerKialiJaeger · dev in-memoryKubernetes-klynge24 noder · kubeadmEdge Layer1 nodeService Layer8 noder · Envoy-sidecarIntegration Layer7 noderPersistence Layer5 noderPlatform Layer3 noder · konfigurere · skalere · observereAWS-administreretAI-puljedomain: worker-aistorage-puljedomain: worker-storageIngen fastlåst node1DNS-opslag2 HTTPS 443 · Browser → AWS ALB23HTTP · NodePort4VirtualService5Celery-opgave6 consume · RabbitMQ → scan-worker67 HTTPS · AI-pulje → LLM API78XADD scan:events9XREADGROUP10SETEX state11PUBLISH12SUBSCRIBE13SSE-stream14Gendannelse ved genforbindelse1 HTTPS 443 · Browser → AWS ALB12HTTP · NodePort3VirtualService4Taskiq-opgave5 consume · RabbitMQ → chat-worker56 HTTPS · AI-pulje → LLM API67XADD chat:events8XREADGROUP9PUBLISH10SUBSCRIBE11SSE-stream12checkpoint13læs checkpoint14synkronisér til PostgreSQL15chat-persistence group16gem beskeder1DNS-opslag2 HTTPS 443 · Browser → AWS ALB23HTTP · NodePort4ext-authz · gRPC 500515blacklist-opslag6VirtualService7gRPC8gRPC1outbox:blacklist2blacklist.events3 blacklist.events · RabbitMQ → auth-worker34gem blacklist5 Celery batch · RabbitMQ → users-worker56UPSERT1image · manifest-revision2Ingress → ALB · DNS-poster3xDS-konfiguration4antal pods5 antal pods · KEDA → storage-pulje56logs7 sporing af LLM-kørsler · AI-pulje → LangSmith7

Scan-forespørgsel → levering i realtid

En forespørgsel om fotoanalyse bliver til arbejde i kø, og dens fremdriftshændelser kommer tilbage til samme browser.

  1. BrowserDNS-opslag: DNS-opslagRoute 53

    Kun navnet slås op i Route 53-poster. Forespørgsler passerer ikke gennem DNS.

  2. Browserdataflow: HTTPS 443AWS ALB

    TLS afsluttes ved ALB'en.

  3. AWS ALBdataflow: HTTP · NodePortIstio ingress Envoyk8s-ingress-gateway

    Overdrages til Istio ingress Envoy via EC2-instansmålets NodePort.

  4. Istio ingress Envoyk8s-ingress-gatewaydataflow: VirtualServiceScan APIk8s-api-scan

    Routes til Scan API'et, der sætter arbejdet i kø og straks returnerer et job_id; polling efter resultatet besvares med 202, indtil jobbet er færdigt.

  5. Scan APIk8s-api-scandataflow: Celery-opgaveRabbitMQk8s-rabbitmq

    Scan-opgaven lægges på RabbitMQ.

  6. RabbitMQk8s-rabbitmqdataflow: consumescan-workerk8s-worker-ai · k8s-worker-ai-2

    scan-worker (Celery · gevent) i AI-puljen tager den og kører Vision → Rule → Answer → Reward. De fire stadier er kædede Celery-tasks, ikke noder.

  7. AI-puljek8s-worker-ai · k8s-worker-ai-2dataflow: HTTPSLLM API

    Scan- og chat-workerne kalder OpenAI- og Google-API'erne.

  8. scan-workerk8s-worker-ai · k8s-worker-ai-2dataflow: XADD scan:eventsStreamsk8s-redis-streams

    Fremdriftshændelser skrives til én af fire Streams-shards.

  9. Streamsk8s-redis-streamsdataflow: XREADGROUPEvent Routerk8s-event-router

    Event Router læser dem som consumer group og sender XACK efter behandlingen; pending og reclaim holder leveringen at-least-once.

  10. Event Routerk8s-event-routerdataflow: SETEX stateState KVk8s-redis-streams

    Den skriver den seneste tilstand og en markering mod dobbeltbehandling til State KV på samme Redis-node.

  11. Event Routerk8s-event-routerdataflow: PUBLISHPub/Subk8s-redis-pubsub

    Leveres i realtid på jobbets kanal i shard Pub/Sub.

  12. Pub/Subk8s-redis-pubsubdataflow: SUBSCRIBESSE Gatewayk8s-sse-gateway

    SSE Gateway abonnerer gennem én delt listener pr. proces og fordeler til hver tilsluttet browser.

  13. SSE Gatewayk8s-sse-gatewaydataflow: SSE-streamBrowser

    En forbindelse åbnet over samme ALB- og ingress-sti. Leveringen er at-least-once; dubletter håndteres idempotent.

  14. State KVk8s-redis-streamsdataflow: Gendannelse ved genforbindelseSSE Gatewayk8s-sse-gateway

    Ved genforbindelse med Last-Event-ID udfylder State KV og de bevarede Streams de manglende hændelser.

Chat · tokens og lagring

Chat-tokens følger samme hændelsessti som Scan; checkpoints og beskeder gemmes af to forskellige workloads.

  1. Browserdataflow: HTTPS 443AWS ALB

    TLS afsluttes ved ALB'en.

  2. AWS ALBdataflow: HTTP · NodePortIstio ingress Envoyk8s-ingress-gateway

    Overdrages til Istio ingress Envoy via EC2-instansmålets NodePort.

  3. Istio ingress Envoyk8s-ingress-gatewaydataflow: VirtualServiceChat APIk8s-api-chat

    Routes til Chat API'et.

  4. Chat APIk8s-api-chatdataflow: Taskiq-opgaveRabbitMQk8s-rabbitmq

    Chat-opgaven lægges på RabbitMQ.

  5. RabbitMQk8s-rabbitmqdataflow: consumechat-workerk8s-worker-ai · k8s-worker-ai-2

    chat-worker (Taskiq · asyncio) klassificerer hensigten med LangGraph, kører derefter vision om nødvendigt, de valgte værktøjer, aggregatoren og et resumé om nødvendigt og svarer. Hver forespørgsel kører kun de grene, den har brug for.

  6. AI-puljek8s-worker-ai · k8s-worker-ai-2dataflow: HTTPSLLM API

    Scan- og chat-workerne kalder OpenAI- og Google-API'erne.

  7. chat-workerk8s-worker-ai · k8s-worker-ai-2dataflow: XADD chat:eventsStreamsk8s-redis-streams

    Tokens og stage-hændelser skrives til fire Streams-shards; derfra er leveringsstien den samme som for Scan.

  8. Streamsk8s-redis-streamsdataflow: XREADGROUPEvent Routerk8s-event-router

    Event Router læser dem som consumer group og sender XACK efter behandlingen; pending og reclaim holder leveringen at-least-once.

  9. Event Routerk8s-event-routerdataflow: PUBLISHPub/Subk8s-redis-pubsub

    Leveres i realtid på jobbets kanal i shard Pub/Sub.

  10. Pub/Subk8s-redis-pubsubdataflow: SUBSCRIBESSE Gatewayk8s-sse-gateway

    SSE Gateway abonnerer gennem én delt listener pr. proces og fordeler til hver tilsluttet browser.

  11. SSE Gatewayk8s-sse-gatewaydataflow: SSE-streamBrowser

    En forbindelse åbnet over samme ALB- og ingress-sti. Leveringen er at-least-once; dubletter håndteres idempotent.

  12. chat-workerk8s-worker-ai · k8s-worker-ai-2dataflow: checkpointCachek8s-redis-cache

    LangGraph-checkpointet ligger i Redis Cache.

  13. Cachek8s-redis-cachedataflow: læs checkpointcheckpoint-syncerk8s-worker-ai · k8s-worker-ai-2

    checkpoint-syncer læser checkpointet fra Redis.

  14. checkpoint-syncerk8s-worker-ai · k8s-worker-ai-2dataflow: synkronisér til PostgreSQLPostgreSQLk8s-postgresql

    AsyncPostgresSaver gemmer det asynkront i PostgreSQL.

  15. Streamsk8s-redis-streamsdataflow: chat-persistence grouppersistence consumerk8s-api-chat

    persistence consumer på Chat-noden læser done-hændelser som consumer group.

  16. persistence consumerk8s-api-chatdataflow: gem beskederPostgreSQLk8s-postgresql

    Chatbeskeder gemmes i PostgreSQL. Det er en anden workload end checkpoint-syncer.

Indgang · autentificering

Den synkrone vej fra klyngens indgang til et domæne-API. Kun policybeskyttede stier kontrollerer autentificering først; pod-trafik mellem noder kører på Calico VXLAN.

  1. BrowserDNS-opslag: DNS-opslagRoute 53

    Kun navnet slås op i Route 53-poster. Forespørgsler passerer ikke gennem DNS.

  2. Browserdataflow: HTTPS 443AWS ALB

    TLS afsluttes ved ALB'en.

  3. AWS ALBdataflow: HTTP · NodePortIstio ingress Envoyk8s-ingress-gateway

    Overdrages til Istio ingress Envoy via EC2-instansmålets NodePort.

  4. Istio ingress Envoyk8s-ingress-gatewaydataflow: ext-authz · gRPC 50051ext-authzk8s-api-auth

    Kun stier under en CUSTOM-policy spørger først Go ext-authz (timeout 2 s, failOpen false). Stier som login, health og docs er undtaget.

  5. ext-authzk8s-api-authdataflow: blacklist-opslagblacklistk8s-redis-auth

    Tokenet kontrolleres mod Redis-blacklisten.

  6. Istio ingress Envoyk8s-ingress-gatewaydataflow: VirtualServiceChat APIk8s-api-chat

    Routes til Chat API'et.

  7. Chat APIk8s-api-chatdataflow: gRPCimages APIk8s-api-image

    Det synkrone kald chat → images, som README nævner.

  8. auth APIk8s-api-authdataflow: gRPCusers APIk8s-api-users

    Det synkrone kald auth → users, som README nævner.

Storage-pulje · asynkrone skrivninger

Blacklisten for autentificering og ejerskab af figurer gemmes af workers i storage-puljen, som henter deres arbejde fra RabbitMQ.

  1. blacklistk8s-redis-authdataflow: outbox:blacklistauth-relayk8s-worker-storage · k8s-worker-storage-2

    auth-relay (README's auth-Bus) læser Redis-outboxen.

  2. auth-relayk8s-worker-storage · k8s-worker-storage-2dataflow: blacklist.eventsRabbitMQk8s-rabbitmq

    Den genpublicerer til RabbitMQ med nye forsøg og en DLQ.

  3. RabbitMQk8s-rabbitmqdataflow: blacklist.eventsauth-workerk8s-worker-storage · k8s-worker-storage-2

    auth-worker modtager blacklist-hændelserne.

  4. auth-workerk8s-worker-storage · k8s-worker-storage-2dataflow: gem blacklistblacklistk8s-redis-auth

    De gemmes i Redis-blacklisten.

  5. RabbitMQk8s-rabbitmqdataflow: Celery batchusers-workerk8s-worker-storage · k8s-worker-storage-2

    users-worker modtager arbejde om ejerskab af figurer i batches.

  6. users-workerk8s-worker-storage · k8s-worker-storage-2dataflow: UPSERTPostgreSQLk8s-postgresql

    Det skrives til PostgreSQL.

Konfigurere · skalere · observere

Platform Layer er ikke et trin, forespørgsler passerer; det udruller, konfigurerer, skalerer og observerer de andre lag. Noderne er EC2-instanser oprettet med Terraform, med kubeadm og Calico installeret af Ansible; CI validerer kun Terraform og kører aldrig apply automatisk.

  1. GitHub Actions · Docker Hubkonfiguration · skalering: image · manifest-revisionArgo CD image updaterk8s-master

    Argo CD bringer klyngens konfiguration i overensstemmelse via App-of-Apps og Sync Waves. Kun image updaterens placering på control plane blev bekræftet.

  2. ALB Controller · ExternalDNSk8s-masterkonfiguration · skalering: Ingress → ALB · DNS-posterAWS-administreret

    ALB Controller og ExternalDNS konfigurerer ressourcer på AWS-siden. Det er ikke en sti, forespørgsler tager.

  3. Istiodk8s-masterkonfiguration · skalering: xDS-konfigurationIstio ingress Envoyk8s-ingress-gateway

    Istiod sender Gateway-, VirtualService- og EnvoyFilter-konfigurationen via xDS til ingress Envoy og til hvert API's Envoy-sidecar.

  4. KEDAk8s-monitoringkonfiguration · skalering: antal podsAI-puljek8s-worker-ai · k8s-worker-ai-2

    KEDA justerer antallet af worker-pods. Antallet af noder ændres ikke.

  5. KEDAk8s-monitoringkonfiguration · skalering: antal podsstorage-puljek8s-worker-storage · k8s-worker-storage-2

    Worker-pods i storage-puljen skaleres på samme måde.

  6. Fluent Bitobserverbarhed: logsElasticsearchk8s-logging

    Fluent Bit er et DaemonSet på alle noder og sender logs til Elasticsearch.

  7. AI-puljek8s-worker-ai · k8s-worker-ai-2observerbarhed: sporing af LLM-kørslerLangSmith

    Traces af LLM-kald sendes til LangSmith, en ekstern SaaS.

Alle forbindelser med samme tykkelse. Vælg et flow for kun at fremhæve dets vej med nummererede trin.

  • Fuldt optrukket · den retning, som forespørgsler, arbejde, hændelser og skrivninger flyder i
  • Prikket · DNS-opslag; forespørgsler passerer ikke igennem det
  • Stiplet · konfiguration eller skalering; ikke en datavej
  • Lang streg-prik · logs og sporing af kørsler
  • Kraftig sort linje · det valgte flow; tal angiver rækkefølgen
  • Boks · en fysisk node, værtsnavn i overskriften
  • Indre chip · en workload, der kører på noden
  • Stiplet ramme · en planlægningspulje med to noder
  • Stiplet boks · uden for klyngen, tælles ikke som node
  • Orange kontur · hvor en model træffer beslutninger
  • Control plane1 node
  • Domain API8 noder
  • AI-pulje2 noder
  • storage-pulje2 noder
  • Data5 noder
  • Platform6 noder

README's fem lag (båndene) og de fysiske grupper (farven i hver nodes overskrift) grupperer de samme 24 noder forskelligt. State KV deler Streams-noden og tælles ikke separat; Route 53, ALB'en og tjenester uden for klyngen er ikke noder. En pulje er et planlægningsområde, ikke en påstand om, at hver pod kører på begge noder.

Opsætning med 24 noder · ud fra nodelisten i dashboardet fra 21. januar 2026

24noder

24 = 1 control plane + 8 API + 4 worker + 5 data + 6 platform

  1. 1Control plane

    role: control-plane

    kube-apiserver · scheduler · controller-manager · etcd samt platformens controllere.

    1. k8s-master
  2. 8Domain API

    domain: <tjeneste>

    Én node pr. domæne. Interne kald bruger gRPC.

    1. k8s-api-auth
    2. k8s-api-users
    3. k8s-api-scan
    4. k8s-api-character
    5. k8s-api-location
    6. k8s-api-image
    7. k8s-api-chat
    8. k8s-api-info
  3. 4Execution worker

    To planlægningspuljer med to noder hver. KEDA ændrer antallet af pods; antallet af noder forbliver det samme.

    storage-puljedomain: worker-storage
    1. k8s-worker-storage
    2. k8s-worker-storage-2
    AI-puljedomain: worker-ai
    1. k8s-worker-ai
    2. k8s-worker-ai-2
  4. 5Data

    Redis er fordelt på fire noder efter formål. PostgreSQL-lageret er EBS CSI · gp3.

    1. k8s-postgresql
    2. k8s-redis-auth
    3. k8s-redis-streams
    4. k8s-redis-cache
    5. k8s-redis-pubsub
  5. 6Platform

    Beskeder, observerbarhed, ingress og levering i realtid har hver deres node.

    1. k8s-rabbitmq
    2. k8s-monitoring
    3. k8s-logging
    4. k8s-ingress-gateway
    5. k8s-sse-gateway
    6. k8s-event-router
Alle noder
  • Fluent Bit · DaemonSet
  • Calico

Konfigurerede modeller · efter udbyder

Tjenesten er lukket, så det er de modeller, der er konfigureret i repositoryet, ikke valg, der findes i dag. Hver rolle står for sig; det er ikke en liste over verificerede kørsler.

  • OpenAI

    Standardudbyder for Chat

    Chat

    • openai/gpt-5.2standard

    Standardmodellen er gpt-5.2; en model angivet i forespørgslen bruges i stedet.

    Scan

    • gpt-5.2standard
    • gpt-5.2-pro
    • gpt-5.1
    • gpt-5
    • gpt-5-pro
    • gpt-5-mini

    Modeller uden for mappingen med 13 modeller afvises.

    Billedmapping

    • gpt-image-1.5

    Adskilt fra gpt-5.2, som er orkestreringsmodellen for Responses. Billedgenerering er som standard slået fra.

    Evaluering

    • gpt-4o-ministandard

    LLM-graderen til evaluering af samtaler, adskilt fra Chat-modellen.

  • Google

    Når Chat vælger Google

    Chat

    • google/gemini-3-pro-preview
    • google/gemini-3-flash-preview

    Når Google er valgt, er gemini-3-flash-preview standard.

    Scan

    • gemini-3-pro-preview
    • gemini-3-flash-preview
    • gemini-2.5-pro
    • gemini-2.5-flash
    • gemini-2.5-flash-lite
    • gemini-2.0-flash
    • gemini-2.0-flash-lite

    Billedmapping

    • gemini-3-pro-image-preview