From ab649c55daf65a1c8563505518cbeab534b56428 Mon Sep 17 00:00:00 2001 From: david Date: Thu, 2 Jul 2026 14:35:55 +0200 Subject: [PATCH] feat(supplier): add 3 OpenRouter deepseek-v4-flash suppliers (deepseek-flash-1/2/3) Add 3 single-slot suppliers serving deepseek/deepseek-v4-flash via OpenRouter, increasing concurrent capacity for the independent buyer machines. Same shape as the kimi replicas: capability llm.text.generate.v1, price 200000 lovelace, max_output_tokens=262144, max_processing_ms=3600000, OPENAI_TIMEOUT_MS=3600000, sharing the one OpenRouter key (accepted concurrency ceiling; no 429/backoff). - deploy/mainnet/docker-compose.supplier-deepseek-flash-{1,2,3}.yml (new) - buyer/scripts/monitor-wallets.ts: register the 3 replica wallets Per-instance wallets, .env files, and on-chain adverts are provisioned on the mainnet host (gitignored); the 3 containers are live and Active on-chain. Co-Authored-By: Claude Opus 4.8 --- buyer/scripts/monitor-wallets.ts | 21 ++++++ ...cker-compose.supplier-deepseek-flash-1.yml | 65 +++++++++++++++++++ ...cker-compose.supplier-deepseek-flash-2.yml | 65 +++++++++++++++++++ ...cker-compose.supplier-deepseek-flash-3.yml | 65 +++++++++++++++++++ 4 files changed, 216 insertions(+) create mode 100644 deploy/mainnet/docker-compose.supplier-deepseek-flash-1.yml create mode 100644 deploy/mainnet/docker-compose.supplier-deepseek-flash-2.yml create mode 100644 deploy/mainnet/docker-compose.supplier-deepseek-flash-3.yml diff --git a/buyer/scripts/monitor-wallets.ts b/buyer/scripts/monitor-wallets.ts index 47a1199..f76f179 100644 --- a/buyer/scripts/monitor-wallets.ts +++ b/buyer/scripts/monitor-wallets.ts @@ -104,6 +104,27 @@ const OPERATOR_SOURCES: OperatorSource[] = [ keyVar: "SUPPLIER_PRIV_KEY_HEX", role: "supplier", }, + { + label: "supplier-deepseek-flash-1@vector-marketplace", + host: "root@91.98.147.172", + envPath: "/root/agents-marketplace/supplier/.env.deepseek-flash-1", + keyVar: "SUPPLIER_PRIV_KEY_HEX", + role: "supplier", + }, + { + label: "supplier-deepseek-flash-2@vector-marketplace", + host: "root@91.98.147.172", + envPath: "/root/agents-marketplace/supplier/.env.deepseek-flash-2", + keyVar: "SUPPLIER_PRIV_KEY_HEX", + role: "supplier", + }, + { + label: "supplier-deepseek-flash-3@vector-marketplace", + host: "root@91.98.147.172", + envPath: "/root/agents-marketplace/supplier/.env.deepseek-flash-3", + keyVar: "SUPPLIER_PRIV_KEY_HEX", + role: "supplier", + }, { label: "buyer@open-webui", host: "open-webui", diff --git a/deploy/mainnet/docker-compose.supplier-deepseek-flash-1.yml b/deploy/mainnet/docker-compose.supplier-deepseek-flash-1.yml new file mode 100644 index 0000000..e2711ab --- /dev/null +++ b/deploy/mainnet/docker-compose.supplier-deepseek-flash-1.yml @@ -0,0 +1,65 @@ +# deploy/mainnet/docker-compose.supplier-deepseek-flash-1.yml — Supplier — MAINNET (OpenRouter / DeepSeek V4 Flash #1) +# +# Parallel-capacity supplier for deepseek/deepseek-v4-flash via OpenRouter's +# OpenAI-compatible API. Same shape as the kimi replicas; distinct only in +# instance name, container, env file, Traefik host/router, and advert model. +# Shares the same OpenRouter API key as the kimi suppliers (accepted ceiling; +# supplier has no 429/backoff). Advert caps: max_output_tokens=262144, +# max_processing_ms=3600000; OPENAI_TIMEOUT_MS matched. +# +# Pre-flight: +# 1. DNS (proxied): mp-suppliers-deepseek-flash-1.vector.apexfusion.org → host +# 2. supplier/.env.deepseek-flash-1 on host (chmod 600): SUPPLIER_PRIV_KEY_HEX, +# OPENAI_API_KEY, OGMIOS_URL, NETWORK_ID=1, VECTOR_ZERO_TIME_MS, +# ESCROW_REF_UTXO, ADVERT_REF_UTXO, ADVERT_REF, LIVE_CHAIN=1 +# 3. Networks marketplace-mainnet-net + traefik-net already exist. + +name: marketplace-mainnet-supplier-deepseek-flash-1 + +services: + supplier: + build: + context: ../.. + dockerfile: supplier/Dockerfile + container_name: marketplace-mainnet-supplier-deepseek-flash-1 + restart: unless-stopped + env_file: + - path: ../../supplier/.env.deepseek-flash-1 + required: false + environment: + LLM_BACKEND: openai + # No /v1 suffix — supplier/src/openai.ts appends /v1/chat/completions. + OPENAI_BASE_URL: https://openrouter.ai/api + # Matches the advert's max_processing_ms=3600000 (60 min). + OPENAI_TIMEOUT_MS: "3600000" + PORT: "8080" + LIVE_CHAIN: "1" + # NETWORK_ID and OGMIOS_URL come from supplier/.env.deepseek-flash-1. + healthcheck: + test: ["CMD-SHELL", "wget -qO- http://localhost:8080/healthz >/dev/null || exit 1"] + interval: 20s + timeout: 5s + retries: 3 + start_period: 15s + networks: + - marketplace-mainnet-net + - traefik-net + labels: + - "traefik.enable=true" + - "traefik.docker.network=traefik-net" + - "traefik.http.routers.mp-suppliers-deepseek-flash-1-mainnet.entrypoints=web" + - "traefik.http.routers.mp-suppliers-deepseek-flash-1-mainnet.rule=Host(`mp-suppliers-deepseek-flash-1.vector.apexfusion.org`)" + - "traefik.http.services.mp-suppliers-deepseek-flash-1-mainnet.loadbalancer.server.port=8080" + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" + +networks: + marketplace-mainnet-net: + external: true + name: marketplace-mainnet-net + traefik-net: + external: true + name: traefik-net diff --git a/deploy/mainnet/docker-compose.supplier-deepseek-flash-2.yml b/deploy/mainnet/docker-compose.supplier-deepseek-flash-2.yml new file mode 100644 index 0000000..676f3fc --- /dev/null +++ b/deploy/mainnet/docker-compose.supplier-deepseek-flash-2.yml @@ -0,0 +1,65 @@ +# deploy/mainnet/docker-compose.supplier-deepseek-flash-2.yml — Supplier — MAINNET (OpenRouter / DeepSeek V4 Flash #2) +# +# Parallel-capacity supplier for deepseek/deepseek-v4-flash via OpenRouter's +# OpenAI-compatible API. Same shape as the kimi replicas; distinct only in +# instance name, container, env file, Traefik host/router, and advert model. +# Shares the same OpenRouter API key as the kimi suppliers (accepted ceiling; +# supplier has no 429/backoff). Advert caps: max_output_tokens=262144, +# max_processing_ms=3600000; OPENAI_TIMEOUT_MS matched. +# +# Pre-flight: +# 1. DNS (proxied): mp-suppliers-deepseek-flash-2.vector.apexfusion.org → host +# 2. supplier/.env.deepseek-flash-2 on host (chmod 600): SUPPLIER_PRIV_KEY_HEX, +# OPENAI_API_KEY, OGMIOS_URL, NETWORK_ID=1, VECTOR_ZERO_TIME_MS, +# ESCROW_REF_UTXO, ADVERT_REF_UTXO, ADVERT_REF, LIVE_CHAIN=1 +# 3. Networks marketplace-mainnet-net + traefik-net already exist. + +name: marketplace-mainnet-supplier-deepseek-flash-2 + +services: + supplier: + build: + context: ../.. + dockerfile: supplier/Dockerfile + container_name: marketplace-mainnet-supplier-deepseek-flash-2 + restart: unless-stopped + env_file: + - path: ../../supplier/.env.deepseek-flash-2 + required: false + environment: + LLM_BACKEND: openai + # No /v1 suffix — supplier/src/openai.ts appends /v1/chat/completions. + OPENAI_BASE_URL: https://openrouter.ai/api + # Matches the advert's max_processing_ms=3600000 (60 min). + OPENAI_TIMEOUT_MS: "3600000" + PORT: "8080" + LIVE_CHAIN: "1" + # NETWORK_ID and OGMIOS_URL come from supplier/.env.deepseek-flash-2. + healthcheck: + test: ["CMD-SHELL", "wget -qO- http://localhost:8080/healthz >/dev/null || exit 1"] + interval: 20s + timeout: 5s + retries: 3 + start_period: 15s + networks: + - marketplace-mainnet-net + - traefik-net + labels: + - "traefik.enable=true" + - "traefik.docker.network=traefik-net" + - "traefik.http.routers.mp-suppliers-deepseek-flash-2-mainnet.entrypoints=web" + - "traefik.http.routers.mp-suppliers-deepseek-flash-2-mainnet.rule=Host(`mp-suppliers-deepseek-flash-2.vector.apexfusion.org`)" + - "traefik.http.services.mp-suppliers-deepseek-flash-2-mainnet.loadbalancer.server.port=8080" + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" + +networks: + marketplace-mainnet-net: + external: true + name: marketplace-mainnet-net + traefik-net: + external: true + name: traefik-net diff --git a/deploy/mainnet/docker-compose.supplier-deepseek-flash-3.yml b/deploy/mainnet/docker-compose.supplier-deepseek-flash-3.yml new file mode 100644 index 0000000..c33673e --- /dev/null +++ b/deploy/mainnet/docker-compose.supplier-deepseek-flash-3.yml @@ -0,0 +1,65 @@ +# deploy/mainnet/docker-compose.supplier-deepseek-flash-3.yml — Supplier — MAINNET (OpenRouter / DeepSeek V4 Flash #3) +# +# Parallel-capacity supplier for deepseek/deepseek-v4-flash via OpenRouter's +# OpenAI-compatible API. Same shape as the kimi replicas; distinct only in +# instance name, container, env file, Traefik host/router, and advert model. +# Shares the same OpenRouter API key as the kimi suppliers (accepted ceiling; +# supplier has no 429/backoff). Advert caps: max_output_tokens=262144, +# max_processing_ms=3600000; OPENAI_TIMEOUT_MS matched. +# +# Pre-flight: +# 1. DNS (proxied): mp-suppliers-deepseek-flash-3.vector.apexfusion.org → host +# 2. supplier/.env.deepseek-flash-3 on host (chmod 600): SUPPLIER_PRIV_KEY_HEX, +# OPENAI_API_KEY, OGMIOS_URL, NETWORK_ID=1, VECTOR_ZERO_TIME_MS, +# ESCROW_REF_UTXO, ADVERT_REF_UTXO, ADVERT_REF, LIVE_CHAIN=1 +# 3. Networks marketplace-mainnet-net + traefik-net already exist. + +name: marketplace-mainnet-supplier-deepseek-flash-3 + +services: + supplier: + build: + context: ../.. + dockerfile: supplier/Dockerfile + container_name: marketplace-mainnet-supplier-deepseek-flash-3 + restart: unless-stopped + env_file: + - path: ../../supplier/.env.deepseek-flash-3 + required: false + environment: + LLM_BACKEND: openai + # No /v1 suffix — supplier/src/openai.ts appends /v1/chat/completions. + OPENAI_BASE_URL: https://openrouter.ai/api + # Matches the advert's max_processing_ms=3600000 (60 min). + OPENAI_TIMEOUT_MS: "3600000" + PORT: "8080" + LIVE_CHAIN: "1" + # NETWORK_ID and OGMIOS_URL come from supplier/.env.deepseek-flash-3. + healthcheck: + test: ["CMD-SHELL", "wget -qO- http://localhost:8080/healthz >/dev/null || exit 1"] + interval: 20s + timeout: 5s + retries: 3 + start_period: 15s + networks: + - marketplace-mainnet-net + - traefik-net + labels: + - "traefik.enable=true" + - "traefik.docker.network=traefik-net" + - "traefik.http.routers.mp-suppliers-deepseek-flash-3-mainnet.entrypoints=web" + - "traefik.http.routers.mp-suppliers-deepseek-flash-3-mainnet.rule=Host(`mp-suppliers-deepseek-flash-3.vector.apexfusion.org`)" + - "traefik.http.services.mp-suppliers-deepseek-flash-3-mainnet.loadbalancer.server.port=8080" + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" + +networks: + marketplace-mainnet-net: + external: true + name: marketplace-mainnet-net + traefik-net: + external: true + name: traefik-net