@botonic/plugin-ai-agents 0.49.0 → 0.50.0-alpha.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/constants.d.ts +6 -0
- package/lib/cjs/constants.js +7 -1
- package/lib/cjs/constants.js.map +1 -1
- package/lib/cjs/llm-config.d.ts +5 -1
- package/lib/cjs/llm-config.js +44 -1
- package/lib/cjs/llm-config.js.map +1 -1
- package/lib/cjs/services/types.d.ts +1 -1
- package/lib/esm/constants.d.ts +6 -0
- package/lib/esm/constants.js +7 -1
- package/lib/esm/constants.js.map +1 -1
- package/lib/esm/llm-config.d.ts +5 -1
- package/lib/esm/llm-config.js +44 -1
- package/lib/esm/llm-config.js.map +1 -1
- package/lib/esm/services/types.d.ts +1 -1
- package/package.json +1 -1
- package/src/constants.ts +7 -0
- package/src/llm-config.ts +53 -3
- package/src/services/types.ts +1 -1
package/lib/cjs/constants.d.ts
CHANGED
|
@@ -2,8 +2,14 @@ export declare const HUBTYPE_API_URL: string;
|
|
|
2
2
|
export declare const LLM_PROVIDERS: {
|
|
3
3
|
readonly AZURE: "azure";
|
|
4
4
|
readonly OPENAI: "openai";
|
|
5
|
+
readonly LITELLM: "litellm";
|
|
5
6
|
};
|
|
6
7
|
export type LLMProviderType = (typeof LLM_PROVIDERS)[keyof typeof LLM_PROVIDERS];
|
|
8
|
+
export declare const LITELLM_TAG_KEYS: {
|
|
9
|
+
readonly BOT_ID: "bot_id";
|
|
10
|
+
readonly ORG_ID: "org_id";
|
|
11
|
+
readonly SEPARATOR: ",";
|
|
12
|
+
};
|
|
7
13
|
export declare const LLM_PROVIDER: LLMProviderType;
|
|
8
14
|
export declare const LLM_API_KEY: string | undefined;
|
|
9
15
|
export declare const LLM_API_URL: string | undefined;
|
package/lib/cjs/constants.js
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DEFAULT_MAX_RETRIES = exports.DEFAULT_TIMEOUT_16_SECONDS = exports.MAX_MEMORY_LENGTH = exports.isProd = exports.LLM_OPENAI_MODEL = exports.LLM_AZURE_API_VERSION = exports.LLM_API_URL = exports.LLM_API_KEY = exports.LLM_PROVIDER = exports.LLM_PROVIDERS = exports.HUBTYPE_API_URL = void 0;
|
|
3
|
+
exports.DEFAULT_MAX_RETRIES = exports.DEFAULT_TIMEOUT_16_SECONDS = exports.MAX_MEMORY_LENGTH = exports.isProd = exports.LLM_OPENAI_MODEL = exports.LLM_AZURE_API_VERSION = exports.LLM_API_URL = exports.LLM_API_KEY = exports.LLM_PROVIDER = exports.LITELLM_TAG_KEYS = exports.LLM_PROVIDERS = exports.HUBTYPE_API_URL = void 0;
|
|
4
4
|
exports.HUBTYPE_API_URL = process.env.HUBTYPE_API_URL || 'https://api.hubtype.com';
|
|
5
5
|
// LLM Configuration (provider-agnostic; set LLM_PROVIDER=azure|openai)
|
|
6
6
|
exports.LLM_PROVIDERS = {
|
|
7
7
|
AZURE: 'azure',
|
|
8
8
|
OPENAI: 'openai',
|
|
9
|
+
LITELLM: 'litellm',
|
|
10
|
+
};
|
|
11
|
+
exports.LITELLM_TAG_KEYS = {
|
|
12
|
+
BOT_ID: 'bot_id',
|
|
13
|
+
ORG_ID: 'org_id',
|
|
14
|
+
SEPARATOR: ',',
|
|
9
15
|
};
|
|
10
16
|
exports.LLM_PROVIDER = process.env.LLM_PROVIDER || exports.LLM_PROVIDERS.AZURE;
|
|
11
17
|
exports.LLM_API_KEY = process.env.LLM_API_KEY; // pragma: allowlist secret
|
package/lib/cjs/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAC1B,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,yBAAyB,CAAA;AAE1D,uEAAuE;AAC1D,QAAA,aAAa,GAAG;IAC3B,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAC1B,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,yBAAyB,CAAA;AAE1D,uEAAuE;AAC1D,QAAA,aAAa,GAAG;IAC3B,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;CACV,CAAA;AAIG,QAAA,gBAAgB,GAAG;IAC9B,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,GAAG;CACN,CAAA;AAEG,QAAA,YAAY,GACtB,OAAO,CAAC,GAAG,CAAC,YAAgC,IAAI,qBAAa,CAAC,KAAK,CAAA;AACzD,QAAA,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAA,CAAC,2BAA2B;AACjE,QAAA,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAA;AACrC,QAAA,qBAAqB,GAChC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,oBAAoB,CAAA;AAC9C,QAAA,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,cAAc,CAAA;AAEjE,QAAA,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAA;AAE9C,QAAA,iBAAiB,GAAG,EAAE,CAAA;AAEtB,QAAA,0BAA0B,GAAG,KAAK,CAAA;AAClC,QAAA,mBAAmB,GAAG,CAAC,CAAA"}
|
package/lib/cjs/llm-config.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { BotContext, VerbosityLevel } from '@botonic/core';
|
|
2
2
|
import { type Model, type ModelProvider, type ModelSettings } from '@openai/agents';
|
|
3
|
+
import { type LLMProviderType } from './constants';
|
|
3
4
|
export interface LLMConfigParams {
|
|
4
5
|
maxRetries: number;
|
|
5
6
|
timeout: number;
|
|
@@ -17,9 +18,12 @@ export declare class LLMConfig {
|
|
|
17
18
|
constructor({ maxRetries, timeout, modelName, verbosity, botContext, }: LLMConfigParams);
|
|
18
19
|
getModel(): Promise<Model>;
|
|
19
20
|
private getModelProvider;
|
|
21
|
+
getProviderName(): LLMProviderType;
|
|
20
22
|
private getClient;
|
|
23
|
+
private buildLiteLLMTags;
|
|
24
|
+
private getLiteLLMClient;
|
|
21
25
|
private getOpenAIClient;
|
|
22
26
|
private getAzureOpenAiClient;
|
|
23
27
|
private getModelSettings;
|
|
24
|
-
getApiVersion(): string;
|
|
28
|
+
getApiVersion(): string | undefined;
|
|
25
29
|
}
|
package/lib/cjs/llm-config.js
CHANGED
|
@@ -25,12 +25,47 @@ class LLMConfig {
|
|
|
25
25
|
useResponses: false,
|
|
26
26
|
});
|
|
27
27
|
}
|
|
28
|
+
getProviderName() {
|
|
29
|
+
if (this.botContext.settings.LITELLM_API_URL ||
|
|
30
|
+
constants_1.LLM_PROVIDER === constants_1.LLM_PROVIDERS.LITELLM) {
|
|
31
|
+
return constants_1.LLM_PROVIDERS.LITELLM;
|
|
32
|
+
}
|
|
33
|
+
return constants_1.LLM_PROVIDER;
|
|
34
|
+
}
|
|
28
35
|
getClient() {
|
|
36
|
+
if (this.getProviderName() === constants_1.LLM_PROVIDERS.LITELLM) {
|
|
37
|
+
const litellmUrl = this.botContext.settings.LITELLM_API_URL || constants_1.LLM_API_URL || '';
|
|
38
|
+
return this.getLiteLLMClient(litellmUrl);
|
|
39
|
+
}
|
|
29
40
|
if (constants_1.LLM_PROVIDER === constants_1.LLM_PROVIDERS.OPENAI) {
|
|
30
41
|
return this.getOpenAIClient();
|
|
31
42
|
}
|
|
32
43
|
return this.getAzureOpenAiClient();
|
|
33
44
|
}
|
|
45
|
+
buildLiteLLMTags() {
|
|
46
|
+
const botId = this.botContext.session.bot.id;
|
|
47
|
+
const orgId = this.botContext.session.organization_id;
|
|
48
|
+
const parts = [];
|
|
49
|
+
if (botId) {
|
|
50
|
+
parts.push(`${constants_1.LITELLM_TAG_KEYS.BOT_ID}:${botId}`);
|
|
51
|
+
}
|
|
52
|
+
if (orgId) {
|
|
53
|
+
parts.push(`${constants_1.LITELLM_TAG_KEYS.ORG_ID}:${orgId}`);
|
|
54
|
+
}
|
|
55
|
+
return parts.length > 0
|
|
56
|
+
? { 'x-litellm-tags': parts.join(constants_1.LITELLM_TAG_KEYS.SEPARATOR) }
|
|
57
|
+
: undefined;
|
|
58
|
+
}
|
|
59
|
+
getLiteLLMClient(litellmUrl) {
|
|
60
|
+
return new openai_1.default({
|
|
61
|
+
apiKey: this.botContext.secrets.LITELLM_API_KEY || constants_1.LLM_API_KEY,
|
|
62
|
+
baseURL: litellmUrl,
|
|
63
|
+
timeout: this.timeout,
|
|
64
|
+
maxRetries: this.maxRetries,
|
|
65
|
+
dangerouslyAllowBrowser: !constants_1.isProd,
|
|
66
|
+
defaultHeaders: this.buildLiteLLMTags(),
|
|
67
|
+
});
|
|
68
|
+
}
|
|
34
69
|
getOpenAIClient() {
|
|
35
70
|
return new openai_1.default({
|
|
36
71
|
apiKey: this.botContext.secrets.AZURE_OPENAI_API_KEY || constants_1.LLM_API_KEY,
|
|
@@ -66,9 +101,17 @@ class LLMConfig {
|
|
|
66
101
|
text: { verbosity: 'medium' },
|
|
67
102
|
};
|
|
68
103
|
}
|
|
69
|
-
|
|
104
|
+
// LiteLLM can proxy any model — fall back to reasoning settings
|
|
105
|
+
return {
|
|
106
|
+
reasoning: { effort: 'none' },
|
|
107
|
+
temperature: 1,
|
|
108
|
+
text: { verbosity },
|
|
109
|
+
};
|
|
70
110
|
}
|
|
71
111
|
getApiVersion() {
|
|
112
|
+
if (this.getProviderName() === constants_1.LLM_PROVIDERS.LITELLM) {
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
72
115
|
if (constants_1.LLM_PROVIDER !== constants_1.LLM_PROVIDERS.AZURE) {
|
|
73
116
|
return 'NOT_API_VERSION_FOR_OPENAI_PROVIDER';
|
|
74
117
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-config.js","sourceRoot":"","sources":["../../src/llm-config.ts"],"names":[],"mappings":";;;;AACA,2CAKuB;AACvB,yDAA4C;AAC5C,
|
|
1
|
+
{"version":3,"file":"llm-config.js","sourceRoot":"","sources":["../../src/llm-config.ts"],"names":[],"mappings":"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"}
|
package/lib/esm/constants.d.ts
CHANGED
|
@@ -2,8 +2,14 @@ export declare const HUBTYPE_API_URL: string;
|
|
|
2
2
|
export declare const LLM_PROVIDERS: {
|
|
3
3
|
readonly AZURE: "azure";
|
|
4
4
|
readonly OPENAI: "openai";
|
|
5
|
+
readonly LITELLM: "litellm";
|
|
5
6
|
};
|
|
6
7
|
export type LLMProviderType = (typeof LLM_PROVIDERS)[keyof typeof LLM_PROVIDERS];
|
|
8
|
+
export declare const LITELLM_TAG_KEYS: {
|
|
9
|
+
readonly BOT_ID: "bot_id";
|
|
10
|
+
readonly ORG_ID: "org_id";
|
|
11
|
+
readonly SEPARATOR: ",";
|
|
12
|
+
};
|
|
7
13
|
export declare const LLM_PROVIDER: LLMProviderType;
|
|
8
14
|
export declare const LLM_API_KEY: string | undefined;
|
|
9
15
|
export declare const LLM_API_URL: string | undefined;
|
package/lib/esm/constants.js
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DEFAULT_MAX_RETRIES = exports.DEFAULT_TIMEOUT_16_SECONDS = exports.MAX_MEMORY_LENGTH = exports.isProd = exports.LLM_OPENAI_MODEL = exports.LLM_AZURE_API_VERSION = exports.LLM_API_URL = exports.LLM_API_KEY = exports.LLM_PROVIDER = exports.LLM_PROVIDERS = exports.HUBTYPE_API_URL = void 0;
|
|
3
|
+
exports.DEFAULT_MAX_RETRIES = exports.DEFAULT_TIMEOUT_16_SECONDS = exports.MAX_MEMORY_LENGTH = exports.isProd = exports.LLM_OPENAI_MODEL = exports.LLM_AZURE_API_VERSION = exports.LLM_API_URL = exports.LLM_API_KEY = exports.LLM_PROVIDER = exports.LITELLM_TAG_KEYS = exports.LLM_PROVIDERS = exports.HUBTYPE_API_URL = void 0;
|
|
4
4
|
exports.HUBTYPE_API_URL = process.env.HUBTYPE_API_URL || 'https://api.hubtype.com';
|
|
5
5
|
// LLM Configuration (provider-agnostic; set LLM_PROVIDER=azure|openai)
|
|
6
6
|
exports.LLM_PROVIDERS = {
|
|
7
7
|
AZURE: 'azure',
|
|
8
8
|
OPENAI: 'openai',
|
|
9
|
+
LITELLM: 'litellm',
|
|
10
|
+
};
|
|
11
|
+
exports.LITELLM_TAG_KEYS = {
|
|
12
|
+
BOT_ID: 'bot_id',
|
|
13
|
+
ORG_ID: 'org_id',
|
|
14
|
+
SEPARATOR: ',',
|
|
9
15
|
};
|
|
10
16
|
exports.LLM_PROVIDER = process.env.LLM_PROVIDER || exports.LLM_PROVIDERS.AZURE;
|
|
11
17
|
exports.LLM_API_KEY = process.env.LLM_API_KEY; // pragma: allowlist secret
|
package/lib/esm/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAC1B,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,yBAAyB,CAAA;AAE1D,uEAAuE;AAC1D,QAAA,aAAa,GAAG;IAC3B,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAC1B,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,yBAAyB,CAAA;AAE1D,uEAAuE;AAC1D,QAAA,aAAa,GAAG;IAC3B,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;CACV,CAAA;AAIG,QAAA,gBAAgB,GAAG;IAC9B,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,GAAG;CACN,CAAA;AAEG,QAAA,YAAY,GACtB,OAAO,CAAC,GAAG,CAAC,YAAgC,IAAI,qBAAa,CAAC,KAAK,CAAA;AACzD,QAAA,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAA,CAAC,2BAA2B;AACjE,QAAA,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAA;AACrC,QAAA,qBAAqB,GAChC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,oBAAoB,CAAA;AAC9C,QAAA,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,cAAc,CAAA;AAEjE,QAAA,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAA;AAE9C,QAAA,iBAAiB,GAAG,EAAE,CAAA;AAEtB,QAAA,0BAA0B,GAAG,KAAK,CAAA;AAClC,QAAA,mBAAmB,GAAG,CAAC,CAAA"}
|
package/lib/esm/llm-config.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { BotContext, VerbosityLevel } from '@botonic/core';
|
|
2
2
|
import { type Model, type ModelProvider, type ModelSettings } from '@openai/agents';
|
|
3
|
+
import { type LLMProviderType } from './constants';
|
|
3
4
|
export interface LLMConfigParams {
|
|
4
5
|
maxRetries: number;
|
|
5
6
|
timeout: number;
|
|
@@ -17,9 +18,12 @@ export declare class LLMConfig {
|
|
|
17
18
|
constructor({ maxRetries, timeout, modelName, verbosity, botContext, }: LLMConfigParams);
|
|
18
19
|
getModel(): Promise<Model>;
|
|
19
20
|
private getModelProvider;
|
|
21
|
+
getProviderName(): LLMProviderType;
|
|
20
22
|
private getClient;
|
|
23
|
+
private buildLiteLLMTags;
|
|
24
|
+
private getLiteLLMClient;
|
|
21
25
|
private getOpenAIClient;
|
|
22
26
|
private getAzureOpenAiClient;
|
|
23
27
|
private getModelSettings;
|
|
24
|
-
getApiVersion(): string;
|
|
28
|
+
getApiVersion(): string | undefined;
|
|
25
29
|
}
|
package/lib/esm/llm-config.js
CHANGED
|
@@ -25,12 +25,47 @@ class LLMConfig {
|
|
|
25
25
|
useResponses: false,
|
|
26
26
|
});
|
|
27
27
|
}
|
|
28
|
+
getProviderName() {
|
|
29
|
+
if (this.botContext.settings.LITELLM_API_URL ||
|
|
30
|
+
constants_1.LLM_PROVIDER === constants_1.LLM_PROVIDERS.LITELLM) {
|
|
31
|
+
return constants_1.LLM_PROVIDERS.LITELLM;
|
|
32
|
+
}
|
|
33
|
+
return constants_1.LLM_PROVIDER;
|
|
34
|
+
}
|
|
28
35
|
getClient() {
|
|
36
|
+
if (this.getProviderName() === constants_1.LLM_PROVIDERS.LITELLM) {
|
|
37
|
+
const litellmUrl = this.botContext.settings.LITELLM_API_URL || constants_1.LLM_API_URL || '';
|
|
38
|
+
return this.getLiteLLMClient(litellmUrl);
|
|
39
|
+
}
|
|
29
40
|
if (constants_1.LLM_PROVIDER === constants_1.LLM_PROVIDERS.OPENAI) {
|
|
30
41
|
return this.getOpenAIClient();
|
|
31
42
|
}
|
|
32
43
|
return this.getAzureOpenAiClient();
|
|
33
44
|
}
|
|
45
|
+
buildLiteLLMTags() {
|
|
46
|
+
const botId = this.botContext.session.bot.id;
|
|
47
|
+
const orgId = this.botContext.session.organization_id;
|
|
48
|
+
const parts = [];
|
|
49
|
+
if (botId) {
|
|
50
|
+
parts.push(`${constants_1.LITELLM_TAG_KEYS.BOT_ID}:${botId}`);
|
|
51
|
+
}
|
|
52
|
+
if (orgId) {
|
|
53
|
+
parts.push(`${constants_1.LITELLM_TAG_KEYS.ORG_ID}:${orgId}`);
|
|
54
|
+
}
|
|
55
|
+
return parts.length > 0
|
|
56
|
+
? { 'x-litellm-tags': parts.join(constants_1.LITELLM_TAG_KEYS.SEPARATOR) }
|
|
57
|
+
: undefined;
|
|
58
|
+
}
|
|
59
|
+
getLiteLLMClient(litellmUrl) {
|
|
60
|
+
return new openai_1.default({
|
|
61
|
+
apiKey: this.botContext.secrets.LITELLM_API_KEY || constants_1.LLM_API_KEY,
|
|
62
|
+
baseURL: litellmUrl,
|
|
63
|
+
timeout: this.timeout,
|
|
64
|
+
maxRetries: this.maxRetries,
|
|
65
|
+
dangerouslyAllowBrowser: !constants_1.isProd,
|
|
66
|
+
defaultHeaders: this.buildLiteLLMTags(),
|
|
67
|
+
});
|
|
68
|
+
}
|
|
34
69
|
getOpenAIClient() {
|
|
35
70
|
return new openai_1.default({
|
|
36
71
|
apiKey: this.botContext.secrets.AZURE_OPENAI_API_KEY || constants_1.LLM_API_KEY,
|
|
@@ -66,9 +101,17 @@ class LLMConfig {
|
|
|
66
101
|
text: { verbosity: 'medium' },
|
|
67
102
|
};
|
|
68
103
|
}
|
|
69
|
-
|
|
104
|
+
// LiteLLM can proxy any model — fall back to reasoning settings
|
|
105
|
+
return {
|
|
106
|
+
reasoning: { effort: 'none' },
|
|
107
|
+
temperature: 1,
|
|
108
|
+
text: { verbosity },
|
|
109
|
+
};
|
|
70
110
|
}
|
|
71
111
|
getApiVersion() {
|
|
112
|
+
if (this.getProviderName() === constants_1.LLM_PROVIDERS.LITELLM) {
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
72
115
|
if (constants_1.LLM_PROVIDER !== constants_1.LLM_PROVIDERS.AZURE) {
|
|
73
116
|
return 'NOT_API_VERSION_FOR_OPENAI_PROVIDER';
|
|
74
117
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-config.js","sourceRoot":"","sources":["../../src/llm-config.ts"],"names":[],"mappings":";;;;AACA,2CAKuB;AACvB,yDAA4C;AAC5C,
|
|
1
|
+
{"version":3,"file":"llm-config.js","sourceRoot":"","sources":["../../src/llm-config.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/constants.ts
CHANGED
|
@@ -5,10 +5,17 @@ export const HUBTYPE_API_URL =
|
|
|
5
5
|
export const LLM_PROVIDERS = {
|
|
6
6
|
AZURE: 'azure',
|
|
7
7
|
OPENAI: 'openai',
|
|
8
|
+
LITELLM: 'litellm',
|
|
8
9
|
} as const
|
|
9
10
|
|
|
10
11
|
export type LLMProviderType = (typeof LLM_PROVIDERS)[keyof typeof LLM_PROVIDERS]
|
|
11
12
|
|
|
13
|
+
export const LITELLM_TAG_KEYS = {
|
|
14
|
+
BOT_ID: 'bot_id',
|
|
15
|
+
ORG_ID: 'org_id',
|
|
16
|
+
SEPARATOR: ',',
|
|
17
|
+
} as const
|
|
18
|
+
|
|
12
19
|
export const LLM_PROVIDER: LLMProviderType =
|
|
13
20
|
(process.env.LLM_PROVIDER as LLMProviderType) || LLM_PROVIDERS.AZURE
|
|
14
21
|
export const LLM_API_KEY = process.env.LLM_API_KEY // pragma: allowlist secret
|
package/src/llm-config.ts
CHANGED
|
@@ -8,12 +8,14 @@ import {
|
|
|
8
8
|
import OpenAI, { AzureOpenAI } from 'openai'
|
|
9
9
|
import {
|
|
10
10
|
isProd,
|
|
11
|
+
LITELLM_TAG_KEYS,
|
|
11
12
|
LLM_API_KEY,
|
|
12
13
|
LLM_API_URL,
|
|
13
14
|
LLM_AZURE_API_VERSION,
|
|
14
15
|
LLM_OPENAI_MODEL,
|
|
15
16
|
LLM_PROVIDER,
|
|
16
17
|
LLM_PROVIDERS,
|
|
18
|
+
type LLMProviderType,
|
|
17
19
|
} from './constants'
|
|
18
20
|
|
|
19
21
|
export interface LLMConfigParams {
|
|
@@ -60,14 +62,54 @@ export class LLMConfig {
|
|
|
60
62
|
})
|
|
61
63
|
}
|
|
62
64
|
|
|
65
|
+
getProviderName(): LLMProviderType {
|
|
66
|
+
if (
|
|
67
|
+
this.botContext.settings.LITELLM_API_URL ||
|
|
68
|
+
LLM_PROVIDER === LLM_PROVIDERS.LITELLM
|
|
69
|
+
) {
|
|
70
|
+
return LLM_PROVIDERS.LITELLM
|
|
71
|
+
}
|
|
72
|
+
return LLM_PROVIDER
|
|
73
|
+
}
|
|
74
|
+
|
|
63
75
|
private getClient(): OpenAI | AzureOpenAI {
|
|
76
|
+
if (this.getProviderName() === LLM_PROVIDERS.LITELLM) {
|
|
77
|
+
const litellmUrl =
|
|
78
|
+
this.botContext.settings.LITELLM_API_URL || LLM_API_URL || ''
|
|
79
|
+
return this.getLiteLLMClient(litellmUrl)
|
|
80
|
+
}
|
|
64
81
|
if (LLM_PROVIDER === LLM_PROVIDERS.OPENAI) {
|
|
65
82
|
return this.getOpenAIClient()
|
|
66
83
|
}
|
|
67
|
-
|
|
68
84
|
return this.getAzureOpenAiClient()
|
|
69
85
|
}
|
|
70
86
|
|
|
87
|
+
private buildLiteLLMTags(): { 'x-litellm-tags': string } | undefined {
|
|
88
|
+
const botId = this.botContext.session.bot.id
|
|
89
|
+
const orgId = this.botContext.session.organization_id
|
|
90
|
+
const parts: string[] = []
|
|
91
|
+
if (botId) {
|
|
92
|
+
parts.push(`${LITELLM_TAG_KEYS.BOT_ID}:${botId}`)
|
|
93
|
+
}
|
|
94
|
+
if (orgId) {
|
|
95
|
+
parts.push(`${LITELLM_TAG_KEYS.ORG_ID}:${orgId}`)
|
|
96
|
+
}
|
|
97
|
+
return parts.length > 0
|
|
98
|
+
? { 'x-litellm-tags': parts.join(LITELLM_TAG_KEYS.SEPARATOR) }
|
|
99
|
+
: undefined
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
private getLiteLLMClient(litellmUrl: string): OpenAI {
|
|
103
|
+
return new OpenAI({
|
|
104
|
+
apiKey: this.botContext.secrets.LITELLM_API_KEY || LLM_API_KEY,
|
|
105
|
+
baseURL: litellmUrl,
|
|
106
|
+
timeout: this.timeout,
|
|
107
|
+
maxRetries: this.maxRetries,
|
|
108
|
+
dangerouslyAllowBrowser: !isProd,
|
|
109
|
+
defaultHeaders: this.buildLiteLLMTags(),
|
|
110
|
+
})
|
|
111
|
+
}
|
|
112
|
+
|
|
71
113
|
private getOpenAIClient(): OpenAI {
|
|
72
114
|
return new OpenAI({
|
|
73
115
|
apiKey: this.botContext.secrets.AZURE_OPENAI_API_KEY || LLM_API_KEY,
|
|
@@ -112,10 +154,18 @@ export class LLMConfig {
|
|
|
112
154
|
}
|
|
113
155
|
}
|
|
114
156
|
|
|
115
|
-
|
|
157
|
+
// LiteLLM can proxy any model — fall back to reasoning settings
|
|
158
|
+
return {
|
|
159
|
+
reasoning: { effort: 'none' },
|
|
160
|
+
temperature: 1,
|
|
161
|
+
text: { verbosity },
|
|
162
|
+
}
|
|
116
163
|
}
|
|
117
164
|
|
|
118
|
-
getApiVersion(): string {
|
|
165
|
+
getApiVersion(): string | undefined {
|
|
166
|
+
if (this.getProviderName() === LLM_PROVIDERS.LITELLM) {
|
|
167
|
+
return undefined
|
|
168
|
+
}
|
|
119
169
|
if (LLM_PROVIDER !== LLM_PROVIDERS.AZURE) {
|
|
120
170
|
return 'NOT_API_VERSION_FOR_OPENAI_PROVIDER'
|
|
121
171
|
}
|
package/src/services/types.ts
CHANGED