Rfym21 commited on
Commit
e50f64a
·
verified ·
1 Parent(s): 38bdebe

Upload 7 files

Browse files
Dockerfile ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 使用 node:20.16.0-alpine 作为基础镜像
2
+ FROM node:20.16.0-alpine
3
+
4
+ # 设置工作目录
5
+ WORKDIR /app
6
+
7
+ # 复制 package.json 和 package-lock.json 到工作目录
8
+ COPY package*.json ./
9
+
10
+ # 设置环境变量
11
+ ENV API_PREFIX="" \
12
+ API_KEY="" \
13
+ MAX_RETRY_COUNT=3 \
14
+ RETRY_DELAY=10000 \
15
+ PORT=8787
16
+
17
+ # 安装项目依赖
18
+ RUN npm install
19
+
20
+ # 复制项目的源代码到工作目录
21
+ COPY . .
22
+
23
+ # 暴露应用运行的端口(假设应用运行在 3000 端口)
24
+ EXPOSE 8787
25
+
26
+ # 启动应用
27
+ CMD ["npm", "run", "dev"]
GPTInferenceService.proto ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ syntax = "proto3"; // 使用Protobuf版本3
2
+
3
+ package runtime.aot.machine_learning.parents.gpt;
4
+
5
+ service GPTInferenceService {
6
+ rpc Predict (Request) returns (Response);
7
+ rpc PredictWithStream (Request) returns (stream Response);
8
+ }
9
+
10
+ // Global
11
+ message Message {
12
+ uint64 role = 1; // 值 0 为 system,1 为普通,回复中只有 1
13
+ string message = 2;
14
+ }
15
+
16
+ // Requests
17
+ message Request {
18
+ string models = 1; // 模型名称
19
+ repeated Message messages = 2; // 消息列表
20
+ double temperature = 3; // 采样温度
21
+ double top_p = 4; // 核心采样
22
+ }
23
+
24
+ // Response
25
+ message Response {
26
+ uint64 response_code = 2; // 返回状态码,200,439 等,204 为终止
27
+ optional Body body = 4;
28
+ }
29
+
30
+ message Body{
31
+ string id = 1; // eg.chatcmpl-ANcM3OsoLf6AXJpO76pDoW7Ry68oc
32
+ string object = 2; // eg. chat.completion
33
+ uint64 time = 3; // UNIX时间戳
34
+ MessageWarpper message_warpper = 4;
35
+ Unknown unknown = 5;
36
+ }
37
+
38
+ message MessageWarpper {
39
+ int64 arg1 = 1; // 也许是常量1
40
+ Message message = 2; // 回应的消息 wt u need
41
+ }
42
+
43
+ message Unknown {
44
+ // 都不知道
45
+ int64 arg1 = 1;
46
+ int64 arg2 = 2;
47
+ int64 arg3 = 3;
48
+ }
VertexInferenceService.proto ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ syntax = "proto3"; // 使用Protobuf版本3
2
+
3
+ package runtime.aot.machine_learning.parents.vertex;
4
+
5
+ service VertexInferenceService {
6
+ rpc Predict (Requests) returns (Response);
7
+ rpc PredictWithStream (Requests) returns (stream Response);
8
+ }
9
+ //Global
10
+ message Messages{
11
+ int64 unknown = 1; // 也许只是常量1(请求)/3(回应)
12
+ string message = 2; // 消息
13
+ }
14
+
15
+ // Requests
16
+ message Requests {
17
+ string models = 1; // 模型名称
18
+ Args args = 2;
19
+ }
20
+
21
+ message Args {
22
+ reserved 1;
23
+ Messages messages = 2; // 消息,可以视作user
24
+ string rules = 3; // 规则,可以视作system
25
+ }
26
+
27
+ // Response
28
+ message Response {
29
+ int64 response_code = 2; // 返回状态码,200,439等
30
+ Args1 args = 4;
31
+ }
32
+
33
+ message Args1{
34
+ Args2 args = 1; // 不知道什么意义的套一层
35
+ }
36
+
37
+ message Args2{
38
+ Messages args = 2; // 不知道什么意义的套一层
39
+ }
cloud_model.json ADDED
@@ -0,0 +1,975 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "iterable": [
3
+ {
4
+ "schema": {
5
+ "migration": 0,
6
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
7
+ },
8
+ "id": "031da359-0208-426f-97b2-5a701fd5562f",
9
+ "version": "t11-v09-i01",
10
+ "created": {
11
+ "value": "2024-05-22T16:00:00.000Z",
12
+ "readable": "5 months ago"
13
+ },
14
+ "name": "Phi-3-mini-4k-instruct",
15
+ "type": "SPEED",
16
+ "usage": "CODE_CONVERSATION",
17
+ "foundation": "PHI_3_MINI",
18
+ "loaded": false,
19
+ "unique": "Phi-3-mini-4k-instruct.q4_K_M",
20
+ "cpu": false,
21
+ "downloading": false,
22
+ "maxTokens": {
23
+ "total": 2560,
24
+ "input": 2048,
25
+ "output": 512
26
+ }
27
+ },
28
+ {
29
+ "schema": {
30
+ "migration": 0,
31
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
32
+ },
33
+ "id": "06bb0f96-6fbf-4668-ab5e-7b8ec17e5298",
34
+ "version": "t16-v01-i01",
35
+ "created": {
36
+ "value": "2023-09-15T16:00:00.000Z",
37
+ "readable": "about a year ago"
38
+ },
39
+ "name": "(PaLM2) Chat Model",
40
+ "cloud": true,
41
+ "type": "BALANCED",
42
+ "usage": "CODE_CONVERSATION",
43
+ "foundation": "CHAT_BISON",
44
+ "loaded": false,
45
+ "unique": "chat-bison",
46
+ "provider": "GOOGLE",
47
+ "cpu": false,
48
+ "downloading": false,
49
+ "maxTokens": {
50
+ "total": 9000,
51
+ "input": 8000,
52
+ "output": 1000
53
+ }
54
+ },
55
+ {
56
+ "schema": {
57
+ "migration": 0,
58
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
59
+ },
60
+ "id": "0f1828ec-143f-4407-81b2-3bec18f8e5e7",
61
+ "version": "t31-v01-i01",
62
+ "created": {
63
+ "value": "2024-07-17T16:00:00.000Z",
64
+ "readable": "3 months ago"
65
+ },
66
+ "name": "GPT-4o Mini Chat Model",
67
+ "cloud": true,
68
+ "type": "SPEED",
69
+ "usage": "CODE_CONVERSATION",
70
+ "foundation": "GPT_4",
71
+ "loaded": false,
72
+ "unique": "gpt-4o-mini",
73
+ "provider": "OPENAI",
74
+ "cpu": false,
75
+ "downloading": false,
76
+ "maxTokens": {
77
+ "total": 80384,
78
+ "input": 64000,
79
+ "output": 16384
80
+ }
81
+ },
82
+ {
83
+ "schema": {
84
+ "migration": 0,
85
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
86
+ },
87
+ "id": "12b21e42-65fc-4e86-939e-f25e8cdc9d53",
88
+ "version": "t09-v01-i01",
89
+ "created": {
90
+ "value": "2023-05-22T16:00:00.000Z",
91
+ "readable": "about a year ago"
92
+ },
93
+ "name": "Extractive Tags Model",
94
+ "type": "BALANCED",
95
+ "usage": "CODE_EXTRACTIVE_TAGS",
96
+ "foundation": "T5",
97
+ "loaded": false,
98
+ "cpu": true,
99
+ "downloading": false
100
+ },
101
+ {
102
+ "schema": {
103
+ "migration": 0,
104
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
105
+ },
106
+ "id": "135883b4-a624-49bc-a179-e59a5eac66a8",
107
+ "version": "t06-v03-i01",
108
+ "created": {
109
+ "value": "2023-05-31T16:00:00.000Z",
110
+ "readable": "about a year ago"
111
+ },
112
+ "name": "Neural Code Search Model",
113
+ "type": "BALANCED",
114
+ "usage": "TLP_NEURAL_CODE_SEARCH",
115
+ "loaded": false,
116
+ "cpu": true,
117
+ "downloading": false
118
+ },
119
+ {
120
+ "schema": {
121
+ "migration": 0,
122
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
123
+ },
124
+ "id": "187c5a80-8cf4-4e4a-85b3-7d297f1c792c",
125
+ "version": "t01-v04-i00",
126
+ "created": {
127
+ "value": "2022-01-11T16:00:00.000Z",
128
+ "readable": "3 years ago"
129
+ },
130
+ "name": "Code Classification Model - 43 languages",
131
+ "type": "BALANCED",
132
+ "usage": "CODE_CLASSIFICATION",
133
+ "foundation": "T5",
134
+ "loaded": false,
135
+ "cpu": true,
136
+ "downloading": false
137
+ },
138
+ {
139
+ "schema": {
140
+ "migration": 0,
141
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
142
+ },
143
+ "id": "187dacfd-1fcd-4779-94a0-382f4c0e2812",
144
+ "version": "t25-v01-i01",
145
+ "created": {
146
+ "value": "2024-05-27T16:00:00.000Z",
147
+ "readable": "5 months ago"
148
+ },
149
+ "name": "Gemini-1.5 Pro Chat Model",
150
+ "cloud": true,
151
+ "type": "BALANCED",
152
+ "usage": "CODE_CONVERSATION",
153
+ "foundation": "GEMINI_1.5",
154
+ "loaded": false,
155
+ "unique": "gemini-1.5-pro",
156
+ "provider": "GOOGLE",
157
+ "cpu": false,
158
+ "downloading": false,
159
+ "maxTokens": {
160
+ "total": 128000,
161
+ "input": 119808,
162
+ "output": 8192
163
+ }
164
+ },
165
+ {
166
+ "schema": {
167
+ "migration": 0,
168
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
169
+ },
170
+ "id": "1abb21be-3d6a-4723-84d6-81de6f171a98",
171
+ "version": "t24-v01-i01",
172
+ "created": {
173
+ "value": "2024-05-14T16:00:00.000Z",
174
+ "readable": "5 months ago"
175
+ },
176
+ "name": "GPT-4o Chat Model",
177
+ "cloud": true,
178
+ "type": "BALANCED",
179
+ "usage": "CODE_CONVERSATION",
180
+ "foundation": "GPT_4",
181
+ "loaded": false,
182
+ "unique": "gpt-4o",
183
+ "provider": "OPENAI",
184
+ "cpu": false,
185
+ "downloading": false,
186
+ "maxTokens": {
187
+ "total": 68096,
188
+ "input": 64000,
189
+ "output": 4096
190
+ }
191
+ },
192
+ {
193
+ "schema": {
194
+ "migration": 0,
195
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
196
+ },
197
+ "id": "1bd2525e-5ba4-41cd-b4ba-255d2faac66e",
198
+ "version": "t15-v01-i01",
199
+ "created": {
200
+ "value": "2023-09-15T16:00:00.000Z",
201
+ "readable": "about a year ago"
202
+ },
203
+ "name": "Codey (PaLM2) Chat Model",
204
+ "cloud": true,
205
+ "type": "BALANCED",
206
+ "usage": "CODE_CONVERSATION",
207
+ "foundation": "CODECHAT_BISON",
208
+ "loaded": false,
209
+ "unique": "codechat-bison",
210
+ "provider": "GOOGLE",
211
+ "cpu": false,
212
+ "downloading": false,
213
+ "maxTokens": {
214
+ "total": 7000,
215
+ "input": 6000,
216
+ "output": 1000
217
+ }
218
+ },
219
+ {
220
+ "schema": {
221
+ "migration": 0,
222
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
223
+ },
224
+ "id": "253ef645-535f-4980-875c-70ce8c88ce0d",
225
+ "version": "t03-v05-i03",
226
+ "created": {
227
+ "value": "2023-05-14T16:00:00.000Z",
228
+ "readable": "about a year ago"
229
+ },
230
+ "name": "OCR Model",
231
+ "type": "BALANCED",
232
+ "usage": "OCR",
233
+ "loaded": false,
234
+ "cpu": true,
235
+ "downloading": false
236
+ },
237
+ {
238
+ "schema": {
239
+ "migration": 0,
240
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
241
+ },
242
+ "id": "257c8c88-e81c-427f-8e6f-f3026b363dcf",
243
+ "version": "t28-v01-i01",
244
+ "created": {
245
+ "value": "2024-02-28T16:00:00.000Z",
246
+ "readable": "8 months ago"
247
+ },
248
+ "name": "Claude 3 Sonnet Chat Model",
249
+ "cloud": true,
250
+ "type": "SPEED",
251
+ "usage": "CODE_CONVERSATION",
252
+ "foundation": "CLAUDE_3",
253
+ "loaded": false,
254
+ "unique": "claude-3-sonnet@20240229",
255
+ "provider": "ANTHROPIC",
256
+ "cpu": false,
257
+ "downloading": false,
258
+ "maxTokens": {
259
+ "total": 40000,
260
+ "input": 35000,
261
+ "output": 4096
262
+ }
263
+ },
264
+ {
265
+ "schema": {
266
+ "migration": 0,
267
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
268
+ },
269
+ "id": "34fd0e2b-5bd1-413d-b768-de52d9ba3b6e",
270
+ "version": "t02-v02-i03",
271
+ "created": {
272
+ "value": "2022-02-16T16:00:00.000Z",
273
+ "readable": "3 years ago"
274
+ },
275
+ "name": "Text vs. Code Model",
276
+ "type": "SPEED",
277
+ "usage": "TEXT_VS_CODE",
278
+ "loaded": false,
279
+ "cpu": true,
280
+ "downloading": false
281
+ },
282
+ {
283
+ "schema": {
284
+ "migration": 0,
285
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
286
+ },
287
+ "id": "3b4d25f6-12ba-42bb-bcb9-9eb98c6a893e",
288
+ "version": "t11-v06-i01",
289
+ "created": {
290
+ "value": "2024-01-21T16:00:00.000Z",
291
+ "readable": "9 months ago"
292
+ },
293
+ "name": "NeuralHermes-2.5-Mistral-7B Chat Model",
294
+ "type": "BALANCED",
295
+ "usage": "CODE_CONVERSATION",
296
+ "foundation": "MISTRAL_7B",
297
+ "loaded": false,
298
+ "unique": "neuralhermes-2.5-mistral-7b.q4_K_M",
299
+ "cpu": false,
300
+ "downloading": false,
301
+ "maxTokens": {
302
+ "total": 2560,
303
+ "input": 2048,
304
+ "output": 512
305
+ }
306
+ },
307
+ {
308
+ "schema": {
309
+ "migration": 0,
310
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
311
+ },
312
+ "id": "40930f41-1275-448d-be46-768f180e9425",
313
+ "version": "t21-v01-i01",
314
+ "created": {
315
+ "value": "2023-11-09T16:00:00.000Z",
316
+ "readable": "12 months ago"
317
+ },
318
+ "name": "FastText Text Embedding Model",
319
+ "type": "SPEED",
320
+ "usage": "TEXT_EMBEDDING",
321
+ "foundation": "FAST_TEXT",
322
+ "loaded": false,
323
+ "provider": "META",
324
+ "cpu": true,
325
+ "downloading": false
326
+ },
327
+ {
328
+ "schema": {
329
+ "migration": 0,
330
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
331
+ },
332
+ "id": "420b7401-9c99-4109-acda-733258dc24d7",
333
+ "version": "t11-v04-i01",
334
+ "created": {
335
+ "value": "2023-08-30T16:00:00.000Z",
336
+ "readable": "about a year ago"
337
+ },
338
+ "name": "CodeLlama Chat Model",
339
+ "type": "BALANCED",
340
+ "usage": "CODE_CONVERSATION",
341
+ "foundation": "CODE_LLAMA_2_7B",
342
+ "loaded": false,
343
+ "unique": "codellama-7b-instruct.Q4_K_M",
344
+ "cpu": false,
345
+ "downloading": false
346
+ },
347
+ {
348
+ "schema": {
349
+ "migration": 0,
350
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
351
+ },
352
+ "id": "42aa3109-d147-4b66-a265-c3dac3104ce0",
353
+ "version": "t11-v08-i01",
354
+ "created": {
355
+ "value": "2024-05-21T16:00:00.000Z",
356
+ "readable": "5 months ago"
357
+ },
358
+ "name": "Llama-3 8B Instruct",
359
+ "type": "BALANCED",
360
+ "usage": "CODE_CONVERSATION",
361
+ "foundation": "LLAMA_3_8B",
362
+ "loaded": false,
363
+ "unique": "llama-3-8b-instruct.q4_K_M",
364
+ "cpu": false,
365
+ "downloading": false,
366
+ "maxTokens": {
367
+ "total": 2560,
368
+ "input": 2048,
369
+ "output": 512
370
+ }
371
+ },
372
+ {
373
+ "schema": {
374
+ "migration": 0,
375
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
376
+ },
377
+ "id": "463169d9-c8e9-4e3d-936b-54cd3f65344a",
378
+ "version": "t11-v12-i01",
379
+ "created": {
380
+ "value": "2024-05-23T16:00:00.000Z",
381
+ "readable": "5 months ago"
382
+ },
383
+ "name": "gemma-1.1-7b-it",
384
+ "type": "BALANCED",
385
+ "usage": "CODE_CONVERSATION",
386
+ "foundation": "GEMMA_1.1_7B",
387
+ "loaded": false,
388
+ "unique": "gemma-1.1-7b-it.q4_K_M",
389
+ "cpu": false,
390
+ "downloading": false,
391
+ "maxTokens": {
392
+ "total": 2560,
393
+ "input": 2048,
394
+ "output": 512
395
+ }
396
+ },
397
+ {
398
+ "schema": {
399
+ "migration": 0,
400
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
401
+ },
402
+ "id": "4b5abcef-e526-4dc2-b697-e5669074487e",
403
+ "version": "t10-v01-i01",
404
+ "created": {
405
+ "value": "2023-06-14T16:00:00.000Z",
406
+ "readable": "about a year ago"
407
+ },
408
+ "name": "Extractive Links Model",
409
+ "type": "BALANCED",
410
+ "usage": "CODE_EXTRACTIVE_LINKS",
411
+ "foundation": "T5",
412
+ "loaded": false,
413
+ "cpu": true,
414
+ "downloading": false
415
+ },
416
+ {
417
+ "schema": {
418
+ "migration": 0,
419
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
420
+ },
421
+ "id": "4dc08c68-4c4c-46b8-b047-e4e92b491b45",
422
+ "version": "t20-v01-i01",
423
+ "created": {
424
+ "value": "2023-11-09T16:00:00.000Z",
425
+ "readable": "12 months ago"
426
+ },
427
+ "name": "Jina Text Embedding Model",
428
+ "type": "ACCURACY",
429
+ "usage": "TEXT_EMBEDDING",
430
+ "loaded": false,
431
+ "provider": "JINA",
432
+ "cpu": true,
433
+ "downloading": false
434
+ },
435
+ {
436
+ "schema": {
437
+ "migration": 0,
438
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
439
+ },
440
+ "id": "58df6d22-49ab-4dc2-9b41-17114429bef3",
441
+ "version": "t18-v01-i01",
442
+ "created": {
443
+ "value": "2023-11-09T16:00:00.000Z",
444
+ "readable": "12 months ago"
445
+ },
446
+ "name": "Unixcoder Code Search Model",
447
+ "type": "ACCURACY",
448
+ "usage": "CODE_SEARCH",
449
+ "foundation": "UNIXCODER",
450
+ "loaded": false,
451
+ "cpu": true,
452
+ "downloading": false
453
+ },
454
+ {
455
+ "schema": {
456
+ "migration": 0,
457
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
458
+ },
459
+ "id": "5a5ca381-2115-424a-8bb3-6e519bd2c685",
460
+ "version": "t04-v02-i01",
461
+ "created": {
462
+ "value": "2022-10-04T16:00:00.000Z",
463
+ "readable": "2 years ago"
464
+ },
465
+ "name": "Tagify Code Model",
466
+ "type": "BALANCED",
467
+ "usage": "TAGIFY_CODE",
468
+ "loaded": false,
469
+ "cpu": true,
470
+ "downloading": false
471
+ },
472
+ {
473
+ "schema": {
474
+ "migration": 0,
475
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
476
+ },
477
+ "id": "5b17e353-f1de-4c41-aa1d-414411a853ce",
478
+ "version": "t08-v01-i01",
479
+ "created": {
480
+ "value": "2023-05-22T16:00:00.000Z",
481
+ "readable": "about a year ago"
482
+ },
483
+ "name": "Suggested Search Queries Model",
484
+ "type": "BALANCED",
485
+ "usage": "CODE_SEARCH_QUERIES",
486
+ "foundation": "T5",
487
+ "loaded": false,
488
+ "cpu": true,
489
+ "downloading": false
490
+ },
491
+ {
492
+ "schema": {
493
+ "migration": 0,
494
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
495
+ },
496
+ "id": "5eeebada-ba38-461d-a3ed-a80684f96f41",
497
+ "version": "t22-v01-i01",
498
+ "created": {
499
+ "value": "2024-01-07T16:00:00.000Z",
500
+ "readable": "10 months ago"
501
+ },
502
+ "name": "(Gemini) Chat Model",
503
+ "cloud": true,
504
+ "type": "BALANCED",
505
+ "usage": "CODE_CONVERSATION",
506
+ "foundation": "GEMINI",
507
+ "loaded": false,
508
+ "unique": "gemini-pro",
509
+ "provider": "GOOGLE",
510
+ "cpu": false,
511
+ "downloading": false,
512
+ "maxTokens": {
513
+ "total": 32000,
514
+ "input": 20000,
515
+ "output": 8000
516
+ }
517
+ },
518
+ {
519
+ "schema": {
520
+ "migration": 0,
521
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
522
+ },
523
+ "id": "642c5822-f19d-4eb6-af53-7cea68987e37",
524
+ "version": "t11-v14-i01",
525
+ "created": {
526
+ "value": "2024-05-27T16:00:00.000Z",
527
+ "readable": "5 months ago"
528
+ },
529
+ "name": "codegemma-1.1-7b-it",
530
+ "type": "BALANCED",
531
+ "usage": "CODE_CONVERSATION",
532
+ "foundation": "CODE_GEMMA_7B",
533
+ "loaded": false,
534
+ "unique": "codegemma-1.1-7b-it.q4_K_M",
535
+ "cpu": false,
536
+ "downloading": false,
537
+ "maxTokens": {
538
+ "total": 2560,
539
+ "input": 2048,
540
+ "output": 512
541
+ }
542
+ },
543
+ {
544
+ "schema": {
545
+ "migration": 0,
546
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
547
+ },
548
+ "id": "66d4b152-651f-4b91-a195-2d0db32e63d7",
549
+ "version": "t12-v01-i01",
550
+ "created": {
551
+ "value": "2023-06-14T16:00:00.000Z",
552
+ "readable": "about a year ago"
553
+ },
554
+ "name": "Related People Model",
555
+ "type": "BALANCED",
556
+ "usage": "CODE_RELATED_PEOPLE",
557
+ "loaded": false,
558
+ "cpu": true,
559
+ "downloading": false
560
+ },
561
+ {
562
+ "schema": {
563
+ "migration": 0,
564
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
565
+ },
566
+ "id": "670e74c0-acbd-4daa-a356-e4565f2e0c5d",
567
+ "version": "t29-v01-i01",
568
+ "created": {
569
+ "value": "2024-02-28T16:00:00.000Z",
570
+ "readable": "8 months ago"
571
+ },
572
+ "name": "Claude 3 Opus Chat Model",
573
+ "cloud": true,
574
+ "type": "BALANCED",
575
+ "usage": "CODE_CONVERSATION",
576
+ "foundation": "CLAUDE_3",
577
+ "loaded": false,
578
+ "unique": "claude-3-opus@20240229",
579
+ "provider": "ANTHROPIC",
580
+ "cpu": false,
581
+ "downloading": false,
582
+ "maxTokens": {
583
+ "total": 40000,
584
+ "input": 35000,
585
+ "output": 4096
586
+ }
587
+ },
588
+ {
589
+ "schema": {
590
+ "migration": 0,
591
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
592
+ },
593
+ "id": "6cf576b1-2a97-40bd-b06d-941c41c6db1d",
594
+ "version": "t11-v11-i01",
595
+ "created": {
596
+ "value": "2024-05-23T16:00:00.000Z",
597
+ "readable": "5 months ago"
598
+ },
599
+ "name": "gemma-1.1-2b-it",
600
+ "type": "SPEED",
601
+ "usage": "CODE_CONVERSATION",
602
+ "foundation": "GEMMA_1.1_2B",
603
+ "loaded": false,
604
+ "unique": "gemma-1.1-2b-it.q4_K_M",
605
+ "cpu": false,
606
+ "downloading": false,
607
+ "maxTokens": {
608
+ "total": 2560,
609
+ "input": 2048,
610
+ "output": 512
611
+ }
612
+ },
613
+ {
614
+ "schema": {
615
+ "migration": 0,
616
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
617
+ },
618
+ "id": "6fd521ff-faeb-46b2-8c3d-9d01c16845a4",
619
+ "version": "t23-v01-i01",
620
+ "created": {
621
+ "value": "2024-02-08T16:00:00.000Z",
622
+ "readable": "9 months ago"
623
+ },
624
+ "name": "GPT-4 Turbo Chat Model",
625
+ "cloud": true,
626
+ "type": "BALANCED",
627
+ "usage": "CODE_CONVERSATION",
628
+ "foundation": "GPT_4",
629
+ "loaded": false,
630
+ "unique": "gpt-4-turbo",
631
+ "provider": "OPENAI",
632
+ "cpu": false,
633
+ "downloading": false,
634
+ "maxTokens": {
635
+ "total": 68096,
636
+ "input": 64000,
637
+ "output": 4096
638
+ }
639
+ },
640
+ {
641
+ "schema": {
642
+ "migration": 0,
643
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
644
+ },
645
+ "id": "76f39fed-8aa8-4176-b991-e09ab7354a72",
646
+ "version": "t11-v07-i01",
647
+ "created": {
648
+ "value": "2024-02-12T16:00:00.000Z",
649
+ "readable": "8 months ago"
650
+ },
651
+ "name": "Phi-2 Chat Model",
652
+ "type": "SPEED",
653
+ "usage": "CODE_CONVERSATION",
654
+ "foundation": "PHI_2",
655
+ "loaded": false,
656
+ "unique": "dolphin-2_6-phi-2.q4_K_M",
657
+ "cpu": false,
658
+ "downloading": false,
659
+ "maxTokens": {
660
+ "total": 2048,
661
+ "input": 1536,
662
+ "output": 512
663
+ }
664
+ },
665
+ {
666
+ "schema": {
667
+ "migration": 0,
668
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
669
+ },
670
+ "id": "79c76775-4c58-4f97-a1e0-f9de69041854",
671
+ "version": "t11-v02-i01",
672
+ "created": {
673
+ "value": "2023-08-17T16:00:00.000Z",
674
+ "readable": "about a year ago"
675
+ },
676
+ "name": "Llama-2 7B Chat Model",
677
+ "type": "BALANCED",
678
+ "usage": "CODE_CONVERSATION",
679
+ "foundation": "LLAMA_2_7B",
680
+ "loaded": false,
681
+ "unique": "llama-2-7b-chat.q4_K_M",
682
+ "cpu": false,
683
+ "downloading": false,
684
+ "maxTokens": {
685
+ "total": 2560,
686
+ "input": 2048,
687
+ "output": 512
688
+ }
689
+ },
690
+ {
691
+ "schema": {
692
+ "migration": 0,
693
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
694
+ },
695
+ "id": "898f57a2-90f9-42bb-bc3b-c3dbb4b89559",
696
+ "version": "t05-v01-i02",
697
+ "created": {
698
+ "value": "2023-05-13T16:00:00.000Z",
699
+ "readable": "about a year ago"
700
+ },
701
+ "name": "Code Description Model",
702
+ "type": "BALANCED",
703
+ "usage": "CODE_DESCRIPTION",
704
+ "foundation": "T5",
705
+ "loaded": false,
706
+ "cpu": true,
707
+ "downloading": false
708
+ },
709
+ {
710
+ "schema": {
711
+ "migration": 0,
712
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
713
+ },
714
+ "id": "8f9183eb-34e7-418d-828f-e2fc0e1d655d",
715
+ "version": "t11-v10-i01",
716
+ "created": {
717
+ "value": "2024-05-23T16:00:00.000Z",
718
+ "readable": "5 months ago"
719
+ },
720
+ "name": "Phi-3-mini-128k-instruct",
721
+ "type": "SPEED",
722
+ "usage": "CODE_CONVERSATION",
723
+ "foundation": "PHI_3_MINI",
724
+ "loaded": false,
725
+ "unique": "Phi-3-mini-128k-instruct.q4_K_M",
726
+ "cpu": false,
727
+ "downloading": false,
728
+ "maxTokens": {
729
+ "total": 2560,
730
+ "input": 2048,
731
+ "output": 512
732
+ }
733
+ },
734
+ {
735
+ "schema": {
736
+ "migration": 0,
737
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
738
+ },
739
+ "id": "9c296470-1094-4a73-b236-02d5a5203a25",
740
+ "version": "t26-v01-i01",
741
+ "created": {
742
+ "value": "2024-05-27T16:00:00.000Z",
743
+ "readable": "5 months ago"
744
+ },
745
+ "name": "Gemini-1.5 Flash Chat Model",
746
+ "cloud": true,
747
+ "type": "SPEED",
748
+ "usage": "CODE_CONVERSATION",
749
+ "foundation": "GEMINI_1.5",
750
+ "loaded": false,
751
+ "unique": "gemini-1.5-flash",
752
+ "provider": "GOOGLE",
753
+ "cpu": false,
754
+ "downloading": false,
755
+ "maxTokens": {
756
+ "total": 128000,
757
+ "input": 119808,
758
+ "output": 8192
759
+ }
760
+ },
761
+ {
762
+ "schema": {
763
+ "migration": 0,
764
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
765
+ },
766
+ "id": "a249403b-87f2-4b75-9d99-cde24e70d9c5",
767
+ "version": "t11-v15-i01",
768
+ "created": {
769
+ "value": "2024-06-13T16:00:00.000Z",
770
+ "readable": "4 months ago"
771
+ },
772
+ "name": "granite-3b-code-instruct",
773
+ "type": "SPEED",
774
+ "usage": "CODE_CONVERSATION",
775
+ "foundation": "GRANITE_3B",
776
+ "loaded": false,
777
+ "unique": "granite-3b-code-instruct.q4_K_M",
778
+ "cpu": false,
779
+ "downloading": false,
780
+ "maxTokens": {
781
+ "total": 2048,
782
+ "input": 1536,
783
+ "output": 512
784
+ }
785
+ },
786
+ {
787
+ "schema": {
788
+ "migration": 0,
789
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
790
+ },
791
+ "id": "c70725a7-f8a7-4189-8572-65e91a9fbf32",
792
+ "version": "t27-v01-i01",
793
+ "created": {
794
+ "value": "2024-06-19T16:00:00.000Z",
795
+ "readable": "4 monmodel.jsonths ago"
796
+ },
797
+ "name": "Claude 3.5 Sonnet Chat Model",
798
+ "cloud": true,
799
+ "type": "SPEED",
800
+ "usage": "CODE_CONVERSATION",
801
+ "foundation": "CLAUDE_3.5",
802
+ "loaded": false,
803
+ "unique": "claude-3-5-sonnet@20240620",
804
+ "provider": "ANTHROPIC",
805
+ "cpu": false,
806
+ "downloading": false,
807
+ "maxTokens": {
808
+ "total": 40000,
809
+ "input": 35000,
810
+ "output": 4096
811
+ }
812
+ },
813
+ {
814
+ "schema": {
815
+ "migration": 0,
816
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
817
+ },
818
+ "id": "c974b66a-4f97-434b-8d05-2c20f3ea2b00",
819
+ "version": "t30-v01-i01",
820
+ "created": {
821
+ "value": "2024-03-26T16:00:00.000Z",
822
+ "readable": "7 months ago"
823
+ },
824
+ "name": "Claude 3 Haiku Chat Model",
825
+ "cloud": true,
826
+ "type": "SPEED",
827
+ "usage": "CODE_CONVERSATION",
828
+ "foundation": "CLAUDE_3",
829
+ "loaded": false,
830
+ "unique": "claude-3-haiku@20240307",
831
+ "provider": "ANTHROPIC",
832
+ "cpu": false,
833
+ "downloading": false,
834
+ "maxTokens": {
835
+ "total": 40000,
836
+ "input": 35000,
837
+ "output": 4096
838
+ }
839
+ },
840
+ {
841
+ "schema": {
842
+ "migration": 0,
843
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
844
+ },
845
+ "id": "cfb463c1-c82e-4f2b-b9c9-65eeecf3e8d0",
846
+ "version": "t19-v01-i01",
847
+ "created": {
848
+ "value": "2023-11-09T16:00:00.000Z",
849
+ "readable": "12 months ago"
850
+ },
851
+ "name": "VideoOCR Model",
852
+ "type": "BALANCED",
853
+ "usage": "VIDEO_OCR",
854
+ "loaded": false,
855
+ "cpu": true,
856
+ "downloading": false
857
+ },
858
+ {
859
+ "schema": {
860
+ "migration": 0,
861
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
862
+ },
863
+ "id": "d53cfc04-0648-4821-8f0e-fae0ef9f1a82",
864
+ "version": "t07-v01-i02",
865
+ "created": {
866
+ "value": "2023-05-13T16:00:00.000Z",
867
+ "readable": "about a year ago"
868
+ },
869
+ "name": "Code Titles Model",
870
+ "type": "BALANCED",
871
+ "usage": "CODE_TITLE",
872
+ "foundation": "T5",
873
+ "loaded": false,
874
+ "cpu": true,
875
+ "downloading": false
876
+ },
877
+ {
878
+ "schema": {
879
+ "migration": 0,
880
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
881
+ },
882
+ "id": "d5c4edcf-8761-4c46-bf50-1100646014c3",
883
+ "version": "t13-v01-i01",
884
+ "created": {
885
+ "value": "2023-09-15T16:00:00.000Z",
886
+ "readable": "about a year ago"
887
+ },
888
+ "name": "GPT-3.5-turbo Chat Model",
889
+ "cloud": true,
890
+ "type": "BALANCED",
891
+ "usage": "CODE_CONVERSATION",
892
+ "foundation": "GPT_3.5",
893
+ "loaded": false,
894
+ "unique": "gpt-3.5-turbo",
895
+ "provider": "OPENAI",
896
+ "cpu": false,
897
+ "downloading": false,
898
+ "maxTokens": {
899
+ "total": 16000,
900
+ "input": 12000,
901
+ "output": 4000
902
+ }
903
+ },
904
+ {
905
+ "schema": {
906
+ "migration": 0,
907
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
908
+ },
909
+ "id": "d6dd5fb4-5d6d-411d-bb96-c0899ace97d4",
910
+ "version": "t14-v01-i01",
911
+ "created": {
912
+ "value": "2023-09-15T16:00:00.000Z",
913
+ "readable": "about a year ago"
914
+ },
915
+ "name": "GPT-4 Chat Model",
916
+ "cloud": true,
917
+ "type": "BALANCED",
918
+ "usage": "CODE_CONVERSATION",
919
+ "foundation": "GPT_4",
920
+ "loaded": false,
921
+ "unique": "gpt-4",
922
+ "provider": "OPENAI",
923
+ "cpu": false,
924
+ "downloading": false,
925
+ "maxTokens": {
926
+ "total": 8000,
927
+ "input": 4100,
928
+ "output": 3900
929
+ }
930
+ },
931
+ {
932
+ "schema": {
933
+ "migration": 0,
934
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
935
+ },
936
+ "id": "e9c08f55-f5d1-45ef-b7fd-0aadcc96e77e",
937
+ "version": "t17-v01-i01",
938
+ "created": {
939
+ "value": "2022-11-07T16:00:00.000Z",
940
+ "readable": "about a year ago"
941
+ },
942
+ "name": "Text vs. Code Segmentation Model",
943
+ "type": "SPEED",
944
+ "usage": "TEXT_VS_CODE_SEGMENTATION",
945
+ "loaded": false,
946
+ "cpu": true,
947
+ "downloading": false
948
+ },
949
+ {
950
+ "schema": {
951
+ "migration": 0,
952
+ "semantic": "MAJOR_0_MINOR_0_PATCH_1"
953
+ },
954
+ "id": "eaace961-244a-441e-8283-5d0edac70e2b",
955
+ "version": "t11-v15-i01",
956
+ "created": {
957
+ "value": "2024-06-13T16:00:00.000Z",
958
+ "readable": "4 months ago"
959
+ },
960
+ "name": "granite-8b-code-instruct",
961
+ "type": "BALANCED",
962
+ "usage": "CODE_CONVERSATION",
963
+ "foundation": "GRANITE_8B",
964
+ "loaded": false,
965
+ "unique": "granite-8b-code-instruct.q4_K_M",
966
+ "cpu": false,
967
+ "downloading": false,
968
+ "maxTokens": {
969
+ "total": 2560,
970
+ "input": 2048,
971
+ "output": 512
972
+ }
973
+ }
974
+ ]
975
+ }
index.js ADDED
@@ -0,0 +1,270 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import grpc from '@grpc/grpc-js';
2
+ import protoLoader from '@grpc/proto-loader';
3
+ import { AutoRouter, json, error, cors } from 'itty-router';
4
+ import dotenv from 'dotenv';
5
+ import { createServerAdapter } from '@whatwg-node/server';
6
+ import { createServer } from 'http';
7
+
8
+ // 加载环境变量
9
+ dotenv.config();
10
+ // 初始化配置
11
+ class Config {
12
+ constructor() {
13
+ this.API_PREFIX = process.env.API_PREFIX || '/';
14
+ this.API_KEY = process.env.API_KEY || '';
15
+ this.MAX_RETRY_COUNT = process.env.MAX_RETRY_COUNT || 3;
16
+ this.RETRY_DELAY = process.env.RETRY_DELAY || 5000;
17
+ this.COMMON_GRPC = 'runtime-native-io-vertex-inference-grpc-service-lmuw6mcn3q-ul.a.run.app';
18
+ this.COMMON_PROTO = './VertexInferenceService.proto';
19
+ this.GPT_GRPC = 'runtime-native-io-gpt-inference-grpc-service-lmuw6mcn3q-ul.a.run.app';
20
+ this.GPT_PROTO = './GPTInferenceService.proto';
21
+ this.PORT = process.env.PORT || 8787;
22
+ }
23
+ }
24
+ const config = new Config();
25
+ // 中间件
26
+ // 添加运行回源
27
+ const { preflight, corsify } = cors({
28
+ origin: '*',
29
+ allowMethods: '*',
30
+ exposeHeaders: '*',
31
+ });
32
+
33
+ // 添加认证
34
+ const withAuth = (request) => {
35
+ if (config.API_KEY) {
36
+ const authHeader = request.headers.get('Authorization');
37
+ if (!authHeader || !authHeader.startsWith('Bearer ')) {
38
+ return error(401, 'Unauthorized: Missing or invalid Authorization header');
39
+ }
40
+ const token = authHeader.substring(7);
41
+ if (token !== config.API_KEY) {
42
+ return error(403, 'Forbidden: Invalid API key');
43
+ }
44
+ }
45
+ };
46
+ // 返回运行信息
47
+ const logger = (res, req) => {
48
+ console.log(req.method, res.status, req.url, Date.now() - req.start, 'ms');
49
+ };
50
+ const router = AutoRouter({
51
+ before: [preflight, withAuth],
52
+ missing: () => error(404, '404 not found.'),
53
+ finally: [corsify, logger],
54
+ });
55
+ // Router路径
56
+ router.get('/', () => json({ message: 'API 服务运行中~' }));
57
+ router.get('/ping', () => json({ message: 'pong' }));
58
+ router.post(config.API_PREFIX + '/v1/chat/completions', (req) => handleCompletion(req));
59
+
60
+ async function GrpcToPieces(models, message, rules,stream,temperature,top_p) {
61
+ // 在非GPT类型的模型中,temperature和top_p是无效的
62
+ // 使用系统的根证书
63
+ const credentials = grpc.credentials.createSsl();
64
+ if (models.includes('gpt')){
65
+ // 加载proto文件
66
+ const packageDefinition = protoLoader.loadSync(config.GPT_PROTO, {
67
+ keepCase: true,
68
+ longs: String,
69
+ enums: String,
70
+ defaults: true,
71
+ oneofs: true
72
+ });
73
+ // 构建请求消息
74
+ const request = {
75
+ models: models,
76
+ messages: [
77
+ {role: 0, message: rules}, // system
78
+ {role: 1, message: message} // user
79
+ ],
80
+ temperature:temperature || 0.1,
81
+ top_p:top_p ?? 1,
82
+ }
83
+ // 获取gRPC对象
84
+ const GRPCobjects = grpc.loadPackageDefinition(packageDefinition).runtime.aot.machine_learning.parents.gpt;
85
+ const client = new GRPCobjects.GPTInferenceService(config.GPT_GRPC, credentials);
86
+ for (let retryCount = 0; retryCount <= config.MAX_RETRY_COUNT; retryCount++) {
87
+ try {
88
+ // 使用 Promise 包装异步 gRPC 调用
89
+ const response = await new Promise((resolve, reject) => {
90
+ client.Predict(request, (err, response) => {
91
+ if (err) {
92
+ reject(err);
93
+ } else {
94
+ resolve(response);
95
+ }
96
+ });
97
+ });
98
+ // 处理响应
99
+ let response_code = response.response_code;
100
+ let response_message = response.body.message_warpper.message;
101
+ // 检查解构结果
102
+ if (!response_code || !response_message) {
103
+ console.error('Invalid response format, retrying...');
104
+ continue; // 继续重试
105
+ }
106
+ console.log('Received response from server', response);
107
+
108
+ // 如果响应成功,返回结果
109
+ if (+response_code === 200) {
110
+ return { response_code, response_message };
111
+ } else {
112
+ // 如果响应码不是200,继续重试
113
+ console.error('Non-success response code, retrying...');
114
+ }
115
+ } catch (err) {
116
+ // 捕获错误并重试
117
+ console.error('Error occurred during gRPC call:', err);
118
+ }
119
+ }
120
+ } else {
121
+ // 加载proto文件
122
+ const packageDefinition = protoLoader.loadSync(config.COMMON_PROTO,{
123
+ keepCase: true,
124
+ longs: String,
125
+ enums: String,
126
+ defaults: true,
127
+ oneofs: true
128
+ });
129
+ // 构建请求消息
130
+ const request = {
131
+ models: models,
132
+ args: {
133
+ messages: {
134
+ unknown: 1,
135
+ message: message
136
+ },
137
+ rules: rules
138
+ }
139
+ };
140
+ // 获取gRPC对象
141
+ const GRPCobjects = grpc.loadPackageDefinition(packageDefinition).runtime.aot.machine_learning.parents.vertex;
142
+ const client = new GRPCobjects.VertexInferenceService(config.COMMON_GRPC, credentials);
143
+ for (let retryCount = 0; retryCount <= config.MAX_RETRY_COUNT; retryCount++) {
144
+ try {
145
+ // 使用 Promise 包装异步 gRPC 调用
146
+ const response = await new Promise((resolve, reject) => {
147
+ client.Predict(request, (err, response) => {
148
+ if (err) {
149
+ reject(err);
150
+ } else {
151
+ resolve(response);
152
+ }
153
+ });
154
+ });
155
+
156
+ // 处理响应
157
+ let response_code = response.response_code;
158
+ let response_message = response.args.args.args.message;
159
+ // 检查解构结果
160
+ if (!response_code || !response_message) {
161
+ console.error('Invalid response format, retrying...');
162
+ continue; // 继续重试
163
+ }
164
+ console.log('Received response from server', response);
165
+
166
+ // 如果响应成功,返回结果
167
+ if (+response_code === 200) {
168
+ return { response_code, response_message };
169
+ } else {
170
+ // 如果响应码不是200,继续重试
171
+ console.error('Non-success response code, retrying...');
172
+ }
173
+ } catch (err) {
174
+ // 捕获错误并重试
175
+ console.error('Error occurred during gRPC call:', err);
176
+ }
177
+ }
178
+ }
179
+ }
180
+
181
+ async function messagesProcess(messages) {
182
+ let rules = '';
183
+ let message = '';
184
+
185
+ for (const msg of messages) {
186
+ let role = msg.role;
187
+ // 格式化为字符串
188
+ const contentStr = Array.isArray(msg.content)
189
+ ? msg.content
190
+ .filter((item) => item.text)
191
+ .map((item) => item.text)
192
+ .join('') || ''
193
+ : msg.content;
194
+ // 判断身份
195
+ if (role === 'system') {
196
+ rules += `system:${contentStr};\r\n`;
197
+ } else if (['user', 'assistant'].includes(role)) {
198
+ message += `${role}:${contentStr};\r\n`;
199
+ }
200
+ }
201
+
202
+ return { rules, message };
203
+ }
204
+
205
+ async function ConvertOpenai(messages,response_code,stream) {
206
+ if (response_code !== 200) {
207
+ //todo 不知道返回什么
208
+ }
209
+ if (stream){
210
+ // todo
211
+ } else {
212
+ return new Response(JSON.stringify(ChatCompletionWithModel(messages, response_code)), {
213
+ headers: {
214
+ 'Content-Type': 'application/json',
215
+ },
216
+ });
217
+ }
218
+ }
219
+
220
+ function ChatCompletionWithModel(message, model) {
221
+ return {
222
+ id: 'Chat-Nekohy',
223
+ object: 'chat.completion',
224
+ created: Date.now(),
225
+ model,
226
+ usage: {
227
+ prompt_tokens: 0,
228
+ completion_tokens: 0,
229
+ total_tokens: 0,
230
+ },
231
+ choices: [
232
+ {
233
+ message: {
234
+ content: message,
235
+ role: 'assistant',
236
+ },
237
+ index: 0,
238
+ },
239
+ ],
240
+ };
241
+ }
242
+
243
+ async function handleCompletion(request) {
244
+ try {
245
+ // todo stream逆向接口
246
+ // 解析openai格式API请求
247
+ const { model: inputModel, messages, stream:todo,temperature,top_p} = await request.json();
248
+ console.log(inputModel,messages,todo)
249
+ let stream = false;
250
+ // 解析system和user/assistant消息
251
+ const { rules, message:content } = await messagesProcess(messages);
252
+ console.log(rules,content)
253
+ // 响应码,回复的消息
254
+ const { response_code, response_message } = await GrpcToPieces(inputModel, content, rules, stream, temperature, top_p);
255
+ // 转换为OpenAi格式
256
+ return await ConvertOpenai(response_message,response_code,stream)
257
+ } catch (err) {
258
+ return error(500, err.message);
259
+ }
260
+ }
261
+
262
+ (async () => {
263
+ //For Cloudflare Workers
264
+ if (typeof addEventListener === 'function') return;
265
+ // For Nodejs
266
+ const ittyServer = createServerAdapter(router.fetch);
267
+ console.log(`Listening on http://localhost:${config.PORT}`);
268
+ const httpServer = createServer(ittyServer);
269
+ httpServer.listen(config.PORT);
270
+ })();
package-lock.json ADDED
@@ -0,0 +1,463 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "pieces-os",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "pieces-os",
9
+ "version": "1.0.0",
10
+ "dependencies": {
11
+ "@grpc/grpc-js": "^1.12.2",
12
+ "@grpc/proto-loader": "^0.7.13",
13
+ "@whatwg-node/server": "^0.9.50",
14
+ "dotenv": "^16.4.5",
15
+ "itty-router": "^5.0.18"
16
+ }
17
+ },
18
+ "node_modules/@grpc/grpc-js": {
19
+ "version": "1.12.2",
20
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/@grpc/grpc-js/-/grpc-js-1.12.2.tgz",
21
+ "integrity": "sha512-bgxdZmgTrJZX50OjyVwz3+mNEnCTNkh3cIqGPWVNeW9jX6bn1ZkU80uPd+67/ZpIJIjRQ9qaHCjhavyoWYxumg==",
22
+ "license": "Apache-2.0",
23
+ "dependencies": {
24
+ "@grpc/proto-loader": "^0.7.13",
25
+ "@js-sdsl/ordered-map": "^4.4.2"
26
+ },
27
+ "engines": {
28
+ "node": ">=12.10.0"
29
+ }
30
+ },
31
+ "node_modules/@grpc/proto-loader": {
32
+ "version": "0.7.13",
33
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/@grpc/proto-loader/-/proto-loader-0.7.13.tgz",
34
+ "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==",
35
+ "license": "Apache-2.0",
36
+ "dependencies": {
37
+ "lodash.camelcase": "^4.3.0",
38
+ "long": "^5.0.0",
39
+ "protobufjs": "^7.2.5",
40
+ "yargs": "^17.7.2"
41
+ },
42
+ "bin": {
43
+ "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js"
44
+ },
45
+ "engines": {
46
+ "node": ">=6"
47
+ }
48
+ },
49
+ "node_modules/@js-sdsl/ordered-map": {
50
+ "version": "4.4.2",
51
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz",
52
+ "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==",
53
+ "license": "MIT",
54
+ "funding": {
55
+ "type": "opencollective",
56
+ "url": "https://opencollective.com/js-sdsl"
57
+ }
58
+ },
59
+ "node_modules/@kamilkisiela/fast-url-parser": {
60
+ "version": "1.1.4",
61
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/@kamilkisiela/fast-url-parser/-/fast-url-parser-1.1.4.tgz",
62
+ "integrity": "sha512-gbkePEBupNydxCelHCESvFSFM8XPh1Zs/OAVRW/rKpEqPAl5PbOM90Si8mv9bvnR53uPD2s/FiRxdvSejpRJew==",
63
+ "license": "MIT"
64
+ },
65
+ "node_modules/@protobufjs/aspromise": {
66
+ "version": "1.1.2",
67
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
68
+ "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==",
69
+ "license": "BSD-3-Clause"
70
+ },
71
+ "node_modules/@protobufjs/base64": {
72
+ "version": "1.1.2",
73
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/base64/-/base64-1.1.2.tgz",
74
+ "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==",
75
+ "license": "BSD-3-Clause"
76
+ },
77
+ "node_modules/@protobufjs/codegen": {
78
+ "version": "2.0.4",
79
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/codegen/-/codegen-2.0.4.tgz",
80
+ "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==",
81
+ "license": "BSD-3-Clause"
82
+ },
83
+ "node_modules/@protobufjs/eventemitter": {
84
+ "version": "1.1.0",
85
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
86
+ "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==",
87
+ "license": "BSD-3-Clause"
88
+ },
89
+ "node_modules/@protobufjs/fetch": {
90
+ "version": "1.1.0",
91
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/fetch/-/fetch-1.1.0.tgz",
92
+ "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==",
93
+ "license": "BSD-3-Clause",
94
+ "dependencies": {
95
+ "@protobufjs/aspromise": "^1.1.1",
96
+ "@protobufjs/inquire": "^1.1.0"
97
+ }
98
+ },
99
+ "node_modules/@protobufjs/float": {
100
+ "version": "1.0.2",
101
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/float/-/float-1.0.2.tgz",
102
+ "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==",
103
+ "license": "BSD-3-Clause"
104
+ },
105
+ "node_modules/@protobufjs/inquire": {
106
+ "version": "1.1.0",
107
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/inquire/-/inquire-1.1.0.tgz",
108
+ "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==",
109
+ "license": "BSD-3-Clause"
110
+ },
111
+ "node_modules/@protobufjs/path": {
112
+ "version": "1.1.2",
113
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/path/-/path-1.1.2.tgz",
114
+ "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==",
115
+ "license": "BSD-3-Clause"
116
+ },
117
+ "node_modules/@protobufjs/pool": {
118
+ "version": "1.1.0",
119
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/pool/-/pool-1.1.0.tgz",
120
+ "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==",
121
+ "license": "BSD-3-Clause"
122
+ },
123
+ "node_modules/@protobufjs/utf8": {
124
+ "version": "1.1.0",
125
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/utf8/-/utf8-1.1.0.tgz",
126
+ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==",
127
+ "license": "BSD-3-Clause"
128
+ },
129
+ "node_modules/@types/node": {
130
+ "version": "22.7.9",
131
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/@types/node/-/node-22.7.9.tgz",
132
+ "integrity": "sha512-jrTfRC7FM6nChvU7X2KqcrgquofrWLFDeYC1hKfwNWomVvrn7JIksqf344WN2X/y8xrgqBd2dJATZV4GbatBfg==",
133
+ "license": "MIT",
134
+ "dependencies": {
135
+ "undici-types": "~6.19.2"
136
+ }
137
+ },
138
+ "node_modules/@whatwg-node/fetch": {
139
+ "version": "0.9.22",
140
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/@whatwg-node/fetch/-/fetch-0.9.22.tgz",
141
+ "integrity": "sha512-+RIBffgoaRlWV9cKV6wAX71sbeoU2APOI3G13ZRMkabYHwkvDMeZDTyxJcsMXA5CpieJ7NFXF9Xyu72jwvdzqA==",
142
+ "license": "MIT",
143
+ "dependencies": {
144
+ "@whatwg-node/node-fetch": "^0.5.27",
145
+ "urlpattern-polyfill": "^10.0.0"
146
+ },
147
+ "engines": {
148
+ "node": ">=18.0.0"
149
+ }
150
+ },
151
+ "node_modules/@whatwg-node/node-fetch": {
152
+ "version": "0.5.27",
153
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/@whatwg-node/node-fetch/-/node-fetch-0.5.27.tgz",
154
+ "integrity": "sha512-0OaMj5W4fzWimRSFq07qFiWfquaUMNB+695GwE76LYKVuah+jwCdzSgsIOtwPkiyJ35w0XGhXmJPiIJCdLwopg==",
155
+ "license": "MIT",
156
+ "dependencies": {
157
+ "@kamilkisiela/fast-url-parser": "^1.1.4",
158
+ "busboy": "^1.6.0",
159
+ "fast-querystring": "^1.1.1",
160
+ "tslib": "^2.6.3"
161
+ },
162
+ "engines": {
163
+ "node": ">=18.0.0"
164
+ }
165
+ },
166
+ "node_modules/@whatwg-node/server": {
167
+ "version": "0.9.50",
168
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/@whatwg-node/server/-/server-0.9.50.tgz",
169
+ "integrity": "sha512-7Vd8k6iu+ps8bkZT+Y/wPm42EDh8KojAL+APKa79mntgkyPtdq0r1//CO+0eYqQBz6HGrDxHRT4KChSOy4jGIw==",
170
+ "license": "MIT",
171
+ "dependencies": {
172
+ "@whatwg-node/fetch": "^0.9.22",
173
+ "tslib": "^2.6.3"
174
+ },
175
+ "engines": {
176
+ "node": ">=18.0.0"
177
+ }
178
+ },
179
+ "node_modules/ansi-regex": {
180
+ "version": "5.0.1",
181
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/ansi-regex/-/ansi-regex-5.0.1.tgz",
182
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
183
+ "license": "MIT",
184
+ "engines": {
185
+ "node": ">=8"
186
+ }
187
+ },
188
+ "node_modules/ansi-styles": {
189
+ "version": "4.3.0",
190
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/ansi-styles/-/ansi-styles-4.3.0.tgz",
191
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
192
+ "license": "MIT",
193
+ "dependencies": {
194
+ "color-convert": "^2.0.1"
195
+ },
196
+ "engines": {
197
+ "node": ">=8"
198
+ },
199
+ "funding": {
200
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
201
+ }
202
+ },
203
+ "node_modules/busboy": {
204
+ "version": "1.6.0",
205
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/busboy/-/busboy-1.6.0.tgz",
206
+ "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
207
+ "dependencies": {
208
+ "streamsearch": "^1.1.0"
209
+ },
210
+ "engines": {
211
+ "node": ">=10.16.0"
212
+ }
213
+ },
214
+ "node_modules/cliui": {
215
+ "version": "8.0.1",
216
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/cliui/-/cliui-8.0.1.tgz",
217
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
218
+ "license": "ISC",
219
+ "dependencies": {
220
+ "string-width": "^4.2.0",
221
+ "strip-ansi": "^6.0.1",
222
+ "wrap-ansi": "^7.0.0"
223
+ },
224
+ "engines": {
225
+ "node": ">=12"
226
+ }
227
+ },
228
+ "node_modules/color-convert": {
229
+ "version": "2.0.1",
230
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/color-convert/-/color-convert-2.0.1.tgz",
231
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
232
+ "license": "MIT",
233
+ "dependencies": {
234
+ "color-name": "~1.1.4"
235
+ },
236
+ "engines": {
237
+ "node": ">=7.0.0"
238
+ }
239
+ },
240
+ "node_modules/color-name": {
241
+ "version": "1.1.4",
242
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/color-name/-/color-name-1.1.4.tgz",
243
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
244
+ "license": "MIT"
245
+ },
246
+ "node_modules/dotenv": {
247
+ "version": "16.4.5",
248
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/dotenv/-/dotenv-16.4.5.tgz",
249
+ "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
250
+ "license": "BSD-2-Clause",
251
+ "engines": {
252
+ "node": ">=12"
253
+ },
254
+ "funding": {
255
+ "url": "https://dotenvx.com"
256
+ }
257
+ },
258
+ "node_modules/emoji-regex": {
259
+ "version": "8.0.0",
260
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/emoji-regex/-/emoji-regex-8.0.0.tgz",
261
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
262
+ "license": "MIT"
263
+ },
264
+ "node_modules/escalade": {
265
+ "version": "3.2.0",
266
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/escalade/-/escalade-3.2.0.tgz",
267
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
268
+ "license": "MIT",
269
+ "engines": {
270
+ "node": ">=6"
271
+ }
272
+ },
273
+ "node_modules/fast-decode-uri-component": {
274
+ "version": "1.0.1",
275
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz",
276
+ "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==",
277
+ "license": "MIT"
278
+ },
279
+ "node_modules/fast-querystring": {
280
+ "version": "1.1.2",
281
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/fast-querystring/-/fast-querystring-1.1.2.tgz",
282
+ "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==",
283
+ "license": "MIT",
284
+ "dependencies": {
285
+ "fast-decode-uri-component": "^1.0.1"
286
+ }
287
+ },
288
+ "node_modules/get-caller-file": {
289
+ "version": "2.0.5",
290
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/get-caller-file/-/get-caller-file-2.0.5.tgz",
291
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
292
+ "license": "ISC",
293
+ "engines": {
294
+ "node": "6.* || 8.* || >= 10.*"
295
+ }
296
+ },
297
+ "node_modules/is-fullwidth-code-point": {
298
+ "version": "3.0.0",
299
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
300
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
301
+ "license": "MIT",
302
+ "engines": {
303
+ "node": ">=8"
304
+ }
305
+ },
306
+ "node_modules/itty-router": {
307
+ "version": "5.0.18",
308
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/itty-router/-/itty-router-5.0.18.tgz",
309
+ "integrity": "sha512-mK3ReOt4ARAGy0V0J7uHmArG2USN2x0zprZ+u+YgmeRjXTDbaowDy3kPcsmQY6tH+uHhDgpWit9Vqmv/4rTXwA==",
310
+ "license": "MIT"
311
+ },
312
+ "node_modules/lodash.camelcase": {
313
+ "version": "4.3.0",
314
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
315
+ "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
316
+ "license": "MIT"
317
+ },
318
+ "node_modules/long": {
319
+ "version": "5.2.3",
320
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/long/-/long-5.2.3.tgz",
321
+ "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==",
322
+ "license": "Apache-2.0"
323
+ },
324
+ "node_modules/protobufjs": {
325
+ "version": "7.4.0",
326
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/protobufjs/-/protobufjs-7.4.0.tgz",
327
+ "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==",
328
+ "hasInstallScript": true,
329
+ "license": "BSD-3-Clause",
330
+ "dependencies": {
331
+ "@protobufjs/aspromise": "^1.1.2",
332
+ "@protobufjs/base64": "^1.1.2",
333
+ "@protobufjs/codegen": "^2.0.4",
334
+ "@protobufjs/eventemitter": "^1.1.0",
335
+ "@protobufjs/fetch": "^1.1.0",
336
+ "@protobufjs/float": "^1.0.2",
337
+ "@protobufjs/inquire": "^1.1.0",
338
+ "@protobufjs/path": "^1.1.2",
339
+ "@protobufjs/pool": "^1.1.0",
340
+ "@protobufjs/utf8": "^1.1.0",
341
+ "@types/node": ">=13.7.0",
342
+ "long": "^5.0.0"
343
+ },
344
+ "engines": {
345
+ "node": ">=12.0.0"
346
+ }
347
+ },
348
+ "node_modules/require-directory": {
349
+ "version": "2.1.1",
350
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/require-directory/-/require-directory-2.1.1.tgz",
351
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
352
+ "license": "MIT",
353
+ "engines": {
354
+ "node": ">=0.10.0"
355
+ }
356
+ },
357
+ "node_modules/streamsearch": {
358
+ "version": "1.1.0",
359
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/streamsearch/-/streamsearch-1.1.0.tgz",
360
+ "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
361
+ "engines": {
362
+ "node": ">=10.0.0"
363
+ }
364
+ },
365
+ "node_modules/string-width": {
366
+ "version": "4.2.3",
367
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/string-width/-/string-width-4.2.3.tgz",
368
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
369
+ "license": "MIT",
370
+ "dependencies": {
371
+ "emoji-regex": "^8.0.0",
372
+ "is-fullwidth-code-point": "^3.0.0",
373
+ "strip-ansi": "^6.0.1"
374
+ },
375
+ "engines": {
376
+ "node": ">=8"
377
+ }
378
+ },
379
+ "node_modules/strip-ansi": {
380
+ "version": "6.0.1",
381
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/strip-ansi/-/strip-ansi-6.0.1.tgz",
382
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
383
+ "license": "MIT",
384
+ "dependencies": {
385
+ "ansi-regex": "^5.0.1"
386
+ },
387
+ "engines": {
388
+ "node": ">=8"
389
+ }
390
+ },
391
+ "node_modules/tslib": {
392
+ "version": "2.8.0",
393
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/tslib/-/tslib-2.8.0.tgz",
394
+ "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==",
395
+ "license": "0BSD"
396
+ },
397
+ "node_modules/undici-types": {
398
+ "version": "6.19.8",
399
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/undici-types/-/undici-types-6.19.8.tgz",
400
+ "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
401
+ "license": "MIT"
402
+ },
403
+ "node_modules/urlpattern-polyfill": {
404
+ "version": "10.0.0",
405
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz",
406
+ "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==",
407
+ "license": "MIT"
408
+ },
409
+ "node_modules/wrap-ansi": {
410
+ "version": "7.0.0",
411
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
412
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
413
+ "license": "MIT",
414
+ "dependencies": {
415
+ "ansi-styles": "^4.0.0",
416
+ "string-width": "^4.1.0",
417
+ "strip-ansi": "^6.0.0"
418
+ },
419
+ "engines": {
420
+ "node": ">=10"
421
+ },
422
+ "funding": {
423
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
424
+ }
425
+ },
426
+ "node_modules/y18n": {
427
+ "version": "5.0.8",
428
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/y18n/-/y18n-5.0.8.tgz",
429
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
430
+ "license": "ISC",
431
+ "engines": {
432
+ "node": ">=10"
433
+ }
434
+ },
435
+ "node_modules/yargs": {
436
+ "version": "17.7.2",
437
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/yargs/-/yargs-17.7.2.tgz",
438
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
439
+ "license": "MIT",
440
+ "dependencies": {
441
+ "cliui": "^8.0.1",
442
+ "escalade": "^3.1.1",
443
+ "get-caller-file": "^2.0.5",
444
+ "require-directory": "^2.1.1",
445
+ "string-width": "^4.2.3",
446
+ "y18n": "^5.0.5",
447
+ "yargs-parser": "^21.1.1"
448
+ },
449
+ "engines": {
450
+ "node": ">=12"
451
+ }
452
+ },
453
+ "node_modules/yargs-parser": {
454
+ "version": "21.1.1",
455
+ "resolved": "https://mirrors.huaweicloud.com/repository/npm/yargs-parser/-/yargs-parser-21.1.1.tgz",
456
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
457
+ "license": "ISC",
458
+ "engines": {
459
+ "node": ">=12"
460
+ }
461
+ }
462
+ }
463
+ }
package.json ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "pieces-os",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "description": "",
6
+ "main": "index.js",
7
+ "scripts": {
8
+ "dev": "node index.js"
9
+ },
10
+ "private": true,
11
+ "dependencies": {
12
+ "@grpc/grpc-js": "^1.12.2",
13
+ "@grpc/proto-loader": "^0.7.13",
14
+ "@whatwg-node/server": "^0.9.50",
15
+ "dotenv": "^16.4.5",
16
+ "itty-router": "^5.0.18"
17
+ }
18
+ }