@acedatacloud/sdk 2026.1108.0 → 2026.1113.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -143,6 +143,31 @@ Streaming and `claude.chat.messages.countTokens(...)` also preserve thinking
143
143
  configuration. Parameter pass-through does not guarantee model support; API errors
144
144
  are returned through the SDK's normal error handling.
145
145
 
146
+ ### Claude Fable 5.2
147
+
148
+ Use the exact model ID `claude-fable-5-2`. Native Messages preserves thinking and
149
+ tool content blocks. Omit `temperature`, `top_p` and `top_k`; adaptive thinking is
150
+ always enabled, and the output budget covers thinking plus the final answer.
151
+ For tools, use `tool_choice: { type: 'auto' }`, not `any` or a forced tool.
152
+ Fable 5.1 and Fable 5 remain separate model IDs; upgrade by changing `model` explicitly.
153
+ Count Tokens and Responses are not published for this model. Consult the
154
+ [current model page](https://platform.acedata.cloud/models/claude-fable-5-2?m=chat)
155
+ for account availability and package-dependent prices; model discovery alone does
156
+ not guarantee a successful generation.
157
+
158
+ ```typescript
159
+ const fable = new AceDataCloud({
160
+ apiToken: 'your-token',
161
+ baseURL: 'https://api.acedata.cloud',
162
+ });
163
+ const response = await fable.chat.messages.create({
164
+ model: 'claude-fable-5-2',
165
+ messages: [{ role: 'user', content: 'Explain this code.' }],
166
+ maxTokens: 4096,
167
+ output_config: { effort: 'high' },
168
+ });
169
+ ```
170
+
146
171
  ## OpenAI Embeddings
147
172
 
148
173
  ```typescript
@@ -304,6 +329,54 @@ not trigger reference-video billing. Do not combine `videoList` with
304
329
 
305
330
  ## Suno music processing
306
331
 
332
+ ### Replace a section
333
+
334
+ Use the completed song's `data[].id`, not the task ID. Listen to the source and
335
+ use `await client.suno.timing({ audioId })` to choose a complete phrase; replace
336
+ the example ID and 30–50 second interval with your own. Supply only the local
337
+ new lyrics, preferably the same text in `lyric` and `prompt`, not the whole song.
338
+
339
+ ```typescript
340
+ const localLyrics = 'Evening winds along the quiet lane\nCarry our story home again';
341
+ const task = await client.suno.generate({
342
+ action: 'replace_section',
343
+ audioId: 'YOUR_COMPLETED_AUDIO_ID',
344
+ model: 'chirp-v5-5',
345
+ lyric: localLyrics,
346
+ prompt: localLyrics,
347
+ replaceSectionStart: 30.0,
348
+ replaceSectionEnd: 50.0,
349
+ replaceSectionResultMode: 'full_song',
350
+ });
351
+ const result = await task.wait();
352
+ const songs = (result.response as Record<string, unknown>).data;
353
+ ```
354
+
355
+ Omitting `replaceSectionResultMode` uses the server's `full_song` default:
356
+ two complete songs, with no further `concat`. Listen to both results and check
357
+ `audio_url`, `duration`, new words and transitions. Success does not guarantee
358
+ word-for-word lyrics or the original duration; the `duration` request field
359
+ cannot lock a replacement's length. Returned `lyric` is metadata, not a
360
+ transcription, and may be empty if source lyric timing is unavailable.
361
+
362
+ For another edit, use the selected complete song's `id` and recheck its timing;
363
+ do not reuse old coordinates or send its whole returned lyric as local input.
364
+ For manual selection, request `replaceSectionResultMode: 'candidates'`, then
365
+ call `await client.suno.generate({ action: 'concat', audioId: selectedCandidateId })`
366
+ and wait for the complete song. Candidates are unstitched clips, possibly with
367
+ context. If results still sing old words or grow too long, check the source,
368
+ interval and local lyrics, then the other result; more polling cannot change
369
+ completed audio. Keep the task ID, source ID, request and result audio for support.
370
+
371
+ ### Processing charges
372
+
373
+ Standard successful-request charges are **0.56 Credits** for `action: 'stems'`
374
+ (vocals and accompaniment together count once), **0.08 Credits** for
375
+ `client.suno.lyrics(...)` (multiple candidates still count once), and **0.15 Credits**
376
+ for `client.suno.voices(...)`. Failed requests are not charged; applicable discounts
377
+ follow the actual bill. `all_stems`, `extract_stem` and other actions have their own
378
+ prices, not the `stems` rate.
379
+
307
380
  `await client.suno.persona({ name, audioId })` creates a singer style with
308
381
  `POST /suno/persona`; creation still follows the endpoint's pricing rules.
309
382
  Listing with `GET /suno/persona` and deleting with `DELETE /suno/persona` are
package/dist/index.js CHANGED
@@ -2266,8 +2266,9 @@ var Suno = class {
2266
2266
  if (options.replaceSectionEnd !== void 0) body["replace_section_end"] = options.replaceSectionEnd;
2267
2267
  if (options.underpaintingStart !== void 0) body["underpainting_start"] = options.underpaintingStart;
2268
2268
  if (options.replaceSectionStart !== void 0) body["replace_section_start"] = options.replaceSectionStart;
2269
+ if (options.replaceSectionResultMode !== void 0) body["replace_section_result_mode"] = options.replaceSectionResultMode;
2269
2270
  for (const [key, value] of Object.entries(options)) {
2270
- if (!["action", "async", "audioId", "audioUrls", "audioWeight", "callbackUrl", "continueAt", "custom", "duration", "instrumental", "lyric", "lyricPrompt", "mashupAudioIds", "maxWait", "model", "negativeTags", "overpaintingEnd", "overpaintingStart", "personaId", "pollInterval", "prompt", "replaceSectionEnd", "replaceSectionStart", "samplesEnd", "samplesStart", "style", "styleInfluence", "title", "underpaintingEnd", "underpaintingStart", "variationCategory", "vocalGender", "wait", "weirdness"].includes(key) && value !== void 0) {
2271
+ if (!["action", "async", "audioId", "audioUrls", "audioWeight", "callbackUrl", "continueAt", "custom", "duration", "instrumental", "lyric", "lyricPrompt", "mashupAudioIds", "maxWait", "model", "negativeTags", "overpaintingEnd", "overpaintingStart", "personaId", "pollInterval", "prompt", "replaceSectionEnd", "replaceSectionResultMode", "replaceSectionStart", "samplesEnd", "samplesStart", "style", "styleInfluence", "title", "underpaintingEnd", "underpaintingStart", "variationCategory", "vocalGender", "wait", "weirdness"].includes(key) && value !== void 0) {
2271
2272
  body[key] = value;
2272
2273
  }
2273
2274
  }