@difizen/magent-chat
Version:
42 lines (35 loc) • 1.62 kB
text/typescript
import type { ToAutoFactory } from '@difizen/magent-core';
import { toAutoFactory } from '@difizen/magent-core';
import { inject, singleton } from '@difizen/mana-app';
import { AIChatMessageItemModel } from './ai-message-item-model.js';
import type { ChatMessageItemOption } from './chat-message-item-model.js';
import {
DefaultChatMessageItemModel,
HumanChatMessageItemModel,
} from './chat-message-item-model.js';
import type { BaseChatMessageItemModel, IChatMessageItem } from './protocol.js';
import { ChatMessageItemContribution } from './protocol.js';
({ contrib: ChatMessageItemContribution })
export class DefaultChatMessageItemContribution implements ChatMessageItemContribution {
(toAutoFactory(AIChatMessageItemModel))
aiChatMessageItemFactory: ToAutoFactory<typeof AIChatMessageItemModel>;
(toAutoFactory(HumanChatMessageItemModel))
humanChatMessageItemFactory: ToAutoFactory<typeof HumanChatMessageItemModel>;
(toAutoFactory(DefaultChatMessageItemModel))
defaultChatMessageItemFactory: ToAutoFactory<typeof DefaultChatMessageItemModel>;
canHandle = (option: IChatMessageItem) => {
if (DefaultChatMessageItemModel.isOption(option)) {
return 1;
}
return 0;
};
handle = (option: IChatMessageItem): BaseChatMessageItemModel => {
if (DefaultChatMessageItemModel.isOption(option)) {
if (option.sender.type === 'AI') {
return this.aiChatMessageItemFactory(option);
}
return this.humanChatMessageItemFactory(option);
}
return this.defaultChatMessageItemFactory(option as ChatMessageItemOption);
};
}