@purpleschool/ai-proxy 0.0.2
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.
- package/build/errors/errors.js +132 -0
- package/build/errors/index.js +17 -0
- package/build/index.js +17 -0
- package/package.json +21 -0
- package/proto/ai-api.proto +92 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ERRORS = void 0;
|
|
4
|
+
exports.ERRORS = {
|
|
5
|
+
INTERNAL_SERVER_ERROR: { code: 'A001', message: 'Ошибка севера', httpCode: 500 },
|
|
6
|
+
FORBIDDEN_API: { code: 'C001', message: 'Ошибка авторизации', httpCode: 403 },
|
|
7
|
+
AI_ERROR: {
|
|
8
|
+
code: 'A002',
|
|
9
|
+
message: 'Произошла ошибка при обработке запроса',
|
|
10
|
+
httpCode: 500,
|
|
11
|
+
},
|
|
12
|
+
OPENAI_CONTENT_POLICY_VIOLATION: {
|
|
13
|
+
code: 'A003',
|
|
14
|
+
message: 'Запрос был отклонен, т.к. может не соответствовать политике безопасности сервиса',
|
|
15
|
+
httpCode: 400,
|
|
16
|
+
},
|
|
17
|
+
OPENAI_UNSAFE_CONTENT: {
|
|
18
|
+
code: 'A004',
|
|
19
|
+
message: 'Запрос был отклонен, т.к. содержит небезопасные данные или данные, нарушающие правила использования сервиса',
|
|
20
|
+
httpCode: 400,
|
|
21
|
+
},
|
|
22
|
+
OPENAI_INVALID_FILE_TYPE: {
|
|
23
|
+
code: 'A005',
|
|
24
|
+
message: 'Формат файла не поддерживается',
|
|
25
|
+
httpCode: 400,
|
|
26
|
+
},
|
|
27
|
+
OPENAI_CONTEXT_LENGTH_EXCEEDED: {
|
|
28
|
+
code: 'A006',
|
|
29
|
+
message: 'Длина запроса превышает максимальную длину',
|
|
30
|
+
httpCode: 400,
|
|
31
|
+
},
|
|
32
|
+
OPENAI_MODEL_DEPRECATED: {
|
|
33
|
+
code: 'A007',
|
|
34
|
+
message: 'Модель ИИ устарела',
|
|
35
|
+
httpCode: 400,
|
|
36
|
+
},
|
|
37
|
+
AI_MODEL_DELETE_ERROR: {
|
|
38
|
+
code: 'A008',
|
|
39
|
+
message: 'Модель искусственного интеллекта не была удалена',
|
|
40
|
+
httpCode: 500,
|
|
41
|
+
},
|
|
42
|
+
AI_MODEL_CREATE_ERROR: {
|
|
43
|
+
code: 'A009',
|
|
44
|
+
message: 'Модель искусственного интеллекта не была создана',
|
|
45
|
+
httpCode: 500,
|
|
46
|
+
},
|
|
47
|
+
AI_MODEL_FIND_ERROR: {
|
|
48
|
+
code: 'A010',
|
|
49
|
+
message: 'Модель искусственного интеллекта не найдена',
|
|
50
|
+
httpCode: 404,
|
|
51
|
+
},
|
|
52
|
+
AI_MODELS_FIND_ERROR: {
|
|
53
|
+
code: 'A011',
|
|
54
|
+
message: 'Модели искусственного интеллекта не найдены',
|
|
55
|
+
httpCode: 404,
|
|
56
|
+
},
|
|
57
|
+
AI_MODEL_UPDATE_ERROR: {
|
|
58
|
+
code: 'A012',
|
|
59
|
+
message: 'Модель искусственного интеллекта не была обновлена',
|
|
60
|
+
httpCode: 500,
|
|
61
|
+
},
|
|
62
|
+
AI_MODEL_NOT_FOUND_BY_UUID: {
|
|
63
|
+
code: 'A013',
|
|
64
|
+
message: 'Модель искусственного интеллекта с таким uuid не найдена',
|
|
65
|
+
httpCode: 404,
|
|
66
|
+
},
|
|
67
|
+
AI_MODEL_DOES_NOT_SUPPORT_FILES: {
|
|
68
|
+
code: 'A014',
|
|
69
|
+
message: 'ИИ модель не поддерживает загрузку файлов',
|
|
70
|
+
httpCode: 400,
|
|
71
|
+
},
|
|
72
|
+
AI_MODEL_MAX_FILES_COUNT_EXCEEDED: {
|
|
73
|
+
code: 'A015',
|
|
74
|
+
message: 'Превышено максимальное количество прикрепленных файлов',
|
|
75
|
+
httpCode: 400,
|
|
76
|
+
},
|
|
77
|
+
AI_MODEL_INCORRECT_CONTENT_TYPE: {
|
|
78
|
+
code: 'A016',
|
|
79
|
+
message: 'Модель не поддерживает данный тип контента',
|
|
80
|
+
httpCode: 400,
|
|
81
|
+
},
|
|
82
|
+
CLIENT_FIND_ERROR: {
|
|
83
|
+
code: 'A017',
|
|
84
|
+
message: 'Клиент не найден',
|
|
85
|
+
httpCode: 404,
|
|
86
|
+
},
|
|
87
|
+
AI_MODEL_CONTEXT_IS_MISSING: {
|
|
88
|
+
code: 'A018',
|
|
89
|
+
message: 'Контекст отсутствует в запросе',
|
|
90
|
+
httpCode: 400,
|
|
91
|
+
},
|
|
92
|
+
AI_MODEL_PROMPT_IS_MISSING: {
|
|
93
|
+
code: 'A019',
|
|
94
|
+
message: 'Промпт отсутствует в запросе',
|
|
95
|
+
httpCode: 400,
|
|
96
|
+
},
|
|
97
|
+
AI_MODEL_INVALID_PARAMS: {
|
|
98
|
+
code: 'A020',
|
|
99
|
+
message: 'Указаны неверные параметры при генерации изображения',
|
|
100
|
+
httpCode: 400,
|
|
101
|
+
},
|
|
102
|
+
AI_MODEL_MAX_INPUT_LENGTH_EXCEEDED: {
|
|
103
|
+
code: 'A021',
|
|
104
|
+
message: 'Превышено максимальное количество символов в запросе',
|
|
105
|
+
httpCode: 400,
|
|
106
|
+
},
|
|
107
|
+
AI_MODEL_MAX_INPUT_TOKENS_EXCEEDED: {
|
|
108
|
+
code: 'A022',
|
|
109
|
+
message: 'Превышено максимальное количество токенов в запросе',
|
|
110
|
+
httpCode: 400,
|
|
111
|
+
},
|
|
112
|
+
CLIENT_CALL_LOG_CREATE_ERROR: {
|
|
113
|
+
code: 'A022',
|
|
114
|
+
message: 'Лог вызова клиента не был создан',
|
|
115
|
+
httpCode: 500,
|
|
116
|
+
},
|
|
117
|
+
CLIENT_CALL_LOG_UPDATE_ERROR: {
|
|
118
|
+
code: 'A023',
|
|
119
|
+
message: 'Лог вызова клиента не был обновлён',
|
|
120
|
+
httpCode: 500,
|
|
121
|
+
},
|
|
122
|
+
AI_MODEL_DOES_NOT_SUPPORT_WEB_SEARCH: {
|
|
123
|
+
code: 'A024',
|
|
124
|
+
message: 'ИИ модель не поддерживает поиск в интернете',
|
|
125
|
+
httpCode: 400,
|
|
126
|
+
},
|
|
127
|
+
ATTACHMENT_AND_WEB_SEARCH_CONFLICT: {
|
|
128
|
+
code: 'A025',
|
|
129
|
+
message: 'Вложения файлов и веб-поиск нельзя использовать вместе',
|
|
130
|
+
httpCode: 400,
|
|
131
|
+
},
|
|
132
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./errors"), exports);
|
package/build/index.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./errors"), exports);
|
package/package.json
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@purpleschool/ai-proxy",
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "build/index.js",
|
|
6
|
+
"types": "build/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"build",
|
|
9
|
+
"proto"
|
|
10
|
+
],
|
|
11
|
+
"scripts": {
|
|
12
|
+
"prepublish": "rm -rf build && tsc",
|
|
13
|
+
"build": "tsc"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [],
|
|
16
|
+
"author": "",
|
|
17
|
+
"license": "ISC",
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"zod": "^3.22.4"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
syntax = "proto3";
|
|
2
|
+
|
|
3
|
+
package AiApi;
|
|
4
|
+
|
|
5
|
+
service AiApiService {
|
|
6
|
+
rpc ChatCompletions (ChatCompletionsRequest) returns (stream ChatCompletionsResponse);
|
|
7
|
+
rpc ImageGeneration (ImageGenerationRequest) returns (ImageGenerationResponse);
|
|
8
|
+
rpc GetAllAiModels(GetAllAiModelsRequest) returns (GetAllAiModelsResponse);
|
|
9
|
+
rpc GetAiModel(GetAiModelRequest) returns (GetAiModelResponse);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// Chat Completions
|
|
13
|
+
message ChatCompletionsRequest {
|
|
14
|
+
string model = 1;
|
|
15
|
+
repeated Message messages = 2;
|
|
16
|
+
repeated string features = 3;
|
|
17
|
+
UserLocation userLocation = 4;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
message Message {
|
|
21
|
+
string role = 1;
|
|
22
|
+
string text = 2;
|
|
23
|
+
repeated File files = 3;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
message UserLocation {
|
|
27
|
+
string country = 1;
|
|
28
|
+
string city = 2;
|
|
29
|
+
string region = 3;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
message File {
|
|
33
|
+
string url = 1;
|
|
34
|
+
string type = 2;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
message ChatCompletionsResponse {
|
|
38
|
+
optional string delta = 1;
|
|
39
|
+
bool isFinish = 2;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Image Generation
|
|
43
|
+
message ImageGenerationRequest {
|
|
44
|
+
string model = 1;
|
|
45
|
+
string prompt = 2;
|
|
46
|
+
int32 width = 3;
|
|
47
|
+
int32 height = 4;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
message ImageGenerationResponse {
|
|
51
|
+
string model = 1;
|
|
52
|
+
ImageGenerationData data = 2;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
message ImageGenerationData {
|
|
56
|
+
string url = 1;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// GetAllAiModels
|
|
60
|
+
message GetAllAiModelsRequest {
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
message GetAllAiModelsResponse {
|
|
64
|
+
repeated AiModel data = 1;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
message AiModel {
|
|
68
|
+
string model = 1;
|
|
69
|
+
string contentType = 2;
|
|
70
|
+
repeated string features = 3;
|
|
71
|
+
int32 maxInputLength = 4;
|
|
72
|
+
int32 maxInputTokens = 5;
|
|
73
|
+
AiModelConfig config = 6;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
message AiModelConfig {
|
|
77
|
+
repeated ImageSizeOption supportedResolutions = 1;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
message ImageSizeOption {
|
|
81
|
+
int32 width = 1;
|
|
82
|
+
int32 height = 2;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// GetAiModel
|
|
86
|
+
message GetAiModelRequest {
|
|
87
|
+
string model = 1;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
message GetAiModelResponse {
|
|
91
|
+
AiModel data = 1;
|
|
92
|
+
}
|