@celljs/ai-openai 3.8.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/common/api/api-protocol.d.ts +46 -0
- package/esm/common/api/api-protocol.js +3 -0
- package/esm/common/api/api-protocol.js.map +1 -0
- package/esm/common/api/chat-request.d.ts +203 -0
- package/esm/common/api/chat-request.js +236 -0
- package/esm/common/api/chat-request.js.map +1 -0
- package/esm/common/api/chat-response.d.ts +192 -0
- package/esm/common/api/chat-response.js +191 -0
- package/esm/common/api/chat-response.js.map +1 -0
- package/esm/common/api/embeddings-request.d.ts +62 -0
- package/esm/common/api/embeddings-request.js +85 -0
- package/esm/common/api/embeddings-request.js.map +1 -0
- package/esm/common/api/embeddings-response.d.ts +26 -0
- package/esm/common/api/embeddings-response.js +44 -0
- package/esm/common/api/embeddings-response.js.map +1 -0
- package/esm/common/api/index.d.ts +9 -0
- package/esm/common/api/index.js +10 -0
- package/esm/common/api/index.js.map +1 -0
- package/esm/common/api/message.d.ts +215 -0
- package/esm/common/api/message.js +250 -0
- package/esm/common/api/message.js.map +1 -0
- package/esm/common/api/openai-api.d.ts +18 -0
- package/esm/common/api/openai-api.js +118 -0
- package/esm/common/api/openai-api.js.map +1 -0
- package/esm/common/api/openai-model.d.ts +116 -0
- package/esm/common/api/openai-model.js +118 -0
- package/esm/common/api/openai-model.js.map +1 -0
- package/esm/common/api/response-format.d.ts +59 -0
- package/esm/common/api/response-format.js +107 -0
- package/esm/common/api/response-format.js.map +1 -0
- package/esm/common/api/usage.d.ts +78 -0
- package/esm/common/api/usage.js +106 -0
- package/esm/common/api/usage.js.map +1 -0
- package/esm/common/index.d.ts +3 -0
- package/esm/common/index.js +4 -0
- package/esm/common/index.js.map +1 -0
- package/esm/common/model/index.d.ts +4 -0
- package/esm/common/model/index.js +5 -0
- package/esm/common/model/index.js.map +1 -0
- package/esm/common/model/openai-chat-model.d.ts +36 -0
- package/esm/common/model/openai-chat-model.js +363 -0
- package/esm/common/model/openai-chat-model.js.map +1 -0
- package/esm/common/model/openai-chat-options.d.ts +169 -0
- package/esm/common/model/openai-chat-options.js +274 -0
- package/esm/common/model/openai-chat-options.js.map +1 -0
- package/esm/common/model/openai-embedding-model.d.ts +14 -0
- package/esm/common/model/openai-embedding-model.js +69 -0
- package/esm/common/model/openai-embedding-model.js.map +1 -0
- package/esm/common/model/openai-embedding-options.d.ts +34 -0
- package/esm/common/model/openai-embedding-options.js +72 -0
- package/esm/common/model/openai-embedding-options.js.map +1 -0
- package/esm/common/module.d.ts +3 -0
- package/esm/common/module.js +4 -0
- package/esm/common/module.js.map +1 -0
- package/esm/common/support/index.d.ts +2 -0
- package/esm/common/support/index.js +3 -0
- package/esm/common/support/index.js.map +1 -0
- package/esm/common/support/openai-api-response-headers.d.ts +33 -0
- package/esm/common/support/openai-api-response-headers.js +42 -0
- package/esm/common/support/openai-api-response-headers.js.map +1 -0
- package/esm/common/support/openai-response-header-extractor.d.ts +11 -0
- package/esm/common/support/openai-response-header-extractor.js +129 -0
- package/esm/common/support/openai-response-header-extractor.js.map +1 -0
- package/esm/common/test/mock-openai-api.d.ts +12 -0
- package/esm/common/test/mock-openai-api.js +53 -0
- package/esm/common/test/mock-openai-api.js.map +1 -0
- package/esm/common/test/test-container.d.ts +2 -0
- package/esm/common/test/test-container.js +12 -0
- package/esm/common/test/test-container.js.map +1 -0
- package/esm/package.json +3 -0
- package/package.json +49 -6
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { Assert, ContainerUtil, Logger } from '@celljs/core';
|
|
2
|
+
import { OpenAIApiResponseHeaders } from './openai-api-response-headers.js';
|
|
3
|
+
/**
|
|
4
|
+
* Utility used to extract known HTTP response headers for the {@literal OpenAI} API.
|
|
5
|
+
*/
|
|
6
|
+
export class OpenAIResponseHeaderExtractor {
|
|
7
|
+
static extractAIResponseHeaders(response) {
|
|
8
|
+
const requestsLimit = this.getHeaderAsLong(response, OpenAIApiResponseHeaders.REQUESTS_LIMIT_HEADER);
|
|
9
|
+
const requestsRemaining = this.getHeaderAsLong(response, OpenAIApiResponseHeaders.REQUESTS_REMAINING_HEADER);
|
|
10
|
+
const tokensLimit = this.getHeaderAsLong(response, OpenAIApiResponseHeaders.TOKENS_LIMIT_HEADER);
|
|
11
|
+
const tokensRemaining = this.getHeaderAsLong(response, OpenAIApiResponseHeaders.TOKENS_REMAINING_HEADER);
|
|
12
|
+
const requestsReset = this.getHeaderAsDuration(response, OpenAIApiResponseHeaders.REQUESTS_RESET_HEADER);
|
|
13
|
+
const tokensReset = this.getHeaderAsDuration(response, OpenAIApiResponseHeaders.TOKENS_RESET_HEADER);
|
|
14
|
+
return {
|
|
15
|
+
requestsLimit,
|
|
16
|
+
requestsRemaining,
|
|
17
|
+
requestsReset,
|
|
18
|
+
tokensLimit,
|
|
19
|
+
tokensRemaining,
|
|
20
|
+
tokensReset
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
static getHeaderAsDuration(response, headerName) {
|
|
24
|
+
const headers = response.headers;
|
|
25
|
+
if (headerName in headers) {
|
|
26
|
+
const values = headers[headerName];
|
|
27
|
+
if (values && values.length > 0) {
|
|
28
|
+
return DurationFormatter.TIME_UNIT.parse(values[0]);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
static getHeaderAsLong(response, headerName) {
|
|
34
|
+
const headers = response.headers;
|
|
35
|
+
if (headerName in headers) {
|
|
36
|
+
const values = headers[headerName];
|
|
37
|
+
if (values && values.length > 0) {
|
|
38
|
+
return this.parseLong(headerName, values[0]);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
static parseLong(headerName, headerValue) {
|
|
43
|
+
if (headerValue) {
|
|
44
|
+
try {
|
|
45
|
+
return parseInt(headerValue.trim(), 10);
|
|
46
|
+
}
|
|
47
|
+
catch (e) {
|
|
48
|
+
ContainerUtil.get(Logger).warn(`Value [${headerValue}] for HTTP header [${headerName}] is not valid: ${e.message}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Duration formatter for parsing time units.
|
|
55
|
+
*/
|
|
56
|
+
class DurationFormatter {
|
|
57
|
+
constructor(pattern) {
|
|
58
|
+
this.pattern = pattern;
|
|
59
|
+
}
|
|
60
|
+
parse(text) {
|
|
61
|
+
Assert.hasText(text, `Text [${text}] to parse as a Duration must not be null or empty`);
|
|
62
|
+
const matches = text.match(this.pattern);
|
|
63
|
+
let total = 0;
|
|
64
|
+
if (matches) {
|
|
65
|
+
for (const value of matches) {
|
|
66
|
+
total += Unit.toDuration(Unit.parseUnit(value), value);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return total;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
DurationFormatter.TIME_UNIT = new DurationFormatter(/\d+[a-zA-Z]{1,2}/);
|
|
73
|
+
/**
|
|
74
|
+
* Time unit enum for duration parsing.
|
|
75
|
+
*/
|
|
76
|
+
var Unit;
|
|
77
|
+
(function (Unit) {
|
|
78
|
+
Unit["NANOSECONDS"] = "ns";
|
|
79
|
+
Unit["MICROSECONDS"] = "us";
|
|
80
|
+
Unit["MILLISECONDS"] = "ms";
|
|
81
|
+
Unit["SECONDS"] = "s";
|
|
82
|
+
Unit["MINUTES"] = "m";
|
|
83
|
+
Unit["HOURS"] = "h";
|
|
84
|
+
Unit["DAYS"] = "d";
|
|
85
|
+
})(Unit || (Unit = {}));
|
|
86
|
+
(function (Unit) {
|
|
87
|
+
const unitMap = new Map([
|
|
88
|
+
[Unit.NANOSECONDS, { name: 'nanoseconds', multiplier: 1 }],
|
|
89
|
+
[Unit.MICROSECONDS, { name: 'microseconds', multiplier: 1000 }],
|
|
90
|
+
[Unit.MILLISECONDS, { name: 'milliseconds', multiplier: 1000 * 1000 }],
|
|
91
|
+
[Unit.SECONDS, { name: 'seconds', multiplier: 1000 * 1000 * 1000 }],
|
|
92
|
+
[Unit.MINUTES, { name: 'minutes', multiplier: 1000 * 1000 * 1000 * 60 }],
|
|
93
|
+
[Unit.HOURS, { name: 'hours', multiplier: 1000 * 1000 * 1000 * 60 * 60 }],
|
|
94
|
+
[Unit.DAYS, { name: 'days', multiplier: 1000 * 1000 * 1000 * 60 * 60 * 24 }]
|
|
95
|
+
]);
|
|
96
|
+
function parseUnit(value) {
|
|
97
|
+
const symbol = parseSymbol(value);
|
|
98
|
+
const unit = [...unitMap.keys()].find(u => u === symbol);
|
|
99
|
+
if (!unit) {
|
|
100
|
+
throw new Error(`Value [${value}] does not contain a valid time unit`);
|
|
101
|
+
}
|
|
102
|
+
return unit;
|
|
103
|
+
}
|
|
104
|
+
Unit.parseUnit = parseUnit;
|
|
105
|
+
function parse(value, predicate) {
|
|
106
|
+
Assert.hasText(value, `Value [${value}] must not be null or empty`);
|
|
107
|
+
return Array.from(value).filter(predicate).join('');
|
|
108
|
+
}
|
|
109
|
+
function parseSymbol(value) {
|
|
110
|
+
return parse(value, char => /[a-zA-Z]/.test(char));
|
|
111
|
+
}
|
|
112
|
+
function parseTime(value) {
|
|
113
|
+
return parseInt(parse(value, char => /\d/.test(char)), 10);
|
|
114
|
+
}
|
|
115
|
+
function getName(unit) {
|
|
116
|
+
var _a;
|
|
117
|
+
var _b;
|
|
118
|
+
return (_b = (_a = unitMap.get(unit)) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : unit;
|
|
119
|
+
}
|
|
120
|
+
Unit.getName = getName;
|
|
121
|
+
function toDuration(unit, value) {
|
|
122
|
+
var _a;
|
|
123
|
+
var _b;
|
|
124
|
+
const multiplier = (_b = (_a = unitMap.get(unit)) === null || _a === void 0 ? void 0 : _a.multiplier) !== null && _b !== void 0 ? _b : 1;
|
|
125
|
+
return parseTime(value) * multiplier;
|
|
126
|
+
}
|
|
127
|
+
Unit.toDuration = toDuration;
|
|
128
|
+
})(Unit || (Unit = {}));
|
|
129
|
+
//# sourceMappingURL=openai-response-header-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-response-header-extractor.js","sourceRoot":"","sources":["../../../src/common/support/openai-response-header-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { OpenAIAPI } from '../api/api-protocol.js';
|
|
2
|
+
import { ChatCompletionRequest } from '../api/chat-request.js';
|
|
3
|
+
import { ChatCompletion, ChatCompletionChunk } from '../api/chat-response.js';
|
|
4
|
+
import { EmbeddingRequest } from '../api/embeddings-request.js';
|
|
5
|
+
import { EmbeddingResponse } from '../api/embeddings-response.js';
|
|
6
|
+
import { Observable } from 'rxjs';
|
|
7
|
+
import { ResponseEntity } from '@celljs/http';
|
|
8
|
+
export declare class MockOpenAIAPI implements OpenAIAPI {
|
|
9
|
+
chat(chatRequest: ChatCompletionRequest, additionalHttpHeader?: Record<string, string>): Promise<ResponseEntity<ChatCompletion>>;
|
|
10
|
+
streamingChat(chatRequest: ChatCompletionRequest, additionalHttpHeader?: Record<string, string>): Promise<Observable<ResponseEntity<ChatCompletionChunk>>>;
|
|
11
|
+
embed<T>(embeddingRequest: EmbeddingRequest<T>): Promise<ResponseEntity<EmbeddingResponse>>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { ChatCompletion, ChatCompletionChunk, Choice, ChunkChoice, LogProbs } from '../api/chat-response.js';
|
|
2
|
+
import { Embedding } from '../api/embeddings-request.js';
|
|
3
|
+
import { EmbeddingResponse } from '../api/embeddings-response.js';
|
|
4
|
+
import { of } from 'rxjs';
|
|
5
|
+
import { ChatCompletionFinishReason, Role, ChatCompletionMessage } from '../api/message.js';
|
|
6
|
+
import { ResponseEntityUtil } from '@celljs/http';
|
|
7
|
+
import { Usage } from '../api/usage.js';
|
|
8
|
+
export class MockOpenAIAPI {
|
|
9
|
+
async chat(chatRequest, additionalHttpHeader) {
|
|
10
|
+
// 使用静态创建方法创建消息
|
|
11
|
+
const message = ChatCompletionMessage.create('Hello, how can I help you?', Role.ASSISTANT);
|
|
12
|
+
message.toolCalls = []; // 注意这里应该使用 toolCalls 而不是 tool_calls
|
|
13
|
+
const choice = new Choice();
|
|
14
|
+
choice.index = 0;
|
|
15
|
+
choice.message = message;
|
|
16
|
+
choice.finishReason = ChatCompletionFinishReason.STOP; // 使用 finishReason 而不是 finish_reason
|
|
17
|
+
choice.logprobs = new LogProbs();
|
|
18
|
+
const usage = new Usage(10, 20, 30);
|
|
19
|
+
const completion = new ChatCompletion();
|
|
20
|
+
completion.id = 'chatcmpl-mock-id';
|
|
21
|
+
completion.object = 'chat.completion';
|
|
22
|
+
completion.created = Math.floor(Date.now() / 1000);
|
|
23
|
+
completion.model = 'gpt-4';
|
|
24
|
+
completion.choices = [choice];
|
|
25
|
+
completion.usage = usage;
|
|
26
|
+
completion.systemFingerprint = 'fp_mock_123'; // 使用 systemFingerprint 而不是 system_fingerprint
|
|
27
|
+
return ResponseEntityUtil.ok(completion);
|
|
28
|
+
}
|
|
29
|
+
async streamingChat(chatRequest, additionalHttpHeader) {
|
|
30
|
+
// 使用静态创建方法创建消息
|
|
31
|
+
const delta = ChatCompletionMessage.create('Hello, how can I help you?', Role.ASSISTANT);
|
|
32
|
+
delta.toolCalls = []; // 注意这里应该使用 toolCalls 而不是 tool_calls
|
|
33
|
+
const choice = new ChunkChoice();
|
|
34
|
+
choice.index = 0;
|
|
35
|
+
choice.delta = delta;
|
|
36
|
+
choice.finishReason = ChatCompletionFinishReason.STOP; // 使用 finishReason 而不是 finish_reason
|
|
37
|
+
choice.logprobs = new LogProbs();
|
|
38
|
+
const chunk = new ChatCompletionChunk();
|
|
39
|
+
chunk.id = 'chatcmpl-mock-id';
|
|
40
|
+
chunk.object = 'chat.completion.chunk';
|
|
41
|
+
chunk.created = Math.floor(Date.now() / 1000);
|
|
42
|
+
chunk.model = 'gpt-4';
|
|
43
|
+
chunk.choices = [choice];
|
|
44
|
+
chunk.systemFingerprint = 'fp_mock_123'; // 使用 systemFingerprint 而不是 system_fingerprint
|
|
45
|
+
return of(ResponseEntityUtil.ok(chunk));
|
|
46
|
+
}
|
|
47
|
+
async embed(embeddingRequest) {
|
|
48
|
+
const embedding = new Embedding(0, [0.1, 0.2, 0.3, 0.4, 0.5]);
|
|
49
|
+
const usage = new Usage(8, 0, 8);
|
|
50
|
+
return ResponseEntityUtil.ok(new EmbeddingResponse('list', [embedding], 'text-embedding-ada-002', usage));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=mock-openai-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-openai-api.js","sourceRoot":"","sources":["../../../src/common/test/mock-openai-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { coreTestModule } from '@celljs/core/lib/common/test/test-module';
|
|
2
|
+
import httpModule from '@celljs/http/lib/common/module';
|
|
3
|
+
import aiCoreModlue from '@celljs/ai-core/lib/common/module';
|
|
4
|
+
import { autoBind, ContainerFactory, ContainerProvider } from '@celljs/core';
|
|
5
|
+
import '../index.js';
|
|
6
|
+
const openAITestModule = autoBind();
|
|
7
|
+
export const createContainer = () => {
|
|
8
|
+
const container = ContainerFactory.create(coreTestModule, httpModule, aiCoreModlue, openAITestModule);
|
|
9
|
+
ContainerProvider.set(container);
|
|
10
|
+
return container;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=test-container.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-container.js","sourceRoot":"","sources":["../../../src/common/test/test-container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC1E,OAAO,UAAU,MAAM,gCAAgC,CAAC;AACxD,OAAO,YAAY,MAAM,mCAAmC,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,UAAU,CAAC;AAElB,MAAM,gBAAgB,GAAG,QAAQ,EAAE,CAAC;AAEpC,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,EAAE;IAChC,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;IACtG,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACjC,OAAO,SAAS,CAAC;AACrB,CAAC,CAAC"}
|
package/esm/package.json
ADDED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@celljs/ai-openai",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"description": "OpenAI models support",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cell-component"
|
|
@@ -18,24 +18,67 @@
|
|
|
18
18
|
"typings": "lib/common/index.d.ts",
|
|
19
19
|
"files": [
|
|
20
20
|
"lib",
|
|
21
|
+
"esm",
|
|
21
22
|
"src",
|
|
22
23
|
"cell.yml"
|
|
23
24
|
],
|
|
24
25
|
"scripts": {
|
|
25
|
-
"build": "tsc -b",
|
|
26
|
-
"clean": "rm -rf lib *.tsbuildinfo",
|
|
26
|
+
"build": "tsc -b && bun ../../scripts/build-esm.ts",
|
|
27
|
+
"clean": "rm -rf lib esm *.tsbuildinfo",
|
|
27
28
|
"test": "bun test --preload reflect-metadata ./lib",
|
|
28
29
|
"watch": "tsc -b -w --preserveWatchOutput"
|
|
29
30
|
},
|
|
30
31
|
"dependencies": {
|
|
31
|
-
"@celljs/ai-core": "
|
|
32
|
-
"@celljs/core": "
|
|
33
|
-
"@celljs/http": "
|
|
32
|
+
"@celljs/ai-core": "4.0.0",
|
|
33
|
+
"@celljs/core": "4.0.0",
|
|
34
|
+
"@celljs/http": "4.0.0",
|
|
34
35
|
"class-transformer": "^0.5.1",
|
|
35
36
|
"rxjs": "^6.6.0",
|
|
36
37
|
"tslib": "^2.8.0"
|
|
37
38
|
},
|
|
38
39
|
"publishConfig": {
|
|
39
40
|
"access": "public"
|
|
41
|
+
},
|
|
42
|
+
"exports": {
|
|
43
|
+
".": {
|
|
44
|
+
"import": "./esm/common/index.js",
|
|
45
|
+
"default": "./lib/common/index.js"
|
|
46
|
+
},
|
|
47
|
+
"./package.json": "./package.json",
|
|
48
|
+
"./lib/common": {
|
|
49
|
+
"import": "./esm/common/index.js",
|
|
50
|
+
"default": "./lib/common/index.js"
|
|
51
|
+
},
|
|
52
|
+
"./lib/common/api": {
|
|
53
|
+
"import": "./esm/common/api/index.js",
|
|
54
|
+
"default": "./lib/common/api/index.js"
|
|
55
|
+
},
|
|
56
|
+
"./lib/common/model": {
|
|
57
|
+
"import": "./esm/common/model/index.js",
|
|
58
|
+
"default": "./lib/common/model/index.js"
|
|
59
|
+
},
|
|
60
|
+
"./lib/common/support": {
|
|
61
|
+
"import": "./esm/common/support/index.js",
|
|
62
|
+
"default": "./lib/common/support/index.js"
|
|
63
|
+
},
|
|
64
|
+
"./lib/*.js": {
|
|
65
|
+
"import": "./esm/*.js",
|
|
66
|
+
"default": "./lib/*.js"
|
|
67
|
+
},
|
|
68
|
+
"./lib/*": {
|
|
69
|
+
"import": "./esm/*.js",
|
|
70
|
+
"default": "./lib/*.js"
|
|
71
|
+
},
|
|
72
|
+
"./*": "./*"
|
|
73
|
+
},
|
|
74
|
+
"cell": {
|
|
75
|
+
"modules": {
|
|
76
|
+
"frontend": [
|
|
77
|
+
"lib/common/module"
|
|
78
|
+
],
|
|
79
|
+
"backend": [
|
|
80
|
+
"lib/common/module"
|
|
81
|
+
]
|
|
82
|
+
}
|
|
40
83
|
}
|
|
41
84
|
}
|