@agentbridgeai/llm 0.1.2 → 0.1.4
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/dist/openai.d.ts +3 -0
- package/dist/openai.d.ts.map +1 -1
- package/dist/openai.js +42 -7
- package/dist/openai.js.map +1 -1
- package/package.json +1 -1
package/dist/openai.d.ts
CHANGED
|
@@ -13,6 +13,9 @@ export declare class OpenAIProvider implements LLMProvider {
|
|
|
13
13
|
private baseURL?;
|
|
14
14
|
constructor(options?: OpenAIProviderOptions);
|
|
15
15
|
chat(messages: Message[], tools: LLMTool[]): Promise<LLMResponse>;
|
|
16
|
+
private createCompletion;
|
|
17
|
+
private preferMaxCompletionTokens;
|
|
18
|
+
private isUnsupportedTokenParamError;
|
|
16
19
|
private convertMessages;
|
|
17
20
|
private parseResponse;
|
|
18
21
|
private enrichProviderError;
|
package/dist/openai.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAY,MAAM,qBAAqB,CAAC;AAEhG,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,cAAe,YAAW,WAAW;IAChD,IAAI,SAAY;IAChB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAC,CAAS;gBAEb,OAAO,GAAE,qBAA0B;IAUzC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAY,MAAM,qBAAqB,CAAC;AAEhG,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,cAAe,YAAW,WAAW;IAChD,IAAI,SAAY;IAChB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAC,CAAS;gBAEb,OAAO,GAAE,qBAA0B;IAUzC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;YAqDzD,gBAAgB;IA6B9B,OAAO,CAAC,yBAAyB;IAMjC,OAAO,CAAC,4BAA4B;IAOpC,OAAO,CAAC,eAAe;IAkCvB,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,mBAAmB;IAmB3B,OAAO,CAAC,cAAc;CAMvB"}
|
package/dist/openai.js
CHANGED
|
@@ -10,7 +10,7 @@ export class OpenAIProvider {
|
|
|
10
10
|
apiKey: options.apiKey,
|
|
11
11
|
baseURL: options.baseURL,
|
|
12
12
|
});
|
|
13
|
-
this.model = options.model ?? 'gpt-
|
|
13
|
+
this.model = options.model ?? 'gpt-5-nano';
|
|
14
14
|
this.maxTokens = options.maxTokens ?? 4096;
|
|
15
15
|
this.baseURL = options.baseURL;
|
|
16
16
|
}
|
|
@@ -25,9 +25,8 @@ export class OpenAIProvider {
|
|
|
25
25
|
},
|
|
26
26
|
}));
|
|
27
27
|
try {
|
|
28
|
-
const response = await this.
|
|
28
|
+
const response = await this.createCompletion({
|
|
29
29
|
model: this.model,
|
|
30
|
-
max_tokens: this.maxTokens,
|
|
31
30
|
messages: openaiMessages,
|
|
32
31
|
tools: openaiTools.length > 0 ? openaiTools : undefined,
|
|
33
32
|
});
|
|
@@ -41,9 +40,8 @@ export class OpenAIProvider {
|
|
|
41
40
|
if (openaiTools.length > 0 && (status === 400 || status === 413)) {
|
|
42
41
|
try {
|
|
43
42
|
const reducedTools = openaiTools.slice(0, Math.max(1, Math.floor(openaiTools.length / 2)));
|
|
44
|
-
const reduced = await this.
|
|
43
|
+
const reduced = await this.createCompletion({
|
|
45
44
|
model: this.model,
|
|
46
|
-
max_tokens: this.maxTokens,
|
|
47
45
|
messages: openaiMessages,
|
|
48
46
|
tools: reducedTools,
|
|
49
47
|
});
|
|
@@ -53,9 +51,8 @@ export class OpenAIProvider {
|
|
|
53
51
|
// Groq often returns malformed function-call errors on tool mode.
|
|
54
52
|
if (status === 413 || status === 400 || msg.includes('Failed to') || msg.includes('no body')) {
|
|
55
53
|
try {
|
|
56
|
-
const fallback = await this.
|
|
54
|
+
const fallback = await this.createCompletion({
|
|
57
55
|
model: this.model,
|
|
58
|
-
max_tokens: this.maxTokens,
|
|
59
56
|
messages: openaiMessages,
|
|
60
57
|
});
|
|
61
58
|
return this.parseResponse(fallback);
|
|
@@ -66,6 +63,44 @@ export class OpenAIProvider {
|
|
|
66
63
|
throw this.enrichProviderError(err);
|
|
67
64
|
}
|
|
68
65
|
}
|
|
66
|
+
async createCompletion(payload) {
|
|
67
|
+
const tokenParamOrder = this.preferMaxCompletionTokens()
|
|
68
|
+
? ['max_completion_tokens', 'max_tokens', 'none']
|
|
69
|
+
: ['max_tokens', 'max_completion_tokens', 'none'];
|
|
70
|
+
let lastUnsupportedError = null;
|
|
71
|
+
for (const tokenParam of tokenParamOrder) {
|
|
72
|
+
try {
|
|
73
|
+
const request = { ...payload };
|
|
74
|
+
if (tokenParam === 'max_tokens')
|
|
75
|
+
request.max_tokens = this.maxTokens;
|
|
76
|
+
if (tokenParam === 'max_completion_tokens')
|
|
77
|
+
request.max_completion_tokens = this.maxTokens;
|
|
78
|
+
return await this.client.chat.completions.create(request);
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
if (this.isUnsupportedTokenParamError(err, tokenParam)) {
|
|
82
|
+
lastUnsupportedError = err;
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
throw err;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
throw lastUnsupportedError ?? new Error('Provider request failed');
|
|
89
|
+
}
|
|
90
|
+
preferMaxCompletionTokens() {
|
|
91
|
+
// OpenAI reasoning/newer models (gpt-5/o-series) expect max_completion_tokens.
|
|
92
|
+
if (!this.baseURL)
|
|
93
|
+
return /^(gpt-5|o1|o3|o4)/i.test(this.model);
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
isUnsupportedTokenParamError(err, tokenParam) {
|
|
97
|
+
if (tokenParam === 'none')
|
|
98
|
+
return false;
|
|
99
|
+
const msg = String(err?.message ?? '');
|
|
100
|
+
if (!msg.toLowerCase().includes('unsupported parameter'))
|
|
101
|
+
return false;
|
|
102
|
+
return msg.includes(`'${tokenParam}'`) || msg.includes(`"${tokenParam}"`);
|
|
103
|
+
}
|
|
69
104
|
convertMessages(messages) {
|
|
70
105
|
const result = [];
|
|
71
106
|
for (const msg of messages) {
|
package/dist/openai.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAU5B,MAAM,OAAO,cAAc;IACzB,IAAI,GAAG,QAAQ,CAAC;IACR,MAAM,CAAS;IACf,KAAK,CAAS;IACd,SAAS,CAAS;IAClB,OAAO,CAAU;IAEzB,YAAY,UAAiC,EAAE;QAC7C,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC;YACvB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":"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"}
|