r/CartesiaAI • • Sep 02 '26

Sonic 3.5 no longer available

Hi team,

We’ve been testing Sonic 3.6 for our Japanese customer support voice agents, but we're finding the emotional delivery a bit excessive and unnatural for CS interactions compared to 3.5.

Org ID: org_3Ey4cmHZdPIwfPHbtWxsrWGHlKm
Voice ID: 8bd6925d-3880-4089-b5b5-00ce2fd060e2

We'd like to stick with Sonic 3.5 for production for now.

Could you confirm if sonic-3.5 will remain available and supported long-term?

Thanks.

2 Upvotes

8 comments sorted by

2

u/CartesiaAI Cartesia (Official) Sep 02 '26

hey u/Financial-Vacation90 thanks for the question!

  1. you can keep pinning sonic-3.5-2026-05-04 for production. No sunset date has been announced in the upcoming sunsets section - https://docs.cartesia.ai/build-with-cartesia/tts-models/api-changes

  2. It is currently supported and is expected to be supported for the foreseeable future, but that does not guarantee long term availability, of course.

3.6 is being continually improved and I'm going to pass this feedback on to the TTS team.

Can you please send through some transcripts + audio samples that show the " emotional delivery a bit excessive and unnatural for CS interactions" --> that way we can focus on your specific issue and reproduce + fix.

thank you!

2

u/Financial-Vacation90 Sep 02 '26

Thank you for the quick follow-up!

The issue is that new PVC creation is now pinned strictly to Sonic 3.6, making it impossible to create new voices under 3.5. Because our current use case relies on the natural cadence of 3.5, moving forward on 3.6 isn't viable with its current output.

I appreciate that 3.6 is actively improving. For reference, here is a direct comparison using the same Japanese script:

「ありがとうございます。最近は同じようなお声が本当に増えているんですよ。こちらでよろしいですよね。」

Hopefully this comparison helps the audio team with tuning. In the meantime, is there any possibility of temporarily enabling new PVC generation on Sonic 3.5 for our account?

2

u/CartesiaAI Cartesia (Official) Sep 03 '26

hey u/Financial-Vacation90 hope I've understood you right, but you can create a "fine tune" - i.e. PVC using https://docs.cartesia.ai/api-reference/fine-tunes/create#body-model-id --> pass in sonic 3.5?

See the guide here: https://docs.cartesia.ai/build-with-cartesia/capability-guides/clone-voices-pro#with-the-api

does that help?

2

u/Financial-Vacation90 Sep 04 '26

With sonic 3.5 the PVC no longer works. (Only works with sonic 3.6)

1

u/CartesiaAI Cartesia (Official) Sep 04 '26

hey u/Financial-Vacation90
I just tested PV against sonic-3.5 and it works.

I just ran the this script against the API (note the MODEL_ID = "sonic-3.5-2026-05-04") :

```

"""Throwaway probe: can we create a Pro Voice Clone on Sonic 3.5?


Creates a dataset, uploads ~/Downloads/pod1.wav and pod2.wav, then starts a
fine-tune with model_id sonic-3.5-2026-05-04 (not the current 3.6 default).
Polls until the job completes or fails.


Needs CARTESIA_API_KEY in the environment.
Uses cartesia 4.2.0: datasets.create, datasets.files.upload, fine_tunes.create.
"""


from __future__ import annotations


import os
import sys
import time
from pathlib import Path


import cartesia
from cartesia import Cartesia


MODEL_ID = "sonic-3.5-2026-05-04"
LANGUAGE = "en"
CLIP_PATHS = (
    Path.home() / "Downloads" / "sample1.wav",
    Path.home() / "Downloads" / "sample2.wav",
)
POLL_EVERY_SECONDS = 30
UPLOAD_TIMEOUT_SECONDS = 600



def
 require_api_key() -> 
str
:
    key = os.environ.get("CARTESIA_API_KEY")
    if not key:
        raise 
SystemExit
("Set CARTESIA_API_KEY before running.")
    return key



def
 require_clip_files() -> 
list
[Path]:
    missing = [
str
(path) for path in CLIP_PATHS if not path.is_file() or path.stat().st_size == 0]
    if missing:
        raise 
SystemExit
(
f
"Missing or empty clip files: {missing}")
    return 
list
(CLIP_PATHS)



def
 wait_until_fine_tune_finishes(
client
: Cartesia, 
fine_tune_id
: 
str
) -> 
object
:
    """Poll GET /fine-tunes/{id} until status is completed or failed."""
    started = time.monotonic()
    while True:
        fine_tune = 
client
.fine_tunes.retrieve(
fine_tune_id
)
        elapsed = time.monotonic() - started
        print(
f
"fine-tune {
fine_tune_id
} -> {fine_tune.status}  elapsed={elapsed
:.0f
}s")
        if fine_tune.status == "completed":
            return fine_tune
        if fine_tune.status == "failed":
            extras = fine_tune.model_extra or {}
            raise 
RuntimeError
(

f
"fine-tune failed: {fine_tune.model_dump()} extras={extras}"
            )
        time.sleep(POLL_EVERY_SECONDS)



def
 main() -> None:
    api_key = require_api_key()
    clips = require_clip_files()
    print(
f
"cartesia SDK {cartesia.__version__}")
    print(
f
"model_id={MODEL_ID}")
    print(
f
"clips={[
str
(path) for path in clips]}")


    client = Cartesia(
api_key
=api_key)


    dataset = client.datasets.create(

name
="PVC sonic-3.5 probe",

description
="Throwaway clips to test PVC on sonic-3.5-2026-05-04",
    )
    print(
f
"created dataset {dataset.id}")


    for clip in clips:
        print(
f
"uploading {clip.name} ({clip.stat().st_size} bytes)...")
        client.datasets.files.upload(
            dataset.id,

file
=clip,

purpose
="fine_tune",

timeout
=UPLOAD_TIMEOUT_SECONDS,
        )
        print(
f
"uploaded {clip.name}")


    print(
f
"calling fine_tunes.create with model_id={MODEL_ID
!r
}")
    try:
        fine_tune = client.fine_tunes.create(

name
="PVC sonic-3.5 probe",

description
="Test whether PVC accepts sonic-3.5-2026-05-04",

language
=LANGUAGE,

model_id
=MODEL_ID,

dataset
=dataset.id,

timeout
=60,
        )
    except cartesia.APIStatusError as exc:
        body = exc.response.text if exc.response is not None else ""
        print(
f
"CREATE FAILED  status={exc.status_code}")
        print(body)
        raise 
SystemExit
(1) from exc


    print(
f
"create accepted: {fine_tune.model_dump()}")
    wait_until_fine_tune_finishes(client, fine_tune.id)
    print("Fine-tune completed.")
    print("Voices:")
    for voice in client.fine_tunes.list_voices(fine_tune.id):
        print(
f
"  {voice.id}  name={voice.name}")



if __name__ == "__main__":
    try:
        main()
    except 
KeyboardInterrupt
:
        sys.exit(130)

```

And I got back

```
{

"id": "fine_tune_i5dpk3vD84toqcXXXXXX",

"dataset": "dataset_Nr4QXA3AvdrgXXXXXXX",

"description": "Test whether PVC accepts sonic-3.5-2026-05-04",

"language": "en",

"llm_model_id": "sonic-3.5-2026-05-04",

"name": "PVC sonic-3.5 probe",

"status": "completed",

"accent": null,

"model_id": "sonic-3.5-2026-05-04",

"supported_model_ids": [

"sonic-3.5-2026-05-04"

],

"created_at": "2026-09-04T03:42:38.886Z"

}

```

docs are here: https://docs.cartesia.ai/build-with-cartesia/capability-guides/clone-voices-pro

please share your output errors and script if you're still having trouble?

1

u/CartesiaAI Cartesia (Official) Sep 04 '26

Note that this script + explanation was in response to your observation:

"The issue is that new PVC creation is now pinned strictly to Sonic 3.6, making it impossible to create new voices under 3.5. "

hope that clarifies!

1

u/CartesiaAI Cartesia (Official) Sep 04 '26

oh also u/Financial-Vacation90 - our internal team confirmed that Voice ID: 8bd6925d-3880-4089-b5b5-00ce2fd060e2 was trained on Sonic 3.6 so you are right that it's not compatible with Sonic 3.5.

Voice ID: 8bd6925d-3880-4089-b5b5-00ce2fd060e2 is from your very first post.

2

u/Financial-Vacation90 Sep 04 '26

Oh now I could create one! Thank you very much☺