@celljs/ai-core 3.4.4 → 3.5.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/README.md +26 -1
- package/lib/common/chat/message/message-protocol.d.ts +1 -1
- package/lib/common/chat/message/message-protocol.d.ts.map +1 -1
- package/lib/common/chat/model/index.d.ts +1 -0
- package/lib/common/chat/model/index.d.ts.map +1 -1
- package/lib/common/chat/model/index.js +1 -0
- package/lib/common/chat/model/index.js.map +1 -1
- package/lib/common/chat/model/proxy-chat-model.d.ts +12 -0
- package/lib/common/chat/model/proxy-chat-model.d.ts.map +1 -0
- package/lib/common/chat/model/proxy-chat-model.js +64 -0
- package/lib/common/chat/model/proxy-chat-model.js.map +1 -0
- package/lib/common/chat/prompt/prompt-protocol.d.ts +1 -0
- package/lib/common/chat/prompt/prompt-protocol.d.ts.map +1 -1
- package/lib/common/chat/prompt/prompt-template.d.ts.map +1 -1
- package/lib/common/chat/prompt/prompt-template.js +4 -1
- package/lib/common/chat/prompt/prompt-template.js.map +1 -1
- package/lib/common/model/model-protocol.d.ts +6 -6
- package/lib/common/model/model-protocol.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/common/chat/message/message-protocol.ts +1 -1
- package/src/common/chat/model/index.ts +1 -0
- package/src/common/chat/model/proxy-chat-model.ts +55 -0
- package/src/common/chat/prompt/prompt-protocol.ts +1 -0
- package/src/common/chat/prompt/prompt-template.ts +4 -1
- package/src/common/model/model-protocol.ts +6 -6
package/README.md
CHANGED
|
@@ -44,7 +44,7 @@ yarn add @celljs/ai-ollama
|
|
|
44
44
|
|
|
45
45
|
```typescript
|
|
46
46
|
import { AssistantMessage, PromptTemplate } from '@celljs/ai-core';
|
|
47
|
-
import { Component Autowired } from '@celljs/core';
|
|
47
|
+
import { Component, Autowired } from '@celljs/core';
|
|
48
48
|
|
|
49
49
|
@Component()
|
|
50
50
|
export class OllamaDemo {
|
|
@@ -103,6 +103,31 @@ export class OllamaDemo {
|
|
|
103
103
|
}
|
|
104
104
|
```
|
|
105
105
|
|
|
106
|
+
另外也可以使用 `ProxyChatModel` 类统一调用所有的模型服务商的模型:
|
|
107
|
+
|
|
108
|
+
```typescript
|
|
109
|
+
import { ProxyChatModel } from '@celljs/ai-core';
|
|
110
|
+
import { Component Autowired } from '@celljs/core';
|
|
111
|
+
|
|
112
|
+
@Component()
|
|
113
|
+
export class OllamaDemo {
|
|
114
|
+
@Autowired(ProxyChatModel)
|
|
115
|
+
private chatModel: ChatModel;
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Chat with Ollama
|
|
119
|
+
*/
|
|
120
|
+
async chat() {
|
|
121
|
+
const response = await this.chatModel.call({
|
|
122
|
+
prompt: 'Hello {name}',
|
|
123
|
+
variables: { name: 'Ollama' },
|
|
124
|
+
chatOptions: { model: 'ollama:llama3.2' }
|
|
125
|
+
});
|
|
126
|
+
console.log(response.result.output);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
106
131
|
## 许可证
|
|
107
132
|
|
|
108
133
|
本项目采用 MIT 许可证。
|
|
@@ -59,7 +59,7 @@ export declare enum MessageType {
|
|
|
59
59
|
* @see MessageType
|
|
60
60
|
*/
|
|
61
61
|
export interface Message extends Content {
|
|
62
|
-
|
|
62
|
+
messageType: MessageType;
|
|
63
63
|
}
|
|
64
64
|
export declare namespace Message {
|
|
65
65
|
function isMessage(obj: any): obj is Message;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-protocol.d.ts","sourceRoot":"","sources":["../../../../src/common/chat/message/message-protocol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,WAAW,KAAK;IAElB;;OAEG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,QAAQ,EAAE,QAAQ,CAAC;IAEnB;;OAEG;IACH,IAAI,EAAE,GAAG,CAAC;IAEV;;;;;;;;;;;;;;;;OAgBG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CAEjB;AAED;;;GAGG;AACH,oBAAY,WAAW;IACnB,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,IAAI,SAAS;CAChB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,OAAQ,SAAQ,OAAO;IACpC,
|
|
1
|
+
{"version":3,"file":"message-protocol.d.ts","sourceRoot":"","sources":["../../../../src/common/chat/message/message-protocol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,WAAW,KAAK;IAElB;;OAEG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,QAAQ,EAAE,QAAQ,CAAC;IAEnB;;OAEG;IACH,IAAI,EAAE,GAAG,CAAC;IAEV;;;;;;;;;;;;;;;;OAgBG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CAEjB;AAED;;;GAGG;AACH,oBAAY,WAAW;IACnB,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,IAAI,SAAS;CAChB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,OAAQ,SAAQ,OAAO;IACpC,WAAW,EAAE,WAAW,CAAC;CAC5B;AAED,yBAAiB,OAAO,CAAC;IACrB,SAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,OAAO,CAElD;CACJ;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACrB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/common/chat/model/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/common/chat/model/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/common/chat/model/index.ts"],"names":[],"mappings":";;;AAAA,0DAAgC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/common/chat/model/index.ts"],"names":[],"mappings":";;;AAAA,0DAAgC;AAChC,6DAAmC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ChatModel, ChatResponse } from './chat-protocol';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { Prompt } from '../prompt';
|
|
4
|
+
export declare class ProxyChatModel implements ChatModel {
|
|
5
|
+
protected readonly chatModels: ChatModel[];
|
|
6
|
+
protected readonly chatModelMap: Map<string, ChatModel>;
|
|
7
|
+
protected init(): void;
|
|
8
|
+
protected resolveChatModelAndPrompt(prompt: Prompt): [ChatModel, Prompt];
|
|
9
|
+
call(prompt: Prompt): Promise<ChatResponse>;
|
|
10
|
+
stream(prompt: Prompt): Promise<Observable<ChatResponse>>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=proxy-chat-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy-chat-model.d.ts","sourceRoot":"","sources":["../../../../src/common/chat/model/proxy-chat-model.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,qBACa,cAAe,YAAW,SAAS;IAG5C,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC;IAE3C,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAa;IAGpE,SAAS,CAAC,IAAI;IAYd,SAAS,CAAC,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC;IAkBxE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAK3C,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;CAK5D"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var ProxyChatModel_1;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.ProxyChatModel = void 0;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const core_1 = require("@celljs/core");
|
|
7
|
+
const chat_protocol_1 = require("./chat-protocol");
|
|
8
|
+
let ProxyChatModel = ProxyChatModel_1 = class ProxyChatModel {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.chatModelMap = new Map();
|
|
11
|
+
}
|
|
12
|
+
init() {
|
|
13
|
+
for (const chatModel of this.chatModels) {
|
|
14
|
+
if ('provider' in chatModel) {
|
|
15
|
+
// @ts-ignore
|
|
16
|
+
this.chatModelMap.set(chatModel.provider, chatModel);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
const provider = chatModel.constructor.name.split('ChatModel')[0].toLowerCase();
|
|
20
|
+
this.chatModelMap.set(provider, chatModel);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
resolveChatModelAndPrompt(prompt) {
|
|
25
|
+
const model = prompt.options.model;
|
|
26
|
+
if (!model) {
|
|
27
|
+
throw new core_1.IllegalArgumentError('Model not specified in prompt options.');
|
|
28
|
+
}
|
|
29
|
+
if (!model.includes(':')) {
|
|
30
|
+
throw new core_1.IllegalArgumentError('Invalid model name format. Expected "<provider>:<model-name>".');
|
|
31
|
+
}
|
|
32
|
+
const [provider, ...modelName] = model.split(':');
|
|
33
|
+
const chatModel = this.chatModelMap.get(provider);
|
|
34
|
+
if (!chatModel) {
|
|
35
|
+
throw new core_1.IllegalArgumentError(`Chat model provider "${provider}" not found.`);
|
|
36
|
+
}
|
|
37
|
+
const newPrompt = prompt.copy();
|
|
38
|
+
newPrompt.options.model = modelName.join(':');
|
|
39
|
+
return [chatModel, newPrompt];
|
|
40
|
+
}
|
|
41
|
+
call(prompt) {
|
|
42
|
+
const [chatModel, newPrompt] = this.resolveChatModelAndPrompt(prompt);
|
|
43
|
+
return chatModel.call(newPrompt);
|
|
44
|
+
}
|
|
45
|
+
stream(prompt) {
|
|
46
|
+
const [chatModel, newPrompt] = this.resolveChatModelAndPrompt(prompt);
|
|
47
|
+
return chatModel.stream(newPrompt);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
tslib_1.__decorate([
|
|
51
|
+
(0, core_1.Autowired)(chat_protocol_1.ChatModel),
|
|
52
|
+
tslib_1.__metadata("design:type", Array)
|
|
53
|
+
], ProxyChatModel.prototype, "chatModels", void 0);
|
|
54
|
+
tslib_1.__decorate([
|
|
55
|
+
(0, core_1.PostConstruct)(),
|
|
56
|
+
tslib_1.__metadata("design:type", Function),
|
|
57
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
58
|
+
tslib_1.__metadata("design:returntype", void 0)
|
|
59
|
+
], ProxyChatModel.prototype, "init", null);
|
|
60
|
+
ProxyChatModel = ProxyChatModel_1 = tslib_1.__decorate([
|
|
61
|
+
(0, core_1.Component)(ProxyChatModel_1)
|
|
62
|
+
], ProxyChatModel);
|
|
63
|
+
exports.ProxyChatModel = ProxyChatModel;
|
|
64
|
+
//# sourceMappingURL=proxy-chat-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy-chat-model.js","sourceRoot":"","sources":["../../../../src/common/chat/model/proxy-chat-model.ts"],"names":[],"mappings":";;;;;AAAA,uCAAyF;AACzF,mDAA0D;AAKnD,IAAM,cAAc,sBAApB,MAAM,cAAc;IAApB;QAKgB,iBAAY,GAA2B,IAAI,GAAG,EAAE,CAAC;IA2CxE,CAAC;IAxCa,IAAI;QACV,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;YACrC,IAAI,UAAU,IAAI,SAAS,EAAE;gBACzB,aAAa;gBACb,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,QAAkB,EAAE,SAAS,CAAC,CAAC;aAClE;iBAAM;gBACH,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;gBAChF,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;aAC9C;SACJ;IACL,CAAC;IAES,yBAAyB,CAAC,MAAc;QAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QACnC,IAAI,CAAC,KAAK,EAAE;YACR,MAAM,IAAI,2BAAoB,CAAC,wCAAwC,CAAC,CAAC;SAC5E;QACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACtB,MAAM,IAAI,2BAAoB,CAAC,gEAAgE,CAAC,CAAC;SACpG;QACD,MAAM,CAAC,QAAQ,EAAE,GAAG,SAAS,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,EAAE;YACZ,MAAM,IAAI,2BAAoB,CAAC,wBAAwB,QAAQ,cAAc,CAAC,CAAC;SAClF;QACD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAChC,SAAS,CAAC,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9C,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,CAAC,MAAc;QACf,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;QACtE,OAAO,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,CAAC,MAAc;QACjB,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;QACtE,OAAO,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;CAEJ,CAAA;AA9CG;IAAC,IAAA,gBAAS,EAAC,yBAAS,CAAC;;kDACsB;AAI3C;IAAC,IAAA,oBAAa,GAAE;;;;0CAWf;AAlBQ,cAAc;IAD1B,IAAA,gBAAS,EAAC,gBAAc,CAAC;GACb,cAAc,CAgD1B;AAhDY,wCAAc"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-protocol.d.ts","sourceRoot":"","sources":["../../../../src/common/chat/prompt/prompt-protocol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAEnE,eAAO,MAAM,cAAc,eAA2B,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,YAAY;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,MAAO,SAAQ,YAAY,CAAC,OAAO,EAAE,CAAC;IACnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,IAAI,IAAI,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC3B,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvE,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE,EAAE,GAAG,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACtF"}
|
|
1
|
+
{"version":3,"file":"prompt-protocol.d.ts","sourceRoot":"","sources":["../../../../src/common/chat/prompt/prompt-protocol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAEnE,eAAO,MAAM,cAAc,eAA2B,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,YAAY;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,MAAO,SAAQ,YAAY,CAAC,OAAO,EAAE,CAAC;IACnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,IAAI,IAAI,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC3B,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvE,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE,EAAE,GAAG,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACtF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-template.d.ts","sourceRoot":"","sources":["../../../../src/common/chat/prompt/prompt-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,iBAAiB,EAAwB,MAAM,cAAc,CAAC;AAC7F,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAElF,OAAO,EAAE,OAAO,EAA8B,MAAM,YAAY,CAAC;AAEjE,qBACa,kBAAmB,YAAW,cAAc;IAGrD,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAElD,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC;IAMtE,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE,EAAE,GAAG,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"prompt-template.d.ts","sourceRoot":"","sources":["../../../../src/common/chat/prompt/prompt-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,iBAAiB,EAAwB,MAAM,cAAc,CAAC;AAC7F,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAElF,OAAO,EAAE,OAAO,EAA8B,MAAM,YAAY,CAAC;AAEjE,qBACa,kBAAmB,YAAW,cAAc;IAGrD,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAElD,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC;IAMtE,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE,EAAE,GAAG,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC;CAiB3F"}
|
|
@@ -9,13 +9,16 @@ const message_1 = require("../message");
|
|
|
9
9
|
let PromptTemplateImpl = class PromptTemplateImpl {
|
|
10
10
|
async render(template, ctx) {
|
|
11
11
|
if (ctx === null || ctx === void 0 ? void 0 : ctx.variables) {
|
|
12
|
-
return this.expressionHandler.handle(template, ctx, { ignoreSpecialChar: true, bracketBegin: '{', bracketEnd: '}' });
|
|
12
|
+
return this.expressionHandler.handle(template, ctx.variables, { ignoreSpecialChar: true, bracketBegin: '{', bracketEnd: '}' });
|
|
13
13
|
}
|
|
14
14
|
return template;
|
|
15
15
|
}
|
|
16
16
|
async create(template, ctx) {
|
|
17
17
|
if (Array.isArray(template)
|
|
18
18
|
&& template.some(message => message_1.Message.isMessage(message))) {
|
|
19
|
+
for (const message of template) {
|
|
20
|
+
message.content = await this.render(message.content, ctx);
|
|
21
|
+
}
|
|
19
22
|
return new prompt_1.PromptImpl(template, ctx === null || ctx === void 0 ? void 0 : ctx.chatOptions);
|
|
20
23
|
}
|
|
21
24
|
else if (typeof template === 'string') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-template.js","sourceRoot":"","sources":["../../../../src/common/chat/prompt/prompt-template.ts"],"names":[],"mappings":";;;;AAAA,uCAA6F;AAC7F,uDAAkF;AAClF,qCAAsC;AACtC,wCAAiE;AAG1D,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAK3B,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE,GAA2B;QACtD,IAAI,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,SAAS,EAAE;YAChB,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"prompt-template.js","sourceRoot":"","sources":["../../../../src/common/chat/prompt/prompt-template.ts"],"names":[],"mappings":";;;;AAAA,uCAA6F;AAC7F,uDAAkF;AAClF,qCAAsC;AACtC,wCAAiE;AAG1D,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAK3B,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE,GAA2B;QACtD,IAAI,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,SAAS,EAAE;YAChB,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;SAClI;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,QAA4B,EAAE,GAA2B;QAClE,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;eACpB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,iBAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EACzD;YACE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;gBAC5B,OAAO,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;aAC7D;YACD,OAAO,IAAI,mBAAU,CAAC,QAAQ,EAAE,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,WAAW,CAAC,CAAC;SACrD;aAAM,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;YACrC,IAAI,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,WAAW,CAAA,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,WAAW,MAAK,qBAAW,CAAC,IAAI,EAAE;gBAC5D,OAAO,IAAI,mBAAU,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,WAAW,CAAC,CAAC;aAC7E;iBAAM,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,WAAW,MAAK,qBAAW,CAAC,MAAM,EAAE;gBAChD,OAAO,IAAI,mBAAU,CAAC,IAAI,uBAAa,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,WAAW,CAAC,CAAC;aAChG;SACJ;QACD,MAAM,IAAI,2BAAoB,CAAC,yBAAyB,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,WAAW,EAAE,CAAC,CAAC;IAChF,CAAC;CACJ,CAAA;AA1BG;IAAC,IAAA,gBAAS,EAAC,wBAAiB,CAAC;;6DAC2B;AAH/C,kBAAkB;IAD9B,IAAA,gBAAS,EAAC,gCAAc,CAAC;GACb,kBAAkB,CA4B9B;AA5BY,gDAAkB"}
|
|
@@ -129,17 +129,17 @@ export interface Model<TReq extends ModelRequest<any>, TRes extends ModelRespons
|
|
|
129
129
|
*/
|
|
130
130
|
export interface Content {
|
|
131
131
|
/**
|
|
132
|
-
*
|
|
132
|
+
* The content of the message.
|
|
133
133
|
*/
|
|
134
|
-
|
|
134
|
+
content: string;
|
|
135
135
|
/**
|
|
136
|
-
*
|
|
136
|
+
* The media associated with the content.
|
|
137
137
|
*/
|
|
138
|
-
|
|
138
|
+
media: Media[];
|
|
139
139
|
/**
|
|
140
|
-
*
|
|
140
|
+
* The metadata associated with the content.
|
|
141
141
|
*/
|
|
142
|
-
|
|
142
|
+
metadata: Record<string, any>;
|
|
143
143
|
}
|
|
144
144
|
/**
|
|
145
145
|
* The StreamingModel interface provides a generic API for invoking an AI models
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-protocol.d.ts","sourceRoot":"","sources":["../../../src/common/model/model-protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAElC,eAAO,MAAM,KAAK,eAAkB,CAAC;AACrC,eAAO,MAAM,cAAc,eAA2B,CAAC;AAEvD;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;CAAG;AAEhC;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;CAAG;AAElC;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACvC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC;IAE1B;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAEnB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;CAErC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAE3B;;;OAGG;IACH,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;IAEzB;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;CAElC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,WAAW,CAAC,GAAG,CAAC;IAErD;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAEnB;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;IAEtB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;CAEvC;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,KAAK,CAAC,IAAI,SAAS,YAAY,CAAC,GAAG,CAAC,EAAE,IAAI,SAAS,aAAa,CAAC,GAAG,CAAC;IAElF;;;;OAIG;IACH,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAEtC;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IAEpB;;OAEG;IACH,
|
|
1
|
+
{"version":3,"file":"model-protocol.d.ts","sourceRoot":"","sources":["../../../src/common/model/model-protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAElC,eAAO,MAAM,KAAK,eAAkB,CAAC;AACrC,eAAO,MAAM,cAAc,eAA2B,CAAC;AAEvD;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;CAAG;AAEhC;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;CAAG;AAElC;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACvC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC;IAE1B;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAEnB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;CAErC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAE3B;;;OAGG;IACH,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;IAEzB;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;CAElC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,WAAW,CAAC,GAAG,CAAC;IAErD;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAEnB;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;IAEtB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;CAEvC;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,KAAK,CAAC,IAAI,SAAS,YAAY,CAAC,GAAG,CAAC,EAAE,IAAI,SAAS,aAAa,CAAC,GAAG,CAAC;IAElF;;;;OAIG;IACH,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAEtC;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IAEpB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,KAAK,EAAE,KAAK,EAAE,CAAC;IAEf;;OAEG;IACF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAElC;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,cAAc,CAAC,IAAI,SAAS,YAAY,CAAC,GAAG,CAAC,EAAE,SAAS,SAAS,aAAa,CAAC,GAAG,CAAC;IAEhG;;;;OAIG;IACH,MAAM,CAAC,OAAO,EAAE,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;CAEzD"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@celljs/ai-core",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.5.2",
|
|
4
4
|
"description": "Core domain for AI programming",
|
|
5
5
|
"main": "lib/common/index.js",
|
|
6
6
|
"typings": "lib/common/index.d.ts",
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"@celljs/core": "3.
|
|
9
|
-
"@celljs/http": "3.
|
|
8
|
+
"@celljs/core": "3.5.2",
|
|
9
|
+
"@celljs/http": "3.5.2",
|
|
10
10
|
"rxjs": "^6.6.0",
|
|
11
11
|
"tslib": "^2.8.0"
|
|
12
12
|
},
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"test": "cell-component test:js"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
|
-
"@celljs/component": "3.
|
|
41
|
+
"@celljs/component": "3.5.2"
|
|
42
42
|
},
|
|
43
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "4dc9306d54b4ff068f18e0183426946a4afe2500"
|
|
44
44
|
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Autowired, Component, IllegalArgumentError, PostConstruct } from '@celljs/core';
|
|
2
|
+
import { ChatModel, ChatResponse } from './chat-protocol';
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
4
|
+
import { Prompt } from '../prompt';
|
|
5
|
+
|
|
6
|
+
@Component(ProxyChatModel)
|
|
7
|
+
export class ProxyChatModel implements ChatModel {
|
|
8
|
+
|
|
9
|
+
@Autowired(ChatModel)
|
|
10
|
+
protected readonly chatModels: ChatModel[];
|
|
11
|
+
|
|
12
|
+
protected readonly chatModelMap: Map<string, ChatModel> = new Map();
|
|
13
|
+
|
|
14
|
+
@PostConstruct()
|
|
15
|
+
protected init() {
|
|
16
|
+
for (const chatModel of this.chatModels) {
|
|
17
|
+
if ('provider' in chatModel) {
|
|
18
|
+
// @ts-ignore
|
|
19
|
+
this.chatModelMap.set(chatModel.provider as string, chatModel);
|
|
20
|
+
} else {
|
|
21
|
+
const provider = chatModel.constructor.name.split('ChatModel')[0].toLowerCase();
|
|
22
|
+
this.chatModelMap.set(provider, chatModel);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
protected resolveChatModelAndPrompt(prompt: Prompt): [ChatModel, Prompt] {
|
|
28
|
+
const model = prompt.options.model;
|
|
29
|
+
if (!model) {
|
|
30
|
+
throw new IllegalArgumentError('Model not specified in prompt options.');
|
|
31
|
+
}
|
|
32
|
+
if (!model.includes(':')) {
|
|
33
|
+
throw new IllegalArgumentError('Invalid model name format. Expected "<provider>:<model-name>".');
|
|
34
|
+
}
|
|
35
|
+
const [provider, ...modelName] = model.split(':');
|
|
36
|
+
const chatModel = this.chatModelMap.get(provider);
|
|
37
|
+
if (!chatModel) {
|
|
38
|
+
throw new IllegalArgumentError(`Chat model provider "${provider}" not found.`);
|
|
39
|
+
}
|
|
40
|
+
const newPrompt = prompt.copy();
|
|
41
|
+
newPrompt.options.model = modelName.join(':');
|
|
42
|
+
return [chatModel, newPrompt];
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
call(prompt: Prompt): Promise<ChatResponse> {
|
|
46
|
+
const [chatModel, newPrompt] = this.resolveChatModelAndPrompt(prompt);
|
|
47
|
+
return chatModel.call(newPrompt);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
stream(prompt: Prompt): Promise<Observable<ChatResponse>> {
|
|
51
|
+
const [chatModel, newPrompt] = this.resolveChatModelAndPrompt(prompt);
|
|
52
|
+
return chatModel.stream(newPrompt);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
}
|
|
@@ -11,7 +11,7 @@ export class PromptTemplateImpl implements PromptTemplate {
|
|
|
11
11
|
|
|
12
12
|
async render(template: string, ctx?: PromptTemplateContext): Promise<string> {
|
|
13
13
|
if (ctx?.variables) {
|
|
14
|
-
return this.expressionHandler.handle(template, ctx, { ignoreSpecialChar: true, bracketBegin: '{', bracketEnd: '}' });
|
|
14
|
+
return this.expressionHandler.handle(template, ctx.variables, { ignoreSpecialChar: true, bracketBegin: '{', bracketEnd: '}' });
|
|
15
15
|
}
|
|
16
16
|
return template;
|
|
17
17
|
}
|
|
@@ -19,6 +19,9 @@ export class PromptTemplateImpl implements PromptTemplate {
|
|
|
19
19
|
if (Array.isArray(template)
|
|
20
20
|
&& template.some(message => Message.isMessage(message))
|
|
21
21
|
) {
|
|
22
|
+
for (const message of template) {
|
|
23
|
+
message.content = await this.render(message.content, ctx);
|
|
24
|
+
}
|
|
22
25
|
return new PromptImpl(template, ctx?.chatOptions);
|
|
23
26
|
} else if (typeof template === 'string') {
|
|
24
27
|
if (!ctx?.messageType || ctx?.messageType === MessageType.USER) {
|
|
@@ -150,19 +150,19 @@ export interface Model<TReq extends ModelRequest<any>, TRes extends ModelRespons
|
|
|
150
150
|
export interface Content {
|
|
151
151
|
|
|
152
152
|
/**
|
|
153
|
-
*
|
|
153
|
+
* The content of the message.
|
|
154
154
|
*/
|
|
155
|
-
|
|
155
|
+
content: string; // TODO consider getText
|
|
156
156
|
|
|
157
157
|
/**
|
|
158
|
-
*
|
|
158
|
+
* The media associated with the content.
|
|
159
159
|
*/
|
|
160
|
-
|
|
160
|
+
media: Media[];
|
|
161
161
|
|
|
162
162
|
/**
|
|
163
|
-
*
|
|
163
|
+
* The metadata associated with the content.
|
|
164
164
|
*/
|
|
165
|
-
|
|
165
|
+
metadata: Record<string, any>;
|
|
166
166
|
|
|
167
167
|
}
|
|
168
168
|
|