@botonic/core 0.46.1 → 0.48.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/lib/cjs/core-bot.js +10 -2
- package/lib/cjs/core-bot.js.map +1 -1
- package/lib/cjs/models/ai-agents.d.ts +9 -0
- package/lib/cjs/models/legacy-types.d.ts +19 -0
- package/lib/cjs/models/legacy-types.js.map +1 -1
- package/lib/cjs/testing/index.d.ts +91 -0
- package/lib/cjs/testing/index.js +196 -0
- package/lib/cjs/testing/index.js.map +1 -0
- package/lib/esm/core-bot.js +10 -2
- package/lib/esm/core-bot.js.map +1 -1
- package/lib/esm/models/ai-agents.d.ts +9 -0
- package/lib/esm/models/legacy-types.d.ts +19 -0
- package/lib/esm/models/legacy-types.js.map +1 -1
- package/lib/esm/testing/index.d.ts +91 -0
- package/lib/esm/testing/index.js +196 -0
- package/lib/esm/testing/index.js.map +1 -0
- package/package.json +18 -1
- package/src/core-bot.ts +11 -3
- package/src/models/ai-agents.ts +11 -0
- package/src/models/legacy-types.ts +21 -0
- package/src/testing/index.ts +311 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { type BotContext, type BotRequest, type BotSecrets, type BotSettings, type ContactInfo, type Input, type ProviderType, type ResolvedPlugins, type Session, type SessionUser } from '../models';
|
|
2
|
+
export declare const TEST_DEFAULTS: {
|
|
3
|
+
HUBTYPE_API_URL: string;
|
|
4
|
+
STATIC_URL: string;
|
|
5
|
+
LITELLM_API_URL: string;
|
|
6
|
+
AZURE_OPENAI_API_BASE: string;
|
|
7
|
+
AZURE_OPENAI_API_VERSION: string;
|
|
8
|
+
LANGUAGE_DETECTION_ENABLED: boolean;
|
|
9
|
+
HUBTYPE_ACCESS_TOKEN: string;
|
|
10
|
+
LITELLM_API_KEY: string;
|
|
11
|
+
AZURE_OPENAI_API_KEY: string;
|
|
12
|
+
ACCESS_TOKEN: string;
|
|
13
|
+
HUBTYPE_API_HOST: string;
|
|
14
|
+
FLOW_THREAD_ID: string;
|
|
15
|
+
BOT_ID: string;
|
|
16
|
+
USER_ID: string;
|
|
17
|
+
ORG_ID: string;
|
|
18
|
+
ORG_NAME: string;
|
|
19
|
+
PROVIDER: ProviderType;
|
|
20
|
+
LOCALE: string;
|
|
21
|
+
COUNTRY: string;
|
|
22
|
+
BOT_INTERACTION_ID: string;
|
|
23
|
+
MESSAGE_ID: string;
|
|
24
|
+
LAST_ROUTE_PATH: string;
|
|
25
|
+
};
|
|
26
|
+
export declare function createTestSettings(overrides?: Partial<BotSettings>): BotSettings;
|
|
27
|
+
export declare function createTestSecrets(overrides?: Partial<BotSecrets>): BotSecrets;
|
|
28
|
+
export interface TestUserOptions {
|
|
29
|
+
id?: string;
|
|
30
|
+
provider?: ProviderType;
|
|
31
|
+
locale?: string;
|
|
32
|
+
country?: string;
|
|
33
|
+
systemLocale?: string;
|
|
34
|
+
contactInfo?: ContactInfo[];
|
|
35
|
+
extraData?: Record<string, any>;
|
|
36
|
+
}
|
|
37
|
+
export declare function createTestSessionUser(options?: TestUserOptions): SessionUser<Record<string, any>>;
|
|
38
|
+
export interface TestSessionOptions {
|
|
39
|
+
user?: TestUserOptions;
|
|
40
|
+
botId?: string;
|
|
41
|
+
organization?: string;
|
|
42
|
+
organizationId?: string;
|
|
43
|
+
isFirstInteraction?: boolean;
|
|
44
|
+
isTestIntegration?: boolean;
|
|
45
|
+
accessToken?: string;
|
|
46
|
+
hubtypeApi?: string;
|
|
47
|
+
flowThreadId?: string;
|
|
48
|
+
retries?: number;
|
|
49
|
+
shadowing?: boolean;
|
|
50
|
+
hubtypeCaseId?: string;
|
|
51
|
+
captureUserInputNodeId?: string;
|
|
52
|
+
}
|
|
53
|
+
export declare function createTestSession(options?: TestSessionOptions): Session<Record<string, any>>;
|
|
54
|
+
export interface TestInputOptions {
|
|
55
|
+
type?: Input['type'];
|
|
56
|
+
data?: string;
|
|
57
|
+
text?: string;
|
|
58
|
+
payload?: string;
|
|
59
|
+
src?: string;
|
|
60
|
+
botInteractionId?: string;
|
|
61
|
+
messageId?: string;
|
|
62
|
+
context?: Input['context'];
|
|
63
|
+
transcript?: string;
|
|
64
|
+
}
|
|
65
|
+
export declare function createTestInput(options?: TestInputOptions): Input;
|
|
66
|
+
export interface TestBotRequestOptions {
|
|
67
|
+
input?: TestInputOptions | Input;
|
|
68
|
+
session?: TestSessionOptions | Session;
|
|
69
|
+
lastRoutePath?: string;
|
|
70
|
+
settings?: Partial<BotSettings> | BotSettings;
|
|
71
|
+
secrets?: Partial<BotSecrets> | BotSecrets;
|
|
72
|
+
}
|
|
73
|
+
export declare function createTestBotRequest(options?: TestBotRequestOptions): BotRequest;
|
|
74
|
+
export interface TestBotContextOptions<TPlugins extends ResolvedPlugins = ResolvedPlugins> extends TestBotRequestOptions {
|
|
75
|
+
plugins?: TPlugins;
|
|
76
|
+
params?: Record<string, string>;
|
|
77
|
+
defaultDelay?: number;
|
|
78
|
+
defaultTyping?: number;
|
|
79
|
+
}
|
|
80
|
+
export declare function createTestBotContext<TPlugins extends ResolvedPlugins = ResolvedPlugins>(options?: TestBotContextOptions<TPlugins>): BotContext<TPlugins>;
|
|
81
|
+
/**
|
|
82
|
+
* Alias for `createTestBotContext` typed as `PluginPreRequest`.
|
|
83
|
+
* PluginPreRequest === BotContext in @botonic/core.
|
|
84
|
+
*/
|
|
85
|
+
export declare const createTestPluginPreRequest: typeof createTestBotContext;
|
|
86
|
+
export interface TestPluginPostRequestOptions<TPlugins extends ResolvedPlugins = ResolvedPlugins> extends TestBotContextOptions<TPlugins> {
|
|
87
|
+
response?: string | null;
|
|
88
|
+
}
|
|
89
|
+
export declare function createTestPluginPostRequest<TPlugins extends ResolvedPlugins = ResolvedPlugins>(options?: TestPluginPostRequestOptions<TPlugins>): BotContext<TPlugins> & {
|
|
90
|
+
response: string | null;
|
|
91
|
+
};
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createTestPluginPreRequest = exports.TEST_DEFAULTS = void 0;
|
|
4
|
+
exports.createTestSettings = createTestSettings;
|
|
5
|
+
exports.createTestSecrets = createTestSecrets;
|
|
6
|
+
exports.createTestSessionUser = createTestSessionUser;
|
|
7
|
+
exports.createTestSession = createTestSession;
|
|
8
|
+
exports.createTestInput = createTestInput;
|
|
9
|
+
exports.createTestBotRequest = createTestBotRequest;
|
|
10
|
+
exports.createTestBotContext = createTestBotContext;
|
|
11
|
+
exports.createTestPluginPostRequest = createTestPluginPostRequest;
|
|
12
|
+
const models_1 = require("../models");
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// Default values
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
exports.TEST_DEFAULTS = {
|
|
17
|
+
HUBTYPE_API_URL: 'https://api.hubtype.com',
|
|
18
|
+
STATIC_URL: 'https://static.hubtype.com',
|
|
19
|
+
LITELLM_API_URL: 'https://api.litellm.com',
|
|
20
|
+
AZURE_OPENAI_API_BASE: 'https://api.openai.com',
|
|
21
|
+
AZURE_OPENAI_API_VERSION: '2026-02-01',
|
|
22
|
+
LANGUAGE_DETECTION_ENABLED: true,
|
|
23
|
+
HUBTYPE_ACCESS_TOKEN: 'testAccessToken', // pragma: allowlist secret
|
|
24
|
+
LITELLM_API_KEY: 'testLiteLLMAPIKey', // pragma: allowlist secret
|
|
25
|
+
AZURE_OPENAI_API_KEY: 'testAzureOpenAIAPIKey', // pragma: allowlist secret
|
|
26
|
+
ACCESS_TOKEN: 'fake_access_token',
|
|
27
|
+
HUBTYPE_API_HOST: 'https://api.hubtype.com',
|
|
28
|
+
FLOW_THREAD_ID: 'testFlowThreadId',
|
|
29
|
+
BOT_ID: 'testBotId',
|
|
30
|
+
USER_ID: 'testUserId',
|
|
31
|
+
ORG_ID: 'testOrgId',
|
|
32
|
+
ORG_NAME: 'testOrg',
|
|
33
|
+
PROVIDER: models_1.PROVIDER.WEBCHAT,
|
|
34
|
+
LOCALE: 'en',
|
|
35
|
+
COUNTRY: 'US',
|
|
36
|
+
BOT_INTERACTION_ID: 'testInteractionId',
|
|
37
|
+
MESSAGE_ID: 'testMessageId',
|
|
38
|
+
LAST_ROUTE_PATH: '',
|
|
39
|
+
};
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
// Leaf factories
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
function createTestSettings(overrides) {
|
|
44
|
+
return {
|
|
45
|
+
HUBTYPE_API_URL: exports.TEST_DEFAULTS.HUBTYPE_API_URL,
|
|
46
|
+
STATIC_URL: exports.TEST_DEFAULTS.STATIC_URL,
|
|
47
|
+
LITELLM_API_URL: exports.TEST_DEFAULTS.LITELLM_API_URL,
|
|
48
|
+
AZURE_OPENAI_API_BASE: exports.TEST_DEFAULTS.AZURE_OPENAI_API_BASE,
|
|
49
|
+
AZURE_OPENAI_API_VERSION: exports.TEST_DEFAULTS.AZURE_OPENAI_API_VERSION,
|
|
50
|
+
LANGUAGE_DETECTION_ENABLED: exports.TEST_DEFAULTS.LANGUAGE_DETECTION_ENABLED,
|
|
51
|
+
CUSTOM_SHORT_URL_HOST: null,
|
|
52
|
+
custom: {},
|
|
53
|
+
...overrides,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function createTestSecrets(overrides) {
|
|
57
|
+
return {
|
|
58
|
+
HUBTYPE_ACCESS_TOKEN: exports.TEST_DEFAULTS.HUBTYPE_ACCESS_TOKEN,
|
|
59
|
+
LITELLM_API_KEY: exports.TEST_DEFAULTS.LITELLM_API_KEY,
|
|
60
|
+
AZURE_OPENAI_API_KEY: exports.TEST_DEFAULTS.AZURE_OPENAI_API_KEY,
|
|
61
|
+
custom: {},
|
|
62
|
+
...overrides,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function createTestSessionUser(options) {
|
|
66
|
+
const locale = options?.locale ?? exports.TEST_DEFAULTS.LOCALE;
|
|
67
|
+
const country = options?.country ?? exports.TEST_DEFAULTS.COUNTRY;
|
|
68
|
+
return {
|
|
69
|
+
id: options?.id ?? exports.TEST_DEFAULTS.USER_ID,
|
|
70
|
+
provider: options?.provider ?? exports.TEST_DEFAULTS.PROVIDER,
|
|
71
|
+
locale,
|
|
72
|
+
country,
|
|
73
|
+
system_locale: options?.systemLocale ?? locale,
|
|
74
|
+
contact_info: options?.contactInfo ?? [],
|
|
75
|
+
extra_data: options?.extraData ?? {},
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function createTestSession(options) {
|
|
79
|
+
return {
|
|
80
|
+
bot: { id: options?.botId ?? exports.TEST_DEFAULTS.BOT_ID },
|
|
81
|
+
user: createTestSessionUser(options?.user),
|
|
82
|
+
organization: options?.organization ?? exports.TEST_DEFAULTS.ORG_NAME,
|
|
83
|
+
organization_id: options?.organizationId ?? exports.TEST_DEFAULTS.ORG_ID,
|
|
84
|
+
is_first_interaction: options?.isFirstInteraction ?? false,
|
|
85
|
+
is_test_integration: options?.isTestIntegration ?? false,
|
|
86
|
+
_access_token: options?.accessToken ?? exports.TEST_DEFAULTS.ACCESS_TOKEN,
|
|
87
|
+
_hubtype_api: options?.hubtypeApi ?? exports.TEST_DEFAULTS.HUBTYPE_API_HOST,
|
|
88
|
+
flow_thread_id: options?.flowThreadId ?? exports.TEST_DEFAULTS.FLOW_THREAD_ID,
|
|
89
|
+
__retries: options?.retries ?? 0,
|
|
90
|
+
_shadowing: options?.shadowing,
|
|
91
|
+
_hubtype_case_id: options?.hubtypeCaseId,
|
|
92
|
+
capture_user_input: options?.captureUserInputNodeId
|
|
93
|
+
? { node_id: options.captureUserInputNodeId }
|
|
94
|
+
: undefined,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
function createTestInput(options) {
|
|
98
|
+
return {
|
|
99
|
+
type: options?.type ?? models_1.INPUT.TEXT,
|
|
100
|
+
data: options?.data,
|
|
101
|
+
text: options?.text,
|
|
102
|
+
payload: options?.payload,
|
|
103
|
+
src: options?.src,
|
|
104
|
+
transcript: options?.transcript,
|
|
105
|
+
context: options?.context,
|
|
106
|
+
bot_interaction_id: options?.botInteractionId ?? exports.TEST_DEFAULTS.BOT_INTERACTION_ID,
|
|
107
|
+
message_id: options?.messageId ?? exports.TEST_DEFAULTS.MESSAGE_ID,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function isFullInput(v) {
|
|
111
|
+
return 'bot_interaction_id' in v && 'message_id' in v;
|
|
112
|
+
}
|
|
113
|
+
function isFullSession(v) {
|
|
114
|
+
return 'bot' in v && '__retries' in v;
|
|
115
|
+
}
|
|
116
|
+
function isFullSettings(v) {
|
|
117
|
+
return ('HUBTYPE_API_URL' in v &&
|
|
118
|
+
'STATIC_URL' in v &&
|
|
119
|
+
'LITELLM_API_URL' in v &&
|
|
120
|
+
'AZURE_OPENAI_API_BASE' in v &&
|
|
121
|
+
'AZURE_OPENAI_API_VERSION' in v &&
|
|
122
|
+
'LANGUAGE_DETECTION_ENABLED' in v &&
|
|
123
|
+
'CUSTOM_SHORT_URL_HOST' in v &&
|
|
124
|
+
'custom' in v);
|
|
125
|
+
}
|
|
126
|
+
function isFullSecrets(v) {
|
|
127
|
+
return ('HUBTYPE_ACCESS_TOKEN' in v &&
|
|
128
|
+
'LITELLM_API_KEY' in v &&
|
|
129
|
+
'AZURE_OPENAI_API_KEY' in v &&
|
|
130
|
+
'custom' in v);
|
|
131
|
+
}
|
|
132
|
+
function createTestBotRequest(options) {
|
|
133
|
+
const input = options?.input == null
|
|
134
|
+
? createTestInput()
|
|
135
|
+
: isFullInput(options.input)
|
|
136
|
+
? options.input
|
|
137
|
+
: createTestInput(options.input);
|
|
138
|
+
const session = options?.session == null
|
|
139
|
+
? createTestSession()
|
|
140
|
+
: isFullSession(options.session)
|
|
141
|
+
? options.session
|
|
142
|
+
: createTestSession(options.session);
|
|
143
|
+
const settings = options?.settings == null
|
|
144
|
+
? createTestSettings()
|
|
145
|
+
: isFullSettings(options.settings)
|
|
146
|
+
? options.settings
|
|
147
|
+
: createTestSettings(options.settings);
|
|
148
|
+
const secrets = options?.secrets == null
|
|
149
|
+
? createTestSecrets()
|
|
150
|
+
: isFullSecrets(options.secrets)
|
|
151
|
+
? options.secrets
|
|
152
|
+
: createTestSecrets(options.secrets);
|
|
153
|
+
return {
|
|
154
|
+
input,
|
|
155
|
+
session,
|
|
156
|
+
lastRoutePath: options?.lastRoutePath ?? exports.TEST_DEFAULTS.LAST_ROUTE_PATH,
|
|
157
|
+
settings,
|
|
158
|
+
secrets,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
function createTestBotContext(options) {
|
|
162
|
+
const request = createTestBotRequest(options);
|
|
163
|
+
const sessionForLocale = options?.session == null
|
|
164
|
+
? createTestSession()
|
|
165
|
+
: isFullSession(options.session)
|
|
166
|
+
? options.session
|
|
167
|
+
: createTestSession(options.session);
|
|
168
|
+
const locale = sessionForLocale.user.locale;
|
|
169
|
+
const country = sessionForLocale.user.country;
|
|
170
|
+
const systemLocale = sessionForLocale.user.system_locale;
|
|
171
|
+
return {
|
|
172
|
+
...request,
|
|
173
|
+
plugins: options?.plugins ?? {},
|
|
174
|
+
params: options?.params ?? {},
|
|
175
|
+
defaultDelay: options?.defaultDelay ?? 0,
|
|
176
|
+
defaultTyping: options?.defaultTyping ?? 0,
|
|
177
|
+
getUserLocale: () => locale,
|
|
178
|
+
getUserCountry: () => country,
|
|
179
|
+
getSystemLocale: () => systemLocale,
|
|
180
|
+
setUserLocale: () => undefined,
|
|
181
|
+
setUserCountry: () => undefined,
|
|
182
|
+
setSystemLocale: () => undefined,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Alias for `createTestBotContext` typed as `PluginPreRequest`.
|
|
187
|
+
* PluginPreRequest === BotContext in @botonic/core.
|
|
188
|
+
*/
|
|
189
|
+
exports.createTestPluginPreRequest = createTestBotContext;
|
|
190
|
+
function createTestPluginPostRequest(options) {
|
|
191
|
+
return {
|
|
192
|
+
...createTestBotContext(options),
|
|
193
|
+
response: options?.response ?? null,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/testing/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@botonic/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.48.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Build Chatbots using React",
|
|
6
6
|
"main": "./lib/cjs/index.js",
|
|
7
7
|
"module": "./lib/esm/index.js",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"require": "./lib/cjs/index.js",
|
|
11
|
+
"import": "./lib/esm/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./testing": {
|
|
14
|
+
"require": "./lib/cjs/testing/index.js",
|
|
15
|
+
"import": "./lib/esm/testing/index.js"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
8
18
|
"scripts": {
|
|
9
19
|
"test": "../../node_modules/.bin/jest --coverage",
|
|
10
20
|
"prepublishOnly": "rm -rf lib && npm i && npm run build",
|
|
@@ -29,6 +39,13 @@
|
|
|
29
39
|
"index.d.ts",
|
|
30
40
|
"README.md"
|
|
31
41
|
],
|
|
42
|
+
"typesVersions": {
|
|
43
|
+
"*": {
|
|
44
|
+
"testing": [
|
|
45
|
+
"./lib/cjs/testing/index.d.ts"
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
},
|
|
32
49
|
"dependencies": {
|
|
33
50
|
"@babel/plugin-transform-runtime": "^7.25.9",
|
|
34
51
|
"axios": "^1.13.6",
|
package/src/core-bot.ts
CHANGED
|
@@ -97,7 +97,7 @@ export class CoreBot {
|
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
private getBotContext(request: BotRequest): BotContext {
|
|
100
|
-
const { input, session, lastRoutePath } = request
|
|
100
|
+
const { input, session, lastRoutePath, settings, secrets } = request
|
|
101
101
|
return {
|
|
102
102
|
input,
|
|
103
103
|
session,
|
|
@@ -114,6 +114,8 @@ export class CoreBot {
|
|
|
114
114
|
setUserLocale: (locale: string) => this.setUserLocale(locale, session),
|
|
115
115
|
setSystemLocale: (locale: string) =>
|
|
116
116
|
this.setSystemLocale(locale, session),
|
|
117
|
+
settings,
|
|
118
|
+
secrets,
|
|
117
119
|
}
|
|
118
120
|
}
|
|
119
121
|
|
|
@@ -126,6 +128,8 @@ export class CoreBot {
|
|
|
126
128
|
input: botContext.input,
|
|
127
129
|
session: botContext.session,
|
|
128
130
|
lastRoutePath: botContext.lastRoutePath,
|
|
131
|
+
settings: botContext.settings,
|
|
132
|
+
secrets: botContext.secrets,
|
|
129
133
|
response: [],
|
|
130
134
|
}
|
|
131
135
|
}
|
|
@@ -145,9 +149,11 @@ export class CoreBot {
|
|
|
145
149
|
|
|
146
150
|
return {
|
|
147
151
|
input: botContext.input,
|
|
148
|
-
response,
|
|
149
152
|
session: botContext.session,
|
|
150
153
|
lastRoutePath: botContext.lastRoutePath,
|
|
154
|
+
settings: botContext.settings,
|
|
155
|
+
secrets: botContext.secrets,
|
|
156
|
+
response,
|
|
151
157
|
}
|
|
152
158
|
}
|
|
153
159
|
|
|
@@ -247,11 +253,13 @@ export class CoreBot {
|
|
|
247
253
|
|
|
248
254
|
const followUp = await this.runInput(botContext)
|
|
249
255
|
|
|
250
|
-
const response = {
|
|
256
|
+
const response: BotResponse = {
|
|
251
257
|
input: followUp.input,
|
|
252
258
|
response: previousResponse.response.concat(followUp.response),
|
|
253
259
|
session: botContext.session,
|
|
254
260
|
lastRoutePath: followUp.lastRoutePath,
|
|
261
|
+
settings: followUp.settings,
|
|
262
|
+
secrets: followUp.secrets,
|
|
255
263
|
}
|
|
256
264
|
|
|
257
265
|
// Recursive call to handle multiple bot actions in a row
|
package/src/models/ai-agents.ts
CHANGED
|
@@ -105,6 +105,16 @@ export enum VerbosityLevel {
|
|
|
105
105
|
High = 'high',
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
+
export interface HubtypeAssistantMessage {
|
|
109
|
+
role: 'assistant'
|
|
110
|
+
content: string
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export interface HubtypeUserMessage {
|
|
114
|
+
role: 'user'
|
|
115
|
+
content: string
|
|
116
|
+
}
|
|
117
|
+
|
|
108
118
|
export interface AiAgentArgs {
|
|
109
119
|
name: string
|
|
110
120
|
instructions: string
|
|
@@ -113,5 +123,6 @@ export interface AiAgentArgs {
|
|
|
113
123
|
activeTools?: { name: string }[]
|
|
114
124
|
inputGuardrailRules?: GuardrailRule[]
|
|
115
125
|
sourceIds?: string[]
|
|
126
|
+
previousHubtypeMessages?: HubtypeAssistantMessage[]
|
|
116
127
|
outputMessagesSchemas?: z.ZodObject<any>[]
|
|
117
128
|
}
|
|
@@ -241,6 +241,7 @@ export interface SessionUser<TExtraData = any> {
|
|
|
241
241
|
locale: string
|
|
242
242
|
country: string
|
|
243
243
|
system_locale: string
|
|
244
|
+
system_locale_updated?: boolean
|
|
244
245
|
}
|
|
245
246
|
|
|
246
247
|
export interface HubtypeCaseContactReason {
|
|
@@ -334,6 +335,26 @@ export interface BotRequest<TExtraData = any> {
|
|
|
334
335
|
input: Input
|
|
335
336
|
lastRoutePath: RoutePath
|
|
336
337
|
session: Session<TExtraData>
|
|
338
|
+
settings: BotSettings
|
|
339
|
+
secrets: BotSecrets
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
export interface BotSettings {
|
|
343
|
+
HUBTYPE_API_URL: string
|
|
344
|
+
STATIC_URL: string
|
|
345
|
+
LITELLM_API_URL: string
|
|
346
|
+
AZURE_OPENAI_API_BASE: string
|
|
347
|
+
AZURE_OPENAI_API_VERSION: string
|
|
348
|
+
LANGUAGE_DETECTION_ENABLED?: boolean
|
|
349
|
+
CUSTOM_SHORT_URL_HOST: string | null
|
|
350
|
+
custom: Record<string, any>
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
export interface BotSecrets {
|
|
354
|
+
HUBTYPE_ACCESS_TOKEN: string
|
|
355
|
+
LITELLM_API_KEY: string
|
|
356
|
+
AZURE_OPENAI_API_KEY: string
|
|
357
|
+
custom: Record<string, any>
|
|
337
358
|
}
|
|
338
359
|
|
|
339
360
|
export interface BotContext<
|