v0.7.0
@effect-uai/core
Minor Changes
-
602bfa9: 0.7 is a capability-honesty pass across every audio and embedding
surface. The unifying rule: where a provider cannot honor a request, the
call now fails withAiError.Unsupported(load-bearing gaps) or emits a
structuredwarnDropped(best-effort hints), instead of silently
substituting a different result. Alongside that,Durationreplaces raw
durationSecondseverywhere audio carries a length, theMusicGenerator
surface is reshaped, an ElevenLabs music provider lands, and Gemini
toolChoiceis now mapped.Most of it is mechanical (find-and-replace renames plus a
Duration.seconds(n)wrap). The parts that need judgement are the
removedGeminiTranscriber(use OpenAI / ElevenLabs / Inworld instead)
and the requests that now error where they previously degraded silently.
The full before/after diffs and the recommended order live in
Migrating to 0.7.@effect-uai/anthropic,@effect-uai/microsandbox, and
@effect-uai/denohave no functional changes this release; they bump for
lockstep versioning only. -
602bfa9: Core domain and service reshape (audio, STT, TTS, embeddings):
- Audio:
AudioBlob.durationSeconds: numberbecomes
duration?: Duration.Duration. The same rename flows through
TranscriptResult(STT) andMusicResult(music). - Transcriber:
CommonTranscribeRequest.promptsplits into
prompt?: string(free-form prose context) and
biasingTerms?: ReadonlyArray<string>(discrete vocabulary). The old
{ terms }union arm is gone.TranscriptResult.durationSeconds
becomesduration. StreaminputFormatgaps now fail
AiError.Unsupportedinstead ofInvalidRequest. - SpeechSynthesizer:
PhoneticEncodingand
CustomPronunciation.encodingare removed (pronunciationis IPA-only).
Pronunciations are load-bearing: a provider with no IPA path fails
Unsupportedrather than dropping them.DialogueTurntrims to
{ voiceId, text }(styleDescription/speedremoved). - MusicGenerator:
promptsbecomesprompt(string),bpm/scale
/instrumentaldropped fromCommonGenerateMusicRequest,MusicResult
composesAudioBlob(result.audio.bytes),generatereturns
GenerateResult(primary+variants[]),streamGenerationFrom
yieldsMusicStreamEvent, andMusicSessionInputdrops theconfig
variant. - EmbeddingModel:
EmbedEncodingis trimmed to
"float32" | "int8" | "binary"(the dense cross-provider request set);
sparse/multivectormove to the provider-typedJinaEncoding. New
ResponseEncoding(the wider response union) parameterizes
EmbedResponse<E>/EmbedManyResponse<E>. New exportedassertEncoding
guard validates an encoding against a provider's supported set and fails
Unsupportedinstead of returning a mislabeled vector. - Additive: new
@effect-uai/core/Capabilitiesmodule with
warnDroppedWhenfor structured bucket-2 warn-and-drop.
See Migrating to 0.7.
- Audio:
effect-uai
Minor Changes
-
602bfa9: 0.7 is a capability-honesty pass across every audio and embedding
surface. The unifying rule: where a provider cannot honor a request, the
call now fails withAiError.Unsupported(load-bearing gaps) or emits a
structuredwarnDropped(best-effort hints), instead of silently
substituting a different result. Alongside that,Durationreplaces raw
durationSecondseverywhere audio carries a length, theMusicGenerator
surface is reshaped, an ElevenLabs music provider lands, and Gemini
toolChoiceis now mapped.Most of it is mechanical (find-and-replace renames plus a
Duration.seconds(n)wrap). The parts that need judgement are the
removedGeminiTranscriber(use OpenAI / ElevenLabs / Inworld instead)
and the requests that now error where they previously degraded silently.
The full before/after diffs and the recommended order live in
Migrating to 0.7.@effect-uai/anthropic,@effect-uai/microsandbox, and
@effect-uai/denohave no functional changes this release; they bump for
lockstep versioning only.
@effect-uai/anthropic
Minor Changes
-
602bfa9: 0.7 is a capability-honesty pass across every audio and embedding
surface. The unifying rule: where a provider cannot honor a request, the
call now fails withAiError.Unsupported(load-bearing gaps) or emits a
structuredwarnDropped(best-effort hints), instead of silently
substituting a different result. Alongside that,Durationreplaces raw
durationSecondseverywhere audio carries a length, theMusicGenerator
surface is reshaped, an ElevenLabs music provider lands, and Gemini
toolChoiceis now mapped.Most of it is mechanical (find-and-replace renames plus a
Duration.seconds(n)wrap). The parts that need judgement are the
removedGeminiTranscriber(use OpenAI / ElevenLabs / Inworld instead)
and the requests that now error where they previously degraded silently.
The full before/after diffs and the recommended order live in
Migrating to 0.7.@effect-uai/anthropic,@effect-uai/microsandbox, and
@effect-uai/denohave no functional changes this release; they bump for
lockstep versioning only.
@effect-uai/deno
Minor Changes
-
602bfa9: 0.7 is a capability-honesty pass across every audio and embedding
surface. The unifying rule: where a provider cannot honor a request, the
call now fails withAiError.Unsupported(load-bearing gaps) or emits a
structuredwarnDropped(best-effort hints), instead of silently
substituting a different result. Alongside that,Durationreplaces raw
durationSecondseverywhere audio carries a length, theMusicGenerator
surface is reshaped, an ElevenLabs music provider lands, and Gemini
toolChoiceis now mapped.Most of it is mechanical (find-and-replace renames plus a
Duration.seconds(n)wrap). The parts that need judgement are the
removedGeminiTranscriber(use OpenAI / ElevenLabs / Inworld instead)
and the requests that now error where they previously degraded silently.
The full before/after diffs and the recommended order live in
Migrating to 0.7.@effect-uai/anthropic,@effect-uai/microsandbox, and
@effect-uai/denohave no functional changes this release; they bump for
lockstep versioning only.
@effect-uai/elevenlabs
Minor Changes
-
602bfa9: 0.7 is a capability-honesty pass across every audio and embedding
surface. The unifying rule: where a provider cannot honor a request, the
call now fails withAiError.Unsupported(load-bearing gaps) or emits a
structuredwarnDropped(best-effort hints), instead of silently
substituting a different result. Alongside that,Durationreplaces raw
durationSecondseverywhere audio carries a length, theMusicGenerator
surface is reshaped, an ElevenLabs music provider lands, and Gemini
toolChoiceis now mapped.Most of it is mechanical (find-and-replace renames plus a
Duration.seconds(n)wrap). The parts that need judgement are the
removedGeminiTranscriber(use OpenAI / ElevenLabs / Inworld instead)
and the requests that now error where they previously degraded silently.
The full before/after diffs and the recommended order live in
Migrating to 0.7.@effect-uai/anthropic,@effect-uai/microsandbox, and
@effect-uai/denohave no functional changes this release; they bump for
lockstep versioning only. -
602bfa9: - New
@effect-uai/elevenlabs/ElevenLabsMusicGenerator(additive):
ElevenLabs Music as a secondMusicGeneratorprovider, with a typed
extras surface (compositionPlan/forceInstrumental/signWithC2pa
/respectSectionsDurations), acreateCompositionPlanhelper, and
native chunked HTTP streaming. Does not registerMusicInteractiveSession.- New
pronunciationDictionaryLocators(additive) on the synthesize
request: reference a pre-provisioned ElevenLabs pronunciation dictionary
by id. - Inline
pronunciationsnow failAiError.Unsupported(ElevenLabs
has no stateless inline IPA path). UsepronunciationDictionaryLocators
instead. ElevenLabsTranscriber:biasingTermsmaps tokeyterms;prompt
warnDropped.
See Migrating to 0.7.
- New
@effect-uai/google
Minor Changes
-
602bfa9: 0.7 is a capability-honesty pass across every audio and embedding
surface. The unifying rule: where a provider cannot honor a request, the
call now fails withAiError.Unsupported(load-bearing gaps) or emits a
structuredwarnDropped(best-effort hints), instead of silently
substituting a different result. Alongside that,Durationreplaces raw
durationSecondseverywhere audio carries a length, theMusicGenerator
surface is reshaped, an ElevenLabs music provider lands, and Gemini
toolChoiceis now mapped.Most of it is mechanical (find-and-replace renames plus a
Duration.seconds(n)wrap). The parts that need judgement are the
removedGeminiTranscriber(use OpenAI / ElevenLabs / Inworld instead)
and the requests that now error where they previously degraded silently.
The full before/after diffs and the recommended order live in
Migrating to 0.7.@effect-uai/anthropic,@effect-uai/microsandbox, and
@effect-uai/denohave no functional changes this release; they bump for
lockstep versioning only. -
602bfa9: -
GeminiTranscriberis removed. It rode on:generateContent(an
LLM with a "transcribe" prompt), not a real STT endpoint, with no native
word timestamps or diarization.GeminiTranscriber,
GeminiTranscribeRequest, andGeminiSttModelare deleted. Use
@effect-uai/openai,@effect-uai/elevenlabs, or@effect-uai/inworld
for transcription.- Gemini
toolChoiceis now mapped ontofunctionCallingConfig
(autoto AUTO,requiredto ANY,noneto NONE, a named function to
ANY plusallowedFunctionNames). It was previously forced to AUTO and
ignored. - Gemini
url-source images now failAiError.Unsupported(Gemini
needs them pre-uploaded via the Files API). They were silently dropped.
Pass base64 or raw bytes instead. GeminiSynthesizer:pronunciationsnow failUnsupported(no IPA
path);speedandlanguageCodenowwarnDroppedinstead of vanishing
silently.LyriaGenerator: returnsGenerateResultwith a composed
MusicResult;lyria-3-clip-preview(fixed at mp3, no format wire
field) now returns mp3 and reportsaudio.formathonestly instead of
rejectingcontainer: "wav"with a per-model error.
See Migrating to 0.7.
- Gemini
@effect-uai/inworld
Minor Changes
-
602bfa9: 0.7 is a capability-honesty pass across every audio and embedding
surface. The unifying rule: where a provider cannot honor a request, the
call now fails withAiError.Unsupported(load-bearing gaps) or emits a
structuredwarnDropped(best-effort hints), instead of silently
substituting a different result. Alongside that,Durationreplaces raw
durationSecondseverywhere audio carries a length, theMusicGenerator
surface is reshaped, an ElevenLabs music provider lands, and Gemini
toolChoiceis now mapped.Most of it is mechanical (find-and-replace renames plus a
Duration.seconds(n)wrap). The parts that need judgement are the
removedGeminiTranscriber(use OpenAI / ElevenLabs / Inworld instead)
and the requests that now error where they previously degraded silently.
The full before/after diffs and the recommended order live in
Migrating to 0.7.@effect-uai/anthropic,@effect-uai/microsandbox, and
@effect-uai/denohave no functional changes this release; they bump for
lockstep versioning only. -
602bfa9: -
InworldTranscriber:biasingTermsmaps to the Inworldprompts
field; the free-formpromptwarnDropped.- Realtime TTS:
pronunciationsnow failAiError.Unsupportedon the
realtime path (no inline IPA there). The syncInworldSynthesizerstill
supports inline IPA pronunciations unchanged.
See Migrating to 0.7.
- Realtime TTS:
@effect-uai/jina
Minor Changes
-
602bfa9: 0.7 is a capability-honesty pass across every audio and embedding
surface. The unifying rule: where a provider cannot honor a request, the
call now fails withAiError.Unsupported(load-bearing gaps) or emits a
structuredwarnDropped(best-effort hints), instead of silently
substituting a different result. Alongside that,Durationreplaces raw
durationSecondseverywhere audio carries a length, theMusicGenerator
surface is reshaped, an ElevenLabs music provider lands, and Gemini
toolChoiceis now mapped.Most of it is mechanical (find-and-replace renames plus a
Duration.seconds(n)wrap). The parts that need judgement are the
removedGeminiTranscriber(use OpenAI / ElevenLabs / Inworld instead)
and the requests that now error where they previously degraded silently.
The full before/after diffs and the recommended order live in
Migrating to 0.7.@effect-uai/anthropic,@effect-uai/microsandbox, and
@effect-uai/denohave no functional changes this release; they bump for
lockstep versioning only. -
602bfa9: - Embeddings (generic path): a scalar
int8encoding now fails
AiError.UnsupportedviaassertEncoding. Jina honorsfloat32and
binary(bit-quantized, packed into bytes), not scalar int8 per
dimension. The provider-typedJinaEmbeddingservice still accepts
JinaEncoding(float32/binary/sparse/multivector) on its
own surface.- Multi-part input now fails
AiError.Unsupported(was
InvalidRequest): Jina's flatinput[]cannot fuse a multi-part
content[]into one vector. Single-part text input is unchanged.
See Migrating to 0.7.
- Multi-part input now fails
@effect-uai/microsandbox
Minor Changes
-
602bfa9: 0.7 is a capability-honesty pass across every audio and embedding
surface. The unifying rule: where a provider cannot honor a request, the
call now fails withAiError.Unsupported(load-bearing gaps) or emits a
structuredwarnDropped(best-effort hints), instead of silently
substituting a different result. Alongside that,Durationreplaces raw
durationSecondseverywhere audio carries a length, theMusicGenerator
surface is reshaped, an ElevenLabs music provider lands, and Gemini
toolChoiceis now mapped.Most of it is mechanical (find-and-replace renames plus a
Duration.seconds(n)wrap). The parts that need judgement are the
removedGeminiTranscriber(use OpenAI / ElevenLabs / Inworld instead)
and the requests that now error where they previously degraded silently.
The full before/after diffs and the recommended order live in
Migrating to 0.7.@effect-uai/anthropic,@effect-uai/microsandbox, and
@effect-uai/denohave no functional changes this release; they bump for
lockstep versioning only.
@effect-uai/openai
Minor Changes
-
602bfa9: 0.7 is a capability-honesty pass across every audio and embedding
surface. The unifying rule: where a provider cannot honor a request, the
call now fails withAiError.Unsupported(load-bearing gaps) or emits a
structuredwarnDropped(best-effort hints), instead of silently
substituting a different result. Alongside that,Durationreplaces raw
durationSecondseverywhere audio carries a length, theMusicGenerator
surface is reshaped, an ElevenLabs music provider lands, and Gemini
toolChoiceis now mapped.Most of it is mechanical (find-and-replace renames plus a
Duration.seconds(n)wrap). The parts that need judgement are the
removedGeminiTranscriber(use OpenAI / ElevenLabs / Inworld instead)
and the requests that now error where they previously degraded silently.
The full before/after diffs and the recommended order live in
Migrating to 0.7.@effect-uai/anthropic,@effect-uai/microsandbox, and
@effect-uai/denohave no functional changes this release; they bump for
lockstep versioning only. -
602bfa9: -
OpenAITranscriber:diarizationis narrowed off
OpenAITranscribeRequest(OpenAI has no diarization). The proactive
per-modelwordTimestampsguard is removed: a non-whisper-1model now
surfaces the provider's wire 400 rather than a pre-sendUnsupported.
promptmaps to the OpenAI prompt field;biasingTermswarnDropped.OpenAISynthesizer:pronunciationsnow failAiError.Unsupported
(OpenAI has no phoneme field);languageCodenowwarnDropped(OpenAI
auto-detects).- Embeddings (generic path): a non-
float32encodingnow fails
Unsupportedinstead of returning a mislabeled float32 vector; image
input now failsUnsupported(wasInvalidRequest);tasknow
warnDropped.
See Migrating to 0.7.
@effect-uai/responses
Minor Changes
-
602bfa9: 0.7 is a capability-honesty pass across every audio and embedding
surface. The unifying rule: where a provider cannot honor a request, the
call now fails withAiError.Unsupported(load-bearing gaps) or emits a
structuredwarnDropped(best-effort hints), instead of silently
substituting a different result. Alongside that,Durationreplaces raw
durationSecondseverywhere audio carries a length, theMusicGenerator
surface is reshaped, an ElevenLabs music provider lands, and Gemini
toolChoiceis now mapped.Most of it is mechanical (find-and-replace renames plus a
Duration.seconds(n)wrap). The parts that need judgement are the
removedGeminiTranscriber(use OpenAI / ElevenLabs / Inworld instead)
and the requests that now error where they previously degraded silently.
The full before/after diffs and the recommended order live in
Migrating to 0.7.@effect-uai/anthropic,@effect-uai/microsandbox, and
@effect-uai/denohave no functional changes this release; they bump for
lockstep versioning only. -
602bfa9: -
OpenAIEmbedding: a non-float32encodingnow fails
AiError.UnsupportedviaassertEncodinginstead of returning a
mislabeled float32 vector; image input now failsUnsupported(was
InvalidRequest);tasknowwarnDropped(OpenAI embeddings have no
task field).See Migrating to 0.7.