Spaces:
Paused
Paused
Google Vertex API support (#950)
Browse files* Added Google Vertex API support
Google Application credentials can be set via
GOOGLE_APPLICATION_CREDENTIALS = clientid.json
* Updated the readme file
* Updated the package-lock file
* Updated the package-lock file
Fixed minor issues
* Moved "@google-cloud/vertexai" to optional dependencies
* Updated for lint checker
- README.md +36 -0
- package-lock.json +145 -8
- package.json +2 -1
- src/lib/server/endpoints/endpoints.ts +4 -0
- src/lib/server/endpoints/google/endpointVertex.ts +78 -0
- src/lib/server/models.ts +2 -0
README.md
CHANGED
|
@@ -528,6 +528,42 @@ You can also set `"service" : "lambda"` to use a lambda instance.
|
|
| 528 |
|
| 529 |
You can get the `accessKey` and `secretKey` from your AWS user, under programmatic access.
|
| 530 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 531 |
### Custom endpoint authorization
|
| 532 |
|
| 533 |
#### Basic and Bearer
|
|
|
|
| 528 |
|
| 529 |
You can get the `accessKey` and `secretKey` from your AWS user, under programmatic access.
|
| 530 |
|
| 531 |
+
##### Google Vertex models
|
| 532 |
+
|
| 533 |
+
Chat UI can connect to the google Vertex API endpoints ([List of supported models](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models)).
|
| 534 |
+
|
| 535 |
+
To enable:
|
| 536 |
+
|
| 537 |
+
1. [Select](https://console.cloud.google.com/project) or [create](https://cloud.google.com/resource-manager/docs/creating-managing-projects#creating_a_project) a Google Cloud project.
|
| 538 |
+
1. [Enable billing for your project](https://cloud.google.com/billing/docs/how-to/modify-project).
|
| 539 |
+
1. [Enable the Vertex AI API](https://console.cloud.google.com/flows/enableapi?apiid=aiplatform.googleapis.com).
|
| 540 |
+
1. [Set up authentication with a service account](https://cloud.google.com/docs/authentication/getting-started)
|
| 541 |
+
so you can access the API from your local workstation.
|
| 542 |
+
|
| 543 |
+
The service account credentials file can be imported as an environmental variable:
|
| 544 |
+
|
| 545 |
+
```env
|
| 546 |
+
GOOGLE_APPLICATION_CREDENTIALS = clientid.json
|
| 547 |
+
```
|
| 548 |
+
|
| 549 |
+
Make sure docker has access to the file. Afterwards Google Vertex endpoints can be configured as following:
|
| 550 |
+
|
| 551 |
+
```
|
| 552 |
+
MODELS=`[
|
| 553 |
+
//...
|
| 554 |
+
{
|
| 555 |
+
"name": "gemini-1.0-pro", //model-name
|
| 556 |
+
"displayName": "Vertex Gemini Pro 1.0",
|
| 557 |
+
"location": "europe-west3",
|
| 558 |
+
"apiEndpoint": "", //alternative api endpoint url
|
| 559 |
+
"endpoints" : [{
|
| 560 |
+
"type": "vertex"
|
| 561 |
+
}]
|
| 562 |
+
},
|
| 563 |
+
]`
|
| 564 |
+
|
| 565 |
+
```
|
| 566 |
+
|
| 567 |
### Custom endpoint authorization
|
| 568 |
|
| 569 |
#### Basic and Bearer
|
package-lock.json
CHANGED
|
@@ -74,7 +74,8 @@
|
|
| 74 |
"optionalDependencies": {
|
| 75 |
"@anthropic-ai/sdk": "^0.17.1",
|
| 76 |
"aws4fetch": "^1.0.17",
|
| 77 |
-
"openai": "^4.14.2"
|
|
|
|
| 78 |
}
|
| 79 |
},
|
| 80 |
"node_modules/@alloc/quick-lru": {
|
|
@@ -628,6 +629,17 @@
|
|
| 628 |
"node": ">=14"
|
| 629 |
}
|
| 630 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 631 |
"node_modules/@huggingface/hub": {
|
| 632 |
"version": "0.5.1",
|
| 633 |
"resolved": "https://registry.npmjs.org/@huggingface/hub/-/hub-0.5.1.tgz",
|
|
@@ -2679,6 +2691,14 @@
|
|
| 2679 |
}
|
| 2680 |
]
|
| 2681 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2682 |
"node_modules/binary-extensions": {
|
| 2683 |
"version": "2.2.0",
|
| 2684 |
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
|
|
@@ -2809,6 +2829,11 @@
|
|
| 2809 |
"node": "*"
|
| 2810 |
}
|
| 2811 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2812 |
"node_modules/bufferutil": {
|
| 2813 |
"version": "4.0.7",
|
| 2814 |
"resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz",
|
|
@@ -3433,6 +3458,14 @@
|
|
| 3433 |
"node": ">=12"
|
| 3434 |
}
|
| 3435 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3436 |
"node_modules/electron-to-chromium": {
|
| 3437 |
"version": "1.4.359",
|
| 3438 |
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.359.tgz",
|
|
@@ -3787,6 +3820,11 @@
|
|
| 3787 |
"node": ">=6"
|
| 3788 |
}
|
| 3789 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3790 |
"node_modules/fast-deep-equal": {
|
| 3791 |
"version": "3.1.3",
|
| 3792 |
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
|
@@ -3993,6 +4031,55 @@
|
|
| 3993 |
"url": "https://github.com/sponsors/ljharb"
|
| 3994 |
}
|
| 3995 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3996 |
"node_modules/get-func-name": {
|
| 3997 |
"version": "2.0.2",
|
| 3998 |
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
|
|
@@ -4097,6 +4184,22 @@
|
|
| 4097 |
"integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==",
|
| 4098 |
"dev": true
|
| 4099 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4100 |
"node_modules/graceful-fs": {
|
| 4101 |
"version": "4.2.11",
|
| 4102 |
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
|
|
@@ -4115,6 +4218,18 @@
|
|
| 4115 |
"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
|
| 4116 |
"dev": true
|
| 4117 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4118 |
"node_modules/guid-typescript": {
|
| 4119 |
"version": "1.0.9",
|
| 4120 |
"resolved": "https://registry.npmjs.org/guid-typescript/-/guid-typescript-1.0.9.tgz",
|
|
@@ -4460,7 +4575,6 @@
|
|
| 4460 |
"version": "2.0.1",
|
| 4461 |
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
|
| 4462 |
"integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
|
| 4463 |
-
"dev": true,
|
| 4464 |
"engines": {
|
| 4465 |
"node": ">=8"
|
| 4466 |
},
|
|
@@ -4590,6 +4704,14 @@
|
|
| 4590 |
"node": ">=14"
|
| 4591 |
}
|
| 4592 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4593 |
"node_modules/json-schema-traverse": {
|
| 4594 |
"version": "0.4.1",
|
| 4595 |
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
|
|
@@ -4619,6 +4741,25 @@
|
|
| 4619 |
"integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==",
|
| 4620 |
"dev": true
|
| 4621 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4622 |
"node_modules/katex": {
|
| 4623 |
"version": "0.16.10",
|
| 4624 |
"resolved": "https://registry.npmjs.org/katex/-/katex-0.16.10.tgz",
|
|
@@ -5152,7 +5293,6 @@
|
|
| 5152 |
"version": "2.7.0",
|
| 5153 |
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
|
| 5154 |
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
|
| 5155 |
-
"optional": true,
|
| 5156 |
"dependencies": {
|
| 5157 |
"whatwg-url": "^5.0.0"
|
| 5158 |
},
|
|
@@ -5171,20 +5311,17 @@
|
|
| 5171 |
"node_modules/node-fetch/node_modules/tr46": {
|
| 5172 |
"version": "0.0.3",
|
| 5173 |
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
|
| 5174 |
-
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
|
| 5175 |
-
"optional": true
|
| 5176 |
},
|
| 5177 |
"node_modules/node-fetch/node_modules/webidl-conversions": {
|
| 5178 |
"version": "3.0.1",
|
| 5179 |
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
| 5180 |
-
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
|
| 5181 |
-
"optional": true
|
| 5182 |
},
|
| 5183 |
"node_modules/node-fetch/node_modules/whatwg-url": {
|
| 5184 |
"version": "5.0.0",
|
| 5185 |
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
|
| 5186 |
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
|
| 5187 |
-
"optional": true,
|
| 5188 |
"dependencies": {
|
| 5189 |
"tr46": "~0.0.3",
|
| 5190 |
"webidl-conversions": "^3.0.0"
|
|
|
|
| 74 |
"optionalDependencies": {
|
| 75 |
"@anthropic-ai/sdk": "^0.17.1",
|
| 76 |
"aws4fetch": "^1.0.17",
|
| 77 |
+
"openai": "^4.14.2",
|
| 78 |
+
"@google-cloud/vertexai": "^0.5.0"
|
| 79 |
}
|
| 80 |
},
|
| 81 |
"node_modules/@alloc/quick-lru": {
|
|
|
|
| 629 |
"node": ">=14"
|
| 630 |
}
|
| 631 |
},
|
| 632 |
+
"node_modules/@google-cloud/vertexai": {
|
| 633 |
+
"version": "0.5.0",
|
| 634 |
+
"resolved": "https://registry.npmjs.org/@google-cloud/vertexai/-/vertexai-0.5.0.tgz",
|
| 635 |
+
"integrity": "sha512-qIFHYTXA5UCLdm9JG+Xf1suomCXxRqa1PKdYjqXuhZsCm8mn37Rb0Tf8djlhDzuRVWyWoQTmsWpsk28ZTmbqJg==",
|
| 636 |
+
"dependencies": {
|
| 637 |
+
"google-auth-library": "^9.1.0"
|
| 638 |
+
},
|
| 639 |
+
"engines": {
|
| 640 |
+
"node": ">=18.0.0"
|
| 641 |
+
}
|
| 642 |
+
},
|
| 643 |
"node_modules/@huggingface/hub": {
|
| 644 |
"version": "0.5.1",
|
| 645 |
"resolved": "https://registry.npmjs.org/@huggingface/hub/-/hub-0.5.1.tgz",
|
|
|
|
| 2691 |
}
|
| 2692 |
]
|
| 2693 |
},
|
| 2694 |
+
"node_modules/bignumber.js": {
|
| 2695 |
+
"version": "9.1.2",
|
| 2696 |
+
"resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz",
|
| 2697 |
+
"integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==",
|
| 2698 |
+
"engines": {
|
| 2699 |
+
"node": "*"
|
| 2700 |
+
}
|
| 2701 |
+
},
|
| 2702 |
"node_modules/binary-extensions": {
|
| 2703 |
"version": "2.2.0",
|
| 2704 |
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
|
|
|
|
| 2829 |
"node": "*"
|
| 2830 |
}
|
| 2831 |
},
|
| 2832 |
+
"node_modules/buffer-equal-constant-time": {
|
| 2833 |
+
"version": "1.0.1",
|
| 2834 |
+
"resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
|
| 2835 |
+
"integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="
|
| 2836 |
+
},
|
| 2837 |
"node_modules/bufferutil": {
|
| 2838 |
"version": "4.0.7",
|
| 2839 |
"resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz",
|
|
|
|
| 3458 |
"node": ">=12"
|
| 3459 |
}
|
| 3460 |
},
|
| 3461 |
+
"node_modules/ecdsa-sig-formatter": {
|
| 3462 |
+
"version": "1.0.11",
|
| 3463 |
+
"resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
|
| 3464 |
+
"integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
|
| 3465 |
+
"dependencies": {
|
| 3466 |
+
"safe-buffer": "^5.0.1"
|
| 3467 |
+
}
|
| 3468 |
+
},
|
| 3469 |
"node_modules/electron-to-chromium": {
|
| 3470 |
"version": "1.4.359",
|
| 3471 |
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.359.tgz",
|
|
|
|
| 3820 |
"node": ">=6"
|
| 3821 |
}
|
| 3822 |
},
|
| 3823 |
+
"node_modules/extend": {
|
| 3824 |
+
"version": "3.0.2",
|
| 3825 |
+
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
|
| 3826 |
+
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
|
| 3827 |
+
},
|
| 3828 |
"node_modules/fast-deep-equal": {
|
| 3829 |
"version": "3.1.3",
|
| 3830 |
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
|
|
|
| 4031 |
"url": "https://github.com/sponsors/ljharb"
|
| 4032 |
}
|
| 4033 |
},
|
| 4034 |
+
"node_modules/gaxios": {
|
| 4035 |
+
"version": "6.3.0",
|
| 4036 |
+
"resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.3.0.tgz",
|
| 4037 |
+
"integrity": "sha512-p+ggrQw3fBwH2F5N/PAI4k/G/y1art5OxKpb2J2chwNNHM4hHuAOtivjPuirMF4KNKwTTUal/lPfL2+7h2mEcg==",
|
| 4038 |
+
"dependencies": {
|
| 4039 |
+
"extend": "^3.0.2",
|
| 4040 |
+
"https-proxy-agent": "^7.0.1",
|
| 4041 |
+
"is-stream": "^2.0.0",
|
| 4042 |
+
"node-fetch": "^2.6.9"
|
| 4043 |
+
},
|
| 4044 |
+
"engines": {
|
| 4045 |
+
"node": ">=14"
|
| 4046 |
+
}
|
| 4047 |
+
},
|
| 4048 |
+
"node_modules/gaxios/node_modules/agent-base": {
|
| 4049 |
+
"version": "7.1.0",
|
| 4050 |
+
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz",
|
| 4051 |
+
"integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==",
|
| 4052 |
+
"dependencies": {
|
| 4053 |
+
"debug": "^4.3.4"
|
| 4054 |
+
},
|
| 4055 |
+
"engines": {
|
| 4056 |
+
"node": ">= 14"
|
| 4057 |
+
}
|
| 4058 |
+
},
|
| 4059 |
+
"node_modules/gaxios/node_modules/https-proxy-agent": {
|
| 4060 |
+
"version": "7.0.4",
|
| 4061 |
+
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz",
|
| 4062 |
+
"integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==",
|
| 4063 |
+
"dependencies": {
|
| 4064 |
+
"agent-base": "^7.0.2",
|
| 4065 |
+
"debug": "4"
|
| 4066 |
+
},
|
| 4067 |
+
"engines": {
|
| 4068 |
+
"node": ">= 14"
|
| 4069 |
+
}
|
| 4070 |
+
},
|
| 4071 |
+
"node_modules/gcp-metadata": {
|
| 4072 |
+
"version": "6.1.0",
|
| 4073 |
+
"resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.0.tgz",
|
| 4074 |
+
"integrity": "sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==",
|
| 4075 |
+
"dependencies": {
|
| 4076 |
+
"gaxios": "^6.0.0",
|
| 4077 |
+
"json-bigint": "^1.0.0"
|
| 4078 |
+
},
|
| 4079 |
+
"engines": {
|
| 4080 |
+
"node": ">=14"
|
| 4081 |
+
}
|
| 4082 |
+
},
|
| 4083 |
"node_modules/get-func-name": {
|
| 4084 |
"version": "2.0.2",
|
| 4085 |
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
|
|
|
|
| 4184 |
"integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==",
|
| 4185 |
"dev": true
|
| 4186 |
},
|
| 4187 |
+
"node_modules/google-auth-library": {
|
| 4188 |
+
"version": "9.7.0",
|
| 4189 |
+
"resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.7.0.tgz",
|
| 4190 |
+
"integrity": "sha512-I/AvzBiUXDzLOy4iIZ2W+Zq33W4lcukQv1nl7C8WUA6SQwyQwUwu3waNmWNAvzds//FG8SZ+DnKnW/2k6mQS8A==",
|
| 4191 |
+
"dependencies": {
|
| 4192 |
+
"base64-js": "^1.3.0",
|
| 4193 |
+
"ecdsa-sig-formatter": "^1.0.11",
|
| 4194 |
+
"gaxios": "^6.1.1",
|
| 4195 |
+
"gcp-metadata": "^6.1.0",
|
| 4196 |
+
"gtoken": "^7.0.0",
|
| 4197 |
+
"jws": "^4.0.0"
|
| 4198 |
+
},
|
| 4199 |
+
"engines": {
|
| 4200 |
+
"node": ">=14"
|
| 4201 |
+
}
|
| 4202 |
+
},
|
| 4203 |
"node_modules/graceful-fs": {
|
| 4204 |
"version": "4.2.11",
|
| 4205 |
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
|
|
|
|
| 4218 |
"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
|
| 4219 |
"dev": true
|
| 4220 |
},
|
| 4221 |
+
"node_modules/gtoken": {
|
| 4222 |
+
"version": "7.1.0",
|
| 4223 |
+
"resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz",
|
| 4224 |
+
"integrity": "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==",
|
| 4225 |
+
"dependencies": {
|
| 4226 |
+
"gaxios": "^6.0.0",
|
| 4227 |
+
"jws": "^4.0.0"
|
| 4228 |
+
},
|
| 4229 |
+
"engines": {
|
| 4230 |
+
"node": ">=14.0.0"
|
| 4231 |
+
}
|
| 4232 |
+
},
|
| 4233 |
"node_modules/guid-typescript": {
|
| 4234 |
"version": "1.0.9",
|
| 4235 |
"resolved": "https://registry.npmjs.org/guid-typescript/-/guid-typescript-1.0.9.tgz",
|
|
|
|
| 4575 |
"version": "2.0.1",
|
| 4576 |
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
|
| 4577 |
"integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
|
|
|
|
| 4578 |
"engines": {
|
| 4579 |
"node": ">=8"
|
| 4580 |
},
|
|
|
|
| 4704 |
"node": ">=14"
|
| 4705 |
}
|
| 4706 |
},
|
| 4707 |
+
"node_modules/json-bigint": {
|
| 4708 |
+
"version": "1.0.0",
|
| 4709 |
+
"resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
|
| 4710 |
+
"integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
|
| 4711 |
+
"dependencies": {
|
| 4712 |
+
"bignumber.js": "^9.0.0"
|
| 4713 |
+
}
|
| 4714 |
+
},
|
| 4715 |
"node_modules/json-schema-traverse": {
|
| 4716 |
"version": "0.4.1",
|
| 4717 |
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
|
|
|
|
| 4741 |
"integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==",
|
| 4742 |
"dev": true
|
| 4743 |
},
|
| 4744 |
+
"node_modules/jwa": {
|
| 4745 |
+
"version": "2.0.0",
|
| 4746 |
+
"resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
|
| 4747 |
+
"integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==",
|
| 4748 |
+
"dependencies": {
|
| 4749 |
+
"buffer-equal-constant-time": "1.0.1",
|
| 4750 |
+
"ecdsa-sig-formatter": "1.0.11",
|
| 4751 |
+
"safe-buffer": "^5.0.1"
|
| 4752 |
+
}
|
| 4753 |
+
},
|
| 4754 |
+
"node_modules/jws": {
|
| 4755 |
+
"version": "4.0.0",
|
| 4756 |
+
"resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
|
| 4757 |
+
"integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
|
| 4758 |
+
"dependencies": {
|
| 4759 |
+
"jwa": "^2.0.0",
|
| 4760 |
+
"safe-buffer": "^5.0.1"
|
| 4761 |
+
}
|
| 4762 |
+
},
|
| 4763 |
"node_modules/katex": {
|
| 4764 |
"version": "0.16.10",
|
| 4765 |
"resolved": "https://registry.npmjs.org/katex/-/katex-0.16.10.tgz",
|
|
|
|
| 5293 |
"version": "2.7.0",
|
| 5294 |
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
|
| 5295 |
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
|
|
|
|
| 5296 |
"dependencies": {
|
| 5297 |
"whatwg-url": "^5.0.0"
|
| 5298 |
},
|
|
|
|
| 5311 |
"node_modules/node-fetch/node_modules/tr46": {
|
| 5312 |
"version": "0.0.3",
|
| 5313 |
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
|
| 5314 |
+
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
|
|
|
|
| 5315 |
},
|
| 5316 |
"node_modules/node-fetch/node_modules/webidl-conversions": {
|
| 5317 |
"version": "3.0.1",
|
| 5318 |
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
| 5319 |
+
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
|
|
|
|
| 5320 |
},
|
| 5321 |
"node_modules/node-fetch/node_modules/whatwg-url": {
|
| 5322 |
"version": "5.0.0",
|
| 5323 |
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
|
| 5324 |
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
|
|
|
|
| 5325 |
"dependencies": {
|
| 5326 |
"tr46": "~0.0.3",
|
| 5327 |
"webidl-conversions": "^3.0.0"
|
package.json
CHANGED
|
@@ -84,6 +84,7 @@
|
|
| 84 |
"optionalDependencies": {
|
| 85 |
"@anthropic-ai/sdk": "^0.17.1",
|
| 86 |
"aws4fetch": "^1.0.17",
|
| 87 |
-
"openai": "^4.14.2"
|
|
|
|
| 88 |
}
|
| 89 |
}
|
|
|
|
| 84 |
"optionalDependencies": {
|
| 85 |
"@anthropic-ai/sdk": "^0.17.1",
|
| 86 |
"aws4fetch": "^1.0.17",
|
| 87 |
+
"openai": "^4.14.2",
|
| 88 |
+
"@google-cloud/vertexai": "^0.5.0"
|
| 89 |
}
|
| 90 |
}
|
src/lib/server/endpoints/endpoints.ts
CHANGED
|
@@ -6,6 +6,8 @@ import endpointAws, { endpointAwsParametersSchema } from "./aws/endpointAws";
|
|
| 6 |
import { endpointOAIParametersSchema, endpointOai } from "./openai/endpointOai";
|
| 7 |
import endpointLlamacpp, { endpointLlamacppParametersSchema } from "./llamacpp/endpointLlamacpp";
|
| 8 |
import endpointOllama, { endpointOllamaParametersSchema } from "./ollama/endpointOllama";
|
|
|
|
|
|
|
| 9 |
import {
|
| 10 |
endpointAnthropic,
|
| 11 |
endpointAnthropicParametersSchema,
|
|
@@ -39,6 +41,7 @@ export const endpoints = {
|
|
| 39 |
openai: endpointOai,
|
| 40 |
llamacpp: endpointLlamacpp,
|
| 41 |
ollama: endpointOllama,
|
|
|
|
| 42 |
};
|
| 43 |
|
| 44 |
export const endpointSchema = z.discriminatedUnion("type", [
|
|
@@ -48,5 +51,6 @@ export const endpointSchema = z.discriminatedUnion("type", [
|
|
| 48 |
endpointTgiParametersSchema,
|
| 49 |
endpointLlamacppParametersSchema,
|
| 50 |
endpointOllamaParametersSchema,
|
|
|
|
| 51 |
]);
|
| 52 |
export default endpoints;
|
|
|
|
| 6 |
import { endpointOAIParametersSchema, endpointOai } from "./openai/endpointOai";
|
| 7 |
import endpointLlamacpp, { endpointLlamacppParametersSchema } from "./llamacpp/endpointLlamacpp";
|
| 8 |
import endpointOllama, { endpointOllamaParametersSchema } from "./ollama/endpointOllama";
|
| 9 |
+
import endpointVertex, { endpointVertexParametersSchema } from "./google/endpointVertex";
|
| 10 |
+
|
| 11 |
import {
|
| 12 |
endpointAnthropic,
|
| 13 |
endpointAnthropicParametersSchema,
|
|
|
|
| 41 |
openai: endpointOai,
|
| 42 |
llamacpp: endpointLlamacpp,
|
| 43 |
ollama: endpointOllama,
|
| 44 |
+
vertex: endpointVertex,
|
| 45 |
};
|
| 46 |
|
| 47 |
export const endpointSchema = z.discriminatedUnion("type", [
|
|
|
|
| 51 |
endpointTgiParametersSchema,
|
| 52 |
endpointLlamacppParametersSchema,
|
| 53 |
endpointOllamaParametersSchema,
|
| 54 |
+
endpointVertexParametersSchema,
|
| 55 |
]);
|
| 56 |
export default endpoints;
|
src/lib/server/endpoints/google/endpointVertex.ts
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { VertexAI, HarmCategory, HarmBlockThreshold } from "@google-cloud/vertexai";
|
| 2 |
+
import { buildPrompt } from "$lib/buildPrompt";
|
| 3 |
+
import type { TextGenerationStreamOutput } from "@huggingface/inference";
|
| 4 |
+
import type { Endpoint } from "../endpoints";
|
| 5 |
+
import { z } from "zod";
|
| 6 |
+
|
| 7 |
+
export const endpointVertexParametersSchema = z.object({
|
| 8 |
+
weight: z.number().int().positive().default(1),
|
| 9 |
+
model: z.any(), // allow optional and validate against emptiness
|
| 10 |
+
type: z.literal("vertex"),
|
| 11 |
+
location: z.string().default("europe-west1"),
|
| 12 |
+
project: z.string(),
|
| 13 |
+
apiEndpoint: z.string().optional(),
|
| 14 |
+
});
|
| 15 |
+
|
| 16 |
+
export function endpointVertex(input: z.input<typeof endpointVertexParametersSchema>): Endpoint {
|
| 17 |
+
const { project, location, model, apiEndpoint } = endpointVertexParametersSchema.parse(input);
|
| 18 |
+
|
| 19 |
+
const vertex_ai = new VertexAI({
|
| 20 |
+
project,
|
| 21 |
+
location,
|
| 22 |
+
apiEndpoint,
|
| 23 |
+
});
|
| 24 |
+
|
| 25 |
+
const generativeModel = vertex_ai.getGenerativeModel({
|
| 26 |
+
model: model.id ?? model.name,
|
| 27 |
+
safety_settings: [
|
| 28 |
+
{
|
| 29 |
+
category: HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
|
| 30 |
+
threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
|
| 31 |
+
},
|
| 32 |
+
],
|
| 33 |
+
generation_config: {},
|
| 34 |
+
});
|
| 35 |
+
|
| 36 |
+
return async ({ messages, preprompt, continueMessage }) => {
|
| 37 |
+
const prompt = await buildPrompt({
|
| 38 |
+
messages,
|
| 39 |
+
continueMessage,
|
| 40 |
+
preprompt,
|
| 41 |
+
model,
|
| 42 |
+
});
|
| 43 |
+
|
| 44 |
+
const chat = generativeModel.startChat();
|
| 45 |
+
const result = await chat.sendMessageStream(prompt);
|
| 46 |
+
let tokenId = 0;
|
| 47 |
+
|
| 48 |
+
return (async function* () {
|
| 49 |
+
let generatedText = "";
|
| 50 |
+
|
| 51 |
+
for await (const data of result.stream) {
|
| 52 |
+
if (Array.isArray(data?.candidates) && data.candidates.length > 0) {
|
| 53 |
+
const firstPart = data.candidates[0].content.parts[0];
|
| 54 |
+
if ("text" in firstPart) {
|
| 55 |
+
const content = firstPart.text;
|
| 56 |
+
generatedText += content;
|
| 57 |
+
const output: TextGenerationStreamOutput = {
|
| 58 |
+
token: {
|
| 59 |
+
id: tokenId++,
|
| 60 |
+
text: content ?? "",
|
| 61 |
+
logprob: 0,
|
| 62 |
+
special: false,
|
| 63 |
+
},
|
| 64 |
+
generated_text: generatedText,
|
| 65 |
+
details: null,
|
| 66 |
+
};
|
| 67 |
+
yield output;
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
if (!data.candidates.slice(-1)[0].finishReason) break;
|
| 71 |
+
} else {
|
| 72 |
+
break;
|
| 73 |
+
}
|
| 74 |
+
}
|
| 75 |
+
})();
|
| 76 |
+
};
|
| 77 |
+
}
|
| 78 |
+
export default endpointVertex;
|
src/lib/server/models.ts
CHANGED
|
@@ -128,6 +128,8 @@ const addEndpoint = (m: Awaited<ReturnType<typeof processModel>>) => ({
|
|
| 128 |
return endpoints.llamacpp(args);
|
| 129 |
case "ollama":
|
| 130 |
return endpoints.ollama(args);
|
|
|
|
|
|
|
| 131 |
default:
|
| 132 |
// for legacy reason
|
| 133 |
return endpoints.tgi(args);
|
|
|
|
| 128 |
return endpoints.llamacpp(args);
|
| 129 |
case "ollama":
|
| 130 |
return endpoints.ollama(args);
|
| 131 |
+
case "vertex":
|
| 132 |
+
return await endpoints.vertex(args);
|
| 133 |
default:
|
| 134 |
// for legacy reason
|
| 135 |
return endpoints.tgi(args);
|