@juspay/neurolink 9.65.2 → 9.67.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +12 -12
  3. package/dist/avatar/index.d.ts +13 -0
  4. package/dist/avatar/index.js +72 -0
  5. package/dist/browser/neurolink.min.js +355 -347
  6. package/dist/cli/commands/proxy.js +154 -5
  7. package/dist/core/baseProvider.js +49 -8
  8. package/dist/factories/providerRegistry.js +23 -0
  9. package/dist/index.d.ts +10 -1
  10. package/dist/index.js +36 -1
  11. package/dist/lib/avatar/index.d.ts +13 -0
  12. package/dist/lib/avatar/index.js +72 -0
  13. package/dist/lib/core/baseProvider.js +49 -8
  14. package/dist/lib/factories/providerRegistry.js +23 -0
  15. package/dist/lib/files/fileTools.d.ts +1 -1
  16. package/dist/lib/index.d.ts +10 -1
  17. package/dist/lib/index.js +36 -1
  18. package/dist/lib/music/index.d.ts +14 -0
  19. package/dist/lib/music/index.js +80 -0
  20. package/dist/lib/proxy/modelRouter.d.ts +5 -1
  21. package/dist/lib/proxy/modelRouter.js +8 -0
  22. package/dist/lib/proxy/openaiFormat.d.ts +137 -0
  23. package/dist/lib/proxy/openaiFormat.js +801 -0
  24. package/dist/lib/proxy/proxyTranslationEngine.d.ts +124 -0
  25. package/dist/lib/proxy/proxyTranslationEngine.js +679 -0
  26. package/dist/lib/server/routes/claudeProxyRoutes.d.ts +6 -5
  27. package/dist/lib/server/routes/claudeProxyRoutes.js +22 -355
  28. package/dist/lib/server/routes/index.d.ts +1 -0
  29. package/dist/lib/server/routes/index.js +10 -2
  30. package/dist/lib/server/routes/openaiProxyRoutes.d.ts +30 -0
  31. package/dist/lib/server/routes/openaiProxyRoutes.js +337 -0
  32. package/dist/lib/types/avatar.d.ts +8 -1
  33. package/dist/lib/types/multimodal.d.ts +20 -7
  34. package/dist/lib/types/music.d.ts +8 -1
  35. package/dist/lib/types/proxy.d.ts +179 -0
  36. package/dist/lib/types/server.d.ts +3 -0
  37. package/dist/lib/types/tts.d.ts +9 -1
  38. package/dist/lib/utils/avatarProcessor.d.ts +7 -1
  39. package/dist/lib/utils/avatarProcessor.js +6 -0
  40. package/dist/lib/utils/musicProcessor.d.ts +7 -1
  41. package/dist/lib/utils/musicProcessor.js +6 -0
  42. package/dist/lib/utils/parameterValidation.js +5 -1
  43. package/dist/lib/utils/sttProcessor.d.ts +5 -3
  44. package/dist/lib/utils/sttProcessor.js +4 -2
  45. package/dist/lib/utils/ttsProcessor.d.ts +6 -3
  46. package/dist/lib/utils/ttsProcessor.js +5 -2
  47. package/dist/lib/voice/RealtimeVoiceAPI.d.ts +5 -2
  48. package/dist/lib/voice/RealtimeVoiceAPI.js +4 -1
  49. package/dist/lib/voice/index.d.ts +23 -0
  50. package/dist/lib/voice/index.js +124 -2
  51. package/dist/lib/voice/providers/CartesiaTTS.d.ts +31 -0
  52. package/dist/lib/voice/providers/CartesiaTTS.js +189 -0
  53. package/dist/lib/workflow/config.d.ts +3 -3
  54. package/dist/music/index.d.ts +14 -0
  55. package/dist/music/index.js +80 -0
  56. package/dist/proxy/modelRouter.d.ts +5 -1
  57. package/dist/proxy/modelRouter.js +8 -0
  58. package/dist/proxy/openaiFormat.d.ts +137 -0
  59. package/dist/proxy/openaiFormat.js +800 -0
  60. package/dist/proxy/proxyTranslationEngine.d.ts +124 -0
  61. package/dist/proxy/proxyTranslationEngine.js +678 -0
  62. package/dist/server/routes/claudeProxyRoutes.d.ts +6 -5
  63. package/dist/server/routes/claudeProxyRoutes.js +22 -355
  64. package/dist/server/routes/index.d.ts +1 -0
  65. package/dist/server/routes/index.js +10 -2
  66. package/dist/server/routes/openaiProxyRoutes.d.ts +30 -0
  67. package/dist/server/routes/openaiProxyRoutes.js +336 -0
  68. package/dist/types/avatar.d.ts +8 -1
  69. package/dist/types/multimodal.d.ts +20 -7
  70. package/dist/types/music.d.ts +8 -1
  71. package/dist/types/proxy.d.ts +179 -0
  72. package/dist/types/server.d.ts +3 -0
  73. package/dist/types/tts.d.ts +9 -1
  74. package/dist/utils/avatarProcessor.d.ts +7 -1
  75. package/dist/utils/avatarProcessor.js +6 -0
  76. package/dist/utils/musicProcessor.d.ts +7 -1
  77. package/dist/utils/musicProcessor.js +6 -0
  78. package/dist/utils/parameterValidation.js +5 -1
  79. package/dist/utils/sttProcessor.d.ts +5 -3
  80. package/dist/utils/sttProcessor.js +4 -2
  81. package/dist/utils/ttsProcessor.d.ts +6 -3
  82. package/dist/utils/ttsProcessor.js +5 -2
  83. package/dist/voice/RealtimeVoiceAPI.d.ts +5 -2
  84. package/dist/voice/RealtimeVoiceAPI.js +4 -1
  85. package/dist/voice/index.d.ts +23 -0
  86. package/dist/voice/index.js +124 -2
  87. package/dist/voice/providers/CartesiaTTS.d.ts +31 -0
  88. package/dist/voice/providers/CartesiaTTS.js +188 -0
  89. package/package.json +65 -2
@@ -33,7 +33,6 @@
33
33
  */
34
34
  import { AIProviderFactory } from "./core/factory.js";
35
35
  export { AIProviderFactory };
36
- export { GoogleTTSHandler } from "./adapters/tts/googleTTSHandler.js";
37
36
  export { NeuroLinkConfigManager as ConfigManager } from "./config/configManager.js";
38
37
  export { BaseFactory, BaseRegistry, NeuroLinkFeatureError, createErrorFactory, withRetry, TypedEventEmitter, } from "./core/infrastructure/index.js";
39
38
  export { NeuroLinkClient, createClient, NeuroLinkApiError, NeuroLinkLanguageModel, NeuroLinkAIProvider, createNeuroLinkProvider, createNeuroLinkModel, createStreamingResponse, neurolink as neuroLinkAIInstance, createApiKeyAuthInterceptor, createBearerAuthInterceptor, createDynamicAuthInterceptor, createLoggingInterceptor, createRetryInterceptor, createRateLimitInterceptor, createRequestTransformInterceptor, createResponseTransformInterceptor, createCacheInterceptor, createTimeoutInterceptor, createErrorHandlerInterceptor, composeMiddleware, conditionalMiddleware, SSEClient, WebSocketStreamingClient, createStreamingClient, createAsyncStream, collectStream, OAuth2TokenManager, JWTTokenManager, createApiKeyMiddleware, createBearerTokenMiddleware, createTokenManagerMiddleware, createAuthWithRetryMiddleware, createMultiAuthMiddleware, OAuth2Error, OAuth2AuthError, TokenRefreshError, decodeJWTPayload, isJWTExpired, getJWTExpiry, getApiKeyFromEnv, ErrorCode as ClientErrorCode, NeuroLinkError as ClientNeuroLinkError, HttpError, ClientRateLimitError, ClientValidationError, ClientAuthenticationError, ClientAuthorizationError, NotFoundError, ClientNetworkError, ClientTimeoutError, ClientConnectionError, AbortError, ClientConfigurationError, StreamError, ClientProviderError, ContextLengthError, ContentFilterError, createErrorFromResponse, createErrorFromNative, mapStatusToErrorCode, isRetryableStatus, isRetryableError, isNeuroLinkError, isApiError, } from "./client/index.js";
@@ -52,6 +51,16 @@ export { AvatarProcessor } from "./utils/avatarProcessor.js";
52
51
  export { AVATAR_ERROR_CODES, AvatarError } from "./utils/avatarProcessor.js";
53
52
  export { MusicProcessor } from "./utils/musicProcessor.js";
54
53
  export { MUSIC_ERROR_CODES, MusicError } from "./utils/musicProcessor.js";
54
+ export { STTProcessor } from "./utils/sttProcessor.js";
55
+ export { AzureTTS, AzureTTSHandler, CartesiaTTS, CartesiaTTSHandler, ElevenLabsTTS, ElevenLabsTTSHandler, FishAudioTTS, FishAudioTTSHandler, GoogleTTSHandler, OpenAITTS, OpenAITTSHandler, AzureSTT, AzureSTTHandler, DeepgramSTT, DeepgramSTTHandler, GoogleSTT, GoogleSTTHandler, OpenAISTT, OpenAISTTHandler, WhisperSTT, WhisperSTTHandler, BaseRealtimeHandler, GeminiLive, GeminiLiveHandler, OpenAIRealtime, OpenAIRealtimeHandler, RealtimeProcessor, RealtimeError, STTError, VoiceError, registerDefaultRealtimeHandlers, registerDefaultSTTHandlers, registerDefaultTTSHandlers, } from "./voice/index.js";
56
+ export { BeatovenMusic, BeatovenMusicHandler, ElevenLabsMusic, ElevenLabsMusicHandler, LyriaMusic, LyriaMusicHandler, registerDefaultMusicHandlers, ReplicateMusic, ReplicateMusicHandler, } from "./music/index.js";
57
+ export { DIDAvatar, DIDAvatarHandler, HeyGenAvatar, HeyGenAvatarHandler, registerDefaultAvatarHandlers, ReplicateAvatar, ReplicateAvatarHandler, } from "./avatar/index.js";
58
+ export { KlingVideoHandler } from "./adapters/video/klingVideoHandler.js";
59
+ export { ReplicateVideoHandler } from "./adapters/video/replicateVideoHandler.js";
60
+ export { RunwayVideoHandler } from "./adapters/video/runwayVideoHandler.js";
61
+ export { VertexVideoHandler, isVertexVideoConfigured, } from "./adapters/video/vertexVideoHandler.js";
62
+ export { ImageGenService } from "./image-gen/ImageGenService.js";
63
+ export { HITLManager } from "./hitl/hitlManager.js";
55
64
  export { ProviderRegistry } from "./factories/providerRegistry.js";
56
65
  import { NeuroLink } from "./neurolink.js";
57
66
  export { NeuroLink };
package/dist/lib/index.js CHANGED
@@ -34,7 +34,6 @@
34
34
  // Core exports
35
35
  import { AIProviderFactory } from "./core/factory.js";
36
36
  export { AIProviderFactory };
37
- export { GoogleTTSHandler } from "./adapters/tts/googleTTSHandler.js";
38
37
  // Config Manager export
39
38
  export { NeuroLinkConfigManager as ConfigManager } from "./config/configManager.js";
40
39
  // Core Infrastructure exports (factory + registry patterns)
@@ -81,6 +80,42 @@ export { AVATAR_ERROR_CODES, AvatarError } from "./utils/avatarProcessor.js";
81
80
  // Music utilities
82
81
  export { MusicProcessor } from "./utils/musicProcessor.js";
83
82
  export { MUSIC_ERROR_CODES, MusicError } from "./utils/musicProcessor.js";
83
+ // STT / Realtime processors (registries for speech-to-text + live voice)
84
+ export { STTProcessor } from "./utils/sttProcessor.js";
85
+ // STT_ERROR_CODES is surfaced via the types barrel (export * from "./types/index.js")
86
+ // STTError is re-exported below from the voice/index.js barrel
87
+ // ============================================================================
88
+ // MEDIA HANDLER CLASSES + AUTO-REGISTRATION
89
+ // ============================================================================
90
+ // Re-exporting from the voice/music/avatar barrels also triggers their
91
+ // module-level auto-registration side effects. Consumers who follow the
92
+ // documented `nl.generate(...)` flow get every shipped handler whose API
93
+ // key is present in process.env, with no manual registerHandler() needed.
94
+ // TTS, STT, Realtime handlers + RealtimeProcessor
95
+ export {
96
+ // TTS
97
+ AzureTTS, AzureTTSHandler, CartesiaTTS, CartesiaTTSHandler, ElevenLabsTTS, ElevenLabsTTSHandler, FishAudioTTS, FishAudioTTSHandler, GoogleTTSHandler, OpenAITTS, OpenAITTSHandler,
98
+ // STT
99
+ AzureSTT, AzureSTTHandler, DeepgramSTT, DeepgramSTTHandler, GoogleSTT, GoogleSTTHandler, OpenAISTT, OpenAISTTHandler, WhisperSTT, WhisperSTTHandler,
100
+ // Realtime
101
+ BaseRealtimeHandler, GeminiLive, GeminiLiveHandler, OpenAIRealtime, OpenAIRealtimeHandler, RealtimeProcessor,
102
+ // Voice error classes (RealtimeError + STTError + VoiceError)
103
+ RealtimeError, STTError, VoiceError,
104
+ // Auto-registration functions (exposed so consumers can re-run them
105
+ // after mutating process.env at runtime, e.g. in test setups)
106
+ registerDefaultRealtimeHandlers, registerDefaultSTTHandlers, registerDefaultTTSHandlers, } from "./voice/index.js";
107
+ // Music handlers
108
+ export { BeatovenMusic, BeatovenMusicHandler, ElevenLabsMusic, ElevenLabsMusicHandler, LyriaMusic, LyriaMusicHandler, registerDefaultMusicHandlers, ReplicateMusic, ReplicateMusicHandler, } from "./music/index.js";
109
+ // Avatar handlers
110
+ export { DIDAvatar, DIDAvatarHandler, HeyGenAvatar, HeyGenAvatarHandler, registerDefaultAvatarHandlers, ReplicateAvatar, ReplicateAvatarHandler, } from "./avatar/index.js";
111
+ // Video handlers (live under adapters/video; no separate video/ barrel)
112
+ export { KlingVideoHandler } from "./adapters/video/klingVideoHandler.js";
113
+ export { ReplicateVideoHandler } from "./adapters/video/replicateVideoHandler.js";
114
+ export { RunwayVideoHandler } from "./adapters/video/runwayVideoHandler.js";
115
+ export { VertexVideoHandler, isVertexVideoConfigured, } from "./adapters/video/vertexVideoHandler.js";
116
+ // Image generation + HITL — surfaced from their dedicated barrels
117
+ export { ImageGenService } from "./image-gen/ImageGenService.js";
118
+ export { HITLManager } from "./hitl/hitlManager.js";
84
119
  // Provider registry (for tests, advanced consumers, and tools that need to
85
120
  // invoke registerAllProviders() outside of constructing a NeuroLink instance)
86
121
  export { ProviderRegistry } from "./factories/providerRegistry.js";
@@ -7,7 +7,21 @@
7
7
  * Use `MusicProcessor.generate(provider, options)` to dispatch to the
8
8
  * registered handler for `provider`.
9
9
  *
10
+ * Importing this module also auto-registers every shipped music handler
11
+ * whose backing API key is present in `process.env`. Registration is
12
+ * idempotent and silently skipped if a provider is already registered or
13
+ * its constructor throws (e.g. missing optional native dependency).
14
+ *
10
15
  * @module music
11
16
  */
12
17
  export { MUSIC_ERROR_CODES, MusicError, MusicProcessor, } from "../utils/musicProcessor.js";
13
18
  export { BeatovenMusic, BeatovenMusic as BeatovenMusicHandler, } from "./providers/BeatovenMusic.js";
19
+ export { ElevenLabsMusic, ElevenLabsMusic as ElevenLabsMusicHandler, } from "./providers/ElevenLabsMusic.js";
20
+ export { LyriaMusic, LyriaMusic as LyriaMusicHandler, } from "./providers/LyriaMusic.js";
21
+ export { ReplicateMusic, ReplicateMusic as ReplicateMusicHandler, } from "./providers/ReplicateMusic.js";
22
+ /**
23
+ * Register every shipped music handler whose backing credentials are
24
+ * present in the environment. Safe to call multiple times — existing
25
+ * registrations are preserved.
26
+ */
27
+ export declare function registerDefaultMusicHandlers(): void;
@@ -7,8 +7,88 @@
7
7
  * Use `MusicProcessor.generate(provider, options)` to dispatch to the
8
8
  * registered handler for `provider`.
9
9
  *
10
+ * Importing this module also auto-registers every shipped music handler
11
+ * whose backing API key is present in `process.env`. Registration is
12
+ * idempotent and silently skipped if a provider is already registered or
13
+ * its constructor throws (e.g. missing optional native dependency).
14
+ *
10
15
  * @module music
11
16
  */
17
+ import { logger } from "../utils/logger.js";
18
+ import { MusicProcessor } from "../utils/musicProcessor.js";
12
19
  export { MUSIC_ERROR_CODES, MusicError, MusicProcessor, } from "../utils/musicProcessor.js";
20
+ // ============================================================================
21
+ // HANDLER CLASSES
22
+ // ============================================================================
13
23
  export { BeatovenMusic, BeatovenMusic as BeatovenMusicHandler, } from "./providers/BeatovenMusic.js";
24
+ export { ElevenLabsMusic, ElevenLabsMusic as ElevenLabsMusicHandler, } from "./providers/ElevenLabsMusic.js";
25
+ export { LyriaMusic, LyriaMusic as LyriaMusicHandler, } from "./providers/LyriaMusic.js";
26
+ export { ReplicateMusic, ReplicateMusic as ReplicateMusicHandler, } from "./providers/ReplicateMusic.js";
27
+ // ============================================================================
28
+ // AUTO-REGISTRATION
29
+ // ============================================================================
30
+ import { BeatovenMusic } from "./providers/BeatovenMusic.js";
31
+ import { ElevenLabsMusic } from "./providers/ElevenLabsMusic.js";
32
+ import { LyriaMusic } from "./providers/LyriaMusic.js";
33
+ import { ReplicateMusic } from "./providers/ReplicateMusic.js";
34
+ const MUSIC_HANDLER_CANDIDATES = [
35
+ { name: "beatoven", factory: () => new BeatovenMusic() },
36
+ {
37
+ name: "elevenlabs-music",
38
+ aliases: ["elevenlabs-sound"],
39
+ factory: () => new ElevenLabsMusic(),
40
+ },
41
+ { name: "lyria", factory: () => new LyriaMusic() },
42
+ {
43
+ name: "replicate",
44
+ aliases: ["musicgen"],
45
+ factory: () => new ReplicateMusic(),
46
+ },
47
+ ];
48
+ /**
49
+ * Register every shipped music handler whose backing credentials are
50
+ * present in the environment. Safe to call multiple times — existing
51
+ * registrations are preserved.
52
+ */
53
+ export function registerDefaultMusicHandlers() {
54
+ for (const { name, aliases, factory } of MUSIC_HANDLER_CANDIDATES) {
55
+ // Compute missingName / missingAliases separately so a pre-registered
56
+ // primary doesn't block alias backfill — keeps "musicgen" reachable
57
+ // when only "replicate" was wired up via another path (and likewise
58
+ // "elevenlabs-sound" vs "elevenlabs-music").
59
+ const missingName = !MusicProcessor.supports(name);
60
+ const missingAliases = (aliases ?? []).filter((alias) => !MusicProcessor.supports(alias));
61
+ if (!missingName && missingAliases.length === 0) {
62
+ continue;
63
+ }
64
+ try {
65
+ // Reuse the already-registered primary's handler for alias backfill
66
+ // when one exists — wiring an alias to a factory-fresh instance
67
+ // would silently diverge from the canonical primary's config.
68
+ let handler;
69
+ if (!missingName) {
70
+ handler = MusicProcessor.getHandler(name);
71
+ }
72
+ if (!handler) {
73
+ handler = factory();
74
+ if (!handler.isConfigured()) {
75
+ continue;
76
+ }
77
+ }
78
+ if (missingName) {
79
+ MusicProcessor.registerHandler(name, handler);
80
+ }
81
+ for (const alias of missingAliases) {
82
+ MusicProcessor.registerHandler(alias, handler);
83
+ }
84
+ }
85
+ catch (err) {
86
+ logger.debug(`[music] ${name} auto-registration skipped: ${err instanceof Error ? err.message : String(err)}`);
87
+ }
88
+ }
89
+ }
90
+ // Run once at module import so consumers who follow the documented
91
+ // `nl.generate(...)` flow get every configured handler without manually
92
+ // calling `registerHandler`.
93
+ registerDefaultMusicHandlers();
14
94
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- import type { FallbackEntry, ProxyRoutingConfig, RouteResult } from "../types/index.js";
1
+ import type { FallbackEntry, ModelMapping, ProxyRoutingConfig, RouteResult } from "../types/index.js";
2
2
  export declare class ModelRouter {
3
3
  private readonly mappings;
4
4
  private readonly passthrough;
@@ -7,4 +7,8 @@ export declare class ModelRouter {
7
7
  resolve(requestedModel: string): RouteResult;
8
8
  isClaudeTarget(requestedModel: string): boolean;
9
9
  getFallbackChain(): FallbackEntry[];
10
+ /** Return the raw model mapping entries (used by /v1/models). */
11
+ getModelMappings(): ModelMapping[];
12
+ /** Return models configured for passthrough (used by /v1/models). */
13
+ getPassthroughModels(): string[];
10
14
  }
@@ -29,5 +29,13 @@ export class ModelRouter {
29
29
  getFallbackChain() {
30
30
  return this.fallback;
31
31
  }
32
+ /** Return the raw model mapping entries (used by /v1/models). */
33
+ getModelMappings() {
34
+ return Array.from(this.mappings.values());
35
+ }
36
+ /** Return models configured for passthrough (used by /v1/models). */
37
+ getPassthroughModels() {
38
+ return Array.from(this.passthrough);
39
+ }
32
40
  }
33
41
  //# sourceMappingURL=modelRouter.js.map
@@ -0,0 +1,137 @@
1
+ /**
2
+ * OpenAI Chat Completions API format conversion layer.
3
+ *
4
+ * Provides a request parser (OpenAI -> NeuroLink), a response serializer
5
+ * (NeuroLink -> OpenAI), a streaming SSE state machine, and an error
6
+ * envelope helper. Together they allow NeuroLink to act as a
7
+ * drop-in OpenAI API proxy.
8
+ *
9
+ * Reference: https://platform.openai.com/docs/api-reference/chat/create
10
+ */
11
+ import type { ClaudeRequest, ClaudeResponse, InternalResult, OpenAICompletionRequest, OpenAICompletionResponse, OpenAIErrorResponse, ParsedOpenAIRequest, StreamLifecycleState } from "../types/index.js";
12
+ /** Generate a unique chat completion ID in the OpenAI format. */
13
+ export declare function generateChatCompletionId(): string;
14
+ /** Generate an OpenAI-format tool call ID (`call_` + random chars). */
15
+ export declare function generateOpenAIToolCallId(): string;
16
+ /**
17
+ * Parse an incoming OpenAI Chat Completions request into an intermediate
18
+ * representation consumable by NeuroLink's generate/stream pipeline.
19
+ *
20
+ * Handles:
21
+ * - System prompt extraction from system messages
22
+ * - Message flattening (text + image parts)
23
+ * - Tool definition conversion
24
+ * - tool_choice mapping
25
+ * - top_p, temperature, max_tokens pass-through
26
+ */
27
+ export declare function parseOpenAIRequest(body: OpenAICompletionRequest): ParsedOpenAIRequest;
28
+ /**
29
+ * Serialize a NeuroLink GenerateResult into an OpenAI Chat Completions response.
30
+ */
31
+ export declare function serializeOpenAIResponse(result: InternalResult, requestModel: string): OpenAICompletionResponse;
32
+ /**
33
+ * Build an OpenAI-compatible error envelope.
34
+ */
35
+ export declare function buildOpenAIError(status: number, message: string): OpenAIErrorResponse;
36
+ /**
37
+ * Format a single OpenAI SSE frame.
38
+ * OpenAI uses only `data:` lines (no `event:` prefix unlike Claude).
39
+ */
40
+ export declare function formatOpenAISSE(data: unknown): string;
41
+ /**
42
+ * Stateful SSE serializer that emits a well-formed OpenAI streaming response.
43
+ *
44
+ * Tracks lifecycle state (`idle` -> `streaming` -> `done`) and the current
45
+ * tool call index for multi-tool streaming.
46
+ *
47
+ * Usage:
48
+ * ```ts
49
+ * const sse = new OpenAIStreamSerializer(requestModel);
50
+ *
51
+ * // Start the stream
52
+ * yield* sse.start();
53
+ *
54
+ * // Text deltas
55
+ * for await (const chunk of textStream) {
56
+ * yield* sse.pushDelta(chunk);
57
+ * }
58
+ *
59
+ * // Tool use
60
+ * yield* sse.pushToolUse(toolId, toolName, toolInput);
61
+ *
62
+ * // Finalize
63
+ * yield* sse.finish("stop", usage);
64
+ * ```
65
+ */
66
+ export declare class OpenAIStreamSerializer {
67
+ private state;
68
+ private readonly id;
69
+ private readonly model;
70
+ private started;
71
+ private toolCallIndex;
72
+ constructor(model: string);
73
+ /** Current lifecycle state (exposed for testing). */
74
+ getState(): StreamLifecycleState;
75
+ private makeChunk;
76
+ /**
77
+ * Emit the opening frame with `role: "assistant"`.
78
+ */
79
+ start(): Generator<string>;
80
+ /**
81
+ * Push a text content delta.
82
+ */
83
+ pushDelta(text: string): Generator<string>;
84
+ /**
85
+ * Push the start of a tool call (id, name, empty arguments).
86
+ */
87
+ pushToolCallStart(id: string, name: string): Generator<string>;
88
+ /**
89
+ * Push an arguments delta for the current tool call.
90
+ */
91
+ pushToolCallArgDelta(index: number, argsChunk: string): Generator<string>;
92
+ /**
93
+ * Push a complete tool use: emits tool call start followed by chunked
94
+ * argument deltas (~100 chars per chunk).
95
+ */
96
+ pushToolUse(id: string, name: string, input: unknown): Generator<string>;
97
+ /**
98
+ * Finalize the stream: emit finish_reason chunk, then `data: [DONE]`.
99
+ */
100
+ finish(finishReason?: string, usage?: {
101
+ input: number;
102
+ output: number;
103
+ total: number;
104
+ }): Generator<string>;
105
+ /**
106
+ * Emit an error event. Transitions to terminal ERROR state.
107
+ */
108
+ emitError(message: string): Generator<string>;
109
+ }
110
+ /**
111
+ * Convert an OpenAI Chat Completions request to a Claude Messages API request.
112
+ *
113
+ * Used by the OpenAI proxy endpoint to internally loopback requests targeting
114
+ * Claude models through the proxy's native /v1/messages passthrough path,
115
+ * so they benefit from OAuth account rotation, retry, SSE interception, etc.
116
+ */
117
+ export declare function convertOpenAIToClaudeRequest(openai: OpenAICompletionRequest): ClaudeRequest;
118
+ /**
119
+ * Convert a non-streaming Claude Messages response to an OpenAI Chat
120
+ * Completions response by bridging through {@link InternalResult}.
121
+ */
122
+ export declare function convertClaudeToOpenAIResponse(claude: ClaudeResponse, requestModel: string): OpenAICompletionResponse;
123
+ /**
124
+ * Create a TransformStream that parses Claude Messages API SSE events from
125
+ * the upstream response and re-emits them as OpenAI Chat Completions SSE
126
+ * frames.
127
+ *
128
+ * Handles the canonical Claude SSE event types:
129
+ * - message_start -> emits the opening `role: "assistant"` chunk
130
+ * - content_block_start -> text block: no-op; tool_use block: emit tool call start
131
+ * - content_block_delta -> text_delta: emit content delta;
132
+ * input_json_delta: emit tool call argument delta
133
+ * - content_block_stop -> no-op
134
+ * - message_delta -> captures stop_reason and output token usage
135
+ * - message_stop -> emits the final `finish_reason` chunk + `[DONE]`
136
+ */
137
+ export declare function createClaudeToOpenAIStreamTransform(requestModel: string): TransformStream<Uint8Array, Uint8Array>;