@celljs/ai-openai 3.8.0 → 3.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/esm/common/api/api-protocol.d.ts +46 -0
  2. package/esm/common/api/api-protocol.js +3 -0
  3. package/esm/common/api/api-protocol.js.map +1 -0
  4. package/esm/common/api/chat-request.d.ts +203 -0
  5. package/esm/common/api/chat-request.js +236 -0
  6. package/esm/common/api/chat-request.js.map +1 -0
  7. package/esm/common/api/chat-response.d.ts +192 -0
  8. package/esm/common/api/chat-response.js +191 -0
  9. package/esm/common/api/chat-response.js.map +1 -0
  10. package/esm/common/api/embeddings-request.d.ts +62 -0
  11. package/esm/common/api/embeddings-request.js +85 -0
  12. package/esm/common/api/embeddings-request.js.map +1 -0
  13. package/esm/common/api/embeddings-response.d.ts +26 -0
  14. package/esm/common/api/embeddings-response.js +44 -0
  15. package/esm/common/api/embeddings-response.js.map +1 -0
  16. package/esm/common/api/index.d.ts +9 -0
  17. package/esm/common/api/index.js +10 -0
  18. package/esm/common/api/index.js.map +1 -0
  19. package/esm/common/api/message.d.ts +215 -0
  20. package/esm/common/api/message.js +250 -0
  21. package/esm/common/api/message.js.map +1 -0
  22. package/esm/common/api/openai-api.d.ts +18 -0
  23. package/esm/common/api/openai-api.js +118 -0
  24. package/esm/common/api/openai-api.js.map +1 -0
  25. package/esm/common/api/openai-model.d.ts +116 -0
  26. package/esm/common/api/openai-model.js +118 -0
  27. package/esm/common/api/openai-model.js.map +1 -0
  28. package/esm/common/api/response-format.d.ts +59 -0
  29. package/esm/common/api/response-format.js +107 -0
  30. package/esm/common/api/response-format.js.map +1 -0
  31. package/esm/common/api/usage.d.ts +78 -0
  32. package/esm/common/api/usage.js +106 -0
  33. package/esm/common/api/usage.js.map +1 -0
  34. package/esm/common/index.d.ts +3 -0
  35. package/esm/common/index.js +4 -0
  36. package/esm/common/index.js.map +1 -0
  37. package/esm/common/model/index.d.ts +4 -0
  38. package/esm/common/model/index.js +5 -0
  39. package/esm/common/model/index.js.map +1 -0
  40. package/esm/common/model/openai-chat-model.d.ts +36 -0
  41. package/esm/common/model/openai-chat-model.js +363 -0
  42. package/esm/common/model/openai-chat-model.js.map +1 -0
  43. package/esm/common/model/openai-chat-options.d.ts +169 -0
  44. package/esm/common/model/openai-chat-options.js +274 -0
  45. package/esm/common/model/openai-chat-options.js.map +1 -0
  46. package/esm/common/model/openai-embedding-model.d.ts +14 -0
  47. package/esm/common/model/openai-embedding-model.js +69 -0
  48. package/esm/common/model/openai-embedding-model.js.map +1 -0
  49. package/esm/common/model/openai-embedding-options.d.ts +34 -0
  50. package/esm/common/model/openai-embedding-options.js +72 -0
  51. package/esm/common/model/openai-embedding-options.js.map +1 -0
  52. package/esm/common/module.d.ts +3 -0
  53. package/esm/common/module.js +4 -0
  54. package/esm/common/module.js.map +1 -0
  55. package/esm/common/support/index.d.ts +2 -0
  56. package/esm/common/support/index.js +3 -0
  57. package/esm/common/support/index.js.map +1 -0
  58. package/esm/common/support/openai-api-response-headers.d.ts +33 -0
  59. package/esm/common/support/openai-api-response-headers.js +42 -0
  60. package/esm/common/support/openai-api-response-headers.js.map +1 -0
  61. package/esm/common/support/openai-response-header-extractor.d.ts +11 -0
  62. package/esm/common/support/openai-response-header-extractor.js +129 -0
  63. package/esm/common/support/openai-response-header-extractor.js.map +1 -0
  64. package/esm/common/test/mock-openai-api.d.ts +12 -0
  65. package/esm/common/test/mock-openai-api.js +53 -0
  66. package/esm/common/test/mock-openai-api.js.map +1 -0
  67. package/esm/common/test/test-container.d.ts +2 -0
  68. package/esm/common/test/test-container.js +12 -0
  69. package/esm/common/test/test-container.js.map +1 -0
  70. package/esm/package.json +3 -0
  71. package/package.json +46 -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,2 @@
1
+ import '../index.js';
2
+ export declare const createContainer: () => import("inversify").interfaces.Container;
@@ -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"}
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "module"
3
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@celljs/ai-openai",
3
- "version": "3.8.0",
3
+ "version": "3.9.0",
4
4
  "description": "OpenAI models support",
5
5
  "keywords": [
6
6
  "cell-component"
@@ -18,24 +18,64 @@
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": "3.8.0",
32
- "@celljs/core": "3.8.0",
33
- "@celljs/http": "3.8.0",
32
+ "@celljs/ai-core": "3.9.0",
33
+ "@celljs/core": "3.9.0",
34
+ "@celljs/http": "3.9.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
+ "webpack": "./lib/common/index.js",
45
+ "import": "./esm/common/index.js",
46
+ "default": "./lib/common/index.js"
47
+ },
48
+ "./package.json": "./package.json",
49
+ "./lib/common": {
50
+ "webpack": "./lib/common/index.js",
51
+ "import": "./esm/common/index.js",
52
+ "default": "./lib/common/index.js"
53
+ },
54
+ "./lib/common/api": {
55
+ "webpack": "./lib/common/api/index.js",
56
+ "import": "./esm/common/api/index.js",
57
+ "default": "./lib/common/api/index.js"
58
+ },
59
+ "./lib/common/model": {
60
+ "webpack": "./lib/common/model/index.js",
61
+ "import": "./esm/common/model/index.js",
62
+ "default": "./lib/common/model/index.js"
63
+ },
64
+ "./lib/common/support": {
65
+ "webpack": "./lib/common/support/index.js",
66
+ "import": "./esm/common/support/index.js",
67
+ "default": "./lib/common/support/index.js"
68
+ },
69
+ "./lib/*.js": {
70
+ "webpack": "./lib/*.js",
71
+ "import": "./esm/*.js",
72
+ "default": "./lib/*.js"
73
+ },
74
+ "./lib/*": {
75
+ "webpack": "./lib/*.js",
76
+ "import": "./esm/*.js",
77
+ "default": "./lib/*.js"
78
+ },
79
+ "./*": "./*"
40
80
  }
41
81
  }