Globfiguren från Eco², bearbetad för den här portfolion utifrån den senaste officiella huvudfiguren: en himmelsblå jordglob med gröna landområden, en grodd på toppen och ett brunt leende ansikte
Tillbaka till salen

Eco²

Backend · Cloud infrastructure

Vägledning för källsortering utifrån ett foto och ett samtal.

En allt-i-ett-AI-assistent som förstår hur källsortering fungerar i Korea.

2025.10.31 — 2026.02.10

Teamprojekt · grund för infrastruktur och driftsättning → domänbackend → asynkron bearbetning, konversationsagent, verifiering

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

  • WebbappDriften avslutad

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

Hur de 24 noderna faktiskt hänger ihop, ett flöde i taget.

Självförvaltad Kubernetes byggd med kubeadm. Kartan placerar de 24 fysiska noderna och arbetslasterna på dem inom README:s fem lager och ritar de faktiska förbindelserna mellan dem. När ett flöde väljs markeras bara den vägen, med numrerade steg.

Den identifierar avfall utifrån ett foto och förklarar hur det ska sorteras, och i samtalet anropar den verktyg för platser, väder, återvinningspriser och webbsökning och genererar bilder. I det här teamprojektet började jag med grunden för kluster och driftsättning och breddade mitt ansvar till domänbackend, asynkron bearbetning, konversationsagenten och verifiering.

Från utvecklingen under tävlingen till förstärkning av backend och drift

Tjänsten har avslutats; en inspelad demo och den tekniska rapporten visar den i drift.

Klustrets förbindelsekarta · omritad utifrån manifest och kod vid commit a072127
Förbindelsekarta för Eco²-klustret · 24 noderEn karta över de 24 fysiska noderna inom README:s fem lagerband. Webbläsaren slår bara upp namnet i Route 53; efter att TLS avslutas vid ALB:n på 443 skickar Istio ingress Envoy på en NodePort förfrågan till ett domän-API. Scan API köar arbetet i RabbitMQ och returnerar genast ett job_id; scan-worker i AI-poolen skriver förloppshändelser till Redis Streams med XADD. Event Router läser dem, uppdaterar State KV och publicerar till Pub/Sub, och SSE Gateway skickar dem till webbläsaren. checkpoint-syncer sparar Chat-checkpoints och persistence consumer på Chat-noden sparar meddelanden i PostgreSQL. Platform Layer är ingen förfrågningsväg; det konfigurerar, skalar och observerar.WebbläsareHTTPS · SSEAWS ALB443 · TLS avslutas härRoute 53DNSGitHub Actions · Docker Hubimage · manifestrevisionLLM APIOpenAI · GoogleLangSmithspårning av LLM-körningarFluent BitDaemonSet · alla 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-kluster24 noder · kubeadmEdge Layer1 nodService Layer8 noder · Envoy-sidecarIntegration Layer7 noderPersistence Layer5 noderPlatform Layer3 noder · konfigurera · skala · observeraAWS-hanteratAI-pooldomain: worker-aistorage-pooldomain: worker-storageIngen fastlåst nod1DNS-uppslag2 HTTPS 443 · Webbläsare → AWS ALB23HTTP · NodePort4VirtualService5Celery-uppgift6 consume · RabbitMQ → scan-worker67 HTTPS · AI-pool → LLM API78XADD scan:events9XREADGROUP10SETEX state11PUBLISH12SUBSCRIBE13SSE-stream14Återställning vid återanslutning1 HTTPS 443 · Webbläsare → AWS ALB12HTTP · NodePort3VirtualService4Taskiq-uppgift5 consume · RabbitMQ → chat-worker56 HTTPS · AI-pool → LLM API67XADD chat:events8XREADGROUP9PUBLISH10SUBSCRIBE11SSE-stream12checkpoint13läs checkpoint14synka till PostgreSQL15chat-persistence group16spara meddelanden1DNS-uppslag2 HTTPS 443 · Webbläsare → AWS ALB23HTTP · NodePort4ext-authz · gRPC 500515blacklist-uppslag6VirtualService7gRPC8gRPC1outbox:blacklist2blacklist.events3 blacklist.events · RabbitMQ → auth-worker34spara blacklist5 Celery batch · RabbitMQ → users-worker56UPSERT1image · manifestrevision2Ingress → ALB · DNS-poster3xDS-konfiguration4antal pods5 antal pods · KEDA → storage-pool56loggar7 spårning av LLM-körningar · AI-pool → LangSmith7

Scan-förfrågan → leverans i realtid

En förfrågan om fotoanalys blir köat arbete, och dess förloppshändelser kommer tillbaka till samma webbläsare.

  1. WebbläsareDNS-uppslag: DNS-uppslagRoute 53

    Bara namnet slås upp i Route 53-poster. Förfrågningar passerar inte genom DNS.

  2. Webbläsaredataflöde: HTTPS 443AWS ALB

    TLS avslutas vid ALB:n.

  3. AWS ALBdataflöde: HTTP · NodePortIstio ingress Envoyk8s-ingress-gateway

    Lämnas till Istio ingress Envoy via EC2-instansmålets NodePort.

  4. Istio ingress Envoyk8s-ingress-gatewaydataflöde: VirtualServiceScan APIk8s-api-scan

    Routas till Scan API, som köar arbetet och genast returnerar ett job_id; en pollning efter resultatet besvaras med 202 tills jobbet är klart.

  5. Scan APIk8s-api-scandataflöde: Celery-uppgiftRabbitMQk8s-rabbitmq

    Scan-uppgiften läggs på RabbitMQ.

  6. RabbitMQk8s-rabbitmqdataflöde: consumescan-workerk8s-worker-ai · k8s-worker-ai-2

    scan-worker (Celery · gevent) i AI-poolen tar den och kör Vision → Rule → Answer → Reward. De fyra stadierna är kedjade Celery-tasks, inte noder.

  7. AI-poolk8s-worker-ai · k8s-worker-ai-2dataflöde: HTTPSLLM API

    Scan- och chat-workerna anropar OpenAI:s och Googles API:er.

  8. scan-workerk8s-worker-ai · k8s-worker-ai-2dataflöde: XADD scan:eventsStreamsk8s-redis-streams

    Förloppshändelser skrivs till en av fyra Streams-shards.

  9. Streamsk8s-redis-streamsdataflöde: XREADGROUPEvent Routerk8s-event-router

    Event Router läser dem som consumer group och gör XACK efter bearbetningen; pending och reclaim håller leveransen at-least-once.

  10. Event Routerk8s-event-routerdataflöde: SETEX stateState KVk8s-redis-streams

    Den skriver det senaste tillståndet och en markering mot dubbelbearbetning till State KV på samma Redis-nod.

  11. Event Routerk8s-event-routerdataflöde: PUBLISHPub/Subk8s-redis-pubsub

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

  12. Pub/Subk8s-redis-pubsubdataflöde: SUBSCRIBESSE Gatewayk8s-sse-gateway

    SSE Gateway prenumererar via en delad listener per process och fördelar till varje ansluten webbläsare.

  13. SSE Gatewayk8s-sse-gatewaydataflöde: SSE-streamWebbläsare

    En anslutning öppnad över samma ALB- och ingress-väg. Leveransen är at-least-once; dubbletter hanteras idempotent.

  14. State KVk8s-redis-streamsdataflöde: Återställning vid återanslutningSSE Gatewayk8s-sse-gateway

    Vid återanslutning med Last-Event-ID fyller State KV och de bevarade Streams i missade händelser.

Chat · tokens och lagring

Chat-tokens tar samma händelseväg som Scan; checkpoints och meddelanden sparas av två olika arbetslaster.

  1. Webbläsaredataflöde: HTTPS 443AWS ALB

    TLS avslutas vid ALB:n.

  2. AWS ALBdataflöde: HTTP · NodePortIstio ingress Envoyk8s-ingress-gateway

    Lämnas till Istio ingress Envoy via EC2-instansmålets NodePort.

  3. Istio ingress Envoyk8s-ingress-gatewaydataflöde: VirtualServiceChat APIk8s-api-chat

    Routas till Chat API.

  4. Chat APIk8s-api-chatdataflöde: Taskiq-uppgiftRabbitMQk8s-rabbitmq

    Chat-uppgiften läggs på RabbitMQ.

  5. RabbitMQk8s-rabbitmqdataflöde: consumechat-workerk8s-worker-ai · k8s-worker-ai-2

    chat-worker (Taskiq · asyncio) klassificerar avsikten med LangGraph, kör sedan vision vid behov, de valda verktygen, aggregatorn och en sammanfattning vid behov och svarar. Varje förfrågan kör bara de grenar den behöver.

  6. AI-poolk8s-worker-ai · k8s-worker-ai-2dataflöde: HTTPSLLM API

    Scan- och chat-workerna anropar OpenAI:s och Googles API:er.

  7. chat-workerk8s-worker-ai · k8s-worker-ai-2dataflöde: XADD chat:eventsStreamsk8s-redis-streams

    Tokens och stage-händelser skrivs till fyra Streams-shards; därifrån är leveransvägen densamma som för Scan.

  8. Streamsk8s-redis-streamsdataflöde: XREADGROUPEvent Routerk8s-event-router

    Event Router läser dem som consumer group och gör XACK efter bearbetningen; pending och reclaim håller leveransen at-least-once.

  9. Event Routerk8s-event-routerdataflöde: PUBLISHPub/Subk8s-redis-pubsub

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

  10. Pub/Subk8s-redis-pubsubdataflöde: SUBSCRIBESSE Gatewayk8s-sse-gateway

    SSE Gateway prenumererar via en delad listener per process och fördelar till varje ansluten webbläsare.

  11. SSE Gatewayk8s-sse-gatewaydataflöde: SSE-streamWebbläsare

    En anslutning öppnad över samma ALB- och ingress-väg. Leveransen är at-least-once; dubbletter hanteras idempotent.

  12. chat-workerk8s-worker-ai · k8s-worker-ai-2dataflöde: checkpointCachek8s-redis-cache

    LangGraph-checkpointen hålls i Redis Cache.

  13. Cachek8s-redis-cachedataflöde: läs checkpointcheckpoint-syncerk8s-worker-ai · k8s-worker-ai-2

    checkpoint-syncer läser checkpointen från Redis.

  14. checkpoint-syncerk8s-worker-ai · k8s-worker-ai-2dataflöde: synka till PostgreSQLPostgreSQLk8s-postgresql

    AsyncPostgresSaver sparar den asynkront i PostgreSQL.

  15. Streamsk8s-redis-streamsdataflöde: chat-persistence grouppersistence consumerk8s-api-chat

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

  16. persistence consumerk8s-api-chatdataflöde: spara meddelandenPostgreSQLk8s-postgresql

    Chattmeddelanden sparas i PostgreSQL. Det är en annan arbetslast än checkpoint-syncer.

Ingång · autentisering

Den synkrona vägen från klustrets ingång till ett domän-API. Bara policyskyddade vägar kontrollerar autentisering först; podtrafik mellan noder går över Calico VXLAN.

  1. WebbläsareDNS-uppslag: DNS-uppslagRoute 53

    Bara namnet slås upp i Route 53-poster. Förfrågningar passerar inte genom DNS.

  2. Webbläsaredataflöde: HTTPS 443AWS ALB

    TLS avslutas vid ALB:n.

  3. AWS ALBdataflöde: HTTP · NodePortIstio ingress Envoyk8s-ingress-gateway

    Lämnas till Istio ingress Envoy via EC2-instansmålets NodePort.

  4. Istio ingress Envoyk8s-ingress-gatewaydataflöde: ext-authz · gRPC 50051ext-authzk8s-api-auth

    Bara vägar under en CUSTOM-policy frågar först Go ext-authz (timeout 2 s, failOpen false). Vägar som login, health och docs är undantagna.

  5. ext-authzk8s-api-authdataflöde: blacklist-uppslagblacklistk8s-redis-auth

    Token kontrolleras mot Redis-blacklistan.

  6. Istio ingress Envoyk8s-ingress-gatewaydataflöde: VirtualServiceChat APIk8s-api-chat

    Routas till Chat API.

  7. Chat APIk8s-api-chatdataflöde: gRPCimages APIk8s-api-image

    Det synkrona anropet chat → images som nämns i README.

  8. auth APIk8s-api-authdataflöde: gRPCusers APIk8s-api-users

    Det synkrona anropet auth → users som nämns i README.

Storage-pool · asynkrona skrivningar

Blacklistan för autentisering och ägarskap av figurer sparas av workers i storage-poolen, som hämtar sitt arbete från RabbitMQ.

  1. blacklistk8s-redis-authdataflöde: 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-2dataflöde: blacklist.eventsRabbitMQk8s-rabbitmq

    Den publicerar om till RabbitMQ, med omförsök och en DLQ.

  3. RabbitMQk8s-rabbitmqdataflöde: blacklist.eventsauth-workerk8s-worker-storage · k8s-worker-storage-2

    auth-worker tar emot blacklist-händelserna.

  4. auth-workerk8s-worker-storage · k8s-worker-storage-2dataflöde: spara blacklistblacklistk8s-redis-auth

    De sparas i Redis-blacklistan.

  5. RabbitMQk8s-rabbitmqdataflöde: Celery batchusers-workerk8s-worker-storage · k8s-worker-storage-2

    users-worker tar emot arbete om ägarskap av figurer i batchar.

  6. users-workerk8s-worker-storage · k8s-worker-storage-2dataflöde: UPSERTPostgreSQLk8s-postgresql

    Det skrivs till PostgreSQL.

Konfigurera · skala · observera

Platform Layer är inget steg som förfrågningar passerar; det driftsätter, konfigurerar, skalar och observerar de andra lagren. Noderna är EC2-instanser skapade med Terraform, med kubeadm och Calico installerade av Ansible; CI validerar bara Terraform och kör aldrig apply automatiskt.

  1. GitHub Actions · Docker Hubkonfiguration · skalning: image · manifestrevisionArgo CD image updaterk8s-master

    Argo CD synkroniserar klustrets konfiguration via App-of-Apps och Sync Waves. Bara image updaterns placering på control plane bekräftades.

  2. ALB Controller · ExternalDNSk8s-masterkonfiguration · skalning: Ingress → ALB · DNS-posterAWS-hanterat

    ALB Controller och ExternalDNS konfigurerar resurser på AWS-sidan. Det är ingen väg som förfrågningar tar.

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

    Istiod skickar Gateway-, VirtualService- och EnvoyFilter-konfigurationen via xDS till ingress Envoy och till varje API:s Envoy-sidecar.

  4. KEDAk8s-monitoringkonfiguration · skalning: antal podsAI-poolk8s-worker-ai · k8s-worker-ai-2

    KEDA justerar antalet worker-pods. Antalet noder ändras inte.

  5. KEDAk8s-monitoringkonfiguration · skalning: antal podsstorage-poolk8s-worker-storage · k8s-worker-storage-2

    Worker-pods i storage-poolen skalas på samma sätt.

  6. Fluent Bitobserverbarhet: loggarElasticsearchk8s-logging

    Fluent Bit är ett DaemonSet på alla noder och skickar loggar till Elasticsearch.

  7. AI-poolk8s-worker-ai · k8s-worker-ai-2observerbarhet: spårning av LLM-körningarLangSmith

    Traces av LLM-anrop skickas till LangSmith, en extern SaaS.

Alla kopplingar med samma tjocklek. Välj ett flöde för att bara markera dess väg, med numrerade steg.

  • Heldragen · riktningen som förfrågningar, arbete, händelser och skrivningar flödar i
  • Prickad · DNS-uppslag; förfrågningar passerar inte genom det
  • Streckad · konfiguration eller skalning; inte en dataväg
  • Lång streck-punkt · loggar och spårning av körningar
  • Kraftig svart linje · det valda flödet; siffrorna anger ordningen
  • Ruta · en fysisk nod, värdnamn i rubriken
  • Inre chip · en arbetslast som körs på noden
  • Streckad ram · en schemaläggningspool med två noder
  • Streckad ruta · utanför klustret, räknas inte som nod
  • Orange kontur · där en modell fattar beslut
  • Control plane1 nod
  • Domain API8 noder
  • AI-pool2 noder
  • storage-pool2 noder
  • Data5 noder
  • Platform6 noder

README:s fem lager (banden) och de fysiska grupperna (färgen i varje nods rubrik) grupperar samma 24 noder olika. State KV delar Streams-noden och räknas inte separat; Route 53, ALB:n och tjänster utanför klustret är inte noder. En pool är ett schemaläggningsområde, inget påstående om att varje pod körs på båda noderna.

Uppsättning med 24 noder · utifrån nodlistan i instrumentpanelen från 21 januari 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 plattformens controllrar.

    1. k8s-master
  2. 8Domain API

    domain: <tjänst>

    En nod per domän. Interna anrop använder 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

    Två schemaläggningspooler med två noder vardera. KEDA ändrar antalet pods; antalet noder förblir detsamma.

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

    Redis är uppdelat på fyra noder efter användning. PostgreSQL-lagringen är EBS CSI · gp3.

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

    Meddelanden, observerbarhet, ingress och leverans i realtid har var sin nod.

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

Konfigurerade modeller · per leverantör

Tjänsten har lagts ned, så detta är de modeller som är konfigurerade i repositoryt, inte val som finns i dag. Varje roll anges separat; detta är ingen lista över verifierade körningar.

  • OpenAI

    Standardleverantör för Chat

    Chat

    • openai/gpt-5.2standard

    Standardmodellen är gpt-5.2; en modell som anges i förfrågan används i stället.

    Scan

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

    Modeller utanför mappningen med 13 modeller avvisas.

    Bildmappning

    • gpt-image-1.5

    Skild från gpt-5.2, som är orkestreringsmodellen för Responses. Bildgenerering är avstängd som standard.

    Utvärdering

    • gpt-4o-ministandard

    LLM-gradern för utvärdering av samtal, skild från Chat-modellen.

  • Google

    När Chat väljer Google

    Chat

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

    När Google är valt är 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

    Bildmappning

    • gemini-3-pro-image-preview