Le personnage-globe d’Eco², retravaillé pour ce portfolio à partir du dernier personnage principal officiel : un globe bleu ciel aux terres vertes, une pousse sur le dessus et un visage souriant brun
Retour à la salle

Eco²

Backend · Cloud infrastructure

Le tri des déchets, à partir d’une photo et d’une conversation.

Un assistant IA tout-en-un qui comprend le fonctionnement du tri des déchets en Corée.

2025.10.31 — 2026.02.10

Projet d’équipe · socle d’infrastructure et de déploiement → backend métier → traitement asynchrone, agent conversationnel, vérification

2025 새싹 해커톤 (hackathon Saessak)Prix d’excellence · 2025.12.02

  • Application webService fermé

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

Comment les 24 nœuds se relient réellement, un flux à la fois.

Kubernetes autogéré, construit avec kubeadm. La carte place les 24 nœuds physiques et leurs workloads dans les cinq couches du README et les relie par leurs connexions réelles. Choisir un flux ne met en évidence que ce chemin, avec des étapes numérotées.

Il identifie un déchet sur une photo et explique comment s’en défaire, et en conversation il appelle des outils de lieux, de météo, de prix du recyclage et de recherche web, et génère des images. Dans ce projet d’équipe, j’ai commencé par le cluster et le socle de déploiement, puis élargi mon périmètre au backend métier, au traitement asynchrone, à l’agent conversationnel et à la vérification.

Du développement pour la compétition au renforcement du backend et de l’exploitation

Le service a cessé de fonctionner ; une démo enregistrée et le rapport technique le montrent à l'œuvre.

Carte des connexions du cluster · redessinée d’après les manifests et le code au commit a072127
Carte des connexions du cluster Eco² · 24 nœudsUne carte des 24 nœuds physiques dans les cinq bandes de couches du README. Le navigateur ne fait que résoudre le nom dans Route 53 ; après la terminaison TLS à l’ALB sur le 443, l’Envoy d’ingress Istio sur un NodePort transmet la requête à une API métier. L’API Scan met le travail en file sur RabbitMQ et renvoie aussitôt un job_id ; scan-worker, dans le pool IA, ajoute par XADD les événements de progression à Redis Streams. L’Event Router les lit, met à jour State KV et publie sur Pub/Sub, et le SSE Gateway les envoie au navigateur. checkpoint-syncer stocke les checkpoints de Chat et le persistence consumer du nœud Chat stocke les messages dans PostgreSQL. La Platform Layer n’est pas un chemin de requête ; elle configure, met à l’échelle et observe.NavigateurHTTPS · SSEAWS ALB443 · fin du TLSRoute 53DNSGitHub Actions · Docker Hubimage · révision des manifestsLLM APIOpenAI · GoogleLangSmithtraçage des exécutions LLMFluent BitDaemonSet · chaque nœudk8s-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-memoryCluster Kubernetes24 nœuds · kubeadmEdge Layer1 nœudService Layer8 nœuds · sidecar EnvoyIntegration Layer7 nœudsPersistence Layer5 nœudsPlatform Layer3 nœuds · configurer · mettre à l’échelle · observerGéré par AWSPool IAdomain: worker-aipool de stockagedomain: worker-storageAucun nœud fixé1Résolution DNS2 HTTPS 443 · Navigateur → AWS ALB23HTTP · NodePort4VirtualService5Tâche Celery6 consume · RabbitMQ → scan-worker67 HTTPS · Pool IA → LLM API78XADD scan:events9XREADGROUP10SETEX state11PUBLISH12SUBSCRIBE13Flux SSE14Reprise à la reconnexion1 HTTPS 443 · Navigateur → AWS ALB12HTTP · NodePort3VirtualService4Tâche Taskiq5 consume · RabbitMQ → chat-worker56 HTTPS · Pool IA → LLM API67XADD chat:events8XREADGROUP9PUBLISH10SUBSCRIBE11Flux SSE12checkpoint13lire le checkpoint14synchroniser vers PostgreSQL15chat-persistence group16enregistrer les messages1Résolution DNS2 HTTPS 443 · Navigateur → AWS ALB23HTTP · NodePort4ext-authz · gRPC 500515consultation de la blacklist6VirtualService7gRPC8gRPC1outbox:blacklist2blacklist.events3 blacklist.events · RabbitMQ → auth-worker34stocker la blacklist5 Celery batch · RabbitMQ → users-worker56UPSERT1image · révision des manifests2Ingress → ALB · enregistrements DNS3Configuration xDS4nombre de pods5 nombre de pods · KEDA → pool de stockage56journaux7 traçage des exécutions LLM · Pool IA → LangSmith7

Requête Scan → livraison en direct

Une demande d’analyse de photo devient un travail en file, et ses événements de progression reviennent au même navigateur.

  1. Navigateurrésolution DNS: Résolution DNSRoute 53

    Seul le nom est résolu à partir des enregistrements Route 53. Les requêtes ne passent pas par le DNS.

  2. Navigateurflux de données: HTTPS 443AWS ALB

    Le TLS se termine à l’ALB.

  3. AWS ALBflux de données: HTTP · NodePortIstio ingress Envoyk8s-ingress-gateway

    Transmis à l’Envoy d’ingress Istio via le NodePort de la cible d’instance EC2.

  4. Istio ingress Envoyk8s-ingress-gatewayflux de données: VirtualServiceScan APIk8s-api-scan

    Routé vers l’API Scan, qui met le travail en file et renvoie aussitôt un job_id ; l’interrogation du résultat répond 202 tant que le job n’est pas terminé.

  5. Scan APIk8s-api-scanflux de données: Tâche CeleryRabbitMQk8s-rabbitmq

    La tâche Scan part sur RabbitMQ.

  6. RabbitMQk8s-rabbitmqflux de données: consumescan-workerk8s-worker-ai · k8s-worker-ai-2

    scan-worker (Celery · gevent), dans le pool IA, la prend et exécute Vision → Rule → Answer → Reward. Les quatre étapes sont des tâches Celery chaînées, pas des nœuds.

  7. Pool IAk8s-worker-ai · k8s-worker-ai-2flux de données: HTTPSLLM API

    Les workers scan et chat appellent les API OpenAI et Google.

  8. scan-workerk8s-worker-ai · k8s-worker-ai-2flux de données: XADD scan:eventsStreamsk8s-redis-streams

    Les événements de progression sont écrits dans l’un des quatre shards Streams.

  9. Streamsk8s-redis-streamsflux de données: XREADGROUPEvent Routerk8s-event-router

    L’Event Router les lit en tant que consumer group et fait un XACK après traitement ; pending et reclaim maintiennent une livraison at-least-once.

  10. Event Routerk8s-event-routerflux de données: SETEX stateState KVk8s-redis-streams

    Il écrit le dernier état et un marqueur de traitement en double dans State KV, sur le même nœud Redis.

  11. Event Routerk8s-event-routerflux de données: PUBLISHPub/Subk8s-redis-pubsub

    Livré en temps réel sur le canal du job, dans le Pub/Sub de shard.

  12. Pub/Subk8s-redis-pubsubflux de données: SUBSCRIBESSE Gatewayk8s-sse-gateway

    Le SSE Gateway s’abonne via un seul listener partagé par processus et diffuse vers chaque navigateur connecté.

  13. SSE Gatewayk8s-sse-gatewayflux de données: Flux SSENavigateur

    Une connexion ouverte par le même chemin ALB et ingress. La livraison est at-least-once ; les doublons sont traités de manière idempotente.

  14. State KVk8s-redis-streamsflux de données: Reprise à la reconnexionSSE Gatewayk8s-sse-gateway

    À la reconnexion avec Last-Event-ID, State KV et les Streams conservés comblent les événements manqués.

Chat · tokens et stockage

Les tokens de Chat suivent le même chemin d’événements que Scan ; checkpoints et messages sont stockés par deux workloads différents.

  1. Navigateurflux de données: HTTPS 443AWS ALB

    Le TLS se termine à l’ALB.

  2. AWS ALBflux de données: HTTP · NodePortIstio ingress Envoyk8s-ingress-gateway

    Transmis à l’Envoy d’ingress Istio via le NodePort de la cible d’instance EC2.

  3. Istio ingress Envoyk8s-ingress-gatewayflux de données: VirtualServiceChat APIk8s-api-chat

    Routé vers l’API Chat.

  4. Chat APIk8s-api-chatflux de données: Tâche TaskiqRabbitMQk8s-rabbitmq

    La tâche Chat part sur RabbitMQ.

  5. RabbitMQk8s-rabbitmqflux de données: consumechat-workerk8s-worker-ai · k8s-worker-ai-2

    chat-worker (Taskiq · asyncio) classe l’intention avec LangGraph, puis exécute la vision si nécessaire, les outils sélectionnés, l’agrégateur et un résumé si nécessaire, et répond. Chaque requête n’exécute que les branches dont elle a besoin.

  6. Pool IAk8s-worker-ai · k8s-worker-ai-2flux de données: HTTPSLLM API

    Les workers scan et chat appellent les API OpenAI et Google.

  7. chat-workerk8s-worker-ai · k8s-worker-ai-2flux de données: XADD chat:eventsStreamsk8s-redis-streams

    Tokens et événements d’étape sont écrits dans quatre shards Streams ; de là, le chemin de livraison est le même que pour Scan.

  8. Streamsk8s-redis-streamsflux de données: XREADGROUPEvent Routerk8s-event-router

    L’Event Router les lit en tant que consumer group et fait un XACK après traitement ; pending et reclaim maintiennent une livraison at-least-once.

  9. Event Routerk8s-event-routerflux de données: PUBLISHPub/Subk8s-redis-pubsub

    Livré en temps réel sur le canal du job, dans le Pub/Sub de shard.

  10. Pub/Subk8s-redis-pubsubflux de données: SUBSCRIBESSE Gatewayk8s-sse-gateway

    Le SSE Gateway s’abonne via un seul listener partagé par processus et diffuse vers chaque navigateur connecté.

  11. SSE Gatewayk8s-sse-gatewayflux de données: Flux SSENavigateur

    Une connexion ouverte par le même chemin ALB et ingress. La livraison est at-least-once ; les doublons sont traités de manière idempotente.

  12. chat-workerk8s-worker-ai · k8s-worker-ai-2flux de données: checkpointCachek8s-redis-cache

    Le checkpoint LangGraph est conservé dans Redis Cache.

  13. Cachek8s-redis-cacheflux de données: lire le checkpointcheckpoint-syncerk8s-worker-ai · k8s-worker-ai-2

    checkpoint-syncer lit le checkpoint depuis Redis.

  14. checkpoint-syncerk8s-worker-ai · k8s-worker-ai-2flux de données: synchroniser vers PostgreSQLPostgreSQLk8s-postgresql

    AsyncPostgresSaver le stocke dans PostgreSQL de façon asynchrone.

  15. Streamsk8s-redis-streamsflux de données: chat-persistence grouppersistence consumerk8s-api-chat

    Le persistence consumer du nœud Chat lit les événements done en tant que consumer group.

  16. persistence consumerk8s-api-chatflux de données: enregistrer les messagesPostgreSQLk8s-postgresql

    Les messages de Chat sont enregistrés dans PostgreSQL. C’est un workload différent de checkpoint-syncer.

Entrée · authentification

Le chemin synchrone de l’entrée du cluster jusqu’à une API de domaine. Seuls les chemins protégés par une politique contrôlent d’abord l’authentification ; le trafic des pods entre nœuds passe par Calico VXLAN.

  1. Navigateurrésolution DNS: Résolution DNSRoute 53

    Seul le nom est résolu à partir des enregistrements Route 53. Les requêtes ne passent pas par le DNS.

  2. Navigateurflux de données: HTTPS 443AWS ALB

    Le TLS se termine à l’ALB.

  3. AWS ALBflux de données: HTTP · NodePortIstio ingress Envoyk8s-ingress-gateway

    Transmis à l’Envoy d’ingress Istio via le NodePort de la cible d’instance EC2.

  4. Istio ingress Envoyk8s-ingress-gatewayflux de données: ext-authz · gRPC 50051ext-authzk8s-api-auth

    Seuls les chemins soumis à une politique CUSTOM interrogent d’abord l’ext-authz Go (délai de 2 s, failOpen false). Les chemins comme login, health et docs sont exclus.

  5. ext-authzk8s-api-authflux de données: consultation de la blacklistblacklistk8s-redis-auth

    Le token est vérifié contre la blacklist Redis.

  6. Istio ingress Envoyk8s-ingress-gatewayflux de données: VirtualServiceChat APIk8s-api-chat

    Routé vers l’API Chat.

  7. Chat APIk8s-api-chatflux de données: gRPCimages APIk8s-api-image

    L’appel synchrone chat → images cité dans le README.

  8. auth APIk8s-api-authflux de données: gRPCusers APIk8s-api-users

    L’appel synchrone auth → users cité dans le README.

Pool de stockage · écritures asynchrones

La blacklist d’authentification et la propriété des personnages sont stockées par les workers du pool de stockage, qui reçoivent leur travail de RabbitMQ.

  1. blacklistk8s-redis-authflux de données: outbox:blacklistauth-relayk8s-worker-storage · k8s-worker-storage-2

    auth-relay (l’auth-Bus du README) lit l’outbox Redis.

  2. auth-relayk8s-worker-storage · k8s-worker-storage-2flux de données: blacklist.eventsRabbitMQk8s-rabbitmq

    Il republie sur RabbitMQ, avec nouvelles tentatives et DLQ.

  3. RabbitMQk8s-rabbitmqflux de données: blacklist.eventsauth-workerk8s-worker-storage · k8s-worker-storage-2

    auth-worker reçoit les événements de blacklist.

  4. auth-workerk8s-worker-storage · k8s-worker-storage-2flux de données: stocker la blacklistblacklistk8s-redis-auth

    Ils sont stockés dans la blacklist Redis.

  5. RabbitMQk8s-rabbitmqflux de données: Celery batchusers-workerk8s-worker-storage · k8s-worker-storage-2

    users-worker reçoit par lots les travaux de propriété des personnages.

  6. users-workerk8s-worker-storage · k8s-worker-storage-2flux de données: UPSERTPostgreSQLk8s-postgresql

    Ils sont appliqués à PostgreSQL.

Configurer · mettre à l’échelle · observer

La Platform Layer n’est pas une étape traversée par les requêtes ; elle déploie, configure, met à l’échelle et observe les autres couches. Les nœuds sont des instances EC2 créées avec Terraform, sur lesquelles Ansible a installé kubeadm et Calico ; la CI ne fait que valider le Terraform et ne l’applique jamais automatiquement.

  1. GitHub Actions · Docker Hubconfiguration · mise à l’échelle: image · révision des manifestsArgo CD image updaterk8s-master

    Argo CD aligne la configuration du cluster via App-of-Apps et Sync Waves. Seul le placement sur le control plane de l’image updater a été confirmé.

  2. ALB Controller · ExternalDNSk8s-masterconfiguration · mise à l’échelle: Ingress → ALB · enregistrements DNSGéré par AWS

    L’ALB Controller et ExternalDNS configurent les ressources côté AWS. Ce n’est pas un chemin emprunté par les requêtes.

  3. Istiodk8s-masterconfiguration · mise à l’échelle: Configuration xDSIstio ingress Envoyk8s-ingress-gateway

    Istiod pousse la configuration Gateway, VirtualService et EnvoyFilter via xDS vers l’Envoy d’ingress et le sidecar Envoy de chaque API.

  4. KEDAk8s-monitoringconfiguration · mise à l’échelle: nombre de podsPool IAk8s-worker-ai · k8s-worker-ai-2

    KEDA ajuste le nombre de pods des workers. Le nombre de nœuds ne change pas.

  5. KEDAk8s-monitoringconfiguration · mise à l’échelle: nombre de podspool de stockagek8s-worker-storage · k8s-worker-storage-2

    Les pods des workers du pool de stockage sont mis à l’échelle de la même façon.

  6. Fluent Bitobservabilité: journauxElasticsearchk8s-logging

    Fluent Bit est un DaemonSet présent sur chaque nœud et envoie les journaux à Elasticsearch.

  7. Pool IAk8s-worker-ai · k8s-worker-ai-2observabilité: traçage des exécutions LLMLangSmith

    Les traces des appels LLM vont vers LangSmith, un SaaS externe.

Toutes les connexions avec la même épaisseur. Choisissez un flux pour ne mettre en évidence que son chemin, avec des étapes numérotées.

  • Trait plein · sens dans lequel circulent requêtes, travail, événements et écritures
  • Pointillés · résolution DNS ; les requêtes n’y transitent pas
  • Tirets · configuration ou mise à l’échelle ; pas un chemin de données
  • Trait-point long · journaux et traçage des exécutions
  • Trait noir épais · le flux sélectionné ; les numéros donnent l’ordre
  • Cadre · un nœud physique, nom d’hôte dans l’en-tête
  • Pastille intérieure · une charge de travail qui tourne sur ce nœud
  • Cadre en tirets · un pool de planification à deux nœuds
  • Cadre en tirets · hors du cluster, non compté comme nœud
  • Contour orange · là où un modèle décide
  • Control plane1 nœud
  • Domain API8 nœuds
  • Pool IA2 nœuds
  • pool de stockage2 nœuds
  • Data5 nœuds
  • Platform6 nœuds

Les cinq couches du README (les bandes) et les groupes physiques (la teinte de l’en-tête de chaque nœud) regroupent différemment les mêmes 24 nœuds. State KV partage le nœud Streams et n’est pas compté à part ; Route 53, l’ALB et les services hors cluster ne sont pas des nœuds. Un pool est une plage de scheduling, pas l’affirmation que chaque pod tourne sur les deux nœuds.

Disposition des 24 nœuds · d’après la liste de nœuds du tableau de bord du January 21, 2026

24nœuds

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

  1. 1Control plane

    role: control-plane

    kube-apiserver · scheduler · controller-manager · etcd, plus les contrôleurs de la plateforme.

    1. k8s-master
  2. 8Domain API

    domain: <service>

    Un nœud par domaine. Les appels internes utilisent 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

    Deux pools de scheduling de deux nœuds chacun. KEDA modifie le nombre de pods ; le nombre de nœuds reste le même.

    pool de stockagedomain: worker-storage
    1. k8s-worker-storage
    2. k8s-worker-storage-2
    Pool IAdomain: worker-ai
    1. k8s-worker-ai
    2. k8s-worker-ai-2
  4. 5Data

    Redis est réparti sur quatre nœuds dédiés par usage. Le stockage de PostgreSQL est en EBS CSI · gp3.

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

    Messagerie, observabilité, ingress et livraison temps réel ont chacun leur propre nœud.

    1. k8s-rabbitmq
    2. k8s-monitoring
    3. k8s-logging
    4. k8s-ingress-gateway
    5. k8s-sse-gateway
    6. k8s-event-router
Chaque nœud
  • Fluent Bit · DaemonSet
  • Calico

Modèles configurés · par fournisseur

Le service a été fermé : il s’agit des modèles configurés dans le dépôt, pas de choix disponibles aujourd’hui. Chaque rôle est listé séparément ; ce n’est pas une liste d’exécutions vérifiées.

  • OpenAI

    Fournisseur par défaut de Chat

    Chat

    • openai/gpt-5.2par défaut

    Le modèle par défaut est gpt-5.2 ; un modèle indiqué dans la requête est utilisé à la place.

    Scan

    • gpt-5.2par défaut
    • gpt-5.2-pro
    • gpt-5.1
    • gpt-5
    • gpt-5-pro
    • gpt-5-mini

    Les modèles hors de la correspondance de 13 modèles sont rejetés.

    Correspondance d’images

    • gpt-image-1.5

    Distinct de gpt-5.2, le modèle d’orchestration Responses. La génération d’images est désactivée par défaut.

    Évaluation

    • gpt-4o-minipar défaut

    Le correcteur LLM de l’évaluation des conversations, distinct du modèle Chat.

  • Google

    Quand Chat choisit Google

    Chat

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

    Avec Google sélectionné, gemini-3-flash-preview est le modèle par défaut.

    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

    Correspondance d’images

    • gemini-3-pro-image-preview