@volcengine/ark-runtime 1.0.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 (123) hide show
  1. package/LICENSE.txt +202 -0
  2. package/README.md +104 -0
  3. package/dist/cjs/index.js +1717 -0
  4. package/dist/esm/client.d.ts +97 -0
  5. package/dist/esm/client.d.ts.map +1 -0
  6. package/dist/esm/config.d.ts +46 -0
  7. package/dist/esm/config.d.ts.map +1 -0
  8. package/dist/esm/encryption/encrypt-chat.d.ts +24 -0
  9. package/dist/esm/encryption/encrypt-chat.d.ts.map +1 -0
  10. package/dist/esm/encryption/index.d.ts +4 -0
  11. package/dist/esm/encryption/index.d.ts.map +1 -0
  12. package/dist/esm/encryption/key-agreement.d.ts +73 -0
  13. package/dist/esm/encryption/key-agreement.d.ts.map +1 -0
  14. package/dist/esm/index.d.ts +11 -0
  15. package/dist/esm/index.d.ts.map +1 -0
  16. package/dist/esm/index.mjs +1476 -0
  17. package/dist/esm/rslib-runtime.mjs +37 -0
  18. package/dist/esm/types/bot.d.ts +109 -0
  19. package/dist/esm/types/bot.d.ts.map +1 -0
  20. package/dist/esm/types/chat-completion.d.ts +167 -0
  21. package/dist/esm/types/chat-completion.d.ts.map +1 -0
  22. package/dist/esm/types/common.d.ts +29 -0
  23. package/dist/esm/types/common.d.ts.map +1 -0
  24. package/dist/esm/types/content-generation.d.ts +118 -0
  25. package/dist/esm/types/content-generation.d.ts.map +1 -0
  26. package/dist/esm/types/context.d.ts +49 -0
  27. package/dist/esm/types/context.d.ts.map +1 -0
  28. package/dist/esm/types/embeddings.d.ts +44 -0
  29. package/dist/esm/types/embeddings.d.ts.map +1 -0
  30. package/dist/esm/types/error.d.ts +45 -0
  31. package/dist/esm/types/error.d.ts.map +1 -0
  32. package/dist/esm/types/file.d.ts +66 -0
  33. package/dist/esm/types/file.d.ts.map +1 -0
  34. package/dist/esm/types/http-request-error.d.ts +13 -0
  35. package/dist/esm/types/http-request-error.d.ts.map +1 -0
  36. package/dist/esm/types/images.d.ts +78 -0
  37. package/dist/esm/types/images.d.ts.map +1 -0
  38. package/dist/esm/types/index.d.ts +13 -0
  39. package/dist/esm/types/index.d.ts.map +1 -0
  40. package/dist/esm/types/multimodal-embedding.d.ts +56 -0
  41. package/dist/esm/types/multimodal-embedding.d.ts.map +1 -0
  42. package/dist/esm/types/responses/enums.d.ts +38 -0
  43. package/dist/esm/types/responses/enums.d.ts.map +1 -0
  44. package/dist/esm/types/responses/helpers.d.ts +22 -0
  45. package/dist/esm/types/responses/helpers.d.ts.map +1 -0
  46. package/dist/esm/types/responses/index.d.ts +4 -0
  47. package/dist/esm/types/responses/index.d.ts.map +1 -0
  48. package/dist/esm/types/responses/types.d.ts +906 -0
  49. package/dist/esm/types/responses/types.d.ts.map +1 -0
  50. package/dist/esm/types/tokenization.d.ts +22 -0
  51. package/dist/esm/types/tokenization.d.ts.map +1 -0
  52. package/dist/esm/utils/breaker-provider.d.ts +9 -0
  53. package/dist/esm/utils/breaker-provider.d.ts.map +1 -0
  54. package/dist/esm/utils/breaker.d.ts +28 -0
  55. package/dist/esm/utils/breaker.d.ts.map +1 -0
  56. package/dist/esm/utils/normalize.d.ts +51 -0
  57. package/dist/esm/utils/normalize.d.ts.map +1 -0
  58. package/dist/esm/utils/request-builder.d.ts +15 -0
  59. package/dist/esm/utils/request-builder.d.ts.map +1 -0
  60. package/dist/esm/utils/request-id.d.ts +5 -0
  61. package/dist/esm/utils/request-id.d.ts.map +1 -0
  62. package/dist/esm/utils/retry.d.ts +11 -0
  63. package/dist/esm/utils/retry.d.ts.map +1 -0
  64. package/dist/esm/utils/sse-decoder.d.ts +23 -0
  65. package/dist/esm/utils/sse-decoder.d.ts.map +1 -0
  66. package/dist/esm/utils/stream-reader.d.ts +67 -0
  67. package/dist/esm/utils/stream-reader.d.ts.map +1 -0
  68. package/dist/tsconfig.tsbuildinfo +1 -0
  69. package/example/README.md +118 -0
  70. package/example/batch-chat.ts +64 -0
  71. package/example/bot-chat.ts +66 -0
  72. package/example/chat-completion-function-call.ts +141 -0
  73. package/example/chat-completion-reasoning.ts +64 -0
  74. package/example/chat-completion-vision.ts +70 -0
  75. package/example/chat-completion.ts +62 -0
  76. package/example/content-generation.ts +70 -0
  77. package/example/context.ts +69 -0
  78. package/example/embeddings.ts +31 -0
  79. package/example/file-upload.ts +53 -0
  80. package/example/images.ts +74 -0
  81. package/example/list-input-items.ts +34 -0
  82. package/example/multimodal-embeddings.ts +36 -0
  83. package/example/responses/basic.ts +75 -0
  84. package/example/responses/doubao-app.ts +53 -0
  85. package/example/responses/mcp.ts +66 -0
  86. package/example/responses/streaming.ts +45 -0
  87. package/example/responses/video.ts +74 -0
  88. package/example/responses/web-search.ts +52 -0
  89. package/example/structured-outputs.ts +71 -0
  90. package/example/tokenization.ts +30 -0
  91. package/package.json +47 -0
  92. package/src/client.ts +1199 -0
  93. package/src/config.ts +68 -0
  94. package/src/encryption/encrypt-chat.ts +146 -0
  95. package/src/encryption/index.ts +21 -0
  96. package/src/encryption/key-agreement.ts +270 -0
  97. package/src/index.ts +10 -0
  98. package/src/types/ark.d.ts +9 -0
  99. package/src/types/bot.ts +127 -0
  100. package/src/types/chat-completion.ts +228 -0
  101. package/src/types/common.ts +37 -0
  102. package/src/types/content-generation.ts +135 -0
  103. package/src/types/context.ts +59 -0
  104. package/src/types/embeddings.ts +74 -0
  105. package/src/types/error.ts +93 -0
  106. package/src/types/file.ts +76 -0
  107. package/src/types/http-request-error.ts +34 -0
  108. package/src/types/images.ts +102 -0
  109. package/src/types/index.ts +12 -0
  110. package/src/types/multimodal-embedding.ts +67 -0
  111. package/src/types/responses/enums.ts +163 -0
  112. package/src/types/responses/helpers.ts +67 -0
  113. package/src/types/responses/index.ts +3 -0
  114. package/src/types/responses/types.ts +1335 -0
  115. package/src/types/tokenization.ts +24 -0
  116. package/src/utils/breaker-provider.ts +17 -0
  117. package/src/utils/breaker.ts +56 -0
  118. package/src/utils/normalize.ts +154 -0
  119. package/src/utils/request-builder.ts +51 -0
  120. package/src/utils/request-id.ts +17 -0
  121. package/src/utils/retry.ts +76 -0
  122. package/src/utils/sse-decoder.ts +140 -0
  123. package/src/utils/stream-reader.ts +270 -0
@@ -0,0 +1,34 @@
1
+ export type HttpRequestErrorName =
2
+ | "Exception"
3
+ | "ApiException"
4
+ | "NetworkError";
5
+
6
+ /**
7
+ * HttpRequestError
8
+ * Standardized error class for HTTP request failures
9
+ */
10
+ export class HttpRequestError extends Error {
11
+ public status?: number;
12
+ public data?: any;
13
+ public originalError?: any;
14
+ public override name: HttpRequestErrorName;
15
+
16
+ constructor(
17
+ name: HttpRequestErrorName = "Exception",
18
+ message: string,
19
+ status?: number,
20
+ data?: any,
21
+ originalError?: any
22
+ ) {
23
+ super(message);
24
+ this.name = name;
25
+ this.status = status;
26
+ this.data = data;
27
+ this.originalError = originalError;
28
+
29
+ // Maintain proper stack trace
30
+ if (Error.captureStackTrace) {
31
+ Error.captureStackTrace(this, HttpRequestError);
32
+ }
33
+ }
34
+ }
@@ -0,0 +1,102 @@
1
+ import type { HttpHeaders } from "./common";
2
+
3
+ // Constants
4
+ export const GenerateImagesResponseFormatBase64 = "b64_json";
5
+ export const GenerateImagesResponseFormatURL = "url";
6
+ export const GenerateImagesSizeAdaptive = "adaptive";
7
+
8
+ // Optimize prompt
9
+ export type OptimizePromptThinking = "auto" | "enabled" | "disabled";
10
+ export type OptimizePromptMode = "standard" | "fast";
11
+
12
+ // Sequential image generation
13
+ export type SequentialImageGeneration = "auto" | "disabled";
14
+
15
+ // Image stream event types
16
+ export const ImageGenerationStreamEventPartialSucceeded =
17
+ "image_generation.partial_succeeded";
18
+ export const ImageGenerationStreamEventPartialFailed =
19
+ "image_generation.partial_failed";
20
+ export const ImageGenerationStreamEventCompleted =
21
+ "image_generation.completed";
22
+
23
+ // Output format
24
+ export type OutputFormat = "jpeg" | "png";
25
+
26
+ // Content generation tool
27
+ export type ContentGenerationToolType = "web_search";
28
+
29
+ export interface ContentGenerationTool {
30
+ type: ContentGenerationToolType;
31
+ }
32
+
33
+ export interface ToolUsage {
34
+ web_search?: number;
35
+ }
36
+
37
+ export interface OptimizePromptOptions {
38
+ thinking?: OptimizePromptThinking;
39
+ mode?: OptimizePromptMode;
40
+ }
41
+
42
+ export interface SequentialImageGenerationOptions {
43
+ max_images?: number;
44
+ }
45
+
46
+ export interface Image {
47
+ url?: string;
48
+ b64_json?: string;
49
+ size: string;
50
+ }
51
+
52
+ export interface GenerateImagesUsage {
53
+ generated_images: number;
54
+ output_tokens: number;
55
+ total_tokens: number;
56
+ tool_usage?: ToolUsage;
57
+ }
58
+
59
+ export interface GenerateImagesError {
60
+ code: string;
61
+ message: string;
62
+ }
63
+
64
+ export interface GenerateImagesRequest {
65
+ model: string;
66
+ prompt: string;
67
+ image?: string | string[];
68
+ response_format?: string;
69
+ seed?: number;
70
+ guidance_scale?: number;
71
+ size?: string;
72
+ watermark?: boolean;
73
+ optimize_prompt?: boolean;
74
+ optimize_prompt_options?: OptimizePromptOptions;
75
+ sequential_image_generation?: SequentialImageGeneration;
76
+ sequential_image_generation_options?: SequentialImageGenerationOptions;
77
+ tools?: ContentGenerationTool[];
78
+ output_format?: OutputFormat;
79
+ }
80
+
81
+ export interface ImagesResponse {
82
+ model: string;
83
+ created: number;
84
+ data: Image[];
85
+ usage?: GenerateImagesUsage;
86
+ error?: GenerateImagesError;
87
+ tools?: ContentGenerationTool[];
88
+ headers?: HttpHeaders;
89
+ }
90
+
91
+ export interface ImagesStreamResponse {
92
+ type: string;
93
+ model: string;
94
+ created: number;
95
+ image_index: number;
96
+ url?: string;
97
+ b64_json?: string;
98
+ size: string;
99
+ usage?: GenerateImagesUsage;
100
+ error?: GenerateImagesError;
101
+ tools?: ContentGenerationTool[];
102
+ }
@@ -0,0 +1,12 @@
1
+ export * from "./common";
2
+ export * from "./error";
3
+ export * from "./chat-completion";
4
+ export * from "./bot";
5
+ export * from "./embeddings";
6
+ export * from "./images";
7
+ export * from "./tokenization";
8
+ export * from "./context";
9
+ export * from "./content-generation";
10
+ export * from "./file";
11
+ export * from "./multimodal-embedding";
12
+ export * as responses from "./responses";
@@ -0,0 +1,67 @@
1
+ import type { HttpHeaders } from "./common";
2
+ import type { EmbeddingEncodingFormat } from "./embeddings";
3
+
4
+ export type MultiModalEmbeddingInputType = "text" | "image_url" | "video_url";
5
+
6
+ export type SparseEmbeddingInputType = "enabled" | "disabled";
7
+
8
+ export interface MultimodalEmbeddingImageURL {
9
+ url: string;
10
+ }
11
+
12
+ export interface MultimodalEmbeddingVideoURL {
13
+ url: string;
14
+ fps?: number;
15
+ }
16
+
17
+ export interface MultimodalEmbeddingInput {
18
+ type: MultiModalEmbeddingInputType;
19
+ text?: string;
20
+ image_url?: MultimodalEmbeddingImageURL;
21
+ video_url?: MultimodalEmbeddingVideoURL;
22
+ }
23
+
24
+ export interface SparseEmbeddingInput {
25
+ type: SparseEmbeddingInputType;
26
+ }
27
+
28
+ export interface SparseEmbedding {
29
+ index: number;
30
+ value: number;
31
+ }
32
+
33
+ export interface MultiModalEmbeddingRequest {
34
+ input: MultimodalEmbeddingInput[];
35
+ model: string;
36
+ encoding_format?: EmbeddingEncodingFormat;
37
+ dimensions?: number;
38
+ sparse_embedding?: SparseEmbeddingInput;
39
+ instructions?: string;
40
+ }
41
+
42
+ export interface MultimodalEmbedding {
43
+ embedding: number[];
44
+ sparse_embedding?: SparseEmbedding[];
45
+ object: string;
46
+ }
47
+
48
+ export interface MultimodalEmbeddingPromptTokensDetail {
49
+ text_tokens: number;
50
+ image_tokens: number;
51
+ }
52
+
53
+ export interface MultimodalEmbeddingUsage {
54
+ prompt_tokens: number;
55
+ total_tokens: number;
56
+ prompt_tokens_details: MultimodalEmbeddingPromptTokensDetail;
57
+ }
58
+
59
+ export interface MultimodalEmbeddingResponse {
60
+ id: string;
61
+ model: string;
62
+ created: number;
63
+ object: string;
64
+ data: MultimodalEmbedding;
65
+ usage: MultimodalEmbeddingUsage;
66
+ headers?: HttpHeaders;
67
+ }
@@ -0,0 +1,163 @@
1
+ // All enums are TS string literal unions (replacing Go protobuf int32 enums).
2
+ // The wire format is JSON strings, so string literals are the natural TS representation.
3
+
4
+ export type ResponsesServiceTier = "auto" | "default";
5
+ export type ResponsesTruncation = "auto" | "disabled";
6
+ export type AnnotationType = "url_citation" | "doc_citation";
7
+ export type ResponseImageProcessType = "point" | "grounding" | "rotate" | "zoom";
8
+ export type ResponseDoubaoAppFeatureType = "enabled" | "disabled";
9
+
10
+ export type ItemType =
11
+ | "message"
12
+ | "function_call"
13
+ | "function_call_output"
14
+ | "reasoning"
15
+ | "item_reference"
16
+ | "transcription"
17
+ | "web_search_call"
18
+ | "image_process"
19
+ | "mcp_approval_request"
20
+ | "mcp_approval_response"
21
+ | "mcp_list_tools"
22
+ | "mcp_call"
23
+ | "knowledge_search_call"
24
+ | "doubao_app_call";
25
+
26
+ export type DoubaoAppBlockType =
27
+ | "output_text"
28
+ | "reasoning_text"
29
+ | "search"
30
+ | "reasoning_search";
31
+
32
+ export type MessageRole = "user" | "system" | "developer" | "assistant";
33
+
34
+ export type ContentItemImageDetail = "auto" | "high" | "low";
35
+
36
+ export type ContentItemType =
37
+ | "input_text"
38
+ | "input_image"
39
+ | "input_video"
40
+ | "output_text"
41
+ | "summary_text"
42
+ | "transcription_text"
43
+ | "input_audio"
44
+ | "input_file";
45
+
46
+ export type ItemStatus =
47
+ | "in_progress"
48
+ | "completed"
49
+ | "incomplete"
50
+ | "searching"
51
+ | "failed";
52
+
53
+ export type ResponseStatus =
54
+ | "in_progress"
55
+ | "completed"
56
+ | "incomplete"
57
+ | "failed";
58
+
59
+ export type ThinkingType = "auto" | "disabled" | "enabled";
60
+
61
+ export type TextType = "text" | "json_object" | "json_schema";
62
+
63
+ export type ToolChoiceMode = "auto" | "none" | "required";
64
+
65
+ export type ToolType =
66
+ | "function"
67
+ | "web_search_preview"
68
+ | "web_search"
69
+ | "image_process"
70
+ | "mcp"
71
+ | "knowledge_search"
72
+ | "doubao_app";
73
+
74
+ export type UserLocationType = "approximate";
75
+
76
+ export type ObjectType = "response" | "list";
77
+
78
+ export type ReasoningEffort = "minimal" | "low" | "medium" | "high";
79
+
80
+ export type IncludeType = "image_url";
81
+
82
+ export type CacheType = "disabled" | "enabled";
83
+
84
+ export type ChunkingStrategyType = "server_vad";
85
+
86
+ export type ActionType = "search";
87
+
88
+ export type SourceType = "toutiao" | "douyin" | "moji" | "search_engine";
89
+
90
+ export type ApprovalMode = "always" | "never";
91
+
92
+ export type EventType =
93
+ | "response.created"
94
+ | "response.in_progress"
95
+ | "response.completed"
96
+ | "response.failed"
97
+ | "response.incomplete"
98
+ | "response.output_item.added"
99
+ | "response.output_item.done"
100
+ | "response.content_part.added"
101
+ | "response.content_part.done"
102
+ | "response.output_text.delta"
103
+ | "response.output_text.done"
104
+ | "response.reasoning_summary_text.delta"
105
+ | "response.reasoning_summary_text.done"
106
+ | "response.reasoning_summary_part.added"
107
+ | "response.reasoning_summary_part.done"
108
+ | "response.function_call_arguments.delta"
109
+ | "response.function_call_arguments.done"
110
+ | "error"
111
+ | "response.transcription_part.added"
112
+ | "response.transcription_part.done"
113
+ | "response.transcription_text.delta"
114
+ | "response.transcription_text.done"
115
+ | "response.web_search_call.in_progress"
116
+ | "response.web_search_call.searching"
117
+ | "response.web_search_call.completed"
118
+ | "response.output_text.annotation.added"
119
+ | "response.image_process_call.in_progress"
120
+ | "response.image_process_call.progressing"
121
+ | "response.image_process_call.completed"
122
+ | "response.image_process_call.failed"
123
+ | "response.mcp_list_tools.in_progress"
124
+ | "response.mcp_list_tools.completed"
125
+ | "response.mcp_call.in_progress"
126
+ | "response.mcp_call.arguments_delta"
127
+ | "response.mcp_call.arguments_done"
128
+ | "response.mcp_call.completed"
129
+ | "response.mcp_call.failed"
130
+ | "response.mcp_approval_request"
131
+ | "response.knowledge_search_call.in_progress"
132
+ | "response.knowledge_search_call.searching"
133
+ | "response.knowledge_search_call.completed"
134
+ | "response.knowledge_search_call.failed"
135
+ | "response.doubao_app_call.in_progress"
136
+ | "response.doubao_app_call.failed"
137
+ | "response.doubao_app_call.completed"
138
+ | "response.doubao_app_call.block.added"
139
+ | "response.doubao_app_call.block.done"
140
+ | "response.doubao_app_call.reasoning_text.delta"
141
+ | "response.doubao_app_call.reasoning_text.done"
142
+ | "response.doubao_app_call.output_text.delta"
143
+ | "response.doubao_app_call.output_text.done"
144
+ | "response.doubao_app_call.search.in_progress"
145
+ | "response.doubao_app_call.search.searching"
146
+ | "response.doubao_app_call.search.completed"
147
+ | "response.doubao_app_call.reasoning_search.in_progress"
148
+ | "response.doubao_app_call.reasoning_search.searching"
149
+ | "response.doubao_app_call.reasoning_search.completed";
150
+
151
+ // Constants for convenience (matching Go's MessageRole_user etc.)
152
+ export const MessageRole_user: MessageRole = "user";
153
+ export const MessageRole_system: MessageRole = "system";
154
+ export const MessageRole_developer: MessageRole = "developer";
155
+ export const MessageRole_assistant: MessageRole = "assistant";
156
+
157
+ export const ContentItemType_input_text: ContentItemType = "input_text";
158
+ export const ContentItemType_input_image: ContentItemType = "input_image";
159
+ export const ContentItemType_input_video: ContentItemType = "input_video";
160
+ export const ContentItemType_input_audio: ContentItemType = "input_audio";
161
+ export const ContentItemType_input_file: ContentItemType = "input_file";
162
+ export const ContentItemType_output_text: ContentItemType = "output_text";
163
+ export const ContentItemType_summary_text: ContentItemType = "summary_text";
@@ -0,0 +1,67 @@
1
+ import type { Event, EventType } from "./types";
2
+
3
+ /**
4
+ * Get the event type string from an Event object.
5
+ * Matches Go's `(*Event).GetEventType()`.
6
+ */
7
+ export function getEventType(event: Event | null | undefined): EventType | "" {
8
+ if (!event) return "";
9
+ return event.type ?? "";
10
+ }
11
+
12
+ /**
13
+ * Check if an event is a "delta" event (streaming partial content).
14
+ * Matches Go's `(*Event).IsDelta()`.
15
+ */
16
+ export function isDelta(event: Event): boolean {
17
+ const t = event.type;
18
+ return (
19
+ t === "response.output_text.delta" ||
20
+ t === "response.reasoning_summary_text.delta" ||
21
+ t === "response.function_call_arguments.delta" ||
22
+ t === "response.transcription_text.delta" ||
23
+ t === "response.output_text.annotation.added" ||
24
+ t === "response.web_search_call.in_progress" ||
25
+ t === "response.web_search_call.searching" ||
26
+ t === "response.web_search_call.completed" ||
27
+ t === "response.image_process_call.in_progress" ||
28
+ t === "response.image_process_call.completed" ||
29
+ t === "response.mcp_list_tools.completed" ||
30
+ t === "response.mcp_call.in_progress" ||
31
+ t === "response.mcp_call.arguments_delta" ||
32
+ t === "response.mcp_call.arguments_done" ||
33
+ t === "response.mcp_call.completed" ||
34
+ t === "response.mcp_call.failed" ||
35
+ t === "response.knowledge_search_call.in_progress" ||
36
+ t === "response.knowledge_search_call.searching" ||
37
+ t === "response.knowledge_search_call.completed" ||
38
+ t === "response.knowledge_search_call.failed"
39
+ );
40
+ }
41
+
42
+ /**
43
+ * Check if an event is a "delta done" event (end of streaming partial).
44
+ * Matches Go's `(*Event).IsDeltaDone()`.
45
+ */
46
+ export function isDeltaDone(event: Event): boolean {
47
+ const t = event.type;
48
+ return (
49
+ t === "response.output_text.done" ||
50
+ t === "response.reasoning_summary_text.done" ||
51
+ t === "response.function_call_arguments.done" ||
52
+ t === "response.transcription_text.done"
53
+ );
54
+ }
55
+
56
+ /**
57
+ * Check if the response generation is complete (success, fail, or incomplete).
58
+ * Matches Go's `(*Event).IsResponseDone()`.
59
+ */
60
+ export function isResponseDone(event: Event): boolean {
61
+ const t = event.type;
62
+ return (
63
+ t === "response.completed" ||
64
+ t === "response.failed" ||
65
+ t === "response.incomplete"
66
+ );
67
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./enums";
2
+ export * from "./types";
3
+ export * from "./helpers";