| import { |
| isAgentsEndpoint, |
| tQueryParamsSchema, |
| isAssistantsEndpoint, |
| } from 'librechat-data-provider'; |
| import type { TConversation, TPreset } from 'librechat-data-provider'; |
| import { isEphemeralAgent } from '~/common'; |
|
|
| const allowedParams = Object.keys(tQueryParamsSchema.shape); |
| export default function createChatSearchParams( |
| input: TConversation | TPreset | Record<string, string> | null, |
| ): URLSearchParams { |
| if (input == null) { |
| return new URLSearchParams(); |
| } |
|
|
| const params = new URLSearchParams(); |
|
|
| if (input && typeof input === 'object' && !('endpoint' in input) && !('model' in input)) { |
| Object.entries(input as Record<string, string>).forEach(([key, value]) => { |
| if (value != null && allowedParams.includes(key)) { |
| params.set(key, value); |
| } |
| }); |
| return params; |
| } |
|
|
| const conversation = input as TConversation | TPreset; |
| const endpoint = conversation.endpoint; |
| if (conversation.spec) { |
| return new URLSearchParams({ spec: conversation.spec }); |
| } |
| if ( |
| isAgentsEndpoint(endpoint) && |
| conversation.agent_id && |
| !isEphemeralAgent(conversation.agent_id) |
| ) { |
| return new URLSearchParams({ agent_id: String(conversation.agent_id) }); |
| } else if (isAssistantsEndpoint(endpoint) && conversation.assistant_id) { |
| return new URLSearchParams({ assistant_id: String(conversation.assistant_id) }); |
| } else if (isAgentsEndpoint(endpoint) && !conversation.agent_id) { |
| return params; |
| } else if (isAssistantsEndpoint(endpoint) && !conversation.assistant_id) { |
| return params; |
| } |
|
|
| if (endpoint) { |
| params.set('endpoint', endpoint); |
| } |
| if (conversation.model) { |
| params.set('model', conversation.model); |
| } |
|
|
| const paramMap: Record<string, any> = {}; |
| allowedParams.forEach((key) => { |
| if (key === 'agent_id' && isEphemeralAgent(conversation.agent_id)) { |
| return; |
| } |
| if (key !== 'endpoint' && key !== 'model') { |
| paramMap[key] = (conversation as any)[key]; |
| } |
| }); |
|
|
| return Object.entries(paramMap).reduce((params, [key, value]) => { |
| if (value != null) { |
| if (Array.isArray(value)) { |
| params.set(key, key === 'stop' ? value.join(',') : JSON.stringify(value)); |
| } else { |
| params.set(key, String(value)); |
| } |
| } |
|
|
| return params; |
| }, params); |
| } |
|
|