@shenghuabi/openai 1.1.24 → 1.1.27
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/chat/service.d.ts +2 -2
- package/chat/vendor/openai.d.ts +3 -2
- package/index.js +1 -1
- package/index.js.map +2 -2
- package/index.mjs +1 -1
- package/index.mjs.map +2 -2
- package/package.json +1 -1
package/chat/service.d.ts
CHANGED
|
@@ -4,13 +4,13 @@ import { CreateChatModelOptions } from './options.define';
|
|
|
4
4
|
export declare class ChatProviderService {
|
|
5
5
|
#private;
|
|
6
6
|
create(input: Omit<CreateChatModelOptions, 'name'>): {
|
|
7
|
-
stream: (input: import("
|
|
7
|
+
stream: (input: Omit<import("openai/resources/index.mjs").ChatCompletionCreateParamsStreaming, "model" | "seed" | "max_tokens" | "top_p" | "temperature" | "frequency_penalty" | "presence_penalty" | "stop" | "stream">, options?: ChatRequestOptions | undefined) => AsyncGenerator<{
|
|
8
8
|
content: string;
|
|
9
9
|
isThinking: boolean;
|
|
10
10
|
delta: any;
|
|
11
11
|
thinkContent: string | undefined;
|
|
12
12
|
}, void, unknown>;
|
|
13
|
-
chat: (input: import("
|
|
13
|
+
chat: (input: Omit<import("openai/resources/index.mjs").ChatCompletionCreateParamsStreaming, "model" | "seed" | "max_tokens" | "top_p" | "temperature" | "frequency_penalty" | "presence_penalty" | "stop" | "stream">, options?: ChatRequestOptions | undefined) => Promise<{
|
|
14
14
|
content: string;
|
|
15
15
|
isThinking: boolean;
|
|
16
16
|
delta: any;
|
package/chat/vendor/openai.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { OpenAI } from 'openai';
|
|
2
|
-
import {
|
|
2
|
+
import { ChatRequestOptions, ChatToolBodyInput } from '../type';
|
|
3
|
+
import { ChatCompletionCreateParamsStreaming } from 'openai/resources/index.mjs';
|
|
3
4
|
import { ChatModelOptions } from '../options.define';
|
|
4
5
|
export declare class OpenAIChat {
|
|
5
6
|
#private;
|
|
@@ -9,7 +10,7 @@ export declare class OpenAIChat {
|
|
|
9
10
|
protected extraHeaders: {};
|
|
10
11
|
constructor(options: ChatModelOptions);
|
|
11
12
|
init(): void;
|
|
12
|
-
stream(input:
|
|
13
|
+
stream(input: Omit<ChatCompletionCreateParamsStreaming, 'model' | 'stream' | 'max_tokens' | 'top_p' | 'temperature' | 'frequency_penalty' | 'presence_penalty' | 'seed' | 'stop'>, options?: ChatRequestOptions): AsyncGenerator<any, void, unknown>;
|
|
13
14
|
callTool(input: ChatToolBodyInput, options?: ChatRequestOptions): Promise<{
|
|
14
15
|
type: "function";
|
|
15
16
|
function: {
|
package/index.js
CHANGED
|
@@ -136,7 +136,7 @@ var OpenAIChat = class {
|
|
|
136
136
|
async *stream(input, options) {
|
|
137
137
|
const input2 = {
|
|
138
138
|
...input,
|
|
139
|
-
messages:
|
|
139
|
+
messages: input.messages,
|
|
140
140
|
model: this.options.model,
|
|
141
141
|
stream: true,
|
|
142
142
|
max_tokens: this.options.max_tokens,
|
package/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../packages/openai/index.ts", "../../packages/openai/chat/service.ts", "../../packages/openai/chat/vendor/openai.ts", "../../packages/openai/chat/message.define.ts", "../../packages/openai/chat/vendor/openai-compatible.factory.ts", "../../packages/openai/chat/vendor/genmini/genmini.ts", "../../packages/openai/chat/vendor/genmini/message.define.ts", "../../packages/openai/chat/vendor/anthropic/anthropic.ts", "../../packages/openai/chat/vendor/anthropic/message.define.ts", "../../packages/openai/chat/util/create.ts", "../../packages/openai/chat/const.ts", "../../packages/openai/chat/options.define.ts", "../../packages/openai/chat/token.ts", "../../packages/openai/chat/chat.history.service.ts", "../../packages/openai/chat/module.ts"],
|
|
4
|
-
"sourcesContent": ["export * from './chat/service';\nexport * from './chat/token';\nexport * from './chat/options.define';\nexport * from './chat/message.define';\nexport * from './chat/util/create';\nexport * from './chat/type/history';\nexport * from './chat/type';\nexport * from './chat/chat.history.service';\nexport * from './chat/module';\n", "import { inject } from 'static-injector';\nimport { OpenAIChat } from './vendor/openai';\nimport { ChatRequestOptions, ChatToolBodyInput } from './type';\nimport { createCompatibleFactory } from './vendor/openai-compatible.factory';\nimport { GeminiChat } from './vendor/genmini/genmini';\nimport { AnthropicChat } from './vendor/anthropic/anthropic';\nimport { createAssistantMessage } from './util/create';\nimport { ThinkList } from './const';\nimport {\n CreateChatModelOptions,\n InputChatOptionsDefine,\n} from './options.define';\nimport { OpenAIConfigToken } from './token';\nimport { ChatHistoryService } from './chat.history.service';\nimport * as v from 'valibot';\nexport class ChatProviderService {\n #config = inject(OpenAIConfigToken);\n #chatHistory = inject(ChatHistoryService);\n\n create(input: Omit<CreateChatModelOptions, 'name'>) {\n let options = v.parse(InputChatOptionsDefine, input);\n let instance;\n const extraOptions =\n options.vendorOptions?.[options.vendor]?.['extraOptions'];\n options = {\n ...extraOptions,\n ...options,\n apiKey: options.apiKey?.trim() || extraOptions?.apiKey || ' ',\n };\n if (!options.vendor || options.vendor === 'openai') {\n instance = new OpenAIChat(options);\n } else if (options.vendor === 'gemini') {\n instance = new GeminiChat(options);\n } else if (options.vendor === 'claude') {\n instance = new AnthropicChat(options);\n } else {\n instance = createCompatibleFactory(options);\n }\n instance.init();\n const openAIOptions = this.#config;\n const chatHistory = this.#chatHistory;\n\n const fn = async function* (...args: Parameters<OpenAIChat['stream']>) {\n const result = instance.stream(args[0], {\n ...args[1],\n tryPull: openAIOptions().tryPull,\n pullModel: openAIOptions().pullModel,\n });\n let content = '';\n let isThink = false;\n let thinkStart = 0;\n let thinkEnd: number | undefined;\n let start = true;\n /** 是否处于思考期 */\n let isThinking = false;\n let contentEnd: number | undefined;\n let lastEmit;\n for await (const delta of result) {\n content += delta;\n if (start) {\n start = false;\n const result = ThinkList.find((item) =>\n delta.startsWith(`<${item}>`),\n );\n if (result) {\n isThink = true;\n thinkStart = result.length + 2;\n isThinking = true;\n }\n } else if (isThink && thinkEnd === undefined) {\n const result = ThinkList.find((item) => delta === `</${item}>`);\n if (result) {\n contentEnd = content.length;\n thinkEnd = content.length - result.length - 3;\n isThinking = false;\n }\n }\n lastEmit = {\n content: isThink\n ? (contentEnd ? content.slice(contentEnd) : '').trim()\n : content,\n isThinking: isThinking,\n delta,\n thinkContent: isThink\n ? content.slice(thinkStart, thinkEnd).trim()\n : undefined,\n };\n yield lastEmit;\n }\n const lastMessage = createAssistantMessage(\n isThink ? (contentEnd ? content.slice(contentEnd) : '') : content,\n );\n if (lastEmit?.thinkContent) {\n lastMessage.thinkContent = lastEmit.thinkContent;\n }\n chatHistory.save(\n [...args[0].messages, lastMessage],\n { ...args[0], messages: undefined },\n options,\n );\n };\n return {\n stream: fn,\n chat: async (...args: Parameters<OpenAIChat['stream']>) => {\n const result = fn(...args);\n let obj;\n for await (const element of result) {\n obj = element;\n }\n return obj!;\n },\n callTool: (input: ChatToolBodyInput, options?: ChatRequestOptions) =>\n instance.callTool(input, options),\n };\n }\n}\n", "import { OpenAI } from 'openai';\nimport { ChatMessageListDefine } from '../message.define';\nimport { ChatBodyInput, ChatRequestOptions, ChatToolBodyInput } from '../type';\nimport * as v from 'valibot';\nimport type { Stream } from 'openai/streaming.mjs';\nimport { ChatCompletionCreateParamsStreaming } from 'openai/resources/index.mjs';\nimport { ChatModelOptions } from '../options.define';\nexport class OpenAIChat {\n protected instance!: OpenAI;\n protected extraBody = {};\n protected extraHeaders = {};\n constructor(protected options: ChatModelOptions) {}\n init() {\n this.instance = new OpenAI({\n apiKey: this.options.apiKey || ' ',\n baseURL: this.options.baseURL ?? undefined,\n });\n }\n async #createStream(\n input: ChatCompletionCreateParamsStreaming,\n options?: ChatRequestOptions,\n ): Promise<\n Stream<OpenAI.Chat.Completions.ChatCompletionChunk> & {\n _request_id?: string | null;\n }\n > {\n return await this.instance.chat.completions\n .create(input, { headers: this.extraHeaders, ...options })\n .catch(async (error) => {\n // ollama server/routes.go\n if (options?.tryPull?.(error)) {\n await options?.pullModel!(this.options.model);\n return this.#createStream(input, {\n ...options,\n tryPull: () => false,\n });\n }\n\n throw error;\n });\n }\n async *stream(input: ChatBodyInput, options?: ChatRequestOptions) {\n const input2 = {\n ...input,\n messages: v.parse(ChatMessageListDefine, input.messages),\n model: this.options.model,\n stream: true,\n max_tokens: this.options.max_tokens,\n top_p: this.options.top_p,\n temperature: this.options.temperature,\n frequency_penalty: this.options.frequency_penalty,\n presence_penalty: this.options.presence_penalty,\n seed: this.options.seed,\n stop: this.options.stop,\n ...this.extraBody,\n } as ChatCompletionCreateParamsStreaming;\n const result = await this.#createStream(input2, options);\n let isThinking = 0;\n for await (const item of result) {\n try {\n //reasoning_content 思考\n if (!item.choices[0].finish_reason) {\n if (\n typeof (item.choices[0].delta as any).reasoning_content ===\n 'string' ||\n typeof (item.choices[0].delta as any).reasoning === 'string'\n ) {\n if (isThinking === 0) {\n isThinking = 1;\n yield '<thinking>';\n }\n const result =\n (item.choices[0].delta as any).reasoning_content ??\n (item.choices[0].delta as any).reasoning;\n if (result) {\n yield result;\n }\n } else if (typeof item.choices[0].delta.content === 'string') {\n if (isThinking === 1) {\n yield '</thinking>';\n isThinking = 2;\n }\n const result = item.choices[0].delta.content!;\n if (result) {\n yield result;\n }\n }\n }\n } catch (error) {\n throw error;\n }\n }\n }\n // 工具调用,暂时不清楚怎么调用...是返回工具,还是返回对话\n async callTool(input: ChatToolBodyInput, options?: ChatRequestOptions) {\n const result = await this.instance.chat.completions.create(\n {\n ...input,\n messages: v.parse(ChatMessageListDefine, input.messages),\n model: this.options.model,\n max_tokens: this.options.max_tokens,\n top_p: this.options.top_p,\n temperature: this.options.temperature,\n frequency_penalty: this.options.frequency_penalty,\n presence_penalty: this.options.presence_penalty,\n seed: this.options.seed,\n stop: this.options.stop,\n ...this.extraBody,\n stream: false,\n },\n { headers: this.extraHeaders, ...options },\n );\n const isTool = !!result.choices[0].message.tool_calls;\n if (isTool) {\n // todo\n const data = (result.choices[0].message.tool_calls![0] as any).function;\n return {\n type: 'function' as const,\n function: {\n name: data.name,\n arguments: JSON.parse(data.arguments) as\n | Record<string, any>\n | undefined,\n },\n };\n }\n return { type: 'text' as const, text: result.choices[0].message.content! };\n }\n}\n", "import * as v from 'valibot';\nexport const ChatCompletionContentPartStr = v.object({\n text: v.string(),\n type: v.optional(v.literal('text'), 'text'),\n});\nexport type ChatCompletionContentPartStrType = v.InferOutput<\n typeof ChatCompletionContentPartStr\n>;\n\nexport const ChatCompletionContentPartImage = v.object({\n image_url: v.object({\n url: v.string(),\n detail: v.optional(v.picklist(['auto', 'low', 'high'])),\n }),\n type: v.optional(v.literal('image_url'), 'image_url'),\n});\nexport type ChatCompletionContentPartImageType = v.InferOutput<\n typeof ChatCompletionContentPartImage\n>;\nexport const ChatCompletionContentPart = v.array(\n v.union([ChatCompletionContentPartStr, ChatCompletionContentPartImage]),\n);\nexport const SystemChatCompletionContent = v.array(\n ChatCompletionContentPartStr,\n);\nexport const UserChatCompletionContent = ChatCompletionContentPart;\nexport type UserChatCompletionContentType = v.InferOutput<\n typeof UserChatCompletionContent\n>;\nexport const AssistantChatCompletionContent = v.array(\n ChatCompletionContentPartStr,\n);\nexport const SystemChatMessage = v.object({\n role: v.optional(v.literal('system'), 'system'),\n content: SystemChatCompletionContent,\n});\nexport type SystemChatMessageType = v.InferOutput<typeof SystemChatMessage>;\nexport const UserChatMessage = v.object({\n role: v.optional(v.literal('user'), 'user'),\n content: UserChatCompletionContent,\n});\nexport type UserChatMessageType = v.InferOutput<typeof UserChatMessage>;\n\nexport const AssistantChatMessage = v.object({\n role: v.optional(v.literal('assistant'), 'assistant'),\n content: AssistantChatCompletionContent,\n thinkContent: v.optional(v.string()),\n});\n\nexport type AssistantChatMessageType = v.InferOutput<\n typeof AssistantChatMessage\n>;\n\nexport const ChatMessageItemDefine = v.union([\n SystemChatMessage,\n UserChatMessage,\n AssistantChatMessage,\n]);\nexport type ChatMessageItemType = v.InferOutput<typeof ChatMessageItemDefine>;\nexport const ChatMessageListDefine = v.array(ChatMessageItemDefine);\n\nexport type ChatMessageListOutputType = v.InferOutput<\n typeof ChatMessageListDefine\n>;\nexport type ChatMessageListInputType = v.InferOutput<\n typeof ChatMessageListDefine\n>;\n", "import { ChatModelOptions } from '../options.define';\nimport { OpenAIChat } from './openai';\nconst VendorObject: Record<\n string,\n { options: { baseURL: string; modelList: string[] } }\n> = {\n '360': { options: { baseURL: 'https://ai.360.cn', modelList: [] } },\n azure: { options: { baseURL: '', modelList: [] } },\n moonshot: { options: { baseURL: 'https://api.moonshot.cn', modelList: [] } },\n baichuan: {\n options: { baseURL: 'https://api.baichuan-ai.com', modelList: [] },\n },\n minimax: { options: { baseURL: 'https://api.minimax.chat', modelList: [] } },\n mistralai: { options: { baseURL: 'https://api.mistral.ai', modelList: [] } },\n groq: {\n options: { baseURL: 'https://api.groq.com/openai', modelList: [] },\n },\n lingyiwanwu: {\n options: { baseURL: 'https://api.lingyiwanwu.com', modelList: [] },\n },\n stepfun: { options: { baseURL: 'https://api.stepfun.com', modelList: [] } },\n deepseek: { options: { baseURL: 'https://api.deepseek.com', modelList: [] } },\n 'together.ai': {\n options: { baseURL: 'https://api.together.xyz', modelList: [] },\n },\n volcengine: {\n options: {\n baseURL: 'https://ark.cn-beijing.volces.com/api/v3',\n modelList: [],\n },\n },\n novita: {\n options: { baseURL: 'https://api.novita.ai/v3/openai', modelList: [] },\n },\n siliconflow: {\n options: { baseURL: 'https://api.siliconflow.cn', modelList: [] },\n },\n // 官网明确兼容\n // https://help.aliyun.com/zh/model-studio/developer-reference/use-qwen-by-calling-api?spm=a2c6h.13066369.question.5.3a0e527bbxeJLJ#4ec3e641c294d\n tongyi: {\n options: {\n baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1',\n modelList: [],\n },\n },\n // 文档上看是一样的\n // https://open.bigmodel.cn/dev/api/normal-model/glm-4\n zhipu: {\n options: {\n baseURL: 'https://open.bigmodel.cn/api/paas/v4',\n modelList: [],\n },\n },\n // 明确兼容\n // https://www.xfyun.cn/doc/spark/HTTP%E8%B0%83%E7%94%A8%E6%96%87%E6%A1%A3.html#_7-%E4%BD%BF%E7%94%A8openai-sdk%E8%AF%B7%E6%B1%82%E7%A4%BA%E4%BE%8B\n spark: {\n options: {\n baseURL: 'https://spark-api-open.xf-yun.com/v1',\n modelList: [],\n },\n },\n // 官方兼容\n // https://cloud.tencent.com/document/product/1729/111007\n hunyuan: {\n options: {\n baseURL: 'https://api.hunyuan.cloud.tencent.com/v1',\n modelList: [],\n },\n },\n};\n\nexport function createCompatibleFactory(options: ChatModelOptions) {\n const vendorConfig = VendorObject[options.vendor];\n return new OpenAIChat({\n ...options,\n baseURL: vendorConfig.options.baseURL,\n });\n}\n", "import { OpenAIChat } from '../openai';\nimport { GoogleGenerativeAI, StartChatParams } from '@google/generative-ai';\nimport {\n GenminiChatMessageListDefine,\n GenminiSystemMessageDefine,\n} from './message.define';\nimport * as v from 'valibot';\nimport { ChatBodyInput, ChatRequestOptions } from '../../type';\n\nexport class GeminiChat extends OpenAIChat {\n #ggai!: GoogleGenerativeAI;\n override init(): void {\n this.#ggai = new GoogleGenerativeAI(this.options.apiKey!);\n }\n override async *stream(\n input: ChatBodyInput,\n options?: ChatRequestOptions,\n ): AsyncGenerator<string, void, unknown> {\n const model = this.#ggai.getGenerativeModel({\n model: this.options.model,\n generationConfig: {\n topP: this.options.top_p,\n temperature: this.options.temperature,\n maxOutputTokens: this.options.max_tokens,\n },\n });\n const messages = input.messages;\n const data = {} as Partial<StartChatParams>;\n if (messages[0].role === 'system') {\n const system = messages.shift();\n data.systemInstruction = v.parse(GenminiSystemMessageDefine, system);\n }\n data.history = v.parse(GenminiChatMessageListDefine, messages);\n const lastMessage = data.history.pop()!;\n\n const chat = model.startChat(data);\n const result = await chat.sendMessageStream(lastMessage.parts, {\n signal: options?.signal,\n });\n for await (const chunk of result.stream) {\n const chunkText = chunk.text();\n yield chunkText;\n }\n }\n}\n", "import * as v from 'valibot';\nimport {\n AssistantChatMessage,\n ChatCompletionContentPartImageType,\n ChatCompletionContentPartStrType,\n SystemChatMessage,\n UserChatMessage,\n} from '../../message.define';\nimport { isTruthy } from '@cyia/util';\n\nfunction messageContentTransform(\n list: (\n | ChatCompletionContentPartStrType\n | ChatCompletionContentPartImageType\n )[],\n) {\n return list\n .map((item) => (item.type === 'text' ? { text: item.text } : undefined))\n .filter(isTruthy);\n}\nexport const GenminiSystemMessageDefine = v.pipe(\n SystemChatMessage,\n v.transform((item) => ({\n role: 'system',\n parts: messageContentTransform(item.content),\n })),\n);\n\nexport const GenminiChatMessageListDefine = v.pipe(\n v.array(\n v.union([\n v.pipe(\n UserChatMessage,\n v.transform((item) => ({\n role: 'user' as const,\n parts: messageContentTransform(item.content),\n })),\n ),\n\n v.pipe(\n AssistantChatMessage,\n v.transform((item) => ({\n role: 'model' as const,\n parts: messageContentTransform(item.content),\n })),\n ),\n ]),\n ),\n);\n", "import { OpenAIChat } from '../openai';\nimport Anthropic from '@anthropic-ai/sdk';\nimport {\n AnthropicChatMessageListDefine,\n AnthropicSystemMessageDefine,\n} from './message.define';\nimport { createAsyncGeneratorAdapter } from '@cyia/util';\nimport * as v from 'valibot';\nimport {\n ChatBodyInput,\n ChatRequestOptions,\n ChatToolBodyInput,\n} from '../../type';\nexport class AnthropicChat extends OpenAIChat {\n client!: Anthropic;\n override init(): void {\n this.client = new Anthropic({ apiKey: this.options.apiKey });\n }\n override async *stream(\n input: ChatBodyInput,\n options?: ChatRequestOptions,\n ): AsyncGenerator<string, void, unknown> {\n const body = {\n model: this.options.model,\n max_tokens: this.options.max_tokens,\n top_p: this.options.top_p,\n temperature: this.options.temperature,\n stream: true,\n } as Partial<Anthropic.Messages.MessageStreamParams>;\n\n if (input.messages[0].role === 'system') {\n const system = input.messages.shift()!.content;\n body.system = v.parse(AnthropicSystemMessageDefine, system);\n }\n body.messages = v.parse(AnthropicChatMessageListDefine, input.messages);\n const result = this.client.messages.stream(body as any, {\n signal: options?.signal,\n });\n const aga = createAsyncGeneratorAdapter<string>();\n result.once('end', () => aga.complete());\n result.on('text', (text) => {\n aga.next(text);\n });\n for await (const item of aga.getData()) {\n yield item;\n }\n }\n override async callTool(\n input: ChatToolBodyInput,\n options?: ChatRequestOptions,\n ) {\n const body =\n {} as Partial<Anthropic.Messages.MessageCreateParamsNonStreaming> &\n Pick<Anthropic.Messages.MessageCreateParamsNonStreaming, 'messages'>;\n\n if (input.messages[0].role === 'system') {\n const system = input.messages.shift()!.content;\n body.system = v.parse(AnthropicSystemMessageDefine, system);\n }\n body.messages = v.parse(AnthropicChatMessageListDefine, input.messages);\n const result = await this.client.messages.create(\n {\n ...body,\n model: this.options.model,\n max_tokens: this.options.max_tokens,\n top_p: this.options.top_p,\n temperature: this.options.temperature,\n stream: false,\n tools: input.tools.map((item) => ({\n name: item.function.name,\n description: item.function.description,\n input_schema: item.function.parameters! as any,\n })),\n },\n {\n signal: options?.signal,\n },\n );\n const isToolResult = result.content.find(\n (item) => item.type === 'tool_use',\n );\n if (isToolResult) {\n return {\n type: 'function' as const,\n function: {\n name: isToolResult.name,\n arguments: isToolResult.input as Record<string, any> | undefined,\n },\n };\n }\n const text = result.content.find((item) => item.type === 'text');\n return {\n type: 'text' as const,\n text: text!.text,\n };\n }\n}\n", "import { isTruthy } from '@cyia/util';\nimport {\n SystemChatCompletionContent,\n UserChatMessage,\n AssistantChatMessage,\n ChatCompletionContentPartStrType,\n ChatCompletionContentPartImageType,\n} from '../../message.define';\nimport * as v from 'valibot';\n// data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAR\nfunction baseImageSplit(str: string) {\n const mimeTypeIndex = str.indexOf(';');\n const dataStartIndex = str.indexOf(',', mimeTypeIndex);\n return {\n mimeType: str.slice(5, mimeTypeIndex) as\n | 'image/jpeg'\n | 'image/png'\n | 'image/gif'\n | 'image/webp',\n data: str.slice(dataStartIndex + 1),\n };\n}\n\nexport const AnthropicSystemMessageDefine = v.pipe(\n SystemChatCompletionContent,\n v.transform((list) =>\n list\n .map((item) => (item.type === 'text' ? item : undefined))\n .filter(isTruthy),\n ),\n);\nfunction contentConvert(\n part: ChatCompletionContentPartStrType | ChatCompletionContentPartImageType,\n) {\n if (part.type === 'text') {\n return part;\n }\n const result = baseImageSplit(part.image_url.url);\n return {\n type: 'image' as const,\n source: {\n type: 'base64' as const,\n media_type: result.mimeType,\n data: result.data,\n },\n };\n}\nconst UserMessageDefine = v.pipe(\n UserChatMessage,\n v.transform((item) => ({\n ...item,\n content: item.content.map(contentConvert),\n })),\n);\nconst AssistantMessageDefine = v.pipe(\n AssistantChatMessage,\n v.transform((item) => ({\n ...item,\n content: item.content.map(contentConvert),\n })),\n);\nexport const AnthropicChatMessageListDefine = v.array(\n v.union([UserMessageDefine, AssistantMessageDefine]),\n);\n", "import {\n AssistantChatMessageType,\n SystemChatMessageType,\n UserChatMessageType,\n} from '../message.define';\n\nexport function createSystemMessage() {\n return { role: 'system' } as SystemChatMessageType;\n}\nexport function createUserMessage(text?: string) {\n return {\n role: 'user',\n content:\n typeof text === 'string' ? [{ type: 'text', text: '' }] : undefined,\n } as UserChatMessageType;\n}\nexport function createAssistantMessage(text: string = '') {\n return {\n role: 'assistant',\n content: [{ type: 'text', text }],\n } as AssistantChatMessageType;\n}\n", "export const ThinkList = [\n 'think',\n 'thinking',\n 'reason',\n 'reasoning',\n 'thought',\n 'Thought',\n];\n", "import { asControl, actions, setComponent } from '@piying/view-angular-core';\nimport * as v from 'valibot';\nimport {\n asVirtualGroup,\n metadataPipe,\n omitIntersect,\n} from '@piying/valibot-visit';\nconst VendorList = [\n {\n value: 'openai',\n label: 'openai',\n options: {\n baseURL: '',\n modelList: [],\n description: '如果是openai兼容的厂商,需要设置baseURL',\n },\n },\n {\n value: '360',\n label: '360',\n options: { baseURL: 'https://ai.360.cn', modelList: [] },\n },\n {\n value: 'azure',\n label: 'azure',\n options: { baseURL: '', modelList: [] },\n },\n {\n value: 'moonshot',\n label: 'moonshot',\n options: { baseURL: 'https://api.moonshot.cn', modelList: [] },\n },\n {\n value: 'baichuan',\n label: 'baichuan',\n options: { baseURL: 'https://api.baichuan-ai.com', modelList: [] },\n },\n {\n value: 'minimax',\n label: 'minimax',\n options: { baseURL: 'https://api.minimax.chat', modelList: [] },\n },\n {\n value: 'mistralai',\n label: 'mistralai',\n options: { baseURL: 'https://api.mistral.ai', modelList: [] },\n },\n {\n value: 'groq',\n label: 'groq',\n options: { baseURL: 'https://api.groq.com/openai', modelList: [] },\n },\n {\n value: 'lingyiwanwu',\n label: 'lingyiwanwu',\n options: { baseURL: 'https://api.lingyiwanwu.com', modelList: [] },\n },\n {\n value: 'stepfun',\n label: 'stepfun',\n options: { baseURL: 'https://api.stepfun.com', modelList: [] },\n },\n {\n value: 'deepseek',\n label: 'deepseek',\n options: { baseURL: 'https://api.deepseek.com', modelList: [] },\n },\n {\n value: 'together.ai',\n label: 'together.ai',\n options: { baseURL: 'https://api.together.xyz', modelList: [] },\n },\n {\n value: 'volcengine',\n label: 'volcengine',\n options: {\n baseURL: 'https://ark.cn-beijing.volces.com/api/v3',\n modelList: [],\n },\n },\n {\n value: 'novita',\n label: 'novita',\n options: { baseURL: 'https://api.novita.ai/v3/openai', modelList: [] },\n },\n {\n value: 'siliconflow',\n label: 'siliconflow',\n options: { baseURL: 'https://api.siliconflow.cn', modelList: [] },\n },\n {\n value: 'tongyi',\n label: 'tongyi',\n options: {\n baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1',\n modelList: [],\n },\n },\n {\n value: 'zhipu',\n label: 'zhipu',\n options: {\n baseURL: 'https://open.bigmodel.cn/api/paas/v4',\n modelList: [],\n },\n },\n {\n value: 'spark',\n label: 'spark',\n options: {\n baseURL: 'https://spark-api-open.xf-yun.com/v1',\n modelList: [],\n },\n },\n {\n value: 'hunyuan',\n label: 'hunyuan',\n options: {\n baseURL: 'https://api.hunyuan.cloud.tencent.com/v1',\n modelList: [],\n },\n },\n\n {\n value: 'gemini',\n label: 'gemini',\n options: {\n baseURL: '',\n modelList: [],\n description: '非openai兼容,手动适配,如果有问题欢迎报告',\n },\n },\n {\n value: 'claude',\n label: 'claude',\n options: {\n baseURL: '',\n modelList: [],\n description: '非openai兼容,手动适配,如果有问题欢迎报告',\n },\n },\n] as const;\nconst vendorOptionsDescribe = `## 通用参数\n- \\`extraOptions\\`字段用于覆盖默认字段\n\\`\\`\\`json\n{\"厂商名(与vendor字段相同)\":{ \"extraOptions\":{\"temperature\":0.1,\"topP\":0.8,\"maxTokens\":8192,\"baseURL\":\"http://127.0.0.1:11434/v1\",\"apiKey\":\" \"} }\n\\`\\`\\`\n`;\nconst InputWrapper = metadataPipe(actions.wrappers.set(['tooltip', 'label']));\n\nexport const ChatItemDefine = v.pipe(\n v.intersect([\n v.pipe(\n v.object({\n name: v.pipe(v.string(), v.title('配置名')),\n vendor: v.pipe(\n v.optional(\n v.picklist(VendorList.map((item) => item.value)),\n 'openai',\n ),\n v.description('大语言模型提供的厂商'),\n v.title('对话厂商'),\n v.metadata({\n enumOptions: VendorList.map((item) => ({\n label: item.label,\n description: [\n (item.options as any).description\n ? (item.options as any).description\n : '',\n item.options.baseURL ? `链接: ${item.options.baseURL}` : '',\n ]\n .filter(Boolean)\n .join('\\n'),\n })),\n }),\n actions.inputs.patch({\n options: VendorList,\n }),\n ),\n }),\n actions.wrappers.patch(['div']),\n actions.class.top('flex *:flex-1 gap-2 items-center'),\n ),\n v.pipe(\n v.object({\n baseURL: v.pipe(\n v.optional(v.string(), 'http://127.0.0.1:11434/v1'),\n v.title('地址'),\n v.description('openai兼容接口'),\n ...InputWrapper,\n ),\n model: v.pipe(\n v.optional(v.string(), `qwen3:8b`),\n v.title('模型'),\n v.description(\n '## 模型名\\n### ollama模型推荐\\n- `qwen3:8b`\\n- `qwen3:14b`,`deepseek-r1:7b`,`deepseek-r1:14b`\\n### 图片对话模型\\n- `minicpm-v:8b`',\n ),\n ...InputWrapper,\n ),\n }),\n actions.wrappers.patch([\n {\n type: 'div',\n attributes: { class: 'flex *:flex-1 gap-2 items-center' },\n },\n ]),\n ),\n v.object({\n apiKey: v.pipe(\n v.optional(v.string()),\n v.description('本地部署默认可以不填'),\n v.title('apiKey')\n ),\n }),\n v.pipe(\n v.object({\n max_tokens: v.pipe(v.optional(v.number(), 8192), v.title('max_tokens')),\n top_p: v.pipe(\n v.optional(v.number(), 0.8),\n v.minValue(0),\n v.maxValue(10),\n v.description(`核采样(nucleus sampling)是温度采样的另一种替代方法,模型会考虑累积概率质量达到 top_p 的 token。例如,当 top_p 设为 0.1 时,仅考虑累积概率前 10% 的 token。\n\n我们通常建议调整 top_p 或温度参数,但不要同时调整两者。`),\n ...InputWrapper,\n v.title('top_p'),\n ),\n temperature: v.pipe(\n v.optional(v.pipe(v.number(), v.minValue(0), v.maxValue(2)), 0.1),\n v.description(\n '采样温度应设置在0到2之间。较高的值(如0.8)会使输出更随机,而较低的值(如0.2)则会使输出更集中且确定。我们通常建议仅调整此参数或top_p,而不同时调整两者。',\n ),\n ...InputWrapper,\n v.title('temperature'),\n ),\n frequency_penalty: v.pipe(\n v.optional(v.pipe(v.number(), v.minValue(-2), v.maxValue(2))),\n v.description(\n '取值范围为-2.0至2.0。正值会根据当前文本中已有标记的频率对新标记进行惩罚,从而降低模型逐字重复相同内容的概率。',\n ),\n ...InputWrapper,\n v.title('frequency_penalty'),\n ),\n presence_penalty: v.pipe(\n v.optional(v.pipe(v.number(), v.minValue(-2), v.maxValue(2))),\n v.description(\n '数值介于-2.0至2.0之间。正值会基于新标记是否已在当前文本中出现,对新标记施加惩罚,从而提升模型讨论新话题的可能性。',\n ),\n ...InputWrapper,\n v.title('presence_penalty'),\n ),\n seed: v.pipe(\n v.optional(v.pipe(v.number())),\n v.description(\n '若已指定,系统将尽力确保采样具有确定性,即使用相同种子和参数的重复请求将返回相同结果。确定性无法保证,请通过 system_fingerprint 响应参数监控后端变化。',\n ),\n ...InputWrapper,\n v.title('seed'),\n ),\n stop: v.pipe(\n v.optional(v.pipe(v.array(v.pipe(v.string())), v.maxLength(4))),\n v.description(\n '最多可指定4个停止序列,API将在生成到该序列时停止,返回的文本中不包含该停止序列。',\n ),\n asControl(),\n setComponent('chip-input-list'),\n actions.inputs.patch({\n addOnBlur: true,\n }),\n ...InputWrapper,\n v.title('stop'),\n ),\n // top_logprobs: v.pipe(\n // v.optional(v.pipe(v.number(), v.minValue(0), v.maxValue(20))),\n // v.description(\n // '一个介于0和20之间的整数,用于指定在每个标记位置返回的最可能的标记数量,每个标记均关联对应的对数概率。若使用此参数,则必须将logprobs设置为true。',\n // ),\n // ),\n\n // verbosity: v.pipe(\n // v.optional(v.picklist(['low', 'medium', 'high'])),\n // v.description(\n // `控制模型回复的详细程度。数值越低,回复越简洁;数值越高,回复越详细。当前支持的取值为低、中和高。`,\n // ),\n // ),\n // reasoning_effort: v.pipe(\n // v.optional(v.picklist(['minimal', 'low', 'medium', 'high'])),\n // v.description(\n // `控制模型回复的详细程度。数值越低,回复越简洁;数值越高,回复越详细。当前支持的取值为低、中和高。`,\n // ),\n // ),\n }),\n actions.wrappers.patch(['div']),\n actions.class.top('grid gap-2'),\n ),\n ]),\n actions.wrappers.patch(['div']),\n actions.class.top('grid gap-2'),\n asVirtualGroup(),\n);\n\nexport const VendorOptionsDefine = v.pipe(\n v.optional(\n v.record(\n v.string(),\n v.pipe(\n v.intersect([\n v.object({\n /** @internal */\n extraOptions: v.pipe(\n v.optional(omitIntersect(ChatItemDefine, ['name', 'vendor'])),\n v.description(`附加配置`),\n ),\n }),\n ]),\n actions.wrappers.patch(['div']),\n actions.class.top('grid gap-2'),\n asVirtualGroup(),\n ),\n ),\n ),\n v.description(vendorOptionsDescribe),\n setComponent('rest-chip-group'),\n actions.inputs.patch({\n optionalkeyList: VendorList.map((item) => item.value),\n placeholder: '请设置额外配置',\n }),\n v.title('厂商额外配置'),\n);\nexport const ChatParamsItemDefine = v.pipe(\n v.intersect([\n ChatItemDefine,\n v.object({ vendorOptions: VendorOptionsDefine }),\n ]),\n asVirtualGroup(),\n actions.wrappers.patch(['div']),\n actions.class.top('grid gap-2'),\n);\n\nexport const ChatParamsListDefine = v.pipe(\n v.array(ChatParamsItemDefine),\n setComponent('label-chip-array'),\n v.description('对话模型列表,目前用于切换使用'),\n actions.inputs.patch({\n displayKey: 'name',\n placeholder: '请添加配置',\n }),\n);\nexport type ChatModelOptions = v.InferOutput<typeof ChatParamsItemDefine>;\nexport type ChatModelOptionsInput = v.InferInput<typeof ChatParamsItemDefine>;\n\nexport const InputChatOptionsDefine = omitIntersect(ChatParamsItemDefine, [\n 'name',\n]);\nexport type CreateChatModelOptions = v.InferInput<\n typeof InputChatOptionsDefine\n>;\n", "import { InjectionToken, Signal } from 'static-injector';\nimport { OpenAIConfig } from './type';\n\nexport const OpenAIConfigToken = new InjectionToken<Signal<OpenAIConfig>>(\n 'OpenAIConfig',\n);\n", "import { computed, inject, signal } from 'static-injector';\n\nimport { omitBy } from 'es-toolkit';\nimport { bufferWhen, debounceTime, filter, Subject } from 'rxjs';\nimport { path } from '@cyia/vfs2';\nimport { HistoryItem } from './type/history';\nimport { OpenAIConfigToken } from './token';\nimport * as fs from 'fs';\nimport { parse, stringify } from 'yaml';\nimport { ChatMessageListOutputType } from './message.define';\nimport dayjs from 'dayjs';\nimport { isEmptyInput } from '@cyia/util';\n\nexport class ChatHistoryService {\n #update$ = signal(0);\n /** 外部监听更新用 */\n update$$ = computed(() => this.#update$());\n #logMap = new Map<string, Subject<HistoryItem>>();\n #config = inject(OpenAIConfigToken);\n #dir() {\n return this.#config().history.dir;\n }\n #createNewListen(fileName: string) {\n const filePath = path.join(this.#dir(), `${fileName}.yml`);\n const instance = new Subject<HistoryItem>();\n instance\n .pipe(\n bufferWhen(() => instance.pipe(debounceTime(2_000))),\n filter((list) => !!list.length),\n )\n .subscribe(async (inputList) => {\n if (!fs.existsSync(this.#dir())) {\n await fs.promises.mkdir(this.#dir(), { recursive: true });\n }\n try {\n let list: HistoryItem[] = [];\n if (await fs.existsSync(filePath)) {\n const content = await fs.promises.readFile(filePath, {\n encoding: 'utf-8',\n });\n list = parse(content);\n } else {\n list = [];\n }\n list.unshift(...inputList.reverse());\n await fs.promises.writeFile(filePath, stringify(list));\n this.#update$.update((a) => a + 1);\n } catch (error) {\n this.#config().captureException(error);\n }\n });\n this.#logMap.set(fileName, instance);\n\n return instance;\n }\n save(messages: ChatMessageListOutputType, options: any, config: any) {\n if (!this.#config().history.enable) {\n return;\n }\n try {\n const fileName = dayjs().format('YYYY-MM-DD');\n const message$ =\n this.#logMap.get(fileName) ?? this.#createNewListen(fileName);\n const item = {\n date: dayjs().valueOf(),\n messages,\n options: omitBy(options, isEmptyInput),\n config,\n };\n message$.next(item);\n } catch (error) {\n try {\n this.#config().captureException(error);\n } catch (error) {}\n }\n }\n}\n", "import { ChatHistoryService } from './chat.history.service';\nimport { ChatProviderService } from './service';\nimport { OpenAIConfigToken } from './token';\n\nexport const OPENAI_MODULE = {\n provider: [ChatProviderService, ChatHistoryService],\n token: { OpenAIConfigToken },\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["export * from './chat/service';\nexport * from './chat/token';\nexport * from './chat/options.define';\nexport * from './chat/message.define';\nexport * from './chat/util/create';\nexport * from './chat/type/history';\nexport * from './chat/type';\nexport * from './chat/chat.history.service';\nexport * from './chat/module';\n", "import { inject } from 'static-injector';\nimport { OpenAIChat } from './vendor/openai';\nimport { ChatRequestOptions, ChatToolBodyInput } from './type';\nimport { createCompatibleFactory } from './vendor/openai-compatible.factory';\nimport { GeminiChat } from './vendor/genmini/genmini';\nimport { AnthropicChat } from './vendor/anthropic/anthropic';\nimport { createAssistantMessage } from './util/create';\nimport { ThinkList } from './const';\nimport {\n CreateChatModelOptions,\n InputChatOptionsDefine,\n} from './options.define';\nimport { OpenAIConfigToken } from './token';\nimport { ChatHistoryService } from './chat.history.service';\nimport * as v from 'valibot';\nexport class ChatProviderService {\n #config = inject(OpenAIConfigToken);\n #chatHistory = inject(ChatHistoryService);\n\n create(input: Omit<CreateChatModelOptions, 'name'>) {\n let options = v.parse(InputChatOptionsDefine, input);\n let instance;\n const extraOptions =\n options.vendorOptions?.[options.vendor]?.['extraOptions'];\n options = {\n ...extraOptions,\n ...options,\n apiKey: options.apiKey?.trim() || extraOptions?.apiKey || ' ',\n };\n if (!options.vendor || options.vendor === 'openai') {\n instance = new OpenAIChat(options);\n } else if (options.vendor === 'gemini') {\n instance = new GeminiChat(options);\n } else if (options.vendor === 'claude') {\n instance = new AnthropicChat(options);\n } else {\n instance = createCompatibleFactory(options);\n }\n instance.init();\n const openAIOptions = this.#config;\n const chatHistory = this.#chatHistory;\n\n const fn = async function* (...args: Parameters<OpenAIChat['stream']>) {\n const result = instance.stream(args[0] as any, {\n ...args[1],\n tryPull: openAIOptions().tryPull,\n pullModel: openAIOptions().pullModel,\n });\n let content = '';\n let isThink = false;\n let thinkStart = 0;\n let thinkEnd: number | undefined;\n let start = true;\n /** 是否处于思考期 */\n let isThinking = false;\n let contentEnd: number | undefined;\n let lastEmit;\n for await (const delta of result) {\n content += delta;\n if (start) {\n start = false;\n const result = ThinkList.find((item) =>\n delta.startsWith(`<${item}>`),\n );\n if (result) {\n isThink = true;\n thinkStart = result.length + 2;\n isThinking = true;\n }\n } else if (isThink && thinkEnd === undefined) {\n const result = ThinkList.find((item) => delta === `</${item}>`);\n if (result) {\n contentEnd = content.length;\n thinkEnd = content.length - result.length - 3;\n isThinking = false;\n }\n }\n lastEmit = {\n content: isThink\n ? (contentEnd ? content.slice(contentEnd) : '').trim()\n : content,\n isThinking: isThinking,\n delta,\n thinkContent: isThink\n ? content.slice(thinkStart, thinkEnd).trim()\n : undefined,\n };\n yield lastEmit;\n }\n const lastMessage = createAssistantMessage(\n isThink ? (contentEnd ? content.slice(contentEnd) : '') : content,\n );\n if (lastEmit?.thinkContent) {\n lastMessage.thinkContent = lastEmit.thinkContent;\n }\n chatHistory.save(\n [...args[0].messages, lastMessage as any],\n { ...args[0], messages: undefined },\n options,\n );\n };\n return {\n stream: fn,\n chat: async (...args: Parameters<OpenAIChat['stream']>) => {\n const result = fn(...args);\n let obj;\n for await (const element of result) {\n obj = element;\n }\n return obj!;\n },\n callTool: (input: ChatToolBodyInput, options?: ChatRequestOptions) =>\n instance.callTool(input, options),\n };\n }\n}\n", "import { OpenAI } from 'openai';\nimport { ChatMessageListDefine } from '../message.define';\nimport { ChatRequestOptions, ChatToolBodyInput } from '../type';\nimport * as v from 'valibot';\nimport type { Stream } from 'openai/streaming.mjs';\nimport { ChatCompletionCreateParamsStreaming } from 'openai/resources/index.mjs';\nimport { ChatModelOptions } from '../options.define';\nexport class OpenAIChat {\n protected instance!: OpenAI;\n protected extraBody = {};\n protected extraHeaders = {};\n constructor(protected options: ChatModelOptions) {}\n init() {\n this.instance = new OpenAI({\n apiKey: this.options.apiKey || ' ',\n baseURL: this.options.baseURL ?? undefined,\n });\n }\n async #createStream(\n input: ChatCompletionCreateParamsStreaming,\n options?: ChatRequestOptions,\n ): Promise<\n Stream<OpenAI.Chat.Completions.ChatCompletionChunk> & {\n _request_id?: string | null;\n }\n > {\n return await this.instance.chat.completions\n .create(input, { headers: this.extraHeaders, ...options })\n .catch(async (error) => {\n // ollama server/routes.go\n if (options?.tryPull?.(error)) {\n await options?.pullModel!(this.options.model);\n return this.#createStream(input, {\n ...options,\n tryPull: () => false,\n });\n }\n\n throw error;\n });\n }\n async *stream(\n input: Omit<\n ChatCompletionCreateParamsStreaming,\n | 'model'\n | 'stream'\n | 'max_tokens'\n | 'top_p'\n | 'temperature'\n | 'frequency_penalty'\n | 'presence_penalty'\n | 'seed'\n | 'stop'\n >,\n options?: ChatRequestOptions,\n ) {\n const input2 = {\n ...input,\n messages: input.messages,\n model: this.options.model,\n stream: true,\n max_tokens: this.options.max_tokens,\n top_p: this.options.top_p,\n temperature: this.options.temperature,\n frequency_penalty: this.options.frequency_penalty,\n presence_penalty: this.options.presence_penalty,\n seed: this.options.seed,\n stop: this.options.stop,\n ...this.extraBody,\n } as ChatCompletionCreateParamsStreaming;\n const result = await this.#createStream(input2, options);\n let isThinking = 0;\n for await (const item of result) {\n try {\n //reasoning_content 思考\n if (!item.choices[0].finish_reason) {\n if (\n typeof (item.choices[0].delta as any).reasoning_content ===\n 'string' ||\n typeof (item.choices[0].delta as any).reasoning === 'string'\n ) {\n if (isThinking === 0) {\n isThinking = 1;\n yield '<thinking>';\n }\n const result =\n (item.choices[0].delta as any).reasoning_content ??\n (item.choices[0].delta as any).reasoning;\n if (result) {\n yield result;\n }\n } else if (typeof item.choices[0].delta.content === 'string') {\n if (isThinking === 1) {\n yield '</thinking>';\n isThinking = 2;\n }\n const result = item.choices[0].delta.content!;\n if (result) {\n yield result;\n }\n }\n }\n } catch (error) {\n throw error;\n }\n }\n }\n // 工具调用,暂时不清楚怎么调用...是返回工具,还是返回对话\n async callTool(input: ChatToolBodyInput, options?: ChatRequestOptions) {\n const result = await this.instance.chat.completions.create(\n {\n ...input,\n messages: v.parse(ChatMessageListDefine, input.messages),\n model: this.options.model,\n max_tokens: this.options.max_tokens,\n top_p: this.options.top_p,\n temperature: this.options.temperature,\n frequency_penalty: this.options.frequency_penalty,\n presence_penalty: this.options.presence_penalty,\n seed: this.options.seed,\n stop: this.options.stop,\n ...this.extraBody,\n stream: false,\n },\n { headers: this.extraHeaders, ...options },\n );\n const isTool = !!result.choices[0].message.tool_calls;\n if (isTool) {\n // todo\n const data = (result.choices[0].message.tool_calls![0] as any).function;\n return {\n type: 'function' as const,\n function: {\n name: data.name,\n arguments: JSON.parse(data.arguments) as\n | Record<string, any>\n | undefined,\n },\n };\n }\n return { type: 'text' as const, text: result.choices[0].message.content! };\n }\n}\n", "import * as v from 'valibot';\nexport const ChatCompletionContentPartStr = v.object({\n text: v.string(),\n type: v.optional(v.literal('text'), 'text'),\n});\nexport type ChatCompletionContentPartStrType = v.InferOutput<\n typeof ChatCompletionContentPartStr\n>;\n\nexport const ChatCompletionContentPartImage = v.object({\n image_url: v.object({\n url: v.string(),\n detail: v.optional(v.picklist(['auto', 'low', 'high'])),\n }),\n type: v.optional(v.literal('image_url'), 'image_url'),\n});\nexport type ChatCompletionContentPartImageType = v.InferOutput<\n typeof ChatCompletionContentPartImage\n>;\nexport const ChatCompletionContentPart = v.array(\n v.union([ChatCompletionContentPartStr, ChatCompletionContentPartImage]),\n);\nexport const SystemChatCompletionContent = v.array(\n ChatCompletionContentPartStr,\n);\nexport const UserChatCompletionContent = ChatCompletionContentPart;\nexport type UserChatCompletionContentType = v.InferOutput<\n typeof UserChatCompletionContent\n>;\nexport const AssistantChatCompletionContent = v.array(\n ChatCompletionContentPartStr,\n);\nexport const SystemChatMessage = v.object({\n role: v.optional(v.literal('system'), 'system'),\n content: SystemChatCompletionContent,\n});\nexport type SystemChatMessageType = v.InferOutput<typeof SystemChatMessage>;\nexport const UserChatMessage = v.object({\n role: v.optional(v.literal('user'), 'user'),\n content: UserChatCompletionContent,\n});\nexport type UserChatMessageType = v.InferOutput<typeof UserChatMessage>;\n\nexport const AssistantChatMessage = v.object({\n role: v.optional(v.literal('assistant'), 'assistant'),\n content: AssistantChatCompletionContent,\n thinkContent: v.optional(v.string()),\n});\n\nexport type AssistantChatMessageType = v.InferOutput<\n typeof AssistantChatMessage\n>;\n\nexport const ChatMessageItemDefine = v.union([\n SystemChatMessage,\n UserChatMessage,\n AssistantChatMessage,\n]);\nexport type ChatMessageItemType = v.InferOutput<typeof ChatMessageItemDefine>;\nexport const ChatMessageListDefine = v.array(ChatMessageItemDefine);\n\nexport type ChatMessageListOutputType = v.InferOutput<\n typeof ChatMessageListDefine\n>;\nexport type ChatMessageListInputType = v.InferOutput<\n typeof ChatMessageListDefine\n>;\n", "import { ChatModelOptions } from '../options.define';\nimport { OpenAIChat } from './openai';\nconst VendorObject: Record<\n string,\n { options: { baseURL: string; modelList: string[] } }\n> = {\n '360': { options: { baseURL: 'https://ai.360.cn', modelList: [] } },\n azure: { options: { baseURL: '', modelList: [] } },\n moonshot: { options: { baseURL: 'https://api.moonshot.cn', modelList: [] } },\n baichuan: {\n options: { baseURL: 'https://api.baichuan-ai.com', modelList: [] },\n },\n minimax: { options: { baseURL: 'https://api.minimax.chat', modelList: [] } },\n mistralai: { options: { baseURL: 'https://api.mistral.ai', modelList: [] } },\n groq: {\n options: { baseURL: 'https://api.groq.com/openai', modelList: [] },\n },\n lingyiwanwu: {\n options: { baseURL: 'https://api.lingyiwanwu.com', modelList: [] },\n },\n stepfun: { options: { baseURL: 'https://api.stepfun.com', modelList: [] } },\n deepseek: { options: { baseURL: 'https://api.deepseek.com', modelList: [] } },\n 'together.ai': {\n options: { baseURL: 'https://api.together.xyz', modelList: [] },\n },\n volcengine: {\n options: {\n baseURL: 'https://ark.cn-beijing.volces.com/api/v3',\n modelList: [],\n },\n },\n novita: {\n options: { baseURL: 'https://api.novita.ai/v3/openai', modelList: [] },\n },\n siliconflow: {\n options: { baseURL: 'https://api.siliconflow.cn', modelList: [] },\n },\n // 官网明确兼容\n // https://help.aliyun.com/zh/model-studio/developer-reference/use-qwen-by-calling-api?spm=a2c6h.13066369.question.5.3a0e527bbxeJLJ#4ec3e641c294d\n tongyi: {\n options: {\n baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1',\n modelList: [],\n },\n },\n // 文档上看是一样的\n // https://open.bigmodel.cn/dev/api/normal-model/glm-4\n zhipu: {\n options: {\n baseURL: 'https://open.bigmodel.cn/api/paas/v4',\n modelList: [],\n },\n },\n // 明确兼容\n // https://www.xfyun.cn/doc/spark/HTTP%E8%B0%83%E7%94%A8%E6%96%87%E6%A1%A3.html#_7-%E4%BD%BF%E7%94%A8openai-sdk%E8%AF%B7%E6%B1%82%E7%A4%BA%E4%BE%8B\n spark: {\n options: {\n baseURL: 'https://spark-api-open.xf-yun.com/v1',\n modelList: [],\n },\n },\n // 官方兼容\n // https://cloud.tencent.com/document/product/1729/111007\n hunyuan: {\n options: {\n baseURL: 'https://api.hunyuan.cloud.tencent.com/v1',\n modelList: [],\n },\n },\n};\n\nexport function createCompatibleFactory(options: ChatModelOptions) {\n const vendorConfig = VendorObject[options.vendor];\n return new OpenAIChat({\n ...options,\n baseURL: vendorConfig.options.baseURL,\n });\n}\n", "import { OpenAIChat } from '../openai';\nimport { GoogleGenerativeAI, StartChatParams } from '@google/generative-ai';\nimport {\n GenminiChatMessageListDefine,\n GenminiSystemMessageDefine,\n} from './message.define';\nimport * as v from 'valibot';\nimport { ChatBodyInput, ChatRequestOptions } from '../../type';\n\nexport class GeminiChat extends OpenAIChat {\n #ggai!: GoogleGenerativeAI;\n override init(): void {\n this.#ggai = new GoogleGenerativeAI(this.options.apiKey!);\n }\n override async *stream(\n input: ChatBodyInput,\n options?: ChatRequestOptions,\n ): AsyncGenerator<string, void, unknown> {\n const model = this.#ggai.getGenerativeModel({\n model: this.options.model,\n generationConfig: {\n topP: this.options.top_p,\n temperature: this.options.temperature,\n maxOutputTokens: this.options.max_tokens,\n },\n });\n const messages = input.messages;\n const data = {} as Partial<StartChatParams>;\n if (messages[0].role === 'system') {\n const system = messages.shift();\n data.systemInstruction = v.parse(GenminiSystemMessageDefine, system);\n }\n data.history = v.parse(GenminiChatMessageListDefine, messages);\n const lastMessage = data.history.pop()!;\n\n const chat = model.startChat(data);\n const result = await chat.sendMessageStream(lastMessage.parts, {\n signal: options?.signal,\n });\n for await (const chunk of result.stream) {\n const chunkText = chunk.text();\n yield chunkText;\n }\n }\n}\n", "import * as v from 'valibot';\nimport {\n AssistantChatMessage,\n ChatCompletionContentPartImageType,\n ChatCompletionContentPartStrType,\n SystemChatMessage,\n UserChatMessage,\n} from '../../message.define';\nimport { isTruthy } from '@cyia/util';\n\nfunction messageContentTransform(\n list: (\n | ChatCompletionContentPartStrType\n | ChatCompletionContentPartImageType\n )[],\n) {\n return list\n .map((item) => (item.type === 'text' ? { text: item.text } : undefined))\n .filter(isTruthy);\n}\nexport const GenminiSystemMessageDefine = v.pipe(\n SystemChatMessage,\n v.transform((item) => ({\n role: 'system',\n parts: messageContentTransform(item.content),\n })),\n);\n\nexport const GenminiChatMessageListDefine = v.pipe(\n v.array(\n v.union([\n v.pipe(\n UserChatMessage,\n v.transform((item) => ({\n role: 'user' as const,\n parts: messageContentTransform(item.content),\n })),\n ),\n\n v.pipe(\n AssistantChatMessage,\n v.transform((item) => ({\n role: 'model' as const,\n parts: messageContentTransform(item.content),\n })),\n ),\n ]),\n ),\n);\n", "import { OpenAIChat } from '../openai';\nimport Anthropic from '@anthropic-ai/sdk';\nimport {\n AnthropicChatMessageListDefine,\n AnthropicSystemMessageDefine,\n} from './message.define';\nimport { createAsyncGeneratorAdapter } from '@cyia/util';\nimport * as v from 'valibot';\nimport {\n ChatBodyInput,\n ChatRequestOptions,\n ChatToolBodyInput,\n} from '../../type';\nexport class AnthropicChat extends OpenAIChat {\n client!: Anthropic;\n override init(): void {\n this.client = new Anthropic({ apiKey: this.options.apiKey });\n }\n override async *stream(\n input: ChatBodyInput,\n options?: ChatRequestOptions,\n ): AsyncGenerator<string, void, unknown> {\n const body = {\n model: this.options.model,\n max_tokens: this.options.max_tokens,\n top_p: this.options.top_p,\n temperature: this.options.temperature,\n stream: true,\n } as Partial<Anthropic.Messages.MessageStreamParams>;\n\n if (input.messages[0].role === 'system') {\n const system = input.messages.shift()!.content;\n body.system = v.parse(AnthropicSystemMessageDefine, system);\n }\n body.messages = v.parse(AnthropicChatMessageListDefine, input.messages);\n const result = this.client.messages.stream(body as any, {\n signal: options?.signal,\n });\n const aga = createAsyncGeneratorAdapter<string>();\n result.once('end', () => aga.complete());\n result.on('text', (text) => {\n aga.next(text);\n });\n for await (const item of aga.getData()) {\n yield item;\n }\n }\n override async callTool(\n input: ChatToolBodyInput,\n options?: ChatRequestOptions,\n ) {\n const body =\n {} as Partial<Anthropic.Messages.MessageCreateParamsNonStreaming> &\n Pick<Anthropic.Messages.MessageCreateParamsNonStreaming, 'messages'>;\n\n if (input.messages[0].role === 'system') {\n const system = input.messages.shift()!.content;\n body.system = v.parse(AnthropicSystemMessageDefine, system);\n }\n body.messages = v.parse(AnthropicChatMessageListDefine, input.messages);\n const result = await this.client.messages.create(\n {\n ...body,\n model: this.options.model,\n max_tokens: this.options.max_tokens,\n top_p: this.options.top_p,\n temperature: this.options.temperature,\n stream: false,\n tools: input.tools.map((item) => ({\n name: item.function.name,\n description: item.function.description,\n input_schema: item.function.parameters! as any,\n })),\n },\n {\n signal: options?.signal,\n },\n );\n const isToolResult = result.content.find(\n (item) => item.type === 'tool_use',\n );\n if (isToolResult) {\n return {\n type: 'function' as const,\n function: {\n name: isToolResult.name,\n arguments: isToolResult.input as Record<string, any> | undefined,\n },\n };\n }\n const text = result.content.find((item) => item.type === 'text');\n return {\n type: 'text' as const,\n text: text!.text,\n };\n }\n}\n", "import { isTruthy } from '@cyia/util';\nimport {\n SystemChatCompletionContent,\n UserChatMessage,\n AssistantChatMessage,\n ChatCompletionContentPartStrType,\n ChatCompletionContentPartImageType,\n} from '../../message.define';\nimport * as v from 'valibot';\n// data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAR\nfunction baseImageSplit(str: string) {\n const mimeTypeIndex = str.indexOf(';');\n const dataStartIndex = str.indexOf(',', mimeTypeIndex);\n return {\n mimeType: str.slice(5, mimeTypeIndex) as\n | 'image/jpeg'\n | 'image/png'\n | 'image/gif'\n | 'image/webp',\n data: str.slice(dataStartIndex + 1),\n };\n}\n\nexport const AnthropicSystemMessageDefine = v.pipe(\n SystemChatCompletionContent,\n v.transform((list) =>\n list\n .map((item) => (item.type === 'text' ? item : undefined))\n .filter(isTruthy),\n ),\n);\nfunction contentConvert(\n part: ChatCompletionContentPartStrType | ChatCompletionContentPartImageType,\n) {\n if (part.type === 'text') {\n return part;\n }\n const result = baseImageSplit(part.image_url.url);\n return {\n type: 'image' as const,\n source: {\n type: 'base64' as const,\n media_type: result.mimeType,\n data: result.data,\n },\n };\n}\nconst UserMessageDefine = v.pipe(\n UserChatMessage,\n v.transform((item) => ({\n ...item,\n content: item.content.map(contentConvert),\n })),\n);\nconst AssistantMessageDefine = v.pipe(\n AssistantChatMessage,\n v.transform((item) => ({\n ...item,\n content: item.content.map(contentConvert),\n })),\n);\nexport const AnthropicChatMessageListDefine = v.array(\n v.union([UserMessageDefine, AssistantMessageDefine]),\n);\n", "import {\n AssistantChatMessageType,\n SystemChatMessageType,\n UserChatMessageType,\n} from '../message.define';\n\nexport function createSystemMessage() {\n return { role: 'system' } as SystemChatMessageType;\n}\nexport function createUserMessage(text?: string) {\n return {\n role: 'user',\n content:\n typeof text === 'string' ? [{ type: 'text', text: '' }] : undefined,\n } as UserChatMessageType;\n}\nexport function createAssistantMessage(text: string = '') {\n return {\n role: 'assistant',\n content: [{ type: 'text', text }],\n } as AssistantChatMessageType;\n}\n", "export const ThinkList = [\n 'think',\n 'thinking',\n 'reason',\n 'reasoning',\n 'thought',\n 'Thought',\n];\n", "import { asControl, actions, setComponent } from '@piying/view-angular-core';\nimport * as v from 'valibot';\nimport {\n asVirtualGroup,\n metadataPipe,\n omitIntersect,\n} from '@piying/valibot-visit';\nconst VendorList = [\n {\n value: 'openai',\n label: 'openai',\n options: {\n baseURL: '',\n modelList: [],\n description: '如果是openai兼容的厂商,需要设置baseURL',\n },\n },\n {\n value: '360',\n label: '360',\n options: { baseURL: 'https://ai.360.cn', modelList: [] },\n },\n {\n value: 'azure',\n label: 'azure',\n options: { baseURL: '', modelList: [] },\n },\n {\n value: 'moonshot',\n label: 'moonshot',\n options: { baseURL: 'https://api.moonshot.cn', modelList: [] },\n },\n {\n value: 'baichuan',\n label: 'baichuan',\n options: { baseURL: 'https://api.baichuan-ai.com', modelList: [] },\n },\n {\n value: 'minimax',\n label: 'minimax',\n options: { baseURL: 'https://api.minimax.chat', modelList: [] },\n },\n {\n value: 'mistralai',\n label: 'mistralai',\n options: { baseURL: 'https://api.mistral.ai', modelList: [] },\n },\n {\n value: 'groq',\n label: 'groq',\n options: { baseURL: 'https://api.groq.com/openai', modelList: [] },\n },\n {\n value: 'lingyiwanwu',\n label: 'lingyiwanwu',\n options: { baseURL: 'https://api.lingyiwanwu.com', modelList: [] },\n },\n {\n value: 'stepfun',\n label: 'stepfun',\n options: { baseURL: 'https://api.stepfun.com', modelList: [] },\n },\n {\n value: 'deepseek',\n label: 'deepseek',\n options: { baseURL: 'https://api.deepseek.com', modelList: [] },\n },\n {\n value: 'together.ai',\n label: 'together.ai',\n options: { baseURL: 'https://api.together.xyz', modelList: [] },\n },\n {\n value: 'volcengine',\n label: 'volcengine',\n options: {\n baseURL: 'https://ark.cn-beijing.volces.com/api/v3',\n modelList: [],\n },\n },\n {\n value: 'novita',\n label: 'novita',\n options: { baseURL: 'https://api.novita.ai/v3/openai', modelList: [] },\n },\n {\n value: 'siliconflow',\n label: 'siliconflow',\n options: { baseURL: 'https://api.siliconflow.cn', modelList: [] },\n },\n {\n value: 'tongyi',\n label: 'tongyi',\n options: {\n baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1',\n modelList: [],\n },\n },\n {\n value: 'zhipu',\n label: 'zhipu',\n options: {\n baseURL: 'https://open.bigmodel.cn/api/paas/v4',\n modelList: [],\n },\n },\n {\n value: 'spark',\n label: 'spark',\n options: {\n baseURL: 'https://spark-api-open.xf-yun.com/v1',\n modelList: [],\n },\n },\n {\n value: 'hunyuan',\n label: 'hunyuan',\n options: {\n baseURL: 'https://api.hunyuan.cloud.tencent.com/v1',\n modelList: [],\n },\n },\n\n {\n value: 'gemini',\n label: 'gemini',\n options: {\n baseURL: '',\n modelList: [],\n description: '非openai兼容,手动适配,如果有问题欢迎报告',\n },\n },\n {\n value: 'claude',\n label: 'claude',\n options: {\n baseURL: '',\n modelList: [],\n description: '非openai兼容,手动适配,如果有问题欢迎报告',\n },\n },\n] as const;\nconst vendorOptionsDescribe = `## 通用参数\n- \\`extraOptions\\`字段用于覆盖默认字段\n\\`\\`\\`json\n{\"厂商名(与vendor字段相同)\":{ \"extraOptions\":{\"temperature\":0.1,\"topP\":0.8,\"maxTokens\":8192,\"baseURL\":\"http://127.0.0.1:11434/v1\",\"apiKey\":\" \"} }\n\\`\\`\\`\n`;\nconst InputWrapper = metadataPipe(actions.wrappers.set(['tooltip', 'label']));\n\nexport const ChatItemDefine = v.pipe(\n v.intersect([\n v.pipe(\n v.object({\n name: v.pipe(v.string(), v.title('配置名')),\n vendor: v.pipe(\n v.optional(\n v.picklist(VendorList.map((item) => item.value)),\n 'openai',\n ),\n v.description('大语言模型提供的厂商'),\n v.title('对话厂商'),\n v.metadata({\n enumOptions: VendorList.map((item) => ({\n label: item.label,\n description: [\n (item.options as any).description\n ? (item.options as any).description\n : '',\n item.options.baseURL ? `链接: ${item.options.baseURL}` : '',\n ]\n .filter(Boolean)\n .join('\\n'),\n })),\n }),\n actions.inputs.patch({\n options: VendorList,\n }),\n ),\n }),\n actions.wrappers.patch(['div']),\n actions.class.top('flex *:flex-1 gap-2 items-center'),\n ),\n v.pipe(\n v.object({\n baseURL: v.pipe(\n v.optional(v.string(), 'http://127.0.0.1:11434/v1'),\n v.title('地址'),\n v.description('openai兼容接口'),\n ...InputWrapper,\n ),\n model: v.pipe(\n v.optional(v.string(), `qwen3:8b`),\n v.title('模型'),\n v.description(\n '## 模型名\\n### ollama模型推荐\\n- `qwen3:8b`\\n- `qwen3:14b`,`deepseek-r1:7b`,`deepseek-r1:14b`\\n### 图片对话模型\\n- `minicpm-v:8b`',\n ),\n ...InputWrapper,\n ),\n }),\n actions.wrappers.patch([\n {\n type: 'div',\n attributes: { class: 'flex *:flex-1 gap-2 items-center' },\n },\n ]),\n ),\n v.object({\n apiKey: v.pipe(\n v.optional(v.string()),\n v.description('本地部署默认可以不填'),\n v.title('apiKey')\n ),\n }),\n v.pipe(\n v.object({\n max_tokens: v.pipe(v.optional(v.number(), 8192), v.title('max_tokens')),\n top_p: v.pipe(\n v.optional(v.number(), 0.8),\n v.minValue(0),\n v.maxValue(10),\n v.description(`核采样(nucleus sampling)是温度采样的另一种替代方法,模型会考虑累积概率质量达到 top_p 的 token。例如,当 top_p 设为 0.1 时,仅考虑累积概率前 10% 的 token。\n\n我们通常建议调整 top_p 或温度参数,但不要同时调整两者。`),\n ...InputWrapper,\n v.title('top_p'),\n ),\n temperature: v.pipe(\n v.optional(v.pipe(v.number(), v.minValue(0), v.maxValue(2)), 0.1),\n v.description(\n '采样温度应设置在0到2之间。较高的值(如0.8)会使输出更随机,而较低的值(如0.2)则会使输出更集中且确定。我们通常建议仅调整此参数或top_p,而不同时调整两者。',\n ),\n ...InputWrapper,\n v.title('temperature'),\n ),\n frequency_penalty: v.pipe(\n v.optional(v.pipe(v.number(), v.minValue(-2), v.maxValue(2))),\n v.description(\n '取值范围为-2.0至2.0。正值会根据当前文本中已有标记的频率对新标记进行惩罚,从而降低模型逐字重复相同内容的概率。',\n ),\n ...InputWrapper,\n v.title('frequency_penalty'),\n ),\n presence_penalty: v.pipe(\n v.optional(v.pipe(v.number(), v.minValue(-2), v.maxValue(2))),\n v.description(\n '数值介于-2.0至2.0之间。正值会基于新标记是否已在当前文本中出现,对新标记施加惩罚,从而提升模型讨论新话题的可能性。',\n ),\n ...InputWrapper,\n v.title('presence_penalty'),\n ),\n seed: v.pipe(\n v.optional(v.pipe(v.number())),\n v.description(\n '若已指定,系统将尽力确保采样具有确定性,即使用相同种子和参数的重复请求将返回相同结果。确定性无法保证,请通过 system_fingerprint 响应参数监控后端变化。',\n ),\n ...InputWrapper,\n v.title('seed'),\n ),\n stop: v.pipe(\n v.optional(v.pipe(v.array(v.pipe(v.string())), v.maxLength(4))),\n v.description(\n '最多可指定4个停止序列,API将在生成到该序列时停止,返回的文本中不包含该停止序列。',\n ),\n asControl(),\n setComponent('chip-input-list'),\n actions.inputs.patch({\n addOnBlur: true,\n }),\n ...InputWrapper,\n v.title('stop'),\n ),\n // top_logprobs: v.pipe(\n // v.optional(v.pipe(v.number(), v.minValue(0), v.maxValue(20))),\n // v.description(\n // '一个介于0和20之间的整数,用于指定在每个标记位置返回的最可能的标记数量,每个标记均关联对应的对数概率。若使用此参数,则必须将logprobs设置为true。',\n // ),\n // ),\n\n // verbosity: v.pipe(\n // v.optional(v.picklist(['low', 'medium', 'high'])),\n // v.description(\n // `控制模型回复的详细程度。数值越低,回复越简洁;数值越高,回复越详细。当前支持的取值为低、中和高。`,\n // ),\n // ),\n // reasoning_effort: v.pipe(\n // v.optional(v.picklist(['minimal', 'low', 'medium', 'high'])),\n // v.description(\n // `控制模型回复的详细程度。数值越低,回复越简洁;数值越高,回复越详细。当前支持的取值为低、中和高。`,\n // ),\n // ),\n }),\n actions.wrappers.patch(['div']),\n actions.class.top('grid gap-2'),\n ),\n ]),\n actions.wrappers.patch(['div']),\n actions.class.top('grid gap-2'),\n asVirtualGroup(),\n);\n\nexport const VendorOptionsDefine = v.pipe(\n v.optional(\n v.record(\n v.string(),\n v.pipe(\n v.intersect([\n v.object({\n /** @internal */\n extraOptions: v.pipe(\n v.optional(omitIntersect(ChatItemDefine, ['name', 'vendor'])),\n v.description(`附加配置`),\n ),\n }),\n ]),\n actions.wrappers.patch(['div']),\n actions.class.top('grid gap-2'),\n asVirtualGroup(),\n ),\n ),\n ),\n v.description(vendorOptionsDescribe),\n setComponent('rest-chip-group'),\n actions.inputs.patch({\n optionalkeyList: VendorList.map((item) => item.value),\n placeholder: '请设置额外配置',\n }),\n v.title('厂商额外配置'),\n);\nexport const ChatParamsItemDefine = v.pipe(\n v.intersect([\n ChatItemDefine,\n v.object({ vendorOptions: VendorOptionsDefine }),\n ]),\n asVirtualGroup(),\n actions.wrappers.patch(['div']),\n actions.class.top('grid gap-2'),\n);\n\nexport const ChatParamsListDefine = v.pipe(\n v.array(ChatParamsItemDefine),\n setComponent('label-chip-array'),\n v.description('对话模型列表,目前用于切换使用'),\n actions.inputs.patch({\n displayKey: 'name',\n placeholder: '请添加配置',\n }),\n);\nexport type ChatModelOptions = v.InferOutput<typeof ChatParamsItemDefine>;\nexport type ChatModelOptionsInput = v.InferInput<typeof ChatParamsItemDefine>;\n\nexport const InputChatOptionsDefine = omitIntersect(ChatParamsItemDefine, [\n 'name',\n]);\nexport type CreateChatModelOptions = v.InferInput<\n typeof InputChatOptionsDefine\n>;\n", "import { InjectionToken, Signal } from 'static-injector';\nimport { OpenAIConfig } from './type';\n\nexport const OpenAIConfigToken = new InjectionToken<Signal<OpenAIConfig>>(\n 'OpenAIConfig',\n);\n", "import { computed, inject, signal } from 'static-injector';\n\nimport { omitBy } from 'es-toolkit';\nimport { bufferWhen, debounceTime, filter, Subject } from 'rxjs';\nimport { path } from '@cyia/vfs2';\nimport { HistoryItem } from './type/history';\nimport { OpenAIConfigToken } from './token';\nimport * as fs from 'fs';\nimport { parse, stringify } from 'yaml';\nimport { ChatMessageListOutputType } from './message.define';\nimport dayjs from 'dayjs';\nimport { isEmptyInput } from '@cyia/util';\n\nexport class ChatHistoryService {\n #update$ = signal(0);\n /** 外部监听更新用 */\n update$$ = computed(() => this.#update$());\n #logMap = new Map<string, Subject<HistoryItem>>();\n #config = inject(OpenAIConfigToken);\n #dir() {\n return this.#config().history.dir;\n }\n #createNewListen(fileName: string) {\n const filePath = path.join(this.#dir(), `${fileName}.yml`);\n const instance = new Subject<HistoryItem>();\n instance\n .pipe(\n bufferWhen(() => instance.pipe(debounceTime(2_000))),\n filter((list) => !!list.length),\n )\n .subscribe(async (inputList) => {\n if (!fs.existsSync(this.#dir())) {\n await fs.promises.mkdir(this.#dir(), { recursive: true });\n }\n try {\n let list: HistoryItem[] = [];\n if (await fs.existsSync(filePath)) {\n const content = await fs.promises.readFile(filePath, {\n encoding: 'utf-8',\n });\n list = parse(content);\n } else {\n list = [];\n }\n list.unshift(...inputList.reverse());\n await fs.promises.writeFile(filePath, stringify(list));\n this.#update$.update((a) => a + 1);\n } catch (error) {\n this.#config().captureException(error);\n }\n });\n this.#logMap.set(fileName, instance);\n\n return instance;\n }\n save(messages: ChatMessageListOutputType, options: any, config: any) {\n if (!this.#config().history.enable) {\n return;\n }\n try {\n const fileName = dayjs().format('YYYY-MM-DD');\n const message$ =\n this.#logMap.get(fileName) ?? this.#createNewListen(fileName);\n const item = {\n date: dayjs().valueOf(),\n messages,\n options: omitBy(options, isEmptyInput),\n config,\n };\n message$.next(item);\n } catch (error) {\n try {\n this.#config().captureException(error);\n } catch (error) {}\n }\n }\n}\n", "import { ChatHistoryService } from './chat.history.service';\nimport { ChatProviderService } from './service';\nimport { OpenAIConfigToken } from './token';\n\nexport const OPENAI_MODULE = {\n provider: [ChatProviderService, ChatHistoryService],\n token: { OpenAIConfigToken },\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["import_static_injector", "v", "result", "v", "v", "import_util", "v", "import_util", "v", "Anthropic", "v", "import_static_injector", "import_util", "dayjs", "error", "v", "result", "input", "options"]
|
|
7
7
|
}
|
package/index.mjs
CHANGED
|
@@ -78,7 +78,7 @@ var OpenAIChat = class {
|
|
|
78
78
|
async *stream(input, options) {
|
|
79
79
|
const input2 = {
|
|
80
80
|
...input,
|
|
81
|
-
messages:
|
|
81
|
+
messages: input.messages,
|
|
82
82
|
model: this.options.model,
|
|
83
83
|
stream: true,
|
|
84
84
|
max_tokens: this.options.max_tokens,
|
package/index.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../packages/openai/chat/service.ts", "../../packages/openai/chat/vendor/openai.ts", "../../packages/openai/chat/message.define.ts", "../../packages/openai/chat/vendor/openai-compatible.factory.ts", "../../packages/openai/chat/vendor/genmini/genmini.ts", "../../packages/openai/chat/vendor/genmini/message.define.ts", "../../packages/openai/chat/vendor/anthropic/anthropic.ts", "../../packages/openai/chat/vendor/anthropic/message.define.ts", "../../packages/openai/chat/util/create.ts", "../../packages/openai/chat/const.ts", "../../packages/openai/chat/options.define.ts", "../../packages/openai/chat/token.ts", "../../packages/openai/chat/chat.history.service.ts", "../../packages/openai/chat/module.ts"],
|
|
4
|
-
"sourcesContent": ["import { inject } from 'static-injector';\nimport { OpenAIChat } from './vendor/openai';\nimport { ChatRequestOptions, ChatToolBodyInput } from './type';\nimport { createCompatibleFactory } from './vendor/openai-compatible.factory';\nimport { GeminiChat } from './vendor/genmini/genmini';\nimport { AnthropicChat } from './vendor/anthropic/anthropic';\nimport { createAssistantMessage } from './util/create';\nimport { ThinkList } from './const';\nimport {\n CreateChatModelOptions,\n InputChatOptionsDefine,\n} from './options.define';\nimport { OpenAIConfigToken } from './token';\nimport { ChatHistoryService } from './chat.history.service';\nimport * as v from 'valibot';\nexport class ChatProviderService {\n #config = inject(OpenAIConfigToken);\n #chatHistory = inject(ChatHistoryService);\n\n create(input: Omit<CreateChatModelOptions, 'name'>) {\n let options = v.parse(InputChatOptionsDefine, input);\n let instance;\n const extraOptions =\n options.vendorOptions?.[options.vendor]?.['extraOptions'];\n options = {\n ...extraOptions,\n ...options,\n apiKey: options.apiKey?.trim() || extraOptions?.apiKey || ' ',\n };\n if (!options.vendor || options.vendor === 'openai') {\n instance = new OpenAIChat(options);\n } else if (options.vendor === 'gemini') {\n instance = new GeminiChat(options);\n } else if (options.vendor === 'claude') {\n instance = new AnthropicChat(options);\n } else {\n instance = createCompatibleFactory(options);\n }\n instance.init();\n const openAIOptions = this.#config;\n const chatHistory = this.#chatHistory;\n\n const fn = async function* (...args: Parameters<OpenAIChat['stream']>) {\n const result = instance.stream(args[0], {\n ...args[1],\n tryPull: openAIOptions().tryPull,\n pullModel: openAIOptions().pullModel,\n });\n let content = '';\n let isThink = false;\n let thinkStart = 0;\n let thinkEnd: number | undefined;\n let start = true;\n /** 是否处于思考期 */\n let isThinking = false;\n let contentEnd: number | undefined;\n let lastEmit;\n for await (const delta of result) {\n content += delta;\n if (start) {\n start = false;\n const result = ThinkList.find((item) =>\n delta.startsWith(`<${item}>`),\n );\n if (result) {\n isThink = true;\n thinkStart = result.length + 2;\n isThinking = true;\n }\n } else if (isThink && thinkEnd === undefined) {\n const result = ThinkList.find((item) => delta === `</${item}>`);\n if (result) {\n contentEnd = content.length;\n thinkEnd = content.length - result.length - 3;\n isThinking = false;\n }\n }\n lastEmit = {\n content: isThink\n ? (contentEnd ? content.slice(contentEnd) : '').trim()\n : content,\n isThinking: isThinking,\n delta,\n thinkContent: isThink\n ? content.slice(thinkStart, thinkEnd).trim()\n : undefined,\n };\n yield lastEmit;\n }\n const lastMessage = createAssistantMessage(\n isThink ? (contentEnd ? content.slice(contentEnd) : '') : content,\n );\n if (lastEmit?.thinkContent) {\n lastMessage.thinkContent = lastEmit.thinkContent;\n }\n chatHistory.save(\n [...args[0].messages, lastMessage],\n { ...args[0], messages: undefined },\n options,\n );\n };\n return {\n stream: fn,\n chat: async (...args: Parameters<OpenAIChat['stream']>) => {\n const result = fn(...args);\n let obj;\n for await (const element of result) {\n obj = element;\n }\n return obj!;\n },\n callTool: (input: ChatToolBodyInput, options?: ChatRequestOptions) =>\n instance.callTool(input, options),\n };\n }\n}\n", "import { OpenAI } from 'openai';\nimport { ChatMessageListDefine } from '../message.define';\nimport { ChatBodyInput, ChatRequestOptions, ChatToolBodyInput } from '../type';\nimport * as v from 'valibot';\nimport type { Stream } from 'openai/streaming.mjs';\nimport { ChatCompletionCreateParamsStreaming } from 'openai/resources/index.mjs';\nimport { ChatModelOptions } from '../options.define';\nexport class OpenAIChat {\n protected instance!: OpenAI;\n protected extraBody = {};\n protected extraHeaders = {};\n constructor(protected options: ChatModelOptions) {}\n init() {\n this.instance = new OpenAI({\n apiKey: this.options.apiKey || ' ',\n baseURL: this.options.baseURL ?? undefined,\n });\n }\n async #createStream(\n input: ChatCompletionCreateParamsStreaming,\n options?: ChatRequestOptions,\n ): Promise<\n Stream<OpenAI.Chat.Completions.ChatCompletionChunk> & {\n _request_id?: string | null;\n }\n > {\n return await this.instance.chat.completions\n .create(input, { headers: this.extraHeaders, ...options })\n .catch(async (error) => {\n // ollama server/routes.go\n if (options?.tryPull?.(error)) {\n await options?.pullModel!(this.options.model);\n return this.#createStream(input, {\n ...options,\n tryPull: () => false,\n });\n }\n\n throw error;\n });\n }\n async *stream(input: ChatBodyInput, options?: ChatRequestOptions) {\n const input2 = {\n ...input,\n messages: v.parse(ChatMessageListDefine, input.messages),\n model: this.options.model,\n stream: true,\n max_tokens: this.options.max_tokens,\n top_p: this.options.top_p,\n temperature: this.options.temperature,\n frequency_penalty: this.options.frequency_penalty,\n presence_penalty: this.options.presence_penalty,\n seed: this.options.seed,\n stop: this.options.stop,\n ...this.extraBody,\n } as ChatCompletionCreateParamsStreaming;\n const result = await this.#createStream(input2, options);\n let isThinking = 0;\n for await (const item of result) {\n try {\n //reasoning_content 思考\n if (!item.choices[0].finish_reason) {\n if (\n typeof (item.choices[0].delta as any).reasoning_content ===\n 'string' ||\n typeof (item.choices[0].delta as any).reasoning === 'string'\n ) {\n if (isThinking === 0) {\n isThinking = 1;\n yield '<thinking>';\n }\n const result =\n (item.choices[0].delta as any).reasoning_content ??\n (item.choices[0].delta as any).reasoning;\n if (result) {\n yield result;\n }\n } else if (typeof item.choices[0].delta.content === 'string') {\n if (isThinking === 1) {\n yield '</thinking>';\n isThinking = 2;\n }\n const result = item.choices[0].delta.content!;\n if (result) {\n yield result;\n }\n }\n }\n } catch (error) {\n throw error;\n }\n }\n }\n // 工具调用,暂时不清楚怎么调用...是返回工具,还是返回对话\n async callTool(input: ChatToolBodyInput, options?: ChatRequestOptions) {\n const result = await this.instance.chat.completions.create(\n {\n ...input,\n messages: v.parse(ChatMessageListDefine, input.messages),\n model: this.options.model,\n max_tokens: this.options.max_tokens,\n top_p: this.options.top_p,\n temperature: this.options.temperature,\n frequency_penalty: this.options.frequency_penalty,\n presence_penalty: this.options.presence_penalty,\n seed: this.options.seed,\n stop: this.options.stop,\n ...this.extraBody,\n stream: false,\n },\n { headers: this.extraHeaders, ...options },\n );\n const isTool = !!result.choices[0].message.tool_calls;\n if (isTool) {\n // todo\n const data = (result.choices[0].message.tool_calls![0] as any).function;\n return {\n type: 'function' as const,\n function: {\n name: data.name,\n arguments: JSON.parse(data.arguments) as\n | Record<string, any>\n | undefined,\n },\n };\n }\n return { type: 'text' as const, text: result.choices[0].message.content! };\n }\n}\n", "import * as v from 'valibot';\nexport const ChatCompletionContentPartStr = v.object({\n text: v.string(),\n type: v.optional(v.literal('text'), 'text'),\n});\nexport type ChatCompletionContentPartStrType = v.InferOutput<\n typeof ChatCompletionContentPartStr\n>;\n\nexport const ChatCompletionContentPartImage = v.object({\n image_url: v.object({\n url: v.string(),\n detail: v.optional(v.picklist(['auto', 'low', 'high'])),\n }),\n type: v.optional(v.literal('image_url'), 'image_url'),\n});\nexport type ChatCompletionContentPartImageType = v.InferOutput<\n typeof ChatCompletionContentPartImage\n>;\nexport const ChatCompletionContentPart = v.array(\n v.union([ChatCompletionContentPartStr, ChatCompletionContentPartImage]),\n);\nexport const SystemChatCompletionContent = v.array(\n ChatCompletionContentPartStr,\n);\nexport const UserChatCompletionContent = ChatCompletionContentPart;\nexport type UserChatCompletionContentType = v.InferOutput<\n typeof UserChatCompletionContent\n>;\nexport const AssistantChatCompletionContent = v.array(\n ChatCompletionContentPartStr,\n);\nexport const SystemChatMessage = v.object({\n role: v.optional(v.literal('system'), 'system'),\n content: SystemChatCompletionContent,\n});\nexport type SystemChatMessageType = v.InferOutput<typeof SystemChatMessage>;\nexport const UserChatMessage = v.object({\n role: v.optional(v.literal('user'), 'user'),\n content: UserChatCompletionContent,\n});\nexport type UserChatMessageType = v.InferOutput<typeof UserChatMessage>;\n\nexport const AssistantChatMessage = v.object({\n role: v.optional(v.literal('assistant'), 'assistant'),\n content: AssistantChatCompletionContent,\n thinkContent: v.optional(v.string()),\n});\n\nexport type AssistantChatMessageType = v.InferOutput<\n typeof AssistantChatMessage\n>;\n\nexport const ChatMessageItemDefine = v.union([\n SystemChatMessage,\n UserChatMessage,\n AssistantChatMessage,\n]);\nexport type ChatMessageItemType = v.InferOutput<typeof ChatMessageItemDefine>;\nexport const ChatMessageListDefine = v.array(ChatMessageItemDefine);\n\nexport type ChatMessageListOutputType = v.InferOutput<\n typeof ChatMessageListDefine\n>;\nexport type ChatMessageListInputType = v.InferOutput<\n typeof ChatMessageListDefine\n>;\n", "import { ChatModelOptions } from '../options.define';\nimport { OpenAIChat } from './openai';\nconst VendorObject: Record<\n string,\n { options: { baseURL: string; modelList: string[] } }\n> = {\n '360': { options: { baseURL: 'https://ai.360.cn', modelList: [] } },\n azure: { options: { baseURL: '', modelList: [] } },\n moonshot: { options: { baseURL: 'https://api.moonshot.cn', modelList: [] } },\n baichuan: {\n options: { baseURL: 'https://api.baichuan-ai.com', modelList: [] },\n },\n minimax: { options: { baseURL: 'https://api.minimax.chat', modelList: [] } },\n mistralai: { options: { baseURL: 'https://api.mistral.ai', modelList: [] } },\n groq: {\n options: { baseURL: 'https://api.groq.com/openai', modelList: [] },\n },\n lingyiwanwu: {\n options: { baseURL: 'https://api.lingyiwanwu.com', modelList: [] },\n },\n stepfun: { options: { baseURL: 'https://api.stepfun.com', modelList: [] } },\n deepseek: { options: { baseURL: 'https://api.deepseek.com', modelList: [] } },\n 'together.ai': {\n options: { baseURL: 'https://api.together.xyz', modelList: [] },\n },\n volcengine: {\n options: {\n baseURL: 'https://ark.cn-beijing.volces.com/api/v3',\n modelList: [],\n },\n },\n novita: {\n options: { baseURL: 'https://api.novita.ai/v3/openai', modelList: [] },\n },\n siliconflow: {\n options: { baseURL: 'https://api.siliconflow.cn', modelList: [] },\n },\n // 官网明确兼容\n // https://help.aliyun.com/zh/model-studio/developer-reference/use-qwen-by-calling-api?spm=a2c6h.13066369.question.5.3a0e527bbxeJLJ#4ec3e641c294d\n tongyi: {\n options: {\n baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1',\n modelList: [],\n },\n },\n // 文档上看是一样的\n // https://open.bigmodel.cn/dev/api/normal-model/glm-4\n zhipu: {\n options: {\n baseURL: 'https://open.bigmodel.cn/api/paas/v4',\n modelList: [],\n },\n },\n // 明确兼容\n // https://www.xfyun.cn/doc/spark/HTTP%E8%B0%83%E7%94%A8%E6%96%87%E6%A1%A3.html#_7-%E4%BD%BF%E7%94%A8openai-sdk%E8%AF%B7%E6%B1%82%E7%A4%BA%E4%BE%8B\n spark: {\n options: {\n baseURL: 'https://spark-api-open.xf-yun.com/v1',\n modelList: [],\n },\n },\n // 官方兼容\n // https://cloud.tencent.com/document/product/1729/111007\n hunyuan: {\n options: {\n baseURL: 'https://api.hunyuan.cloud.tencent.com/v1',\n modelList: [],\n },\n },\n};\n\nexport function createCompatibleFactory(options: ChatModelOptions) {\n const vendorConfig = VendorObject[options.vendor];\n return new OpenAIChat({\n ...options,\n baseURL: vendorConfig.options.baseURL,\n });\n}\n", "import { OpenAIChat } from '../openai';\nimport { GoogleGenerativeAI, StartChatParams } from '@google/generative-ai';\nimport {\n GenminiChatMessageListDefine,\n GenminiSystemMessageDefine,\n} from './message.define';\nimport * as v from 'valibot';\nimport { ChatBodyInput, ChatRequestOptions } from '../../type';\n\nexport class GeminiChat extends OpenAIChat {\n #ggai!: GoogleGenerativeAI;\n override init(): void {\n this.#ggai = new GoogleGenerativeAI(this.options.apiKey!);\n }\n override async *stream(\n input: ChatBodyInput,\n options?: ChatRequestOptions,\n ): AsyncGenerator<string, void, unknown> {\n const model = this.#ggai.getGenerativeModel({\n model: this.options.model,\n generationConfig: {\n topP: this.options.top_p,\n temperature: this.options.temperature,\n maxOutputTokens: this.options.max_tokens,\n },\n });\n const messages = input.messages;\n const data = {} as Partial<StartChatParams>;\n if (messages[0].role === 'system') {\n const system = messages.shift();\n data.systemInstruction = v.parse(GenminiSystemMessageDefine, system);\n }\n data.history = v.parse(GenminiChatMessageListDefine, messages);\n const lastMessage = data.history.pop()!;\n\n const chat = model.startChat(data);\n const result = await chat.sendMessageStream(lastMessage.parts, {\n signal: options?.signal,\n });\n for await (const chunk of result.stream) {\n const chunkText = chunk.text();\n yield chunkText;\n }\n }\n}\n", "import * as v from 'valibot';\nimport {\n AssistantChatMessage,\n ChatCompletionContentPartImageType,\n ChatCompletionContentPartStrType,\n SystemChatMessage,\n UserChatMessage,\n} from '../../message.define';\nimport { isTruthy } from '@cyia/util';\n\nfunction messageContentTransform(\n list: (\n | ChatCompletionContentPartStrType\n | ChatCompletionContentPartImageType\n )[],\n) {\n return list\n .map((item) => (item.type === 'text' ? { text: item.text } : undefined))\n .filter(isTruthy);\n}\nexport const GenminiSystemMessageDefine = v.pipe(\n SystemChatMessage,\n v.transform((item) => ({\n role: 'system',\n parts: messageContentTransform(item.content),\n })),\n);\n\nexport const GenminiChatMessageListDefine = v.pipe(\n v.array(\n v.union([\n v.pipe(\n UserChatMessage,\n v.transform((item) => ({\n role: 'user' as const,\n parts: messageContentTransform(item.content),\n })),\n ),\n\n v.pipe(\n AssistantChatMessage,\n v.transform((item) => ({\n role: 'model' as const,\n parts: messageContentTransform(item.content),\n })),\n ),\n ]),\n ),\n);\n", "import { OpenAIChat } from '../openai';\nimport Anthropic from '@anthropic-ai/sdk';\nimport {\n AnthropicChatMessageListDefine,\n AnthropicSystemMessageDefine,\n} from './message.define';\nimport { createAsyncGeneratorAdapter } from '@cyia/util';\nimport * as v from 'valibot';\nimport {\n ChatBodyInput,\n ChatRequestOptions,\n ChatToolBodyInput,\n} from '../../type';\nexport class AnthropicChat extends OpenAIChat {\n client!: Anthropic;\n override init(): void {\n this.client = new Anthropic({ apiKey: this.options.apiKey });\n }\n override async *stream(\n input: ChatBodyInput,\n options?: ChatRequestOptions,\n ): AsyncGenerator<string, void, unknown> {\n const body = {\n model: this.options.model,\n max_tokens: this.options.max_tokens,\n top_p: this.options.top_p,\n temperature: this.options.temperature,\n stream: true,\n } as Partial<Anthropic.Messages.MessageStreamParams>;\n\n if (input.messages[0].role === 'system') {\n const system = input.messages.shift()!.content;\n body.system = v.parse(AnthropicSystemMessageDefine, system);\n }\n body.messages = v.parse(AnthropicChatMessageListDefine, input.messages);\n const result = this.client.messages.stream(body as any, {\n signal: options?.signal,\n });\n const aga = createAsyncGeneratorAdapter<string>();\n result.once('end', () => aga.complete());\n result.on('text', (text) => {\n aga.next(text);\n });\n for await (const item of aga.getData()) {\n yield item;\n }\n }\n override async callTool(\n input: ChatToolBodyInput,\n options?: ChatRequestOptions,\n ) {\n const body =\n {} as Partial<Anthropic.Messages.MessageCreateParamsNonStreaming> &\n Pick<Anthropic.Messages.MessageCreateParamsNonStreaming, 'messages'>;\n\n if (input.messages[0].role === 'system') {\n const system = input.messages.shift()!.content;\n body.system = v.parse(AnthropicSystemMessageDefine, system);\n }\n body.messages = v.parse(AnthropicChatMessageListDefine, input.messages);\n const result = await this.client.messages.create(\n {\n ...body,\n model: this.options.model,\n max_tokens: this.options.max_tokens,\n top_p: this.options.top_p,\n temperature: this.options.temperature,\n stream: false,\n tools: input.tools.map((item) => ({\n name: item.function.name,\n description: item.function.description,\n input_schema: item.function.parameters! as any,\n })),\n },\n {\n signal: options?.signal,\n },\n );\n const isToolResult = result.content.find(\n (item) => item.type === 'tool_use',\n );\n if (isToolResult) {\n return {\n type: 'function' as const,\n function: {\n name: isToolResult.name,\n arguments: isToolResult.input as Record<string, any> | undefined,\n },\n };\n }\n const text = result.content.find((item) => item.type === 'text');\n return {\n type: 'text' as const,\n text: text!.text,\n };\n }\n}\n", "import { isTruthy } from '@cyia/util';\nimport {\n SystemChatCompletionContent,\n UserChatMessage,\n AssistantChatMessage,\n ChatCompletionContentPartStrType,\n ChatCompletionContentPartImageType,\n} from '../../message.define';\nimport * as v from 'valibot';\n// data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAR\nfunction baseImageSplit(str: string) {\n const mimeTypeIndex = str.indexOf(';');\n const dataStartIndex = str.indexOf(',', mimeTypeIndex);\n return {\n mimeType: str.slice(5, mimeTypeIndex) as\n | 'image/jpeg'\n | 'image/png'\n | 'image/gif'\n | 'image/webp',\n data: str.slice(dataStartIndex + 1),\n };\n}\n\nexport const AnthropicSystemMessageDefine = v.pipe(\n SystemChatCompletionContent,\n v.transform((list) =>\n list\n .map((item) => (item.type === 'text' ? item : undefined))\n .filter(isTruthy),\n ),\n);\nfunction contentConvert(\n part: ChatCompletionContentPartStrType | ChatCompletionContentPartImageType,\n) {\n if (part.type === 'text') {\n return part;\n }\n const result = baseImageSplit(part.image_url.url);\n return {\n type: 'image' as const,\n source: {\n type: 'base64' as const,\n media_type: result.mimeType,\n data: result.data,\n },\n };\n}\nconst UserMessageDefine = v.pipe(\n UserChatMessage,\n v.transform((item) => ({\n ...item,\n content: item.content.map(contentConvert),\n })),\n);\nconst AssistantMessageDefine = v.pipe(\n AssistantChatMessage,\n v.transform((item) => ({\n ...item,\n content: item.content.map(contentConvert),\n })),\n);\nexport const AnthropicChatMessageListDefine = v.array(\n v.union([UserMessageDefine, AssistantMessageDefine]),\n);\n", "import {\n AssistantChatMessageType,\n SystemChatMessageType,\n UserChatMessageType,\n} from '../message.define';\n\nexport function createSystemMessage() {\n return { role: 'system' } as SystemChatMessageType;\n}\nexport function createUserMessage(text?: string) {\n return {\n role: 'user',\n content:\n typeof text === 'string' ? [{ type: 'text', text: '' }] : undefined,\n } as UserChatMessageType;\n}\nexport function createAssistantMessage(text: string = '') {\n return {\n role: 'assistant',\n content: [{ type: 'text', text }],\n } as AssistantChatMessageType;\n}\n", "export const ThinkList = [\n 'think',\n 'thinking',\n 'reason',\n 'reasoning',\n 'thought',\n 'Thought',\n];\n", "import { asControl, actions, setComponent } from '@piying/view-angular-core';\nimport * as v from 'valibot';\nimport {\n asVirtualGroup,\n metadataPipe,\n omitIntersect,\n} from '@piying/valibot-visit';\nconst VendorList = [\n {\n value: 'openai',\n label: 'openai',\n options: {\n baseURL: '',\n modelList: [],\n description: '如果是openai兼容的厂商,需要设置baseURL',\n },\n },\n {\n value: '360',\n label: '360',\n options: { baseURL: 'https://ai.360.cn', modelList: [] },\n },\n {\n value: 'azure',\n label: 'azure',\n options: { baseURL: '', modelList: [] },\n },\n {\n value: 'moonshot',\n label: 'moonshot',\n options: { baseURL: 'https://api.moonshot.cn', modelList: [] },\n },\n {\n value: 'baichuan',\n label: 'baichuan',\n options: { baseURL: 'https://api.baichuan-ai.com', modelList: [] },\n },\n {\n value: 'minimax',\n label: 'minimax',\n options: { baseURL: 'https://api.minimax.chat', modelList: [] },\n },\n {\n value: 'mistralai',\n label: 'mistralai',\n options: { baseURL: 'https://api.mistral.ai', modelList: [] },\n },\n {\n value: 'groq',\n label: 'groq',\n options: { baseURL: 'https://api.groq.com/openai', modelList: [] },\n },\n {\n value: 'lingyiwanwu',\n label: 'lingyiwanwu',\n options: { baseURL: 'https://api.lingyiwanwu.com', modelList: [] },\n },\n {\n value: 'stepfun',\n label: 'stepfun',\n options: { baseURL: 'https://api.stepfun.com', modelList: [] },\n },\n {\n value: 'deepseek',\n label: 'deepseek',\n options: { baseURL: 'https://api.deepseek.com', modelList: [] },\n },\n {\n value: 'together.ai',\n label: 'together.ai',\n options: { baseURL: 'https://api.together.xyz', modelList: [] },\n },\n {\n value: 'volcengine',\n label: 'volcengine',\n options: {\n baseURL: 'https://ark.cn-beijing.volces.com/api/v3',\n modelList: [],\n },\n },\n {\n value: 'novita',\n label: 'novita',\n options: { baseURL: 'https://api.novita.ai/v3/openai', modelList: [] },\n },\n {\n value: 'siliconflow',\n label: 'siliconflow',\n options: { baseURL: 'https://api.siliconflow.cn', modelList: [] },\n },\n {\n value: 'tongyi',\n label: 'tongyi',\n options: {\n baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1',\n modelList: [],\n },\n },\n {\n value: 'zhipu',\n label: 'zhipu',\n options: {\n baseURL: 'https://open.bigmodel.cn/api/paas/v4',\n modelList: [],\n },\n },\n {\n value: 'spark',\n label: 'spark',\n options: {\n baseURL: 'https://spark-api-open.xf-yun.com/v1',\n modelList: [],\n },\n },\n {\n value: 'hunyuan',\n label: 'hunyuan',\n options: {\n baseURL: 'https://api.hunyuan.cloud.tencent.com/v1',\n modelList: [],\n },\n },\n\n {\n value: 'gemini',\n label: 'gemini',\n options: {\n baseURL: '',\n modelList: [],\n description: '非openai兼容,手动适配,如果有问题欢迎报告',\n },\n },\n {\n value: 'claude',\n label: 'claude',\n options: {\n baseURL: '',\n modelList: [],\n description: '非openai兼容,手动适配,如果有问题欢迎报告',\n },\n },\n] as const;\nconst vendorOptionsDescribe = `## 通用参数\n- \\`extraOptions\\`字段用于覆盖默认字段\n\\`\\`\\`json\n{\"厂商名(与vendor字段相同)\":{ \"extraOptions\":{\"temperature\":0.1,\"topP\":0.8,\"maxTokens\":8192,\"baseURL\":\"http://127.0.0.1:11434/v1\",\"apiKey\":\" \"} }\n\\`\\`\\`\n`;\nconst InputWrapper = metadataPipe(actions.wrappers.set(['tooltip', 'label']));\n\nexport const ChatItemDefine = v.pipe(\n v.intersect([\n v.pipe(\n v.object({\n name: v.pipe(v.string(), v.title('配置名')),\n vendor: v.pipe(\n v.optional(\n v.picklist(VendorList.map((item) => item.value)),\n 'openai',\n ),\n v.description('大语言模型提供的厂商'),\n v.title('对话厂商'),\n v.metadata({\n enumOptions: VendorList.map((item) => ({\n label: item.label,\n description: [\n (item.options as any).description\n ? (item.options as any).description\n : '',\n item.options.baseURL ? `链接: ${item.options.baseURL}` : '',\n ]\n .filter(Boolean)\n .join('\\n'),\n })),\n }),\n actions.inputs.patch({\n options: VendorList,\n }),\n ),\n }),\n actions.wrappers.patch(['div']),\n actions.class.top('flex *:flex-1 gap-2 items-center'),\n ),\n v.pipe(\n v.object({\n baseURL: v.pipe(\n v.optional(v.string(), 'http://127.0.0.1:11434/v1'),\n v.title('地址'),\n v.description('openai兼容接口'),\n ...InputWrapper,\n ),\n model: v.pipe(\n v.optional(v.string(), `qwen3:8b`),\n v.title('模型'),\n v.description(\n '## 模型名\\n### ollama模型推荐\\n- `qwen3:8b`\\n- `qwen3:14b`,`deepseek-r1:7b`,`deepseek-r1:14b`\\n### 图片对话模型\\n- `minicpm-v:8b`',\n ),\n ...InputWrapper,\n ),\n }),\n actions.wrappers.patch([\n {\n type: 'div',\n attributes: { class: 'flex *:flex-1 gap-2 items-center' },\n },\n ]),\n ),\n v.object({\n apiKey: v.pipe(\n v.optional(v.string()),\n v.description('本地部署默认可以不填'),\n v.title('apiKey')\n ),\n }),\n v.pipe(\n v.object({\n max_tokens: v.pipe(v.optional(v.number(), 8192), v.title('max_tokens')),\n top_p: v.pipe(\n v.optional(v.number(), 0.8),\n v.minValue(0),\n v.maxValue(10),\n v.description(`核采样(nucleus sampling)是温度采样的另一种替代方法,模型会考虑累积概率质量达到 top_p 的 token。例如,当 top_p 设为 0.1 时,仅考虑累积概率前 10% 的 token。\n\n我们通常建议调整 top_p 或温度参数,但不要同时调整两者。`),\n ...InputWrapper,\n v.title('top_p'),\n ),\n temperature: v.pipe(\n v.optional(v.pipe(v.number(), v.minValue(0), v.maxValue(2)), 0.1),\n v.description(\n '采样温度应设置在0到2之间。较高的值(如0.8)会使输出更随机,而较低的值(如0.2)则会使输出更集中且确定。我们通常建议仅调整此参数或top_p,而不同时调整两者。',\n ),\n ...InputWrapper,\n v.title('temperature'),\n ),\n frequency_penalty: v.pipe(\n v.optional(v.pipe(v.number(), v.minValue(-2), v.maxValue(2))),\n v.description(\n '取值范围为-2.0至2.0。正值会根据当前文本中已有标记的频率对新标记进行惩罚,从而降低模型逐字重复相同内容的概率。',\n ),\n ...InputWrapper,\n v.title('frequency_penalty'),\n ),\n presence_penalty: v.pipe(\n v.optional(v.pipe(v.number(), v.minValue(-2), v.maxValue(2))),\n v.description(\n '数值介于-2.0至2.0之间。正值会基于新标记是否已在当前文本中出现,对新标记施加惩罚,从而提升模型讨论新话题的可能性。',\n ),\n ...InputWrapper,\n v.title('presence_penalty'),\n ),\n seed: v.pipe(\n v.optional(v.pipe(v.number())),\n v.description(\n '若已指定,系统将尽力确保采样具有确定性,即使用相同种子和参数的重复请求将返回相同结果。确定性无法保证,请通过 system_fingerprint 响应参数监控后端变化。',\n ),\n ...InputWrapper,\n v.title('seed'),\n ),\n stop: v.pipe(\n v.optional(v.pipe(v.array(v.pipe(v.string())), v.maxLength(4))),\n v.description(\n '最多可指定4个停止序列,API将在生成到该序列时停止,返回的文本中不包含该停止序列。',\n ),\n asControl(),\n setComponent('chip-input-list'),\n actions.inputs.patch({\n addOnBlur: true,\n }),\n ...InputWrapper,\n v.title('stop'),\n ),\n // top_logprobs: v.pipe(\n // v.optional(v.pipe(v.number(), v.minValue(0), v.maxValue(20))),\n // v.description(\n // '一个介于0和20之间的整数,用于指定在每个标记位置返回的最可能的标记数量,每个标记均关联对应的对数概率。若使用此参数,则必须将logprobs设置为true。',\n // ),\n // ),\n\n // verbosity: v.pipe(\n // v.optional(v.picklist(['low', 'medium', 'high'])),\n // v.description(\n // `控制模型回复的详细程度。数值越低,回复越简洁;数值越高,回复越详细。当前支持的取值为低、中和高。`,\n // ),\n // ),\n // reasoning_effort: v.pipe(\n // v.optional(v.picklist(['minimal', 'low', 'medium', 'high'])),\n // v.description(\n // `控制模型回复的详细程度。数值越低,回复越简洁;数值越高,回复越详细。当前支持的取值为低、中和高。`,\n // ),\n // ),\n }),\n actions.wrappers.patch(['div']),\n actions.class.top('grid gap-2'),\n ),\n ]),\n actions.wrappers.patch(['div']),\n actions.class.top('grid gap-2'),\n asVirtualGroup(),\n);\n\nexport const VendorOptionsDefine = v.pipe(\n v.optional(\n v.record(\n v.string(),\n v.pipe(\n v.intersect([\n v.object({\n /** @internal */\n extraOptions: v.pipe(\n v.optional(omitIntersect(ChatItemDefine, ['name', 'vendor'])),\n v.description(`附加配置`),\n ),\n }),\n ]),\n actions.wrappers.patch(['div']),\n actions.class.top('grid gap-2'),\n asVirtualGroup(),\n ),\n ),\n ),\n v.description(vendorOptionsDescribe),\n setComponent('rest-chip-group'),\n actions.inputs.patch({\n optionalkeyList: VendorList.map((item) => item.value),\n placeholder: '请设置额外配置',\n }),\n v.title('厂商额外配置'),\n);\nexport const ChatParamsItemDefine = v.pipe(\n v.intersect([\n ChatItemDefine,\n v.object({ vendorOptions: VendorOptionsDefine }),\n ]),\n asVirtualGroup(),\n actions.wrappers.patch(['div']),\n actions.class.top('grid gap-2'),\n);\n\nexport const ChatParamsListDefine = v.pipe(\n v.array(ChatParamsItemDefine),\n setComponent('label-chip-array'),\n v.description('对话模型列表,目前用于切换使用'),\n actions.inputs.patch({\n displayKey: 'name',\n placeholder: '请添加配置',\n }),\n);\nexport type ChatModelOptions = v.InferOutput<typeof ChatParamsItemDefine>;\nexport type ChatModelOptionsInput = v.InferInput<typeof ChatParamsItemDefine>;\n\nexport const InputChatOptionsDefine = omitIntersect(ChatParamsItemDefine, [\n 'name',\n]);\nexport type CreateChatModelOptions = v.InferInput<\n typeof InputChatOptionsDefine\n>;\n", "import { InjectionToken, Signal } from 'static-injector';\nimport { OpenAIConfig } from './type';\n\nexport const OpenAIConfigToken = new InjectionToken<Signal<OpenAIConfig>>(\n 'OpenAIConfig',\n);\n", "import { computed, inject, signal } from 'static-injector';\n\nimport { omitBy } from 'es-toolkit';\nimport { bufferWhen, debounceTime, filter, Subject } from 'rxjs';\nimport { path } from '@cyia/vfs2';\nimport { HistoryItem } from './type/history';\nimport { OpenAIConfigToken } from './token';\nimport * as fs from 'fs';\nimport { parse, stringify } from 'yaml';\nimport { ChatMessageListOutputType } from './message.define';\nimport dayjs from 'dayjs';\nimport { isEmptyInput } from '@cyia/util';\n\nexport class ChatHistoryService {\n #update$ = signal(0);\n /** 外部监听更新用 */\n update$$ = computed(() => this.#update$());\n #logMap = new Map<string, Subject<HistoryItem>>();\n #config = inject(OpenAIConfigToken);\n #dir() {\n return this.#config().history.dir;\n }\n #createNewListen(fileName: string) {\n const filePath = path.join(this.#dir(), `${fileName}.yml`);\n const instance = new Subject<HistoryItem>();\n instance\n .pipe(\n bufferWhen(() => instance.pipe(debounceTime(2_000))),\n filter((list) => !!list.length),\n )\n .subscribe(async (inputList) => {\n if (!fs.existsSync(this.#dir())) {\n await fs.promises.mkdir(this.#dir(), { recursive: true });\n }\n try {\n let list: HistoryItem[] = [];\n if (await fs.existsSync(filePath)) {\n const content = await fs.promises.readFile(filePath, {\n encoding: 'utf-8',\n });\n list = parse(content);\n } else {\n list = [];\n }\n list.unshift(...inputList.reverse());\n await fs.promises.writeFile(filePath, stringify(list));\n this.#update$.update((a) => a + 1);\n } catch (error) {\n this.#config().captureException(error);\n }\n });\n this.#logMap.set(fileName, instance);\n\n return instance;\n }\n save(messages: ChatMessageListOutputType, options: any, config: any) {\n if (!this.#config().history.enable) {\n return;\n }\n try {\n const fileName = dayjs().format('YYYY-MM-DD');\n const message$ =\n this.#logMap.get(fileName) ?? this.#createNewListen(fileName);\n const item = {\n date: dayjs().valueOf(),\n messages,\n options: omitBy(options, isEmptyInput),\n config,\n };\n message$.next(item);\n } catch (error) {\n try {\n this.#config().captureException(error);\n } catch (error) {}\n }\n }\n}\n", "import { ChatHistoryService } from './chat.history.service';\nimport { ChatProviderService } from './service';\nimport { OpenAIConfigToken } from './token';\n\nexport const OPENAI_MODULE = {\n provider: [ChatProviderService, ChatHistoryService],\n token: { OpenAIConfigToken },\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { inject } from 'static-injector';\nimport { OpenAIChat } from './vendor/openai';\nimport { ChatRequestOptions, ChatToolBodyInput } from './type';\nimport { createCompatibleFactory } from './vendor/openai-compatible.factory';\nimport { GeminiChat } from './vendor/genmini/genmini';\nimport { AnthropicChat } from './vendor/anthropic/anthropic';\nimport { createAssistantMessage } from './util/create';\nimport { ThinkList } from './const';\nimport {\n CreateChatModelOptions,\n InputChatOptionsDefine,\n} from './options.define';\nimport { OpenAIConfigToken } from './token';\nimport { ChatHistoryService } from './chat.history.service';\nimport * as v from 'valibot';\nexport class ChatProviderService {\n #config = inject(OpenAIConfigToken);\n #chatHistory = inject(ChatHistoryService);\n\n create(input: Omit<CreateChatModelOptions, 'name'>) {\n let options = v.parse(InputChatOptionsDefine, input);\n let instance;\n const extraOptions =\n options.vendorOptions?.[options.vendor]?.['extraOptions'];\n options = {\n ...extraOptions,\n ...options,\n apiKey: options.apiKey?.trim() || extraOptions?.apiKey || ' ',\n };\n if (!options.vendor || options.vendor === 'openai') {\n instance = new OpenAIChat(options);\n } else if (options.vendor === 'gemini') {\n instance = new GeminiChat(options);\n } else if (options.vendor === 'claude') {\n instance = new AnthropicChat(options);\n } else {\n instance = createCompatibleFactory(options);\n }\n instance.init();\n const openAIOptions = this.#config;\n const chatHistory = this.#chatHistory;\n\n const fn = async function* (...args: Parameters<OpenAIChat['stream']>) {\n const result = instance.stream(args[0] as any, {\n ...args[1],\n tryPull: openAIOptions().tryPull,\n pullModel: openAIOptions().pullModel,\n });\n let content = '';\n let isThink = false;\n let thinkStart = 0;\n let thinkEnd: number | undefined;\n let start = true;\n /** 是否处于思考期 */\n let isThinking = false;\n let contentEnd: number | undefined;\n let lastEmit;\n for await (const delta of result) {\n content += delta;\n if (start) {\n start = false;\n const result = ThinkList.find((item) =>\n delta.startsWith(`<${item}>`),\n );\n if (result) {\n isThink = true;\n thinkStart = result.length + 2;\n isThinking = true;\n }\n } else if (isThink && thinkEnd === undefined) {\n const result = ThinkList.find((item) => delta === `</${item}>`);\n if (result) {\n contentEnd = content.length;\n thinkEnd = content.length - result.length - 3;\n isThinking = false;\n }\n }\n lastEmit = {\n content: isThink\n ? (contentEnd ? content.slice(contentEnd) : '').trim()\n : content,\n isThinking: isThinking,\n delta,\n thinkContent: isThink\n ? content.slice(thinkStart, thinkEnd).trim()\n : undefined,\n };\n yield lastEmit;\n }\n const lastMessage = createAssistantMessage(\n isThink ? (contentEnd ? content.slice(contentEnd) : '') : content,\n );\n if (lastEmit?.thinkContent) {\n lastMessage.thinkContent = lastEmit.thinkContent;\n }\n chatHistory.save(\n [...args[0].messages, lastMessage as any],\n { ...args[0], messages: undefined },\n options,\n );\n };\n return {\n stream: fn,\n chat: async (...args: Parameters<OpenAIChat['stream']>) => {\n const result = fn(...args);\n let obj;\n for await (const element of result) {\n obj = element;\n }\n return obj!;\n },\n callTool: (input: ChatToolBodyInput, options?: ChatRequestOptions) =>\n instance.callTool(input, options),\n };\n }\n}\n", "import { OpenAI } from 'openai';\nimport { ChatMessageListDefine } from '../message.define';\nimport { ChatRequestOptions, ChatToolBodyInput } from '../type';\nimport * as v from 'valibot';\nimport type { Stream } from 'openai/streaming.mjs';\nimport { ChatCompletionCreateParamsStreaming } from 'openai/resources/index.mjs';\nimport { ChatModelOptions } from '../options.define';\nexport class OpenAIChat {\n protected instance!: OpenAI;\n protected extraBody = {};\n protected extraHeaders = {};\n constructor(protected options: ChatModelOptions) {}\n init() {\n this.instance = new OpenAI({\n apiKey: this.options.apiKey || ' ',\n baseURL: this.options.baseURL ?? undefined,\n });\n }\n async #createStream(\n input: ChatCompletionCreateParamsStreaming,\n options?: ChatRequestOptions,\n ): Promise<\n Stream<OpenAI.Chat.Completions.ChatCompletionChunk> & {\n _request_id?: string | null;\n }\n > {\n return await this.instance.chat.completions\n .create(input, { headers: this.extraHeaders, ...options })\n .catch(async (error) => {\n // ollama server/routes.go\n if (options?.tryPull?.(error)) {\n await options?.pullModel!(this.options.model);\n return this.#createStream(input, {\n ...options,\n tryPull: () => false,\n });\n }\n\n throw error;\n });\n }\n async *stream(\n input: Omit<\n ChatCompletionCreateParamsStreaming,\n | 'model'\n | 'stream'\n | 'max_tokens'\n | 'top_p'\n | 'temperature'\n | 'frequency_penalty'\n | 'presence_penalty'\n | 'seed'\n | 'stop'\n >,\n options?: ChatRequestOptions,\n ) {\n const input2 = {\n ...input,\n messages: input.messages,\n model: this.options.model,\n stream: true,\n max_tokens: this.options.max_tokens,\n top_p: this.options.top_p,\n temperature: this.options.temperature,\n frequency_penalty: this.options.frequency_penalty,\n presence_penalty: this.options.presence_penalty,\n seed: this.options.seed,\n stop: this.options.stop,\n ...this.extraBody,\n } as ChatCompletionCreateParamsStreaming;\n const result = await this.#createStream(input2, options);\n let isThinking = 0;\n for await (const item of result) {\n try {\n //reasoning_content 思考\n if (!item.choices[0].finish_reason) {\n if (\n typeof (item.choices[0].delta as any).reasoning_content ===\n 'string' ||\n typeof (item.choices[0].delta as any).reasoning === 'string'\n ) {\n if (isThinking === 0) {\n isThinking = 1;\n yield '<thinking>';\n }\n const result =\n (item.choices[0].delta as any).reasoning_content ??\n (item.choices[0].delta as any).reasoning;\n if (result) {\n yield result;\n }\n } else if (typeof item.choices[0].delta.content === 'string') {\n if (isThinking === 1) {\n yield '</thinking>';\n isThinking = 2;\n }\n const result = item.choices[0].delta.content!;\n if (result) {\n yield result;\n }\n }\n }\n } catch (error) {\n throw error;\n }\n }\n }\n // 工具调用,暂时不清楚怎么调用...是返回工具,还是返回对话\n async callTool(input: ChatToolBodyInput, options?: ChatRequestOptions) {\n const result = await this.instance.chat.completions.create(\n {\n ...input,\n messages: v.parse(ChatMessageListDefine, input.messages),\n model: this.options.model,\n max_tokens: this.options.max_tokens,\n top_p: this.options.top_p,\n temperature: this.options.temperature,\n frequency_penalty: this.options.frequency_penalty,\n presence_penalty: this.options.presence_penalty,\n seed: this.options.seed,\n stop: this.options.stop,\n ...this.extraBody,\n stream: false,\n },\n { headers: this.extraHeaders, ...options },\n );\n const isTool = !!result.choices[0].message.tool_calls;\n if (isTool) {\n // todo\n const data = (result.choices[0].message.tool_calls![0] as any).function;\n return {\n type: 'function' as const,\n function: {\n name: data.name,\n arguments: JSON.parse(data.arguments) as\n | Record<string, any>\n | undefined,\n },\n };\n }\n return { type: 'text' as const, text: result.choices[0].message.content! };\n }\n}\n", "import * as v from 'valibot';\nexport const ChatCompletionContentPartStr = v.object({\n text: v.string(),\n type: v.optional(v.literal('text'), 'text'),\n});\nexport type ChatCompletionContentPartStrType = v.InferOutput<\n typeof ChatCompletionContentPartStr\n>;\n\nexport const ChatCompletionContentPartImage = v.object({\n image_url: v.object({\n url: v.string(),\n detail: v.optional(v.picklist(['auto', 'low', 'high'])),\n }),\n type: v.optional(v.literal('image_url'), 'image_url'),\n});\nexport type ChatCompletionContentPartImageType = v.InferOutput<\n typeof ChatCompletionContentPartImage\n>;\nexport const ChatCompletionContentPart = v.array(\n v.union([ChatCompletionContentPartStr, ChatCompletionContentPartImage]),\n);\nexport const SystemChatCompletionContent = v.array(\n ChatCompletionContentPartStr,\n);\nexport const UserChatCompletionContent = ChatCompletionContentPart;\nexport type UserChatCompletionContentType = v.InferOutput<\n typeof UserChatCompletionContent\n>;\nexport const AssistantChatCompletionContent = v.array(\n ChatCompletionContentPartStr,\n);\nexport const SystemChatMessage = v.object({\n role: v.optional(v.literal('system'), 'system'),\n content: SystemChatCompletionContent,\n});\nexport type SystemChatMessageType = v.InferOutput<typeof SystemChatMessage>;\nexport const UserChatMessage = v.object({\n role: v.optional(v.literal('user'), 'user'),\n content: UserChatCompletionContent,\n});\nexport type UserChatMessageType = v.InferOutput<typeof UserChatMessage>;\n\nexport const AssistantChatMessage = v.object({\n role: v.optional(v.literal('assistant'), 'assistant'),\n content: AssistantChatCompletionContent,\n thinkContent: v.optional(v.string()),\n});\n\nexport type AssistantChatMessageType = v.InferOutput<\n typeof AssistantChatMessage\n>;\n\nexport const ChatMessageItemDefine = v.union([\n SystemChatMessage,\n UserChatMessage,\n AssistantChatMessage,\n]);\nexport type ChatMessageItemType = v.InferOutput<typeof ChatMessageItemDefine>;\nexport const ChatMessageListDefine = v.array(ChatMessageItemDefine);\n\nexport type ChatMessageListOutputType = v.InferOutput<\n typeof ChatMessageListDefine\n>;\nexport type ChatMessageListInputType = v.InferOutput<\n typeof ChatMessageListDefine\n>;\n", "import { ChatModelOptions } from '../options.define';\nimport { OpenAIChat } from './openai';\nconst VendorObject: Record<\n string,\n { options: { baseURL: string; modelList: string[] } }\n> = {\n '360': { options: { baseURL: 'https://ai.360.cn', modelList: [] } },\n azure: { options: { baseURL: '', modelList: [] } },\n moonshot: { options: { baseURL: 'https://api.moonshot.cn', modelList: [] } },\n baichuan: {\n options: { baseURL: 'https://api.baichuan-ai.com', modelList: [] },\n },\n minimax: { options: { baseURL: 'https://api.minimax.chat', modelList: [] } },\n mistralai: { options: { baseURL: 'https://api.mistral.ai', modelList: [] } },\n groq: {\n options: { baseURL: 'https://api.groq.com/openai', modelList: [] },\n },\n lingyiwanwu: {\n options: { baseURL: 'https://api.lingyiwanwu.com', modelList: [] },\n },\n stepfun: { options: { baseURL: 'https://api.stepfun.com', modelList: [] } },\n deepseek: { options: { baseURL: 'https://api.deepseek.com', modelList: [] } },\n 'together.ai': {\n options: { baseURL: 'https://api.together.xyz', modelList: [] },\n },\n volcengine: {\n options: {\n baseURL: 'https://ark.cn-beijing.volces.com/api/v3',\n modelList: [],\n },\n },\n novita: {\n options: { baseURL: 'https://api.novita.ai/v3/openai', modelList: [] },\n },\n siliconflow: {\n options: { baseURL: 'https://api.siliconflow.cn', modelList: [] },\n },\n // 官网明确兼容\n // https://help.aliyun.com/zh/model-studio/developer-reference/use-qwen-by-calling-api?spm=a2c6h.13066369.question.5.3a0e527bbxeJLJ#4ec3e641c294d\n tongyi: {\n options: {\n baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1',\n modelList: [],\n },\n },\n // 文档上看是一样的\n // https://open.bigmodel.cn/dev/api/normal-model/glm-4\n zhipu: {\n options: {\n baseURL: 'https://open.bigmodel.cn/api/paas/v4',\n modelList: [],\n },\n },\n // 明确兼容\n // https://www.xfyun.cn/doc/spark/HTTP%E8%B0%83%E7%94%A8%E6%96%87%E6%A1%A3.html#_7-%E4%BD%BF%E7%94%A8openai-sdk%E8%AF%B7%E6%B1%82%E7%A4%BA%E4%BE%8B\n spark: {\n options: {\n baseURL: 'https://spark-api-open.xf-yun.com/v1',\n modelList: [],\n },\n },\n // 官方兼容\n // https://cloud.tencent.com/document/product/1729/111007\n hunyuan: {\n options: {\n baseURL: 'https://api.hunyuan.cloud.tencent.com/v1',\n modelList: [],\n },\n },\n};\n\nexport function createCompatibleFactory(options: ChatModelOptions) {\n const vendorConfig = VendorObject[options.vendor];\n return new OpenAIChat({\n ...options,\n baseURL: vendorConfig.options.baseURL,\n });\n}\n", "import { OpenAIChat } from '../openai';\nimport { GoogleGenerativeAI, StartChatParams } from '@google/generative-ai';\nimport {\n GenminiChatMessageListDefine,\n GenminiSystemMessageDefine,\n} from './message.define';\nimport * as v from 'valibot';\nimport { ChatBodyInput, ChatRequestOptions } from '../../type';\n\nexport class GeminiChat extends OpenAIChat {\n #ggai!: GoogleGenerativeAI;\n override init(): void {\n this.#ggai = new GoogleGenerativeAI(this.options.apiKey!);\n }\n override async *stream(\n input: ChatBodyInput,\n options?: ChatRequestOptions,\n ): AsyncGenerator<string, void, unknown> {\n const model = this.#ggai.getGenerativeModel({\n model: this.options.model,\n generationConfig: {\n topP: this.options.top_p,\n temperature: this.options.temperature,\n maxOutputTokens: this.options.max_tokens,\n },\n });\n const messages = input.messages;\n const data = {} as Partial<StartChatParams>;\n if (messages[0].role === 'system') {\n const system = messages.shift();\n data.systemInstruction = v.parse(GenminiSystemMessageDefine, system);\n }\n data.history = v.parse(GenminiChatMessageListDefine, messages);\n const lastMessage = data.history.pop()!;\n\n const chat = model.startChat(data);\n const result = await chat.sendMessageStream(lastMessage.parts, {\n signal: options?.signal,\n });\n for await (const chunk of result.stream) {\n const chunkText = chunk.text();\n yield chunkText;\n }\n }\n}\n", "import * as v from 'valibot';\nimport {\n AssistantChatMessage,\n ChatCompletionContentPartImageType,\n ChatCompletionContentPartStrType,\n SystemChatMessage,\n UserChatMessage,\n} from '../../message.define';\nimport { isTruthy } from '@cyia/util';\n\nfunction messageContentTransform(\n list: (\n | ChatCompletionContentPartStrType\n | ChatCompletionContentPartImageType\n )[],\n) {\n return list\n .map((item) => (item.type === 'text' ? { text: item.text } : undefined))\n .filter(isTruthy);\n}\nexport const GenminiSystemMessageDefine = v.pipe(\n SystemChatMessage,\n v.transform((item) => ({\n role: 'system',\n parts: messageContentTransform(item.content),\n })),\n);\n\nexport const GenminiChatMessageListDefine = v.pipe(\n v.array(\n v.union([\n v.pipe(\n UserChatMessage,\n v.transform((item) => ({\n role: 'user' as const,\n parts: messageContentTransform(item.content),\n })),\n ),\n\n v.pipe(\n AssistantChatMessage,\n v.transform((item) => ({\n role: 'model' as const,\n parts: messageContentTransform(item.content),\n })),\n ),\n ]),\n ),\n);\n", "import { OpenAIChat } from '../openai';\nimport Anthropic from '@anthropic-ai/sdk';\nimport {\n AnthropicChatMessageListDefine,\n AnthropicSystemMessageDefine,\n} from './message.define';\nimport { createAsyncGeneratorAdapter } from '@cyia/util';\nimport * as v from 'valibot';\nimport {\n ChatBodyInput,\n ChatRequestOptions,\n ChatToolBodyInput,\n} from '../../type';\nexport class AnthropicChat extends OpenAIChat {\n client!: Anthropic;\n override init(): void {\n this.client = new Anthropic({ apiKey: this.options.apiKey });\n }\n override async *stream(\n input: ChatBodyInput,\n options?: ChatRequestOptions,\n ): AsyncGenerator<string, void, unknown> {\n const body = {\n model: this.options.model,\n max_tokens: this.options.max_tokens,\n top_p: this.options.top_p,\n temperature: this.options.temperature,\n stream: true,\n } as Partial<Anthropic.Messages.MessageStreamParams>;\n\n if (input.messages[0].role === 'system') {\n const system = input.messages.shift()!.content;\n body.system = v.parse(AnthropicSystemMessageDefine, system);\n }\n body.messages = v.parse(AnthropicChatMessageListDefine, input.messages);\n const result = this.client.messages.stream(body as any, {\n signal: options?.signal,\n });\n const aga = createAsyncGeneratorAdapter<string>();\n result.once('end', () => aga.complete());\n result.on('text', (text) => {\n aga.next(text);\n });\n for await (const item of aga.getData()) {\n yield item;\n }\n }\n override async callTool(\n input: ChatToolBodyInput,\n options?: ChatRequestOptions,\n ) {\n const body =\n {} as Partial<Anthropic.Messages.MessageCreateParamsNonStreaming> &\n Pick<Anthropic.Messages.MessageCreateParamsNonStreaming, 'messages'>;\n\n if (input.messages[0].role === 'system') {\n const system = input.messages.shift()!.content;\n body.system = v.parse(AnthropicSystemMessageDefine, system);\n }\n body.messages = v.parse(AnthropicChatMessageListDefine, input.messages);\n const result = await this.client.messages.create(\n {\n ...body,\n model: this.options.model,\n max_tokens: this.options.max_tokens,\n top_p: this.options.top_p,\n temperature: this.options.temperature,\n stream: false,\n tools: input.tools.map((item) => ({\n name: item.function.name,\n description: item.function.description,\n input_schema: item.function.parameters! as any,\n })),\n },\n {\n signal: options?.signal,\n },\n );\n const isToolResult = result.content.find(\n (item) => item.type === 'tool_use',\n );\n if (isToolResult) {\n return {\n type: 'function' as const,\n function: {\n name: isToolResult.name,\n arguments: isToolResult.input as Record<string, any> | undefined,\n },\n };\n }\n const text = result.content.find((item) => item.type === 'text');\n return {\n type: 'text' as const,\n text: text!.text,\n };\n }\n}\n", "import { isTruthy } from '@cyia/util';\nimport {\n SystemChatCompletionContent,\n UserChatMessage,\n AssistantChatMessage,\n ChatCompletionContentPartStrType,\n ChatCompletionContentPartImageType,\n} from '../../message.define';\nimport * as v from 'valibot';\n// data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAR\nfunction baseImageSplit(str: string) {\n const mimeTypeIndex = str.indexOf(';');\n const dataStartIndex = str.indexOf(',', mimeTypeIndex);\n return {\n mimeType: str.slice(5, mimeTypeIndex) as\n | 'image/jpeg'\n | 'image/png'\n | 'image/gif'\n | 'image/webp',\n data: str.slice(dataStartIndex + 1),\n };\n}\n\nexport const AnthropicSystemMessageDefine = v.pipe(\n SystemChatCompletionContent,\n v.transform((list) =>\n list\n .map((item) => (item.type === 'text' ? item : undefined))\n .filter(isTruthy),\n ),\n);\nfunction contentConvert(\n part: ChatCompletionContentPartStrType | ChatCompletionContentPartImageType,\n) {\n if (part.type === 'text') {\n return part;\n }\n const result = baseImageSplit(part.image_url.url);\n return {\n type: 'image' as const,\n source: {\n type: 'base64' as const,\n media_type: result.mimeType,\n data: result.data,\n },\n };\n}\nconst UserMessageDefine = v.pipe(\n UserChatMessage,\n v.transform((item) => ({\n ...item,\n content: item.content.map(contentConvert),\n })),\n);\nconst AssistantMessageDefine = v.pipe(\n AssistantChatMessage,\n v.transform((item) => ({\n ...item,\n content: item.content.map(contentConvert),\n })),\n);\nexport const AnthropicChatMessageListDefine = v.array(\n v.union([UserMessageDefine, AssistantMessageDefine]),\n);\n", "import {\n AssistantChatMessageType,\n SystemChatMessageType,\n UserChatMessageType,\n} from '../message.define';\n\nexport function createSystemMessage() {\n return { role: 'system' } as SystemChatMessageType;\n}\nexport function createUserMessage(text?: string) {\n return {\n role: 'user',\n content:\n typeof text === 'string' ? [{ type: 'text', text: '' }] : undefined,\n } as UserChatMessageType;\n}\nexport function createAssistantMessage(text: string = '') {\n return {\n role: 'assistant',\n content: [{ type: 'text', text }],\n } as AssistantChatMessageType;\n}\n", "export const ThinkList = [\n 'think',\n 'thinking',\n 'reason',\n 'reasoning',\n 'thought',\n 'Thought',\n];\n", "import { asControl, actions, setComponent } from '@piying/view-angular-core';\nimport * as v from 'valibot';\nimport {\n asVirtualGroup,\n metadataPipe,\n omitIntersect,\n} from '@piying/valibot-visit';\nconst VendorList = [\n {\n value: 'openai',\n label: 'openai',\n options: {\n baseURL: '',\n modelList: [],\n description: '如果是openai兼容的厂商,需要设置baseURL',\n },\n },\n {\n value: '360',\n label: '360',\n options: { baseURL: 'https://ai.360.cn', modelList: [] },\n },\n {\n value: 'azure',\n label: 'azure',\n options: { baseURL: '', modelList: [] },\n },\n {\n value: 'moonshot',\n label: 'moonshot',\n options: { baseURL: 'https://api.moonshot.cn', modelList: [] },\n },\n {\n value: 'baichuan',\n label: 'baichuan',\n options: { baseURL: 'https://api.baichuan-ai.com', modelList: [] },\n },\n {\n value: 'minimax',\n label: 'minimax',\n options: { baseURL: 'https://api.minimax.chat', modelList: [] },\n },\n {\n value: 'mistralai',\n label: 'mistralai',\n options: { baseURL: 'https://api.mistral.ai', modelList: [] },\n },\n {\n value: 'groq',\n label: 'groq',\n options: { baseURL: 'https://api.groq.com/openai', modelList: [] },\n },\n {\n value: 'lingyiwanwu',\n label: 'lingyiwanwu',\n options: { baseURL: 'https://api.lingyiwanwu.com', modelList: [] },\n },\n {\n value: 'stepfun',\n label: 'stepfun',\n options: { baseURL: 'https://api.stepfun.com', modelList: [] },\n },\n {\n value: 'deepseek',\n label: 'deepseek',\n options: { baseURL: 'https://api.deepseek.com', modelList: [] },\n },\n {\n value: 'together.ai',\n label: 'together.ai',\n options: { baseURL: 'https://api.together.xyz', modelList: [] },\n },\n {\n value: 'volcengine',\n label: 'volcengine',\n options: {\n baseURL: 'https://ark.cn-beijing.volces.com/api/v3',\n modelList: [],\n },\n },\n {\n value: 'novita',\n label: 'novita',\n options: { baseURL: 'https://api.novita.ai/v3/openai', modelList: [] },\n },\n {\n value: 'siliconflow',\n label: 'siliconflow',\n options: { baseURL: 'https://api.siliconflow.cn', modelList: [] },\n },\n {\n value: 'tongyi',\n label: 'tongyi',\n options: {\n baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1',\n modelList: [],\n },\n },\n {\n value: 'zhipu',\n label: 'zhipu',\n options: {\n baseURL: 'https://open.bigmodel.cn/api/paas/v4',\n modelList: [],\n },\n },\n {\n value: 'spark',\n label: 'spark',\n options: {\n baseURL: 'https://spark-api-open.xf-yun.com/v1',\n modelList: [],\n },\n },\n {\n value: 'hunyuan',\n label: 'hunyuan',\n options: {\n baseURL: 'https://api.hunyuan.cloud.tencent.com/v1',\n modelList: [],\n },\n },\n\n {\n value: 'gemini',\n label: 'gemini',\n options: {\n baseURL: '',\n modelList: [],\n description: '非openai兼容,手动适配,如果有问题欢迎报告',\n },\n },\n {\n value: 'claude',\n label: 'claude',\n options: {\n baseURL: '',\n modelList: [],\n description: '非openai兼容,手动适配,如果有问题欢迎报告',\n },\n },\n] as const;\nconst vendorOptionsDescribe = `## 通用参数\n- \\`extraOptions\\`字段用于覆盖默认字段\n\\`\\`\\`json\n{\"厂商名(与vendor字段相同)\":{ \"extraOptions\":{\"temperature\":0.1,\"topP\":0.8,\"maxTokens\":8192,\"baseURL\":\"http://127.0.0.1:11434/v1\",\"apiKey\":\" \"} }\n\\`\\`\\`\n`;\nconst InputWrapper = metadataPipe(actions.wrappers.set(['tooltip', 'label']));\n\nexport const ChatItemDefine = v.pipe(\n v.intersect([\n v.pipe(\n v.object({\n name: v.pipe(v.string(), v.title('配置名')),\n vendor: v.pipe(\n v.optional(\n v.picklist(VendorList.map((item) => item.value)),\n 'openai',\n ),\n v.description('大语言模型提供的厂商'),\n v.title('对话厂商'),\n v.metadata({\n enumOptions: VendorList.map((item) => ({\n label: item.label,\n description: [\n (item.options as any).description\n ? (item.options as any).description\n : '',\n item.options.baseURL ? `链接: ${item.options.baseURL}` : '',\n ]\n .filter(Boolean)\n .join('\\n'),\n })),\n }),\n actions.inputs.patch({\n options: VendorList,\n }),\n ),\n }),\n actions.wrappers.patch(['div']),\n actions.class.top('flex *:flex-1 gap-2 items-center'),\n ),\n v.pipe(\n v.object({\n baseURL: v.pipe(\n v.optional(v.string(), 'http://127.0.0.1:11434/v1'),\n v.title('地址'),\n v.description('openai兼容接口'),\n ...InputWrapper,\n ),\n model: v.pipe(\n v.optional(v.string(), `qwen3:8b`),\n v.title('模型'),\n v.description(\n '## 模型名\\n### ollama模型推荐\\n- `qwen3:8b`\\n- `qwen3:14b`,`deepseek-r1:7b`,`deepseek-r1:14b`\\n### 图片对话模型\\n- `minicpm-v:8b`',\n ),\n ...InputWrapper,\n ),\n }),\n actions.wrappers.patch([\n {\n type: 'div',\n attributes: { class: 'flex *:flex-1 gap-2 items-center' },\n },\n ]),\n ),\n v.object({\n apiKey: v.pipe(\n v.optional(v.string()),\n v.description('本地部署默认可以不填'),\n v.title('apiKey')\n ),\n }),\n v.pipe(\n v.object({\n max_tokens: v.pipe(v.optional(v.number(), 8192), v.title('max_tokens')),\n top_p: v.pipe(\n v.optional(v.number(), 0.8),\n v.minValue(0),\n v.maxValue(10),\n v.description(`核采样(nucleus sampling)是温度采样的另一种替代方法,模型会考虑累积概率质量达到 top_p 的 token。例如,当 top_p 设为 0.1 时,仅考虑累积概率前 10% 的 token。\n\n我们通常建议调整 top_p 或温度参数,但不要同时调整两者。`),\n ...InputWrapper,\n v.title('top_p'),\n ),\n temperature: v.pipe(\n v.optional(v.pipe(v.number(), v.minValue(0), v.maxValue(2)), 0.1),\n v.description(\n '采样温度应设置在0到2之间。较高的值(如0.8)会使输出更随机,而较低的值(如0.2)则会使输出更集中且确定。我们通常建议仅调整此参数或top_p,而不同时调整两者。',\n ),\n ...InputWrapper,\n v.title('temperature'),\n ),\n frequency_penalty: v.pipe(\n v.optional(v.pipe(v.number(), v.minValue(-2), v.maxValue(2))),\n v.description(\n '取值范围为-2.0至2.0。正值会根据当前文本中已有标记的频率对新标记进行惩罚,从而降低模型逐字重复相同内容的概率。',\n ),\n ...InputWrapper,\n v.title('frequency_penalty'),\n ),\n presence_penalty: v.pipe(\n v.optional(v.pipe(v.number(), v.minValue(-2), v.maxValue(2))),\n v.description(\n '数值介于-2.0至2.0之间。正值会基于新标记是否已在当前文本中出现,对新标记施加惩罚,从而提升模型讨论新话题的可能性。',\n ),\n ...InputWrapper,\n v.title('presence_penalty'),\n ),\n seed: v.pipe(\n v.optional(v.pipe(v.number())),\n v.description(\n '若已指定,系统将尽力确保采样具有确定性,即使用相同种子和参数的重复请求将返回相同结果。确定性无法保证,请通过 system_fingerprint 响应参数监控后端变化。',\n ),\n ...InputWrapper,\n v.title('seed'),\n ),\n stop: v.pipe(\n v.optional(v.pipe(v.array(v.pipe(v.string())), v.maxLength(4))),\n v.description(\n '最多可指定4个停止序列,API将在生成到该序列时停止,返回的文本中不包含该停止序列。',\n ),\n asControl(),\n setComponent('chip-input-list'),\n actions.inputs.patch({\n addOnBlur: true,\n }),\n ...InputWrapper,\n v.title('stop'),\n ),\n // top_logprobs: v.pipe(\n // v.optional(v.pipe(v.number(), v.minValue(0), v.maxValue(20))),\n // v.description(\n // '一个介于0和20之间的整数,用于指定在每个标记位置返回的最可能的标记数量,每个标记均关联对应的对数概率。若使用此参数,则必须将logprobs设置为true。',\n // ),\n // ),\n\n // verbosity: v.pipe(\n // v.optional(v.picklist(['low', 'medium', 'high'])),\n // v.description(\n // `控制模型回复的详细程度。数值越低,回复越简洁;数值越高,回复越详细。当前支持的取值为低、中和高。`,\n // ),\n // ),\n // reasoning_effort: v.pipe(\n // v.optional(v.picklist(['minimal', 'low', 'medium', 'high'])),\n // v.description(\n // `控制模型回复的详细程度。数值越低,回复越简洁;数值越高,回复越详细。当前支持的取值为低、中和高。`,\n // ),\n // ),\n }),\n actions.wrappers.patch(['div']),\n actions.class.top('grid gap-2'),\n ),\n ]),\n actions.wrappers.patch(['div']),\n actions.class.top('grid gap-2'),\n asVirtualGroup(),\n);\n\nexport const VendorOptionsDefine = v.pipe(\n v.optional(\n v.record(\n v.string(),\n v.pipe(\n v.intersect([\n v.object({\n /** @internal */\n extraOptions: v.pipe(\n v.optional(omitIntersect(ChatItemDefine, ['name', 'vendor'])),\n v.description(`附加配置`),\n ),\n }),\n ]),\n actions.wrappers.patch(['div']),\n actions.class.top('grid gap-2'),\n asVirtualGroup(),\n ),\n ),\n ),\n v.description(vendorOptionsDescribe),\n setComponent('rest-chip-group'),\n actions.inputs.patch({\n optionalkeyList: VendorList.map((item) => item.value),\n placeholder: '请设置额外配置',\n }),\n v.title('厂商额外配置'),\n);\nexport const ChatParamsItemDefine = v.pipe(\n v.intersect([\n ChatItemDefine,\n v.object({ vendorOptions: VendorOptionsDefine }),\n ]),\n asVirtualGroup(),\n actions.wrappers.patch(['div']),\n actions.class.top('grid gap-2'),\n);\n\nexport const ChatParamsListDefine = v.pipe(\n v.array(ChatParamsItemDefine),\n setComponent('label-chip-array'),\n v.description('对话模型列表,目前用于切换使用'),\n actions.inputs.patch({\n displayKey: 'name',\n placeholder: '请添加配置',\n }),\n);\nexport type ChatModelOptions = v.InferOutput<typeof ChatParamsItemDefine>;\nexport type ChatModelOptionsInput = v.InferInput<typeof ChatParamsItemDefine>;\n\nexport const InputChatOptionsDefine = omitIntersect(ChatParamsItemDefine, [\n 'name',\n]);\nexport type CreateChatModelOptions = v.InferInput<\n typeof InputChatOptionsDefine\n>;\n", "import { InjectionToken, Signal } from 'static-injector';\nimport { OpenAIConfig } from './type';\n\nexport const OpenAIConfigToken = new InjectionToken<Signal<OpenAIConfig>>(\n 'OpenAIConfig',\n);\n", "import { computed, inject, signal } from 'static-injector';\n\nimport { omitBy } from 'es-toolkit';\nimport { bufferWhen, debounceTime, filter, Subject } from 'rxjs';\nimport { path } from '@cyia/vfs2';\nimport { HistoryItem } from './type/history';\nimport { OpenAIConfigToken } from './token';\nimport * as fs from 'fs';\nimport { parse, stringify } from 'yaml';\nimport { ChatMessageListOutputType } from './message.define';\nimport dayjs from 'dayjs';\nimport { isEmptyInput } from '@cyia/util';\n\nexport class ChatHistoryService {\n #update$ = signal(0);\n /** 外部监听更新用 */\n update$$ = computed(() => this.#update$());\n #logMap = new Map<string, Subject<HistoryItem>>();\n #config = inject(OpenAIConfigToken);\n #dir() {\n return this.#config().history.dir;\n }\n #createNewListen(fileName: string) {\n const filePath = path.join(this.#dir(), `${fileName}.yml`);\n const instance = new Subject<HistoryItem>();\n instance\n .pipe(\n bufferWhen(() => instance.pipe(debounceTime(2_000))),\n filter((list) => !!list.length),\n )\n .subscribe(async (inputList) => {\n if (!fs.existsSync(this.#dir())) {\n await fs.promises.mkdir(this.#dir(), { recursive: true });\n }\n try {\n let list: HistoryItem[] = [];\n if (await fs.existsSync(filePath)) {\n const content = await fs.promises.readFile(filePath, {\n encoding: 'utf-8',\n });\n list = parse(content);\n } else {\n list = [];\n }\n list.unshift(...inputList.reverse());\n await fs.promises.writeFile(filePath, stringify(list));\n this.#update$.update((a) => a + 1);\n } catch (error) {\n this.#config().captureException(error);\n }\n });\n this.#logMap.set(fileName, instance);\n\n return instance;\n }\n save(messages: ChatMessageListOutputType, options: any, config: any) {\n if (!this.#config().history.enable) {\n return;\n }\n try {\n const fileName = dayjs().format('YYYY-MM-DD');\n const message$ =\n this.#logMap.get(fileName) ?? this.#createNewListen(fileName);\n const item = {\n date: dayjs().valueOf(),\n messages,\n options: omitBy(options, isEmptyInput),\n config,\n };\n message$.next(item);\n } catch (error) {\n try {\n this.#config().captureException(error);\n } catch (error) {}\n }\n }\n}\n", "import { ChatHistoryService } from './chat.history.service';\nimport { ChatProviderService } from './service';\nimport { OpenAIConfigToken } from './token';\n\nexport const OPENAI_MODULE = {\n provider: [ChatProviderService, ChatHistoryService],\n token: { OpenAIConfigToken },\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["inject", "v", "result", "v", "v", "isTruthy", "v", "isTruthy", "v", "v", "parse", "error", "v", "inject", "result", "input", "options"]
|
|
7
7
|
}
|