@servicetitan/titan-chatbot-api 7.1.2 → 9.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/CHANGELOG.md +25 -0
- package/dist/api-client/__mocks__/chatbot-api-client.mock.d.ts +1 -0
- package/dist/api-client/__mocks__/chatbot-api-client.mock.d.ts.map +1 -1
- package/dist/api-client/__mocks__/chatbot-api-client.mock.js +22 -47
- package/dist/api-client/__mocks__/chatbot-api-client.mock.js.map +1 -1
- package/dist/api-client/base/chatbot-api-client.d.ts +7 -0
- package/dist/api-client/base/chatbot-api-client.d.ts.map +1 -1
- package/dist/api-client/base/chatbot-api-client.js +3 -4
- package/dist/api-client/base/chatbot-api-client.js.map +1 -1
- package/dist/api-client/index.d.ts +2 -2
- package/dist/api-client/index.d.ts.map +1 -1
- package/dist/api-client/index.js +12 -7
- package/dist/api-client/index.js.map +1 -1
- package/dist/api-client/models/__mocks__/models.mock.js +154 -124
- package/dist/api-client/models/__mocks__/models.mock.js.map +1 -1
- package/dist/api-client/models/index.d.ts +2 -1
- package/dist/api-client/models/index.d.ts.map +1 -1
- package/dist/api-client/models/index.js +8 -7
- package/dist/api-client/models/index.js.map +1 -1
- package/dist/api-client/titan-chat/__tests__/chatbot-api-client-stream.test.d.ts +2 -0
- package/dist/api-client/titan-chat/__tests__/chatbot-api-client-stream.test.d.ts.map +1 -0
- package/dist/api-client/titan-chat/__tests__/chatbot-api-client-stream.test.js +240 -0
- package/dist/api-client/titan-chat/__tests__/chatbot-api-client-stream.test.js.map +1 -0
- package/dist/api-client/titan-chat/__tests__/native-client.test.js +6 -6
- package/dist/api-client/titan-chat/__tests__/native-client.test.js.map +1 -1
- package/dist/api-client/titan-chat/chatbot-api-client.d.ts +11 -0
- package/dist/api-client/titan-chat/chatbot-api-client.d.ts.map +1 -1
- package/dist/api-client/titan-chat/chatbot-api-client.js +69 -35
- package/dist/api-client/titan-chat/chatbot-api-client.js.map +1 -1
- package/dist/api-client/titan-chat/index.d.ts +2 -1
- package/dist/api-client/titan-chat/index.d.ts.map +1 -1
- package/dist/api-client/titan-chat/index.js +1 -0
- package/dist/api-client/titan-chat/index.js.map +1 -1
- package/dist/api-client/titan-chat/native-client.js +359 -812
- package/dist/api-client/titan-chat/native-client.js.map +1 -1
- package/dist/api-client/utils/__tests__/model-utils.test.js +454 -191
- package/dist/api-client/utils/__tests__/model-utils.test.js.map +1 -1
- package/dist/api-client/utils/model-utils.d.ts.map +1 -1
- package/dist/api-client/utils/model-utils.js +28 -25
- package/dist/api-client/utils/model-utils.js.map +1 -1
- package/dist/hooks/use-customization-chatbot.js +2 -1
- package/dist/hooks/use-customization-chatbot.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -5
- package/dist/index.js.map +1 -1
- package/dist/models/__tests__/chatbot-customizations.test.d.ts +2 -0
- package/dist/models/__tests__/chatbot-customizations.test.d.ts.map +1 -0
- package/dist/models/__tests__/chatbot-customizations.test.js +36 -0
- package/dist/models/__tests__/chatbot-customizations.test.js.map +1 -0
- package/dist/models/chatbot-customizations.d.ts +17 -0
- package/dist/models/chatbot-customizations.d.ts.map +1 -1
- package/dist/models/chatbot-customizations.js +7 -1
- package/dist/models/chatbot-customizations.js.map +1 -1
- package/dist/models/index.js +1 -0
- package/dist/models/index.js.map +1 -1
- package/dist/stores/__tests__/chatbot-ui-backend.store.observability.test.d.ts +2 -0
- package/dist/stores/__tests__/chatbot-ui-backend.store.observability.test.d.ts.map +1 -0
- package/dist/stores/__tests__/chatbot-ui-backend.store.observability.test.js +107 -0
- package/dist/stores/__tests__/chatbot-ui-backend.store.observability.test.js.map +1 -0
- package/dist/stores/__tests__/chatbot-ui-backend.store.streaming.test.d.ts +2 -0
- package/dist/stores/__tests__/chatbot-ui-backend.store.streaming.test.d.ts.map +1 -0
- package/dist/stores/__tests__/chatbot-ui-backend.store.streaming.test.js +312 -0
- package/dist/stores/__tests__/chatbot-ui-backend.store.streaming.test.js.map +1 -0
- package/dist/stores/__tests__/chatbot-ui-backend.store.test.js +267 -172
- package/dist/stores/__tests__/chatbot-ui-backend.store.test.js.map +1 -1
- package/dist/stores/__tests__/chatbot-ui.store.test.js +61 -64
- package/dist/stores/__tests__/chatbot-ui.store.test.js.map +1 -1
- package/dist/stores/__tests__/filter.store.test.js +243 -116
- package/dist/stores/__tests__/filter.store.test.js.map +1 -1
- package/dist/stores/__tests__/initialize.store.test.js +9 -8
- package/dist/stores/__tests__/initialize.store.test.js.map +1 -1
- package/dist/stores/__tests__/message-feedback-guardrail.store.test.js +8 -7
- package/dist/stores/__tests__/message-feedback-guardrail.store.test.js.map +1 -1
- package/dist/stores/__tests__/message-feedback.store.test.js +34 -27
- package/dist/stores/__tests__/message-feedback.store.test.js.map +1 -1
- package/dist/stores/__tests__/session-feedback.store.test.js +9 -8
- package/dist/stores/__tests__/session-feedback.store.test.js.map +1 -1
- package/dist/stores/chatbot-ui-backend.store.d.ts +26 -2
- package/dist/stores/chatbot-ui-backend.store.d.ts.map +1 -1
- package/dist/stores/chatbot-ui-backend.store.js +295 -239
- package/dist/stores/chatbot-ui-backend.store.js.map +1 -1
- package/dist/stores/chatbot-ui.store.js +73 -46
- package/dist/stores/chatbot-ui.store.js.map +1 -1
- package/dist/stores/filter.store.js +298 -378
- package/dist/stores/filter.store.js.map +1 -1
- package/dist/stores/index.d.ts +5 -3
- package/dist/stores/index.d.ts.map +1 -1
- package/dist/stores/index.js +3 -2
- package/dist/stores/index.js.map +1 -1
- package/dist/stores/initialize.store.js +55 -51
- package/dist/stores/initialize.store.js.map +1 -1
- package/dist/stores/message-feedback-base.store.js +2 -1
- package/dist/stores/message-feedback-base.store.js.map +1 -1
- package/dist/stores/message-feedback-guardrail.store.js +50 -47
- package/dist/stores/message-feedback-guardrail.store.js.map +1 -1
- package/dist/stores/message-feedback.store.js +84 -89
- package/dist/stores/message-feedback.store.js.map +1 -1
- package/dist/stores/session-feedback.store.js +46 -39
- package/dist/stores/session-feedback.store.js.map +1 -1
- package/dist/streaming/__tests__/agent-stream.test.d.ts +2 -0
- package/dist/streaming/__tests__/agent-stream.test.d.ts.map +1 -0
- package/dist/streaming/__tests__/agent-stream.test.js +92 -0
- package/dist/streaming/__tests__/agent-stream.test.js.map +1 -0
- package/dist/streaming/agent-stream.d.ts +83 -0
- package/dist/streaming/agent-stream.d.ts.map +1 -0
- package/dist/streaming/agent-stream.js +28 -0
- package/dist/streaming/agent-stream.js.map +1 -0
- package/dist/streaming/index.d.ts +3 -0
- package/dist/streaming/index.d.ts.map +1 -0
- package/dist/streaming/index.js +4 -0
- package/dist/streaming/index.js.map +1 -0
- package/dist/streaming/run-agent-stream.d.ts +23 -0
- package/dist/streaming/run-agent-stream.d.ts.map +1 -0
- package/dist/streaming/run-agent-stream.js +83 -0
- package/dist/streaming/run-agent-stream.js.map +1 -0
- package/dist/utils/__tests__/axios-utils.test.js +8 -7
- package/dist/utils/__tests__/axios-utils.test.js.map +1 -1
- package/dist/utils/axios-utils.js +9 -7
- package/dist/utils/axios-utils.js.map +1 -1
- package/dist/utils/test-utils.js +5 -5
- package/dist/utils/test-utils.js.map +1 -1
- package/package.json +6 -3
- package/src/api-client/__mocks__/chatbot-api-client.mock.ts +1 -0
- package/src/api-client/base/chatbot-api-client.ts +11 -0
- package/src/api-client/index.ts +2 -7
- package/src/api-client/models/index.ts +15 -13
- package/src/api-client/titan-chat/__tests__/chatbot-api-client-stream.test.ts +208 -0
- package/src/api-client/titan-chat/chatbot-api-client.ts +46 -0
- package/src/api-client/titan-chat/index.ts +2 -1
- package/src/api-client/utils/model-utils.ts +4 -8
- package/src/index.ts +7 -2
- package/src/models/__tests__/chatbot-customizations.test.ts +26 -0
- package/src/models/chatbot-customizations.ts +20 -0
- package/src/stores/__tests__/chatbot-ui-backend.store.observability.test.ts +105 -0
- package/src/stores/__tests__/chatbot-ui-backend.store.streaming.test.ts +261 -0
- package/src/stores/chatbot-ui-backend.store.ts +179 -4
- package/src/stores/index.ts +5 -12
- package/src/streaming/__tests__/agent-stream.test.ts +80 -0
- package/src/streaming/agent-stream.ts +103 -0
- package/src/streaming/index.ts +2 -0
- package/src/streaming/run-agent-stream.ts +109 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/api-client/help-center/__tests__/converter-from-models.test.d.ts +0 -2
- package/dist/api-client/help-center/__tests__/converter-from-models.test.d.ts.map +0 -1
- package/dist/api-client/help-center/__tests__/converter-from-models.test.js +0 -34
- package/dist/api-client/help-center/__tests__/converter-from-models.test.js.map +0 -1
- package/dist/api-client/help-center/__tests__/converter-to-models.test.d.ts +0 -2
- package/dist/api-client/help-center/__tests__/converter-to-models.test.d.ts.map +0 -1
- package/dist/api-client/help-center/__tests__/converter-to-models.test.js +0 -82
- package/dist/api-client/help-center/__tests__/converter-to-models.test.js.map +0 -1
- package/dist/api-client/help-center/chatbot-api-client.d.ts +0 -32
- package/dist/api-client/help-center/chatbot-api-client.d.ts.map +0 -1
- package/dist/api-client/help-center/chatbot-api-client.js +0 -102
- package/dist/api-client/help-center/chatbot-api-client.js.map +0 -1
- package/dist/api-client/help-center/converter-from-models.d.ts +0 -13
- package/dist/api-client/help-center/converter-from-models.d.ts.map +0 -1
- package/dist/api-client/help-center/converter-from-models.js +0 -114
- package/dist/api-client/help-center/converter-from-models.js.map +0 -1
- package/dist/api-client/help-center/converter-to-models.d.ts +0 -13
- package/dist/api-client/help-center/converter-to-models.d.ts.map +0 -1
- package/dist/api-client/help-center/converter-to-models.js +0 -98
- package/dist/api-client/help-center/converter-to-models.js.map +0 -1
- package/dist/api-client/help-center/index.d.ts +0 -2
- package/dist/api-client/help-center/index.d.ts.map +0 -1
- package/dist/api-client/help-center/index.js +0 -2
- package/dist/api-client/help-center/index.js.map +0 -1
- package/dist/api-client/help-center/native-client.d.ts +0 -1268
- package/dist/api-client/help-center/native-client.d.ts.map +0 -1
- package/dist/api-client/help-center/native-client.js +0 -6242
- package/dist/api-client/help-center/native-client.js.map +0 -1
- package/src/api-client/help-center/__tests__/converter-from-models.test.ts +0 -41
- package/src/api-client/help-center/__tests__/converter-to-models.test.ts +0 -89
- package/src/api-client/help-center/chatbot-api-client.ts +0 -122
- package/src/api-client/help-center/converter-from-models.ts +0 -133
- package/src/api-client/help-center/converter-to-models.ts +0 -127
- package/src/api-client/help-center/index.ts +0 -1
- package/src/api-client/help-center/native-client.ts +0 -5727
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.mock.js","sourceRoot":"","sources":["../../../../src/api-client/models/__mocks__/models.mock.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/api-client/models/__mocks__/models.mock.ts"],"sourcesContent":["import {\n ChatMessageModelBase,\n ChatMessageState,\n ChatParticipantIcon,\n} from '@servicetitan/titan-chat-ui-common';\nimport { Models, ModelsUtils } from '../..';\n\nexport const mockOption = (overrides?: Models.IOption) =>\n new Models.Option({\n key: 'mock_key',\n displayName: 'Mock Option',\n type: Models.OptionType.Group,\n ...overrides,\n });\n\nconst mockOptionSimple = (\n key: string,\n displayName: string | undefined,\n type: Models.OptionType,\n subOptions?: Models.Option[]\n) =>\n mockOption({\n key,\n displayName,\n type,\n subOptions,\n });\n\nexport const mockFrontendModelEmpty = (): Models.FrontendModel => {\n return new Models.FrontendModel({\n options: mockOption({\n key: 'empty',\n displayName: undefined,\n type: Models.OptionType.Group,\n subOptions: [],\n }),\n });\n};\n\nexport const mockFrontendModelLarge = (): Models.FrontendModel => {\n const subOptions = [];\n for (let i = 1; i <= 50; i++) {\n subOptions.push(\n mockOptionSimple(`Option${i}`, `Option ${i}`, Models.OptionType.Selectable)\n );\n }\n const largeGroup = mockOptionSimple(\n 'LargeGroup',\n 'Large Group',\n Models.OptionType.Group,\n subOptions\n );\n return new Models.FrontendModel({\n options: mockOptionSimple('Root', undefined, Models.OptionType.Group, [largeGroup]),\n });\n};\n\nexport const mockFrontendModelFlat = (): Models.FrontendModel => {\n const sources = mockOptionSimple('Sources', 'Sources', Models.OptionType.Group, [\n mockOptionSimple('KnowledgeBase', 'Knowledge Base', Models.OptionType.Selectable, []),\n mockOptionSimple('Jarvis', 'Jarvis', Models.OptionType.Selectable, []),\n ]);\n const contentTypes = mockOptionSimple(\n 'ContentTypes',\n 'Content Types',\n Models.OptionType.Group,\n [\n mockOptionSimple('kbReleaseNotes', 'Release Notes', Models.OptionType.Selectable),\n mockOptionSimple('kbFaq', 'FAQ', Models.OptionType.Selectable),\n mockOptionSimple('kbHowTo', 'How To', Models.OptionType.Selectable),\n mockOptionSimple('xxx', 'Xxx', Models.OptionType.Selectable),\n mockOptionSimple('yyy', 'Yyy', Models.OptionType.Selectable),\n ]\n );\n const productAreas = mockOptionSimple(\n 'ProductAreas',\n 'Product Areas',\n Models.OptionType.Group,\n [\n mockOptionSimple('Call Booking', 'Call Booking', Models.OptionType.Selectable),\n mockOptionSimple('Marketing', 'Marketing', Models.OptionType.Selectable),\n mockOptionSimple('Marketing Pro', 'Marketing Pro', Models.OptionType.Selectable),\n ]\n );\n return new Models.FrontendModel({\n options: mockOptionSimple('customer-knowledge', undefined, Models.OptionType.Group, [\n sources,\n contentTypes,\n productAreas,\n ]),\n });\n};\n\nexport const mockFrontendModelMixed = (): Models.FrontendModel => {\n const sources = mockOptionSimple('Sources', 'Sources', Models.OptionType.Group, [\n mockOptionSimple('KnowledgeBase', 'Knowledge Base', Models.OptionType.Selectable, [\n mockOptionSimple('ContentTypes', 'Content Types', Models.OptionType.Group, [\n mockOptionSimple('kbReleaseNotes', 'Release Notes', Models.OptionType.Selectable),\n mockOptionSimple('kbFaq', 'FAQ', Models.OptionType.Selectable),\n mockOptionSimple('kbHowTo', 'How To', Models.OptionType.Selectable),\n ]),\n mockOptionSimple('ProductAreas', 'Product Areas', Models.OptionType.Group, [\n mockOptionSimple('Call Booking', 'Call Booking', Models.OptionType.Selectable),\n mockOptionSimple('Marketing', 'Marketing', Models.OptionType.Selectable),\n mockOptionSimple('Marketing Pro', 'Marketing Pro', Models.OptionType.Selectable),\n ]),\n ]),\n mockOptionSimple('Jarvis', 'Jarvis', Models.OptionType.Selectable),\n ]);\n return new Models.FrontendModel({\n options: mockOptionSimple('customer-knowledge', undefined, Models.OptionType.Group, [\n sources,\n ]),\n });\n};\n\nexport const mockFrontendModel = (): Models.FrontendModel => {\n const sources = mockOptionSimple('Sources', 'Sources', Models.OptionType.Group, [\n mockOptionSimple('KnowledgeBase', 'Knowledge Base', Models.OptionType.Selectable, [\n mockOptionSimple('ContentTypes', 'Content Types', Models.OptionType.Group, [\n mockOptionSimple('kbReleaseNotes', 'Release Notes', Models.OptionType.Selectable),\n mockOptionSimple('kbFaq', 'FAQ', Models.OptionType.Selectable),\n mockOptionSimple('kbHowTo', 'How To', Models.OptionType.Selectable),\n ]),\n mockOptionSimple('ProductAreas', 'Product Areas', Models.OptionType.Group, [\n mockOptionSimple('Call Booking', 'Call Booking', Models.OptionType.Selectable),\n mockOptionSimple('Marketing', 'Marketing', Models.OptionType.Selectable),\n mockOptionSimple('Marketing Pro', 'Marketing Pro', Models.OptionType.Selectable),\n ]),\n ]),\n mockOptionSimple('Jarvis', 'Jarvis', Models.OptionType.Selectable, [\n mockOptionSimple('ContentTypes', 'Content Types', Models.OptionType.Group, [\n mockOptionSimple('kbReleaseNotes', 'Release Notes', Models.OptionType.Selectable),\n mockOptionSimple('xxx', 'Xxx', Models.OptionType.Selectable),\n mockOptionSimple('yyy', 'Yyy', Models.OptionType.Selectable),\n ]),\n ]),\n ]);\n return new Models.FrontendModel({\n options: mockOptionSimple('customer-knowledge', undefined, Models.OptionType.Group, [\n sources,\n ]),\n });\n};\n\nexport const mockSession = (overrides?: Partial<Models.ISession>): Models.Session =>\n new Models.Session({\n id: 1,\n data: {\n createdUtc: new Date('2021-01-01T00:00:00Z').toISOString(),\n closedUtc: new Date('2021-01-02T00:00:00Z').toISOString(),\n botId: 'bot-id',\n instance: 'instance',\n category: 'category',\n subCategory: 'sub-category',\n },\n ...overrides,\n });\n\nexport const mockFeedback = (overrides?: Partial<Models.IFeedback>): Models.Feedback =>\n new Models.Feedback({\n linkUrl: 'https://example.com',\n sessionId: 1,\n messageId: 1,\n rating: Models.FeedbackRatings.ThumbsUp,\n description: 'description',\n options: undefined,\n ...overrides,\n });\n\nexport const mockSelections = (overrides?: Models.Selections): Models.Selections | undefined => {\n return new Models.Selections({\n ...ModelsUtils.createSelectionsModel(\n [mockFrontendModel().options],\n new Map<string, string[]>([\n ['Sources', ['KnowledgeBase', 'Jarvis']],\n ['ContentTypes', ['kbReleaseNotes', 'kbFaq', 'xxx']],\n ])\n ),\n ...overrides,\n });\n};\n\nexport const mockUserMessage = (overrides?: Partial<Models.IUserMessage>): Models.UserMessage =>\n new Models.UserMessage({\n sessionId: 1,\n question: 'question',\n experience: Models.Experience.MultiTurn,\n selections: mockSelections(),\n context: {\n key1: 'value1',\n key2: 'value2',\n },\n ...overrides,\n });\n\nexport const mockScoredUrl = (overrides?: Partial<Models.IScoredUrl>): Models.ScoredUrl =>\n new Models.ScoredUrl({\n url: 'https://example.com',\n score: 0.9,\n title: 'Example Title',\n ...overrides,\n });\n\nexport const mockScoredUrls = (): Models.ScoredUrl[] => [\n mockScoredUrl({ url: 'https://example1.com', score: 0.95, title: 'Example 1' }),\n mockScoredUrl({ url: 'https://example2.com', score: 0.85, title: 'Example 2' }),\n];\n\nexport const mockBotMessage = (overrides?: Partial<Models.IBotMessage>): Models.BotMessage =>\n new Models.BotMessage({\n id: 1,\n answer: 'answer',\n sessionId: 1,\n isGuardrailed: false,\n scoredUrls: undefined,\n guardFlag: 'N',\n ...overrides,\n });\n\nexport const mockChatMessageModel = <T extends ChatMessageModelBase>(overrides?: Partial<T>): T => {\n const result = {\n id: '1',\n timestamp: new Date('2021-01-01T00:00:00Z'),\n state: ChatMessageState.Delivered,\n participant: {\n isAgent: true,\n name: 'Agent Name',\n icon: ChatParticipantIcon.Initials,\n },\n type: 'message',\n ...overrides,\n };\n return result as T;\n};\n\nexport const mockAgentOption = (overrides?: Partial<Models.IAgentOption>): Models.AgentOption =>\n new Models.AgentOption({\n agentId: 'agentId',\n caption: 'Caption',\n passPhrase: 'Pass Phrase',\n ...overrides,\n });\n\nexport const mockUserInput = (overrides?: Partial<Models.IUserInput>): Models.UserInput =>\n new Models.UserInput({\n label: 'Label',\n value: 'Value',\n ...overrides,\n });\n\nexport const mockWorkflowStep = (overrides?: Partial<Models.IWorkflowStep>): Models.WorkflowStep =>\n new Models.WorkflowStep({\n number: 1,\n description: 'Step description',\n pageUrl: 'https://example.com',\n ...overrides,\n });\n\nexport const mockWorkflowPlan = (overrides?: Partial<Models.IWorkflowPlan>): Models.WorkflowPlan =>\n new Models.WorkflowPlan({\n displayName: 'Workflow Display Name',\n estimatedRuntimeSec: 60,\n inputs: [mockUserInput()],\n steps: [mockWorkflowStep()],\n ...overrides,\n });\n"],"names":["ChatMessageState","ChatParticipantIcon","Models","ModelsUtils","mockOption","overrides","Option","key","displayName","type","OptionType","Group","mockOptionSimple","subOptions","mockFrontendModelEmpty","FrontendModel","options","undefined","mockFrontendModelLarge","i","push","Selectable","largeGroup","mockFrontendModelFlat","sources","contentTypes","productAreas","mockFrontendModelMixed","mockFrontendModel","mockSession","Session","id","data","createdUtc","Date","toISOString","closedUtc","botId","instance","category","subCategory","mockFeedback","Feedback","linkUrl","sessionId","messageId","rating","FeedbackRatings","ThumbsUp","description","mockSelections","Selections","createSelectionsModel","Map","mockUserMessage","UserMessage","question","experience","Experience","MultiTurn","selections","context","key1","key2","mockScoredUrl","ScoredUrl","url","score","title","mockScoredUrls","mockBotMessage","BotMessage","answer","isGuardrailed","scoredUrls","guardFlag","mockChatMessageModel","result","timestamp","state","Delivered","participant","isAgent","name","icon","Initials","mockAgentOption","AgentOption","agentId","caption","passPhrase","mockUserInput","UserInput","label","value","mockWorkflowStep","WorkflowStep","number","pageUrl","mockWorkflowPlan","WorkflowPlan","estimatedRuntimeSec","inputs","steps"],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { IBotMessage, IFeedback, IUserMessage } from '../titan-chat/native-client';
|
|
2
|
-
export { IUserMessage,
|
|
2
|
+
export type { IUserMessage, IFeedback, IFrontendModel, IOption, IScoredUrl, ISelections, ISession, IBotMessage, IExportHistoryMessage, IAgentOption, IWorkflowPlan, IWorkflowStep, IUserInput, } from '../titan-chat/native-client';
|
|
3
|
+
export { Selections, FeedbackOptions, FeedbackRatings, Session, ApiException, Feedback, Option, FrontendModel, UserMessage, OptionType, ScoredUrl, Experience, BotMessage, ExportHistoryMessage, AgentOption, WorkflowPlan, WorkflowStep, UserInput, } from '../titan-chat/native-client';
|
|
3
4
|
export interface IBotMessageWithFeedback extends IBotMessage {
|
|
4
5
|
isFeedbackSaved?: boolean;
|
|
5
6
|
feedback?: IFeedback;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api-client/models/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AACnF,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api-client/models/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AACnF,YAAY,EACR,YAAY,EACZ,SAAS,EACT,cAAc,EACd,OAAO,EACP,UAAU,EACV,WAAW,EACX,QAAQ,EACR,WAAW,EACX,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,UAAU,GACb,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACH,UAAU,EACV,eAAe,EACf,eAAe,EACf,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,aAAa,EACb,WAAW,EACX,UAAU,EACV,SAAS,EACT,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,SAAS,GACZ,MAAM,6BAA6B,CAAC;AAErC,MAAM,WAAW,uBAAwB,SAAQ,WAAW;IACxD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAChC,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,WAAW,CAAC;CACvB;AAED,oBAAY,OAAO;IACf,WAAW,gBAAgB;IAC3B,MAAM,WAAW;IACjB,YAAY,iBAAiB;CAChC;AAED,oBAAY,oBAAoB;IAC5B,IAAI,IAAA;IACJ,IAAI,IAAA;IACJ,OAAO,IAAA;IACP,OAAO,IAAA;CACV"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
export { Selections, FeedbackOptions, FeedbackRatings, Session, ApiException, Feedback, Option, FrontendModel, UserMessage, OptionType, ScoredUrl, Experience, BotMessage, ExportHistoryMessage, AgentOption, WorkflowPlan, WorkflowStep, UserInput
|
|
2
|
-
export var BotArea
|
|
3
|
-
(function (BotArea) {
|
|
1
|
+
/* eslint-disable no-restricted-imports */ export { Selections, FeedbackOptions, FeedbackRatings, Session, ApiException, Feedback, Option, FrontendModel, UserMessage, OptionType, ScoredUrl, Experience, BotMessage, ExportHistoryMessage, AgentOption, WorkflowPlan, WorkflowStep, UserInput } from '../titan-chat/native-client';
|
|
2
|
+
export var BotArea = /*#__PURE__*/ function(BotArea) {
|
|
4
3
|
BotArea["SupportFlow"] = "SupportFlow";
|
|
5
4
|
BotArea["Search"] = "Search";
|
|
6
5
|
BotArea["FloatingChat"] = "FloatingChat";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
return BotArea;
|
|
7
|
+
}({});
|
|
8
|
+
export var ChatbotFeedbackState = /*#__PURE__*/ function(ChatbotFeedbackState) {
|
|
10
9
|
ChatbotFeedbackState[ChatbotFeedbackState["None"] = 0] = "None";
|
|
11
10
|
ChatbotFeedbackState[ChatbotFeedbackState["Sent"] = 1] = "Sent";
|
|
12
11
|
ChatbotFeedbackState[ChatbotFeedbackState["Success"] = 2] = "Success";
|
|
13
12
|
ChatbotFeedbackState[ChatbotFeedbackState["Failure"] = 3] = "Failure";
|
|
14
|
-
|
|
13
|
+
return ChatbotFeedbackState;
|
|
14
|
+
}({});
|
|
15
|
+
|
|
15
16
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../src/api-client/models/index.ts"],"sourcesContent":["/* eslint-disable no-restricted-imports */\nimport { IBotMessage, IFeedback, IUserMessage } from '../titan-chat/native-client';\nexport type {\n IUserMessage,\n IFeedback,\n IFrontendModel,\n IOption,\n IScoredUrl,\n ISelections,\n ISession,\n IBotMessage,\n IExportHistoryMessage,\n IAgentOption,\n IWorkflowPlan,\n IWorkflowStep,\n IUserInput,\n} from '../titan-chat/native-client';\nexport {\n Selections,\n FeedbackOptions,\n FeedbackRatings,\n Session,\n ApiException,\n Feedback,\n Option,\n FrontendModel,\n UserMessage,\n OptionType,\n ScoredUrl,\n Experience,\n BotMessage,\n ExportHistoryMessage,\n AgentOption,\n WorkflowPlan,\n WorkflowStep,\n UserInput,\n} from '../titan-chat/native-client';\n\nexport interface IBotMessageWithFeedback extends IBotMessage {\n isFeedbackSaved?: boolean;\n feedback?: IFeedback;\n}\n\nexport interface ChatbotAskBotResult {\n question: IUserMessage;\n answer: IBotMessage;\n}\n\nexport enum BotArea {\n SupportFlow = 'SupportFlow',\n Search = 'Search',\n FloatingChat = 'FloatingChat',\n}\n\nexport enum ChatbotFeedbackState {\n None,\n Sent,\n Success,\n Failure,\n}\n"],"names":["Selections","FeedbackOptions","FeedbackRatings","Session","ApiException","Feedback","Option","FrontendModel","UserMessage","OptionType","ScoredUrl","Experience","BotMessage","ExportHistoryMessage","AgentOption","WorkflowPlan","WorkflowStep","UserInput","BotArea","ChatbotFeedbackState"],"mappings":"AAAA,wCAAwC,GAiBxC,SACIA,UAAU,EACVC,eAAe,EACfC,eAAe,EACfC,OAAO,EACPC,YAAY,EACZC,QAAQ,EACRC,MAAM,EACNC,aAAa,EACbC,WAAW,EACXC,UAAU,EACVC,SAAS,EACTC,UAAU,EACVC,UAAU,EACVC,oBAAoB,EACpBC,WAAW,EACXC,YAAY,EACZC,YAAY,EACZC,SAAS,QACN,8BAA8B;AAYrC,OAAO,IAAA,AAAKC,iCAAAA;;;;WAAAA;MAIX;AAED,OAAO,IAAA,AAAKC,8CAAAA;;;;;WAAAA;MAKX"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatbot-api-client-stream.test.d.ts","sourceRoot":"","sources":["../../../../src/api-client/titan-chat/__tests__/chatbot-api-client-stream.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, jest, test } from '@jest/globals';
|
|
2
|
+
import { fetchEventSource } from '@microsoft/fetch-event-source';
|
|
3
|
+
import { Models } from '../..';
|
|
4
|
+
import { ChatbotApiClient } from '../chatbot-api-client';
|
|
5
|
+
jest.mock('@microsoft/fetch-event-source');
|
|
6
|
+
const fetchEventSourceMock = fetchEventSource;
|
|
7
|
+
const okResponse = ()=>({
|
|
8
|
+
ok: true,
|
|
9
|
+
status: 200,
|
|
10
|
+
headers: {
|
|
11
|
+
get: ()=>'text/event-stream'
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
const evt = (event, data)=>({
|
|
15
|
+
id: '',
|
|
16
|
+
event,
|
|
17
|
+
data: JSON.stringify(data)
|
|
18
|
+
});
|
|
19
|
+
/** Mock that opens, exposes init, and stays pending until the client aborts. */ function captureOpen() {
|
|
20
|
+
const capture = {
|
|
21
|
+
opened: undefined
|
|
22
|
+
};
|
|
23
|
+
capture.opened = new Promise((markOpened)=>{
|
|
24
|
+
fetchEventSourceMock.mockImplementation((_url, init)=>{
|
|
25
|
+
var _init_onopen;
|
|
26
|
+
capture.init = init;
|
|
27
|
+
markOpened();
|
|
28
|
+
return Promise.resolve((_init_onopen = init.onopen) === null || _init_onopen === void 0 ? void 0 : _init_onopen.call(init, okResponse())).then(()=>new Promise((resolve)=>{
|
|
29
|
+
const s = init.signal;
|
|
30
|
+
if (s === null || s === void 0 ? void 0 : s.aborted) {
|
|
31
|
+
resolve();
|
|
32
|
+
} else {
|
|
33
|
+
s === null || s === void 0 ? void 0 : s.addEventListener('abort', ()=>resolve(), {
|
|
34
|
+
once: true
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}));
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
return capture;
|
|
41
|
+
}
|
|
42
|
+
/** The same custom fetch the regular API client would use (injects auth, etc.). */ const customFetch = (_url, _init)=>Promise.resolve(new Response());
|
|
43
|
+
const settings = {
|
|
44
|
+
version: '2',
|
|
45
|
+
clientId: 'help-center',
|
|
46
|
+
constructorParametersFactory: ()=>({
|
|
47
|
+
baseUrl: 'https://api.test/base',
|
|
48
|
+
httpClient: {
|
|
49
|
+
fetch: customFetch
|
|
50
|
+
}
|
|
51
|
+
}),
|
|
52
|
+
streamHeadersFactory: ()=>({
|
|
53
|
+
Authorization: 'Bearer t'
|
|
54
|
+
})
|
|
55
|
+
};
|
|
56
|
+
describe('ChatbotApiClient (titan-chat).streamMessage', ()=>{
|
|
57
|
+
beforeEach(()=>{
|
|
58
|
+
fetchEventSourceMock.mockReset();
|
|
59
|
+
});
|
|
60
|
+
test('opens the versioned stream endpoint with X-Client-ID + extra headers and the message body', async ()=>{
|
|
61
|
+
const capture = captureOpen();
|
|
62
|
+
const client = new ChatbotApiClient(settings);
|
|
63
|
+
const promise = client.streamMessage(new Models.UserMessage({
|
|
64
|
+
sessionId: 9,
|
|
65
|
+
question: 'hi',
|
|
66
|
+
experience: Models.Experience.MultiTurn
|
|
67
|
+
}), {});
|
|
68
|
+
await capture.opened;
|
|
69
|
+
expect(String(fetchEventSourceMock.mock.calls[0][0])).toBe('https://api.test/base/api/v2/message/stream');
|
|
70
|
+
expect(capture.init.method).toBe('POST');
|
|
71
|
+
expect(capture.init.headers).toMatchObject({
|
|
72
|
+
'X-Client-ID': 'help-center',
|
|
73
|
+
'Authorization': 'Bearer t',
|
|
74
|
+
'Accept': 'text/event-stream'
|
|
75
|
+
});
|
|
76
|
+
const sent = JSON.parse(capture.init.body);
|
|
77
|
+
expect(sent.question).toBe('hi');
|
|
78
|
+
expect(sent.sessionId).toBe(9);
|
|
79
|
+
capture.init.onmessage(evt('run.finished', {
|
|
80
|
+
seq: 1,
|
|
81
|
+
status: 'Success',
|
|
82
|
+
answer: 'done'
|
|
83
|
+
}));
|
|
84
|
+
await promise;
|
|
85
|
+
});
|
|
86
|
+
test('forwards the configured httpClient.fetch so SSE uses the same request config as the API', async ()=>{
|
|
87
|
+
const capture = captureOpen();
|
|
88
|
+
const client = new ChatbotApiClient(settings);
|
|
89
|
+
const promise = client.streamMessage(new Models.UserMessage({
|
|
90
|
+
question: 'q',
|
|
91
|
+
experience: Models.Experience.MultiTurn
|
|
92
|
+
}), {});
|
|
93
|
+
await capture.opened;
|
|
94
|
+
// fetchEventSource receives the same fetch the regular client uses → auth/headers apply identically.
|
|
95
|
+
expect(capture.init.fetch).toBe(customFetch);
|
|
96
|
+
capture.init.onmessage(evt('run.finished', {
|
|
97
|
+
seq: 1,
|
|
98
|
+
status: 'Success',
|
|
99
|
+
answer: 'done'
|
|
100
|
+
}));
|
|
101
|
+
await promise;
|
|
102
|
+
});
|
|
103
|
+
test('maps agent events and resolves a BotMessage from run.finished', async ()=>{
|
|
104
|
+
const capture = captureOpen();
|
|
105
|
+
const handlers = {
|
|
106
|
+
onStatus: jest.fn(),
|
|
107
|
+
onText: jest.fn()
|
|
108
|
+
};
|
|
109
|
+
const client = new ChatbotApiClient(settings);
|
|
110
|
+
const promise = client.streamMessage(new Models.UserMessage({
|
|
111
|
+
question: 'q',
|
|
112
|
+
experience: Models.Experience.MultiTurn
|
|
113
|
+
}), handlers);
|
|
114
|
+
await capture.opened;
|
|
115
|
+
capture.init.onmessage(evt('status.changed', {
|
|
116
|
+
seq: 1,
|
|
117
|
+
text: 'Thinking…'
|
|
118
|
+
}));
|
|
119
|
+
capture.init.onmessage(evt('text.appended', {
|
|
120
|
+
seq: 2,
|
|
121
|
+
text: '✓ done step'
|
|
122
|
+
}));
|
|
123
|
+
capture.init.onmessage(evt('run.finished', {
|
|
124
|
+
seq: 3,
|
|
125
|
+
status: 'Success',
|
|
126
|
+
answer: 'final',
|
|
127
|
+
sessionId: 5
|
|
128
|
+
}));
|
|
129
|
+
const bot = await promise;
|
|
130
|
+
expect(handlers.onStatus).toHaveBeenCalledWith('Thinking…');
|
|
131
|
+
expect(handlers.onText).toHaveBeenCalledWith('✓ done step');
|
|
132
|
+
expect(bot).toBeInstanceOf(Models.BotMessage);
|
|
133
|
+
expect(bot.answer).toBe('final');
|
|
134
|
+
expect(bot.sessionId).toBe(5);
|
|
135
|
+
});
|
|
136
|
+
test('plan.proposed forwards steps and activates the first step by default', async ()=>{
|
|
137
|
+
const capture = captureOpen();
|
|
138
|
+
const handlers = {
|
|
139
|
+
onPlan: jest.fn(),
|
|
140
|
+
onStepActive: jest.fn()
|
|
141
|
+
};
|
|
142
|
+
const client = new ChatbotApiClient(settings);
|
|
143
|
+
const promise = client.streamMessage(new Models.UserMessage({
|
|
144
|
+
question: 'q',
|
|
145
|
+
experience: Models.Experience.MultiTurn
|
|
146
|
+
}), handlers);
|
|
147
|
+
await capture.opened;
|
|
148
|
+
capture.init.onmessage(evt('plan.proposed', {
|
|
149
|
+
seq: 1,
|
|
150
|
+
steps: [
|
|
151
|
+
{
|
|
152
|
+
id: 'a',
|
|
153
|
+
title: 'Look up'
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
id: 'b',
|
|
157
|
+
title: 'Answer'
|
|
158
|
+
}
|
|
159
|
+
]
|
|
160
|
+
}));
|
|
161
|
+
capture.init.onmessage(evt('run.finished', {
|
|
162
|
+
seq: 2,
|
|
163
|
+
status: 'Success',
|
|
164
|
+
answer: 'x'
|
|
165
|
+
}));
|
|
166
|
+
await promise;
|
|
167
|
+
expect(handlers.onPlan).toHaveBeenCalledWith([
|
|
168
|
+
{
|
|
169
|
+
id: 'a',
|
|
170
|
+
title: 'Look up'
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
id: 'b',
|
|
174
|
+
title: 'Answer'
|
|
175
|
+
}
|
|
176
|
+
]);
|
|
177
|
+
expect(handlers.onStepActive).toHaveBeenCalledWith('a');
|
|
178
|
+
});
|
|
179
|
+
test('plan.proposed honors an explicit activeStepId', async ()=>{
|
|
180
|
+
const capture = captureOpen();
|
|
181
|
+
const handlers = {
|
|
182
|
+
onStepActive: jest.fn()
|
|
183
|
+
};
|
|
184
|
+
const client = new ChatbotApiClient(settings);
|
|
185
|
+
const promise = client.streamMessage(new Models.UserMessage({
|
|
186
|
+
question: 'q',
|
|
187
|
+
experience: Models.Experience.MultiTurn
|
|
188
|
+
}), handlers);
|
|
189
|
+
await capture.opened;
|
|
190
|
+
capture.init.onmessage(evt('plan.proposed', {
|
|
191
|
+
seq: 1,
|
|
192
|
+
activeStepId: 'b',
|
|
193
|
+
steps: [
|
|
194
|
+
{
|
|
195
|
+
id: 'a',
|
|
196
|
+
title: 'Look up'
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
id: 'b',
|
|
200
|
+
title: 'Answer'
|
|
201
|
+
}
|
|
202
|
+
]
|
|
203
|
+
}));
|
|
204
|
+
capture.init.onmessage(evt('run.finished', {
|
|
205
|
+
seq: 2,
|
|
206
|
+
status: 'Success',
|
|
207
|
+
answer: 'x'
|
|
208
|
+
}));
|
|
209
|
+
await promise;
|
|
210
|
+
expect(handlers.onStepActive).toHaveBeenCalledWith('b');
|
|
211
|
+
});
|
|
212
|
+
test('status.changed advances the active step when it carries a stepId', async ()=>{
|
|
213
|
+
const capture = captureOpen();
|
|
214
|
+
const handlers = {
|
|
215
|
+
onStatus: jest.fn(),
|
|
216
|
+
onStepActive: jest.fn()
|
|
217
|
+
};
|
|
218
|
+
const client = new ChatbotApiClient(settings);
|
|
219
|
+
const promise = client.streamMessage(new Models.UserMessage({
|
|
220
|
+
question: 'q',
|
|
221
|
+
experience: Models.Experience.MultiTurn
|
|
222
|
+
}), handlers);
|
|
223
|
+
await capture.opened;
|
|
224
|
+
capture.init.onmessage(evt('status.changed', {
|
|
225
|
+
seq: 1,
|
|
226
|
+
text: 'Searching…',
|
|
227
|
+
stepId: 'b'
|
|
228
|
+
}));
|
|
229
|
+
capture.init.onmessage(evt('run.finished', {
|
|
230
|
+
seq: 2,
|
|
231
|
+
status: 'Success',
|
|
232
|
+
answer: 'x'
|
|
233
|
+
}));
|
|
234
|
+
await promise;
|
|
235
|
+
expect(handlers.onStatus).toHaveBeenCalledWith('Searching…');
|
|
236
|
+
expect(handlers.onStepActive).toHaveBeenCalledWith('b');
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
//# sourceMappingURL=chatbot-api-client-stream.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/api-client/titan-chat/__tests__/chatbot-api-client-stream.test.ts"],"sourcesContent":["import { beforeEach, describe, expect, jest, test } from '@jest/globals';\nimport { type EventSourceMessage, fetchEventSource } from '@microsoft/fetch-event-source';\nimport { Models } from '../..';\nimport type { AgentStreamHandlers } from '../../../streaming';\nimport { ChatbotApiClient, IChatbotClientSettingsTitanChat } from '../chatbot-api-client';\n\njest.mock('@microsoft/fetch-event-source');\n\nconst fetchEventSourceMock = fetchEventSource as jest.MockedFunction<typeof fetchEventSource>;\n\nconst okResponse = () =>\n ({ ok: true, status: 200, headers: { get: () => 'text/event-stream' } }) as unknown as Response;\nconst evt = (event: string, data: unknown): EventSourceMessage => ({\n id: '',\n event,\n data: JSON.stringify(data),\n});\n\n/** Mock that opens, exposes init, and stays pending until the client aborts. */\nfunction captureOpen() {\n const capture: { init?: any; opened: Promise<void> } = { opened: undefined as any };\n capture.opened = new Promise<void>(markOpened => {\n fetchEventSourceMock.mockImplementation((_url, init) => {\n capture.init = init;\n markOpened();\n return Promise.resolve(init.onopen?.(okResponse())).then(\n () =>\n new Promise<void>(resolve => {\n const s: AbortSignal | null | undefined = init.signal;\n if (s?.aborted) {\n resolve();\n } else {\n s?.addEventListener('abort', () => resolve(), { once: true });\n }\n })\n );\n });\n });\n return capture;\n}\n\n/** The same custom fetch the regular API client would use (injects auth, etc.). */\nconst customFetch = ((_url: any, _init?: any) => Promise.resolve(new Response())) as typeof fetch;\n\nconst settings: IChatbotClientSettingsTitanChat = {\n version: '2',\n clientId: 'help-center',\n constructorParametersFactory: () => ({\n baseUrl: 'https://api.test/base',\n httpClient: { fetch: customFetch },\n }),\n streamHeadersFactory: () => ({ Authorization: 'Bearer t' }),\n};\n\ndescribe('ChatbotApiClient (titan-chat).streamMessage', () => {\n beforeEach(() => {\n fetchEventSourceMock.mockReset();\n });\n\n test('opens the versioned stream endpoint with X-Client-ID + extra headers and the message body', async () => {\n const capture = captureOpen();\n const client = new ChatbotApiClient(settings);\n\n const promise = client.streamMessage(\n new Models.UserMessage({\n sessionId: 9,\n question: 'hi',\n experience: Models.Experience.MultiTurn,\n }),\n {}\n );\n await capture.opened;\n\n expect(String((fetchEventSourceMock.mock.calls[0] as any[])[0])).toBe(\n 'https://api.test/base/api/v2/message/stream'\n );\n expect(capture.init.method).toBe('POST');\n expect(capture.init.headers).toMatchObject({\n 'X-Client-ID': 'help-center',\n 'Authorization': 'Bearer t',\n 'Accept': 'text/event-stream',\n });\n const sent = JSON.parse(capture.init.body);\n expect(sent.question).toBe('hi');\n expect(sent.sessionId).toBe(9);\n\n capture.init.onmessage(evt('run.finished', { seq: 1, status: 'Success', answer: 'done' }));\n await promise;\n });\n\n test('forwards the configured httpClient.fetch so SSE uses the same request config as the API', async () => {\n const capture = captureOpen();\n const client = new ChatbotApiClient(settings);\n\n const promise = client.streamMessage(\n new Models.UserMessage({ question: 'q', experience: Models.Experience.MultiTurn }),\n {}\n );\n await capture.opened;\n\n // fetchEventSource receives the same fetch the regular client uses → auth/headers apply identically.\n expect(capture.init.fetch).toBe(customFetch);\n\n capture.init.onmessage(evt('run.finished', { seq: 1, status: 'Success', answer: 'done' }));\n await promise;\n });\n\n test('maps agent events and resolves a BotMessage from run.finished', async () => {\n const capture = captureOpen();\n const handlers: AgentStreamHandlers = { onStatus: jest.fn(), onText: jest.fn() };\n const client = new ChatbotApiClient(settings);\n\n const promise = client.streamMessage(\n new Models.UserMessage({ question: 'q', experience: Models.Experience.MultiTurn }),\n handlers\n );\n await capture.opened;\n\n capture.init.onmessage(evt('status.changed', { seq: 1, text: 'Thinking…' }));\n capture.init.onmessage(evt('text.appended', { seq: 2, text: '✓ done step' }));\n capture.init.onmessage(\n evt('run.finished', { seq: 3, status: 'Success', answer: 'final', sessionId: 5 })\n );\n\n const bot = await promise;\n expect(handlers.onStatus).toHaveBeenCalledWith('Thinking…');\n expect(handlers.onText).toHaveBeenCalledWith('✓ done step');\n expect(bot).toBeInstanceOf(Models.BotMessage);\n expect(bot.answer).toBe('final');\n expect(bot.sessionId).toBe(5);\n });\n\n test('plan.proposed forwards steps and activates the first step by default', async () => {\n const capture = captureOpen();\n const handlers: AgentStreamHandlers = { onPlan: jest.fn(), onStepActive: jest.fn() };\n const client = new ChatbotApiClient(settings);\n\n const promise = client.streamMessage(\n new Models.UserMessage({ question: 'q', experience: Models.Experience.MultiTurn }),\n handlers\n );\n await capture.opened;\n\n capture.init.onmessage(\n evt('plan.proposed', {\n seq: 1,\n steps: [\n { id: 'a', title: 'Look up' },\n { id: 'b', title: 'Answer' },\n ],\n })\n );\n capture.init.onmessage(evt('run.finished', { seq: 2, status: 'Success', answer: 'x' }));\n\n await promise;\n expect(handlers.onPlan).toHaveBeenCalledWith([\n { id: 'a', title: 'Look up' },\n { id: 'b', title: 'Answer' },\n ]);\n expect(handlers.onStepActive).toHaveBeenCalledWith('a');\n });\n\n test('plan.proposed honors an explicit activeStepId', async () => {\n const capture = captureOpen();\n const handlers: AgentStreamHandlers = { onStepActive: jest.fn() };\n const client = new ChatbotApiClient(settings);\n\n const promise = client.streamMessage(\n new Models.UserMessage({ question: 'q', experience: Models.Experience.MultiTurn }),\n handlers\n );\n await capture.opened;\n\n capture.init.onmessage(\n evt('plan.proposed', {\n seq: 1,\n activeStepId: 'b',\n steps: [\n { id: 'a', title: 'Look up' },\n { id: 'b', title: 'Answer' },\n ],\n })\n );\n capture.init.onmessage(evt('run.finished', { seq: 2, status: 'Success', answer: 'x' }));\n\n await promise;\n expect(handlers.onStepActive).toHaveBeenCalledWith('b');\n });\n\n test('status.changed advances the active step when it carries a stepId', async () => {\n const capture = captureOpen();\n const handlers: AgentStreamHandlers = { onStatus: jest.fn(), onStepActive: jest.fn() };\n const client = new ChatbotApiClient(settings);\n\n const promise = client.streamMessage(\n new Models.UserMessage({ question: 'q', experience: Models.Experience.MultiTurn }),\n handlers\n );\n await capture.opened;\n\n capture.init.onmessage(evt('status.changed', { seq: 1, text: 'Searching…', stepId: 'b' }));\n capture.init.onmessage(evt('run.finished', { seq: 2, status: 'Success', answer: 'x' }));\n\n await promise;\n expect(handlers.onStatus).toHaveBeenCalledWith('Searching…');\n expect(handlers.onStepActive).toHaveBeenCalledWith('b');\n });\n});\n"],"names":["beforeEach","describe","expect","jest","test","fetchEventSource","Models","ChatbotApiClient","mock","fetchEventSourceMock","okResponse","ok","status","headers","get","evt","event","data","id","JSON","stringify","captureOpen","capture","opened","undefined","Promise","markOpened","mockImplementation","_url","init","resolve","onopen","then","s","signal","aborted","addEventListener","once","customFetch","_init","Response","settings","version","clientId","constructorParametersFactory","baseUrl","httpClient","fetch","streamHeadersFactory","Authorization","mockReset","client","promise","streamMessage","UserMessage","sessionId","question","experience","Experience","MultiTurn","String","calls","toBe","method","toMatchObject","sent","parse","body","onmessage","seq","answer","handlers","onStatus","fn","onText","text","bot","toHaveBeenCalledWith","toBeInstanceOf","BotMessage","onPlan","onStepActive","steps","title","activeStepId","stepId"],"mappings":"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"}
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
import { expect } from '@jest/globals';
|
|
2
2
|
import { Models } from '../..';
|
|
3
|
-
describe('titan-chat native-client generated models', ()
|
|
3
|
+
describe('titan-chat native-client generated models', ()=>{
|
|
4
4
|
/*
|
|
5
5
|
* Regression guard: BotMessage and UserMessage extend a shared Message base. With
|
|
6
6
|
* useDefineForClassFields=true, subclass field declarations re-emit as defineProperty
|
|
7
7
|
* *after* super(data) and would clobber the values the parent constructor's for-in loop
|
|
8
8
|
* just copied. The generated file uses `declare` on subclass fields to suppress those
|
|
9
9
|
* emissions. If a future regen drops `declare`, these tests fail loudly.
|
|
10
|
-
*/
|
|
11
|
-
test('BotMessage constructor preserves data fields', () => {
|
|
10
|
+
*/ test('BotMessage constructor preserves data fields', ()=>{
|
|
12
11
|
const message = new Models.BotMessage({
|
|
13
12
|
id: 7,
|
|
14
13
|
sessionId: 42,
|
|
15
14
|
answer: 'hello',
|
|
16
15
|
guardFlag: 'N',
|
|
17
|
-
isGuardrailed: false
|
|
16
|
+
isGuardrailed: false
|
|
18
17
|
});
|
|
19
18
|
expect(message.answer).toBe('hello');
|
|
20
19
|
expect(message.guardFlag).toBe('N');
|
|
@@ -22,15 +21,16 @@ describe('titan-chat native-client generated models', () => {
|
|
|
22
21
|
expect(message.id).toBe(7);
|
|
23
22
|
expect(message.sessionId).toBe(42);
|
|
24
23
|
});
|
|
25
|
-
test('UserMessage constructor preserves data fields', ()
|
|
24
|
+
test('UserMessage constructor preserves data fields', ()=>{
|
|
26
25
|
const message = new Models.UserMessage({
|
|
27
26
|
sessionId: 42,
|
|
28
27
|
question: 'why?',
|
|
29
|
-
experience: Models.Experience.MultiTurn
|
|
28
|
+
experience: Models.Experience.MultiTurn
|
|
30
29
|
});
|
|
31
30
|
expect(message.question).toBe('why?');
|
|
32
31
|
expect(message.experience).toBe(Models.Experience.MultiTurn);
|
|
33
32
|
expect(message.sessionId).toBe(42);
|
|
34
33
|
});
|
|
35
34
|
});
|
|
35
|
+
|
|
36
36
|
//# sourceMappingURL=native-client.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../../src/api-client/titan-chat/__tests__/native-client.test.ts"],"sourcesContent":["import { expect } from '@jest/globals';\nimport { Models } from '../..';\n\ndescribe('titan-chat native-client generated models', () => {\n /*\n * Regression guard: BotMessage and UserMessage extend a shared Message base. With\n * useDefineForClassFields=true, subclass field declarations re-emit as defineProperty\n * *after* super(data) and would clobber the values the parent constructor's for-in loop\n * just copied. The generated file uses `declare` on subclass fields to suppress those\n * emissions. If a future regen drops `declare`, these tests fail loudly.\n */\n test('BotMessage constructor preserves data fields', () => {\n const message = new Models.BotMessage({\n id: 7,\n sessionId: 42,\n answer: 'hello',\n guardFlag: 'N',\n isGuardrailed: false,\n });\n expect(message.answer).toBe('hello');\n expect(message.guardFlag).toBe('N');\n expect(message.isGuardrailed).toBe(false);\n expect(message.id).toBe(7);\n expect(message.sessionId).toBe(42);\n });\n\n test('UserMessage constructor preserves data fields', () => {\n const message = new Models.UserMessage({\n sessionId: 42,\n question: 'why?',\n experience: Models.Experience.MultiTurn,\n });\n expect(message.question).toBe('why?');\n expect(message.experience).toBe(Models.Experience.MultiTurn);\n expect(message.sessionId).toBe(42);\n });\n});\n"],"names":["expect","Models","describe","test","message","BotMessage","id","sessionId","answer","guardFlag","isGuardrailed","toBe","UserMessage","question","experience","Experience","MultiTurn"],"mappings":"AAAA,SAASA,MAAM,QAAQ,gBAAgB;AACvC,SAASC,MAAM,QAAQ,QAAQ;AAE/BC,SAAS,6CAA6C;IAClD;;;;;;KAMC,GACDC,KAAK,gDAAgD;QACjD,MAAMC,UAAU,IAAIH,OAAOI,UAAU,CAAC;YAClCC,IAAI;YACJC,WAAW;YACXC,QAAQ;YACRC,WAAW;YACXC,eAAe;QACnB;QACAV,OAAOI,QAAQI,MAAM,EAAEG,IAAI,CAAC;QAC5BX,OAAOI,QAAQK,SAAS,EAAEE,IAAI,CAAC;QAC/BX,OAAOI,QAAQM,aAAa,EAAEC,IAAI,CAAC;QACnCX,OAAOI,QAAQE,EAAE,EAAEK,IAAI,CAAC;QACxBX,OAAOI,QAAQG,SAAS,EAAEI,IAAI,CAAC;IACnC;IAEAR,KAAK,iDAAiD;QAClD,MAAMC,UAAU,IAAIH,OAAOW,WAAW,CAAC;YACnCL,WAAW;YACXM,UAAU;YACVC,YAAYb,OAAOc,UAAU,CAACC,SAAS;QAC3C;QACAhB,OAAOI,QAAQS,QAAQ,EAAEF,IAAI,CAAC;QAC9BX,OAAOI,QAAQU,UAAU,EAAEH,IAAI,CAACV,OAAOc,UAAU,CAACC,SAAS;QAC3DhB,OAAOI,QAAQG,SAAS,EAAEI,IAAI,CAAC;IACnC;AACJ"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Models } from '..';
|
|
2
|
+
import { AgentStreamHandlers } from '../../streaming';
|
|
2
3
|
import { FirstParameterType, IChatbotApiClient, IChatbotClientSettings, SecondParameterType } from '../base/chatbot-api-client';
|
|
3
4
|
import { Client } from './native-client';
|
|
4
5
|
/**
|
|
@@ -12,6 +13,11 @@ export interface IChatbotClientSettingsTitanChat extends IChatbotClientSettings
|
|
|
12
13
|
};
|
|
13
14
|
version: string;
|
|
14
15
|
clientId: string;
|
|
16
|
+
/**
|
|
17
|
+
* Extra headers for the SSE streaming request. `X-Client-ID` is always sent (from `clientId`);
|
|
18
|
+
* use this for anything the fetch http client would otherwise add (e.g. Authorization). Optional.
|
|
19
|
+
*/
|
|
20
|
+
streamHeadersFactory?: () => Record<string, string>;
|
|
15
21
|
}
|
|
16
22
|
/**
|
|
17
23
|
* Client adapter adopts the generated titan chatbot client to the generic IChatbotApiClient interface.
|
|
@@ -20,11 +26,16 @@ export interface IChatbotClientSettingsTitanChat extends IChatbotClientSettings
|
|
|
20
26
|
export declare class ChatbotApiClient implements IChatbotApiClient {
|
|
21
27
|
private readonly chatbotApiClientSettings;
|
|
22
28
|
private readonly client;
|
|
29
|
+
/** Same base URL the generated `Client` uses, so streaming URLs are built identically. */
|
|
30
|
+
private readonly baseUrl;
|
|
31
|
+
/** Same `fetch` the generated `Client` uses, so the SSE request gets identical auth/headers. */
|
|
32
|
+
private readonly httpFetch?;
|
|
23
33
|
get version(): string;
|
|
24
34
|
get clientId(): string;
|
|
25
35
|
constructor(chatbotApiClientSettings: IChatbotClientSettingsTitanChat);
|
|
26
36
|
postFeedback(body: Models.Feedback, abortSignal?: AbortSignal): Promise<Models.Feedback>;
|
|
27
37
|
postMessage(body: Models.UserMessage, abortSignal?: AbortSignal): Promise<Models.BotMessage>;
|
|
38
|
+
streamMessage(body: Models.IUserMessage, handlers: AgentStreamHandlers, abortSignal?: AbortSignal): Promise<Models.BotMessage>;
|
|
28
39
|
postFollowUpEmail(body: Models.UserMessage, abortSignal?: AbortSignal): Promise<Models.BotMessage>;
|
|
29
40
|
getOptions(abortSignal?: AbortSignal): Promise<Models.FrontendModel>;
|
|
30
41
|
postSession(body: Models.Session, abortSignal?: AbortSignal): Promise<Models.Session>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatbot-api-client.d.ts","sourceRoot":"","sources":["../../../src/api-client/titan-chat/chatbot-api-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAEH,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACtB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"chatbot-api-client.d.ts","sourceRoot":"","sources":["../../../src/api-client/titan-chat/chatbot-api-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAkB,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAEH,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACtB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAKzC;;;GAGG;AACH,MAAM,WAAW,+BAAgC,SAAQ,sBAAsB;IAC3E,4BAA4B,EAAE,MAAM;QAChC,OAAO,CAAC,EAAE,kBAAkB,CAAC,OAAO,MAAM,CAAC,CAAC;QAC5C,UAAU,CAAC,EAAE,mBAAmB,CAAC,OAAO,MAAM,CAAC,CAAC;KACnD,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvD;AAED;;;GAGG;AACH,qBACa,gBAAiB,YAAW,iBAAiB;IAiBlD,OAAO,CAAC,QAAQ,CAAC,wBAAwB;IAhB7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,0FAA0F;IAC1F,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,gGAAgG;IAChG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAe;IAE1C,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;gBAIoB,wBAAwB,EAAE,+BAA+B;IAc9E,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,WAAW;IAI7D,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,WAAW;IAI/D,aAAa,CACT,IAAI,EAAE,MAAM,CAAC,YAAY,EACzB,QAAQ,EAAE,mBAAmB,EAC7B,WAAW,CAAC,EAAE,WAAW,GAC1B,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;IAsB7B,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,WAAW;IAIrE,UAAU,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;IAI9D,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,WAAW;IAIjE,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,WAAW;IAI5D,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,WAAW;IAI7D,cAAc,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,WAAW;CAGhE"}
|