feat: support cloned voice deletion
This commit is contained in:
@@ -398,6 +398,36 @@ func (c MinimaxClient) runVoiceClone(ctx context.Context, request Request) (Resp
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (c MinimaxClient) DeleteVoiceClone(ctx context.Context, request VoiceCloneDeleteRequest) (VoiceCloneDeleteResponse, error) {
|
||||
startedAt := time.Now()
|
||||
voiceID := strings.TrimSpace(request.VoiceID)
|
||||
if voiceID == "" {
|
||||
return VoiceCloneDeleteResponse{}, &ClientError{Code: "bad_request", Message: "voice_id is required", Retryable: false}
|
||||
}
|
||||
client := httpClient(request.HTTPClient, c.HTTPClient)
|
||||
payload := map[string]any{
|
||||
"voice_type": "voice_cloning",
|
||||
"voice_id": voiceID,
|
||||
}
|
||||
result, requestID, err := providerPostJSON(ctx, client, providerURL(request.Candidate.BaseURL, "/delete_voice"), payload, request.Candidate.Credentials, "bearer")
|
||||
finishedAt := time.Now()
|
||||
if err != nil {
|
||||
return VoiceCloneDeleteResponse{}, annotateResponseError(err, requestID, startedAt, finishedAt)
|
||||
}
|
||||
if isProviderTaskFailure(providerTaskSpec{Name: "minimax"}, result) {
|
||||
return VoiceCloneDeleteResponse{}, providerTaskFailure(providerTaskSpec{Name: "minimax"}, result, firstNonEmptyString(requestID, requestIDFromResult(result)), startedAt)
|
||||
}
|
||||
deletedVoiceID := firstNonEmptyString(valueAtPath(result, "voice_id"), voiceID)
|
||||
return VoiceCloneDeleteResponse{
|
||||
VoiceID: deletedVoiceID,
|
||||
RequestID: firstNonEmptyString(requestID, requestIDFromResult(result)),
|
||||
Result: result,
|
||||
StartedAt: startedAt,
|
||||
FinishedAt: finishedAt,
|
||||
DurationMS: responseDurationMS(startedAt, finishedAt),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (c MinimaxClient) minimaxVoiceCloneFileID(ctx context.Context, client *http.Client, request Request, body map[string]any, purpose string, fileIDKey string, sourceKeys ...string) (any, string, error) {
|
||||
if value := firstPresent(body[fileIDKey], nil); value != nil {
|
||||
return normalizeMinimaxFileID(value), "", nil
|
||||
|
||||
@@ -60,6 +60,25 @@ type Client interface {
|
||||
Run(ctx context.Context, request Request) (Response, error)
|
||||
}
|
||||
|
||||
type VoiceCloneDeleteRequest struct {
|
||||
VoiceID string
|
||||
Candidate store.RuntimeModelCandidate
|
||||
HTTPClient *http.Client
|
||||
}
|
||||
|
||||
type VoiceCloneDeleteResponse struct {
|
||||
VoiceID string
|
||||
RequestID string
|
||||
Result map[string]any
|
||||
StartedAt time.Time
|
||||
FinishedAt time.Time
|
||||
DurationMS int64
|
||||
}
|
||||
|
||||
type VoiceCloneDeleter interface {
|
||||
DeleteVoiceClone(ctx context.Context, request VoiceCloneDeleteRequest) (VoiceCloneDeleteResponse, error)
|
||||
}
|
||||
|
||||
type ClientError struct {
|
||||
Code string
|
||||
Message string
|
||||
|
||||
Reference in New Issue
Block a user