Skip to content

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 07 Jun 19:24
· 11 commits to main since this release

@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 with AiError.Unsupported (load-bearing gaps) or emits a
    structured warnDropped (best-effort hints), instead of silently
    substituting a different result. Alongside that, Duration replaces raw
    durationSeconds everywhere audio carries a length, the MusicGenerator
    surface is reshaped, an ElevenLabs music provider lands, and Gemini
    toolChoice is now mapped.

    Most of it is mechanical (find-and-replace renames plus a
    Duration.seconds(n) wrap). The parts that need judgement are the
    removed GeminiTranscriber (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/deno have no functional changes this release; they bump for
    lockstep versioning only.

  • 602bfa9: Core domain and service reshape (audio, STT, TTS, embeddings):

    • Audio: AudioBlob.durationSeconds: number becomes
      duration?: Duration.Duration. The same rename flows through
      TranscriptResult (STT) and MusicResult (music).
    • Transcriber: CommonTranscribeRequest.prompt splits into
      prompt?: string (free-form prose context) and
      biasingTerms?: ReadonlyArray<string> (discrete vocabulary). The old
      { terms } union arm is gone. TranscriptResult.durationSeconds
      becomes duration. Stream inputFormat gaps now fail
      AiError.Unsupported instead of InvalidRequest.
    • SpeechSynthesizer: PhoneticEncoding and
      CustomPronunciation.encoding are removed (pronunciation is IPA-only).
      Pronunciations are load-bearing: a provider with no IPA path fails
      Unsupported rather than dropping them. DialogueTurn trims to
      { voiceId, text } (styleDescription / speed removed).
    • MusicGenerator: prompts becomes prompt (string), bpm / scale
      / instrumental dropped from CommonGenerateMusicRequest, MusicResult
      composes AudioBlob (result.audio.bytes), generate returns
      GenerateResult (primary + variants[]), streamGenerationFrom
      yields MusicStreamEvent, and MusicSessionInput drops the config
      variant.
    • EmbeddingModel: EmbedEncoding is trimmed to
      "float32" | "int8" | "binary" (the dense cross-provider request set);
      sparse / multivector move to the provider-typed JinaEncoding. New
      ResponseEncoding (the wider response union) parameterizes
      EmbedResponse<E> / EmbedManyResponse<E>. New exported assertEncoding
      guard validates an encoding against a provider's supported set and fails
      Unsupported instead of returning a mislabeled vector.
    • Additive: new @effect-uai/core/Capabilities module with
      warnDroppedWhen for structured bucket-2 warn-and-drop.

    See Migrating to 0.7.

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 with AiError.Unsupported (load-bearing gaps) or emits a
    structured warnDropped (best-effort hints), instead of silently
    substituting a different result. Alongside that, Duration replaces raw
    durationSeconds everywhere audio carries a length, the MusicGenerator
    surface is reshaped, an ElevenLabs music provider lands, and Gemini
    toolChoice is now mapped.

    Most of it is mechanical (find-and-replace renames plus a
    Duration.seconds(n) wrap). The parts that need judgement are the
    removed GeminiTranscriber (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/deno have 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 with AiError.Unsupported (load-bearing gaps) or emits a
    structured warnDropped (best-effort hints), instead of silently
    substituting a different result. Alongside that, Duration replaces raw
    durationSeconds everywhere audio carries a length, the MusicGenerator
    surface is reshaped, an ElevenLabs music provider lands, and Gemini
    toolChoice is now mapped.

    Most of it is mechanical (find-and-replace renames plus a
    Duration.seconds(n) wrap). The parts that need judgement are the
    removed GeminiTranscriber (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/deno have 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 with AiError.Unsupported (load-bearing gaps) or emits a
    structured warnDropped (best-effort hints), instead of silently
    substituting a different result. Alongside that, Duration replaces raw
    durationSeconds everywhere audio carries a length, the MusicGenerator
    surface is reshaped, an ElevenLabs music provider lands, and Gemini
    toolChoice is now mapped.

    Most of it is mechanical (find-and-replace renames plus a
    Duration.seconds(n) wrap). The parts that need judgement are the
    removed GeminiTranscriber (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/deno have 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 with AiError.Unsupported (load-bearing gaps) or emits a
    structured warnDropped (best-effort hints), instead of silently
    substituting a different result. Alongside that, Duration replaces raw
    durationSeconds everywhere audio carries a length, the MusicGenerator
    surface is reshaped, an ElevenLabs music provider lands, and Gemini
    toolChoice is now mapped.

    Most of it is mechanical (find-and-replace renames plus a
    Duration.seconds(n) wrap). The parts that need judgement are the
    removed GeminiTranscriber (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/deno have no functional changes this release; they bump for
    lockstep versioning only.

  • 602bfa9: - New @effect-uai/elevenlabs/ElevenLabsMusicGenerator (additive):
    ElevenLabs Music as a second MusicGenerator provider, with a typed
    extras surface (compositionPlan / forceInstrumental / signWithC2pa
    / respectSectionsDurations), a createCompositionPlan helper, and
    native chunked HTTP streaming. Does not register MusicInteractiveSession.

    • New pronunciationDictionaryLocators (additive) on the synthesize
      request: reference a pre-provisioned ElevenLabs pronunciation dictionary
      by id.
    • Inline pronunciations now fail AiError.Unsupported (ElevenLabs
      has no stateless inline IPA path). Use pronunciationDictionaryLocators
      instead.
    • ElevenLabsTranscriber: biasingTerms maps to keyterms; prompt
      warnDropped.

    See Migrating to 0.7.

@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 with AiError.Unsupported (load-bearing gaps) or emits a
    structured warnDropped (best-effort hints), instead of silently
    substituting a different result. Alongside that, Duration replaces raw
    durationSeconds everywhere audio carries a length, the MusicGenerator
    surface is reshaped, an ElevenLabs music provider lands, and Gemini
    toolChoice is now mapped.

    Most of it is mechanical (find-and-replace renames plus a
    Duration.seconds(n) wrap). The parts that need judgement are the
    removed GeminiTranscriber (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/deno have no functional changes this release; they bump for
    lockstep versioning only.

  • 602bfa9: - GeminiTranscriber is 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, and GeminiSttModel are deleted. Use
    @effect-uai/openai, @effect-uai/elevenlabs, or @effect-uai/inworld
    for transcription.

    • Gemini toolChoice is now mapped onto functionCallingConfig
      (auto to AUTO, required to ANY, none to NONE, a named function to
      ANY plus allowedFunctionNames). It was previously forced to AUTO and
      ignored.
    • Gemini url-source images now fail AiError.Unsupported (Gemini
      needs them pre-uploaded via the Files API). They were silently dropped.
      Pass base64 or raw bytes instead.
    • GeminiSynthesizer: pronunciations now fail Unsupported (no IPA
      path); speed and languageCode now warnDropped instead of vanishing
      silently.
    • LyriaGenerator: returns GenerateResult with a composed
      MusicResult; lyria-3-clip-preview (fixed at mp3, no format wire
      field) now returns mp3 and reports audio.format honestly instead of
      rejecting container: "wav" with a per-model error.

    See Migrating to 0.7.

@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 with AiError.Unsupported (load-bearing gaps) or emits a
    structured warnDropped (best-effort hints), instead of silently
    substituting a different result. Alongside that, Duration replaces raw
    durationSeconds everywhere audio carries a length, the MusicGenerator
    surface is reshaped, an ElevenLabs music provider lands, and Gemini
    toolChoice is now mapped.

    Most of it is mechanical (find-and-replace renames plus a
    Duration.seconds(n) wrap). The parts that need judgement are the
    removed GeminiTranscriber (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/deno have no functional changes this release; they bump for
    lockstep versioning only.

  • 602bfa9: - InworldTranscriber: biasingTerms maps to the Inworld prompts
    field; the free-form prompt warnDropped.

    • Realtime TTS: pronunciations now fail AiError.Unsupported on the
      realtime path (no inline IPA there). The sync InworldSynthesizer still
      supports inline IPA pronunciations unchanged.

    See Migrating to 0.7.

@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 with AiError.Unsupported (load-bearing gaps) or emits a
    structured warnDropped (best-effort hints), instead of silently
    substituting a different result. Alongside that, Duration replaces raw
    durationSeconds everywhere audio carries a length, the MusicGenerator
    surface is reshaped, an ElevenLabs music provider lands, and Gemini
    toolChoice is now mapped.

    Most of it is mechanical (find-and-replace renames plus a
    Duration.seconds(n) wrap). The parts that need judgement are the
    removed GeminiTranscriber (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/deno have no functional changes this release; they bump for
    lockstep versioning only.

  • 602bfa9: - Embeddings (generic path): a scalar int8 encoding now fails
    AiError.Unsupported via assertEncoding. Jina honors float32 and
    binary (bit-quantized, packed into bytes), not scalar int8 per
    dimension. The provider-typed JinaEmbedding service still accepts
    JinaEncoding (float32 / binary / sparse / multivector) on its
    own surface.

    • Multi-part input now fails AiError.Unsupported (was
      InvalidRequest): Jina's flat input[] cannot fuse a multi-part
      content[] into one vector. Single-part text input is unchanged.

    See Migrating to 0.7.

@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 with AiError.Unsupported (load-bearing gaps) or emits a
    structured warnDropped (best-effort hints), instead of silently
    substituting a different result. Alongside that, Duration replaces raw
    durationSeconds everywhere audio carries a length, the MusicGenerator
    surface is reshaped, an ElevenLabs music provider lands, and Gemini
    toolChoice is now mapped.

    Most of it is mechanical (find-and-replace renames plus a
    Duration.seconds(n) wrap). The parts that need judgement are the
    removed GeminiTranscriber (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/deno have 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 with AiError.Unsupported (load-bearing gaps) or emits a
    structured warnDropped (best-effort hints), instead of silently
    substituting a different result. Alongside that, Duration replaces raw
    durationSeconds everywhere audio carries a length, the MusicGenerator
    surface is reshaped, an ElevenLabs music provider lands, and Gemini
    toolChoice is now mapped.

    Most of it is mechanical (find-and-replace renames plus a
    Duration.seconds(n) wrap). The parts that need judgement are the
    removed GeminiTranscriber (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/deno have no functional changes this release; they bump for
    lockstep versioning only.

  • 602bfa9: - OpenAITranscriber: diarization is narrowed off
    OpenAITranscribeRequest (OpenAI has no diarization). The proactive
    per-model wordTimestamps guard is removed: a non-whisper-1 model now
    surfaces the provider's wire 400 rather than a pre-send Unsupported.
    prompt maps to the OpenAI prompt field; biasingTerms warnDropped.

    • OpenAISynthesizer: pronunciations now fail AiError.Unsupported
      (OpenAI has no phoneme field); languageCode now warnDropped (OpenAI
      auto-detects).
    • Embeddings (generic path): a non-float32 encoding now fails
      Unsupported instead of returning a mislabeled float32 vector; image
      input now fails Unsupported (was InvalidRequest); task now
      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 with AiError.Unsupported (load-bearing gaps) or emits a
    structured warnDropped (best-effort hints), instead of silently
    substituting a different result. Alongside that, Duration replaces raw
    durationSeconds everywhere audio carries a length, the MusicGenerator
    surface is reshaped, an ElevenLabs music provider lands, and Gemini
    toolChoice is now mapped.

    Most of it is mechanical (find-and-replace renames plus a
    Duration.seconds(n) wrap). The parts that need judgement are the
    removed GeminiTranscriber (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/deno have no functional changes this release; they bump for
    lockstep versioning only.

  • 602bfa9: - OpenAIEmbedding: a non-float32 encoding now fails
    AiError.Unsupported via assertEncoding instead of returning a
    mislabeled float32 vector; image input now fails Unsupported (was
    InvalidRequest); task now warnDropped (OpenAI embeddings have no
    task field).

    See Migrating to 0.7.