@zimtsui/brainswitch 0.0.1
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/LICENSE +165 -0
- package/README.md +164 -0
- package/build/adaptor.d.ts +12 -0
- package/build/adaptor.js +62 -0
- package/build/adaptor.js.map +1 -0
- package/build/agentloop.d.ts +12 -0
- package/build/agentloop.js +47 -0
- package/build/agentloop.js.map +1 -0
- package/build/api-types/base.d.ts +21 -0
- package/build/api-types/base.js +37 -0
- package/build/api-types/base.js.map +1 -0
- package/build/api-types/google-base.d.ts +22 -0
- package/build/api-types/google-base.js +142 -0
- package/build/api-types/google-base.js.map +1 -0
- package/build/api-types/google-rest.d.ts +20 -0
- package/build/api-types/google-rest.js +113 -0
- package/build/api-types/google-rest.js.map +1 -0
- package/build/api-types/huggingface-cerebras-qwen3-thinking.d.ts +13 -0
- package/build/api-types/huggingface-cerebras-qwen3-thinking.js +52 -0
- package/build/api-types/huggingface-cerebras-qwen3-thinking.js.map +1 -0
- package/build/api-types/openai-chatcompletions-base.d.ts +28 -0
- package/build/api-types/openai-chatcompletions-base.js +150 -0
- package/build/api-types/openai-chatcompletions-base.js.map +1 -0
- package/build/api-types/openai-chatcompletions-monolith-base.d.ts +10 -0
- package/build/api-types/openai-chatcompletions-monolith-base.js +85 -0
- package/build/api-types/openai-chatcompletions-monolith-base.js.map +1 -0
- package/build/api-types/openai-chatcompletions-stream-base.d.ts +11 -0
- package/build/api-types/openai-chatcompletions-stream-base.js +110 -0
- package/build/api-types/openai-chatcompletions-stream-base.js.map +1 -0
- package/build/api-types/openai-chatcompletions.d.ts +6 -0
- package/build/api-types/openai-chatcompletions.js +10 -0
- package/build/api-types/openai-chatcompletions.js.map +1 -0
- package/build/api-types/openai-responses.d.ts +30 -0
- package/build/api-types/openai-responses.js +216 -0
- package/build/api-types/openai-responses.js.map +1 -0
- package/build/api-types/openrouter-monolith.d.ts +21 -0
- package/build/api-types/openrouter-monolith.js +57 -0
- package/build/api-types/openrouter-monolith.js.map +1 -0
- package/build/api-types/openrouter-stream.d.ts +27 -0
- package/build/api-types/openrouter-stream.js +68 -0
- package/build/api-types/openrouter-stream.js.map +1 -0
- package/build/api-types/qwen.d.ts +11 -0
- package/build/api-types/qwen.js +13 -0
- package/build/api-types/qwen.js.map +1 -0
- package/build/config.d.ts +23 -0
- package/build/config.js +12 -0
- package/build/config.js.map +1 -0
- package/build/endpoint-spec.d.ts +19 -0
- package/build/endpoint-spec.js +28 -0
- package/build/endpoint-spec.js.map +1 -0
- package/build/engine.d.ts +23 -0
- package/build/engine.js +18 -0
- package/build/engine.js.map +1 -0
- package/build/exports.d.ts +9 -0
- package/build/exports.js +10 -0
- package/build/exports.js.map +1 -0
- package/build/function.d.ts +68 -0
- package/build/function.js +41 -0
- package/build/function.js.map +1 -0
- package/build/inference-context.d.ts +15 -0
- package/build/inference-context.js +4 -0
- package/build/inference-context.js.map +1 -0
- package/build/session.d.ts +55 -0
- package/build/session.js +78 -0
- package/build/session.js.map +1 -0
- package/build/test.d.ts +1 -0
- package/build/test.js +23 -0
- package/build/test.js.map +1 -0
- package/build/throttle.d.ts +14 -0
- package/build/throttle.js +50 -0
- package/build/throttle.js.map +1 -0
- package/build/tsconfig.tsbuildinfo +1 -0
- package/package.json +38 -0
- package/typedoc.json +8 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { Engine } from "../engine.js";
|
|
2
|
+
import { RoleMessage } from "../session.js";
|
|
3
|
+
import { Function } from "../function.js";
|
|
4
|
+
import * as Google from '@google/genai';
|
|
5
|
+
import assert from 'node:assert';
|
|
6
|
+
import { APIBase, TransientError } from "./base.js";
|
|
7
|
+
import Ajv from 'ajv';
|
|
8
|
+
const ajv = new Ajv();
|
|
9
|
+
export class GoogleAPIBase extends APIBase {
|
|
10
|
+
constructor(options) {
|
|
11
|
+
super(options);
|
|
12
|
+
}
|
|
13
|
+
convertFromFunctionCall(fc) {
|
|
14
|
+
return {
|
|
15
|
+
id: fc.id,
|
|
16
|
+
name: fc.name,
|
|
17
|
+
args: fc.args,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
convertToFunctionCall(googlefc) {
|
|
21
|
+
assert(googlefc.name);
|
|
22
|
+
const fditem = this.functionDeclarationMap[googlefc.name];
|
|
23
|
+
assert(fditem);
|
|
24
|
+
assert(ajv.validate(fditem.paraschema, googlefc.args), new TransientError('Invalid function call', { cause: googlefc }));
|
|
25
|
+
return Function.Call.create({
|
|
26
|
+
id: googlefc.id,
|
|
27
|
+
name: googlefc.name,
|
|
28
|
+
args: googlefc.args,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
convertFromUserMessage(userMessage) {
|
|
32
|
+
const parts = userMessage.parts.map(part => {
|
|
33
|
+
if (part instanceof RoleMessage.Text)
|
|
34
|
+
return Google.createPartFromText(part.text);
|
|
35
|
+
else if (part instanceof Function.Response)
|
|
36
|
+
return {
|
|
37
|
+
functionResponse: { id: part.id, name: part.name, response: { returnValue: part.text } },
|
|
38
|
+
};
|
|
39
|
+
else
|
|
40
|
+
throw new Error();
|
|
41
|
+
});
|
|
42
|
+
return Google.createUserContent(parts);
|
|
43
|
+
}
|
|
44
|
+
convertFromAIMessage(aiMessage) {
|
|
45
|
+
if (aiMessage instanceof GoogleAIMessage)
|
|
46
|
+
return aiMessage.raw;
|
|
47
|
+
else {
|
|
48
|
+
const parts = aiMessage.parts.map(part => {
|
|
49
|
+
if (part instanceof RoleMessage.Text)
|
|
50
|
+
return Google.createPartFromText(part.text);
|
|
51
|
+
else if (part instanceof Function.Call) {
|
|
52
|
+
assert(part.args instanceof Object);
|
|
53
|
+
return Google.createPartFromFunctionCall(part.name, part.args);
|
|
54
|
+
}
|
|
55
|
+
else
|
|
56
|
+
throw new Error();
|
|
57
|
+
});
|
|
58
|
+
return Google.createModelContent(parts);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
convertFromDeveloperMessage(developerMessage) {
|
|
62
|
+
const parts = developerMessage.parts.map(part => Google.createPartFromText(part.text));
|
|
63
|
+
return { parts };
|
|
64
|
+
}
|
|
65
|
+
convertFromChatMessages(chatMessages) {
|
|
66
|
+
return chatMessages.map(chatMessage => {
|
|
67
|
+
if (chatMessage instanceof RoleMessage.User)
|
|
68
|
+
return this.convertFromUserMessage(chatMessage);
|
|
69
|
+
else if (chatMessage instanceof RoleMessage.AI)
|
|
70
|
+
return this.convertFromAIMessage(chatMessage);
|
|
71
|
+
else
|
|
72
|
+
throw new Error();
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
convertToAIMessage(content) {
|
|
76
|
+
assert(content.parts);
|
|
77
|
+
return new GoogleAIMessage(content.parts.flatMap(part => {
|
|
78
|
+
const parts = [];
|
|
79
|
+
if (part.text)
|
|
80
|
+
parts.push(new RoleMessage.Text(part.text));
|
|
81
|
+
if (part.functionCall)
|
|
82
|
+
parts.push(this.convertToFunctionCall(part.functionCall));
|
|
83
|
+
return parts;
|
|
84
|
+
}), content);
|
|
85
|
+
}
|
|
86
|
+
convertFromFunctionDeclarationEntry(fdentry) {
|
|
87
|
+
const json = JSON.stringify(fdentry[1].paraschema);
|
|
88
|
+
const parsed = JSON.parse(json, (key, value) => {
|
|
89
|
+
if (key === 'type' && typeof value === 'string') {
|
|
90
|
+
if (value === 'string')
|
|
91
|
+
return Google.Type.STRING;
|
|
92
|
+
else if (value === 'number')
|
|
93
|
+
return Google.Type.NUMBER;
|
|
94
|
+
else if (value === 'boolean')
|
|
95
|
+
return Google.Type.BOOLEAN;
|
|
96
|
+
else if (value === 'object')
|
|
97
|
+
return Google.Type.OBJECT;
|
|
98
|
+
else if (value === 'array')
|
|
99
|
+
return Google.Type.ARRAY;
|
|
100
|
+
else
|
|
101
|
+
throw new Error();
|
|
102
|
+
}
|
|
103
|
+
else if (key === 'additionalProperties' && typeof value === 'boolean')
|
|
104
|
+
return;
|
|
105
|
+
else
|
|
106
|
+
return value;
|
|
107
|
+
});
|
|
108
|
+
return {
|
|
109
|
+
name: fdentry[0],
|
|
110
|
+
description: fdentry[1].description,
|
|
111
|
+
parameters: parsed,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
convertFromFunctionCallMode(mode) {
|
|
115
|
+
if (mode === Function.ToolChoice.NONE)
|
|
116
|
+
return { mode: Google.FunctionCallingConfigMode.NONE };
|
|
117
|
+
else if (mode === Function.ToolChoice.REQUIRED)
|
|
118
|
+
return { mode: Google.FunctionCallingConfigMode.ANY };
|
|
119
|
+
else if (mode === Function.ToolChoice.AUTO)
|
|
120
|
+
return { mode: Google.FunctionCallingConfigMode.AUTO };
|
|
121
|
+
else
|
|
122
|
+
return { mode: Google.FunctionCallingConfigMode.ANY, allowedFunctionNames: [...mode] };
|
|
123
|
+
}
|
|
124
|
+
validateFunctionCallByToolChoice(aiMessage) {
|
|
125
|
+
const functionCalls = aiMessage.getFunctionCalls();
|
|
126
|
+
if (this.toolChoice === Function.ToolChoice.REQUIRED)
|
|
127
|
+
assert(functionCalls.length, new TransientError('No function call'));
|
|
128
|
+
else if (this.toolChoice instanceof Array)
|
|
129
|
+
for (const fc of functionCalls)
|
|
130
|
+
assert(this.toolChoice.includes(fc.name), new TransientError('Invalid function call', { cause: fc }));
|
|
131
|
+
else if (this.toolChoice === Function.ToolChoice.NONE)
|
|
132
|
+
assert(!functionCalls.length, new TransientError('No function should be called.'));
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
export class GoogleAIMessage extends RoleMessage.AI {
|
|
136
|
+
raw;
|
|
137
|
+
constructor(parts, raw) {
|
|
138
|
+
super(parts);
|
|
139
|
+
this.raw = raw;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=google-base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-base.js","sourceRoot":"","sources":["../../src/api-types/google-base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Engine } from '../engine.ts';
|
|
2
|
+
import { Function } from '../function.ts';
|
|
3
|
+
import * as Google from '@google/genai';
|
|
4
|
+
import { GoogleAPIBase } from './google-base.ts';
|
|
5
|
+
export interface GoogleRESTfulRequest {
|
|
6
|
+
contents: Google.Content[];
|
|
7
|
+
tools?: Google.Tool[];
|
|
8
|
+
toolConfig?: Google.ToolConfig;
|
|
9
|
+
systemInstruction?: Google.Content;
|
|
10
|
+
generationConfig?: Google.GenerationConfig;
|
|
11
|
+
}
|
|
12
|
+
export declare class GoogleRESTfulAPI<in out fdm extends Function.Declaration.Map = {}> extends GoogleAPIBase<fdm> {
|
|
13
|
+
private proxyAgent?;
|
|
14
|
+
private apiURL;
|
|
15
|
+
private tokenizerURL;
|
|
16
|
+
protected constructor(options: Engine.Options<fdm>);
|
|
17
|
+
static create<fdm extends Function.Declaration.Map = {}>(options: Engine.Options<fdm>): Engine<Function.Declaration.From<fdm>>;
|
|
18
|
+
private tokenize;
|
|
19
|
+
private monolith;
|
|
20
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { Engine } from "../engine.js";
|
|
2
|
+
import {} from "../session.js";
|
|
3
|
+
import { Function } from "../function.js";
|
|
4
|
+
import * as Google from '@google/genai';
|
|
5
|
+
import assert from 'node:assert';
|
|
6
|
+
import { GoogleAIMessage, GoogleAPIBase } from "./google-base.js";
|
|
7
|
+
import { ProxyAgent, fetch } from 'undici';
|
|
8
|
+
import {} from "../inference-context.js";
|
|
9
|
+
import { TransientError } from "./base.js";
|
|
10
|
+
export class GoogleRESTfulAPI extends GoogleAPIBase {
|
|
11
|
+
proxyAgent;
|
|
12
|
+
apiURL;
|
|
13
|
+
tokenizerURL;
|
|
14
|
+
constructor(options) {
|
|
15
|
+
super(options);
|
|
16
|
+
this.proxyAgent = options.proxy ? new ProxyAgent(options.proxy) : undefined;
|
|
17
|
+
this.apiURL = new URL(`${this.baseUrl}/v1beta/models/${this.model}:generateContent`);
|
|
18
|
+
this.tokenizerURL = new URL(`${this.baseUrl}/v1beta/models/${this.model}:countTokens`);
|
|
19
|
+
}
|
|
20
|
+
static create(options) {
|
|
21
|
+
const api = new GoogleRESTfulAPI(options);
|
|
22
|
+
return api.monolith.bind(api);
|
|
23
|
+
}
|
|
24
|
+
async tokenize(contents, ctx) {
|
|
25
|
+
const reqbody = { contents };
|
|
26
|
+
const res = await fetch(this.tokenizerURL, {
|
|
27
|
+
method: 'POST',
|
|
28
|
+
headers: new Headers({
|
|
29
|
+
'Content-Type': 'application/json',
|
|
30
|
+
'x-goog-api-key': this.apiKey,
|
|
31
|
+
}),
|
|
32
|
+
body: JSON.stringify(reqbody),
|
|
33
|
+
dispatcher: this.proxyAgent,
|
|
34
|
+
signal: ctx.signal,
|
|
35
|
+
});
|
|
36
|
+
assert(res.ok, new Error(undefined, { cause: res }));
|
|
37
|
+
const response = await res.json();
|
|
38
|
+
assert(response.totalTokens, new Error(undefined, { cause: response }));
|
|
39
|
+
return response.totalTokens;
|
|
40
|
+
}
|
|
41
|
+
async monolith(ctx, session, retry = 0) {
|
|
42
|
+
try {
|
|
43
|
+
const systemInstruction = session.developerMessage && this.convertFromDeveloperMessage(session.developerMessage);
|
|
44
|
+
const contents = this.convertFromChatMessages(session.chatMessages);
|
|
45
|
+
await this.throttle.requests(ctx);
|
|
46
|
+
await this.throttle.inputTokens(await this.tokenize(contents, ctx), ctx);
|
|
47
|
+
const reqbody = {
|
|
48
|
+
contents,
|
|
49
|
+
tools: Object.keys(this.functionDeclarationMap).length ? [{
|
|
50
|
+
functionDeclarations: Object.entries(this.functionDeclarationMap).map(fdentry => this.convertFromFunctionDeclarationEntry(fdentry)),
|
|
51
|
+
}] : undefined,
|
|
52
|
+
toolConfig: Object.keys(this.functionDeclarationMap).length && this.toolChoice ? {
|
|
53
|
+
functionCallingConfig: this.convertFromFunctionCallMode(this.toolChoice),
|
|
54
|
+
} : undefined,
|
|
55
|
+
systemInstruction,
|
|
56
|
+
generationConfig: this.customOptions ?? undefined,
|
|
57
|
+
};
|
|
58
|
+
ctx.logger.message?.trace(reqbody);
|
|
59
|
+
const signal = this.timeout && ctx.signal ? AbortSignal.any([
|
|
60
|
+
ctx.signal,
|
|
61
|
+
AbortSignal.timeout(this.timeout),
|
|
62
|
+
]) : this.timeout ? AbortSignal.timeout(this.timeout) : ctx.signal;
|
|
63
|
+
const res = await fetch(this.apiURL, {
|
|
64
|
+
method: 'POST',
|
|
65
|
+
headers: new Headers({
|
|
66
|
+
'Content-Type': 'application/json',
|
|
67
|
+
'x-goog-api-key': this.apiKey,
|
|
68
|
+
}),
|
|
69
|
+
body: JSON.stringify(reqbody),
|
|
70
|
+
dispatcher: this.proxyAgent,
|
|
71
|
+
signal,
|
|
72
|
+
});
|
|
73
|
+
ctx.logger.message?.trace(res);
|
|
74
|
+
assert(res.ok, new Error(undefined, { cause: res }));
|
|
75
|
+
const response = await res.json();
|
|
76
|
+
assert(response.candidates?.[0]?.content?.parts, new TransientError('No content parts', { cause: response }));
|
|
77
|
+
assert(response.candidates[0].finishReason === Google.FinishReason.STOP, new TransientError('Abnormal finish reason', { cause: response }));
|
|
78
|
+
const text = response.candidates[0].content.parts.filter(part => part.text).map(part => part.text).join('');
|
|
79
|
+
if (text)
|
|
80
|
+
ctx.logger.inference?.debug(text + '\n');
|
|
81
|
+
const apiFunctionCalls = response.candidates[0].content.parts.filter(part => part.functionCall);
|
|
82
|
+
if (apiFunctionCalls.length)
|
|
83
|
+
ctx.logger.message?.debug(apiFunctionCalls);
|
|
84
|
+
ctx.logger.message?.debug(response.usageMetadata);
|
|
85
|
+
assert(response.usageMetadata?.promptTokenCount, new Error('Prompt token count absent', { cause: response }));
|
|
86
|
+
const candidatesTokenCount = response.usageMetadata.candidatesTokenCount ?? 0;
|
|
87
|
+
const cacheHitTokenCount = response.usageMetadata.cachedContentTokenCount ?? 0;
|
|
88
|
+
const cacheMissTokenCount = response.usageMetadata.promptTokenCount - cacheHitTokenCount;
|
|
89
|
+
const thinkingTokenCount = response.usageMetadata.thoughtsTokenCount ?? 0;
|
|
90
|
+
this.throttle.outputTokens(candidatesTokenCount);
|
|
91
|
+
this.throttle.outputTokens(thinkingTokenCount);
|
|
92
|
+
const cost = this.inputPrice * cacheMissTokenCount / 1e6 +
|
|
93
|
+
this.cachedPrice * cacheHitTokenCount / 1e6 +
|
|
94
|
+
this.outputPrice * candidatesTokenCount / 1e6 +
|
|
95
|
+
this.outputPrice * thinkingTokenCount / 1e6;
|
|
96
|
+
ctx.logger.cost?.(cost);
|
|
97
|
+
const aiMessage = this.convertToAIMessage(response.candidates[0].content);
|
|
98
|
+
this.validateFunctionCallByToolChoice(aiMessage);
|
|
99
|
+
return aiMessage;
|
|
100
|
+
}
|
|
101
|
+
catch (e) {
|
|
102
|
+
if (e instanceof TransientError) { } // 模型抽风
|
|
103
|
+
else
|
|
104
|
+
throw e;
|
|
105
|
+
ctx.logger.message?.warn(e);
|
|
106
|
+
if (retry < 3)
|
|
107
|
+
return this.monolith(ctx, session, retry + 1);
|
|
108
|
+
else
|
|
109
|
+
throw e;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=google-rest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-rest.js","sourceRoot":"","sources":["../../src/api-types/google-rest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Engine } from '../engine.ts';
|
|
2
|
+
import { Function } from '../function.ts';
|
|
3
|
+
import OpenAI from 'openai';
|
|
4
|
+
import { OpenAIChatCompletionsMonolithAPIBase } from './openai-chatcompletions-monolith-base.ts';
|
|
5
|
+
import { RoleMessage } from '../session.ts';
|
|
6
|
+
export declare class HuggingFaceCerebrasQwen3ThinkingAPI<in out fdm extends Function.Declaration.Map = {}> extends OpenAIChatCompletionsMonolithAPIBase<fdm> {
|
|
7
|
+
static create<fdm extends Function.Declaration.Map = never>(options: Engine.Options<fdm>): Engine<Function.Declaration.From<fdm>>;
|
|
8
|
+
protected convertFromDeveloperMessage(developerMessage: RoleMessage.Developer): OpenAI.ChatCompletionSystemMessageParam;
|
|
9
|
+
protected convertFromUserMessage(userMessage: RoleMessage.User<Function.Declaration.From<fdm>>): [OpenAI.ChatCompletionUserMessageParam] | OpenAI.ChatCompletionToolMessageParam[];
|
|
10
|
+
protected convertFromAIMessage(aiMessage: RoleMessage.AI<Function.Declaration.From<fdm>>): OpenAI.ChatCompletionAssistantMessageParam;
|
|
11
|
+
protected convertFromFunctionResponse(fr: Function.Response.Distributive<Function.Declaration.From<fdm>>): OpenAI.ChatCompletionToolMessageParam;
|
|
12
|
+
protected extractContent(completionContent: string): string;
|
|
13
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Engine } from "../engine.js";
|
|
2
|
+
import { Function } from "../function.js";
|
|
3
|
+
import OpenAI from 'openai';
|
|
4
|
+
import { OpenAIChatCompletionsMonolithAPIBase } from "./openai-chatcompletions-monolith-base.js";
|
|
5
|
+
import { RoleMessage } from "../session.js";
|
|
6
|
+
import assert from 'node:assert';
|
|
7
|
+
import { TransientError } from "./base.js";
|
|
8
|
+
export class HuggingFaceCerebrasQwen3ThinkingAPI extends OpenAIChatCompletionsMonolithAPIBase {
|
|
9
|
+
static create(options) {
|
|
10
|
+
const api = new HuggingFaceCerebrasQwen3ThinkingAPI(options);
|
|
11
|
+
return api.monolith.bind(api);
|
|
12
|
+
}
|
|
13
|
+
convertFromDeveloperMessage(developerMessage) {
|
|
14
|
+
return {
|
|
15
|
+
role: 'system',
|
|
16
|
+
content: developerMessage.getOnlyText(),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
convertFromUserMessage(userMessage) {
|
|
20
|
+
const textParts = userMessage.parts.filter(part => part instanceof RoleMessage.Text);
|
|
21
|
+
const frs = userMessage.getFunctionResponses();
|
|
22
|
+
if (textParts.length && !frs.length)
|
|
23
|
+
return [{ role: 'user', content: textParts.map(part => part.text).join('') }];
|
|
24
|
+
else if (!textParts.length && frs.length)
|
|
25
|
+
return frs.map(fr => this.convertFromFunctionResponse(fr));
|
|
26
|
+
else
|
|
27
|
+
throw new Error();
|
|
28
|
+
}
|
|
29
|
+
convertFromAIMessage(aiMessage) {
|
|
30
|
+
const textParts = aiMessage.parts.filter(part => part instanceof RoleMessage.Text);
|
|
31
|
+
const fcParts = aiMessage.parts.filter(part => part instanceof Function.Call);
|
|
32
|
+
return {
|
|
33
|
+
role: 'assistant',
|
|
34
|
+
content: textParts.length ? textParts.map(part => part.text).join('') : undefined,
|
|
35
|
+
tool_calls: fcParts.length ? fcParts.map(fc => this.convertFromFunctionCall(fc)) : undefined,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
convertFromFunctionResponse(fr) {
|
|
39
|
+
assert(fr.id);
|
|
40
|
+
return {
|
|
41
|
+
role: 'tool',
|
|
42
|
+
tool_call_id: fr.id,
|
|
43
|
+
content: fr.text,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
extractContent(completionContent) {
|
|
47
|
+
const match = completionContent.match(/(?:<think>)?(?<thoughts>.*?)<\/think>(?<content>.*)/us);
|
|
48
|
+
assert(match, new TransientError('Response doesn\'t conform to the expected pattern.', { cause: completionContent }));
|
|
49
|
+
return match.groups.content.trimStart();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=huggingface-cerebras-qwen3-thinking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"huggingface-cerebras-qwen3-thinking.js","sourceRoot":"","sources":["../../src/api-types/huggingface-cerebras-qwen3-thinking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,oCAAoC,EAAE,MAAM,2CAA2C,CAAC;AACjG,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAI3C,MAAM,OAAO,mCAAsF,SAAQ,oCAAyC;IAC5I,MAAM,CAAC,MAAM,CAA+C,OAA4B;QAC9F,MAAM,GAAG,GAAG,IAAI,mCAAmC,CAAC,OAAO,CAAC,CAAC;QAC7D,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAEkB,2BAA2B,CAAC,gBAAuC;QACrF,OAAO;YACN,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,gBAAgB,CAAC,WAAW,EAAE;SACvC,CAAC;IACH,CAAC;IACkB,sBAAsB,CAAC,WAA6D;QACtG,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,YAAY,WAAW,CAAC,IAAI,CAAC,CAAC;QACrF,MAAM,GAAG,GAAG,WAAW,CAAC,oBAAoB,EAAE,CAAC;QAC/C,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM;YAClC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aAC1E,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM;YACvC,OAAO,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC,CAAC;;YACvD,MAAM,IAAI,KAAK,EAAE,CAAC;IACxB,CAAC;IACkB,oBAAoB,CAAC,SAAyD;QAChG,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,YAAY,WAAW,CAAC,IAAI,CAAC,CAAC;QACnF,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,YAAY,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9E,OAAO;YACN,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;YACjF,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;SAC5F,CAAC;IACH,CAAC;IACkB,2BAA2B,CAAC,EAAkE;QAChH,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACd,OAAO;YACN,IAAI,EAAE,MAAM;YACZ,YAAY,EAAE,EAAE,CAAC,EAAE;YACnB,OAAO,EAAE,EAAE,CAAC,IAAI;SAChB,CAAC;IACH,CAAC;IAEkB,cAAc,CAAC,iBAAyB;QAC1D,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC/F,MAAM,CAAC,KAAK,EAAE,IAAI,cAAc,CAAC,oDAAoD,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC;QACtH,OAAO,KAAK,CAAC,MAAO,CAAC,OAAQ,CAAC,SAAS,EAAE,CAAC;IAC3C,CAAC;CACD"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Engine } from '../engine.ts';
|
|
2
|
+
import { RoleMessage } from '../session.ts';
|
|
3
|
+
import { Function } from '../function.ts';
|
|
4
|
+
import OpenAI from 'openai';
|
|
5
|
+
import { APIBase } from './base.ts';
|
|
6
|
+
import { ProxyAgent } from 'undici';
|
|
7
|
+
export declare abstract class OpenAIChatCompletionsAPIBase<in out fdm extends Function.Declaration.Map = {}> extends APIBase<fdm> {
|
|
8
|
+
protected client: OpenAI;
|
|
9
|
+
protected proxyAgent?: ProxyAgent;
|
|
10
|
+
protected constructor(options: Engine.Options<fdm>);
|
|
11
|
+
protected convertFromFunctionCall(fc: Function.Call.Distributive<Function.Declaration.From<fdm>>): OpenAI.ChatCompletionMessageToolCall;
|
|
12
|
+
protected convertToFunctionCall(apifc: OpenAI.ChatCompletionMessageFunctionToolCall): Function.Call.Distributive<Function.Declaration.From<fdm>>;
|
|
13
|
+
protected convertFromFunctionResponse(fr: Function.Response.Distributive<Function.Declaration.From<fdm>>): OpenAI.ChatCompletionToolMessageParam;
|
|
14
|
+
protected convertFromDeveloperMessage(developerMessage: RoleMessage.Developer): OpenAI.ChatCompletionSystemMessageParam;
|
|
15
|
+
protected convertFromUserMessage(userMessage: RoleMessage.User<Function.Declaration.From<fdm>>): [OpenAI.ChatCompletionUserMessageParam] | OpenAI.ChatCompletionToolMessageParam[];
|
|
16
|
+
protected convertFromAIMessage(aiMessage: RoleMessage.AI<Function.Declaration.From<fdm>>): OpenAI.ChatCompletionAssistantMessageParam;
|
|
17
|
+
protected convertFromRoleMessage(roleMessage: RoleMessage<Function.Declaration.From<fdm>>): OpenAI.ChatCompletionMessageParam[];
|
|
18
|
+
protected convertFromFunctionDeclarationEntry(fdentry: Function.Declaration.Entry.From<fdm>): OpenAI.ChatCompletionTool;
|
|
19
|
+
protected convertFromFunctionCallMode(mode: Function.ToolChoice<fdm>): OpenAI.ChatCompletionToolChoiceOption;
|
|
20
|
+
protected validateFunctionCallByToolChoice(fcs: Function.Call.Distributive<Function.Declaration.From<fdm>>[]): void;
|
|
21
|
+
protected tokenize(params: OpenAI.ChatCompletionCreateParams): number;
|
|
22
|
+
protected calcCost(usage: OpenAI.CompletionUsage): number;
|
|
23
|
+
protected extractContent(completionContent: string): string;
|
|
24
|
+
}
|
|
25
|
+
export declare class InvalidFinishReason extends Error {
|
|
26
|
+
finishReason: OpenAI.ChatCompletionChunk.Choice['finish_reason'];
|
|
27
|
+
constructor(finishReason: OpenAI.ChatCompletionChunk.Choice['finish_reason']);
|
|
28
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { Engine } from "../engine.js";
|
|
2
|
+
import { RoleMessage } from "../session.js";
|
|
3
|
+
import { Function } from "../function.js";
|
|
4
|
+
import OpenAI from 'openai';
|
|
5
|
+
import assert from 'node:assert';
|
|
6
|
+
import { APIBase, TransientError } from "./base.js";
|
|
7
|
+
import { ProxyAgent } from 'undici';
|
|
8
|
+
import { Ajv } from 'ajv';
|
|
9
|
+
const ajv = new Ajv();
|
|
10
|
+
export class OpenAIChatCompletionsAPIBase extends APIBase {
|
|
11
|
+
client;
|
|
12
|
+
proxyAgent;
|
|
13
|
+
constructor(options) {
|
|
14
|
+
super(options);
|
|
15
|
+
this.proxyAgent = options.proxy ? new ProxyAgent(options.proxy) : undefined;
|
|
16
|
+
this.client = new OpenAI({
|
|
17
|
+
baseURL: this.baseUrl,
|
|
18
|
+
apiKey: this.apiKey,
|
|
19
|
+
fetchOptions: {
|
|
20
|
+
dispatcher: this.proxyAgent,
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
convertFromFunctionCall(fc) {
|
|
25
|
+
assert(fc.id);
|
|
26
|
+
return {
|
|
27
|
+
id: fc.id,
|
|
28
|
+
type: 'function',
|
|
29
|
+
function: {
|
|
30
|
+
name: fc.name,
|
|
31
|
+
arguments: JSON.stringify(fc.args),
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
convertToFunctionCall(apifc) {
|
|
36
|
+
const fditem = this.functionDeclarationMap[apifc.function.name];
|
|
37
|
+
assert(fditem, new TransientError('Invalid function call', { cause: apifc }));
|
|
38
|
+
const args = (() => {
|
|
39
|
+
try {
|
|
40
|
+
return JSON.parse(apifc.function.arguments);
|
|
41
|
+
}
|
|
42
|
+
catch (e) {
|
|
43
|
+
return new TransientError('Invalid function call', { cause: apifc });
|
|
44
|
+
}
|
|
45
|
+
})();
|
|
46
|
+
assert(ajv.validate(fditem.paraschema, args), new TransientError('Invalid function call', { cause: apifc }));
|
|
47
|
+
return Function.Call.create({
|
|
48
|
+
id: apifc.id,
|
|
49
|
+
name: apifc.function.name,
|
|
50
|
+
args,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
convertFromFunctionResponse(fr) {
|
|
54
|
+
assert(fr.id);
|
|
55
|
+
return {
|
|
56
|
+
role: 'tool',
|
|
57
|
+
tool_call_id: fr.id,
|
|
58
|
+
content: [{ type: 'text', text: fr.text }],
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
convertFromDeveloperMessage(developerMessage) {
|
|
62
|
+
return {
|
|
63
|
+
role: 'system',
|
|
64
|
+
content: [{ type: 'text', text: developerMessage.getOnlyText() }],
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
convertFromUserMessage(userMessage) {
|
|
68
|
+
const textParts = userMessage.parts.filter(part => part instanceof RoleMessage.Text);
|
|
69
|
+
const frs = userMessage.getFunctionResponses();
|
|
70
|
+
if (textParts.length && !frs.length)
|
|
71
|
+
return [{ role: 'user', content: textParts.map(part => ({ type: 'text', text: part.text })) }];
|
|
72
|
+
else if (!textParts.length && frs.length)
|
|
73
|
+
return frs.map(fr => this.convertFromFunctionResponse(fr));
|
|
74
|
+
else
|
|
75
|
+
throw new Error();
|
|
76
|
+
}
|
|
77
|
+
convertFromAIMessage(aiMessage) {
|
|
78
|
+
const textParts = aiMessage.parts.filter(part => part instanceof RoleMessage.Text);
|
|
79
|
+
const fcParts = aiMessage.parts.filter(part => part instanceof Function.Call);
|
|
80
|
+
return {
|
|
81
|
+
role: 'assistant',
|
|
82
|
+
content: textParts.length ? textParts.map(part => ({ type: 'text', text: part.text })) : undefined,
|
|
83
|
+
tool_calls: fcParts.length ? fcParts.map(fc => this.convertFromFunctionCall(fc)) : undefined,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
convertFromRoleMessage(roleMessage) {
|
|
87
|
+
if (roleMessage instanceof RoleMessage.Developer)
|
|
88
|
+
return [this.convertFromDeveloperMessage(roleMessage)];
|
|
89
|
+
else if (roleMessage instanceof RoleMessage.User)
|
|
90
|
+
return this.convertFromUserMessage(roleMessage);
|
|
91
|
+
else if (roleMessage instanceof RoleMessage.AI)
|
|
92
|
+
return [this.convertFromAIMessage(roleMessage)];
|
|
93
|
+
else
|
|
94
|
+
throw new Error();
|
|
95
|
+
}
|
|
96
|
+
convertFromFunctionDeclarationEntry(fdentry) {
|
|
97
|
+
return {
|
|
98
|
+
type: 'function',
|
|
99
|
+
function: {
|
|
100
|
+
name: fdentry[0],
|
|
101
|
+
description: fdentry[1].description,
|
|
102
|
+
strict: true,
|
|
103
|
+
parameters: fdentry[1].paraschema,
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
convertFromFunctionCallMode(mode) {
|
|
108
|
+
if (mode === Function.ToolChoice.NONE)
|
|
109
|
+
return 'none';
|
|
110
|
+
else if (mode === Function.ToolChoice.REQUIRED)
|
|
111
|
+
return 'required';
|
|
112
|
+
else if (mode === Function.ToolChoice.AUTO)
|
|
113
|
+
return 'auto';
|
|
114
|
+
else {
|
|
115
|
+
assert(mode.length === 1);
|
|
116
|
+
return { type: 'function', function: { name: mode[0] } };
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
validateFunctionCallByToolChoice(fcs) {
|
|
120
|
+
// https://community.openai.com/t/function-call-with-finish-reason-of-stop/437226/7
|
|
121
|
+
if (this.toolChoice === Function.ToolChoice.REQUIRED)
|
|
122
|
+
assert(fcs.length, new TransientError());
|
|
123
|
+
else if (this.toolChoice instanceof Array)
|
|
124
|
+
for (const fc of fcs)
|
|
125
|
+
assert(this.toolChoice.includes(fc.name), new TransientError());
|
|
126
|
+
else if (this.toolChoice === Function.ToolChoice.NONE)
|
|
127
|
+
assert(!fcs.length, new TransientError());
|
|
128
|
+
}
|
|
129
|
+
tokenize(params) {
|
|
130
|
+
return JSON.stringify(params).length;
|
|
131
|
+
}
|
|
132
|
+
calcCost(usage) {
|
|
133
|
+
const cacheHitTokenCount = usage.prompt_tokens_details?.cached_tokens ?? 0;
|
|
134
|
+
const cacheMissTokenCount = usage.prompt_tokens - cacheHitTokenCount;
|
|
135
|
+
return this.inputPrice * cacheMissTokenCount / 1e6 +
|
|
136
|
+
this.cachedPrice * cacheHitTokenCount / 1e6 +
|
|
137
|
+
this.outputPrice * usage.completion_tokens / 1e6;
|
|
138
|
+
}
|
|
139
|
+
extractContent(completionContent) {
|
|
140
|
+
return completionContent;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
export class InvalidFinishReason extends Error {
|
|
144
|
+
finishReason;
|
|
145
|
+
constructor(finishReason) {
|
|
146
|
+
super();
|
|
147
|
+
this.finishReason = finishReason;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=openai-chatcompletions-base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-chatcompletions-base.js","sourceRoot":"","sources":["../../src/api-types/openai-chatcompletions-base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAG1B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;AAGtB,MAAM,OAAgB,4BAA+E,SAAQ,OAAY;IAC9G,MAAM,CAAS;IACf,UAAU,CAAc;IAElC,YAAsB,OAA4B;QACjD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5E,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC;YACxB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,YAAY,EAAE;gBACb,UAAU,EAAE,IAAI,CAAC,UAAU;aAC3B;SACD,CAAC,CAAC;IACJ,CAAC;IAES,uBAAuB,CAAC,EAA8D;QAC/F,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACd,OAAO;YACN,EAAE,EAAE,EAAE,CAAC,EAAE;YACT,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACT,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC;aAClC;SACD,CAAC;IACH,CAAC;IACS,qBAAqB,CAAC,KAAmD;QAClF,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAwC,CAAC;QACvG,MAAM,CAAC,MAAM,EAAE,IAAI,cAAc,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC9E,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE;YAClB,IAAI,CAAC;gBACJ,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC7C,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,OAAO,IAAI,cAAc,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACtE,CAAC;QACF,CAAC,CAAC,EAAE,CAAC;QACL,MAAM,CACL,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,EACrC,IAAI,cAAc,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAC7D,CAAC;QACF,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;YAC3B,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI;YACzB,IAAI;SAC4D,CAAC,CAAC;IACpE,CAAC;IAGS,2BAA2B,CAAC,EAAkE;QACvG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACd,OAAO;YACN,IAAI,EAAE,MAAM;YACZ,YAAY,EAAE,EAAE,CAAC,EAAE;YACnB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;SAC1C,CAAC;IACH,CAAC;IACS,2BAA2B,CAAC,gBAAuC;QAC5E,OAAO;YACN,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,CAAC,WAAW,EAAE,EAAE,CAAC;SACjE,CAAC;IACH,CAAC;IACS,sBAAsB,CAAC,WAA6D;QAC7F,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,YAAY,WAAW,CAAC,IAAI,CAAC,CAAC;QACrF,MAAM,GAAG,GAAG,WAAW,CAAC,oBAAoB,EAAE,CAAC;QAC/C,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM;YAClC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;aAC3F,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM;YACvC,OAAO,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC,CAAC;;YACvD,MAAM,IAAI,KAAK,EAAE,CAAC;IACxB,CAAC;IACS,oBAAoB,CAAC,SAAyD;QACvF,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,YAAY,WAAW,CAAC,IAAI,CAAC,CAAC;QACnF,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,YAAY,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9E,OAAO;YACN,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;YAClG,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;SAC5F,CAAC;IACH,CAAC;IACS,sBAAsB,CAAC,WAAwD;QACxF,IAAI,WAAW,YAAY,WAAW,CAAC,SAAS;YAC/C,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,WAAW,CAAC,CAAC,CAAC;aACnD,IAAI,WAAW,YAAY,WAAW,CAAC,IAAI;YAC/C,OAAO,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;aAC5C,IAAI,WAAW,YAAY,WAAW,CAAC,EAAE;YAC7C,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC;;YAC5C,MAAM,IAAI,KAAK,EAAE,CAAC;IACxB,CAAC;IAES,mCAAmC,CAAC,OAA6C;QAC1F,OAAO;YACN,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACT,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;gBAChB,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW;gBACnC,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU;aACjC;SACD,CAAC;IACH,CAAC;IAES,2BAA2B,CAAC,IAA8B;QACnE,IAAI,IAAI,KAAK,QAAQ,CAAC,UAAU,CAAC,IAAI;YAAE,OAAO,MAAM,CAAC;aAChD,IAAI,IAAI,KAAK,QAAQ,CAAC,UAAU,CAAC,QAAQ;YAAE,OAAO,UAAU,CAAC;aAC7D,IAAI,IAAI,KAAK,QAAQ,CAAC,UAAU,CAAC,IAAI;YAAE,OAAO,MAAM,CAAC;aACrD,CAAC;YACL,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;YAC1B,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC;QAC3D,CAAC;IACF,CAAC;IAES,gCAAgC,CAAC,GAAiE;QAC3G,mFAAmF;QACnF,IAAI,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC,UAAU,CAAC,QAAQ;YACnD,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,cAAc,EAAE,CAAC,CAAC;aACrC,IAAI,IAAI,CAAC,UAAU,YAAY,KAAK;YACxC,KAAK,MAAM,EAAE,IAAI,GAAG;gBAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,cAAc,EAAE,CAAC,CAAC;aAClF,IAAI,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC,UAAU,CAAC,IAAI;YACpD,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,cAAc,EAAE,CAAC,CAAC;IAC5C,CAAC;IAES,QAAQ,CAAC,MAAyC;QAC3D,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;IACtC,CAAC;IAES,QAAQ,CAAC,KAA6B;QAC/C,MAAM,kBAAkB,GAAG,KAAK,CAAC,qBAAqB,EAAE,aAAa,IAAI,CAAC,CAAC;QAC3E,MAAM,mBAAmB,GAAG,KAAK,CAAC,aAAa,GAAG,kBAAkB,CAAC;QACrE,OAAO,IAAI,CAAC,UAAU,GAAG,mBAAmB,GAAG,GAAG;YAChD,IAAI,CAAC,WAAW,GAAG,kBAAkB,GAAG,GAAG;YAC3C,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,iBAAiB,GAAG,GAAG,CAAC;IACpD,CAAC;IAES,cAAc,CAAC,iBAAyB;QACjD,OAAO,iBAAiB,CAAC;IAC1B,CAAC;CACD;AAGD,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACnB;IAA1B,YAA0B,YAAgE;QACzF,KAAK,EAAE,CAAC;QADiB,iBAAY,GAAZ,YAAY,CAAoD;IAE1F,CAAC;CACD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { RoleMessage, type Session } from '../session.ts';
|
|
2
|
+
import { Function } from '../function.ts';
|
|
3
|
+
import OpenAI from 'openai';
|
|
4
|
+
import { OpenAIChatCompletionsAPIBase } from './openai-chatcompletions-base.ts';
|
|
5
|
+
import { type InferenceContext } from '../inference-context.ts';
|
|
6
|
+
export declare abstract class OpenAIChatCompletionsMonolithAPIBase<in out fdm extends Function.Declaration.Map = {}> extends OpenAIChatCompletionsAPIBase<fdm> {
|
|
7
|
+
protected convertToAIMessage(message: OpenAI.ChatCompletionMessage): RoleMessage.AI<Function.Declaration.From<fdm>>;
|
|
8
|
+
protected makeMonolithParams(session: Session<Function.Declaration.From<fdm>>): OpenAI.ChatCompletionCreateParamsNonStreaming;
|
|
9
|
+
protected monolith(ctx: InferenceContext, session: Session<Function.Declaration.From<fdm>>, retry?: number): Promise<RoleMessage.AI<Function.Declaration.From<fdm>>>;
|
|
10
|
+
}
|