@chatluna/v1-shared-adapter 1.0.34 → 1.0.35
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/client.d.ts +1 -0
- package/lib/index.cjs +56 -2
- package/lib/index.mjs +54 -2
- package/lib/requester.d.ts +2 -1
- package/lib/types.d.ts +24 -0
- package/lib/utils.d.ts +2 -2
- package/package.json +2 -2
package/lib/client.d.ts
CHANGED
|
@@ -10,5 +10,6 @@ export declare function normalizeOpenAIModelName(modelName: string): string;
|
|
|
10
10
|
export declare function isEmbeddingModel(modelName: string): boolean;
|
|
11
11
|
export declare function isNonLLMModel(modelName: string): boolean;
|
|
12
12
|
export declare function isImageGenerationModel(modelName: string): boolean;
|
|
13
|
+
export declare function isRerankerModel(modelName: string): boolean;
|
|
13
14
|
export declare function getModelMaxContextSize(info: ModelInfo): number;
|
|
14
15
|
export declare function supportImageInput(modelName: string): boolean;
|
package/lib/index.cjs
CHANGED
|
@@ -28,6 +28,7 @@ __export(index_exports, {
|
|
|
28
28
|
convertMessageToMessageChunk: () => convertMessageToMessageChunk,
|
|
29
29
|
createEmbeddings: () => createEmbeddings,
|
|
30
30
|
createRequestContext: () => createRequestContext,
|
|
31
|
+
createRerank: () => createRerank,
|
|
31
32
|
createUsageMetadata: () => createUsageMetadata,
|
|
32
33
|
expandReasoningEffortModelVariants: () => expandReasoningEffortModelVariants,
|
|
33
34
|
fetchFileLikeUrl: () => fetchFileLikeUrl,
|
|
@@ -40,6 +41,7 @@ __export(index_exports, {
|
|
|
40
41
|
isEmbeddingModel: () => isEmbeddingModel,
|
|
41
42
|
isImageGenerationModel: () => isImageGenerationModel,
|
|
42
43
|
isNonLLMModel: () => isNonLLMModel,
|
|
44
|
+
isRerankerModel: () => isRerankerModel,
|
|
43
45
|
langchainMessageToOpenAIMessage: () => langchainMessageToOpenAIMessage,
|
|
44
46
|
langchainMessageToResponseInput: () => langchainMessageToResponseInput,
|
|
45
47
|
messageTypeToOpenAIRole: () => messageTypeToOpenAIRole,
|
|
@@ -118,7 +120,7 @@ function isNonLLMModel(modelName) {
|
|
|
118
120
|
if (modelName.includes("gemini") && modelName.includes("image")) {
|
|
119
121
|
return false;
|
|
120
122
|
}
|
|
121
|
-
return ["whisper", "tts", "dall-e", "image"
|
|
123
|
+
return ["whisper", "tts", "dall-e", "image"].some(
|
|
122
124
|
(keyword) => modelName.includes(keyword)
|
|
123
125
|
);
|
|
124
126
|
}
|
|
@@ -127,6 +129,10 @@ function isImageGenerationModel(modelName) {
|
|
|
127
129
|
return isNonLLMModel(modelName) && ["dall-e", "image"].some((keyword) => modelName.includes(keyword));
|
|
128
130
|
}
|
|
129
131
|
__name(isImageGenerationModel, "isImageGenerationModel");
|
|
132
|
+
function isRerankerModel(modelName) {
|
|
133
|
+
return modelName.includes("rerank");
|
|
134
|
+
}
|
|
135
|
+
__name(isRerankerModel, "isRerankerModel");
|
|
130
136
|
function getModelMaxContextSize(info) {
|
|
131
137
|
const maxTokens = info.maxTokens;
|
|
132
138
|
if (maxTokens != null) {
|
|
@@ -214,6 +220,7 @@ var import_sse = require("koishi-plugin-chatluna/utils/sse");
|
|
|
214
220
|
var import_messages = require("@langchain/core/messages");
|
|
215
221
|
var import_zod_to_json_schema = require("zod-to-json-schema");
|
|
216
222
|
var import_string = require("koishi-plugin-chatluna/utils/string");
|
|
223
|
+
var import_langchain = require("koishi-plugin-chatluna/utils/langchain");
|
|
217
224
|
var import_types = require("@langchain/core/utils/types");
|
|
218
225
|
function createUsageMetadata(data) {
|
|
219
226
|
const inputTokenDetails = {
|
|
@@ -513,11 +520,20 @@ function processInterleavedThinkMessages(convertedMessages, originalMessages) {
|
|
|
513
520
|
let lastTurnStartIndex = -1;
|
|
514
521
|
for (let i = originalMessages.length - 1; i >= 0; i--) {
|
|
515
522
|
const message = originalMessages[i];
|
|
516
|
-
if (
|
|
523
|
+
if ((0, import_langchain.isChatLunaUserMessage)(message)) {
|
|
517
524
|
lastTurnStartIndex = i;
|
|
518
525
|
break;
|
|
519
526
|
}
|
|
520
527
|
}
|
|
528
|
+
if (lastTurnStartIndex === -1) {
|
|
529
|
+
for (let i = originalMessages.length - 1; i >= 0; i--) {
|
|
530
|
+
const message = originalMessages[i];
|
|
531
|
+
if (message.getType() === "human") {
|
|
532
|
+
lastTurnStartIndex = i;
|
|
533
|
+
break;
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
}
|
|
521
537
|
if (lastTurnStartIndex === -1) {
|
|
522
538
|
lastTurnStartIndex = 0;
|
|
523
539
|
}
|
|
@@ -1405,6 +1421,42 @@ async function createEmbeddings(requestContext, params, embeddingUrl = "embeddin
|
|
|
1405
1421
|
}
|
|
1406
1422
|
}
|
|
1407
1423
|
__name(createEmbeddings, "createEmbeddings");
|
|
1424
|
+
async function createRerank(requestContext, params, rerankUrl = "rerank") {
|
|
1425
|
+
const { modelRequester } = requestContext;
|
|
1426
|
+
try {
|
|
1427
|
+
const response = await modelRequester.post(
|
|
1428
|
+
rerankUrl,
|
|
1429
|
+
{
|
|
1430
|
+
model: params.model,
|
|
1431
|
+
query: params.query,
|
|
1432
|
+
documents: params.documents,
|
|
1433
|
+
top_n: params.topN,
|
|
1434
|
+
max_chunks_per_doc: params.maxChunksPerDoc,
|
|
1435
|
+
return_documents: false
|
|
1436
|
+
},
|
|
1437
|
+
{
|
|
1438
|
+
signal: params.signal
|
|
1439
|
+
}
|
|
1440
|
+
);
|
|
1441
|
+
const data = await response.json();
|
|
1442
|
+
if (data.results == null) {
|
|
1443
|
+
throw new import_error.ChatLunaError(
|
|
1444
|
+
import_error.ChatLunaErrorCode.API_REQUEST_FAILED,
|
|
1445
|
+
new Error(`Call Rerank Error: ${JSON.stringify(data)}`)
|
|
1446
|
+
);
|
|
1447
|
+
}
|
|
1448
|
+
return data.results.map((item) => ({
|
|
1449
|
+
index: item.index,
|
|
1450
|
+
relevanceScore: item.relevance_score
|
|
1451
|
+
}));
|
|
1452
|
+
} catch (e) {
|
|
1453
|
+
if (e instanceof import_error.ChatLunaError) {
|
|
1454
|
+
throw e;
|
|
1455
|
+
}
|
|
1456
|
+
throw new import_error.ChatLunaError(import_error.ChatLunaErrorCode.API_REQUEST_FAILED, e);
|
|
1457
|
+
}
|
|
1458
|
+
}
|
|
1459
|
+
__name(createRerank, "createRerank");
|
|
1408
1460
|
async function getModels(requestContext, config) {
|
|
1409
1461
|
const { modelRequester } = requestContext;
|
|
1410
1462
|
let data;
|
|
@@ -1467,6 +1519,7 @@ __name(createRequestContext, "createRequestContext");
|
|
|
1467
1519
|
convertMessageToMessageChunk,
|
|
1468
1520
|
createEmbeddings,
|
|
1469
1521
|
createRequestContext,
|
|
1522
|
+
createRerank,
|
|
1470
1523
|
createUsageMetadata,
|
|
1471
1524
|
expandReasoningEffortModelVariants,
|
|
1472
1525
|
fetchFileLikeUrl,
|
|
@@ -1479,6 +1532,7 @@ __name(createRequestContext, "createRequestContext");
|
|
|
1479
1532
|
isEmbeddingModel,
|
|
1480
1533
|
isImageGenerationModel,
|
|
1481
1534
|
isNonLLMModel,
|
|
1535
|
+
isRerankerModel,
|
|
1482
1536
|
langchainMessageToOpenAIMessage,
|
|
1483
1537
|
langchainMessageToResponseInput,
|
|
1484
1538
|
messageTypeToOpenAIRole,
|
package/lib/index.mjs
CHANGED
|
@@ -53,7 +53,7 @@ function isNonLLMModel(modelName) {
|
|
|
53
53
|
if (modelName.includes("gemini") && modelName.includes("image")) {
|
|
54
54
|
return false;
|
|
55
55
|
}
|
|
56
|
-
return ["whisper", "tts", "dall-e", "image"
|
|
56
|
+
return ["whisper", "tts", "dall-e", "image"].some(
|
|
57
57
|
(keyword) => modelName.includes(keyword)
|
|
58
58
|
);
|
|
59
59
|
}
|
|
@@ -62,6 +62,10 @@ function isImageGenerationModel(modelName) {
|
|
|
62
62
|
return isNonLLMModel(modelName) && ["dall-e", "image"].some((keyword) => modelName.includes(keyword));
|
|
63
63
|
}
|
|
64
64
|
__name(isImageGenerationModel, "isImageGenerationModel");
|
|
65
|
+
function isRerankerModel(modelName) {
|
|
66
|
+
return modelName.includes("rerank");
|
|
67
|
+
}
|
|
68
|
+
__name(isRerankerModel, "isRerankerModel");
|
|
65
69
|
function getModelMaxContextSize(info) {
|
|
66
70
|
const maxTokens = info.maxTokens;
|
|
67
71
|
if (maxTokens != null) {
|
|
@@ -163,6 +167,7 @@ import {
|
|
|
163
167
|
getMimeTypeFromSource,
|
|
164
168
|
isMessageContentImageUrl
|
|
165
169
|
} from "koishi-plugin-chatluna/utils/string";
|
|
170
|
+
import { isChatLunaUserMessage } from "koishi-plugin-chatluna/utils/langchain";
|
|
166
171
|
import { isZodSchemaV3 } from "@langchain/core/utils/types";
|
|
167
172
|
function createUsageMetadata(data) {
|
|
168
173
|
const inputTokenDetails = {
|
|
@@ -462,11 +467,20 @@ function processInterleavedThinkMessages(convertedMessages, originalMessages) {
|
|
|
462
467
|
let lastTurnStartIndex = -1;
|
|
463
468
|
for (let i = originalMessages.length - 1; i >= 0; i--) {
|
|
464
469
|
const message = originalMessages[i];
|
|
465
|
-
if (message
|
|
470
|
+
if (isChatLunaUserMessage(message)) {
|
|
466
471
|
lastTurnStartIndex = i;
|
|
467
472
|
break;
|
|
468
473
|
}
|
|
469
474
|
}
|
|
475
|
+
if (lastTurnStartIndex === -1) {
|
|
476
|
+
for (let i = originalMessages.length - 1; i >= 0; i--) {
|
|
477
|
+
const message = originalMessages[i];
|
|
478
|
+
if (message.getType() === "human") {
|
|
479
|
+
lastTurnStartIndex = i;
|
|
480
|
+
break;
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
}
|
|
470
484
|
if (lastTurnStartIndex === -1) {
|
|
471
485
|
lastTurnStartIndex = 0;
|
|
472
486
|
}
|
|
@@ -1354,6 +1368,42 @@ async function createEmbeddings(requestContext, params, embeddingUrl = "embeddin
|
|
|
1354
1368
|
}
|
|
1355
1369
|
}
|
|
1356
1370
|
__name(createEmbeddings, "createEmbeddings");
|
|
1371
|
+
async function createRerank(requestContext, params, rerankUrl = "rerank") {
|
|
1372
|
+
const { modelRequester } = requestContext;
|
|
1373
|
+
try {
|
|
1374
|
+
const response = await modelRequester.post(
|
|
1375
|
+
rerankUrl,
|
|
1376
|
+
{
|
|
1377
|
+
model: params.model,
|
|
1378
|
+
query: params.query,
|
|
1379
|
+
documents: params.documents,
|
|
1380
|
+
top_n: params.topN,
|
|
1381
|
+
max_chunks_per_doc: params.maxChunksPerDoc,
|
|
1382
|
+
return_documents: false
|
|
1383
|
+
},
|
|
1384
|
+
{
|
|
1385
|
+
signal: params.signal
|
|
1386
|
+
}
|
|
1387
|
+
);
|
|
1388
|
+
const data = await response.json();
|
|
1389
|
+
if (data.results == null) {
|
|
1390
|
+
throw new ChatLunaError(
|
|
1391
|
+
ChatLunaErrorCode.API_REQUEST_FAILED,
|
|
1392
|
+
new Error(`Call Rerank Error: ${JSON.stringify(data)}`)
|
|
1393
|
+
);
|
|
1394
|
+
}
|
|
1395
|
+
return data.results.map((item) => ({
|
|
1396
|
+
index: item.index,
|
|
1397
|
+
relevanceScore: item.relevance_score
|
|
1398
|
+
}));
|
|
1399
|
+
} catch (e) {
|
|
1400
|
+
if (e instanceof ChatLunaError) {
|
|
1401
|
+
throw e;
|
|
1402
|
+
}
|
|
1403
|
+
throw new ChatLunaError(ChatLunaErrorCode.API_REQUEST_FAILED, e);
|
|
1404
|
+
}
|
|
1405
|
+
}
|
|
1406
|
+
__name(createRerank, "createRerank");
|
|
1357
1407
|
async function getModels(requestContext, config) {
|
|
1358
1408
|
const { modelRequester } = requestContext;
|
|
1359
1409
|
let data;
|
|
@@ -1415,6 +1465,7 @@ export {
|
|
|
1415
1465
|
convertMessageToMessageChunk,
|
|
1416
1466
|
createEmbeddings,
|
|
1417
1467
|
createRequestContext,
|
|
1468
|
+
createRerank,
|
|
1418
1469
|
createUsageMetadata,
|
|
1419
1470
|
expandReasoningEffortModelVariants,
|
|
1420
1471
|
fetchFileLikeUrl,
|
|
@@ -1427,6 +1478,7 @@ export {
|
|
|
1427
1478
|
isEmbeddingModel,
|
|
1428
1479
|
isImageGenerationModel,
|
|
1429
1480
|
isNonLLMModel,
|
|
1481
|
+
isRerankerModel,
|
|
1430
1482
|
langchainMessageToOpenAIMessage,
|
|
1431
1483
|
langchainMessageToResponseInput,
|
|
1432
1484
|
messageTypeToOpenAIRole,
|
package/lib/requester.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ChatGenerationChunk } from '@langchain/core/outputs';
|
|
2
|
-
import { EmbeddingsRequestParams, ModelRequester, ModelRequestParams } from 'koishi-plugin-chatluna/llm-core/platform/api';
|
|
2
|
+
import { EmbeddingsRequestParams, ModelRequester, ModelRequestParams, RerankerRequestParams, RerankerResult } from 'koishi-plugin-chatluna/llm-core/platform/api';
|
|
3
3
|
import { ClientConfig } from 'koishi-plugin-chatluna/llm-core/platform/config';
|
|
4
4
|
import { SSEEvent } from 'koishi-plugin-chatluna/utils/sse';
|
|
5
5
|
import { type ResponseBuiltinTool, ResponseObject, ResponseOutputItem } from './types';
|
|
@@ -73,6 +73,7 @@ export declare function completion<T extends ClientConfig, R extends ChatLunaPlu
|
|
|
73
73
|
export declare function responseApiCompletionStream<T extends ClientConfig, R extends ChatLunaPlugin.Config>(requestContext: RequestContext<T, R>, params: ModelRequestParams, opts?: ResponseToolOptions, supportImageInput?: boolean, imageProvider?: ResponseImageProvider): AsyncGenerator<ChatGenerationChunk>;
|
|
74
74
|
export declare function responseApiCompletion<T extends ClientConfig, R extends ChatLunaPlugin.Config>(requestContext: RequestContext<T, R>, params: ModelRequestParams, opts?: ResponseToolOptions, supportImageInput?: boolean, imageProvider?: ResponseImageProvider): Promise<ChatGenerationChunk>;
|
|
75
75
|
export declare function createEmbeddings<T extends ClientConfig, R extends ChatLunaPlugin.Config>(requestContext: RequestContext<T, R>, params: EmbeddingsRequestParams, embeddingUrl?: string): Promise<number[] | number[][]>;
|
|
76
|
+
export declare function createRerank<T extends ClientConfig, R extends ChatLunaPlugin.Config>(requestContext: RequestContext<T, R>, params: RerankerRequestParams, rerankUrl?: string): Promise<RerankerResult[]>;
|
|
76
77
|
export declare function getModels<T extends ClientConfig, R extends ChatLunaPlugin.Config>(requestContext: RequestContext<T, R>, config?: RunnableConfig): Promise<string[]>;
|
|
77
78
|
export declare function createRequestContext<T extends ClientConfig, R extends ChatLunaPlugin.Config>(ctx: Context, config: T, pluginConfig: R, plugin: ChatLunaPlugin, modelRequester: ModelRequester<T, R>): RequestContext<T, R>;
|
|
78
79
|
export {};
|
package/lib/types.d.ts
CHANGED
|
@@ -325,3 +325,27 @@ export interface CreateEmbeddingResponseUsage {
|
|
|
325
325
|
total_tokens: number;
|
|
326
326
|
}
|
|
327
327
|
export type ChatCompletionResponseMessageRoleEnum = 'system' | 'assistant' | 'user' | 'function' | 'tool';
|
|
328
|
+
export interface CreateRerankRequest {
|
|
329
|
+
model: string;
|
|
330
|
+
query: string;
|
|
331
|
+
documents: string[];
|
|
332
|
+
top_n?: number;
|
|
333
|
+
max_chunks_per_doc?: number;
|
|
334
|
+
return_documents?: boolean;
|
|
335
|
+
}
|
|
336
|
+
export interface RerankResultItem {
|
|
337
|
+
index: number;
|
|
338
|
+
relevance_score: number;
|
|
339
|
+
document?: {
|
|
340
|
+
text: string;
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
export interface CreateRerankResponse {
|
|
344
|
+
id?: string;
|
|
345
|
+
model?: string;
|
|
346
|
+
results: RerankResultItem[];
|
|
347
|
+
usage?: {
|
|
348
|
+
prompt_tokens?: number;
|
|
349
|
+
total_tokens?: number;
|
|
350
|
+
};
|
|
351
|
+
}
|
package/lib/utils.d.ts
CHANGED
|
@@ -71,6 +71,6 @@ export declare function messageTypeToOpenAIRole(type: MessageType): ChatCompleti
|
|
|
71
71
|
export declare function formatToolsToOpenAITools(tools: StructuredTool[], includeGoogleSearch: boolean): ChatCompletionTool[];
|
|
72
72
|
export declare function formatToolToOpenAITool(tool: StructuredTool): ChatCompletionTool;
|
|
73
73
|
export declare function removeAdditionalProperties(schema: JsonSchema7Type): JsonSchema7Type;
|
|
74
|
-
export declare function convertMessageToMessageChunk(message: ChatCompletionResponseMessage):
|
|
75
|
-
export declare function convertDeltaToMessageChunk(delta: Record<string, any>, defaultRole?: ChatCompletionResponseMessageRoleEnum):
|
|
74
|
+
export declare function convertMessageToMessageChunk(message: ChatCompletionResponseMessage): AIMessageChunk | HumanMessageChunk | SystemMessageChunk | FunctionMessageChunk | ToolMessageChunk | ChatMessageChunk;
|
|
75
|
+
export declare function convertDeltaToMessageChunk(delta: Record<string, any>, defaultRole?: ChatCompletionResponseMessageRoleEnum): AIMessageChunk | HumanMessageChunk | SystemMessageChunk | FunctionMessageChunk | ToolMessageChunk | ChatMessageChunk;
|
|
76
76
|
export {};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chatluna/v1-shared-adapter",
|
|
3
3
|
"description": "chatluna shared adapter",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.35",
|
|
5
5
|
"main": "lib/index.cjs",
|
|
6
6
|
"module": "lib/index.mjs",
|
|
7
7
|
"typings": "lib/index.d.ts",
|
|
@@ -70,6 +70,6 @@
|
|
|
70
70
|
},
|
|
71
71
|
"peerDependencies": {
|
|
72
72
|
"koishi": "^4.18.9",
|
|
73
|
-
"koishi-plugin-chatluna": "^1.4.0-alpha.
|
|
73
|
+
"koishi-plugin-chatluna": "^1.4.0-alpha.10"
|
|
74
74
|
}
|
|
75
75
|
}
|