@llumiverse/drivers 1.0.0-dev.20260202.145450Z → 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 (240) hide show
  1. package/lib/cjs/adobe/firefly.js +120 -0
  2. package/lib/cjs/adobe/firefly.js.map +1 -0
  3. package/lib/cjs/azure/azure_foundry.js +432 -0
  4. package/lib/cjs/azure/azure_foundry.js.map +1 -0
  5. package/lib/cjs/bedrock/converse.js +359 -0
  6. package/lib/cjs/bedrock/converse.js.map +1 -0
  7. package/lib/cjs/bedrock/index.js +1441 -0
  8. package/lib/cjs/bedrock/index.js.map +1 -0
  9. package/lib/cjs/bedrock/nova-image-payload.js +207 -0
  10. package/lib/cjs/bedrock/nova-image-payload.js.map +1 -0
  11. package/lib/cjs/bedrock/payloads.js +3 -0
  12. package/lib/cjs/bedrock/payloads.js.map +1 -0
  13. package/lib/cjs/bedrock/s3.js +107 -0
  14. package/lib/cjs/bedrock/s3.js.map +1 -0
  15. package/lib/cjs/bedrock/twelvelabs.js +87 -0
  16. package/lib/cjs/bedrock/twelvelabs.js.map +1 -0
  17. package/lib/cjs/groq/index.js +326 -0
  18. package/lib/cjs/groq/index.js.map +1 -0
  19. package/lib/cjs/huggingface_ie.js +201 -0
  20. package/lib/cjs/huggingface_ie.js.map +1 -0
  21. package/lib/cjs/index.js +31 -0
  22. package/lib/cjs/index.js.map +1 -0
  23. package/lib/cjs/mistral/index.js +176 -0
  24. package/lib/cjs/mistral/index.js.map +1 -0
  25. package/lib/cjs/mistral/types.js +83 -0
  26. package/lib/cjs/mistral/types.js.map +1 -0
  27. package/lib/cjs/openai/azure_openai.js +72 -0
  28. package/lib/cjs/openai/azure_openai.js.map +1 -0
  29. package/lib/cjs/openai/index.js +1100 -0
  30. package/lib/cjs/openai/index.js.map +1 -0
  31. package/lib/cjs/openai/openai.js +21 -0
  32. package/lib/cjs/openai/openai.js.map +1 -0
  33. package/lib/cjs/openai/openai_compatible.js +63 -0
  34. package/lib/cjs/openai/openai_compatible.js.map +1 -0
  35. package/lib/cjs/openai/openai_format.js +131 -0
  36. package/lib/cjs/openai/openai_format.js.map +1 -0
  37. package/lib/cjs/package.json +3 -0
  38. package/lib/cjs/replicate.js +275 -0
  39. package/lib/cjs/replicate.js.map +1 -0
  40. package/lib/cjs/test-driver/TestErrorCompletionStream.js +20 -0
  41. package/lib/cjs/test-driver/TestErrorCompletionStream.js.map +1 -0
  42. package/lib/cjs/test-driver/TestValidationErrorCompletionStream.js +24 -0
  43. package/lib/cjs/test-driver/TestValidationErrorCompletionStream.js.map +1 -0
  44. package/lib/cjs/test-driver/index.js +109 -0
  45. package/lib/cjs/test-driver/index.js.map +1 -0
  46. package/lib/cjs/test-driver/utils.js +30 -0
  47. package/lib/cjs/test-driver/utils.js.map +1 -0
  48. package/lib/cjs/togetherai/index.js +126 -0
  49. package/lib/cjs/togetherai/index.js.map +1 -0
  50. package/lib/cjs/togetherai/interfaces.js +3 -0
  51. package/lib/cjs/togetherai/interfaces.js.map +1 -0
  52. package/lib/cjs/vertexai/debug.js +12 -0
  53. package/lib/cjs/vertexai/debug.js.map +1 -0
  54. package/lib/cjs/vertexai/embeddings/embeddings-image.js +27 -0
  55. package/lib/cjs/vertexai/embeddings/embeddings-image.js.map +1 -0
  56. package/lib/cjs/vertexai/embeddings/embeddings-text.js +23 -0
  57. package/lib/cjs/vertexai/embeddings/embeddings-text.js.map +1 -0
  58. package/lib/cjs/vertexai/index.js +635 -0
  59. package/lib/cjs/vertexai/index.js.map +1 -0
  60. package/lib/cjs/vertexai/models/claude.js +842 -0
  61. package/lib/cjs/vertexai/models/claude.js.map +1 -0
  62. package/lib/cjs/vertexai/models/gemini.js +1110 -0
  63. package/lib/cjs/vertexai/models/gemini.js.map +1 -0
  64. package/lib/cjs/vertexai/models/imagen.js +303 -0
  65. package/lib/cjs/vertexai/models/imagen.js.map +1 -0
  66. package/lib/cjs/vertexai/models/llama.js +183 -0
  67. package/lib/cjs/vertexai/models/llama.js.map +1 -0
  68. package/lib/cjs/vertexai/models.js +35 -0
  69. package/lib/cjs/vertexai/models.js.map +1 -0
  70. package/lib/cjs/watsonx/index.js +161 -0
  71. package/lib/cjs/watsonx/index.js.map +1 -0
  72. package/lib/cjs/watsonx/interfaces.js +3 -0
  73. package/lib/cjs/watsonx/interfaces.js.map +1 -0
  74. package/lib/cjs/xai/index.js +65 -0
  75. package/lib/cjs/xai/index.js.map +1 -0
  76. package/lib/esm/adobe/firefly.js +116 -0
  77. package/lib/esm/adobe/firefly.js.map +1 -0
  78. package/lib/esm/azure/azure_foundry.js +426 -0
  79. package/lib/esm/azure/azure_foundry.js.map +1 -0
  80. package/lib/esm/bedrock/converse.js +352 -0
  81. package/lib/esm/bedrock/converse.js.map +1 -0
  82. package/lib/esm/bedrock/index.js +1434 -0
  83. package/lib/esm/bedrock/index.js.map +1 -0
  84. package/lib/esm/bedrock/nova-image-payload.js +203 -0
  85. package/lib/esm/bedrock/nova-image-payload.js.map +1 -0
  86. package/lib/esm/bedrock/payloads.js +2 -0
  87. package/lib/esm/bedrock/payloads.js.map +1 -0
  88. package/lib/esm/bedrock/s3.js +99 -0
  89. package/lib/esm/bedrock/s3.js.map +1 -0
  90. package/lib/esm/bedrock/twelvelabs.js +84 -0
  91. package/lib/esm/bedrock/twelvelabs.js.map +1 -0
  92. package/lib/esm/groq/index.js +319 -0
  93. package/lib/esm/groq/index.js.map +1 -0
  94. package/lib/esm/huggingface_ie.js +197 -0
  95. package/lib/esm/huggingface_ie.js.map +1 -0
  96. package/lib/esm/index.js +15 -0
  97. package/lib/esm/index.js.map +1 -0
  98. package/lib/esm/mistral/index.js +172 -0
  99. package/lib/esm/mistral/index.js.map +1 -0
  100. package/lib/esm/mistral/types.js +80 -0
  101. package/lib/esm/mistral/types.js.map +1 -0
  102. package/lib/esm/openai/azure_openai.js +68 -0
  103. package/lib/esm/openai/azure_openai.js.map +1 -0
  104. package/lib/esm/openai/index.js +1093 -0
  105. package/lib/esm/openai/index.js.map +1 -0
  106. package/lib/esm/openai/openai.js +14 -0
  107. package/lib/esm/openai/openai.js.map +1 -0
  108. package/lib/esm/openai/openai_compatible.js +56 -0
  109. package/lib/esm/openai/openai_compatible.js.map +1 -0
  110. package/lib/esm/openai/openai_format.js +127 -0
  111. package/lib/esm/openai/openai_format.js.map +1 -0
  112. package/lib/esm/replicate.js +268 -0
  113. package/lib/esm/replicate.js.map +1 -0
  114. package/lib/esm/test-driver/TestErrorCompletionStream.js +16 -0
  115. package/lib/esm/test-driver/TestErrorCompletionStream.js.map +1 -0
  116. package/lib/esm/test-driver/TestValidationErrorCompletionStream.js +20 -0
  117. package/lib/esm/test-driver/TestValidationErrorCompletionStream.js.map +1 -0
  118. package/lib/esm/test-driver/index.js +91 -0
  119. package/lib/esm/test-driver/index.js.map +1 -0
  120. package/lib/esm/test-driver/utils.js +25 -0
  121. package/lib/esm/test-driver/utils.js.map +1 -0
  122. package/lib/esm/togetherai/index.js +122 -0
  123. package/lib/esm/togetherai/index.js.map +1 -0
  124. package/lib/esm/togetherai/interfaces.js +2 -0
  125. package/lib/esm/togetherai/interfaces.js.map +1 -0
  126. package/lib/esm/vertexai/debug.js +6 -0
  127. package/lib/esm/vertexai/debug.js.map +1 -0
  128. package/lib/esm/vertexai/embeddings/embeddings-image.js +24 -0
  129. package/lib/esm/vertexai/embeddings/embeddings-image.js.map +1 -0
  130. package/lib/esm/vertexai/embeddings/embeddings-text.js +20 -0
  131. package/lib/esm/vertexai/embeddings/embeddings-text.js.map +1 -0
  132. package/lib/esm/vertexai/index.js +630 -0
  133. package/lib/esm/vertexai/index.js.map +1 -0
  134. package/lib/esm/vertexai/models/claude.js +833 -0
  135. package/lib/esm/vertexai/models/claude.js.map +1 -0
  136. package/lib/esm/vertexai/models/gemini.js +1104 -0
  137. package/lib/esm/vertexai/models/gemini.js.map +1 -0
  138. package/lib/esm/vertexai/models/imagen.js +299 -0
  139. package/lib/esm/vertexai/models/imagen.js.map +1 -0
  140. package/lib/esm/vertexai/models/llama.js +179 -0
  141. package/lib/esm/vertexai/models/llama.js.map +1 -0
  142. package/lib/esm/vertexai/models.js +32 -0
  143. package/lib/esm/vertexai/models.js.map +1 -0
  144. package/lib/esm/watsonx/index.js +157 -0
  145. package/lib/esm/watsonx/index.js.map +1 -0
  146. package/lib/esm/watsonx/interfaces.js +2 -0
  147. package/lib/esm/watsonx/interfaces.js.map +1 -0
  148. package/lib/esm/xai/index.js +58 -0
  149. package/lib/esm/xai/index.js.map +1 -0
  150. package/lib/types/adobe/firefly.d.ts +30 -0
  151. package/lib/types/adobe/firefly.d.ts.map +1 -0
  152. package/lib/types/azure/azure_foundry.d.ts +52 -0
  153. package/lib/types/azure/azure_foundry.d.ts.map +1 -0
  154. package/lib/types/bedrock/converse.d.ts +8 -0
  155. package/lib/types/bedrock/converse.d.ts.map +1 -0
  156. package/lib/types/bedrock/index.d.ts +135 -0
  157. package/lib/types/bedrock/index.d.ts.map +1 -0
  158. package/lib/types/bedrock/nova-image-payload.d.ts +74 -0
  159. package/lib/types/bedrock/nova-image-payload.d.ts.map +1 -0
  160. package/lib/types/bedrock/payloads.d.ts +12 -0
  161. package/lib/types/bedrock/payloads.d.ts.map +1 -0
  162. package/lib/types/bedrock/s3.d.ts +23 -0
  163. package/lib/types/bedrock/s3.d.ts.map +1 -0
  164. package/lib/types/bedrock/twelvelabs.d.ts +50 -0
  165. package/lib/types/bedrock/twelvelabs.d.ts.map +1 -0
  166. package/lib/types/groq/index.d.ts +27 -0
  167. package/lib/types/groq/index.d.ts.map +1 -0
  168. package/lib/types/huggingface_ie.d.ts +35 -0
  169. package/lib/types/huggingface_ie.d.ts.map +1 -0
  170. package/lib/types/index.d.ts +15 -0
  171. package/lib/types/index.d.ts.map +1 -0
  172. package/lib/types/mistral/index.d.ts +25 -0
  173. package/lib/types/mistral/index.d.ts.map +1 -0
  174. package/lib/types/mistral/types.d.ts +127 -0
  175. package/lib/types/mistral/types.d.ts.map +1 -0
  176. package/lib/types/openai/azure_openai.d.ts +25 -0
  177. package/lib/types/openai/azure_openai.d.ts.map +1 -0
  178. package/lib/types/openai/index.d.ts +126 -0
  179. package/lib/types/openai/index.d.ts.map +1 -0
  180. package/lib/types/openai/openai.d.ts +15 -0
  181. package/lib/types/openai/openai.d.ts.map +1 -0
  182. package/lib/types/openai/openai_compatible.d.ts +31 -0
  183. package/lib/types/openai/openai_compatible.d.ts.map +1 -0
  184. package/lib/types/openai/openai_format.d.ts +21 -0
  185. package/lib/types/openai/openai_format.d.ts.map +1 -0
  186. package/lib/types/replicate.d.ts +48 -0
  187. package/lib/types/replicate.d.ts.map +1 -0
  188. package/lib/types/test-driver/TestErrorCompletionStream.d.ts +9 -0
  189. package/lib/types/test-driver/TestErrorCompletionStream.d.ts.map +1 -0
  190. package/lib/types/test-driver/TestValidationErrorCompletionStream.d.ts +9 -0
  191. package/lib/types/test-driver/TestValidationErrorCompletionStream.d.ts.map +1 -0
  192. package/lib/types/test-driver/index.d.ts +24 -0
  193. package/lib/types/test-driver/index.d.ts.map +1 -0
  194. package/lib/types/test-driver/utils.d.ts +5 -0
  195. package/lib/types/test-driver/utils.d.ts.map +1 -0
  196. package/lib/types/togetherai/index.d.ts +23 -0
  197. package/lib/types/togetherai/index.d.ts.map +1 -0
  198. package/lib/types/togetherai/interfaces.d.ts +96 -0
  199. package/lib/types/togetherai/interfaces.d.ts.map +1 -0
  200. package/lib/types/vertexai/debug.d.ts +2 -0
  201. package/lib/types/vertexai/debug.d.ts.map +1 -0
  202. package/lib/types/vertexai/embeddings/embeddings-image.d.ts +11 -0
  203. package/lib/types/vertexai/embeddings/embeddings-image.d.ts.map +1 -0
  204. package/lib/types/vertexai/embeddings/embeddings-text.d.ts +10 -0
  205. package/lib/types/vertexai/embeddings/embeddings-text.d.ts.map +1 -0
  206. package/lib/types/vertexai/index.d.ts +79 -0
  207. package/lib/types/vertexai/index.d.ts.map +1 -0
  208. package/lib/types/vertexai/models/claude.d.ts +103 -0
  209. package/lib/types/vertexai/models/claude.d.ts.map +1 -0
  210. package/lib/types/vertexai/models/gemini.d.ts +78 -0
  211. package/lib/types/vertexai/models/gemini.d.ts.map +1 -0
  212. package/lib/types/vertexai/models/imagen.d.ts +75 -0
  213. package/lib/types/vertexai/models/imagen.d.ts.map +1 -0
  214. package/lib/types/vertexai/models/llama.d.ts +20 -0
  215. package/lib/types/vertexai/models/llama.d.ts.map +1 -0
  216. package/lib/types/vertexai/models.d.ts +20 -0
  217. package/lib/types/vertexai/models.d.ts.map +1 -0
  218. package/lib/types/watsonx/index.d.ts +27 -0
  219. package/lib/types/watsonx/index.d.ts.map +1 -0
  220. package/lib/types/watsonx/interfaces.d.ts +65 -0
  221. package/lib/types/watsonx/interfaces.d.ts.map +1 -0
  222. package/lib/types/xai/index.d.ts +18 -0
  223. package/lib/types/xai/index.d.ts.map +1 -0
  224. package/package.json +18 -18
  225. package/src/bedrock/converse.ts +85 -10
  226. package/src/bedrock/error-handling.test.ts +352 -0
  227. package/src/bedrock/index.ts +293 -16
  228. package/src/groq/index.ts +9 -4
  229. package/src/mistral/index.ts +25 -22
  230. package/src/mistral/types.ts +0 -5
  231. package/src/openai/error-handling.test.ts +567 -0
  232. package/src/openai/index.ts +513 -33
  233. package/src/openai/openai_compatible.ts +7 -0
  234. package/src/openai/openai_format.ts +1 -1
  235. package/src/vertexai/index.ts +61 -13
  236. package/src/vertexai/models/claude-error-handling.test.ts +432 -0
  237. package/src/vertexai/models/claude.ts +287 -10
  238. package/src/vertexai/models/gemini-error-handling.test.ts +353 -0
  239. package/src/vertexai/models/gemini.ts +329 -52
  240. package/src/vertexai/models.ts +7 -2
@@ -0,0 +1,630 @@
1
+ import { AnthropicVertex } from "@anthropic-ai/vertex-sdk";
2
+ import { PredictionServiceClient, v1beta1 } from "@google-cloud/aiplatform";
3
+ import { GoogleGenAI } from "@google/genai";
4
+ import { AbstractDriver, getConversationMeta, getModelCapabilities, incrementConversationTurn, modelModalitiesToArray, stripBase64ImagesFromConversation, stripHeartbeatsFromConversation, truncateLargeTextInConversation, } from "@llumiverse/core";
5
+ import { FetchClient } from "@vertesia/api-fetch-client";
6
+ import { GoogleAuth } from "google-auth-library";
7
+ import { getEmbeddingsForImages } from "./embeddings/embeddings-image.js";
8
+ import { getEmbeddingsForText } from "./embeddings/embeddings-text.js";
9
+ import { getModelDefinition } from "./models.js";
10
+ import { ANTHROPIC_REGIONS, NON_GLOBAL_ANTHROPIC_MODELS } from "./models/claude.js";
11
+ import { ImagenModelDefinition } from "./models/imagen.js";
12
+ export function trimModelName(model) {
13
+ const i = model.lastIndexOf("@");
14
+ return i > -1 ? model.substring(0, i) : model;
15
+ }
16
+ export class VertexAIDriver extends AbstractDriver {
17
+ static PROVIDER = "vertexai";
18
+ provider = VertexAIDriver.PROVIDER;
19
+ aiplatform;
20
+ anthropicClient;
21
+ fetchClient;
22
+ googleGenAI;
23
+ llamaClient;
24
+ modelGarden;
25
+ imagenClient;
26
+ googleAuth;
27
+ authClientPromise;
28
+ constructor(options) {
29
+ super(options);
30
+ this.aiplatform = undefined;
31
+ this.anthropicClient = undefined;
32
+ this.fetchClient = undefined;
33
+ this.googleGenAI = undefined;
34
+ this.modelGarden = undefined;
35
+ this.llamaClient = undefined;
36
+ this.imagenClient = undefined;
37
+ this.googleAuth = new GoogleAuth(options.googleAuthOptions);
38
+ this.authClientPromise = undefined;
39
+ }
40
+ async getAuthClient() {
41
+ if (!this.authClientPromise) {
42
+ this.authClientPromise = this.googleAuth.getClient();
43
+ }
44
+ return this.authClientPromise;
45
+ }
46
+ getGoogleGenAIClient(region = this.options.region) {
47
+ //Lazy initialization
48
+ if (region !== this.options.region) {
49
+ //Get one off client for different region
50
+ return new GoogleGenAI({
51
+ project: this.options.project,
52
+ location: region,
53
+ vertexai: true,
54
+ googleAuthOptions: this.options.googleAuthOptions || {
55
+ scopes: ["https://www.googleapis.com/auth/cloud-platform"],
56
+ }
57
+ });
58
+ }
59
+ if (!this.googleGenAI) {
60
+ this.googleGenAI = new GoogleGenAI({
61
+ project: this.options.project,
62
+ location: region,
63
+ vertexai: true,
64
+ googleAuthOptions: this.options.googleAuthOptions || {
65
+ scopes: ["https://www.googleapis.com/auth/cloud-platform"],
66
+ }
67
+ });
68
+ }
69
+ return this.googleGenAI;
70
+ }
71
+ getFetchClient() {
72
+ //Lazy initialization
73
+ if (!this.fetchClient) {
74
+ this.fetchClient = createFetchClient({
75
+ region: this.options.region,
76
+ project: this.options.project,
77
+ }).withAuthCallback(async () => {
78
+ const token = await this.googleAuth.getAccessToken();
79
+ return `Bearer ${token}`;
80
+ });
81
+ }
82
+ return this.fetchClient;
83
+ }
84
+ getLLamaClient(region = "us-central1") {
85
+ //Lazy initialization
86
+ if (!this.llamaClient || this.llamaClient["region"] !== region) {
87
+ this.llamaClient = createFetchClient({
88
+ region: region,
89
+ project: this.options.project,
90
+ apiVersion: "v1beta1",
91
+ }).withAuthCallback(async () => {
92
+ const token = await this.googleAuth.getAccessToken();
93
+ return `Bearer ${token}`;
94
+ });
95
+ // Store the region for potential client reuse
96
+ this.llamaClient["region"] = region;
97
+ }
98
+ return this.llamaClient;
99
+ }
100
+ async getAnthropicClient(region = this.options.region) {
101
+ // Extract region prefix and map if it exists in ANTHROPIC_REGIONS, otherwise use as-is
102
+ const getRegionPrefix = (r) => r.split('-')[0];
103
+ const regionPrefix = getRegionPrefix(region);
104
+ const mappedRegion = ANTHROPIC_REGIONS[regionPrefix] || region;
105
+ const defaultRegionPrefix = getRegionPrefix(this.options.region);
106
+ const defaultMappedRegion = ANTHROPIC_REGIONS[defaultRegionPrefix] || this.options.region;
107
+ // Get auth client to avoid version mismatch with GoogleAuth generic types
108
+ const authClient = await this.getAuthClient();
109
+ // If mapped region is different from default mapped region, create one-off client
110
+ if (mappedRegion !== defaultMappedRegion) {
111
+ return new AnthropicVertex({
112
+ timeout: 20 * 60 * 10000, // Set to 20 minutes, 10 minute default, setting this disables long request error: https://github.com/anthropics/anthropic-sdk-typescript?#long-requests
113
+ region: mappedRegion,
114
+ projectId: this.options.project,
115
+ authClient: authClient,
116
+ });
117
+ }
118
+ //Lazy initialization for default region
119
+ if (!this.anthropicClient) {
120
+ this.anthropicClient = new AnthropicVertex({
121
+ timeout: 20 * 60 * 10000, // Set to 20 minutes, 10 minute default, setting this disables long request error: https://github.com/anthropics/anthropic-sdk-typescript?#long-requests
122
+ region: mappedRegion,
123
+ projectId: this.options.project,
124
+ authClient: authClient,
125
+ });
126
+ }
127
+ return this.anthropicClient;
128
+ }
129
+ async getAIPlatformClient() {
130
+ //Lazy initialization
131
+ if (!this.aiplatform) {
132
+ const authClient = await this.getAuthClient();
133
+ this.aiplatform = new v1beta1.ModelServiceClient({
134
+ projectId: this.options.project,
135
+ apiEndpoint: `${this.options.region}-${API_BASE_PATH}`,
136
+ authClient,
137
+ });
138
+ }
139
+ return this.aiplatform;
140
+ }
141
+ async getModelGardenClient() {
142
+ //Lazy initialization
143
+ if (!this.modelGarden) {
144
+ const authClient = await this.getAuthClient();
145
+ this.modelGarden = new v1beta1.ModelGardenServiceClient({
146
+ projectId: this.options.project,
147
+ apiEndpoint: `${this.options.region}-${API_BASE_PATH}`,
148
+ authClient,
149
+ });
150
+ }
151
+ return this.modelGarden;
152
+ }
153
+ async getImagenClient() {
154
+ //Lazy initialization
155
+ if (!this.imagenClient) {
156
+ // TODO: make location configurable, fixed to us-central1 for now
157
+ const authClient = await this.getAuthClient();
158
+ this.imagenClient = new PredictionServiceClient({
159
+ projectId: this.options.project,
160
+ apiEndpoint: `us-central1-${API_BASE_PATH}`,
161
+ authClient,
162
+ });
163
+ }
164
+ return this.imagenClient;
165
+ }
166
+ validateResult(result, options) {
167
+ // Optionally preprocess the result before validation
168
+ const modelDef = getModelDefinition(options.model);
169
+ if (typeof modelDef.preValidationProcessing === "function") {
170
+ const processed = modelDef.preValidationProcessing(result, options);
171
+ result = processed.result;
172
+ options = processed.options;
173
+ }
174
+ super.validateResult(result, options);
175
+ }
176
+ canStream(options) {
177
+ if (this.isImageModel(options.model)) {
178
+ return Promise.resolve(false);
179
+ }
180
+ return Promise.resolve(getModelDefinition(options.model).model.can_stream === true);
181
+ }
182
+ isImageModel(model) {
183
+ return model.includes("imagen");
184
+ }
185
+ createPrompt(segments, options) {
186
+ if (this.isImageModel(options.model)) {
187
+ return new ImagenModelDefinition(options.model).createPrompt(this, segments, options);
188
+ }
189
+ return getModelDefinition(options.model).createPrompt(this, segments, options);
190
+ }
191
+ async requestTextCompletion(prompt, options) {
192
+ return getModelDefinition(options.model).requestTextCompletion(this, prompt, options);
193
+ }
194
+ async requestTextCompletionStream(prompt, options) {
195
+ return getModelDefinition(options.model).requestTextCompletionStream(this, prompt, options);
196
+ }
197
+ /**
198
+ * Build conversation context after streaming completion.
199
+ * Reconstructs the assistant message from accumulated results and applies stripping.
200
+ * Handles both Gemini (Content[]) and Claude (ClaudePrompt) formats.
201
+ */
202
+ buildStreamingConversation(prompt, result, toolUse, options) {
203
+ // Handle Claude-style prompts (has 'messages' array)
204
+ if ('messages' in prompt && Array.isArray(prompt.messages)) {
205
+ return this.buildClaudeStreamingConversation(prompt, result, toolUse, options);
206
+ }
207
+ // Only handle Gemini-style prompts with contents array
208
+ if (!('contents' in prompt) || !Array.isArray(prompt.contents)) {
209
+ return undefined;
210
+ }
211
+ const completionResults = result;
212
+ // Convert accumulated results to text content for assistant message
213
+ const textContent = completionResults
214
+ .map(r => {
215
+ switch (r.type) {
216
+ case 'text':
217
+ return r.value;
218
+ case 'json':
219
+ return typeof r.value === 'string' ? r.value : JSON.stringify(r.value);
220
+ case 'image':
221
+ // Skip images in conversation - they're in the result
222
+ return '';
223
+ default:
224
+ return String(r.value || '');
225
+ }
226
+ })
227
+ .join('');
228
+ // Build parts array for assistant message
229
+ const parts = [];
230
+ if (textContent) {
231
+ parts.push({ text: textContent });
232
+ }
233
+ // Add function calls if present (Gemini format)
234
+ if (toolUse && toolUse.length > 0) {
235
+ for (const tool of toolUse) {
236
+ const functionCallPart = {
237
+ functionCall: {
238
+ name: tool.tool_name,
239
+ args: tool.tool_input,
240
+ }
241
+ };
242
+ // Include thought_signature for Gemini thinking models (2.5+/3.0+)
243
+ // This must be preserved in the conversation for subsequent API calls
244
+ if (tool.thought_signature) {
245
+ functionCallPart.thoughtSignature = tool.thought_signature;
246
+ }
247
+ parts.push(functionCallPart);
248
+ }
249
+ }
250
+ // prompt.contents already includes the conversation history
251
+ // (merged in requestTextCompletionStream via updateConversation),
252
+ // so we use it directly — do NOT prepend options.conversation again.
253
+ let conversation = [
254
+ ...prompt.contents,
255
+ ];
256
+ // Only add assistant message if there's actual content
257
+ // (Empty text parts can cause API errors)
258
+ if (parts.length > 0) {
259
+ conversation.push({
260
+ role: 'model',
261
+ parts: parts
262
+ });
263
+ }
264
+ // Increment turn counter
265
+ conversation = incrementConversationTurn(conversation);
266
+ // Apply stripping based on options
267
+ const currentTurn = getConversationMeta(conversation).turnNumber;
268
+ const stripOptions = {
269
+ keepForTurns: options.stripImagesAfterTurns ?? Infinity,
270
+ currentTurn,
271
+ textMaxTokens: options.stripTextMaxTokens
272
+ };
273
+ let processedConversation = stripBase64ImagesFromConversation(conversation, stripOptions);
274
+ processedConversation = truncateLargeTextInConversation(processedConversation, stripOptions);
275
+ processedConversation = stripHeartbeatsFromConversation(processedConversation, {
276
+ keepForTurns: options.stripHeartbeatsAfterTurns ?? 1,
277
+ currentTurn,
278
+ });
279
+ // Preserve system instruction in conversation for Gemini multi-turn support.
280
+ // The Gemini API takes system as a separate parameter (not in contents),
281
+ // so we must store it in the conversation wrapper to survive serialization.
282
+ const geminiPrompt = prompt;
283
+ if (geminiPrompt.system) {
284
+ if (typeof processedConversation === 'object' && processedConversation !== null) {
285
+ processedConversation = { ...processedConversation, _llumiverse_system: geminiPrompt.system };
286
+ }
287
+ }
288
+ return processedConversation;
289
+ }
290
+ /**
291
+ * Build conversation for Claude streaming.
292
+ * Creates assistant message with tool_use blocks in Claude's ContentBlock format.
293
+ */
294
+ buildClaudeStreamingConversation(prompt, result, toolUse, options) {
295
+ const completionResults = result;
296
+ // Convert accumulated results to text content
297
+ const textContent = completionResults
298
+ .map(r => {
299
+ switch (r.type) {
300
+ case 'text':
301
+ return r.value;
302
+ case 'json':
303
+ return typeof r.value === 'string' ? r.value : JSON.stringify(r.value);
304
+ case 'image':
305
+ return '';
306
+ default:
307
+ return String(r.value || '');
308
+ }
309
+ })
310
+ .join('');
311
+ // Build Claude-style ContentBlock array for assistant message
312
+ const content = [];
313
+ // Add text block if there's text content
314
+ if (textContent) {
315
+ content.push({
316
+ type: 'text',
317
+ text: textContent
318
+ });
319
+ }
320
+ // Add tool_use blocks in Claude format
321
+ if (toolUse && toolUse.length > 0) {
322
+ for (const tool of toolUse) {
323
+ content.push({
324
+ type: 'tool_use',
325
+ id: tool.id,
326
+ name: tool.tool_name,
327
+ input: tool.tool_input ?? {}
328
+ });
329
+ }
330
+ }
331
+ // Claude's requestTextCompletionStream does NOT mutate prompt.messages
332
+ // to include history, so we must prepend options.conversation here.
333
+ const existingMessages = options.conversation?.messages ?? [];
334
+ const existingSystem = options.conversation?.system ?? prompt.system;
335
+ // Build the new messages array
336
+ const newMessages = [
337
+ ...existingMessages,
338
+ ...prompt.messages,
339
+ ];
340
+ // Only add assistant message if there's actual content
341
+ // (Claude API rejects empty text content blocks)
342
+ if (content.length > 0) {
343
+ newMessages.push({
344
+ role: 'assistant',
345
+ content: content
346
+ });
347
+ }
348
+ // Build the new conversation in ClaudePrompt format
349
+ const conversation = {
350
+ messages: newMessages,
351
+ system: existingSystem
352
+ };
353
+ // Increment turn counter
354
+ const withTurn = incrementConversationTurn(conversation);
355
+ // Apply stripping based on options
356
+ const currentTurn = getConversationMeta(withTurn).turnNumber;
357
+ const stripOptions = {
358
+ keepForTurns: options.stripImagesAfterTurns ?? Infinity,
359
+ currentTurn,
360
+ textMaxTokens: options.stripTextMaxTokens
361
+ };
362
+ let processedConversation = stripBase64ImagesFromConversation(withTurn, stripOptions);
363
+ processedConversation = truncateLargeTextInConversation(processedConversation, stripOptions);
364
+ processedConversation = stripHeartbeatsFromConversation(processedConversation, {
365
+ keepForTurns: options.stripHeartbeatsAfterTurns ?? 1,
366
+ currentTurn,
367
+ });
368
+ return processedConversation;
369
+ }
370
+ async requestImageGeneration(_prompt, _options) {
371
+ const splits = _options.model.split("/");
372
+ const modelName = trimModelName(splits[splits.length - 1]);
373
+ return new ImagenModelDefinition(modelName).requestImageGeneration(this, _prompt, _options);
374
+ }
375
+ async getGenAIModelsArray(client) {
376
+ const models = [];
377
+ const pager = await client.models.list();
378
+ for await (const item of pager) {
379
+ models.push(item);
380
+ }
381
+ return models;
382
+ }
383
+ async listModels(_params) {
384
+ // Get clients
385
+ const modelGarden = await this.getModelGardenClient();
386
+ const aiplatform = await this.getAIPlatformClient();
387
+ const globalGenAiClient = this.getGoogleGenAIClient("global");
388
+ let models = [];
389
+ //Model Garden Publisher models - Pretrained models
390
+ const publishers = ["google", "anthropic", "meta"];
391
+ // Meta "maas" models are LLama Models-As-A-Service. Non-maas models are not pre-deployed.
392
+ const supportedModels = { google: ["gemini", "imagen"], anthropic: ["claude"], meta: ["maas"] };
393
+ // Additional models not in the listings, but we want to include
394
+ // TODO: Remove once the models are available in the listing API, or no longer needed
395
+ const additionalModels = {
396
+ google: [
397
+ "imagen-3.0-fast-generate-001",
398
+ ],
399
+ anthropic: [],
400
+ meta: [
401
+ "llama-4-maverick-17b-128e-instruct-maas",
402
+ "llama-4-scout-17b-16e-instruct-maas",
403
+ "llama-3.3-70b-instruct-maas",
404
+ "llama-3.2-90b-vision-instruct-maas",
405
+ "llama-3.1-405b-instruct-maas",
406
+ "llama-3.1-70b-instruct-maas",
407
+ "llama-3.1-8b-instruct-maas",
408
+ ],
409
+ };
410
+ //Used to exclude retired models that are still in the listing API but not available for use.
411
+ //Or models we do not support yet
412
+ const unsupportedModelsByPublisher = {
413
+ google: ["gemini-pro", "gemini-ultra", "imagen-product-recontext-preview", "embedding", "gemini-live-2.5-flash-preview-native-audio", "computer-use-preview"],
414
+ anthropic: [],
415
+ meta: [],
416
+ };
417
+ // Start all network requests in parallel
418
+ const aiplatformPromise = aiplatform.listModels({
419
+ parent: `projects/${this.options.project}/locations/${this.options.region}`,
420
+ });
421
+ const publisherPromises = publishers.map(async (publisher) => {
422
+ const [response] = await modelGarden.listPublisherModels({
423
+ parent: `publishers/${publisher}`,
424
+ orderBy: "name",
425
+ listAllVersions: true,
426
+ });
427
+ return { publisher, response };
428
+ });
429
+ const globalGooglePromise = this.getGenAIModelsArray(globalGenAiClient);
430
+ // Await all network requests
431
+ const [aiplatformResult, globalGoogleResult, ...publisherResults] = await Promise.all([
432
+ aiplatformPromise,
433
+ globalGooglePromise,
434
+ ...publisherPromises,
435
+ ]);
436
+ // Process aiplatform models, project specific models
437
+ const [response] = aiplatformResult;
438
+ models = models.concat(response.map((model) => ({
439
+ id: model.name?.split("/").pop() ?? "",
440
+ name: model.displayName ?? "",
441
+ provider: "vertexai"
442
+ })));
443
+ // Process global google models from GenAI
444
+ models = models.concat(globalGoogleResult.map((model) => {
445
+ const modelCapability = getModelCapabilities(model.name ?? '', "vertexai");
446
+ return {
447
+ id: "locations/global/" + model.name,
448
+ name: "Global " + model.name?.split('/').pop(),
449
+ provider: "vertexai",
450
+ owner: "google",
451
+ input_modalities: modelModalitiesToArray(modelCapability.input),
452
+ output_modalities: modelModalitiesToArray(modelCapability.output),
453
+ tool_support: modelCapability.tool_support,
454
+ };
455
+ }));
456
+ // Process publisher models
457
+ for (const result of publisherResults) {
458
+ const { publisher, response } = result;
459
+ const modelFamily = supportedModels[publisher];
460
+ const retiredModels = unsupportedModelsByPublisher[publisher];
461
+ models = models.concat(response.filter((model) => {
462
+ const modelName = model.name ?? "";
463
+ // Exclude retired models
464
+ if (retiredModels.some(retiredModel => modelName.includes(retiredModel))) {
465
+ return false;
466
+ }
467
+ // Check if the model belongs to the supported model families
468
+ if (modelFamily.some(family => modelName.includes(family))) {
469
+ return true;
470
+ }
471
+ return false;
472
+ }).map(model => {
473
+ const modelCapability = getModelCapabilities(model.name ?? '', "vertexai");
474
+ return {
475
+ id: model.name ?? '',
476
+ name: model.name?.split('/').pop() ?? '',
477
+ provider: 'vertexai',
478
+ owner: publisher,
479
+ input_modalities: modelModalitiesToArray(modelCapability.input),
480
+ output_modalities: modelModalitiesToArray(modelCapability.output),
481
+ tool_support: modelCapability.tool_support,
482
+ };
483
+ }));
484
+ // Create global google gemini models for Gemini 2.5 and later, if missing from GenAI listing
485
+ if (publisher === 'google') {
486
+ const globalGeminiModels = response.filter((model) => {
487
+ const modelName = model.name ?? "";
488
+ if (retiredModels.some(retiredModel => modelName.includes(retiredModel))) {
489
+ return false;
490
+ }
491
+ if (modelFamily.some(family => modelName.includes(family))) {
492
+ const versionMatch = modelName.match(/gemini-(\d+(?:\.\d+)?)/);
493
+ if (versionMatch) {
494
+ const version = parseFloat(versionMatch[1]);
495
+ if (version >= 2.5) {
496
+ // Check if already present
497
+ const shortName = modelName.split('/').pop();
498
+ const globalName = "Global " + shortName;
499
+ if (models.some(m => m.name === globalName)) {
500
+ return false;
501
+ }
502
+ return true;
503
+ }
504
+ }
505
+ return false;
506
+ }
507
+ return false;
508
+ }).map(model => {
509
+ const modelCapability = getModelCapabilities(model.name ?? '', "vertexai");
510
+ return {
511
+ id: "locations/global/" + model.name,
512
+ name: "Global " + model.name?.split('/').pop(),
513
+ provider: 'vertexai',
514
+ owner: publisher,
515
+ input_modalities: modelModalitiesToArray(modelCapability.input),
516
+ output_modalities: modelModalitiesToArray(modelCapability.output),
517
+ tool_support: modelCapability.tool_support,
518
+ };
519
+ });
520
+ models = models.concat(globalGeminiModels);
521
+ }
522
+ // Create global anthropic models for those not in NON_GLOBAL_ANTHROPIC_MODELS
523
+ if (publisher === 'anthropic') {
524
+ const globalAnthropicModels = response.filter((model) => {
525
+ const modelName = model.name ?? "";
526
+ if (retiredModels.some(retiredModel => modelName.includes(retiredModel))) {
527
+ return false;
528
+ }
529
+ if (modelFamily.some(family => modelName.includes(family))) {
530
+ if (modelName.includes("claude-3-7")) {
531
+ return true;
532
+ }
533
+ return !NON_GLOBAL_ANTHROPIC_MODELS.some(nonGlobalModel => modelName.includes(nonGlobalModel));
534
+ }
535
+ return false;
536
+ }).map(model => {
537
+ const modelCapability = getModelCapabilities(model.name ?? '', "vertexai");
538
+ return {
539
+ id: "locations/global/" + model.name,
540
+ name: "Global " + model.name?.split('/').pop(),
541
+ provider: 'vertexai',
542
+ owner: publisher,
543
+ input_modalities: modelModalitiesToArray(modelCapability.input),
544
+ output_modalities: modelModalitiesToArray(modelCapability.output),
545
+ tool_support: modelCapability.tool_support,
546
+ };
547
+ });
548
+ models = models.concat(globalAnthropicModels);
549
+ }
550
+ // Add additional models that are not in the listing
551
+ for (const additionalModel of additionalModels[publisher]) {
552
+ const publisherModelName = `publishers/${publisher}/models/${additionalModel}`;
553
+ const modelCapability = getModelCapabilities(additionalModel, "vertexai");
554
+ models.push({
555
+ id: publisherModelName,
556
+ name: additionalModel,
557
+ provider: 'vertexai',
558
+ owner: publisher,
559
+ input_modalities: modelModalitiesToArray(modelCapability.input),
560
+ output_modalities: modelModalitiesToArray(modelCapability.output),
561
+ tool_support: modelCapability.tool_support,
562
+ });
563
+ }
564
+ }
565
+ //Remove duplicates
566
+ const uniqueModels = Array.from(new Set(models.map(a => a.id)))
567
+ .map(id => {
568
+ return models.find(a => a.id === id) ?? {};
569
+ }).sort((a, b) => a.id.localeCompare(b.id));
570
+ return uniqueModels;
571
+ }
572
+ validateConnection() {
573
+ throw new Error("Method not implemented.");
574
+ }
575
+ async generateEmbeddings(options) {
576
+ if (options.image || options.model?.includes("multimodal")) {
577
+ if (options.text && options.image) {
578
+ throw new Error("Text and Image simultaneous embedding not implemented. Submit separately");
579
+ }
580
+ return getEmbeddingsForImages(this, options);
581
+ }
582
+ const text_options = {
583
+ content: options.text ?? "",
584
+ model: options.model,
585
+ };
586
+ return getEmbeddingsForText(this, text_options);
587
+ }
588
+ /**
589
+ * Cleanup Google Cloud clients when the driver is evicted from the cache.
590
+ */
591
+ destroy() {
592
+ this.aiplatform?.close();
593
+ this.modelGarden?.close();
594
+ this.imagenClient?.close();
595
+ }
596
+ /**
597
+ * Format VertexAI errors by routing to model-specific error handlers.
598
+ * Each model definition (Gemini, Claude, Llama) can provide custom error parsing
599
+ * based on their specific SDK error structures.
600
+ *
601
+ * @param error - The error from the VertexAI/model SDK
602
+ * @param context - Context about where the error occurred
603
+ * @returns A standardized LlumiverseError
604
+ */
605
+ formatLlumiverseError(error, context) {
606
+ // Get the model definition for this request
607
+ const modelDef = getModelDefinition(context.model);
608
+ // If the model definition provides custom error handling, use it
609
+ if (modelDef.formatLlumiverseError) {
610
+ try {
611
+ return modelDef.formatLlumiverseError(this, error, context);
612
+ }
613
+ catch (formattingError) {
614
+ // If model-specific handler throws, fall through to default handling
615
+ // This allows model handlers to explicitly opt out for certain errors
616
+ }
617
+ }
618
+ // Fall back to default AbstractDriver error handling
619
+ return super.formatLlumiverseError(error, context);
620
+ }
621
+ }
622
+ //'us-central1-aiplatform.googleapis.com',
623
+ const API_BASE_PATH = "aiplatform.googleapis.com";
624
+ function createFetchClient({ region, project, apiEndpoint, apiVersion = "v1", }) {
625
+ const vertexBaseEndpoint = apiEndpoint ?? `${region}-${API_BASE_PATH}`;
626
+ return new FetchClient(`https://${vertexBaseEndpoint}/${apiVersion}/projects/${project}/locations/${region}`).withHeaders({
627
+ "Content-Type": "application/json",
628
+ });
629
+ }
630
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/vertexai/index.ts"],"names":[],"mappings":"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"}