增加即梦图片5.0和视频2.5的能力

This commit is contained in:
andy committed 2026-08-21 13:44:56 +08:00
1 parent 542246e4ce
commit 88a4268d40
55 files changed
+1412 -200

No files matched your search

+1 -1
View File
@@ -245,7 +245,7 @@ func retryEngine(provider, capability string) string {
switch provider {
case "volcengine-visual":
return "jimeng"
case "evolink", "bailian":
case "evolink", "bailian", "seedream":
return provider
default:
return ""
+4 -4
View File
@@ -77,7 +77,7 @@ func (p *SettlementProcessor) Advance(ctx context.Context, job jobs.Job) (jobs.J
resolution := seedanceResolution(charge.raw)
inputVideo := seedanceRequestHasInputVideo(advanced.RequestPayload)
actualAmount, err := billing.CalculateSeedanceActualAmountFen(billing.SeedanceActualAmountInput{
Resolution: resolution, InputVideo: inputVideo, CompletionTokens: completionTokens,
Model: advanced.ReqKey, Resolution: resolution, InputVideo: inputVideo, CompletionTokens: completionTokens,
MarkupMultiplier: numberOrZero(charge.raw["markupMultiplier"]),
})
if err != nil {
@@ -104,7 +104,7 @@ func (p *SettlementProcessor) Advance(ctx context.Context, job jobs.Job) (jobs.J
Metadata: map[string]any{
"operation": "seedance_actual_settlement", "reservedAmountFen": reservedAmount,
"chargedAmountFen": charge.AmountFen, "actualAmountFen": actualAmount,
"completionTokens": completionTokens, "inputVideo": inputVideo, "resolution": resolution,
"completionTokens": completionTokens, "inputVideo": inputVideo, "resolution": resolution, "model": advanced.ReqKey,
},
})
if postErr != nil {
@@ -125,8 +125,8 @@ func (p *SettlementProcessor) Advance(ctx context.Context, job jobs.Job) (jobs.J
delete(charge.raw, "settlementLedgerEntryId")
}
charge.raw["providerUsage"] = map[string]any{
"completionTokens": completionTokens, "resolution": resolution, "inputVideo": inputVideo,
"tokenPriceFenPerMillion": billing.SeedanceTokenPriceFenPerMillion(resolution, inputVideo),
"completionTokens": completionTokens, "resolution": resolution, "inputVideo": inputVideo, "model": advanced.ReqKey,
"tokenPriceFenPerMillion": billing.SeedanceTokenPriceFenPerMillion(advanced.ReqKey, resolution, inputVideo),
}
return p.write(ctx, advanced, charge.raw)
}
@@ -52,6 +52,25 @@ func TestSettlementProcessorMarksMissingProviderUsageEstimated(t *testing.T) {
}
}
func TestSettlementProcessorUsesSeedance25RateFromJobReqKey(t *testing.T) {
state := &settlementStateStub{}
ledger := &settlementLedgerStub{}
advanced := seedanceSettlementJob(`{"usage":{"completionTokens":20000}}`, `{"status":"charged","amountFen":100,"markupMultiplier":1.2,"parameters":{"resolution":"720p"}}`)
advanced.ReqKey = billing.Seedance25Model
processor := NewSettlementProcessor(settlementProcessorStub{job: advanced}, ledger, state, time.Now)
got, err := processor.Advance(context.Background(), jobs.Job{ID: "job-1", Provider: "seedance", Status: jobs.StatusRunning})
if err != nil || ledger.calls != 1 || ledger.request.DeltaFen != 68 {
t.Fatalf("job=%#v request=%#v calls=%d err=%v", got, ledger.request, ledger.calls, err)
}
var snapshot map[string]any
_ = json.Unmarshal(got.Billing, &snapshot)
usage := snapshot["providerUsage"].(map[string]any)
if snapshot["amountFen"] != float64(168) || usage["model"] != billing.Seedance25Model || usage["tokenPriceFenPerMillion"] != float64(7000) {
t.Fatalf("billing snapshot = %#v", snapshot)
}
}
func TestSettlementProcessorQuotaExemptUpdatesSnapshotWithoutWalletAndIsIdempotent(t *testing.T) {
state := &settlementStateStub{}
ledger := &settlementLedgerStub{}