Skip to content

Commit d8607b6

Browse files
authored
refactor(ai): replace wildcard exports with an explicit public API (#59183)
1 parent 7359a48 commit d8607b6

31 files changed

Lines changed: 313 additions & 272 deletions

‎packages/ai/package.json‎

Lines changed: 105 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,111 @@
1818
".": "./src/index.ts",
1919
"./effect": "./src/effect.ts",
2020
"./testing": "./src/testing.ts",
21-
"./*": "./src/*.ts"
21+
"./experimental": "./src/experimental.ts",
22+
"./route": "./src/route.ts",
23+
"./providers": "./src/providers.ts",
24+
"./providers/alibaba": "./src/providers/alibaba.ts",
25+
"./providers/alibaba/chat": "./src/providers/alibaba/chat.ts",
26+
"./providers/alibaba/messages": "./src/providers/alibaba/messages.ts",
27+
"./providers/alibaba/responses": "./src/providers/alibaba/responses.ts",
28+
"./providers/amazon-bedrock": "./src/providers/amazon-bedrock.ts",
29+
"./providers/amazon-bedrock-mantle": "./src/providers/amazon-bedrock-mantle.ts",
30+
"./providers/amazon-bedrock/mantle": "./src/providers/amazon-bedrock/mantle.ts",
31+
"./providers/amazon-bedrock/mantle/chat": "./src/providers/amazon-bedrock/mantle/chat.ts",
32+
"./providers/amazon-bedrock/mantle/messages": "./src/providers/amazon-bedrock/mantle/messages.ts",
33+
"./providers/amazon-bedrock/mantle/responses": "./src/providers/amazon-bedrock/mantle/responses.ts",
34+
"./providers/anthropic": "./src/providers/anthropic.ts",
35+
"./providers/anthropic-compatible": "./src/providers/anthropic-compatible.ts",
36+
"./providers/assemblyai": "./src/providers/assemblyai.ts",
37+
"./providers/azure": "./src/providers/azure.ts",
38+
"./providers/azure/chat": "./src/providers/azure/chat.ts",
39+
"./providers/azure/responses": "./src/providers/azure/responses.ts",
40+
"./providers/baseten": "./src/providers/baseten.ts",
41+
"./providers/black-forest-labs": "./src/providers/black-forest-labs.ts",
42+
"./providers/cartesia": "./src/providers/cartesia.ts",
43+
"./providers/cerebras": "./src/providers/cerebras.ts",
44+
"./providers/cloudflare-ai-gateway": "./src/providers/cloudflare-ai-gateway.ts",
45+
"./providers/cloudflare-workers-ai": "./src/providers/cloudflare-workers-ai.ts",
46+
"./providers/cohere": "./src/providers/cohere.ts",
47+
"./providers/cohere/chat": "./src/providers/cohere/chat.ts",
48+
"./providers/deepgram": "./src/providers/deepgram.ts",
49+
"./providers/deepinfra": "./src/providers/deepinfra.ts",
50+
"./providers/deepseek": "./src/providers/deepseek.ts",
51+
"./providers/digitalocean": "./src/providers/digitalocean.ts",
52+
"./providers/elevenlabs": "./src/providers/elevenlabs.ts",
53+
"./providers/fal": "./src/providers/fal.ts",
54+
"./providers/fireworks": "./src/providers/fireworks.ts",
55+
"./providers/google": "./src/providers/google.ts",
56+
"./providers/google-vertex": "./src/providers/google-vertex.ts",
57+
"./providers/google-vertex-chat": "./src/providers/google-vertex-chat.ts",
58+
"./providers/google-vertex-interactions": "./src/providers/google-vertex-interactions.ts",
59+
"./providers/google-vertex-messages": "./src/providers/google-vertex-messages.ts",
60+
"./providers/google-vertex-mistral": "./src/providers/google-vertex-mistral.ts",
61+
"./providers/google-vertex-responses": "./src/providers/google-vertex-responses.ts",
62+
"./providers/google-vertex/chat": "./src/providers/google-vertex/chat.ts",
63+
"./providers/google-vertex/gemini": "./src/providers/google-vertex/gemini.ts",
64+
"./providers/google-vertex/interactions": "./src/providers/google-vertex/interactions.ts",
65+
"./providers/google-vertex/messages": "./src/providers/google-vertex/messages.ts",
66+
"./providers/google-vertex/mistral": "./src/providers/google-vertex/mistral.ts",
67+
"./providers/google-vertex/responses": "./src/providers/google-vertex/responses.ts",
68+
"./providers/google/interactions": "./src/providers/google/interactions.ts",
69+
"./providers/groq": "./src/providers/groq.ts",
70+
"./providers/meta": "./src/providers/meta.ts",
71+
"./providers/meta/chat": "./src/providers/meta/chat.ts",
72+
"./providers/meta/messages": "./src/providers/meta/messages.ts",
73+
"./providers/meta/responses": "./src/providers/meta/responses.ts",
74+
"./providers/minimax": "./src/providers/minimax.ts",
75+
"./providers/minimax/chat": "./src/providers/minimax/chat.ts",
76+
"./providers/minimax/messages": "./src/providers/minimax/messages.ts",
77+
"./providers/minimax/responses": "./src/providers/minimax/responses.ts",
78+
"./providers/mistral": "./src/providers/mistral.ts",
79+
"./providers/moonshot": "./src/providers/moonshot.ts",
80+
"./providers/moonshot/chat": "./src/providers/moonshot/chat.ts",
81+
"./providers/moonshot/messages": "./src/providers/moonshot/messages.ts",
82+
"./providers/moonshot/responses": "./src/providers/moonshot/responses.ts",
83+
"./providers/openai": "./src/providers/openai.ts",
84+
"./providers/openai-compatible": "./src/providers/openai-compatible.ts",
85+
"./providers/openai-compatible-responses": "./src/providers/openai-compatible-responses.ts",
86+
"./providers/openai-compatible/responses": "./src/providers/openai-compatible/responses.ts",
87+
"./providers/openai/chat": "./src/providers/openai/chat.ts",
88+
"./providers/openai/responses": "./src/providers/openai/responses.ts",
89+
"./providers/opencode": "./src/providers/opencode.ts",
90+
"./providers/openrouter": "./src/providers/openrouter.ts",
91+
"./providers/replicate": "./src/providers/replicate.ts",
92+
"./providers/runway": "./src/providers/runway.ts",
93+
"./providers/stability": "./src/providers/stability.ts",
94+
"./providers/togetherai": "./src/providers/togetherai.ts",
95+
"./providers/typesafe-ai": "./src/providers/typesafe-ai.ts",
96+
"./providers/venice": "./src/providers/venice.ts",
97+
"./providers/vercel-ai-gateway": "./src/providers/vercel-ai-gateway.ts",
98+
"./providers/vercel-ai-gateway/chat": "./src/providers/vercel-ai-gateway/chat.ts",
99+
"./providers/vercel-ai-gateway/messages": "./src/providers/vercel-ai-gateway/messages.ts",
100+
"./providers/vercel-ai-gateway/responses": "./src/providers/vercel-ai-gateway/responses.ts",
101+
"./providers/xai": "./src/providers/xai.ts",
102+
"./providers/zai": "./src/providers/zai.ts",
103+
"./providers/zai-coding-plan": "./src/providers/zai-coding-plan.ts",
104+
"./providers/zai-coding-plan/chat": "./src/providers/zai-coding-plan/chat.ts",
105+
"./providers/zai-coding-plan/messages": "./src/providers/zai-coding-plan/messages.ts",
106+
"./providers/zai-coding-plan/responses": "./src/providers/zai-coding-plan/responses.ts",
107+
"./providers/zai/chat": "./src/providers/zai/chat.ts",
108+
"./protocols": "./src/protocols.ts",
109+
"./protocols/alibaba-images": "./src/protocols/alibaba-images.ts",
110+
"./protocols/cloudflare-run-decisions": "./src/protocols/cloudflare-run-decisions.ts",
111+
"./protocols/cloudflare-workers-ai-images": "./src/protocols/cloudflare-workers-ai-images.ts",
112+
"./protocols/deepgram-transcription": "./src/protocols/deepgram-transcription.ts",
113+
"./protocols/google-images": "./src/protocols/google-images.ts",
114+
"./protocols/google-speech": "./src/protocols/google-speech.ts",
115+
"./protocols/google-transcription": "./src/protocols/google-transcription.ts",
116+
"./protocols/openai-chat": "./src/protocols/openai-chat.ts",
117+
"./protocols/openai-decisions": "./src/protocols/openai-decisions.ts",
118+
"./protocols/openai-images": "./src/protocols/openai-images.ts",
119+
"./protocols/openai-responses": "./src/protocols/openai-responses.ts",
120+
"./protocols/openai-speech": "./src/protocols/openai-speech.ts",
121+
"./protocols/openai-transcription": "./src/protocols/openai-transcription.ts",
122+
"./protocols/system-one": "./src/protocols/system-one.ts",
123+
"./protocols/xai-images": "./src/protocols/xai-images.ts",
124+
"./protocols/xai-video": "./src/protocols/xai-video.ts",
125+
"./protocols/zai-images": "./src/protocols/zai-images.ts"
22126
},
23127
"devDependencies": {
24128
"@clack/prompts": "1.0.0-alpha.1",

‎packages/ai/src/effect.ts‎

Lines changed: 101 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,109 @@ export { AIClient } from "./ai-client.js"
22
export { LLMClient } from "./route/client.js"
33
export { ImageClient } from "./image-client.js"
44
export { Auth } from "./route/auth.js"
5-
export { Provider } from "./provider.js"
65
export { ProviderPackage } from "./provider-package.js"
76
export { isContextOverflow, isContextOverflowFailure, isRetryable } from "./provider-error.js"
7+
export type { Interface as LLMClientShape, LLMClientService } from "./route/client.js"
8+
export {
9+
ProtocolID,
10+
RouteID,
11+
ModelID,
12+
ProviderID,
13+
ResponseID,
14+
ContentBlockID,
15+
ToolCallID,
16+
JsonSchema,
17+
ProviderOptions,
18+
ProviderMetadata,
19+
HttpTimeout,
20+
RequestEncoding,
21+
HttpOptions,
22+
GenerationOptions,
23+
LanguageModelDefaults,
24+
ReasoningEfforts,
25+
ReasoningEffort,
26+
LanguageModelCompatibility,
27+
LanguageModel,
28+
LanguageModelSchema,
29+
CacheTTL,
30+
CacheHint,
31+
CachePolicyObject,
32+
CachePolicy,
33+
MessageRole,
34+
SystemPart,
35+
TextPart,
36+
MediaPart,
37+
ToolResultValue,
38+
ToolOutput,
39+
ToolCallPart,
40+
ToolResultPart,
41+
ReasoningPart,
42+
CompactionPart,
43+
EffortPart,
44+
ContentPart,
45+
Message,
46+
ToolDefinition,
47+
ToolNamespace,
48+
ToolEntry,
49+
ToolChoice,
50+
LLMRequest,
51+
FinishReason,
52+
Usage,
53+
MediaUsage,
54+
CompactionResponse,
55+
CompactionCheckpointResponse,
56+
StepStart,
57+
TextStart,
58+
TextDelta,
59+
TextEnd,
60+
ReasoningStart,
61+
ReasoningDelta,
62+
ReasoningEnd,
63+
ToolInputStart,
64+
ToolInputDelta,
65+
ToolInputEnd,
66+
ToolInputError,
67+
ToolCall,
68+
ToolResult,
69+
ToolError,
70+
FinishReasonDetails,
71+
StepFinish,
72+
Finish,
73+
MediaEvent,
74+
ProviderErrorEvent,
75+
LLMEvent,
76+
LLMResponse,
77+
HttpContext,
78+
HttpRateLimitDetails,
79+
InvalidRequestError,
80+
UnsupportedOperationError,
81+
ProviderConfigurationError,
82+
NoRouteError,
83+
AuthenticationError,
84+
RateLimitError,
85+
QuotaExceededError,
86+
ContentPolicyError,
87+
ProviderInternalError,
88+
TransportType,
89+
TransportOperation,
90+
TransportError,
91+
InvalidProviderOutputError,
92+
UnknownProviderError,
93+
TimeoutError,
94+
AIErrorReason,
95+
AIError,
96+
} from "./schema/index.js"
897
export type {
9-
RouteLanguageModelInput,
10-
RouteRoutedLanguageModelInput,
11-
Interface as LLMClientShape,
12-
LLMClientService,
13-
} from "./route/client.js"
14-
export * from "./schema/index.js"
98+
GenerationOptionsFields,
99+
GenerationOptionsInput,
100+
LanguageModelInput,
101+
LanguageModelProviderOptions,
102+
ToolDefinitionInput,
103+
ToolNamespaceInput,
104+
ToolNamespaceEntryInput,
105+
ToolEntryInput,
106+
UsageInput,
107+
} from "./schema/index.js"
15108
export { ImageAspectRatio, ImageEvent, ImageModel, ImageModelSchema, ImageRequest, ImageResponse } from "./image.js"
16109
export type {
17110
ImageModelOptions,
@@ -125,7 +218,7 @@ export type {
125218
Snapshot as GenerationSnapshot,
126219
Status as GenerationStatus,
127220
} from "./generation.js"
128-
export { Tool, ToolFailure, toDefinitions } from "./tool.js"
221+
export { Tool, ToolFailure, emptyInputJsonSchema, toDefinitions } from "./tool.js"
129222
export { ToolRuntime } from "./tool-runtime.js"
130223
export type { DispatchResult as ToolDispatchResult, ToolSettlement } from "./tool-runtime.js"
131224
export type {
@@ -142,11 +235,6 @@ export type {
142235
ToolToModelOutput,
143236
} from "./tool.js"
144237
export * as LLM from "./llm.js"
145-
export type {
146-
Definition as ProviderDefinition,
147-
LanguageModelFactory as ProviderLanguageModelFactory,
148-
LanguageModelOptions as ProviderLanguageModelOptions,
149-
} from "./provider.js"
150238
export type {
151239
Definition as ProviderPackageDefinition,
152240
Settings as ProviderPackageSettings,

‎packages/ai/src/provider.ts‎

Lines changed: 0 additions & 36 deletions
This file was deleted.

‎packages/ai/src/providers/openai.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { OpenAISpeech } from "../protocols/openai-speech.js"
1818
import { OpenAITranscription } from "../protocols/openai-transcription.js"
1919
import { OpenAIDecisions, type OptionsInput as OpenAIDecisionOptionsInput } from "../protocols/openai-decisions.js"
2020

21-
export type { OpenAIOptionsInput, OpenAIResponseIncludable } from "./openai-options.js"
21+
export type { OpenAIOptionsInput, OpenAIResponseIncludable, OpenAIServiceTier } from "./openai-options.js"
2222
export type { OpenAIImageOptions } from "../protocols/openai-images.js"
2323
export type { OpenAISpeechOptions } from "../protocols/openai-speech.js"
2424
export type { OpenAITranscriptionOptions } from "../protocols/openai-transcription.js"

‎packages/ai/src/route/client.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -592,7 +592,7 @@ const compile = Effect.fn("LLM.compile")(function* (request: LLMRequest, options
592592
}
593593
})
594594

595-
/** @internal Test-only projection of the execution compiler; not exported from package barrels. */
595+
/** Test-only projection of the execution compiler; exported from `@opencode/ai/testing`. */
596596
export const compileRequest = Effect.fn("LLM.compileRequest")(function* (request: LLMRequest) {
597597
const compiled = yield* compile(request)
598598
return {

‎packages/ai/src/route/executor.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { classifyProviderFailure, providerErrorMessage } from "../provider-error
1212
import { headerDetails, responseHttp, Service, type HttpMiddleware, type Interface } from "./executor-service.js"
1313

1414
export { responseHttp, Service } from "./executor-service.js"
15-
export type { HttpHandler, HttpMiddleware, Interface } from "./executor-service.js"
15+
export type { HttpHandler, HttpMiddleware, Interface, RequestExecutorService } from "./executor-service.js"
1616

1717
const normalizedHeaders = (headers: Headers.Headers) =>
1818
Object.fromEntries(Object.entries(headers).map(([key, value]) => [key.toLowerCase(), value]))

‎packages/ai/src/route/index.ts‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ export { Framing } from "./framing.js"
2626
export { Protocol } from "./protocol.js"
2727
export { HttpTransport, WebSocketTransport } from "./transport/index.js"
2828
export * as Transport from "./transport/index.js"
29+
export { ProviderShared } from "../protocols/shared.js"
30+
export { classifyProviderFailure } from "../provider-error.js"
31+
export { mergeHttpOptions } from "../schema/index.js"
2932
export type { Definition as AuthShape, AuthInput, Credential, CredentialError } from "./auth.js"
3033
export type { ApiKeyMode, AuthOverride, ProviderAuthOption } from "./auth-options.js"
3134
export type { Definition as EndpointFn, EndpointInput } from "./endpoint.js"

0 commit comments

Comments
 (0)