Просмотр исходного кода

LM studio reasoning support (thinking block) (#3719)

lmstudio reasoning support (thinking block)

Similar to ollama implementation in #1080
avtc 7 месяцев назад
Родитель
Сommit
1e5783d051
1 измененных файлов с 17 добавлено и 4 удалено
  1. 17 4
      src/api/providers/lmstudio.ts

+ 17 - 4
src/api/providers/lmstudio.ts

@@ -7,6 +7,7 @@ import { ApiHandlerOptions, ModelInfo, openAiModelInfoSaneDefaults } from "../..
 import { convertToOpenAiMessages } from "../transform/openai-format"
 import { ApiStream } from "../transform/stream"
 import { BaseProvider } from "./base-provider"
+import { XmlMatcher } from "../../utils/xml-matcher"
 
 const LMSTUDIO_DEFAULT_TEMPERATURE = 0
 
@@ -44,18 +45,30 @@ export class LmStudioHandler extends BaseProvider implements SingleCompletionHan
 			}
 
 			const results = await this.client.chat.completions.create(params)
-
+			
+			const matcher = new XmlMatcher(
+				"think",
+				(chunk) =>
+					({
+						type: chunk.matched ? "reasoning" : "text",
+						text: chunk.data,
+					}) as const,
+			)
+			
 			// Stream handling
 			// @ts-ignore
 			for await (const chunk of results) {
 				const delta = chunk.choices[0]?.delta
+
 				if (delta?.content) {
-					yield {
-						type: "text",
-						text: delta.content,
+					for (const chunk of matcher.update(delta.content)) {
+						yield chunk
 					}
 				}
 			}
+			for (const chunk of matcher.final()) {
+				yield chunk
+			}
 		} catch (error) {
 			// LM Studio doesn't return an error code/body for now
 			throw new Error(