v0.5.2
@effect-uai/core
Patch Changes
-
1509883: Two related refactors. Both are breaking but mechanical — a one-line
rewrite per affected call site.Retryis its own moduleLanguageModel.retryandLanguageModel.Retryablewere not
LanguageModel-specific — the implementation was a genericAiError
combinator. Hoisted out into@effect-uai/core/Retry, with two
carriers so it covers every model surface:Retry.stream(schedule)— forStream<A, AiError, R>(streamTurn,
streamSynthesis,streamTranscriptionFrom).Retry.effect(schedule)— forEffect<A, AiError, R>(turn,
embed,embedMany,synthesize,transcribe).
Both gate on the
RateLimited | Unavailable | Timeoutsubset; other
AiErrors propagate unchanged. The namespace deliberately doesn't
shadow Effect's ownStream.retry/Effect.retry.// Before import { retry } from "@effect-uai/core/LanguageModel"; streamTurn(req).pipe(retry(schedule)); // After import * as Retry from "@effect-uai/core/Retry"; streamTurn(req).pipe(Retry.stream(schedule)); embed(req).pipe(Retry.effect(schedule));
RetryableandisRetryablemove to the same module.turnis now onLanguageModelServiceturn(request): Effect<Turn, AiError>is now a method on the service
alongsidestreamTurn. Providers without a native non-streaming
endpoint derive it fromstreamTurnvia the new
LanguageModel.turnFromStream(streamTurn)helper; providers with a
native complete endpoint can override.The top-level
LanguageModel.turn(request)helper is unchanged at
call sites — it now delegates to the service method instead of
drainingstreamTurninline.Hand-rolled
LanguageModelServicevalues (most commonly in tests)
must now supply aturnfield. UseturnFromStream:// Before const service: LanguageModelService = { streamTurn: () => Stream.fromIterable([...]), } // After import { turnFromStream } from "@effect-uai/core/LanguageModel" const streamTurn: LanguageModelService["streamTurn"] = () => Stream.fromIterable([...]) const service: LanguageModelService = { streamTurn, turn: turnFromStream(streamTurn) }
effect-uai
Patch Changes
-
1509883: Two related refactors. Both are breaking but mechanical — a one-line
rewrite per affected call site.Retryis its own moduleLanguageModel.retryandLanguageModel.Retryablewere not
LanguageModel-specific — the implementation was a genericAiError
combinator. Hoisted out into@effect-uai/core/Retry, with two
carriers so it covers every model surface:Retry.stream(schedule)— forStream<A, AiError, R>(streamTurn,
streamSynthesis,streamTranscriptionFrom).Retry.effect(schedule)— forEffect<A, AiError, R>(turn,
embed,embedMany,synthesize,transcribe).
Both gate on the
RateLimited | Unavailable | Timeoutsubset; other
AiErrors propagate unchanged. The namespace deliberately doesn't
shadow Effect's ownStream.retry/Effect.retry.// Before import { retry } from "@effect-uai/core/LanguageModel"; streamTurn(req).pipe(retry(schedule)); // After import * as Retry from "@effect-uai/core/Retry"; streamTurn(req).pipe(Retry.stream(schedule)); embed(req).pipe(Retry.effect(schedule));
RetryableandisRetryablemove to the same module.turnis now onLanguageModelServiceturn(request): Effect<Turn, AiError>is now a method on the service
alongsidestreamTurn. Providers without a native non-streaming
endpoint derive it fromstreamTurnvia the new
LanguageModel.turnFromStream(streamTurn)helper; providers with a
native complete endpoint can override.The top-level
LanguageModel.turn(request)helper is unchanged at
call sites — it now delegates to the service method instead of
drainingstreamTurninline.Hand-rolled
LanguageModelServicevalues (most commonly in tests)
must now supply aturnfield. UseturnFromStream:// Before const service: LanguageModelService = { streamTurn: () => Stream.fromIterable([...]), } // After import { turnFromStream } from "@effect-uai/core/LanguageModel" const streamTurn: LanguageModelService["streamTurn"] = () => Stream.fromIterable([...]) const service: LanguageModelService = { streamTurn, turn: turnFromStream(streamTurn) }
@effect-uai/anthropic
Patch Changes
-
1509883: Two related refactors. Both are breaking but mechanical — a one-line
rewrite per affected call site.Retryis its own moduleLanguageModel.retryandLanguageModel.Retryablewere not
LanguageModel-specific — the implementation was a genericAiError
combinator. Hoisted out into@effect-uai/core/Retry, with two
carriers so it covers every model surface:Retry.stream(schedule)— forStream<A, AiError, R>(streamTurn,
streamSynthesis,streamTranscriptionFrom).Retry.effect(schedule)— forEffect<A, AiError, R>(turn,
embed,embedMany,synthesize,transcribe).
Both gate on the
RateLimited | Unavailable | Timeoutsubset; other
AiErrors propagate unchanged. The namespace deliberately doesn't
shadow Effect's ownStream.retry/Effect.retry.// Before import { retry } from "@effect-uai/core/LanguageModel"; streamTurn(req).pipe(retry(schedule)); // After import * as Retry from "@effect-uai/core/Retry"; streamTurn(req).pipe(Retry.stream(schedule)); embed(req).pipe(Retry.effect(schedule));
RetryableandisRetryablemove to the same module.turnis now onLanguageModelServiceturn(request): Effect<Turn, AiError>is now a method on the service
alongsidestreamTurn. Providers without a native non-streaming
endpoint derive it fromstreamTurnvia the new
LanguageModel.turnFromStream(streamTurn)helper; providers with a
native complete endpoint can override.The top-level
LanguageModel.turn(request)helper is unchanged at
call sites — it now delegates to the service method instead of
drainingstreamTurninline.Hand-rolled
LanguageModelServicevalues (most commonly in tests)
must now supply aturnfield. UseturnFromStream:// Before const service: LanguageModelService = { streamTurn: () => Stream.fromIterable([...]), } // After import { turnFromStream } from "@effect-uai/core/LanguageModel" const streamTurn: LanguageModelService["streamTurn"] = () => Stream.fromIterable([...]) const service: LanguageModelService = { streamTurn, turn: turnFromStream(streamTurn) }
@effect-uai/elevenlabs
Patch Changes
-
1509883: Two related refactors. Both are breaking but mechanical — a one-line
rewrite per affected call site.Retryis its own moduleLanguageModel.retryandLanguageModel.Retryablewere not
LanguageModel-specific — the implementation was a genericAiError
combinator. Hoisted out into@effect-uai/core/Retry, with two
carriers so it covers every model surface:Retry.stream(schedule)— forStream<A, AiError, R>(streamTurn,
streamSynthesis,streamTranscriptionFrom).Retry.effect(schedule)— forEffect<A, AiError, R>(turn,
embed,embedMany,synthesize,transcribe).
Both gate on the
RateLimited | Unavailable | Timeoutsubset; other
AiErrors propagate unchanged. The namespace deliberately doesn't
shadow Effect's ownStream.retry/Effect.retry.// Before import { retry } from "@effect-uai/core/LanguageModel"; streamTurn(req).pipe(retry(schedule)); // After import * as Retry from "@effect-uai/core/Retry"; streamTurn(req).pipe(Retry.stream(schedule)); embed(req).pipe(Retry.effect(schedule));
RetryableandisRetryablemove to the same module.turnis now onLanguageModelServiceturn(request): Effect<Turn, AiError>is now a method on the service
alongsidestreamTurn. Providers without a native non-streaming
endpoint derive it fromstreamTurnvia the new
LanguageModel.turnFromStream(streamTurn)helper; providers with a
native complete endpoint can override.The top-level
LanguageModel.turn(request)helper is unchanged at
call sites — it now delegates to the service method instead of
drainingstreamTurninline.Hand-rolled
LanguageModelServicevalues (most commonly in tests)
must now supply aturnfield. UseturnFromStream:// Before const service: LanguageModelService = { streamTurn: () => Stream.fromIterable([...]), } // After import { turnFromStream } from "@effect-uai/core/LanguageModel" const streamTurn: LanguageModelService["streamTurn"] = () => Stream.fromIterable([...]) const service: LanguageModelService = { streamTurn, turn: turnFromStream(streamTurn) }
@effect-uai/google
Patch Changes
-
1509883: Two related refactors. Both are breaking but mechanical — a one-line
rewrite per affected call site.Retryis its own moduleLanguageModel.retryandLanguageModel.Retryablewere not
LanguageModel-specific — the implementation was a genericAiError
combinator. Hoisted out into@effect-uai/core/Retry, with two
carriers so it covers every model surface:Retry.stream(schedule)— forStream<A, AiError, R>(streamTurn,
streamSynthesis,streamTranscriptionFrom).Retry.effect(schedule)— forEffect<A, AiError, R>(turn,
embed,embedMany,synthesize,transcribe).
Both gate on the
RateLimited | Unavailable | Timeoutsubset; other
AiErrors propagate unchanged. The namespace deliberately doesn't
shadow Effect's ownStream.retry/Effect.retry.// Before import { retry } from "@effect-uai/core/LanguageModel"; streamTurn(req).pipe(retry(schedule)); // After import * as Retry from "@effect-uai/core/Retry"; streamTurn(req).pipe(Retry.stream(schedule)); embed(req).pipe(Retry.effect(schedule));
RetryableandisRetryablemove to the same module.turnis now onLanguageModelServiceturn(request): Effect<Turn, AiError>is now a method on the service
alongsidestreamTurn. Providers without a native non-streaming
endpoint derive it fromstreamTurnvia the new
LanguageModel.turnFromStream(streamTurn)helper; providers with a
native complete endpoint can override.The top-level
LanguageModel.turn(request)helper is unchanged at
call sites — it now delegates to the service method instead of
drainingstreamTurninline.Hand-rolled
LanguageModelServicevalues (most commonly in tests)
must now supply aturnfield. UseturnFromStream:// Before const service: LanguageModelService = { streamTurn: () => Stream.fromIterable([...]), } // After import { turnFromStream } from "@effect-uai/core/LanguageModel" const streamTurn: LanguageModelService["streamTurn"] = () => Stream.fromIterable([...]) const service: LanguageModelService = { streamTurn, turn: turnFromStream(streamTurn) }
@effect-uai/inworld
Patch Changes
-
1509883: Two related refactors. Both are breaking but mechanical — a one-line
rewrite per affected call site.Retryis its own moduleLanguageModel.retryandLanguageModel.Retryablewere not
LanguageModel-specific — the implementation was a genericAiError
combinator. Hoisted out into@effect-uai/core/Retry, with two
carriers so it covers every model surface:Retry.stream(schedule)— forStream<A, AiError, R>(streamTurn,
streamSynthesis,streamTranscriptionFrom).Retry.effect(schedule)— forEffect<A, AiError, R>(turn,
embed,embedMany,synthesize,transcribe).
Both gate on the
RateLimited | Unavailable | Timeoutsubset; other
AiErrors propagate unchanged. The namespace deliberately doesn't
shadow Effect's ownStream.retry/Effect.retry.// Before import { retry } from "@effect-uai/core/LanguageModel"; streamTurn(req).pipe(retry(schedule)); // After import * as Retry from "@effect-uai/core/Retry"; streamTurn(req).pipe(Retry.stream(schedule)); embed(req).pipe(Retry.effect(schedule));
RetryableandisRetryablemove to the same module.turnis now onLanguageModelServiceturn(request): Effect<Turn, AiError>is now a method on the service
alongsidestreamTurn. Providers without a native non-streaming
endpoint derive it fromstreamTurnvia the new
LanguageModel.turnFromStream(streamTurn)helper; providers with a
native complete endpoint can override.The top-level
LanguageModel.turn(request)helper is unchanged at
call sites — it now delegates to the service method instead of
drainingstreamTurninline.Hand-rolled
LanguageModelServicevalues (most commonly in tests)
must now supply aturnfield. UseturnFromStream:// Before const service: LanguageModelService = { streamTurn: () => Stream.fromIterable([...]), } // After import { turnFromStream } from "@effect-uai/core/LanguageModel" const streamTurn: LanguageModelService["streamTurn"] = () => Stream.fromIterable([...]) const service: LanguageModelService = { streamTurn, turn: turnFromStream(streamTurn) }
@effect-uai/jina
Patch Changes
-
1509883: Two related refactors. Both are breaking but mechanical — a one-line
rewrite per affected call site.Retryis its own moduleLanguageModel.retryandLanguageModel.Retryablewere not
LanguageModel-specific — the implementation was a genericAiError
combinator. Hoisted out into@effect-uai/core/Retry, with two
carriers so it covers every model surface:Retry.stream(schedule)— forStream<A, AiError, R>(streamTurn,
streamSynthesis,streamTranscriptionFrom).Retry.effect(schedule)— forEffect<A, AiError, R>(turn,
embed,embedMany,synthesize,transcribe).
Both gate on the
RateLimited | Unavailable | Timeoutsubset; other
AiErrors propagate unchanged. The namespace deliberately doesn't
shadow Effect's ownStream.retry/Effect.retry.// Before import { retry } from "@effect-uai/core/LanguageModel"; streamTurn(req).pipe(retry(schedule)); // After import * as Retry from "@effect-uai/core/Retry"; streamTurn(req).pipe(Retry.stream(schedule)); embed(req).pipe(Retry.effect(schedule));
RetryableandisRetryablemove to the same module.turnis now onLanguageModelServiceturn(request): Effect<Turn, AiError>is now a method on the service
alongsidestreamTurn. Providers without a native non-streaming
endpoint derive it fromstreamTurnvia the new
LanguageModel.turnFromStream(streamTurn)helper; providers with a
native complete endpoint can override.The top-level
LanguageModel.turn(request)helper is unchanged at
call sites — it now delegates to the service method instead of
drainingstreamTurninline.Hand-rolled
LanguageModelServicevalues (most commonly in tests)
must now supply aturnfield. UseturnFromStream:// Before const service: LanguageModelService = { streamTurn: () => Stream.fromIterable([...]), } // After import { turnFromStream } from "@effect-uai/core/LanguageModel" const streamTurn: LanguageModelService["streamTurn"] = () => Stream.fromIterable([...]) const service: LanguageModelService = { streamTurn, turn: turnFromStream(streamTurn) }
@effect-uai/openai
Patch Changes
-
1509883: Two related refactors. Both are breaking but mechanical — a one-line
rewrite per affected call site.Retryis its own moduleLanguageModel.retryandLanguageModel.Retryablewere not
LanguageModel-specific — the implementation was a genericAiError
combinator. Hoisted out into@effect-uai/core/Retry, with two
carriers so it covers every model surface:Retry.stream(schedule)— forStream<A, AiError, R>(streamTurn,
streamSynthesis,streamTranscriptionFrom).Retry.effect(schedule)— forEffect<A, AiError, R>(turn,
embed,embedMany,synthesize,transcribe).
Both gate on the
RateLimited | Unavailable | Timeoutsubset; other
AiErrors propagate unchanged. The namespace deliberately doesn't
shadow Effect's ownStream.retry/Effect.retry.// Before import { retry } from "@effect-uai/core/LanguageModel"; streamTurn(req).pipe(retry(schedule)); // After import * as Retry from "@effect-uai/core/Retry"; streamTurn(req).pipe(Retry.stream(schedule)); embed(req).pipe(Retry.effect(schedule));
RetryableandisRetryablemove to the same module.turnis now onLanguageModelServiceturn(request): Effect<Turn, AiError>is now a method on the service
alongsidestreamTurn. Providers without a native non-streaming
endpoint derive it fromstreamTurnvia the new
LanguageModel.turnFromStream(streamTurn)helper; providers with a
native complete endpoint can override.The top-level
LanguageModel.turn(request)helper is unchanged at
call sites — it now delegates to the service method instead of
drainingstreamTurninline.Hand-rolled
LanguageModelServicevalues (most commonly in tests)
must now supply aturnfield. UseturnFromStream:// Before const service: LanguageModelService = { streamTurn: () => Stream.fromIterable([...]), } // After import { turnFromStream } from "@effect-uai/core/LanguageModel" const streamTurn: LanguageModelService["streamTurn"] = () => Stream.fromIterable([...]) const service: LanguageModelService = { streamTurn, turn: turnFromStream(streamTurn) }
@effect-uai/responses
Patch Changes
-
1509883: Two related refactors. Both are breaking but mechanical — a one-line
rewrite per affected call site.Retryis its own moduleLanguageModel.retryandLanguageModel.Retryablewere not
LanguageModel-specific — the implementation was a genericAiError
combinator. Hoisted out into@effect-uai/core/Retry, with two
carriers so it covers every model surface:Retry.stream(schedule)— forStream<A, AiError, R>(streamTurn,
streamSynthesis,streamTranscriptionFrom).Retry.effect(schedule)— forEffect<A, AiError, R>(turn,
embed,embedMany,synthesize,transcribe).
Both gate on the
RateLimited | Unavailable | Timeoutsubset; other
AiErrors propagate unchanged. The namespace deliberately doesn't
shadow Effect's ownStream.retry/Effect.retry.// Before import { retry } from "@effect-uai/core/LanguageModel"; streamTurn(req).pipe(retry(schedule)); // After import * as Retry from "@effect-uai/core/Retry"; streamTurn(req).pipe(Retry.stream(schedule)); embed(req).pipe(Retry.effect(schedule));
RetryableandisRetryablemove to the same module.turnis now onLanguageModelServiceturn(request): Effect<Turn, AiError>is now a method on the service
alongsidestreamTurn. Providers without a native non-streaming
endpoint derive it fromstreamTurnvia the new
LanguageModel.turnFromStream(streamTurn)helper; providers with a
native complete endpoint can override.The top-level
LanguageModel.turn(request)helper is unchanged at
call sites — it now delegates to the service method instead of
drainingstreamTurninline.Hand-rolled
LanguageModelServicevalues (most commonly in tests)
must now supply aturnfield. UseturnFromStream:// Before const service: LanguageModelService = { streamTurn: () => Stream.fromIterable([...]), } // After import { turnFromStream } from "@effect-uai/core/LanguageModel" const streamTurn: LanguageModelService["streamTurn"] = () => Stream.fromIterable([...]) const service: LanguageModelService = { streamTurn, turn: turnFromStream(streamTurn) }