@chatluna/v1-shared-adapter 1.0.33 → 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 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", "rerank"].some(
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 (message.getType() === "human") {
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", "rerank"].some(
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.getType() === "human") {
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,
@@ -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): HumanMessageChunk | AIMessageChunk | SystemMessageChunk | FunctionMessageChunk | ToolMessageChunk | ChatMessageChunk;
75
- export declare function convertDeltaToMessageChunk(delta: Record<string, any>, defaultRole?: ChatCompletionResponseMessageRoleEnum): HumanMessageChunk | AIMessageChunk | SystemMessageChunk | FunctionMessageChunk | ToolMessageChunk | ChatMessageChunk;
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.33",
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.8"
73
+ "koishi-plugin-chatluna": "^1.4.0-alpha.10"
74
74
  }
75
75
  }