Skip to content

fix: 对齐 Replicate 原生图片参数 - #6701

Open
wxwwt wants to merge 1 commit into
QuantumNous:mainfrom
wxwwt:codex/fix-replicate-native-input
Open

fix: 对齐 Replicate 原生图片参数#6701
wxwwt wants to merge 1 commit into
QuantumNous:mainfrom
wxwwt:codex/fix-replicate-native-input

Conversation

@wxwwt

@wxwwt wxwwt commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

⚠️ 提交说明 / PR Notice

Important

  • 本次实现与测试由 Codex 辅助完成;以下摘要已按实际代码路径和验证结果人工整理。

📝 变更描述 / Description

NewAPI 的 Replicate 图片适配默认按 Flux 参数组装请求。客户端为其他 Replicate 模型提供原生 input 时,旧逻辑仍会注入或转换 num_outputsimage_promptprompt_upsampling 等 Flux 参数,可能造成参数冲突或语义不一致。

本 PR 仅处理 Replicate 参数对齐:

  • 客户端提供原生 input 时,将其作为上游参数的权威来源;仅在其中缺少 prompt 时补充外层提示词,不再注入 Flux 专用参数。
  • 未提供原生 input 时,继续使用现有 Flux 参数转换,保持旧调用兼容。
  • 在计费前统一校验 Replicate 的 nnumber_of_imagesnum_outputs,覆盖原生 inputextra_fields 及兼容扩展字段;拒绝超限值和相互冲突的数量,避免实际生成数量与计费数量不一致。
  • 数量校验只对 Replicate 渠道生效,不影响其他图片渠道携带同名扩展字段。

例如 openai/gpt-image-2 使用 number_of_imagesinput_imagesquality 等原生字段时,不会再被追加 Flux 的 num_outputsimage_promptprompt_upsampling

根据维护者建议,本次已移除前端测试迁移、长任务轮询、下载鉴权及通用 service 修改;这些内容不在本 PR 范围内。

🚀 变更类型 / Type of change

  • 🐛 Bug 修复 (Bug fix) - 请关联对应 Issue,避免将设计取舍、理解偏差或预期不一致直接归类为 bug
  • ✨ 新功能 (New feature) - 重大特性建议先通过 Issue 沟通
  • ⚡ 性能优化 / 重构 (Refactor)
  • 📝 文档更新 (Documentation)

🔗 关联任务 / Related Issue

  • 暂无关联 Issue;问题来自 Replicate 非 Flux 模型的原生参数兼容场景。

✅ 提交前检查项 / Checklist

  • 人工确认: 我已亲自整理并撰写此描述,没有直接粘贴未经处理的 AI 输出。
  • 非重复提交: 我已搜索现有的 IssuesPRs,确认不是重复提交。
  • Bug fix 说明: 若此 PR 标记为 Bug fix,我已提交或关联对应 Issue,且不会将设计取舍、预期不一致或理解偏差直接归类为 bug。
  • 变更理解: 我已理解这些更改的工作原理及可能影响。
  • 范围聚焦: 本 PR 未包含任何与当前任务无关的代码改动。
  • 本地验证: 已在本地运行并通过测试或手动验证,维护者可以据此复核结果。
  • 安全合规: 代码中无敏感凭据,且符合项目代码规范。

📸 运行证明 / Proof of Work

已通过:

  • go test ./relay/channel/replicate ./relay/helper -count=1
  • go test ./relay/... -count=1
  • go test -race ./relay/channel/replicate -count=1
  • go test -race ./relay/helper -run 'TestGetAndValidOpenAIImageRequest' -count=1
  • GOWORK=off go vet ./...
  • GOWORK=off go build ./...
  • cd relaykit && GOWORK=off go vet ./...
  • cd relaykit && GOWORK=off go build ./...
  • make test
  • git diff --check

未执行会产生费用的 Replicate 真机生成;参数转换、旧 Flux 兼容、数量归一化、冲突与边界校验均由确定性回归测试覆盖。

Summary by CodeRabbit

  • New Features

    • Replicate image requests now support a native input object, including prompts supplied within that object.
    • Image counts can be specified using number_of_images or num_outputs.
    • Image-count values are normalized across supported request formats.
  • Bug Fixes

    • Added validation for invalid, conflicting, or excessive image-count requests.
    • Native Replicate inputs now take precedence without unintended field merging.
    • Preserved compatibility with legacy Flux request fields and configured prediction paths.
    • Replicate-specific image-count handling no longer affects other channels.

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Replicate image requests now support native Extra["input"] objects. Image-count fields are normalized and validated across supported locations. Native prompts can replace outer prompts, while legacy Flux conversion remains covered by tests.

Changes

Replicate input validation

Layer / File(s) Summary
Image-count normalization
relay/helper/valid_request.go, relay/helper/openai_image_request_test.go
Replicate image-count fields are parsed from supported locations, validated against bounds and n, and isolated from non-Replicate channels.
Native Replicate input handling
relay/channel/replicate/adaptor.go, relay/channel/replicate/adaptor_test.go
Native input objects control payload fields, can provide prompts, require output counts for multi-image requests, and preserve legacy Flux mappings.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Suggested reviewers: calcium-ion

Poem

I hop through inputs, neat and bright,
Counts align and prompts take flight.
Flux keeps its mapping, true and sound,
Native fields now rule the round.
Squeak! The tests confirm each bound.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the main change: aligning Replicate native image parameters.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

🧹 Nitpick comments (6)
relay/channel/replicate/adaptor.go (5)

334-336: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Decode each poll response into a fresh PredictionResponse.

common.Unmarshal merges into the existing prediction value. JSON decoding does not clear fields that the new payload omits. If one poll response omits output or error, the value from the previous response persists and evaluatePrediction acts on stale data.

♻️ Proposed fix
-		if err := common.Unmarshal(responseBody, &prediction); err != nil {
+		var polled PredictionResponse
+		if err := common.Unmarshal(responseBody, &polled); err != nil {
 			return PredictionResponse{}, fmt.Errorf("replicate adaptor: failed to decode polling response: %w", err)
 		}
+		prediction = polled
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@relay/channel/replicate/adaptor.go` around lines 334 - 336, Update the
polling decode flow around common.Unmarshal to decode each response into a newly
initialized PredictionResponse rather than reusing prediction across iterations.
Ensure evaluatePrediction receives only fields present in the current poll
response while preserving the existing decode error handling.

33-37: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win

Consider a backoff for long-running predictions.

predictionPollInterval is a fixed 1 second and predictionPollTimeout is 20 minutes. A single slow prediction can then issue up to about 1200 upstream GET requests. Replicate rate limits the predictions API per account, so many concurrent long jobs can exhaust that budget. An incremental backoff (for example 1s, growing to 5s) keeps latency low for fast jobs and reduces upstream load for slow jobs.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@relay/channel/replicate/adaptor.go` around lines 33 - 37, Update the
prediction polling logic that uses predictionPollInterval to apply incremental
backoff between status requests, starting at 1 second and capping around 5
seconds while predictionPollTimeout remains enforced. Preserve fast polling for
short-lived predictions and reduce request frequency for long-running ones.

319-333: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

A single transient failure aborts a running prediction.

Any network error from client.Do, or any non-200 status, ends the loop immediately. The prediction continues upstream, but the user receives an error and is not billed for a result they may still be charged for on the Replicate side. Over a 20 minute window, one connection reset or one 429/5xx from Replicate is likely.

Tolerate transient failures: retry on network errors and on 429/5xx up to a small consecutive-failure budget, and fail only on 4xx that are not 429.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@relay/channel/replicate/adaptor.go` around lines 319 - 333, Update the
polling loop around client.Do and the response status handling to tolerate
transient failures: retry network errors and HTTP 429/5xx responses up to a
small consecutive-failure budget, resetting that budget after a successful poll.
Preserve response-size validation, fail immediately for non-429 4xx statuses,
and return an error only when the transient retry budget is exhausted.

421-435: 🚀 Performance & Scalability | 🔵 Trivial | 💤 Low value

Downloads run sequentially.

Each output URL is downloaded one after another. For a request that returns several images, the added latency is the sum of all downloads. A bounded parallel download, for example with errgroup and a small concurrency limit, keeps the ordering of results and reduces the total time.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@relay/channel/replicate/adaptor.go` around lines 421 - 435, Update
downloadImagesToBase64 to download non-empty output URLs concurrently with a
small bounded worker limit, while preserving each URL’s original position in
results and returning download errors with the existing context. Ensure
synchronization protects shared result and error state, and avoid launching
unnecessary work after cancellation.

383-391: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Include the raw payload in the fallback error message.

If the error payload is a JSON object with no message, detail, or code, the returned text is the constant "replicate adaptor: prediction error". The upstream detail is then lost for diagnosis. Append the trimmed raw payload, bounded to a safe length.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@relay/channel/replicate/adaptor.go` around lines 383 - 391, Update the
fallback return in the prediction-error parsing logic to append the trimmed raw
payload, preserving the existing prefix and limiting the payload to a safe
maximum length. Keep the parsed Message, Detail, and Code priority unchanged,
and use the existing trimmed payload represented by trimmed.
relay/channel/replicate/adaptor_test.go (1)

104-136: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add polling cases for the pending and failure paths.

This test covers only a single poll that returns succeeded. The new polling code has several untested branches that carry real risk:

  • A first response with status processing followed by a second response with status succeeded. This proves that the loop repeats and that the final output replaces the earlier one.
  • A poll response with a non-200 status. This proves the error text includes the status.
  • A poll response with status failed and an error payload. This proves the provider error reaches the caller.

The processing case is the most valuable, because the current evaluatePrediction returns early when a non-terminal response already carries output.

Based on the coding guideline "Backend tests must protect real behavior, API contracts, billing/accounting invariants, compatibility, or regression paths."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@relay/channel/replicate/adaptor_test.go` around lines 104 - 136, Add polling
test cases alongside TestWaitForPredictionPollsThroughConfiguredBaseURL for: an
initial processing response followed by succeeded, asserting the loop repeats
and final output replaces earlier output; a non-200 response, asserting the
returned error includes the HTTP status; and a failed prediction with an error
payload, asserting the provider error reaches the caller. Reuse the existing
server, request setup, and waitForPrediction symbols, with the processing case
specifically covering responses that include intermediate output.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@relay/channel/replicate/adaptor.go`:
- Around line 98-113: The image count can be billed higher than the number
Replicate produces when outer n exceeds one and native input lacks a count. In
relay/channel/replicate/adaptor.go, update the native-input handling in the
adaptor to reconcile the outer count into inputPayload using the target model
family’s correct count key when neither number_of_images nor num_outputs exists,
or reject the unreconciled case; in relay/helper/valid_request.go, add post-loop
validation for imageRequest.N greater than one with a native input and empty
declarations, returning an explicit error. Add the corresponding n >
1/countless-native-input table case in
relay/helper/openai_image_request_test.go.
- Around line 363-364: Update the non-terminal status handling in the prediction
completion logic so the "starting" and "processing" cases always return pending
regardless of output URLs. Leave output inspection to the terminal-status
branch, including the existing ""/"succeeded" handling.

In `@relay/helper/valid_request.go`:
- Around line 177-187: Scope the number_of_images/num_outputs handling in
normalizeImageRequestCount to Replicate image requests only, or move this legacy
branch after normal OpenAI fields are rejected. Ensure non-Replicate image
requests can pass these provider-specific extras without validation failure,
while preserving Replicate count parsing and declarations.

In `@service/download.go`:
- Around line 59-70: Update the worker request construction in the EnableWorker
branch to prevent upstream provider credentials from crossing the worker
boundary. Exclude the Authorization header from workerHeaders, or restrict
forwarding to an explicit allowlist of safe headers, while preserving forwarding
for permitted headers before calling DoWorkerRequest.
- Line 58: Update the worker download log in the surrounding download flow to
pass originUrl through common.MaskSensitiveInfo before formatting it with the
existing reason details. Preserve the current log message structure while
ensuring signed query parameters and other sensitive URL data are never logged
raw.
- Around line 82-83: Update the header handling in DoDownloadRequest to copy
supplied headers into the request’s existing initialized Header map rather than
assigning headers.Clone() directly. Preserve all provided header values while
keeping the map non-nil when the caller passes nil.

---

Nitpick comments:
In `@relay/channel/replicate/adaptor_test.go`:
- Around line 104-136: Add polling test cases alongside
TestWaitForPredictionPollsThroughConfiguredBaseURL for: an initial processing
response followed by succeeded, asserting the loop repeats and final output
replaces earlier output; a non-200 response, asserting the returned error
includes the HTTP status; and a failed prediction with an error payload,
asserting the provider error reaches the caller. Reuse the existing server,
request setup, and waitForPrediction symbols, with the processing case
specifically covering responses that include intermediate output.

In `@relay/channel/replicate/adaptor.go`:
- Around line 334-336: Update the polling decode flow around common.Unmarshal to
decode each response into a newly initialized PredictionResponse rather than
reusing prediction across iterations. Ensure evaluatePrediction receives only
fields present in the current poll response while preserving the existing decode
error handling.
- Around line 33-37: Update the prediction polling logic that uses
predictionPollInterval to apply incremental backoff between status requests,
starting at 1 second and capping around 5 seconds while predictionPollTimeout
remains enforced. Preserve fast polling for short-lived predictions and reduce
request frequency for long-running ones.
- Around line 319-333: Update the polling loop around client.Do and the response
status handling to tolerate transient failures: retry network errors and HTTP
429/5xx responses up to a small consecutive-failure budget, resetting that
budget after a successful poll. Preserve response-size validation, fail
immediately for non-429 4xx statuses, and return an error only when the
transient retry budget is exhausted.
- Around line 421-435: Update downloadImagesToBase64 to download non-empty
output URLs concurrently with a small bounded worker limit, while preserving
each URL’s original position in results and returning download errors with the
existing context. Ensure synchronization protects shared result and error state,
and avoid launching unnecessary work after cancellation.
- Around line 383-391: Update the fallback return in the prediction-error
parsing logic to append the trimmed raw payload, preserving the existing prefix
and limiting the payload to a safe maximum length. Keep the parsed Message,
Detail, and Code priority unchanged, and use the existing trimmed payload
represented by trimmed.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: f1645f7d-dc5a-4bfa-8cac-cbf13d1f178d

📥 Commits

Reviewing files that changed from the base of the PR and between e926e5c and 7d5a734.

📒 Files selected for processing (7)
  • relay/channel/replicate/adaptor.go
  • relay/channel/replicate/adaptor_test.go
  • relay/channel/replicate/dto.go
  • relay/helper/openai_image_request_test.go
  • relay/helper/valid_request.go
  • service/download.go
  • service/image.go

Comment thread relay/channel/replicate/adaptor.go
Comment thread relay/channel/replicate/adaptor.go Outdated
Comment thread relay/helper/valid_request.go
Comment thread service/download.go
Comment thread service/download.go Outdated
Comment thread service/download.go Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@relay/channel/replicate/adaptor_test.go`:
- Around line 147-151: Add a deterministic test case alongside the existing
processing prediction case, using Status "starting" and the same successful
polling assertions. Ensure the test exercises the polling path in the relevant
adaptor test so both starting and processing predictions continue polling until
completion.

In `@service/download_test.go`:
- Around line 70-71: Update the worker bypass test setup around
system_setting.WorkerUrl and WorkerValidKey to explicitly configure every
setting required by EnableWorker(), assert that system_setting.EnableWorker()
returns true before exercising the bypass, and save and restore any additional
mutable setting state used by the fixture.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 2361066b-f99d-4863-aef6-9a8b25a4a604

📥 Commits

Reviewing files that changed from the base of the PR and between 409a342 and 285ccbe.

📒 Files selected for processing (6)
  • relay/channel/replicate/adaptor.go
  • relay/channel/replicate/adaptor_test.go
  • relay/helper/openai_image_request_test.go
  • relay/helper/valid_request.go
  • service/download.go
  • service/download_test.go
🚧 Files skipped from review as they are similar to previous changes (2)
  • relay/helper/valid_request.go
  • relay/channel/replicate/adaptor.go

Comment thread relay/channel/replicate/adaptor_test.go Outdated
Comment thread service/download_test.go Outdated
@wxwwt

wxwwt commented Aug 7, 2026

Copy link
Copy Markdown
Contributor Author

@Calcium-Ion 麻烦审核下

@Calcium-Ion

Copy link
Copy Markdown
Member

感谢您的贡献,请问可以把功能上无关的代码先移除,或者抽离成新的pr吗,这样更方便维护者review

@wxwwt

wxwwt commented Aug 8, 2026

Copy link
Copy Markdown
Contributor Author

感谢您的贡献,请问可以把功能上无关的代码先移除,或者抽离成新的pr吗,这样更方便维护者review

好的 我修改下

@wxwwt
wxwwt force-pushed the codex/fix-replicate-native-input branch from 0bd021b to 359ce49 Compare August 8, 2026 00:58
@wxwwt wxwwt changed the title fix: 完善 Replicate 图片参数透传与长任务轮询 fix: 对齐 Replicate 原生图片参数 Aug 8, 2026
@wxwwt

wxwwt commented Aug 8, 2026

Copy link
Copy Markdown
Contributor Author

感谢提醒,已按建议重新整理并强制更新分支。当前 PR 只保留 Replicate 原生 input 参数透传、Flux 旧调用兼容,以及 n / number_of_images / num_outputs 的数量与计费一致性校验;前端测试迁移、长任务轮询、下载鉴权和通用 service 修改均已移除。变更范围已从 41 个文件收缩到 4 个 Replicate 参数相关文件,并已在最新 main 上完成全量 vet、build 和 make test。烦请您有空时再帮忙 review。

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@relay/channel/replicate/adaptor_test.go`:
- Around line 70-89: Extend TestConvertImageRequestNativeInputCanProvidePrompt
with a native input payload that omits prompt while setting the outer
dto.ImageRequest.Prompt; assert ConvertImageRequest succeeds and the converted
payload’s input map contains the outer prompt. Preserve the existing
native-prompt case and verify the fallback injection behavior.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 827a9dcd-c211-4ce5-969d-8f9fffcbb252

📥 Commits

Reviewing files that changed from the base of the PR and between 0bd021b and 359ce49.

📒 Files selected for processing (3)
  • relay/channel/replicate/adaptor.go
  • relay/channel/replicate/adaptor_test.go
  • relay/helper/openai_image_request_test.go

Comment thread relay/channel/replicate/adaptor_test.go
@wxwwt

wxwwt commented Aug 8, 2026

Copy link
Copy Markdown
Contributor Author

补充说明:本次更新后的 Backend CI 已通过。Frontend CI 仍失败,日志显示是当前 main 中测试使用 node:test、而工作流使用 Bun 1.3.14 执行导致的既有兼容问题(NotImplementedError: describe() inside another test());该问题已由独立 PR #6569 处理。按照本次范围收敛要求,#6701 不再携带任何前端修改。

@wxwwt
wxwwt force-pushed the codex/fix-replicate-native-input branch from 359ce49 to b9f685e Compare August 8, 2026 01:02
@wxwwt

wxwwt commented Aug 8, 2026

Copy link
Copy Markdown
Contributor Author

@Calcium-Ion 已经处理了,不过那个前端的问题是main分支就有问题,得先把#6569 这个处理了 可能才不会报错了

@wxwwt

wxwwt commented Aug 17, 2026

Copy link
Copy Markdown
Contributor Author

@Calcium-Ion 大佬 这个麻烦在审核下,这个影响还有点大,就是我们调用replicate网络有时可以有时不可以,我们排查发现是replicate对应的是cloudflare节点国内访问不稳定。所以部署了一套海外的newapi作为中转,保持参数可以透传过去,能跟直连repliate效果差不多,需要这个pr的修改

@wxwwt

wxwwt commented Aug 27, 2026

Copy link
Copy Markdown
Contributor Author

@seefs001 你好,这个 PR 已按维护者建议从 41 个文件收敛到 4 个 Replicate 参数相关文件 主要解决 GPT Image 2 等非 Flux 模型的原生 input 和多参考图透传问题,麻烦您有空时帮忙 review,感谢!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants