librechat-data-provider 0.6.4 → 0.6.6
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/dist/index.es.js +1 -1
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/react-query/index.es.js +1 -1
- package/dist/react-query/index.es.js.map +1 -1
- package/package.json +1 -1
- package/src/actions.ts +6 -1
- package/src/api-endpoints.ts +39 -5
- package/src/config.ts +102 -33
- package/src/createPayload.ts +10 -17
- package/src/data-service.ts +168 -31
- package/src/file-config.ts +15 -10
- package/src/generate.ts +1 -13
- package/src/keys.ts +5 -0
- package/src/parsers.ts +37 -10
- package/src/react-query/react-query-service.ts +35 -9
- package/src/request.ts +10 -0
- package/src/schemas.ts +106 -70
- package/src/types/assistants.ts +71 -3
- package/src/types/files.ts +32 -0
- package/src/types/mutations.ts +20 -1
- package/src/types/queries.ts +23 -2
- package/src/types.ts +30 -2
package/dist/index.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../src/types/assistants.ts","../src/schemas.ts","../src/file-config.ts","../src/models.ts","../src/types/files.ts","../src/config.ts","../src/parsers.ts","../src/generate.ts","../src/azure.ts","../src/keys.ts","../src/headers-helpers.ts","../src/api-endpoints.ts","../src/request.ts","../src/data-service.ts","../src/sse.js","../src/actions.ts","../src/createPayload.ts"],"sourcesContent":["import type { OpenAPIV3 } from 'openapi-types';\nimport type { TFile } from './files';\n\nexport type Schema = OpenAPIV3.SchemaObject & { description?: string };\nexport type Reference = OpenAPIV3.ReferenceObject & { description?: string };\n\nexport type Metadata = {\n [key: string]: unknown;\n};\n\nexport enum Tools {\n code_interpreter = 'code_interpreter',\n retrieval = 'retrieval',\n function = 'function',\n}\n\nexport type Tool = {\n [type: string]: Tools;\n};\n\nexport type FunctionTool = {\n type: Tools;\n function?: {\n description: string;\n name: string;\n parameters: Record<string, unknown>;\n };\n};\n\nexport type Assistant = {\n id: string;\n created_at: number;\n description: string | null;\n file_ids: string[];\n instructions: string | null;\n metadata: Metadata | null;\n model: string;\n name: string | null;\n object: string;\n tools: FunctionTool[];\n};\n\nexport type AssistantCreateParams = {\n model: string;\n description?: string | null;\n file_ids?: string[];\n instructions?: string | null;\n metadata?: Metadata | null;\n name?: string | null;\n tools?: Array<FunctionTool | string>;\n};\n\nexport type AssistantUpdateParams = {\n model?: string;\n description?: string | null;\n file_ids?: string[];\n instructions?: string | null;\n metadata?: Metadata | null;\n name?: string | null;\n tools?: Array<FunctionTool | string>;\n};\n\nexport type AssistantListParams = {\n limit?: number;\n before?: string | null;\n after?: string | null;\n order?: 'asc' | 'desc';\n};\n\nexport type AssistantListResponse = {\n object: string;\n data: Assistant[];\n first_id: string;\n last_id: string;\n has_more: boolean;\n};\n\nexport type File = {\n file_id: string;\n id?: string;\n temp_file_id?: string;\n bytes: number;\n created_at: number;\n filename: string;\n object: string;\n purpose: 'fine-tune' | 'fine-tune-results' | 'assistants' | 'assistants_output';\n};\n\n/**\n * Details of the Code Interpreter tool call the run step was involved in.\n * Includes the tool call ID, the code interpreter definition, and the type of tool call.\n */\nexport type CodeToolCall = {\n id: string; // The ID of the tool call.\n code_interpreter: {\n input: string; // The input to the Code Interpreter tool call.\n outputs: Array<Record<string, unknown>>; // The outputs from the Code Interpreter tool call.\n };\n type: 'code_interpreter'; // The type of tool call, always 'code_interpreter'.\n};\n\n/**\n * Details of a Function tool call the run step was involved in.\n * Includes the tool call ID, the function definition, and the type of tool call.\n */\nexport type FunctionToolCall = {\n id: string; // The ID of the tool call object.\n function: {\n arguments: string; // The arguments passed to the function.\n name: string; // The name of the function.\n output: string | null; // The output of the function, null if not submitted.\n };\n type: 'function'; // The type of tool call, always 'function'.\n};\n\n/**\n * Details of a Retrieval tool call the run step was involved in.\n * Includes the tool call ID and the type of tool call.\n */\nexport type RetrievalToolCall = {\n id: string; // The ID of the tool call object.\n retrieval: unknown; // An empty object for now.\n type: 'retrieval'; // The type of tool call, always 'retrieval'.\n};\n\n/**\n * Details of the tool calls involved in a run step.\n * Can be associated with one of three types of tools: `code_interpreter`, `retrieval`, or `function`.\n */\nexport type ToolCallsStepDetails = {\n tool_calls: Array<CodeToolCall | RetrievalToolCall | FunctionToolCall>; // An array of tool calls the run step was involved in.\n type: 'tool_calls'; // Always 'tool_calls'.\n};\n\nexport type ImageFile = TFile & {\n /**\n * The [File](https://platform.openai.com/docs/api-reference/files) ID of the image\n * in the message content.\n */\n file_id: string;\n filename: string;\n filepath: string;\n height: number;\n width: number;\n /**\n * Prompt used to generate the image if applicable.\n */\n prompt?: string;\n /**\n * Additional metadata used to generate or about the image/tool_call.\n */\n metadata?: Record<string, unknown>;\n};\n\n// FileCitation.ts\nexport type FileCitation = {\n end_index: number;\n file_citation: FileCitationDetails;\n start_index: number;\n text: string;\n type: 'file_citation';\n};\n\nexport type FileCitationDetails = {\n file_id: string;\n quote: string;\n};\n\nexport type FilePath = {\n end_index: number;\n file_path: FilePathDetails;\n start_index: number;\n text: string;\n type: 'file_path';\n};\n\nexport type FilePathDetails = {\n file_id: string;\n};\n\nexport type Text = {\n annotations?: Array<FileCitation | FilePath>;\n value: string;\n};\n\nexport enum AnnotationTypes {\n FILE_CITATION = 'file_citation',\n FILE_PATH = 'file_path',\n}\n\nexport enum ContentTypes {\n TEXT = 'text',\n TOOL_CALL = 'tool_call',\n IMAGE_FILE = 'image_file',\n ERROR = 'error',\n}\n\nexport enum StepTypes {\n TOOL_CALLS = 'tool_calls',\n MESSAGE_CREATION = 'message_creation',\n}\n\nexport enum ToolCallTypes {\n FUNCTION = 'function',\n RETRIEVAL = 'retrieval',\n CODE_INTERPRETER = 'code_interpreter',\n}\n\nexport enum StepStatus {\n IN_PROGRESS = 'in_progress',\n CANCELLED = 'cancelled',\n FAILED = 'failed',\n COMPLETED = 'completed',\n EXPIRED = 'expired',\n}\n\nexport enum MessageContentTypes {\n TEXT = 'text',\n IMAGE_FILE = 'image_file',\n}\n\n//enum for RunStatus\n// The status of the run: queued, in_progress, requires_action, cancelling, cancelled, failed, completed, or expired.\nexport enum RunStatus {\n QUEUED = 'queued',\n IN_PROGRESS = 'in_progress',\n REQUIRES_ACTION = 'requires_action',\n CANCELLING = 'cancelling',\n CANCELLED = 'cancelled',\n FAILED = 'failed',\n COMPLETED = 'completed',\n EXPIRED = 'expired',\n}\n\nexport type PartMetadata = {\n progress?: number;\n asset_pointer?: string;\n status?: string;\n action?: boolean;\n};\n\nexport type ContentPart = (CodeToolCall | RetrievalToolCall | FunctionToolCall | ImageFile | Text) &\n PartMetadata;\n\nexport type TMessageContentParts =\n | { type: ContentTypes.ERROR; text: Text & PartMetadata }\n | { type: ContentTypes.TEXT; text: Text & PartMetadata }\n | {\n type: ContentTypes.TOOL_CALL;\n tool_call: (CodeToolCall | RetrievalToolCall | FunctionToolCall) & PartMetadata;\n }\n | { type: ContentTypes.IMAGE_FILE; image_file: ImageFile & PartMetadata };\n\nexport type StreamContentData = TMessageContentParts & {\n /** The index of the current content part */\n index: number;\n /** The current text content was already served but edited to replace elements therein */\n edited?: boolean;\n};\n\nexport type TContentData = StreamContentData & {\n messageId: string;\n conversationId: string;\n userMessageId: string;\n thread_id: string;\n stream?: boolean;\n};\n\nexport const actionDelimiter = '_action_';\nexport const actionDomainSeparator = '---';\nexport const hostImageIdSuffix = '_host_copy';\nexport const hostImageNamePrefix = 'host_copy_';\n\nexport enum AuthTypeEnum {\n ServiceHttp = 'service_http',\n OAuth = 'oauth',\n None = 'none',\n}\n\nexport enum AuthorizationTypeEnum {\n Bearer = 'bearer',\n Basic = 'basic',\n Custom = 'custom',\n}\n\nexport enum TokenExchangeMethodEnum {\n DefaultPost = 'default_post',\n BasicAuthHeader = 'basic_auth_header',\n}\n\nexport type ActionAuth = {\n authorization_type?: AuthorizationTypeEnum;\n custom_auth_header?: string;\n type?: AuthTypeEnum;\n authorization_content_type?: string;\n authorization_url?: string;\n client_url?: string;\n scope?: string;\n token_exchange_method?: TokenExchangeMethodEnum;\n};\n\nexport type ActionMetadata = {\n api_key?: string;\n auth?: ActionAuth;\n domain?: string;\n privacy_policy_url?: string;\n raw_spec?: string;\n oauth_client_id?: string;\n oauth_client_secret?: string;\n};\n\nexport type Action = {\n action_id: string;\n assistant_id: string;\n type?: string;\n settings?: Record<string, unknown>;\n metadata: ActionMetadata;\n};\n\nexport type AssistantAvatar = {\n filepath: string;\n source: string;\n};\n\nexport type AssistantDocument = {\n user: string;\n assistant_id: string;\n avatar?: AssistantAvatar;\n access_level?: number;\n file_ids?: string[];\n actions?: string[];\n createdAt?: Date;\n updatedAt?: Date;\n};\n\nexport enum FilePurpose {\n FineTune = 'fine-tune',\n FineTuneResults = 'fine-tune-results',\n Assistants = 'assistants',\n AssistantsOutput = 'assistants_output',\n}\n\nexport const defaultOrderQuery: {\n order: 'desc';\n limit: 100;\n} = {\n order: 'desc',\n limit: 100,\n};\n\nexport enum AssistantStreamEvents {\n ThreadCreated = 'thread.created',\n ThreadRunCreated = 'thread.run.created',\n ThreadRunQueued = 'thread.run.queued',\n ThreadRunInProgress = 'thread.run.in_progress',\n ThreadRunRequiresAction = 'thread.run.requires_action',\n ThreadRunCompleted = 'thread.run.completed',\n ThreadRunFailed = 'thread.run.failed',\n ThreadRunCancelling = 'thread.run.cancelling',\n ThreadRunCancelled = 'thread.run.cancelled',\n ThreadRunExpired = 'thread.run.expired',\n ThreadRunStepCreated = 'thread.run.step.created',\n ThreadRunStepInProgress = 'thread.run.step.in_progress',\n ThreadRunStepCompleted = 'thread.run.step.completed',\n ThreadRunStepFailed = 'thread.run.step.failed',\n ThreadRunStepCancelled = 'thread.run.step.cancelled',\n ThreadRunStepExpired = 'thread.run.step.expired',\n ThreadRunStepDelta = 'thread.run.step.delta',\n ThreadMessageCreated = 'thread.message.created',\n ThreadMessageInProgress = 'thread.message.in_progress',\n ThreadMessageCompleted = 'thread.message.completed',\n ThreadMessageIncomplete = 'thread.message.incomplete',\n ThreadMessageDelta = 'thread.message.delta',\n ErrorEvent = 'error',\n}\n","import { z } from 'zod';\nimport { Tools } from './types/assistants';\nimport type { TMessageContentParts, FunctionTool, FunctionToolCall } from './types/assistants';\nimport type { TFile } from './types/files';\n\nexport const isUUID = z.string().uuid();\n\nexport enum AuthType {\n OVERRIDE_AUTH = 'override_auth',\n USER_PROVIDED = 'user_provided',\n SYSTEM_DEFINED = 'SYSTEM_DEFINED',\n}\n\nexport const authTypeSchema = z.nativeEnum(AuthType);\n\nexport enum EModelEndpoint {\n azureOpenAI = 'azureOpenAI',\n openAI = 'openAI',\n bingAI = 'bingAI',\n chatGPTBrowser = 'chatGPTBrowser',\n google = 'google',\n gptPlugins = 'gptPlugins',\n anthropic = 'anthropic',\n assistants = 'assistants',\n custom = 'custom',\n}\n\nexport enum ImageDetail {\n low = 'low',\n auto = 'auto',\n high = 'high',\n}\n\nexport const imageDetailNumeric = {\n [ImageDetail.low]: 0,\n [ImageDetail.auto]: 1,\n [ImageDetail.high]: 2,\n};\n\nexport const imageDetailValue = {\n 0: ImageDetail.low,\n 1: ImageDetail.auto,\n 2: ImageDetail.high,\n};\n\nexport const eImageDetailSchema = z.nativeEnum(ImageDetail);\n\nexport const defaultAssistantFormValues = {\n assistant: '',\n id: '',\n name: '',\n description: '',\n instructions: '',\n model: '',\n functions: [],\n code_interpreter: false,\n image_vision: false,\n retrieval: false,\n};\n\nexport const ImageVisionTool: FunctionTool = {\n type: Tools.function,\n [Tools.function]: {\n name: 'image_vision',\n description: 'Get detailed text descriptions for all current image attachments.',\n parameters: {\n type: 'object',\n properties: {},\n required: [],\n },\n },\n};\n\nexport const isImageVisionTool = (tool: FunctionTool | FunctionToolCall) =>\n tool.type === 'function' && tool.function?.name === ImageVisionTool?.function?.name;\n\nexport const openAISettings = {\n model: {\n default: 'gpt-4o',\n },\n temperature: {\n min: 0,\n max: 1,\n step: 0.01,\n default: 1,\n },\n top_p: {\n min: 0,\n max: 1,\n step: 0.01,\n default: 1,\n },\n presence_penalty: {\n min: 0,\n max: 2,\n step: 0.01,\n default: 0,\n },\n frequency_penalty: {\n min: 0,\n max: 2,\n step: 0.01,\n default: 0,\n },\n resendFiles: {\n default: true,\n },\n maxContextTokens: {\n default: undefined,\n },\n max_tokens: {\n default: undefined,\n },\n imageDetail: {\n default: ImageDetail.auto,\n },\n};\n\nexport const googleSettings = {\n model: {\n default: 'chat-bison',\n },\n maxOutputTokens: {\n min: 1,\n max: 2048,\n step: 1,\n default: 1024,\n maxGemini: 8192,\n defaultGemini: 8192,\n },\n temperature: {\n min: 0,\n max: 1,\n step: 0.01,\n default: 0.2,\n },\n topP: {\n min: 0,\n max: 1,\n step: 0.01,\n default: 0.8,\n },\n topK: {\n min: 1,\n max: 40,\n step: 0.01,\n default: 40,\n },\n};\n\nexport const endpointSettings = {\n [EModelEndpoint.openAI]: openAISettings,\n [EModelEndpoint.google]: googleSettings,\n};\n\nconst google = endpointSettings[EModelEndpoint.google];\n\nexport const eModelEndpointSchema = z.nativeEnum(EModelEndpoint);\n\nexport const extendedModelEndpointSchema = z.union([eModelEndpointSchema, z.string()]);\n\nexport const tPluginAuthConfigSchema = z.object({\n authField: z.string(),\n label: z.string(),\n description: z.string(),\n});\n\nexport type TPluginAuthConfig = z.infer<typeof tPluginAuthConfigSchema>;\n\nexport const tPluginSchema = z.object({\n name: z.string(),\n pluginKey: z.string(),\n description: z.string(),\n icon: z.string(),\n authConfig: z.array(tPluginAuthConfigSchema),\n authenticated: z.boolean().optional(),\n isButton: z.boolean().optional(),\n});\n\nexport type TPlugin = z.infer<typeof tPluginSchema>;\n\nexport type TInput = {\n inputStr: string;\n};\n\nexport type TResPlugin = {\n plugin: string;\n input: string;\n thought: string;\n loading?: boolean;\n outputs?: string;\n latest?: string;\n inputs?: TInput[];\n};\n\nexport const tExampleSchema = z.object({\n input: z.object({\n content: z.string(),\n }),\n output: z.object({\n content: z.string(),\n }),\n});\n\nexport type TExample = z.infer<typeof tExampleSchema>;\n\nexport enum EAgent {\n functions = 'functions',\n classic = 'classic',\n}\n\nexport const agentOptionSettings = {\n model: {\n default: 'gpt-4o',\n },\n temperature: {\n min: 0,\n max: 1,\n step: 0.01,\n default: 0,\n },\n agent: {\n default: EAgent.functions,\n options: [EAgent.functions, EAgent.classic],\n },\n skipCompletion: {\n default: true,\n },\n};\n\nexport const eAgentOptionsSchema = z.nativeEnum(EAgent);\n\nexport const tAgentOptionsSchema = z.object({\n agent: z.string().default(EAgent.functions),\n skipCompletion: z.boolean().default(agentOptionSettings.skipCompletion.default),\n model: z.string(),\n temperature: z.number().default(agentOptionSettings.temperature.default),\n});\n\nexport const tMessageSchema = z.object({\n messageId: z.string(),\n endpoint: z.string().optional(),\n clientId: z.string().nullable().optional(),\n conversationId: z.string().nullable(),\n parentMessageId: z.string().nullable(),\n responseMessageId: z.string().nullable().optional(),\n overrideParentMessageId: z.string().nullable().optional(),\n bg: z.string().nullable().optional(),\n model: z.string().nullable().optional(),\n title: z.string().nullable().or(z.literal('New Chat')).default('New Chat'),\n sender: z.string(),\n text: z.string(),\n generation: z.string().nullable().optional(),\n isEdited: z.boolean().optional(),\n isCreatedByUser: z.boolean(),\n error: z.boolean(),\n createdAt: z\n .string()\n .optional()\n .default(() => new Date().toISOString()),\n updatedAt: z\n .string()\n .optional()\n .default(() => new Date().toISOString()),\n current: z.boolean().optional(),\n unfinished: z.boolean().optional(),\n searchResult: z.boolean().optional(),\n finish_reason: z.string().optional(),\n /* assistant */\n thread_id: z.string().optional(),\n /* frontend components */\n iconURL: z.string().optional(),\n});\n\nexport type TMessage = z.input<typeof tMessageSchema> & {\n children?: TMessage[];\n plugin?: TResPlugin | null;\n plugins?: TResPlugin[];\n content?: TMessageContentParts[];\n files?: Partial<TFile>[];\n};\n\nexport const coerceNumber = z.union([z.number(), z.string()]).transform((val) => {\n if (typeof val === 'string') {\n return val.trim() === '' ? undefined : parseFloat(val);\n }\n return val;\n});\n\nexport const tConversationSchema = z.object({\n conversationId: z.string().nullable(),\n title: z.string().nullable().or(z.literal('New Chat')).default('New Chat'),\n user: z.string().optional(),\n endpoint: eModelEndpointSchema.nullable(),\n endpointType: eModelEndpointSchema.optional(),\n suggestions: z.array(z.string()).optional(),\n messages: z.array(z.string()).optional(),\n tools: z.union([z.array(tPluginSchema), z.array(z.string())]).optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n systemMessage: z.string().nullable().optional(),\n modelLabel: z.string().nullable().optional(),\n examples: z.array(tExampleSchema).optional(),\n chatGptLabel: z.string().nullable().optional(),\n userLabel: z.string().optional(),\n model: z.string().nullable().optional(),\n promptPrefix: z.string().nullable().optional(),\n temperature: z.number().optional(),\n topP: z.number().optional(),\n topK: z.number().optional(),\n context: z.string().nullable().optional(),\n top_p: z.number().optional(),\n frequency_penalty: z.number().optional(),\n presence_penalty: z.number().optional(),\n jailbreak: z.boolean().optional(),\n jailbreakConversationId: z.string().nullable().optional(),\n conversationSignature: z.string().nullable().optional(),\n parentMessageId: z.string().optional(),\n clientId: z.string().nullable().optional(),\n invocationId: z.number().nullable().optional(),\n toneStyle: z.string().nullable().optional(),\n maxOutputTokens: z.number().optional(),\n agentOptions: tAgentOptionsSchema.nullable().optional(),\n file_ids: z.array(z.string()).optional(),\n maxContextTokens: coerceNumber.optional(),\n max_tokens: coerceNumber.optional(),\n /** @deprecated */\n resendImages: z.boolean().optional(),\n /* vision */\n resendFiles: z.boolean().optional(),\n imageDetail: eImageDetailSchema.optional(),\n /* assistant */\n assistant_id: z.string().optional(),\n instructions: z.string().optional(),\n /** Used to overwrite active conversation settings when saving a Preset */\n presetOverride: z.record(z.unknown()).optional(),\n stop: z.array(z.string()).optional(),\n /* frontend components */\n iconURL: z.string().optional(),\n greeting: z.string().optional(),\n spec: z.string().optional(),\n});\n\nexport const tPresetSchema = tConversationSchema\n .omit({\n conversationId: true,\n createdAt: true,\n updatedAt: true,\n title: true,\n })\n .merge(\n z.object({\n conversationId: z.string().nullable().optional(),\n presetId: z.string().nullable().optional(),\n title: z.string().nullable().optional(),\n defaultPreset: z.boolean().optional(),\n order: z.number().optional(),\n endpoint: extendedModelEndpointSchema.nullable(),\n }),\n );\n\nexport const tConvoUpdateSchema = tConversationSchema.merge(\n z.object({\n endpoint: extendedModelEndpointSchema.nullable(),\n }),\n);\n\nexport const tPresetUpdateSchema = tConversationSchema.merge(\n z.object({\n endpoint: extendedModelEndpointSchema.nullable(),\n }),\n);\n\nexport type TPreset = z.infer<typeof tPresetSchema>;\n\nexport type TSetOption = (\n param: number | string,\n) => (newValue: number | string | boolean | string[] | Partial<TPreset>) => void;\n\nexport type TConversation = z.infer<typeof tConversationSchema> & {\n presetOverride?: Partial<TPreset>;\n};\n\nexport const openAISchema = tConversationSchema\n .pick({\n model: true,\n modelLabel: true,\n chatGptLabel: true,\n promptPrefix: true,\n temperature: true,\n top_p: true,\n presence_penalty: true,\n frequency_penalty: true,\n resendFiles: true,\n imageDetail: true,\n stop: true,\n iconURL: true,\n greeting: true,\n spec: true,\n maxContextTokens: true,\n max_tokens: true,\n })\n .transform((obj) => ({\n ...obj,\n model: obj.model ?? openAISettings.model.default,\n chatGptLabel: obj.modelLabel ?? obj.chatGptLabel ?? null,\n promptPrefix: obj.promptPrefix ?? null,\n temperature: obj.temperature ?? openAISettings.temperature.default,\n top_p: obj.top_p ?? openAISettings.top_p.default,\n presence_penalty: obj.presence_penalty ?? openAISettings.presence_penalty.default,\n frequency_penalty: obj.frequency_penalty ?? openAISettings.frequency_penalty.default,\n resendFiles:\n typeof obj.resendFiles === 'boolean' ? obj.resendFiles : openAISettings.resendFiles.default,\n imageDetail: obj.imageDetail ?? openAISettings.imageDetail.default,\n stop: obj.stop ?? undefined,\n iconURL: obj.iconURL ?? undefined,\n greeting: obj.greeting ?? undefined,\n spec: obj.spec ?? undefined,\n maxContextTokens: obj.maxContextTokens ?? undefined,\n max_tokens: obj.max_tokens ?? undefined,\n }))\n .catch(() => ({\n model: openAISettings.model.default,\n chatGptLabel: null,\n promptPrefix: null,\n temperature: openAISettings.temperature.default,\n top_p: openAISettings.top_p.default,\n presence_penalty: openAISettings.presence_penalty.default,\n frequency_penalty: openAISettings.frequency_penalty.default,\n resendFiles: openAISettings.resendFiles.default,\n imageDetail: openAISettings.imageDetail.default,\n stop: undefined,\n iconURL: undefined,\n greeting: undefined,\n spec: undefined,\n maxContextTokens: undefined,\n max_tokens: undefined,\n }));\n\nexport const googleSchema = tConversationSchema\n .pick({\n model: true,\n modelLabel: true,\n promptPrefix: true,\n examples: true,\n temperature: true,\n maxOutputTokens: true,\n topP: true,\n topK: true,\n iconURL: true,\n greeting: true,\n spec: true,\n maxContextTokens: true,\n })\n .transform((obj) => {\n const isGemini = obj?.model?.toLowerCase()?.includes('gemini');\n\n const maxOutputTokensMax = isGemini\n ? google.maxOutputTokens.maxGemini\n : google.maxOutputTokens.max;\n const maxOutputTokensDefault = isGemini\n ? google.maxOutputTokens.defaultGemini\n : google.maxOutputTokens.default;\n\n let maxOutputTokens = obj.maxOutputTokens ?? maxOutputTokensDefault;\n maxOutputTokens = Math.min(maxOutputTokens, maxOutputTokensMax);\n\n return {\n ...obj,\n model: obj.model ?? google.model.default,\n modelLabel: obj.modelLabel ?? null,\n promptPrefix: obj.promptPrefix ?? null,\n examples: obj.examples ?? [{ input: { content: '' }, output: { content: '' } }],\n temperature: obj.temperature ?? google.temperature.default,\n maxOutputTokens,\n topP: obj.topP ?? google.topP.default,\n topK: obj.topK ?? google.topK.default,\n iconURL: obj.iconURL ?? undefined,\n greeting: obj.greeting ?? undefined,\n spec: obj.spec ?? undefined,\n maxContextTokens: obj.maxContextTokens ?? undefined,\n };\n })\n .catch(() => ({\n model: google.model.default,\n modelLabel: null,\n promptPrefix: null,\n examples: [{ input: { content: '' }, output: { content: '' } }],\n temperature: google.temperature.default,\n maxOutputTokens: google.maxOutputTokens.default,\n topP: google.topP.default,\n topK: google.topK.default,\n iconURL: undefined,\n greeting: undefined,\n spec: undefined,\n maxContextTokens: undefined,\n }));\n\nexport const bingAISchema = tConversationSchema\n .pick({\n jailbreak: true,\n systemMessage: true,\n context: true,\n toneStyle: true,\n jailbreakConversationId: true,\n conversationSignature: true,\n clientId: true,\n invocationId: true,\n })\n .transform((obj) => ({\n ...obj,\n model: '',\n jailbreak: obj.jailbreak ?? false,\n systemMessage: obj.systemMessage ?? null,\n context: obj.context ?? null,\n toneStyle: obj.toneStyle ?? 'creative',\n jailbreakConversationId: obj.jailbreakConversationId ?? null,\n conversationSignature: obj.conversationSignature ?? null,\n clientId: obj.clientId ?? null,\n invocationId: obj.invocationId ?? 1,\n }))\n .catch(() => ({\n model: '',\n jailbreak: false,\n systemMessage: null,\n context: null,\n toneStyle: 'creative',\n jailbreakConversationId: null,\n conversationSignature: null,\n clientId: null,\n invocationId: 1,\n }));\n\nexport const anthropicSchema = tConversationSchema\n .pick({\n model: true,\n modelLabel: true,\n promptPrefix: true,\n temperature: true,\n maxOutputTokens: true,\n topP: true,\n topK: true,\n resendFiles: true,\n iconURL: true,\n greeting: true,\n spec: true,\n maxContextTokens: true,\n })\n .transform((obj) => ({\n ...obj,\n model: obj.model ?? 'claude-1',\n modelLabel: obj.modelLabel ?? null,\n promptPrefix: obj.promptPrefix ?? null,\n temperature: obj.temperature ?? 1,\n maxOutputTokens: obj.maxOutputTokens ?? 4000,\n topP: obj.topP ?? 0.7,\n topK: obj.topK ?? 5,\n resendFiles: typeof obj.resendFiles === 'boolean' ? obj.resendFiles : true,\n iconURL: obj.iconURL ?? undefined,\n greeting: obj.greeting ?? undefined,\n spec: obj.spec ?? undefined,\n maxContextTokens: obj.maxContextTokens ?? undefined,\n }))\n .catch(() => ({\n model: 'claude-1',\n modelLabel: null,\n promptPrefix: null,\n temperature: 1,\n maxOutputTokens: 4000,\n topP: 0.7,\n topK: 5,\n resendFiles: true,\n iconURL: undefined,\n greeting: undefined,\n spec: undefined,\n maxContextTokens: undefined,\n }));\n\nexport const chatGPTBrowserSchema = tConversationSchema\n .pick({\n model: true,\n })\n .transform((obj) => ({\n ...obj,\n model: obj.model ?? 'text-davinci-002-render-sha',\n }))\n .catch(() => ({\n model: 'text-davinci-002-render-sha',\n }));\n\nexport const gptPluginsSchema = tConversationSchema\n .pick({\n model: true,\n modelLabel: true,\n chatGptLabel: true,\n promptPrefix: true,\n temperature: true,\n top_p: true,\n presence_penalty: true,\n frequency_penalty: true,\n tools: true,\n agentOptions: true,\n iconURL: true,\n greeting: true,\n spec: true,\n maxContextTokens: true,\n })\n .transform((obj) => ({\n ...obj,\n model: obj.model ?? 'gpt-3.5-turbo',\n chatGptLabel: obj.modelLabel ?? obj.chatGptLabel ?? null,\n promptPrefix: obj.promptPrefix ?? null,\n temperature: obj.temperature ?? 0.8,\n top_p: obj.top_p ?? 1,\n presence_penalty: obj.presence_penalty ?? 0,\n frequency_penalty: obj.frequency_penalty ?? 0,\n tools: obj.tools ?? [],\n agentOptions: obj.agentOptions ?? {\n agent: EAgent.functions,\n skipCompletion: true,\n model: 'gpt-3.5-turbo',\n temperature: 0,\n },\n iconURL: obj.iconURL ?? undefined,\n greeting: obj.greeting ?? undefined,\n spec: obj.spec ?? undefined,\n maxContextTokens: obj.maxContextTokens ?? undefined,\n }))\n .catch(() => ({\n model: 'gpt-3.5-turbo',\n chatGptLabel: null,\n promptPrefix: null,\n temperature: 0.8,\n top_p: 1,\n presence_penalty: 0,\n frequency_penalty: 0,\n tools: [],\n agentOptions: {\n agent: EAgent.functions,\n skipCompletion: true,\n model: 'gpt-3.5-turbo',\n temperature: 0,\n },\n iconURL: undefined,\n greeting: undefined,\n spec: undefined,\n maxContextTokens: undefined,\n }));\n\nexport function removeNullishValues<T extends object>(obj: T): T {\n const newObj: Partial<T> = { ...obj };\n\n (Object.keys(newObj) as Array<keyof T>).forEach((key) => {\n if (newObj[key] === undefined || newObj[key] === null || newObj[key] === '') {\n delete newObj[key];\n }\n });\n\n return newObj as T;\n}\n\nexport const assistantSchema = tConversationSchema\n .pick({\n model: true,\n assistant_id: true,\n instructions: true,\n promptPrefix: true,\n iconURL: true,\n greeting: true,\n spec: true,\n })\n .transform((obj) => ({\n ...obj,\n model: obj.model ?? openAISettings.model.default,\n assistant_id: obj.assistant_id ?? undefined,\n instructions: obj.instructions ?? undefined,\n promptPrefix: obj.promptPrefix ?? null,\n iconURL: obj.iconURL ?? undefined,\n greeting: obj.greeting ?? undefined,\n spec: obj.spec ?? undefined,\n }))\n .catch(() => ({\n model: openAISettings.model.default,\n assistant_id: undefined,\n instructions: undefined,\n promptPrefix: null,\n iconURL: undefined,\n greeting: undefined,\n spec: undefined,\n }));\n\nexport const compactAssistantSchema = tConversationSchema\n .pick({\n model: true,\n assistant_id: true,\n instructions: true,\n promptPrefix: true,\n iconURL: true,\n greeting: true,\n spec: true,\n })\n // will change after adding temperature\n .transform(removeNullishValues)\n .catch(() => ({}));\n\nexport const compactOpenAISchema = tConversationSchema\n .pick({\n model: true,\n chatGptLabel: true,\n promptPrefix: true,\n temperature: true,\n top_p: true,\n presence_penalty: true,\n frequency_penalty: true,\n resendFiles: true,\n imageDetail: true,\n stop: true,\n iconURL: true,\n greeting: true,\n spec: true,\n maxContextTokens: true,\n max_tokens: true,\n })\n .transform((obj: Partial<TConversation>) => {\n const newObj: Partial<TConversation> = { ...obj };\n if (newObj.temperature === 1) {\n delete newObj.temperature;\n }\n if (newObj.top_p === 1) {\n delete newObj.top_p;\n }\n if (newObj.presence_penalty === 0) {\n delete newObj.presence_penalty;\n }\n if (newObj.frequency_penalty === 0) {\n delete newObj.frequency_penalty;\n }\n if (newObj.resendFiles === true) {\n delete newObj.resendFiles;\n }\n if (newObj.imageDetail === ImageDetail.auto) {\n delete newObj.imageDetail;\n }\n\n return removeNullishValues(newObj);\n })\n .catch(() => ({}));\n\nexport const compactGoogleSchema = tConversationSchema\n .pick({\n model: true,\n modelLabel: true,\n promptPrefix: true,\n examples: true,\n temperature: true,\n maxOutputTokens: true,\n topP: true,\n topK: true,\n iconURL: true,\n greeting: true,\n spec: true,\n maxContextTokens: true,\n })\n .transform((obj) => {\n const newObj: Partial<TConversation> = { ...obj };\n if (newObj.temperature === google.temperature.default) {\n delete newObj.temperature;\n }\n if (newObj.maxOutputTokens === google.maxOutputTokens.default) {\n delete newObj.maxOutputTokens;\n }\n if (newObj.topP === google.topP.default) {\n delete newObj.topP;\n }\n if (newObj.topK === google.topK.default) {\n delete newObj.topK;\n }\n\n return removeNullishValues(newObj);\n })\n .catch(() => ({}));\n\nexport const compactAnthropicSchema = tConversationSchema\n .pick({\n model: true,\n modelLabel: true,\n promptPrefix: true,\n temperature: true,\n maxOutputTokens: true,\n topP: true,\n topK: true,\n resendFiles: true,\n iconURL: true,\n greeting: true,\n spec: true,\n maxContextTokens: true,\n })\n .transform((obj) => {\n const newObj: Partial<TConversation> = { ...obj };\n if (newObj.temperature === 1) {\n delete newObj.temperature;\n }\n if (newObj.maxOutputTokens === 4000) {\n delete newObj.maxOutputTokens;\n }\n if (newObj.topP === 0.7) {\n delete newObj.topP;\n }\n if (newObj.topK === 5) {\n delete newObj.topK;\n }\n if (newObj.resendFiles === true) {\n delete newObj.resendFiles;\n }\n\n return removeNullishValues(newObj);\n })\n .catch(() => ({}));\n\nexport const compactChatGPTSchema = tConversationSchema\n .pick({\n model: true,\n })\n .transform((obj) => {\n const newObj: Partial<TConversation> = { ...obj };\n return removeNullishValues(newObj);\n })\n .catch(() => ({}));\n\nexport const compactPluginsSchema = tConversationSchema\n .pick({\n model: true,\n chatGptLabel: true,\n promptPrefix: true,\n temperature: true,\n top_p: true,\n presence_penalty: true,\n frequency_penalty: true,\n tools: true,\n agentOptions: true,\n iconURL: true,\n greeting: true,\n spec: true,\n maxContextTokens: true,\n })\n .transform((obj) => {\n const newObj: Partial<TConversation> = { ...obj };\n if (newObj.chatGptLabel === null) {\n delete newObj.chatGptLabel;\n }\n if (newObj.promptPrefix === null) {\n delete newObj.promptPrefix;\n }\n if (newObj.temperature === 0.8) {\n delete newObj.temperature;\n }\n if (newObj.top_p === 1) {\n delete newObj.top_p;\n }\n if (newObj.presence_penalty === 0) {\n delete newObj.presence_penalty;\n }\n if (newObj.frequency_penalty === 0) {\n delete newObj.frequency_penalty;\n }\n if (newObj.tools?.length === 0) {\n delete newObj.tools;\n }\n\n if (\n newObj.agentOptions &&\n newObj.agentOptions.agent === EAgent.functions &&\n newObj.agentOptions.skipCompletion === true &&\n newObj.agentOptions.model === 'gpt-3.5-turbo' &&\n newObj.agentOptions.temperature === 0\n ) {\n delete newObj.agentOptions;\n }\n\n return removeNullishValues(newObj);\n })\n .catch(() => ({}));\n","/* eslint-disable max-len */\nimport { z } from 'zod';\nimport { EModelEndpoint } from './schemas';\nimport type { FileConfig, EndpointFileConfig } from './types/files';\n\nexport const supportsFiles = {\n [EModelEndpoint.openAI]: true,\n [EModelEndpoint.google]: true,\n [EModelEndpoint.assistants]: true,\n [EModelEndpoint.azureOpenAI]: true,\n [EModelEndpoint.anthropic]: true,\n [EModelEndpoint.custom]: true,\n};\n\nexport const excelFileTypes = [\n 'application/vnd.ms-excel',\n 'application/msexcel',\n 'application/x-msexcel',\n 'application/x-ms-excel',\n 'application/x-excel',\n 'application/x-dos_ms_excel',\n 'application/xls',\n 'application/x-xls',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n];\n\nexport const fullMimeTypesList = [\n 'text/x-c',\n 'text/x-c++',\n 'application/csv',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'text/html',\n 'text/x-java',\n 'application/json',\n 'text/markdown',\n 'application/pdf',\n 'text/x-php',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'text/x-python',\n 'text/x-script.python',\n 'text/x-ruby',\n 'text/x-tex',\n 'text/plain',\n 'text/css',\n 'image/jpeg',\n 'text/javascript',\n 'image/gif',\n 'image/png',\n 'application/x-tar',\n 'application/typescript',\n 'application/xml',\n 'application/zip',\n ...excelFileTypes,\n];\n\nexport const codeInterpreterMimeTypesList = [\n 'text/x-c',\n 'text/x-c++',\n 'application/csv',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'text/html',\n 'text/x-java',\n 'application/json',\n 'text/markdown',\n 'application/pdf',\n 'text/x-php',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'text/x-python',\n 'text/x-script.python',\n 'text/x-ruby',\n 'text/x-tex',\n 'text/plain',\n 'text/css',\n 'image/jpeg',\n 'text/javascript',\n 'image/gif',\n 'image/png',\n 'application/x-tar',\n 'application/typescript',\n 'application/xml',\n 'application/zip',\n ...excelFileTypes,\n];\n\nexport const retrievalMimeTypesList = [\n 'text/x-c',\n 'text/x-c++',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'text/html',\n 'text/x-java',\n 'application/json',\n 'text/markdown',\n 'application/pdf',\n 'text/x-php',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'text/x-python',\n 'text/x-script.python',\n 'text/x-ruby',\n 'text/x-tex',\n 'text/plain',\n];\n\nexport const imageExtRegex = /\\.(jpg|jpeg|png|gif|webp)$/i;\n\nexport const excelMimeTypes =\n /^application\\/(vnd\\.ms-excel|msexcel|x-msexcel|x-ms-excel|x-excel|x-dos_ms_excel|xls|x-xls|vnd\\.openxmlformats-officedocument\\.spreadsheetml\\.sheet)$/;\n\nexport const textMimeTypes =\n /^(text\\/(x-c|x-c\\+\\+|x-java|html|markdown|x-php|x-python|x-script\\.python|x-ruby|x-tex|plain|css|javascript|csv))$/;\n\nexport const applicationMimeTypes =\n /^(application\\/(epub\\+zip|csv|json|pdf|x-tar|typescript|vnd\\.openxmlformats-officedocument\\.(wordprocessingml\\.document|presentationml\\.presentation|spreadsheetml\\.sheet)|xml|zip))$/;\n\nexport const imageMimeTypes = /^image\\/(jpeg|gif|png|webp)$/;\n\nexport const supportedMimeTypes = [\n textMimeTypes,\n excelMimeTypes,\n applicationMimeTypes,\n imageMimeTypes,\n];\n\nexport const codeInterpreterMimeTypes = [\n textMimeTypes,\n excelMimeTypes,\n applicationMimeTypes,\n imageMimeTypes,\n];\n\nexport const codeTypeMapping: { [key: string]: string } = {\n c: 'text/x-c',\n cs: 'text/x-csharp',\n cpp: 'text/x-c++',\n md: 'text/markdown',\n php: 'text/x-php',\n py: 'text/x-python',\n rb: 'text/x-ruby',\n tex: 'text/x-tex',\n js: 'text/javascript',\n sh: 'application/x-sh',\n ts: 'application/typescript',\n tar: 'application/x-tar',\n zip: 'application/zip',\n};\n\nexport const retrievalMimeTypes = [\n /^(text\\/(x-c|x-c\\+\\+|html|x-java|markdown|x-php|x-python|x-script\\.python|x-ruby|x-tex|plain|xml))$/,\n /^(application\\/(json|pdf|vnd\\.openxmlformats-officedocument\\.(wordprocessingml\\.document|presentationml\\.presentation)))$/,\n];\n\nexport const megabyte = 1024 * 1024;\n/** Helper function to get megabytes value */\nexport const mbToBytes = (mb: number): number => mb * megabyte;\n\nexport const fileConfig = {\n endpoints: {\n [EModelEndpoint.assistants]: {\n fileLimit: 10,\n fileSizeLimit: mbToBytes(512),\n totalSizeLimit: mbToBytes(512),\n supportedMimeTypes,\n disabled: false,\n },\n default: {\n fileLimit: 10,\n fileSizeLimit: mbToBytes(512),\n totalSizeLimit: mbToBytes(512),\n supportedMimeTypes,\n disabled: false,\n },\n },\n serverFileSizeLimit: mbToBytes(512),\n avatarSizeLimit: mbToBytes(2),\n checkType: function (fileType: string, supportedTypes: RegExp[] = supportedMimeTypes) {\n return supportedTypes.some((regex) => regex.test(fileType));\n },\n};\n\nconst supportedMimeTypesSchema = z\n .array(z.any())\n .optional()\n .refine(\n (mimeTypes) => {\n if (!mimeTypes) {\n return true;\n }\n return mimeTypes.every(\n (mimeType) => mimeType instanceof RegExp || typeof mimeType === 'string',\n );\n },\n {\n message: 'Each mimeType must be a string or a RegExp object.',\n },\n );\n\nexport const endpointFileConfigSchema = z.object({\n disabled: z.boolean().optional(),\n fileLimit: z.number().min(0).optional(),\n fileSizeLimit: z.number().min(0).optional(),\n totalSizeLimit: z.number().min(0).optional(),\n supportedMimeTypes: supportedMimeTypesSchema.optional(),\n});\n\nexport const fileConfigSchema = z.object({\n endpoints: z.record(endpointFileConfigSchema).optional(),\n serverFileSizeLimit: z.number().min(0).optional(),\n avatarSizeLimit: z.number().min(0).optional(),\n});\n\n/** Helper function to safely convert string patterns to RegExp objects */\nexport const convertStringsToRegex = (patterns: string[]): RegExp[] =>\n patterns.reduce((acc: RegExp[], pattern) => {\n try {\n const regex = new RegExp(pattern);\n acc.push(regex);\n } catch (error) {\n console.error(`Invalid regex pattern \"${pattern}\" skipped.`);\n }\n return acc;\n }, []);\n\nexport function mergeFileConfig(dynamic: z.infer<typeof fileConfigSchema> | undefined): FileConfig {\n const mergedConfig = fileConfig as FileConfig;\n if (!dynamic) {\n return mergedConfig;\n }\n\n if (dynamic.serverFileSizeLimit !== undefined) {\n mergedConfig.serverFileSizeLimit = mbToBytes(dynamic.serverFileSizeLimit);\n }\n\n if (dynamic.avatarSizeLimit !== undefined) {\n mergedConfig.avatarSizeLimit = mbToBytes(dynamic.avatarSizeLimit);\n }\n\n if (!dynamic.endpoints) {\n return mergedConfig;\n }\n\n for (const key in dynamic.endpoints) {\n const dynamicEndpoint = (dynamic.endpoints as Record<string, EndpointFileConfig>)[key];\n\n if (!mergedConfig.endpoints[key]) {\n mergedConfig.endpoints[key] = {};\n }\n\n const mergedEndpoint = mergedConfig.endpoints[key];\n\n if (dynamicEndpoint.disabled === true) {\n mergedEndpoint.disabled = true;\n mergedEndpoint.fileLimit = 0;\n mergedEndpoint.fileSizeLimit = 0;\n mergedEndpoint.totalSizeLimit = 0;\n mergedEndpoint.supportedMimeTypes = [];\n continue;\n }\n\n if (dynamicEndpoint.fileSizeLimit !== undefined) {\n mergedEndpoint.fileSizeLimit = mbToBytes(dynamicEndpoint.fileSizeLimit);\n }\n\n if (dynamicEndpoint.totalSizeLimit !== undefined) {\n mergedEndpoint.totalSizeLimit = mbToBytes(dynamicEndpoint.totalSizeLimit);\n }\n\n const configKeys = ['fileLimit'] as const;\n configKeys.forEach((field) => {\n if (dynamicEndpoint[field] !== undefined) {\n mergedEndpoint[field] = dynamicEndpoint[field];\n }\n });\n\n if (dynamicEndpoint.supportedMimeTypes) {\n mergedEndpoint.supportedMimeTypes = convertStringsToRegex(\n dynamicEndpoint.supportedMimeTypes as unknown as string[],\n );\n }\n }\n\n return mergedConfig;\n}\n","import { z } from 'zod';\nimport type { TPreset } from './schemas';\nimport {\n EModelEndpoint,\n tPresetSchema,\n eModelEndpointSchema,\n AuthType,\n authTypeSchema,\n} from './schemas';\n\nexport type TModelSpec = {\n name: string;\n label: string;\n preset: TPreset;\n order?: number;\n default?: boolean;\n description?: string;\n showIconInMenu?: boolean;\n showIconInHeader?: boolean;\n iconURL?: string | EModelEndpoint; // Allow using project-included icons\n authType?: AuthType;\n};\n\nexport const tModelSpecSchema = z.object({\n name: z.string(),\n label: z.string(),\n preset: tPresetSchema,\n order: z.number().optional(),\n default: z.boolean().optional(),\n description: z.string().optional(),\n showIconInMenu: z.boolean().optional(),\n showIconInHeader: z.boolean().optional(),\n iconURL: z.union([z.string(), eModelEndpointSchema]).optional(),\n authType: authTypeSchema.optional(),\n});\n\nexport const specsConfigSchema = z.object({\n enforce: z.boolean().default(false),\n prioritize: z.boolean().default(true),\n list: z.array(tModelSpecSchema).optional(),\n});\n\nexport type TSpecsConfig = z.infer<typeof specsConfigSchema>;\n","export enum FileSources {\n local = 'local',\n firebase = 'firebase',\n openai = 'openai',\n s3 = 's3',\n vectordb = 'vectordb',\n}\n\nexport enum FileContext {\n avatar = 'avatar',\n unknown = 'unknown',\n assistants = 'assistants',\n image_generation = 'image_generation',\n assistants_output = 'assistants_output',\n message_attachment = 'message_attachment',\n filename = 'filename',\n updatedAt = 'updatedAt',\n source = 'source',\n context = 'context',\n bytes = 'bytes',\n}\n\nexport type EndpointFileConfig = {\n disabled?: boolean;\n fileLimit?: number;\n fileSizeLimit?: number;\n totalSizeLimit?: number;\n supportedMimeTypes?: RegExp[];\n};\n\nexport type FileConfig = {\n endpoints: {\n [key: string]: EndpointFileConfig;\n };\n serverFileSizeLimit?: number;\n avatarSizeLimit?: number;\n checkType?: (fileType: string, supportedTypes: RegExp[]) => boolean;\n};\n\nexport type TFile = {\n _id?: string;\n __v?: number;\n user: string;\n conversationId?: string;\n message?: string;\n file_id: string;\n temp_file_id?: string;\n bytes: number;\n embedded: boolean;\n filename: string;\n filepath: string;\n object: 'file';\n type: string;\n usage: number;\n context?: FileContext;\n source?: FileSources;\n width?: number;\n height?: number;\n expiresAt?: string | Date;\n preview?: string;\n createdAt?: string | Date;\n updatedAt?: string | Date;\n};\n\nexport type TFileUpload = TFile & {\n temp_file_id: string;\n};\n\nexport type AvatarUploadResponse = {\n url: string;\n};\n\nexport type UploadMutationOptions = {\n onSuccess?: (data: TFileUpload, variables: FormData, context?: unknown) => void;\n onMutate?: (variables: FormData) => void | Promise<unknown>;\n onError?: (error: unknown, variables: FormData, context?: unknown) => void;\n};\n\nexport type UploadAvatarOptions = {\n onSuccess?: (data: AvatarUploadResponse, variables: FormData, context?: unknown) => void;\n onMutate?: (variables: FormData) => void | Promise<unknown>;\n onError?: (error: unknown, variables: FormData, context?: unknown) => void;\n};\n\nexport type DeleteFilesResponse = {\n message: string;\n result: Record<string, unknown>;\n};\n\nexport type BatchFile = {\n file_id: string;\n filepath: string;\n embedded: boolean;\n source: FileSources;\n};\n\nexport type DeleteFilesBody = {\n files: BatchFile[];\n assistant_id?: string;\n};\n\nexport type DeleteMutationOptions = {\n onSuccess?: (data: DeleteFilesResponse, variables: DeleteFilesBody, context?: unknown) => void;\n onMutate?: (variables: DeleteFilesBody) => void | Promise<unknown>;\n onError?: (error: unknown, variables: DeleteFilesBody, context?: unknown) => void;\n};\n","/* eslint-disable max-len */\nimport { z } from 'zod';\nimport type { ZodError } from 'zod';\nimport { EModelEndpoint, eModelEndpointSchema } from './schemas';\nimport { fileConfigSchema } from './file-config';\nimport { specsConfigSchema } from './models';\nimport { FileSources } from './types/files';\nimport { TModelsConfig } from './types';\n\nexport const defaultSocialLogins = ['google', 'facebook', 'openid', 'github', 'discord'];\n\nexport const defaultRetrievalModels = [\n 'gpt-4-turbo-preview',\n 'gpt-3.5-turbo-0125',\n 'gpt-4-0125-preview',\n 'gpt-4-1106-preview',\n 'gpt-3.5-turbo-1106',\n 'gpt-3.5-turbo-0125',\n 'gpt-4-turbo',\n 'gpt-4-0125',\n 'gpt-4-1106',\n];\n\nexport enum SettingsViews {\n default = 'default',\n advanced = 'advanced',\n}\n\nexport const fileSourceSchema = z.nativeEnum(FileSources);\n\n// Helper type to extract the shape of the Zod object schema\ntype SchemaShape<T> = T extends z.ZodObject<infer U> ? U : never;\n\n// Helper type to determine the default value or undefined based on whether the field has a default\ntype DefaultValue<T> = T extends z.ZodDefault<z.ZodTypeAny>\n ? ReturnType<T['_def']['defaultValue']>\n : undefined;\n\n// Extract default values or undefined from the schema shape\ntype ExtractDefaults<T> = {\n [P in keyof T]: DefaultValue<T[P]>;\n};\n\nexport type SchemaDefaults<T> = ExtractDefaults<SchemaShape<T>>;\n\nexport type TConfigDefaults = SchemaDefaults<typeof configSchema>;\n\nexport function getSchemaDefaults<Schema extends z.AnyZodObject>(\n schema: Schema,\n): ExtractDefaults<SchemaShape<Schema>> {\n const shape = schema.shape;\n const entries = Object.entries(shape).map(([key, value]) => {\n if (value instanceof z.ZodDefault) {\n // Extract default value if it exists\n return [key, value._def.defaultValue()];\n }\n return [key, undefined];\n });\n\n // Create the object with the right types\n return Object.fromEntries(entries) as ExtractDefaults<SchemaShape<Schema>>;\n}\n\nexport const modelConfigSchema = z\n .object({\n deploymentName: z.string().optional(),\n version: z.string().optional(),\n assistants: z.boolean().optional(),\n })\n .or(z.boolean());\n\nexport type TAzureModelConfig = z.infer<typeof modelConfigSchema>;\n\nexport const azureBaseSchema = z.object({\n apiKey: z.string(),\n serverless: z.boolean().optional(),\n instanceName: z.string().optional(),\n deploymentName: z.string().optional(),\n assistants: z.boolean().optional(),\n addParams: z.record(z.any()).optional(),\n dropParams: z.array(z.string()).optional(),\n forcePrompt: z.boolean().optional(),\n version: z.string().optional(),\n baseURL: z.string().optional(),\n additionalHeaders: z.record(z.any()).optional(),\n});\n\nexport type TAzureBaseSchema = z.infer<typeof azureBaseSchema>;\n\nexport const azureGroupSchema = z\n .object({\n group: z.string(),\n models: z.record(z.string(), modelConfigSchema),\n })\n .required()\n .and(azureBaseSchema);\n\nexport const azureGroupConfigsSchema = z.array(azureGroupSchema).min(1);\nexport type TAzureGroup = z.infer<typeof azureGroupSchema>;\nexport type TAzureGroups = z.infer<typeof azureGroupConfigsSchema>;\nexport type TAzureModelMapSchema = {\n // deploymentName?: string;\n // version?: string;\n group: string;\n};\n\nexport type TAzureModelGroupMap = Record<string, TAzureModelMapSchema>;\nexport type TAzureGroupMap = Record<\n string,\n TAzureBaseSchema & { models: Record<string, TAzureModelConfig> }\n>;\n\nexport type TValidatedAzureConfig = {\n modelNames: string[];\n modelGroupMap: TAzureModelGroupMap;\n groupMap: TAzureGroupMap;\n};\n\nexport type TAzureConfigValidationResult = TValidatedAzureConfig & {\n isValid: boolean;\n errors: (ZodError | string)[];\n};\n\nexport enum Capabilities {\n code_interpreter = 'code_interpreter',\n image_vision = 'image_vision',\n retrieval = 'retrieval',\n actions = 'actions',\n tools = 'tools',\n}\n\nexport const assistantEndpointSchema = z.object({\n /* assistants specific */\n disableBuilder: z.boolean().optional(),\n pollIntervalMs: z.number().optional(),\n timeoutMs: z.number().optional(),\n supportedIds: z.array(z.string()).min(1).optional(),\n excludedIds: z.array(z.string()).min(1).optional(),\n retrievalModels: z.array(z.string()).min(1).optional().default(defaultRetrievalModels),\n capabilities: z\n .array(z.nativeEnum(Capabilities))\n .optional()\n .default([\n Capabilities.code_interpreter,\n Capabilities.image_vision,\n Capabilities.retrieval,\n Capabilities.actions,\n Capabilities.tools,\n ]),\n /* general */\n apiKey: z.string().optional(),\n baseURL: z.string().optional(),\n models: z\n .object({\n default: z.array(z.string()).min(1),\n fetch: z.boolean().optional(),\n userIdQuery: z.boolean().optional(),\n })\n .optional(),\n titleConvo: z.boolean().optional(),\n titleMethod: z.union([z.literal('completion'), z.literal('functions')]).optional(),\n titleModel: z.string().optional(),\n headers: z.record(z.any()).optional(),\n});\n\nexport type TAssistantEndpoint = z.infer<typeof assistantEndpointSchema>;\n\nexport const endpointSchema = z.object({\n name: z.string().refine((value) => !eModelEndpointSchema.safeParse(value).success, {\n message: `Value cannot be one of the default endpoint (EModelEndpoint) values: ${Object.values(\n EModelEndpoint,\n ).join(', ')}`,\n }),\n apiKey: z.string(),\n baseURL: z.string(),\n models: z.object({\n default: z.array(z.string()).min(1),\n fetch: z.boolean().optional(),\n userIdQuery: z.boolean().optional(),\n }),\n titleConvo: z.boolean().optional(),\n titleMethod: z.union([z.literal('completion'), z.literal('functions')]).optional(),\n titleModel: z.string().optional(),\n summarize: z.boolean().optional(),\n summaryModel: z.string().optional(),\n forcePrompt: z.boolean().optional(),\n modelDisplayLabel: z.string().optional(),\n headers: z.record(z.any()).optional(),\n addParams: z.record(z.any()).optional(),\n dropParams: z.array(z.string()).optional(),\n customOrder: z.number().optional(),\n});\n\nexport type TEndpoint = z.infer<typeof endpointSchema>;\n\nexport const azureEndpointSchema = z\n .object({\n groups: azureGroupConfigsSchema,\n plugins: z.boolean().optional(),\n assistants: z.boolean().optional(),\n })\n .and(\n endpointSchema\n .pick({\n titleConvo: true,\n titleMethod: true,\n titleModel: true,\n summarize: true,\n summaryModel: true,\n customOrder: true,\n })\n .partial(),\n );\n\nexport type TAzureConfig = Omit<z.infer<typeof azureEndpointSchema>, 'groups'> &\n TAzureConfigValidationResult;\n\nexport const rateLimitSchema = z.object({\n fileUploads: z\n .object({\n ipMax: z.number().optional(),\n ipWindowInMinutes: z.number().optional(),\n userMax: z.number().optional(),\n userWindowInMinutes: z.number().optional(),\n })\n .optional(),\n conversationsImport: z\n .object({\n ipMax: z.number().optional(),\n ipWindowInMinutes: z.number().optional(),\n userMax: z.number().optional(),\n userWindowInMinutes: z.number().optional(),\n })\n .optional(),\n});\n\nexport enum EImageOutputType {\n PNG = 'png',\n WEBP = 'webp',\n JPEG = 'jpeg',\n}\n\nexport const configSchema = z.object({\n version: z.string(),\n cache: z.boolean().default(true),\n secureImageLinks: z.boolean().optional(),\n imageOutputType: z.nativeEnum(EImageOutputType).default(EImageOutputType.PNG),\n includedTools: z.array(z.string()).optional(),\n filteredTools: z.array(z.string()).optional(),\n interface: z\n .object({\n privacyPolicy: z\n .object({\n externalUrl: z.string().optional(),\n openNewTab: z.boolean().optional(),\n })\n .optional(),\n termsOfService: z\n .object({\n externalUrl: z.string().optional(),\n openNewTab: z.boolean().optional(),\n })\n .optional(),\n endpointsMenu: z.boolean().optional(),\n modelSelect: z.boolean().optional(),\n parameters: z.boolean().optional(),\n sidePanel: z.boolean().optional(),\n presets: z.boolean().optional(),\n })\n .default({\n endpointsMenu: true,\n modelSelect: true,\n parameters: true,\n sidePanel: true,\n presets: true,\n }),\n fileStrategy: fileSourceSchema.default(FileSources.local),\n registration: z\n .object({\n socialLogins: z.array(z.string()).optional(),\n allowedDomains: z.array(z.string()).optional(),\n })\n .default({ socialLogins: defaultSocialLogins }),\n rateLimits: rateLimitSchema.optional(),\n fileConfig: fileConfigSchema.optional(),\n modelSpecs: specsConfigSchema.optional(),\n endpoints: z\n .object({\n [EModelEndpoint.azureOpenAI]: azureEndpointSchema.optional(),\n [EModelEndpoint.assistants]: assistantEndpointSchema.optional(),\n custom: z.array(endpointSchema.partial()).optional(),\n })\n .strict()\n .refine((data) => Object.keys(data).length > 0, {\n message: 'At least one `endpoints` field must be provided.',\n })\n .optional(),\n});\n\nexport const getConfigDefaults = () => getSchemaDefaults(configSchema);\n\nexport type TCustomConfig = z.infer<typeof configSchema>;\n\nexport enum KnownEndpoints {\n anyscale = 'anyscale',\n apipie = 'apipie',\n cohere = 'cohere',\n fireworks = 'fireworks',\n groq = 'groq',\n huggingface = 'huggingface',\n mistral = 'mistral',\n mlx = 'mlx',\n ollama = 'ollama',\n openrouter = 'openrouter',\n perplexity = 'perplexity',\n shuttleai = 'shuttleai',\n 'together.ai' = 'together.ai',\n}\n\nexport enum FetchTokenConfig {\n openrouter = KnownEndpoints.openrouter,\n}\n\nexport const defaultEndpoints: EModelEndpoint[] = [\n EModelEndpoint.openAI,\n EModelEndpoint.assistants,\n EModelEndpoint.azureOpenAI,\n EModelEndpoint.bingAI,\n EModelEndpoint.chatGPTBrowser,\n EModelEndpoint.gptPlugins,\n EModelEndpoint.google,\n EModelEndpoint.anthropic,\n EModelEndpoint.custom,\n];\n\nexport const alternateName = {\n [EModelEndpoint.openAI]: 'OpenAI',\n [EModelEndpoint.assistants]: 'Assistants',\n [EModelEndpoint.azureOpenAI]: 'Azure OpenAI',\n [EModelEndpoint.bingAI]: 'Bing',\n [EModelEndpoint.chatGPTBrowser]: 'ChatGPT',\n [EModelEndpoint.gptPlugins]: 'Plugins',\n [EModelEndpoint.google]: 'Google',\n [EModelEndpoint.anthropic]: 'Anthropic',\n [EModelEndpoint.custom]: 'Custom',\n};\n\nexport const defaultModels = {\n [EModelEndpoint.assistants]: [\n 'gpt-3.5-turbo',\n 'gpt-3.5-turbo-0125',\n 'gpt-4-turbo',\n 'gpt-4-turbo-2024-04-09',\n 'gpt-4-0125-preview',\n 'gpt-4-turbo-preview',\n 'gpt-4-1106-preview',\n 'gpt-3.5-turbo-1106',\n 'gpt-3.5-turbo-16k-0613',\n 'gpt-3.5-turbo-16k',\n 'gpt-4',\n 'gpt-4-0314',\n 'gpt-4-32k-0314',\n 'gpt-4-0613',\n 'gpt-3.5-turbo-0613',\n ],\n [EModelEndpoint.google]: [\n 'gemini-pro',\n 'gemini-pro-vision',\n 'chat-bison',\n 'chat-bison-32k',\n 'codechat-bison',\n 'codechat-bison-32k',\n 'text-bison',\n 'text-bison-32k',\n 'text-unicorn',\n 'code-gecko',\n 'code-bison',\n 'code-bison-32k',\n ],\n [EModelEndpoint.anthropic]: [\n 'claude-3-opus-20240229',\n 'claude-3-sonnet-20240229',\n 'claude-3-haiku-20240307',\n 'claude-2.1',\n 'claude-2',\n 'claude-1.2',\n 'claude-1',\n 'claude-1-100k',\n 'claude-instant-1',\n 'claude-instant-1-100k',\n ],\n [EModelEndpoint.openAI]: [\n 'gpt-4o',\n 'gpt-3.5-turbo-0125',\n 'gpt-4-turbo',\n 'gpt-4-turbo-2024-04-09',\n 'gpt-3.5-turbo-16k-0613',\n 'gpt-3.5-turbo-16k',\n 'gpt-4-turbo-preview',\n 'gpt-4-0125-preview',\n 'gpt-4-1106-preview',\n 'gpt-3.5-turbo',\n 'gpt-3.5-turbo-1106',\n 'gpt-4-vision-preview',\n 'gpt-4',\n 'gpt-3.5-turbo-instruct-0914',\n 'gpt-3.5-turbo-0613',\n 'gpt-3.5-turbo-0301',\n 'gpt-3.5-turbo-instruct',\n 'gpt-4-0613',\n 'text-davinci-003',\n 'gpt-4-0314',\n ],\n};\n\nconst fitlerAssistantModels = (str: string) => {\n return /gpt-4|gpt-3\\\\.5/i.test(str) && !/vision|instruct/i.test(str);\n};\n\nconst openAIModels = defaultModels[EModelEndpoint.openAI];\n\nexport const initialModelsConfig: TModelsConfig = {\n initial: [],\n [EModelEndpoint.openAI]: openAIModels,\n [EModelEndpoint.assistants]: openAIModels.filter(fitlerAssistantModels),\n [EModelEndpoint.gptPlugins]: openAIModels,\n [EModelEndpoint.azureOpenAI]: openAIModels,\n [EModelEndpoint.bingAI]: ['BingAI', 'Sydney'],\n [EModelEndpoint.chatGPTBrowser]: ['text-davinci-002-render-sha'],\n [EModelEndpoint.google]: defaultModels[EModelEndpoint.google],\n [EModelEndpoint.anthropic]: defaultModels[EModelEndpoint.anthropic],\n};\n\nexport const EndpointURLs: { [key in EModelEndpoint]: string } = {\n [EModelEndpoint.openAI]: `/api/ask/${EModelEndpoint.openAI}`,\n [EModelEndpoint.bingAI]: `/api/ask/${EModelEndpoint.bingAI}`,\n [EModelEndpoint.google]: `/api/ask/${EModelEndpoint.google}`,\n [EModelEndpoint.custom]: `/api/ask/${EModelEndpoint.custom}`,\n [EModelEndpoint.anthropic]: `/api/ask/${EModelEndpoint.anthropic}`,\n [EModelEndpoint.gptPlugins]: `/api/ask/${EModelEndpoint.gptPlugins}`,\n [EModelEndpoint.azureOpenAI]: `/api/ask/${EModelEndpoint.azureOpenAI}`,\n [EModelEndpoint.chatGPTBrowser]: `/api/ask/${EModelEndpoint.chatGPTBrowser}`,\n [EModelEndpoint.assistants]: '/api/assistants/chat',\n};\n\nexport const modularEndpoints = new Set<EModelEndpoint | string>([\n EModelEndpoint.gptPlugins,\n EModelEndpoint.anthropic,\n EModelEndpoint.google,\n EModelEndpoint.openAI,\n EModelEndpoint.azureOpenAI,\n EModelEndpoint.custom,\n]);\n\nexport const supportsBalanceCheck = {\n [EModelEndpoint.custom]: true,\n [EModelEndpoint.openAI]: true,\n [EModelEndpoint.anthropic]: true,\n [EModelEndpoint.gptPlugins]: true,\n [EModelEndpoint.assistants]: true,\n [EModelEndpoint.azureOpenAI]: true,\n};\n\nexport const visionModels = [\n 'gpt-4o',\n 'gpt-4-turbo',\n 'gpt-4-vision',\n 'llava',\n 'llava-13b',\n 'gemini-pro-vision',\n 'claude-3',\n 'gemini-1.5',\n];\nexport enum VisionModes {\n generative = 'generative',\n}\n\nexport function validateVisionModel({\n model,\n additionalModels = [],\n availableModels,\n}: {\n model: string;\n additionalModels?: string[];\n availableModels?: string[];\n}) {\n if (!model) {\n return false;\n }\n\n if (model === 'gpt-4-turbo-preview') {\n return false;\n }\n\n if (availableModels && !availableModels.includes(model)) {\n return false;\n }\n\n return visionModels.concat(additionalModels).some((visionModel) => model.includes(visionModel));\n}\n\nexport const imageGenTools = new Set(['dalle', 'dall-e', 'stable-diffusion']);\n\n/**\n * Enum for cache keys.\n */\nexport enum CacheKeys {\n /**\n * Key for the config store namespace.\n */\n CONFIG_STORE = 'configStore',\n /**\n * Key for the plugins cache.\n */\n PLUGINS = 'plugins',\n /**\n * Key for the title generation cache.\n */\n GEN_TITLE = 'genTitle',\n /**\n /**\n * Key for the tools cache.\n */\n TOOLS = 'tools',\n /**\n * Key for the model config cache.\n */\n MODELS_CONFIG = 'modelsConfig',\n /**\n * Key for the model queries cache.\n */\n MODEL_QUERIES = 'modelQueries',\n /**\n * Key for the default endpoint config cache.\n */\n ENDPOINT_CONFIG = 'endpointsConfig',\n /**\n * Key for accessing the model token config cache.\n */\n TOKEN_CONFIG = 'tokenConfig',\n /**\n * Key for the custom config cache.\n */\n CUSTOM_CONFIG = 'customConfig',\n /**\n * Key for accessing Abort Keys\n */\n ABORT_KEYS = 'abortKeys',\n /**\n * Key for the override config cache.\n */\n OVERRIDE_CONFIG = 'overrideConfig',\n /**\n * Key for the bans cache.\n */\n BANS = 'bans',\n /**\n * Key for the encoded domains cache.\n * Used by Azure OpenAI Assistants.\n */\n ENCODED_DOMAINS = 'encoded_domains',\n}\n\n/**\n * Enum for violation types, used to identify, log, and cache violations.\n */\nexport enum ViolationTypes {\n /**\n * File Upload Violations (exceeding limit).\n */\n FILE_UPLOAD_LIMIT = 'file_upload_limit',\n /**\n * Illegal Model Request (not available).\n */\n ILLEGAL_MODEL_REQUEST = 'illegal_model_request',\n /**\n * Token Limit Violation.\n */\n TOKEN_BALANCE = 'token_balance',\n /**\n * An issued ban.\n */\n BAN = 'ban',\n}\n\n/**\n * Enum for error message types that are not \"violations\" as above, used to identify client-facing errors.\n */\nexport enum ErrorTypes {\n /**\n * No User-provided Key.\n */\n NO_USER_KEY = 'no_user_key',\n /**\n * Expired User-provided Key.\n */\n EXPIRED_USER_KEY = 'expired_user_key',\n /**\n * Invalid User-provided Key.\n */\n INVALID_USER_KEY = 'invalid_user_key',\n /**\n * No Base URL Provided.\n */\n NO_BASE_URL = 'no_base_url',\n /**\n * Moderation error\n */\n MODERATION = 'moderation',\n}\n\n/**\n * Enum for authentication keys.\n */\nexport enum AuthKeys {\n /**\n * Key for the Service Account to use Vertex AI.\n */\n GOOGLE_SERVICE_KEY = 'GOOGLE_SERVICE_KEY',\n /**\n * API key to use Google Generative AI.\n *\n * Note: this is not for Environment Variables, but to access encrypted object values.\n */\n GOOGLE_API_KEY = 'GOOGLE_API_KEY',\n}\n\n/**\n * Enum for Image Detail Cost.\n *\n * **Low Res Fixed Cost:** `85`\n *\n * **High Res Calculation:**\n *\n * Number of `512px` Tiles * `170` + `85` (Additional Cost)\n */\nexport enum ImageDetailCost {\n /**\n * Low resolution is a fixed value.\n */\n LOW = 85,\n /**\n * High resolution Cost Per Tile\n */\n HIGH = 170,\n /**\n * Additional Cost added to High Resolution Total Cost\n */\n ADDITIONAL = 85,\n}\n\n/**\n * Tab values for Settings Dialog\n */\nexport enum SettingsTabValues {\n /**\n * Tab for General Settings\n */\n GENERAL = 'general',\n /**\n * Tab for Messages Settings\n */\n MESSAGES = 'messages',\n /**\n * Tab for Beta Features\n */\n BETA = 'beta',\n /**\n * Tab for Data Controls\n */\n DATA = 'data',\n /**\n * Tab for Account Settings\n */\n ACCOUNT = 'account',\n}\n\n/** Enum for app-wide constants */\nexport enum Constants {\n /** Key for the app's version. */\n VERSION = 'v0.7.2',\n /** Key for the Custom Config's version (librechat.yaml). */\n CONFIG_VERSION = '1.1.0',\n /** Standard value for the first message's `parentMessageId` value, to indicate no parent exists. */\n NO_PARENT = '00000000-0000-0000-0000-000000000000',\n /** Fixed, encoded domain length for Azure OpenAI Assistants Function name parsing. */\n ENCODED_DOMAIN_LENGTH = 10,\n /** Identifier for using current_model in multi-model requests. */\n CURRENT_MODEL = 'current_model',\n}\n\nexport enum LocalStorageKeys {\n /** Key for the admin defined App Title */\n APP_TITLE = 'appTitle',\n /** Key for the last conversation setup. */\n LAST_CONVO_SETUP = 'lastConversationSetup',\n /** Key for the last BingAI Settings */\n LAST_BING = 'lastBingSettings',\n /** Key for the last selected model. */\n LAST_MODEL = 'lastSelectedModel',\n /** Key for the last selected tools. */\n LAST_TOOLS = 'lastSelectedTools',\n /** Key for the last selected spec by name*/\n LAST_SPEC = 'lastSelectedSpec',\n /** Key for temporary files to delete */\n FILES_TO_DELETE = 'filesToDelete',\n /** Prefix key for the last selected assistant ID by index */\n ASST_ID_PREFIX = 'assistant_id__',\n /** Key for the last selected fork setting */\n FORK_SETTING = 'forkSetting',\n /** Key for remembering the last selected option, instead of manually selecting */\n REMEMBER_FORK_OPTION = 'rememberForkOption',\n /** Key for remembering the split at target fork option modifier */\n FORK_SPLIT_AT_TARGET = 'splitAtTarget',\n}\n\nexport enum ForkOptions {\n /** Key for direct path option */\n DIRECT_PATH = 'directPath',\n /** Key for including branches */\n INCLUDE_BRANCHES = 'includeBranches',\n /** Key for target level fork (default) */\n TARGET_LEVEL = '',\n}\n\n/**\n * Enum for Cohere related constants\n */\nexport enum CohereConstants {\n /**\n * Cohere API Endpoint, for special handling\n */\n API_URL = 'https://api.cohere.ai/v1',\n /**\n * Role for \"USER\" messages\n */\n ROLE_USER = 'USER',\n /**\n * Role for \"SYSTEM\" messages\n */\n ROLE_SYSTEM = 'SYSTEM',\n /**\n * Role for \"CHATBOT\" messages\n */\n ROLE_CHATBOT = 'CHATBOT',\n /**\n * Title message as required by Cohere\n */\n TITLE_MESSAGE = 'TITLE:',\n}\n","import type { ZodIssue } from 'zod';\nimport type { TConversation, TPreset } from './schemas';\nimport type { TConfig, TEndpointOption, TEndpointsConfig } from './types';\nimport {\n EModelEndpoint,\n openAISchema,\n googleSchema,\n bingAISchema,\n anthropicSchema,\n chatGPTBrowserSchema,\n gptPluginsSchema,\n assistantSchema,\n compactOpenAISchema,\n compactGoogleSchema,\n compactAnthropicSchema,\n compactChatGPTSchema,\n compactPluginsSchema,\n compactAssistantSchema,\n} from './schemas';\nimport { alternateName } from './config';\n\ntype EndpointSchema =\n | typeof openAISchema\n | typeof googleSchema\n | typeof bingAISchema\n | typeof anthropicSchema\n | typeof chatGPTBrowserSchema\n | typeof gptPluginsSchema\n | typeof assistantSchema;\n\nconst endpointSchemas: Record<EModelEndpoint, EndpointSchema> = {\n [EModelEndpoint.openAI]: openAISchema,\n [EModelEndpoint.azureOpenAI]: openAISchema,\n [EModelEndpoint.custom]: openAISchema,\n [EModelEndpoint.google]: googleSchema,\n [EModelEndpoint.bingAI]: bingAISchema,\n [EModelEndpoint.anthropic]: anthropicSchema,\n [EModelEndpoint.chatGPTBrowser]: chatGPTBrowserSchema,\n [EModelEndpoint.gptPlugins]: gptPluginsSchema,\n [EModelEndpoint.assistants]: assistantSchema,\n};\n\n// const schemaCreators: Record<EModelEndpoint, (customSchema: DefaultSchemaValues) => EndpointSchema> = {\n// [EModelEndpoint.google]: createGoogleSchema,\n// };\n\n/** Get the enabled endpoints from the `ENDPOINTS` environment variable */\nexport function getEnabledEndpoints() {\n const defaultEndpoints: string[] = [\n EModelEndpoint.openAI,\n EModelEndpoint.assistants,\n EModelEndpoint.azureOpenAI,\n EModelEndpoint.google,\n EModelEndpoint.bingAI,\n EModelEndpoint.chatGPTBrowser,\n EModelEndpoint.gptPlugins,\n EModelEndpoint.anthropic,\n ];\n\n const endpointsEnv = process.env.ENDPOINTS || '';\n let enabledEndpoints = defaultEndpoints;\n if (endpointsEnv) {\n enabledEndpoints = endpointsEnv\n .split(',')\n .filter((endpoint) => endpoint?.trim())\n .map((endpoint) => endpoint.trim());\n }\n return enabledEndpoints;\n}\n\n/** Orders an existing EndpointsConfig object based on enabled endpoint/custom ordering */\nexport function orderEndpointsConfig(endpointsConfig: TEndpointsConfig) {\n if (!endpointsConfig) {\n return {};\n }\n const enabledEndpoints = getEnabledEndpoints();\n const endpointKeys = Object.keys(endpointsConfig);\n const defaultCustomIndex = enabledEndpoints.indexOf(EModelEndpoint.custom);\n return endpointKeys.reduce(\n (accumulatedConfig: Record<string, TConfig | null | undefined>, currentEndpointKey) => {\n const isCustom = !(currentEndpointKey in EModelEndpoint);\n const isEnabled = enabledEndpoints.includes(currentEndpointKey);\n if (!isEnabled && !isCustom) {\n return accumulatedConfig;\n }\n\n const index = enabledEndpoints.indexOf(currentEndpointKey);\n\n if (isCustom) {\n accumulatedConfig[currentEndpointKey] = {\n order: defaultCustomIndex >= 0 ? defaultCustomIndex : 9999,\n ...(endpointsConfig[currentEndpointKey] as Omit<TConfig, 'order'> & { order?: number }),\n };\n } else if (endpointsConfig[currentEndpointKey]) {\n accumulatedConfig[currentEndpointKey] = {\n ...endpointsConfig[currentEndpointKey],\n order: index,\n };\n }\n return accumulatedConfig;\n },\n {},\n );\n}\n\n/** Converts an array of Zod issues into a string. */\nexport function errorsToString(errors: ZodIssue[]) {\n return errors\n .map((error) => {\n const field = error.path.join('.');\n const message = error.message;\n\n return `${field}: ${message}`;\n })\n .join(' ');\n}\n\nexport const envVarRegex = /^\\${(.+)}$/;\n\n/** Extracts the value of an environment variable from a string. */\nexport function extractEnvVariable(value: string) {\n const envVarMatch = value.match(envVarRegex);\n if (envVarMatch) {\n return process.env[envVarMatch[1]] || value;\n }\n return value;\n}\n\n/** Resolves header values to env variables if detected */\nexport function resolveHeaders(headers: Record<string, string> | undefined) {\n const resolvedHeaders = { ...(headers ?? {}) };\n\n if (headers && typeof headers === 'object' && !Array.isArray(headers)) {\n Object.keys(headers).forEach((key) => {\n resolvedHeaders[key] = extractEnvVariable(headers[key]);\n });\n }\n\n return resolvedHeaders;\n}\n\nexport function getFirstDefinedValue(possibleValues: string[]) {\n let returnValue;\n for (const value of possibleValues) {\n if (value) {\n returnValue = value;\n break;\n }\n }\n return returnValue;\n}\n\nexport type TPossibleValues = {\n models: string[];\n secondaryModels?: string[];\n};\n\nexport const parseConvo = ({\n endpoint,\n endpointType,\n conversation,\n possibleValues,\n}: {\n endpoint: EModelEndpoint;\n endpointType?: EModelEndpoint;\n conversation: Partial<TConversation | TPreset>;\n possibleValues?: TPossibleValues;\n // TODO: POC for default schema\n // defaultSchema?: Partial<EndpointSchema>,\n}) => {\n let schema = endpointSchemas[endpoint];\n\n if (!schema && !endpointType) {\n throw new Error(`Unknown endpoint: ${endpoint}`);\n } else if (!schema && endpointType) {\n schema = endpointSchemas[endpointType];\n }\n\n // if (defaultSchema && schemaCreators[endpoint]) {\n // schema = schemaCreators[endpoint](defaultSchema);\n // }\n\n const convo = schema.parse(conversation) as TConversation;\n const { models, secondaryModels } = possibleValues ?? {};\n\n if (models && convo) {\n convo.model = getFirstDefinedValue(models) ?? convo.model;\n }\n\n if (secondaryModels && convo.agentOptions) {\n convo.agentOptions.model = getFirstDefinedValue(secondaryModels) ?? convo.agentOptions.model;\n }\n\n return convo;\n};\n\nexport const getResponseSender = (endpointOption: TEndpointOption): string => {\n const { model, endpoint, endpointType, modelDisplayLabel, chatGptLabel, modelLabel, jailbreak } =\n endpointOption;\n\n if (\n [\n EModelEndpoint.openAI,\n EModelEndpoint.azureOpenAI,\n EModelEndpoint.gptPlugins,\n EModelEndpoint.chatGPTBrowser,\n ].includes(endpoint)\n ) {\n if (chatGptLabel) {\n return chatGptLabel;\n } else if (model && model.includes('gpt-3')) {\n return 'GPT-3.5';\n } else if (model && model.includes('gpt-4')) {\n return 'GPT-4';\n } else if (model && model.includes('mistral')) {\n return 'Mistral';\n }\n return alternateName[endpoint] ?? 'ChatGPT';\n }\n\n if (endpoint === EModelEndpoint.bingAI) {\n return jailbreak ? 'Sydney' : 'BingAI';\n }\n\n if (endpoint === EModelEndpoint.anthropic) {\n return modelLabel ?? 'Claude';\n }\n\n if (endpoint === EModelEndpoint.google) {\n if (modelLabel) {\n return modelLabel;\n } else if (model && model.includes('gemini')) {\n return 'Gemini';\n } else if (model && model.includes('code')) {\n return 'Codey';\n }\n\n return 'PaLM2';\n }\n\n if (endpoint === EModelEndpoint.custom || endpointType === EModelEndpoint.custom) {\n if (modelLabel) {\n return modelLabel;\n } else if (chatGptLabel) {\n return chatGptLabel;\n } else if (model && model.includes('mistral')) {\n return 'Mistral';\n } else if (model && model.includes('gpt-3')) {\n return 'GPT-3.5';\n } else if (model && model.includes('gpt-4')) {\n return 'GPT-4';\n } else if (modelDisplayLabel) {\n return modelDisplayLabel;\n }\n\n return 'AI';\n }\n\n return '';\n};\n\ntype CompactEndpointSchema =\n | typeof compactOpenAISchema\n | typeof compactAssistantSchema\n | typeof compactGoogleSchema\n | typeof bingAISchema\n | typeof compactAnthropicSchema\n | typeof compactChatGPTSchema\n | typeof compactPluginsSchema;\n\nconst compactEndpointSchemas: Record<string, CompactEndpointSchema> = {\n [EModelEndpoint.openAI]: compactOpenAISchema,\n [EModelEndpoint.azureOpenAI]: compactOpenAISchema,\n [EModelEndpoint.custom]: compactOpenAISchema,\n [EModelEndpoint.assistants]: compactAssistantSchema,\n [EModelEndpoint.google]: compactGoogleSchema,\n /* BingAI needs all fields */\n [EModelEndpoint.bingAI]: bingAISchema,\n [EModelEndpoint.anthropic]: compactAnthropicSchema,\n [EModelEndpoint.chatGPTBrowser]: compactChatGPTSchema,\n [EModelEndpoint.gptPlugins]: compactPluginsSchema,\n};\n\nexport const parseCompactConvo = ({\n endpoint,\n endpointType,\n conversation,\n possibleValues,\n}: {\n endpoint?: EModelEndpoint;\n endpointType?: EModelEndpoint;\n conversation: Partial<TConversation | TPreset>;\n possibleValues?: TPossibleValues;\n // TODO: POC for default schema\n // defaultSchema?: Partial<EndpointSchema>,\n}) => {\n if (!endpoint) {\n throw new Error(`undefined endpoint: ${endpoint}`);\n }\n\n let schema = compactEndpointSchemas[endpoint];\n\n if (!schema && !endpointType) {\n throw new Error(`Unknown endpoint: ${endpoint}`);\n } else if (!schema && endpointType) {\n schema = compactEndpointSchemas[endpointType];\n }\n\n const convo = schema.parse(conversation) as TConversation;\n // const { models, secondaryModels } = possibleValues ?? {};\n const { models } = possibleValues ?? {};\n\n if (models && convo) {\n convo.model = getFirstDefinedValue(models) ?? convo.model;\n }\n\n // if (secondaryModels && convo.agentOptions) {\n // convo.agentOptionmodel = getFirstDefinedValue(secondaryModels) ?? convo.agentOptionmodel;\n // }\n\n return convo;\n};\n","import { z, ZodArray, ZodError, ZodIssueCode } from 'zod';\nimport { tConversationSchema, googleSettings as google, openAISettings as openAI } from './schemas';\nimport type { ZodIssue } from 'zod';\nimport type { TConversation, TSetOption, TPreset } from './schemas';\n\nexport type GoogleSettings = Partial<typeof google>;\nexport type OpenAISettings = Partial<typeof google>;\n\nexport type ComponentType =\n | 'input'\n | 'textarea'\n | 'slider'\n | 'checkbox'\n | 'switch'\n | 'dropdown'\n | 'tags';\n\nexport type OptionType = 'conversation' | 'model' | 'custom';\n\nexport enum ComponentTypes {\n Input = 'input',\n Textarea = 'textarea',\n Slider = 'slider',\n Checkbox = 'checkbox',\n Switch = 'switch',\n Dropdown = 'dropdown',\n Tags = 'tags',\n}\n\nexport enum SettingTypes {\n Number = 'number',\n Boolean = 'boolean',\n String = 'string',\n Enum = 'enum',\n Array = 'array',\n}\n\nexport enum OptionTypes {\n Conversation = 'conversation',\n Model = 'model',\n Custom = 'custom',\n}\nexport interface SettingDefinition {\n key: string;\n description?: string;\n type: 'number' | 'boolean' | 'string' | 'enum' | 'array';\n default?: number | boolean | string | string[];\n showDefault?: boolean;\n options?: string[];\n range?: SettingRange;\n enumMappings?: Record<string, number | boolean | string>;\n component: ComponentType;\n optionType?: OptionType;\n columnSpan?: number;\n columns?: number;\n label?: string;\n placeholder?: string;\n labelCode?: boolean;\n placeholderCode?: boolean;\n descriptionCode?: boolean;\n minText?: number;\n maxText?: number;\n minTags?: number; // Specific to tags component\n maxTags?: number; // Specific to tags component\n includeInput?: boolean; // Specific to slider component\n descriptionSide?: 'top' | 'right' | 'bottom' | 'left';\n}\n\nexport type DynamicSettingProps = Partial<SettingDefinition> & {\n readonly?: boolean;\n settingKey: string;\n setOption: TSetOption;\n conversation: TConversation | TPreset | null;\n defaultValue?: number | boolean | string | string[];\n className?: string;\n inputClassName?: string;\n};\n\nconst requiredSettingFields = ['key', 'type', 'component'];\n\nexport interface SettingRange {\n min: number;\n max: number;\n step?: number;\n}\n\nexport type SettingsConfiguration = SettingDefinition[];\n\nexport function generateDynamicSchema(settings: SettingsConfiguration) {\n const schemaFields: { [key: string]: z.ZodTypeAny } = {};\n\n for (const setting of settings) {\n const {\n key,\n type,\n default: defaultValue,\n range,\n options,\n minText,\n maxText,\n minTags,\n maxTags,\n } = setting;\n\n if (type === SettingTypes.Number) {\n let schema = z.number();\n if (range) {\n schema = schema.min(range.min);\n schema = schema.max(range.max);\n }\n if (typeof defaultValue === 'number') {\n schemaFields[key] = schema.default(defaultValue);\n } else {\n schemaFields[key] = schema;\n }\n continue;\n }\n\n if (type === SettingTypes.Boolean) {\n const schema = z.boolean();\n if (typeof defaultValue === 'boolean') {\n schemaFields[key] = schema.default(defaultValue);\n } else {\n schemaFields[key] = schema;\n }\n continue;\n }\n\n if (type === SettingTypes.String) {\n let schema = z.string();\n if (minText) {\n schema = schema.min(minText);\n }\n if (maxText) {\n schema = schema.max(maxText);\n }\n if (typeof defaultValue === 'string') {\n schemaFields[key] = schema.default(defaultValue);\n } else {\n schemaFields[key] = schema;\n }\n continue;\n }\n\n if (type === SettingTypes.Enum) {\n if (!options || options.length === 0) {\n console.warn(`Missing or empty 'options' for enum setting '${key}'.`);\n continue;\n }\n\n const schema = z.enum(options as [string, ...string[]]);\n if (typeof defaultValue === 'string') {\n schemaFields[key] = schema.default(defaultValue);\n } else {\n schemaFields[key] = schema;\n }\n continue;\n }\n\n if (type === SettingTypes.Array) {\n let schema: z.ZodSchema = z.array(z.string().or(z.number()));\n if (minTags && schema instanceof ZodArray) {\n schema = schema.min(minTags);\n }\n if (maxTags && schema instanceof ZodArray) {\n schema = schema.max(maxTags);\n }\n\n if (defaultValue && Array.isArray(defaultValue)) {\n schema = schema.default(defaultValue);\n }\n\n schemaFields[key] = schema;\n continue;\n }\n\n console.warn(`Unsupported setting type: ${type}`);\n }\n\n return z.object(schemaFields);\n}\n\nconst ZodTypeToSettingType: Record<string, string | undefined> = {\n ZodString: 'string',\n ZodNumber: 'number',\n ZodBoolean: 'boolean',\n};\n\nconst minColumns = 1;\nconst maxColumns = 4;\nconst minSliderOptions = 2;\nconst minDropdownOptions = 2;\n\n/**\n * Validates the provided setting using the constraints unique to each component type.\n * @throws {ZodError} Throws a ZodError if any validation fails.\n */\nexport function validateSettingDefinitions(settings: SettingsConfiguration): void {\n const errors: ZodIssue[] = [];\n // Validate columns\n const columnsSet = new Set<number>();\n for (const setting of settings) {\n if (setting.columns !== undefined) {\n if (setting.columns < minColumns || setting.columns > maxColumns) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid columns value for setting ${setting.key}. Must be between ${minColumns} and ${maxColumns}.`,\n path: ['columns'],\n });\n } else {\n columnsSet.add(setting.columns);\n }\n }\n }\n\n const columns = columnsSet.size === 1 ? columnsSet.values().next().value : 2;\n\n for (const setting of settings) {\n for (const field of requiredSettingFields) {\n if (setting[field as keyof SettingDefinition] === undefined) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Missing required field ${field} for setting ${setting.key}.`,\n path: [field],\n });\n }\n }\n\n // check accepted types\n const settingTypes = Object.values(SettingTypes);\n if (!settingTypes.includes(setting.type as SettingTypes)) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid type for setting ${setting.key}. Must be one of ${settingTypes.join(\n ', ',\n )}.`,\n path: ['type'],\n });\n }\n\n // Predefined constraints based on components\n if (\n (setting.component === ComponentTypes.Tags && setting.type !== SettingTypes.Array) ||\n (setting.component !== ComponentTypes.Tags && setting.type === SettingTypes.Array)\n ) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Tags component for setting ${setting.key} must have type array.`,\n path: ['type'],\n });\n }\n\n if (setting.component === ComponentTypes.Tags) {\n if (setting.minTags !== undefined && setting.minTags < 0) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid minTags value for setting ${setting.key}. Must be non-negative.`,\n path: ['minTags'],\n });\n }\n if (setting.maxTags !== undefined && setting.maxTags < 0) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid maxTags value for setting ${setting.key}. Must be non-negative.`,\n path: ['maxTags'],\n });\n }\n if (setting.default && !Array.isArray(setting.default)) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid default value for setting ${setting.key}. Must be an array.`,\n path: ['default'],\n });\n }\n if (setting.default && setting.maxTags && (setting.default as []).length > setting.maxTags) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid default value for setting ${setting.key}. Must have at most ${setting.maxTags} tags.`,\n path: ['default'],\n });\n }\n if (setting.default && setting.minTags && (setting.default as []).length < setting.minTags) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid default value for setting ${setting.key}. Must have at least ${setting.minTags} tags.`,\n path: ['default'],\n });\n }\n if (!setting.default) {\n setting.default = [];\n }\n }\n\n if (\n setting.component === ComponentTypes.Input ||\n setting.component === ComponentTypes.Textarea\n ) {\n if (setting.type === SettingTypes.Number && setting.component === ComponentTypes.Textarea) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Textarea component for setting ${setting.key} must have type string.`,\n path: ['type'],\n });\n // continue;\n }\n\n if (\n setting.minText !== undefined &&\n setting.maxText !== undefined &&\n setting.minText > setting.maxText\n ) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `For setting ${setting.key}, minText cannot be greater than maxText.`,\n path: [setting.key, 'minText', 'maxText'],\n });\n // continue;\n }\n if (!setting.placeholder) {\n setting.placeholder = '';\n } // Default placeholder\n }\n\n if (setting.component === ComponentTypes.Slider) {\n if (setting.type === SettingTypes.Number && !setting.range) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Slider component for setting ${setting.key} must have a range if type is number.`,\n path: ['range'],\n });\n // continue;\n }\n if (\n setting.type === SettingTypes.Enum &&\n (!setting.options || setting.options.length < minSliderOptions)\n ) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Slider component for setting ${setting.key} requires at least ${minSliderOptions} options for enum type.`,\n path: ['options'],\n });\n // continue;\n }\n setting.includeInput =\n setting.type === SettingTypes.Number ? setting.includeInput ?? true : false; // Default to true if type is number\n }\n\n if (setting.component === ComponentTypes.Slider && setting.type === SettingTypes.Number) {\n if (setting.default === undefined && setting.range) {\n // Set default to the middle of the range if unspecified\n setting.default = Math.round((setting.range.min + setting.range.max) / 2);\n }\n }\n\n if (\n setting.component === ComponentTypes.Checkbox ||\n setting.component === ComponentTypes.Switch\n ) {\n if (setting.options && setting.options.length > 2) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Checkbox/Switch component for setting ${setting.key} must have 1-2 options.`,\n path: ['options'],\n });\n // continue;\n }\n if (!setting.default && setting.type === SettingTypes.Boolean) {\n setting.default = false; // Default to false if type is boolean\n }\n }\n\n if (setting.component === ComponentTypes.Dropdown) {\n if (!setting.options || setting.options.length < minDropdownOptions) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Dropdown component for setting ${setting.key} requires at least ${minDropdownOptions} options.`,\n path: ['options'],\n });\n // continue;\n }\n if (!setting.default && setting.options && setting.options.length > 0) {\n setting.default = setting.options[0]; // Default to first option if not specified\n }\n }\n\n // Default columnSpan\n if (!setting.columnSpan) {\n setting.columnSpan = Math.floor(columns / 2);\n }\n\n // Default label to key\n if (!setting.label) {\n setting.label = setting.key;\n }\n\n // Validate minText and maxText for input/textarea\n if (\n setting.component === ComponentTypes.Input ||\n setting.component === ComponentTypes.Textarea\n ) {\n if (setting.minText !== undefined && setting.minText < 0) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid minText value for setting ${setting.key}. Must be non-negative.`,\n path: ['minText'],\n });\n }\n if (setting.maxText !== undefined && setting.maxText < 0) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid maxText value for setting ${setting.key}. Must be non-negative.`,\n path: ['maxText'],\n });\n }\n }\n\n // Validate optionType and conversation schema\n if (setting.optionType !== OptionTypes.Custom) {\n const conversationSchema = tConversationSchema.shape[setting.key as keyof TConversation];\n if (!conversationSchema) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Setting ${setting.key} with optionType \"${setting.optionType}\" must be defined in tConversationSchema.`,\n path: ['optionType'],\n });\n } else {\n const zodType = conversationSchema._def.typeName;\n const settingTypeEquivalent = ZodTypeToSettingType[zodType] || null;\n if (settingTypeEquivalent !== setting.type) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Setting ${setting.key} with optionType \"${setting.optionType}\" must match the type defined in tConversationSchema.`,\n path: ['optionType'],\n });\n }\n }\n }\n\n /* Default value checks */\n if (setting.type === SettingTypes.Number && isNaN(setting.default as number)) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid default value for setting ${setting.key}. Must be a number.`,\n path: ['default'],\n });\n }\n\n if (setting.type === SettingTypes.Boolean && typeof setting.default !== 'boolean') {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid default value for setting ${setting.key}. Must be a boolean.`,\n path: ['default'],\n });\n }\n\n if (\n (setting.type === SettingTypes.String || setting.type === SettingTypes.Enum) &&\n typeof setting.default !== 'string'\n ) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid default value for setting ${setting.key}. Must be a string.`,\n path: ['default'],\n });\n }\n\n if (\n setting.type === SettingTypes.Enum &&\n setting.options &&\n !setting.options.includes(setting.default as string)\n ) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid default value for setting ${\n setting.key\n }. Must be one of the options: [${setting.options.join(', ')}].`,\n path: ['default'],\n });\n }\n\n if (\n setting.type === SettingTypes.Number &&\n setting.range &&\n typeof setting.default === 'number' &&\n (setting.default < setting.range.min || setting.default > setting.range.max)\n ) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid default value for setting ${setting.key}. Must be within the range [${setting.range.min}, ${setting.range.max}].`,\n path: ['default'],\n });\n }\n }\n\n if (errors.length > 0) {\n throw new ZodError(errors);\n }\n}\n\nexport const generateOpenAISchema = (customOpenAI: OpenAISettings) => {\n const defaults = { ...openAI, ...customOpenAI };\n return tConversationSchema\n .pick({\n model: true,\n chatGptLabel: true,\n promptPrefix: true,\n temperature: true,\n top_p: true,\n presence_penalty: true,\n frequency_penalty: true,\n resendFiles: true,\n imageDetail: true,\n maxContextTokens: true,\n })\n .transform((obj) => ({\n ...obj,\n model: obj.model ?? defaults.model.default,\n chatGptLabel: obj.chatGptLabel ?? null,\n promptPrefix: obj.promptPrefix ?? null,\n temperature: obj.temperature ?? defaults.temperature.default,\n top_p: obj.top_p ?? defaults.top_p.default,\n presence_penalty: obj.presence_penalty ?? defaults.presence_penalty.default,\n frequency_penalty: obj.frequency_penalty ?? defaults.frequency_penalty.default,\n resendFiles:\n typeof obj.resendFiles === 'boolean' ? obj.resendFiles : defaults.resendFiles.default,\n imageDetail: obj.imageDetail ?? defaults.imageDetail.default,\n maxContextTokens: obj.maxContextTokens ?? undefined,\n }))\n .catch(() => ({\n model: defaults.model.default,\n chatGptLabel: null,\n promptPrefix: null,\n temperature: defaults.temperature.default,\n top_p: defaults.top_p.default,\n presence_penalty: defaults.presence_penalty.default,\n frequency_penalty: defaults.frequency_penalty.default,\n resendFiles: defaults.resendFiles.default,\n imageDetail: defaults.imageDetail.default,\n maxContextTokens: undefined,\n }));\n};\n\nexport const generateGoogleSchema = (customGoogle: GoogleSettings) => {\n const defaults = { ...google, ...customGoogle };\n return tConversationSchema\n .pick({\n model: true,\n modelLabel: true,\n promptPrefix: true,\n examples: true,\n temperature: true,\n maxOutputTokens: true,\n topP: true,\n topK: true,\n maxContextTokens: true,\n })\n .transform((obj) => {\n const isGemini = obj?.model?.toLowerCase()?.includes('gemini');\n\n const maxOutputTokensMax = isGemini\n ? defaults.maxOutputTokens.maxGemini\n : defaults.maxOutputTokens.max;\n const maxOutputTokensDefault = isGemini\n ? defaults.maxOutputTokens.defaultGemini\n : defaults.maxOutputTokens.default;\n\n let maxOutputTokens = obj.maxOutputTokens ?? maxOutputTokensDefault;\n maxOutputTokens = Math.min(maxOutputTokens, maxOutputTokensMax);\n\n return {\n ...obj,\n model: obj.model ?? defaults.model.default,\n modelLabel: obj.modelLabel ?? null,\n promptPrefix: obj.promptPrefix ?? null,\n examples: obj.examples ?? [{ input: { content: '' }, output: { content: '' } }],\n temperature: obj.temperature ?? defaults.temperature.default,\n maxOutputTokens,\n topP: obj.topP ?? defaults.topP.default,\n topK: obj.topK ?? defaults.topK.default,\n maxContextTokens: obj.maxContextTokens ?? undefined,\n };\n })\n .catch(() => ({\n model: defaults.model.default,\n modelLabel: null,\n promptPrefix: null,\n examples: [{ input: { content: '' }, output: { content: '' } }],\n temperature: defaults.temperature.default,\n maxOutputTokens: defaults.maxOutputTokens.default,\n topP: defaults.topP.default,\n topK: defaults.topK.default,\n maxContextTokens: undefined,\n }));\n};\n","import type { ZodError } from 'zod';\nimport type {\n TAzureGroups,\n TAzureGroupMap,\n TAzureModelGroupMap,\n TValidatedAzureConfig,\n TAzureConfigValidationResult,\n} from '../src/config';\nimport { errorsToString, extractEnvVariable, envVarRegex } from '../src/parsers';\nimport { azureGroupConfigsSchema } from '../src/config';\n\nexport const deprecatedAzureVariables = [\n /* \"related to\" precedes description text */\n { key: 'AZURE_OPENAI_DEFAULT_MODEL', description: 'setting a default model' },\n { key: 'AZURE_OPENAI_MODELS', description: 'setting models' },\n {\n key: 'AZURE_USE_MODEL_AS_DEPLOYMENT_NAME',\n description: 'using model names as deployment names',\n },\n { key: 'AZURE_API_KEY', description: 'setting a single Azure API key' },\n { key: 'AZURE_OPENAI_API_INSTANCE_NAME', description: 'setting a single Azure instance name' },\n {\n key: 'AZURE_OPENAI_API_DEPLOYMENT_NAME',\n description: 'setting a single Azure deployment name',\n },\n { key: 'AZURE_OPENAI_API_VERSION', description: 'setting a single Azure API version' },\n {\n key: 'AZURE_OPENAI_API_COMPLETIONS_DEPLOYMENT_NAME',\n description: 'setting a single Azure completions deployment name',\n },\n {\n key: 'AZURE_OPENAI_API_EMBEDDINGS_DEPLOYMENT_NAME',\n description: 'setting a single Azure embeddings deployment name',\n },\n {\n key: 'PLUGINS_USE_AZURE',\n description: 'using Azure for Plugins',\n },\n];\n\nexport const conflictingAzureVariables = [\n {\n key: 'INSTANCE_NAME',\n },\n {\n key: 'DEPLOYMENT_NAME',\n },\n];\n\nexport function validateAzureGroups(configs: TAzureGroups): TAzureConfigValidationResult {\n let isValid = true;\n const modelNames: string[] = [];\n const modelGroupMap: TAzureModelGroupMap = {};\n const groupMap: TAzureGroupMap = {};\n const errors: (ZodError | string)[] = [];\n\n const result = azureGroupConfigsSchema.safeParse(configs);\n if (!result.success) {\n isValid = false;\n errors.push(errorsToString(result.error.errors));\n } else {\n for (const group of result.data) {\n const {\n group: groupName,\n apiKey,\n instanceName,\n deploymentName,\n version,\n baseURL,\n additionalHeaders,\n models,\n serverless,\n ...rest\n } = group;\n\n if (groupMap[groupName]) {\n errors.push(`Duplicate group name detected: \"${groupName}\". Group names must be unique.`);\n return { isValid: false, modelNames, modelGroupMap, groupMap, errors };\n }\n\n if (serverless && !baseURL) {\n errors.push(`Group \"${groupName}\" is serverless but missing mandatory \"baseURL.\"`);\n return { isValid: false, modelNames, modelGroupMap, groupMap, errors };\n }\n\n if (!instanceName && !serverless) {\n errors.push(\n `Group \"${groupName}\" is missing an \"instanceName\" for non-serverless configuration.`,\n );\n return { isValid: false, modelNames, modelGroupMap, groupMap, errors };\n }\n\n groupMap[groupName] = {\n apiKey,\n instanceName,\n deploymentName,\n version,\n baseURL,\n additionalHeaders,\n models,\n serverless,\n ...rest,\n };\n\n for (const modelName in group.models) {\n modelNames.push(modelName);\n const model = group.models[modelName];\n\n if (modelGroupMap[modelName]) {\n errors.push(\n `Duplicate model name detected: \"${modelName}\". Model names must be unique across groups.`,\n );\n return { isValid: false, modelNames, modelGroupMap, groupMap, errors };\n }\n\n if (serverless) {\n modelGroupMap[modelName] = {\n group: groupName,\n };\n continue;\n }\n\n if (typeof model === 'boolean') {\n // For boolean models, check if group-level deploymentName and version are present.\n if (!group.deploymentName || !group.version) {\n errors.push(\n `Model \"${modelName}\" in group \"${groupName}\" is missing a deploymentName or version.`,\n );\n return { isValid: false, modelNames, modelGroupMap, groupMap, errors };\n }\n\n modelGroupMap[modelName] = {\n group: groupName,\n };\n } else {\n // For object models, check if deploymentName and version are required but missing.\n if (\n (!model.deploymentName && !group.deploymentName) ||\n (!model.version && !group.version)\n ) {\n errors.push(\n `Model \"${modelName}\" in group \"${groupName}\" is missing a required deploymentName or version.`,\n );\n return { isValid: false, modelNames, modelGroupMap, groupMap, errors };\n }\n\n modelGroupMap[modelName] = {\n group: groupName,\n // deploymentName: model.deploymentName || group.deploymentName,\n // version: model.version || group.version,\n };\n }\n }\n }\n }\n\n return { isValid, modelNames, modelGroupMap, groupMap, errors };\n}\n\ntype AzureOptions = {\n azureOpenAIApiKey: string;\n azureOpenAIApiInstanceName?: string;\n azureOpenAIApiDeploymentName?: string;\n azureOpenAIApiVersion?: string;\n};\n\ntype MappedAzureConfig = {\n azureOptions: AzureOptions;\n baseURL?: string;\n headers?: Record<string, string>;\n serverless?: boolean;\n};\n\nexport function mapModelToAzureConfig({\n modelName,\n modelGroupMap,\n groupMap,\n}: Omit<TValidatedAzureConfig, 'modelNames'> & {\n modelName: string;\n}): MappedAzureConfig {\n const modelConfig = modelGroupMap[modelName];\n if (!modelConfig) {\n throw new Error(`Model named \"${modelName}\" not found in configuration.`);\n }\n\n const groupConfig = groupMap[modelConfig.group];\n if (!groupConfig) {\n throw new Error(\n `Group \"${modelConfig.group}\" for model \"${modelName}\" not found in configuration.`,\n );\n }\n\n const instanceName = groupConfig.instanceName;\n\n if (!instanceName && !groupConfig.serverless) {\n throw new Error(\n `Group \"${modelConfig.group}\" is missing an instanceName for non-serverless configuration.`,\n );\n }\n\n if (groupConfig.serverless && !groupConfig.baseURL) {\n throw new Error(\n `Group \"${modelConfig.group}\" is missing the required base URL for serverless configuration.`,\n );\n }\n\n if (groupConfig.serverless) {\n const result: MappedAzureConfig = {\n azureOptions: {\n azureOpenAIApiKey: extractEnvVariable(groupConfig.apiKey),\n },\n baseURL: extractEnvVariable(groupConfig.baseURL as string),\n serverless: true,\n };\n\n const apiKeyValue = result.azureOptions.azureOpenAIApiKey;\n if (typeof apiKeyValue === 'string' && envVarRegex.test(apiKeyValue)) {\n throw new Error(`Azure configuration environment variable \"${apiKeyValue}\" was not found.`);\n }\n\n if (groupConfig.additionalHeaders) {\n result.headers = groupConfig.additionalHeaders;\n }\n\n return result;\n }\n\n if (!instanceName) {\n throw new Error(\n `Group \"${modelConfig.group}\" is missing an instanceName for non-serverless configuration.`,\n );\n }\n\n const modelDetails = groupConfig.models[modelName];\n const { deploymentName, version } =\n typeof modelDetails === 'object'\n ? {\n deploymentName: modelDetails.deploymentName || groupConfig.deploymentName,\n version: modelDetails.version || groupConfig.version,\n }\n : {\n deploymentName: groupConfig.deploymentName,\n version: groupConfig.version,\n };\n\n if (!deploymentName || !version) {\n throw new Error(\n `Model \"${modelName}\" in group \"${modelConfig.group}\" is missing a deploymentName (\"${deploymentName}\") or version (\"${version}\").`,\n );\n }\n\n const azureOptions: AzureOptions = {\n azureOpenAIApiKey: extractEnvVariable(groupConfig.apiKey),\n azureOpenAIApiInstanceName: extractEnvVariable(instanceName),\n azureOpenAIApiDeploymentName: extractEnvVariable(deploymentName),\n azureOpenAIApiVersion: extractEnvVariable(version),\n };\n\n for (const value of Object.values(azureOptions)) {\n if (typeof value === 'string' && envVarRegex.test(value)) {\n throw new Error(`Azure configuration environment variable \"${value}\" was not found.`);\n }\n }\n\n const result: MappedAzureConfig = { azureOptions };\n\n if (groupConfig.baseURL) {\n result.baseURL = extractEnvVariable(groupConfig.baseURL);\n }\n\n if (groupConfig.additionalHeaders) {\n result.headers = groupConfig.additionalHeaders;\n }\n\n return result;\n}\n\nexport function mapGroupToAzureConfig({\n groupName,\n groupMap,\n}: {\n groupName: string;\n groupMap: TAzureGroupMap;\n}): MappedAzureConfig {\n const groupConfig = groupMap[groupName];\n if (!groupConfig) {\n throw new Error(`Group named \"${groupName}\" not found in configuration.`);\n }\n\n const instanceName = groupConfig.instanceName as string;\n\n if (!instanceName && !groupConfig.serverless) {\n throw new Error(\n `Group \"${groupName}\" is missing an instanceName for non-serverless configuration.`,\n );\n }\n\n if (groupConfig.serverless && !groupConfig.baseURL) {\n throw new Error(\n `Group \"${groupName}\" is missing the required base URL for serverless configuration.`,\n );\n }\n\n const models = Object.keys(groupConfig.models);\n if (models.length === 0) {\n throw new Error(`Group \"${groupName}\" does not have any models configured.`);\n }\n\n // Use the first available model in the group\n const firstModelName = models[0];\n const modelDetails = groupConfig.models[firstModelName];\n\n const azureOptions: AzureOptions = {\n azureOpenAIApiKey: extractEnvVariable(groupConfig.apiKey),\n azureOpenAIApiInstanceName: extractEnvVariable(instanceName),\n // DeploymentName and Version set below\n };\n\n if (groupConfig.serverless) {\n return {\n azureOptions,\n baseURL: extractEnvVariable(groupConfig.baseURL ?? ''),\n serverless: true,\n ...(groupConfig.additionalHeaders && { headers: groupConfig.additionalHeaders }),\n };\n }\n\n const { deploymentName, version } =\n typeof modelDetails === 'object'\n ? {\n deploymentName: modelDetails.deploymentName || groupConfig.deploymentName,\n version: modelDetails.version || groupConfig.version,\n }\n : {\n deploymentName: groupConfig.deploymentName,\n version: groupConfig.version,\n };\n\n if (!deploymentName || !version) {\n throw new Error(\n `Model \"${firstModelName}\" in group \"${groupName}\" or the group itself is missing a deploymentName (\"${deploymentName}\") or version (\"${version}\").`,\n );\n }\n\n azureOptions.azureOpenAIApiDeploymentName = extractEnvVariable(deploymentName);\n azureOptions.azureOpenAIApiVersion = extractEnvVariable(version);\n\n const result: MappedAzureConfig = { azureOptions };\n\n if (groupConfig.baseURL) {\n result.baseURL = extractEnvVariable(groupConfig.baseURL);\n }\n\n if (groupConfig.additionalHeaders) {\n result.headers = groupConfig.additionalHeaders;\n }\n\n return result;\n}\n","export enum QueryKeys {\n messages = 'messages',\n allConversations = 'allConversations',\n archivedConversations = 'archivedConversations',\n searchConversations = 'searchConversations',\n conversation = 'conversation',\n searchEnabled = 'searchEnabled',\n user = 'user',\n name = 'name', // user key name\n models = 'models',\n balance = 'balance',\n endpoints = 'endpoints',\n presets = 'presets',\n searchResults = 'searchResults',\n tokenCount = 'tokenCount',\n availablePlugins = 'availablePlugins',\n startupConfig = 'startupConfig',\n assistants = 'assistants',\n assistant = 'assistant',\n endpointsConfigOverride = 'endpointsConfigOverride',\n files = 'files',\n fileConfig = 'fileConfig',\n tools = 'tools',\n actions = 'actions',\n assistantDocs = 'assistantDocs',\n fileDownload = 'fileDownload',\n}\n\nexport enum MutationKeys {\n fileUpload = 'fileUpload',\n fileDelete = 'fileDelete',\n updatePreset = 'updatePreset',\n deletePreset = 'deletePreset',\n logoutUser = 'logoutUser',\n avatarUpload = 'avatarUpload',\n assistantAvatarUpload = 'assistantAvatarUpload',\n updateAction = 'updateAction',\n deleteAction = 'deleteAction',\n}\n","import axios from 'axios';\n\nexport function setAcceptLanguageHeader(value: string): void {\n axios.defaults.headers.common['Accept-Language'] = value;\n}\n\nexport function setTokenHeader(token: string) {\n axios.defaults.headers.common['Authorization'] = 'Bearer ' + token;\n}\n","export const user = () => '/api/user';\n\nexport const balance = () => '/api/balance';\n\nexport const userPlugins = () => '/api/user/plugins';\n\nexport const messages = (conversationId: string, messageId?: string) =>\n `/api/messages/${conversationId}${messageId ? `/${messageId}` : ''}`;\n\nconst keysEndpoint = '/api/keys';\n\nexport const keys = () => keysEndpoint;\n\nexport const userKeyQuery = (name: string) => `${keysEndpoint}?name=${name}`;\n\nexport const revokeUserKey = (name: string) => `${keysEndpoint}/${name}`;\n\nexport const revokeAllUserKeys = () => `${keysEndpoint}?all=true`;\n\nexport const abortRequest = (endpoint: string) => `/api/ask/${endpoint}/abort`;\n\nexport const conversationsRoot = '/api/convos';\n\nexport const conversations = (pageNumber: string, isArchived?: boolean) =>\n `${conversationsRoot}?pageNumber=${pageNumber}${isArchived ? '&isArchived=true' : ''}`;\n\nexport const conversationById = (id: string) => `${conversationsRoot}/${id}`;\n\nexport const genTitle = () => `${conversationsRoot}/gen_title`;\n\nexport const updateConversation = () => `${conversationsRoot}/update`;\n\nexport const deleteConversation = () => `${conversationsRoot}/clear`;\n\nexport const importConversation = () => `${conversationsRoot}/import`;\n\nexport const forkConversation = () => `${conversationsRoot}/fork`;\n\nexport const importConversationJobStatus = (jobId: string) =>\n `${conversationsRoot}/import/jobs/${jobId}`;\n\nexport const search = (q: string, pageNumber: string) =>\n `/api/search?q=${q}&pageNumber=${pageNumber}`;\n\nexport const searchEnabled = () => '/api/search/enable';\n\nexport const presets = () => '/api/presets';\n\nexport const deletePreset = () => '/api/presets/delete';\n\nexport const aiEndpoints = () => '/api/endpoints';\n\nexport const endpointsConfigOverride = () => '/api/endpoints/config/override';\n\nexport const models = () => '/api/models';\n\nexport const tokenizer = () => '/api/tokenizer';\n\nexport const login = () => '/api/auth/login';\n\nexport const logout = () => '/api/auth/logout';\n\nexport const register = () => '/api/auth/register';\n\nexport const loginFacebook = () => '/api/auth/facebook';\n\nexport const loginGoogle = () => '/api/auth/google';\n\nexport const refreshToken = (retry?: boolean) => `/api/auth/refresh${retry ? '?retry=true' : ''}`;\n\nexport const requestPasswordReset = () => '/api/auth/requestPasswordReset';\n\nexport const resetPassword = () => '/api/auth/resetPassword';\n\nexport const plugins = () => '/api/plugins';\n\nexport const config = () => '/api/config';\n\nexport const assistants = (id?: string, options?: Record<string, string>) => {\n let url = '/api/assistants';\n\n if (id) {\n url += `/${id}`;\n }\n\n if (options && Object.keys(options).length > 0) {\n const queryParams = new URLSearchParams(options).toString();\n url += `?${queryParams}`;\n }\n\n return url;\n};\n\nexport const files = () => '/api/files';\n\nexport const images = () => `${files()}/images`;\n\nexport const avatar = () => `${images()}/avatar`;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport axios, { AxiosRequestConfig, AxiosError } from 'axios';\nimport { setTokenHeader } from './headers-helpers';\nimport * as endpoints from './api-endpoints';\n\nasync function _get<T>(url: string, options?: AxiosRequestConfig): Promise<T> {\n const response = await axios.get(url, { ...options });\n return response.data;\n}\n\nasync function _getResponse<T>(url: string, options?: AxiosRequestConfig): Promise<T> {\n return await axios.get(url, { ...options });\n}\n\nasync function _post(url: string, data?: any) {\n const response = await axios.post(url, JSON.stringify(data), {\n headers: { 'Content-Type': 'application/json' },\n });\n return response.data;\n}\n\nasync function _postMultiPart(url: string, formData: FormData, options?: AxiosRequestConfig) {\n const response = await axios.post(url, formData, {\n ...options,\n headers: { 'Content-Type': 'multipart/form-data' },\n });\n return response.data;\n}\n\nasync function _put(url: string, data?: any) {\n const response = await axios.put(url, JSON.stringify(data), {\n headers: { 'Content-Type': 'application/json' },\n });\n return response.data;\n}\n\nasync function _delete<T>(url: string): Promise<T> {\n const response = await axios.delete(url);\n return response.data;\n}\n\nasync function _deleteWithOptions<T>(url: string, options?: AxiosRequestConfig): Promise<T> {\n const response = await axios.delete(url, { ...options });\n return response.data;\n}\n\nasync function _patch(url: string, data?: any) {\n const response = await axios.patch(url, JSON.stringify(data), {\n headers: { 'Content-Type': 'application/json' },\n });\n return response.data;\n}\n\nlet isRefreshing = false;\nlet failedQueue: { resolve: (value?: any) => void; reject: (reason?: any) => void }[] = [];\n\nconst refreshToken = (retry?: boolean) => _post(endpoints.refreshToken(retry));\n\nconst processQueue = (error: AxiosError | null, token: string | null = null) => {\n failedQueue.forEach((prom) => {\n if (error) {\n prom.reject(error);\n } else {\n prom.resolve(token);\n }\n });\n failedQueue = [];\n};\n\naxios.interceptors.response.use(\n (response) => response,\n async (error) => {\n const originalRequest = error.config;\n\n if (error.response.status === 401 && !originalRequest._retry) {\n originalRequest._retry = true;\n\n if (isRefreshing) {\n try {\n const token = await new Promise((resolve, reject) => {\n failedQueue.push({ resolve, reject });\n });\n originalRequest.headers['Authorization'] = 'Bearer ' + token;\n return await axios(originalRequest);\n } catch (err) {\n return Promise.reject(err);\n }\n }\n\n isRefreshing = true;\n\n try {\n const { token } = await refreshToken(\n // Handle edge case where we get a blank screen if the initial 401 error is from a refresh token request\n originalRequest.url?.includes('api/auth/refresh') ? true : false,\n );\n\n if (token) {\n originalRequest.headers['Authorization'] = 'Bearer ' + token;\n setTokenHeader(token);\n window.dispatchEvent(new CustomEvent('tokenUpdated', { detail: token }));\n processQueue(null, token);\n return await axios(originalRequest);\n } else {\n window.location.href = '/login';\n }\n } catch (err) {\n processQueue(err as AxiosError, null);\n return Promise.reject(err);\n } finally {\n isRefreshing = false;\n }\n }\n\n return Promise.reject(error);\n },\n);\n\nexport default {\n get: _get,\n getResponse: _getResponse,\n post: _post,\n postMultiPart: _postMultiPart,\n put: _put,\n delete: _delete,\n deleteWithOptions: _deleteWithOptions,\n patch: _patch,\n refreshToken,\n};\n","import * as f from './types/files';\nimport * as q from './types/queries';\nimport * as m from './types/mutations';\nimport * as a from './types/assistants';\nimport * as t from './types';\nimport * as s from './schemas';\nimport request from './request';\nimport * as endpoints from './api-endpoints';\nimport type { AxiosResponse } from 'axios';\n\nexport function abortRequestWithMessage(\n endpoint: string,\n abortKey: string,\n message: string,\n): Promise<void> {\n return request.post(endpoints.abortRequest(endpoint), { arg: { abortKey, message } });\n}\n\nexport function revokeUserKey(name: string): Promise<unknown> {\n return request.delete(endpoints.revokeUserKey(name));\n}\n\nexport function revokeAllUserKeys(): Promise<unknown> {\n return request.delete(endpoints.revokeAllUserKeys());\n}\n\nexport function getMessagesByConvoId(conversationId: string): Promise<s.TMessage[]> {\n if (conversationId === 'new') {\n return Promise.resolve([]);\n }\n return request.get(endpoints.messages(conversationId));\n}\n\nexport function updateMessage(payload: t.TUpdateMessageRequest): Promise<unknown> {\n const { conversationId, messageId, text } = payload;\n if (!conversationId) {\n throw new Error('conversationId is required');\n }\n\n return request.put(endpoints.messages(conversationId, messageId), { text });\n}\n\nexport function updateUserKey(payload: t.TUpdateUserKeyRequest) {\n const { value } = payload;\n if (!value) {\n throw new Error('value is required');\n }\n\n return request.put(endpoints.keys(), payload);\n}\n\nexport function getPresets(): Promise<s.TPreset[]> {\n return request.get(endpoints.presets());\n}\n\nexport function createPreset(payload: s.TPreset): Promise<s.TPreset> {\n return request.post(endpoints.presets(), payload);\n}\n\nexport function updatePreset(payload: s.TPreset): Promise<s.TPreset> {\n return request.post(endpoints.presets(), payload);\n}\n\nexport function deletePreset(arg: s.TPreset | undefined): Promise<m.PresetDeleteResponse> {\n return request.post(endpoints.deletePreset(), arg);\n}\n\nexport function getSearchEnabled(): Promise<boolean> {\n return request.get(endpoints.searchEnabled());\n}\n\nexport function getUser(): Promise<t.TUser> {\n return request.get(endpoints.user());\n}\n\nexport function getUserBalance(): Promise<string> {\n return request.get(endpoints.balance());\n}\n\nexport const updateTokenCount = (text: string) => {\n return request.post(endpoints.tokenizer(), { arg: text });\n};\n\nexport const login = (payload: t.TLoginUser) => {\n return request.post(endpoints.login(), payload);\n};\n\nexport const logout = () => {\n return request.post(endpoints.logout());\n};\n\nexport const register = (payload: t.TRegisterUser) => {\n return request.post(endpoints.register(), payload);\n};\n\nexport const userKeyQuery = (name: string): Promise<t.TCheckUserKeyResponse> =>\n request.get(endpoints.userKeyQuery(name));\n\nexport const getLoginGoogle = () => {\n return request.get(endpoints.loginGoogle());\n};\n\nexport const requestPasswordReset = (\n payload: t.TRequestPasswordReset,\n): Promise<t.TRequestPasswordResetResponse> => {\n return request.post(endpoints.requestPasswordReset(), payload);\n};\n\nexport const resetPassword = (payload: t.TResetPassword) => {\n return request.post(endpoints.resetPassword(), payload);\n};\n\nexport const getAvailablePlugins = (): Promise<s.TPlugin[]> => {\n return request.get(endpoints.plugins());\n};\n\nexport const updateUserPlugins = (payload: t.TUpdateUserPlugins) => {\n return request.post(endpoints.userPlugins(), payload);\n};\n\n/* Config */\n\nexport const getStartupConfig = (): Promise<t.TStartupConfig> => {\n return request.get(endpoints.config());\n};\n\nexport const getAIEndpoints = (): Promise<t.TEndpointsConfig> => {\n return request.get(endpoints.aiEndpoints());\n};\n\nexport const getModels = async (): Promise<t.TModelsConfig> => {\n return request.get(endpoints.models());\n};\n\nexport const getEndpointsConfigOverride = (): Promise<unknown | boolean> => {\n return request.get(endpoints.endpointsConfigOverride());\n};\n\n/* Assistants */\n\nexport const createAssistant = (data: a.AssistantCreateParams): Promise<a.Assistant> => {\n return request.post(endpoints.assistants(), data);\n};\n\nexport const getAssistantById = (assistant_id: string): Promise<a.Assistant> => {\n return request.get(endpoints.assistants(assistant_id));\n};\n\nexport const updateAssistant = (\n assistant_id: string,\n data: a.AssistantUpdateParams,\n): Promise<a.Assistant> => {\n return request.patch(endpoints.assistants(assistant_id), data);\n};\n\nexport const deleteAssistant = (assistant_id: string, model: string): Promise<void> => {\n return request.delete(endpoints.assistants(assistant_id, { model }));\n};\n\nexport const listAssistants = (\n params?: a.AssistantListParams,\n): Promise<a.AssistantListResponse> => {\n return request.get(endpoints.assistants(), { params });\n};\n\nexport function getAssistantDocs(): Promise<a.AssistantDocument[]> {\n return request.get(endpoints.assistants('documents'));\n}\n\n/* Tools */\n\nexport const getAvailableTools = (): Promise<s.TPlugin[]> => {\n return request.get(`${endpoints.assistants()}/tools`);\n};\n\n/* Files */\n\nexport const getFiles = (): Promise<f.TFile[]> => {\n return request.get(endpoints.files());\n};\n\nexport const getFileConfig = (): Promise<f.FileConfig> => {\n return request.get(`${endpoints.files()}/config`);\n};\n\nexport const uploadImage = (data: FormData): Promise<f.TFileUpload> => {\n return request.postMultiPart(endpoints.images(), data);\n};\n\nexport const uploadFile = (data: FormData): Promise<f.TFileUpload> => {\n return request.postMultiPart(endpoints.files(), data);\n};\n\n/**\n * Imports a conversations file.\n *\n * @param data - The FormData containing the file to import.\n * @returns A Promise that resolves to the import start response.\n */\nexport const importConversationsFile = (data: FormData): Promise<t.TImportStartResponse> => {\n return request.postMultiPart(endpoints.importConversation(), data);\n};\n\n/**\n * Retrieves the status of an import conversation job.\n *\n * @param jobId - The ID of the import conversation job.\n * @returns A promise that resolves to the import job status.\n */\nexport const queryImportConversationJobStatus = async (\n jobId: string,\n): Promise<t.TImportJobStatus> => {\n return request.get(endpoints.importConversationJobStatus(jobId));\n};\n\nexport const uploadAvatar = (data: FormData): Promise<f.AvatarUploadResponse> => {\n return request.postMultiPart(endpoints.avatar(), data);\n};\n\nexport const uploadAssistantAvatar = (data: m.AssistantAvatarVariables): Promise<a.Assistant> => {\n return request.postMultiPart(\n endpoints.assistants(`avatar/${data.assistant_id}`, { model: data.model }),\n data.formData,\n );\n};\n\nexport const getFileDownload = async (userId: string, file_id: string): Promise<AxiosResponse> => {\n return request.getResponse(`${endpoints.files()}/download/${userId}/${file_id}`, {\n responseType: 'blob',\n headers: {\n Accept: 'application/octet-stream',\n },\n });\n};\n\nexport const deleteFiles = async (\n files: f.BatchFile[],\n assistant_id?: string,\n): Promise<f.DeleteFilesResponse> =>\n request.deleteWithOptions(endpoints.files(), {\n data: { files, assistant_id },\n });\n\n/* actions */\n\nexport const updateAction = (data: m.UpdateActionVariables): Promise<m.UpdateActionResponse> => {\n const { assistant_id, ...body } = data;\n return request.post(endpoints.assistants(`actions/${assistant_id}`), body);\n};\n\nexport function getActions(): Promise<a.Action[]> {\n return request.get(endpoints.assistants('actions'));\n}\n\nexport const deleteAction = async (\n assistant_id: string,\n action_id: string,\n model: string,\n): Promise<void> =>\n request.delete(endpoints.assistants(`actions/${assistant_id}/${action_id}/${model}`));\n\n/* conversations */\n\nexport function forkConversation(payload: t.TForkConvoRequest): Promise<t.TForkConvoResponse> {\n return request.post(endpoints.forkConversation(), payload);\n}\n\nexport function deleteConversation(payload: t.TDeleteConversationRequest) {\n //todo: this should be a DELETE request\n return request.post(endpoints.deleteConversation(), { arg: payload });\n}\n\nexport function clearAllConversations(): Promise<unknown> {\n return request.post(endpoints.deleteConversation(), { arg: {} });\n}\n\nexport const listConversations = (\n params?: q.ConversationListParams,\n): Promise<q.ConversationListResponse> => {\n // Assuming params has a pageNumber property\n const pageNumber = params?.pageNumber || '1'; // Default to page 1 if not provided\n const isArchived = params?.isArchived || false; // Default to false if not provided\n return request.get(endpoints.conversations(pageNumber, isArchived));\n};\n\nexport const listConversationsByQuery = (\n params?: q.ConversationListParams & { searchQuery?: string },\n): Promise<q.ConversationListResponse> => {\n const pageNumber = params?.pageNumber || '1'; // Default to page 1 if not provided\n const searchQuery = params?.searchQuery || ''; // If no search query is provided, default to an empty string\n // Update the endpoint to handle a search query\n if (searchQuery !== '') {\n return request.get(endpoints.search(searchQuery, pageNumber));\n } else {\n return request.get(endpoints.conversations(pageNumber));\n }\n};\n\nexport const searchConversations = async (\n q: string,\n pageNumber: string,\n): Promise<t.TSearchResults> => {\n return request.get(endpoints.search(q, pageNumber));\n};\n\nexport function getConversations(pageNumber: string): Promise<t.TGetConversationsResponse> {\n return request.get(endpoints.conversations(pageNumber));\n}\n\nexport function getConversationById(id: string): Promise<s.TConversation> {\n return request.get(endpoints.conversationById(id));\n}\n\nexport function updateConversation(\n payload: t.TUpdateConversationRequest,\n): Promise<t.TUpdateConversationResponse> {\n return request.post(endpoints.updateConversation(), { arg: payload });\n}\n\nexport function archiveConversation(\n payload: t.TArchiveConversationRequest,\n): Promise<t.TArchiveConversationResponse> {\n return request.post(endpoints.updateConversation(), { arg: payload });\n}\n\nexport function genTitle(payload: m.TGenTitleRequest): Promise<m.TGenTitleResponse> {\n return request.post(endpoints.genTitle(), payload);\n}\n","/* eslint-disable */\n/**\n * Copyright (C) 2016 Maxime Petazzoni <maxime.petazzoni@bulix.org>.\n * All rights reserved.\n */\n\nimport request from './request';\nimport { setTokenHeader } from './headers-helpers';\n\nvar SSE = function (url, options) {\n if (!(this instanceof SSE)) {\n return new SSE(url, options);\n }\n\n this.INITIALIZING = -1;\n this.CONNECTING = 0;\n this.OPEN = 1;\n this.CLOSED = 2;\n\n this.url = url;\n\n options = options || {};\n this.headers = options.headers || {};\n this.payload = options.payload !== undefined ? options.payload : '';\n this.method = options.method || (this.payload && 'POST') || 'GET';\n this.withCredentials = !!options.withCredentials;\n\n this.FIELD_SEPARATOR = ':';\n this.listeners = {};\n\n this.xhr = null;\n this.readyState = this.INITIALIZING;\n this.progress = 0;\n this.chunk = '';\n\n this.addEventListener = function (type, listener) {\n if (this.listeners[type] === undefined) {\n this.listeners[type] = [];\n }\n\n if (this.listeners[type].indexOf(listener) === -1) {\n this.listeners[type].push(listener);\n }\n };\n\n this.removeEventListener = function (type, listener) {\n if (this.listeners[type] === undefined) {\n return;\n }\n\n var filtered = [];\n this.listeners[type].forEach(function (element) {\n if (element !== listener) {\n filtered.push(element);\n }\n });\n if (filtered.length === 0) {\n delete this.listeners[type];\n } else {\n this.listeners[type] = filtered;\n }\n };\n\n this.dispatchEvent = function (e) {\n if (!e) {\n return true;\n }\n\n e.source = this;\n\n var onHandler = 'on' + e.type;\n if (this.hasOwnProperty(onHandler)) {\n this[onHandler].call(this, e);\n if (e.defaultPrevented) {\n return false;\n }\n }\n\n if (this.listeners[e.type]) {\n return this.listeners[e.type].every(function (callback) {\n callback(e);\n return !e.defaultPrevented;\n });\n }\n\n return true;\n };\n\n this._setReadyState = function (state) {\n var event = new CustomEvent('readystatechange');\n event.readyState = state;\n this.readyState = state;\n this.dispatchEvent(event);\n };\n\n this._onStreamFailure = function (e) {\n var event = new CustomEvent('error');\n event.data = e.currentTarget.response;\n this.dispatchEvent(event);\n this.close();\n };\n\n this._onStreamAbort = function (e) {\n this.dispatchEvent(new CustomEvent('abort'));\n this.close();\n };\n\n this._onStreamProgress = async function (e) {\n if (!this.xhr) {\n return;\n }\n\n if (this.xhr.status === 401 && !this._retry) {\n this._retry = true;\n try {\n const refreshResponse = await request.refreshToken();\n this.headers = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${refreshResponse.token}`,\n };\n setTokenHeader(refreshResponse.token);\n window.dispatchEvent(new CustomEvent('tokenUpdated', { detail: refreshResponse.token }));\n this.stream();\n } catch (err) {\n this._onStreamFailure(e);\n return;\n }\n } else if (this.xhr.status !== 200) {\n this._onStreamFailure(e);\n return;\n }\n\n if (this.readyState == this.CONNECTING) {\n this.dispatchEvent(new CustomEvent('open'));\n this._setReadyState(this.OPEN);\n }\n\n var data = this.xhr.responseText.substring(this.progress);\n this.progress += data.length;\n data.split(/(\\r\\n|\\r|\\n){2}/g).forEach(\n function (part) {\n if (part.trim().length === 0) {\n this.dispatchEvent(this._parseEventChunk(this.chunk.trim()));\n this.chunk = '';\n } else {\n this.chunk += part;\n }\n }.bind(this),\n );\n };\n\n this._onStreamLoaded = function (e) {\n this._onStreamProgress(e);\n\n // Parse the last chunk.\n this.dispatchEvent(this._parseEventChunk(this.chunk));\n this.chunk = '';\n };\n\n /**\n * Parse a received SSE event chunk into a constructed event object.\n */\n this._parseEventChunk = function (chunk) {\n if (!chunk || chunk.length === 0) {\n return null;\n }\n\n var e = { id: null, retry: null, data: '', event: 'message' };\n chunk.split(/\\n|\\r\\n|\\r/).forEach(\n function (line) {\n line = line.trimRight();\n var index = line.indexOf(this.FIELD_SEPARATOR);\n if (index <= 0) {\n // Line was either empty, or started with a separator and is a comment.\n // Either way, ignore.\n return;\n }\n\n var field = line.substring(0, index);\n if (!(field in e)) {\n return;\n }\n\n var value = line.substring(index + 1).trimLeft();\n if (field === 'data') {\n e[field] += value;\n } else {\n e[field] = value;\n }\n }.bind(this),\n );\n\n var event = new CustomEvent(e.event);\n event.data = e.data;\n event.id = e.id;\n return event;\n };\n\n this._checkStreamClosed = function () {\n if (!this.xhr) {\n return;\n }\n\n if (this.xhr.readyState === XMLHttpRequest.DONE) {\n this._setReadyState(this.CLOSED);\n }\n };\n\n this.stream = function () {\n this._setReadyState(this.CONNECTING);\n\n this.xhr = new XMLHttpRequest();\n this.xhr.addEventListener('progress', this._onStreamProgress.bind(this));\n this.xhr.addEventListener('load', this._onStreamLoaded.bind(this));\n this.xhr.addEventListener('readystatechange', this._checkStreamClosed.bind(this));\n this.xhr.addEventListener('error', this._onStreamFailure.bind(this));\n this.xhr.addEventListener('abort', this._onStreamAbort.bind(this));\n this.xhr.open(this.method, this.url);\n for (var header in this.headers) {\n this.xhr.setRequestHeader(header, this.headers[header]);\n }\n this.xhr.withCredentials = this.withCredentials;\n this.xhr.send(this.payload);\n };\n\n this.close = function () {\n if (this.readyState === this.CLOSED) {\n return;\n }\n\n this.xhr.abort();\n this.xhr = null;\n this._setReadyState(this.CLOSED);\n };\n};\n\nexport { SSE };\n// Export our SSE module for npm.js\n// if (typeof exports !== 'undefined') {\n// // exports.SSE = SSE;\n// module.exports = { SSE };\n// }\n","import axios from 'axios';\nimport { URL } from 'url';\nimport crypto from 'crypto';\nimport { load } from 'js-yaml';\nimport type { FunctionTool, Schema, Reference, ActionMetadata } from './types/assistants';\nimport type { OpenAPIV3 } from 'openapi-types';\nimport { Tools, AuthTypeEnum, AuthorizationTypeEnum } from './types/assistants';\n\nexport type ParametersSchema = {\n type: string;\n properties: Record<string, Reference | Schema>;\n required: string[];\n};\n\nexport type ApiKeyCredentials = {\n api_key: string;\n custom_auth_header?: string;\n authorization_type?: AuthorizationTypeEnum;\n};\n\nexport type OAuthCredentials = {\n tokenUrl: string;\n clientId: string;\n clientSecret: string;\n scope: string;\n};\n\nexport type Credentials = ApiKeyCredentials | OAuthCredentials;\n\nexport function sha1(input: string) {\n return crypto.createHash('sha1').update(input).digest('hex');\n}\n\nexport function createURL(domain: string, path: string) {\n const myURL = new URL(path, domain);\n return myURL.toString();\n}\n\nexport class FunctionSignature {\n name: string;\n description: string;\n parameters: ParametersSchema;\n\n constructor(name: string, description: string, parameters: ParametersSchema) {\n this.name = name;\n this.description = description;\n if (parameters.properties?.['requestBody']) {\n this.parameters = parameters.properties?.['requestBody'] as ParametersSchema;\n } else {\n this.parameters = parameters;\n }\n }\n\n toObjectTool(): FunctionTool {\n return {\n type: Tools.function,\n function: {\n name: this.name,\n description: this.description,\n parameters: this.parameters,\n },\n };\n }\n}\n\nexport class ActionRequest {\n domain: string;\n path: string;\n method: string;\n operation: string;\n operationHash?: string;\n isConsequential: boolean;\n contentType: string;\n params?: object;\n\n constructor(\n domain: string,\n path: string,\n method: string,\n operation: string,\n isConsequential: boolean,\n contentType: string,\n ) {\n this.domain = domain;\n this.path = path;\n this.method = method;\n this.operation = operation;\n this.isConsequential = isConsequential;\n this.contentType = contentType;\n }\n\n private authHeaders: Record<string, string> = {};\n private authToken?: string;\n\n async setParams(params: object) {\n this.operationHash = sha1(JSON.stringify(params));\n this.params = params;\n\n for (const [key, value] of Object.entries(params)) {\n const paramPattern = `{${key}}`;\n if (this.path.includes(paramPattern)) {\n this.path = this.path.replace(paramPattern, encodeURIComponent(value as string));\n delete (this.params as Record<string, unknown>)[key];\n }\n }\n }\n\n async setAuth(metadata: ActionMetadata) {\n if (!metadata.auth) {\n return;\n }\n\n const {\n type,\n /* API Key */\n authorization_type,\n custom_auth_header,\n /* OAuth */\n authorization_url,\n client_url,\n scope,\n token_exchange_method,\n } = metadata.auth;\n\n const {\n /* API Key */\n api_key,\n /* OAuth */\n oauth_client_id,\n oauth_client_secret,\n } = metadata;\n\n const isApiKey = api_key && type === AuthTypeEnum.ServiceHttp;\n const isOAuth =\n oauth_client_id &&\n oauth_client_secret &&\n type === AuthTypeEnum.OAuth &&\n authorization_url &&\n client_url &&\n scope &&\n token_exchange_method;\n\n if (isApiKey && authorization_type === AuthorizationTypeEnum.Basic) {\n const basicToken = Buffer.from(api_key).toString('base64');\n this.authHeaders['Authorization'] = `Basic ${basicToken}`;\n } else if (isApiKey && authorization_type === AuthorizationTypeEnum.Bearer) {\n this.authHeaders['Authorization'] = `Bearer ${api_key}`;\n } else if (\n isApiKey &&\n authorization_type === AuthorizationTypeEnum.Custom &&\n custom_auth_header\n ) {\n this.authHeaders[custom_auth_header] = api_key;\n } else if (isOAuth) {\n // TODO: WIP - OAuth support\n if (!this.authToken) {\n const tokenResponse = await axios.post(\n client_url,\n {\n client_id: oauth_client_id,\n client_secret: oauth_client_secret,\n scope: scope,\n grant_type: 'client_credentials',\n },\n {\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n },\n );\n this.authToken = tokenResponse.data.access_token;\n }\n this.authHeaders['Authorization'] = `Bearer ${this.authToken}`;\n }\n }\n\n async execute() {\n const url = createURL(this.domain, this.path);\n const headers = {\n ...this.authHeaders,\n 'Content-Type': this.contentType,\n };\n\n const method = this.method.toLowerCase();\n\n if (method === 'get') {\n return axios.get(url, { headers, params: this.params });\n } else if (method === 'post') {\n return axios.post(url, this.params, { headers });\n } else if (method === 'put') {\n return axios.put(url, this.params, { headers });\n } else if (method === 'delete') {\n return axios.delete(url, { headers, data: this.params });\n } else if (method === 'patch') {\n return axios.patch(url, this.params, { headers });\n } else {\n throw new Error(`Unsupported HTTP method: ${this.method}`);\n }\n }\n}\n\nexport function resolveRef(\n schema: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject | OpenAPIV3.RequestBodyObject,\n components?: OpenAPIV3.ComponentsObject,\n): OpenAPIV3.SchemaObject {\n if ('$ref' in schema && components) {\n const refPath = schema.$ref.replace(/^#\\/components\\/schemas\\//, '');\n const resolvedSchema = components.schemas?.[refPath];\n if (!resolvedSchema) {\n throw new Error(`Reference ${schema.$ref} not found`);\n }\n return resolveRef(resolvedSchema, components);\n }\n return schema as OpenAPIV3.SchemaObject;\n}\n\n/** Function to convert OpenAPI spec to function signatures and request builders */\nexport function openapiToFunction(openapiSpec: OpenAPIV3.Document): {\n functionSignatures: FunctionSignature[];\n requestBuilders: Record<string, ActionRequest>;\n} {\n const functionSignatures: FunctionSignature[] = [];\n const requestBuilders: Record<string, ActionRequest> = {};\n\n // Base URL from OpenAPI spec servers\n const baseUrl = openapiSpec.servers?.[0]?.url ?? '';\n\n // Iterate over each path and method in the OpenAPI spec\n for (const [path, methods] of Object.entries(openapiSpec.paths)) {\n for (const [method, operation] of Object.entries(methods as OpenAPIV3.PathsObject)) {\n const operationObj = operation as OpenAPIV3.OperationObject & {\n 'x-openai-isConsequential'?: boolean;\n };\n\n // Operation ID is used as the function name\n const operationId = operationObj.operationId || `${method}_${path}`;\n const description = operationObj.summary || operationObj.description || '';\n\n const parametersSchema: ParametersSchema = { type: 'object', properties: {}, required: [] };\n\n if (operationObj.requestBody) {\n const requestBody = operationObj.requestBody as OpenAPIV3.RequestBodyObject;\n const content = requestBody.content;\n const contentType = Object.keys(content)[0];\n const schema = content[contentType]?.schema;\n const resolvedSchema = resolveRef(\n schema as OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject,\n openapiSpec.components,\n );\n parametersSchema.properties['requestBody'] = resolvedSchema;\n }\n\n if (operationObj.parameters) {\n for (const param of operationObj.parameters) {\n const paramObj = param as OpenAPIV3.ParameterObject;\n const resolvedSchema = resolveRef(\n { ...paramObj.schema } as OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject,\n openapiSpec.components,\n );\n parametersSchema.properties[paramObj.name] = resolvedSchema;\n if (paramObj.required) {\n parametersSchema.required.push(paramObj.name);\n }\n if (paramObj.description && !('$$ref' in parametersSchema.properties[paramObj.name])) {\n parametersSchema.properties[paramObj.name].description = paramObj.description;\n }\n }\n }\n\n const functionSignature = new FunctionSignature(operationId, description, parametersSchema);\n functionSignatures.push(functionSignature);\n\n const actionRequest = new ActionRequest(\n baseUrl,\n path,\n method,\n operationId,\n !!operationObj['x-openai-isConsequential'], // Custom extension for consequential actions\n operationObj.requestBody ? 'application/json' : 'application/x-www-form-urlencoded',\n );\n\n requestBuilders[operationId] = actionRequest;\n }\n }\n\n return { functionSignatures, requestBuilders };\n}\n\nexport type ValidationResult = {\n status: boolean;\n message: string;\n spec?: OpenAPIV3.Document;\n};\n\nexport function validateAndParseOpenAPISpec(specString: string): ValidationResult {\n try {\n let parsedSpec;\n try {\n parsedSpec = JSON.parse(specString);\n } catch {\n parsedSpec = load(specString);\n }\n\n // Check for servers\n if (\n !parsedSpec.servers ||\n !Array.isArray(parsedSpec.servers) ||\n parsedSpec.servers.length === 0\n ) {\n return { status: false, message: 'Could not find a valid URL in `servers`' };\n }\n\n if (!parsedSpec.servers[0].url) {\n return { status: false, message: 'Could not find a valid URL in `servers`' };\n }\n\n // Check for paths\n const paths = parsedSpec.paths;\n if (!paths || typeof paths !== 'object' || Object.keys(paths).length === 0) {\n return { status: false, message: 'No paths found in the OpenAPI spec.' };\n }\n\n const components = parsedSpec.components?.schemas || {};\n const messages = [];\n\n for (const [path, methods] of Object.entries(paths)) {\n for (const [httpMethod, operation] of Object.entries(methods as OpenAPIV3.PathItemObject)) {\n // Ensure operation is a valid operation object\n const { responses } = operation as OpenAPIV3.OperationObject;\n if (typeof operation === 'object' && responses) {\n for (const [statusCode, response] of Object.entries(responses)) {\n const content = (response as OpenAPIV3.ResponseObject).content;\n if (content && content['application/json'] && content['application/json'].schema) {\n const schema = content['application/json'].schema;\n if ('$ref' in schema && typeof schema.$ref === 'string') {\n const refName = schema.$ref.split('/').pop();\n if (refName && !components[refName]) {\n messages.push(\n `In context=('paths', '${path}', '${httpMethod}', '${statusCode}', 'response', 'content', 'application/json', 'schema'), reference to unknown component ${refName}; using empty schema`,\n );\n }\n }\n }\n }\n }\n }\n }\n\n return {\n status: true,\n message: messages.join('\\n') || 'OpenAPI spec is valid.',\n spec: parsedSpec,\n };\n } catch (error) {\n return { status: false, message: 'Error parsing OpenAPI spec.' };\n }\n}\n","import type { TSubmission, TMessage, TEndpointOption } from './types';\nimport { tConvoUpdateSchema, EModelEndpoint } from './schemas';\nimport { EndpointURLs } from './config';\n\nexport default function createPayload(submission: TSubmission) {\n const { conversation, message, messages, endpointOption, isEdited, isContinued } = submission;\n const { conversationId } = tConvoUpdateSchema.parse(conversation);\n const { endpoint, endpointType } = endpointOption as {\n endpoint: EModelEndpoint;\n endpointType?: EModelEndpoint;\n };\n\n let server = EndpointURLs[endpointType ?? endpoint];\n\n if (isEdited && endpoint === EModelEndpoint.assistants) {\n server += '/modify';\n } else if (isEdited) {\n server = server.replace('/ask/', '/edit/');\n }\n\n type Payload = Partial<TMessage> &\n Partial<TEndpointOption> & {\n isContinued: boolean;\n conversationId: string | null;\n messages?: typeof messages;\n };\n\n const payload: Payload = {\n ...message,\n ...endpointOption,\n isContinued: !!(isEdited && isContinued),\n conversationId,\n };\n\n return { server, payload };\n}\n"],"names":["Tools","AnnotationTypes","ContentTypes","StepTypes","ToolCallTypes","StepStatus","MessageContentTypes","RunStatus","AuthTypeEnum","AuthorizationTypeEnum","TokenExchangeMethodEnum","FilePurpose","actionDelimiter","actionDomainSeparator","hostImageIdSuffix","hostImageNamePrefix","AssistantStreamEvents","defaultOrderQuery","order","limit","AuthType","isUUID","z","string","uuid","EModelEndpoint","ImageDetail","authTypeSchema","nativeEnum","EAgent","imageDetailNumeric","_a","low","auto","high","imageDetailValue","eImageDetailSchema","defaultAssistantFormValues","assistant","id","name","description","instructions","model","functions","code_interpreter","image_vision","retrieval","ImageVisionTool","_b","type","function","parameters","properties","required","isImageVisionTool","tool","openAISettings","default","temperature","min","max","step","top_p","presence_penalty","frequency_penalty","resendFiles","maxContextTokens","undefined","max_tokens","imageDetail","googleSettings","maxOutputTokens","maxGemini","defaultGemini","topP","topK","endpointSettings","_c","openAI","google","eModelEndpointSchema","extendedModelEndpointSchema","union","tPluginAuthConfigSchema","object","authField","label","tPluginSchema","pluginKey","icon","authConfig","array","authenticated","boolean","optional","isButton","tExampleSchema","input","content","output","agentOptionSettings","agent","options","classic","skipCompletion","eAgentOptionsSchema","tAgentOptionsSchema","number","tMessageSchema","messageId","endpoint","clientId","nullable","conversationId","parentMessageId","responseMessageId","overrideParentMessageId","bg","title","or","literal","sender","text","generation","isEdited","isCreatedByUser","error","createdAt","Date","toISOString","updatedAt","current","unfinished","searchResult","finish_reason","thread_id","iconURL","coerceNumber","transform","val","trim","parseFloat","tConversationSchema","user","endpointType","suggestions","messages","tools","systemMessage","modelLabel","examples","chatGptLabel","userLabel","promptPrefix","context","jailbreak","jailbreakConversationId","conversationSignature","invocationId","toneStyle","agentOptions","file_ids","resendImages","assistant_id","presetOverride","record","unknown","stop","greeting","spec","tPresetSchema","omit","merge","presetId","defaultPreset","tConvoUpdateSchema","tPresetUpdateSchema","openAISchema","pick","obj","_d","_e","_f","_g","_h","_j","_k","_l","_m","_o","_p","_q","catch","googleSchema","isGemini","toLowerCase","includes","maxOutputTokensMax","maxOutputTokensDefault","Math","__assign","bingAISchema","anthropicSchema","chatGPTBrowserSchema","gptPluginsSchema","removeNullishValues","newObj","Object","keys","forEach","key","assistantSchema","compactAssistantSchema","compactOpenAISchema","compactGoogleSchema","compactAnthropicSchema","compactChatGPTSchema","compactPluginsSchema","length","supportsFiles","assistants","azureOpenAI","anthropic","custom","excelFileTypes","fullMimeTypesList","__spreadArray","codeInterpreterMimeTypesList","retrievalMimeTypesList","imageExtRegex","excelMimeTypes","textMimeTypes","applicationMimeTypes","imageMimeTypes","supportedMimeTypes","codeInterpreterMimeTypes","codeTypeMapping","c","cs","cpp","md","php","py","rb","tex","js","sh","ts","tar","zip","retrievalMimeTypes","megabyte","mbToBytes","mb","fileConfig","endpoints","fileLimit","fileSizeLimit","totalSizeLimit","disabled","serverFileSizeLimit","avatarSizeLimit","checkType","fileType","supportedTypes","some","regex","test","supportedMimeTypesSchema","any","refine","mimeTypes","every","mimeType","RegExp","message","endpointFileConfigSchema","fileConfigSchema","convertStringsToRegex","patterns","reduce","acc","pattern","push","console","mergeFileConfig","dynamic","mergedConfig","dynamicEndpoint","mergedEndpoint","field","FileSources","FileContext","tModelSpecSchema","preset","showIconInMenu","showIconInHeader","authType","specsConfigSchema","enforce","prioritize","list","SettingsViews","defaultSocialLogins","defaultRetrievalModels","fileSourceSchema","getSchemaDefaults","schema","shape","entries","map","value","ZodDefault","_def","defaultValue","fromEntries","Capabilities","modelConfigSchema","deploymentName","version","azureBaseSchema","apiKey","serverless","instanceName","addParams","dropParams","forcePrompt","baseURL","additionalHeaders","azureGroupSchema","group","models","and","azureGroupConfigsSchema","EImageOutputType","assistantEndpointSchema","disableBuilder","pollIntervalMs","timeoutMs","supportedIds","excludedIds","retrievalModels","capabilities","actions","fetch","userIdQuery","titleConvo","titleMethod","titleModel","headers","endpointSchema","safeParse","success","concat","values","join","summarize","summaryModel","modelDisplayLabel","customOrder","azureEndpointSchema","groups","plugins","partial","rateLimitSchema","fileUploads","ipMax","ipWindowInMinutes","userMax","userWindowInMinutes","conversationsImport","KnownEndpoints","FetchTokenConfig","configSchema","cache","secureImageLinks","imageOutputType","PNG","includedTools","filteredTools","interface","privacyPolicy","externalUrl","openNewTab","termsOfService","endpointsMenu","modelSelect","sidePanel","presets","fileStrategy","local","registration","socialLogins","allowedDomains","rateLimits","modelSpecs","strict","data","getConfigDefaults","VisionModes","defaultEndpoints","bingAI","chatGPTBrowser","gptPlugins","alternateName","defaultModels","openAIModels","initialModelsConfig","initial","filter","str","EndpointURLs","modularEndpoints","Set","supportsBalanceCheck","visionModels","validateVisionModel","additionalModels","availableModels","visionModel","CacheKeys","ViolationTypes","ErrorTypes","AuthKeys","ImageDetailCost","SettingsTabValues","Constants","LocalStorageKeys","ForkOptions","CohereConstants","imageGenTools","endpointSchemas","getEnabledEndpoints","endpointsEnv","process","env","ENDPOINTS","enabledEndpoints","split","orderEndpointsConfig","endpointsConfig","endpointKeys","defaultCustomIndex","indexOf","accumulatedConfig","currentEndpointKey","isCustom","index","errorsToString","errors","path","envVarRegex","extractEnvVariable","envVarMatch","match","resolveHeaders","resolvedHeaders","Array","isArray","getFirstDefinedValue","possibleValues","returnValue","_i","possibleValues_1","ComponentTypes","SettingTypes","OptionTypes","parseConvo","conversation","Error","convo","parse","secondaryModels","getResponseSender","endpointOption","compactEndpointSchemas","parseCompactConvo","deprecatedAzureVariables","conflictingAzureVariables","validateAzureGroups","configs","isValid","modelNames","modelGroupMap","groupMap","result","groupName","rest","modelName","mapModelToAzureConfig","modelConfig","groupConfig","result_1","azureOptions","azureOpenAIApiKey","apiKeyValue","modelDetails","azureOpenAIApiInstanceName","azureOpenAIApiDeploymentName","azureOpenAIApiVersion","mapGroupToAzureConfig","firstModelName","requiredSettingFields","generateDynamicSchema","settings","schemaFields","settings_1","setting","range","minText","maxText","minTags","maxTags","Number","Boolean","String","Enum","warn","ZodArray","enum","ZodTypeToSettingType","ZodString","ZodNumber","ZodBoolean","validateSettingDefinitions","columnsSet","settings_2","columns","code","ZodIssueCode","add","size","next","settings_3","requiredSettingFields_1","settingTypes","component","Tags","Input","Textarea","placeholder","Slider","includeInput","round","Checkbox","Switch","Dropdown","columnSpan","floor","optionType","Custom","conversationSchema","zodType","typeName","isNaN","ZodError","QueryKeys","MutationKeys","generateOpenAISchema","customOpenAI","defaults","generateGoogleSchema","customGoogle","setAcceptLanguageHeader","axios","common","setTokenHeader","token","keysEndpoint","conversationsRoot","conversations","pageNumber","isArchived","updateConversation","deleteConversation","importConversationJobStatus","jobId","search","q","url","queryParams","URLSearchParams","toString","images","_post","post","JSON","stringify","sent","isRefreshing","failedQueue","refreshToken","retry","endpoints.refreshToken","processQueue","prom","reject","resolve","interceptors","response","use","__awaiter","originalRequest","config","status","_retry","Promise","err_1","window","dispatchEvent","CustomEvent","detail","location","href","err_2","request","get","getResponse","postMultiPart","formData","put","delete","deleteWithOptions","patch","abortKey","endpoints.abortRequest","arg","payload","endpoints.updateConversation","endpoints.deleteConversation","endpoints.assistants","action_id","__generator","this","files","endpoints.conversationById","endpoints.conversations","userId","file_id","responseType","Accept","endpoints.messages","params","searchQuery","endpoints.search","endpoints.importConversationJobStatus","endpoints.revokeUserKey","body","__rest","endpoints.images","endpoints.userKeyQuery","SSE","INITIALIZING","CONNECTING","OPEN","CLOSED","method","withCredentials","FIELD_SEPARATOR","listeners","xhr","readyState","progress","chunk","addEventListener","listener","removeEventListener","filtered","element","e","source","onHandler","hasOwnProperty","call","defaultPrevented","callback","_setReadyState","state","event","_onStreamFailure","currentTarget","close","_onStreamAbort","_onStreamProgress","async","refreshResponse","Authorization","stream","err","responseText","substring","part","_parseEventChunk","bind","_onStreamLoaded","line","trimRight","trimLeft","_checkStreamClosed","XMLHttpRequest","DONE","header","open","setRequestHeader","send","abort","sha1","crypto","createHash","update","digest","createURL","domain","URL","FunctionSignature","prototype","toObjectTool","ActionRequest","operation","isConsequential","contentType","authHeaders","setParams","operationHash","paramPattern","replace","encodeURIComponent","setAuth","metadata","auth","authorization_type","custom_auth_header","authorization_url","client_url","scope","token_exchange_method","api_key","oauth_client_id","oauth_client_secret","isApiKey","ServiceHttp","isOAuth","OAuth","Basic","basicToken","Buffer","from","Bearer","authToken","client_id","client_secret","grant_type","tokenResponse","access_token","execute","resolveRef","components","refPath","$ref","resolvedSchema","schemas","openapiToFunction","openapiSpec","functionSignatures","requestBuilders","baseUrl","servers","paths","methods","operationObj","operationId","summary","parametersSchema","requestBody","paramObj","functionSignature","actionRequest","validateAndParseOpenAPISpec","specString","parsedSpec","load","httpMethod","responses","statusCode","refName","pop","createPayload","submission","isContinued","server"],"mappings":"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,IAA7B+I,EAAO9I,0BACF8I,EAAO9I,kBAEa,aAAzBlC,EAAAgL,EAAO3D,4BAAOuE,gBACTZ,EAAO3D,MAId2D,EAAO9C,cACP8C,EAAO9C,aAAa3D,QAAUzE,EAAOe,YACE,IAAvCmK,EAAO9C,aAAaxD,gBACU,kBAA9BsG,EAAO9C,aAAatH,OACgB,IAApCoK,EAAO9C,aAAatG,oBAEboJ,EAAO9C,aAGT6C,GAAoBC,EAC7B,IACCd,OAAM,WAAM,MAAC,CAAE,CAAC,IC52BN2B,KAAa7L,GAAA,CAAA,GACvBN,EAAesD,SAAS,EACzBhD,GAACN,EAAeuD,SAAS,EACzBjD,GAACN,EAAeoM,aAAa,EAC7B9L,GAACN,EAAeqM,cAAc,EAC9B/L,GAACN,EAAesM,YAAY,EAC5BhM,GAACN,EAAeuM,SAAS,MAGdC,GAAiB,CAC5B,2BACA,sBACA,wBACA,yBACA,sBACA,6BACA,kBACA,oBACA,qEAGWC,GAAiBC,EAAA,CAC5B,WACA,aACA,kBACA,0EACA,YACA,cACA,mBACA,gBACA,kBACA,aACA,4EACA,gBACA,uBACA,cACA,aACA,aACA,WACA,aACA,kBACA,YACA,YACA,oBACA,yBACA,kBACA,mBACGF,OAGQG,GAA4BD,EAAA,CACvC,WACA,aACA,kBACA,0EACA,YACA,cACA,mBACA,gBACA,kBACA,aACA,4EACA,gBACA,uBACA,cACA,aACA,aACA,WACA,aACA,kBACA,YACA,YACA,oBACA,yBACA,kBACA,mBACGF,OAGQI,GAAyB,CACpC,WACA,aACA,0EACA,YACA,cACA,mBACA,gBACA,kBACA,aACA,4EACA,gBACA,uBACA,cACA,aACA,cAGWC,GAAgB,8BAEhBC,GACX,wJAEWC,GACX,qHAEWC,GACX,wLAEWC,GAAiB,+BAEjBC,GAAqB,CAChCH,GACAD,GACAE,GACAC,IAGWE,GAA2B,CACtCJ,GACAD,GACAE,GACAC,IAGWG,GAA6C,CACxDC,EAAG,WACHC,GAAI,gBACJC,IAAK,aACLC,GAAI,gBACJC,IAAK,aACLC,GAAI,gBACJC,GAAI,cACJC,IAAK,aACLC,GAAI,kBACJ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"}
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../src/types/assistants.ts","../src/schemas.ts","../src/file-config.ts","../src/models.ts","../src/types/files.ts","../src/config.ts","../src/parsers.ts","../src/azure.ts","../src/generate.ts","../src/keys.ts","../src/headers-helpers.ts","../src/api-endpoints.ts","../src/request.ts","../src/data-service.ts","../src/sse.js","../src/actions.ts","../src/createPayload.ts"],"sourcesContent":["import type { OpenAPIV3 } from 'openapi-types';\nimport type { AssistantsEndpoint } from 'src/schemas';\nimport type { TFile } from './files';\n\nexport type Schema = OpenAPIV3.SchemaObject & { description?: string };\nexport type Reference = OpenAPIV3.ReferenceObject & { description?: string };\n\nexport type Metadata = {\n avatar?: string;\n author?: string;\n} & {\n [key: string]: unknown;\n};\n\nexport enum Tools {\n code_interpreter = 'code_interpreter',\n file_search = 'file_search',\n retrieval = 'retrieval',\n function = 'function',\n}\n\nexport enum EToolResources {\n code_interpreter = 'code_interpreter',\n file_search = 'file_search',\n}\n\nexport type Tool = {\n [type: string]: Tools;\n};\n\nexport type FunctionTool = {\n type: Tools;\n function?: {\n description: string;\n name: string;\n parameters: Record<string, unknown>;\n };\n};\n\n/**\n * A set of resources that are used by the assistant's tools. The resources are\n * specific to the type of tool. For example, the `code_interpreter` tool requires\n * a list of file IDs, while the `file_search` tool requires a list of vector store\n * IDs.\n */\nexport interface ToolResources {\n code_interpreter?: CodeInterpreterResource;\n file_search?: FileSearchResource;\n}\nexport interface CodeInterpreterResource {\n /**\n * A list of [file](https://platform.openai.com/docs/api-reference/files) IDs made\n * available to the `code_interpreter`` tool. There can be a maximum of 20 files\n * associated with the tool.\n */\n file_ids?: Array<string>;\n}\n\nexport interface FileSearchResource {\n /**\n * The ID of the\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object)\n * attached to this assistant. There can be a maximum of 1 vector store attached to\n * the assistant.\n */\n vector_store_ids?: Array<string>;\n}\n\nexport type Assistant = {\n id: string;\n created_at: number;\n description: string | null;\n file_ids: string[];\n instructions: string | null;\n metadata: Metadata | null;\n model: string;\n name: string | null;\n object: string;\n tools: FunctionTool[];\n tool_resources?: ToolResources;\n};\n\nexport type TAssistantsMap = Record<AssistantsEndpoint, Record<string, Assistant>>;\n\nexport type AssistantCreateParams = {\n model: string;\n description?: string | null;\n file_ids?: string[];\n instructions?: string | null;\n metadata?: Metadata | null;\n name?: string | null;\n tools?: Array<FunctionTool | string>;\n endpoint: AssistantsEndpoint;\n version: number | string;\n};\n\nexport type AssistantUpdateParams = {\n model?: string;\n description?: string | null;\n file_ids?: string[];\n instructions?: string | null;\n metadata?: Metadata | null;\n name?: string | null;\n tools?: Array<FunctionTool | string>;\n tool_resources?: ToolResources;\n endpoint: AssistantsEndpoint;\n};\n\nexport type AssistantListParams = {\n limit?: number;\n before?: string | null;\n after?: string | null;\n order?: 'asc' | 'desc';\n endpoint: AssistantsEndpoint;\n};\n\nexport type AssistantListResponse = {\n object: string;\n data: Assistant[];\n first_id: string;\n last_id: string;\n has_more: boolean;\n};\n\nexport type File = {\n file_id: string;\n id?: string;\n temp_file_id?: string;\n bytes: number;\n created_at: number;\n filename: string;\n object: string;\n purpose: 'fine-tune' | 'fine-tune-results' | 'assistants' | 'assistants_output';\n};\n\n/**\n * Details of the Code Interpreter tool call the run step was involved in.\n * Includes the tool call ID, the code interpreter definition, and the type of tool call.\n */\nexport type CodeToolCall = {\n id: string; // The ID of the tool call.\n code_interpreter: {\n input: string; // The input to the Code Interpreter tool call.\n outputs: Array<Record<string, unknown>>; // The outputs from the Code Interpreter tool call.\n };\n type: 'code_interpreter'; // The type of tool call, always 'code_interpreter'.\n};\n\n/**\n * Details of a Function tool call the run step was involved in.\n * Includes the tool call ID, the function definition, and the type of tool call.\n */\nexport type FunctionToolCall = {\n id: string; // The ID of the tool call object.\n function: {\n arguments: string; // The arguments passed to the function.\n name: string; // The name of the function.\n output: string | null; // The output of the function, null if not submitted.\n };\n type: 'function'; // The type of tool call, always 'function'.\n};\n\n/**\n * Details of a Retrieval tool call the run step was involved in.\n * Includes the tool call ID and the type of tool call.\n */\nexport type RetrievalToolCall = {\n id: string; // The ID of the tool call object.\n retrieval: unknown; // An empty object for now.\n type: 'retrieval'; // The type of tool call, always 'retrieval'.\n};\n\n/**\n * Details of a Retrieval tool call the run step was involved in.\n * Includes the tool call ID and the type of tool call.\n */\nexport type FileSearchToolCall = {\n id: string; // The ID of the tool call object.\n file_search: unknown; // An empty object for now.\n type: 'file_search'; // The type of tool call, always 'retrieval'.\n};\n\n/**\n * Details of the tool calls involved in a run step.\n * Can be associated with one of three types of tools: `code_interpreter`, `retrieval`, or `function`.\n */\nexport type ToolCallsStepDetails = {\n tool_calls: Array<CodeToolCall | RetrievalToolCall | FileSearchToolCall | FunctionToolCall>; // An array of tool calls the run step was involved in.\n type: 'tool_calls'; // Always 'tool_calls'.\n};\n\nexport type ImageFile = TFile & {\n /**\n * The [File](https://platform.openai.com/docs/api-reference/files) ID of the image\n * in the message content.\n */\n file_id: string;\n filename: string;\n filepath: string;\n height: number;\n width: number;\n /**\n * Prompt used to generate the image if applicable.\n */\n prompt?: string;\n /**\n * Additional metadata used to generate or about the image/tool_call.\n */\n metadata?: Record<string, unknown>;\n};\n\n// FileCitation.ts\nexport type FileCitation = {\n end_index: number;\n file_citation: FileCitationDetails;\n start_index: number;\n text: string;\n type: 'file_citation';\n};\n\nexport type FileCitationDetails = {\n file_id: string;\n quote: string;\n};\n\nexport type FilePath = {\n end_index: number;\n file_path: FilePathDetails;\n start_index: number;\n text: string;\n type: 'file_path';\n};\n\nexport type FilePathDetails = {\n file_id: string;\n};\n\nexport type Text = {\n annotations?: Array<FileCitation | FilePath>;\n value: string;\n};\n\nexport enum AnnotationTypes {\n FILE_CITATION = 'file_citation',\n FILE_PATH = 'file_path',\n}\n\nexport enum ContentTypes {\n TEXT = 'text',\n TOOL_CALL = 'tool_call',\n IMAGE_FILE = 'image_file',\n ERROR = 'error',\n}\n\nexport enum StepTypes {\n TOOL_CALLS = 'tool_calls',\n MESSAGE_CREATION = 'message_creation',\n}\n\nexport enum ToolCallTypes {\n FUNCTION = 'function',\n RETRIEVAL = 'retrieval',\n FILE_SEARCH = 'file_search',\n CODE_INTERPRETER = 'code_interpreter',\n}\n\nexport enum StepStatus {\n IN_PROGRESS = 'in_progress',\n CANCELLED = 'cancelled',\n FAILED = 'failed',\n COMPLETED = 'completed',\n EXPIRED = 'expired',\n}\n\nexport enum MessageContentTypes {\n TEXT = 'text',\n IMAGE_FILE = 'image_file',\n}\n\n//enum for RunStatus\n// The status of the run: queued, in_progress, requires_action, cancelling, cancelled, failed, completed, or expired.\nexport enum RunStatus {\n QUEUED = 'queued',\n IN_PROGRESS = 'in_progress',\n REQUIRES_ACTION = 'requires_action',\n CANCELLING = 'cancelling',\n CANCELLED = 'cancelled',\n FAILED = 'failed',\n COMPLETED = 'completed',\n EXPIRED = 'expired',\n}\n\nexport type PartMetadata = {\n progress?: number;\n asset_pointer?: string;\n status?: string;\n action?: boolean;\n};\n\nexport type ContentPart = (\n | CodeToolCall\n | RetrievalToolCall\n | FileSearchToolCall\n | FunctionToolCall\n | ImageFile\n | Text\n) &\n PartMetadata;\n\nexport type TMessageContentParts =\n | { type: ContentTypes.ERROR; text: Text & PartMetadata }\n | { type: ContentTypes.TEXT; text: Text & PartMetadata }\n | {\n type: ContentTypes.TOOL_CALL;\n tool_call: (CodeToolCall | RetrievalToolCall | FileSearchToolCall | FunctionToolCall) &\n PartMetadata;\n }\n | { type: ContentTypes.IMAGE_FILE; image_file: ImageFile & PartMetadata };\n\nexport type StreamContentData = TMessageContentParts & {\n /** The index of the current content part */\n index: number;\n /** The current text content was already served but edited to replace elements therein */\n edited?: boolean;\n};\n\nexport type TContentData = StreamContentData & {\n messageId: string;\n conversationId: string;\n userMessageId: string;\n thread_id: string;\n stream?: boolean;\n};\n\nexport const actionDelimiter = '_action_';\nexport const actionDomainSeparator = '---';\nexport const hostImageIdSuffix = '_host_copy';\nexport const hostImageNamePrefix = 'host_copy_';\n\nexport enum AuthTypeEnum {\n ServiceHttp = 'service_http',\n OAuth = 'oauth',\n None = 'none',\n}\n\nexport enum AuthorizationTypeEnum {\n Bearer = 'bearer',\n Basic = 'basic',\n Custom = 'custom',\n}\n\nexport enum TokenExchangeMethodEnum {\n DefaultPost = 'default_post',\n BasicAuthHeader = 'basic_auth_header',\n}\n\nexport type ActionAuth = {\n authorization_type?: AuthorizationTypeEnum;\n custom_auth_header?: string;\n type?: AuthTypeEnum;\n authorization_content_type?: string;\n authorization_url?: string;\n client_url?: string;\n scope?: string;\n token_exchange_method?: TokenExchangeMethodEnum;\n};\n\nexport type ActionMetadata = {\n api_key?: string;\n auth?: ActionAuth;\n domain?: string;\n privacy_policy_url?: string;\n raw_spec?: string;\n oauth_client_id?: string;\n oauth_client_secret?: string;\n};\n\nexport type Action = {\n action_id: string;\n assistant_id: string;\n type?: string;\n settings?: Record<string, unknown>;\n metadata: ActionMetadata;\n version: number | string;\n};\n\nexport type AssistantAvatar = {\n filepath: string;\n source: string;\n};\n\nexport type AssistantDocument = {\n user: string;\n assistant_id: string;\n avatar?: AssistantAvatar;\n access_level?: number;\n file_ids?: string[];\n actions?: string[];\n createdAt?: Date;\n updatedAt?: Date;\n};\n\nexport enum FilePurpose {\n Vision = 'vision',\n FineTune = 'fine-tune',\n FineTuneResults = 'fine-tune-results',\n Assistants = 'assistants',\n AssistantsOutput = 'assistants_output',\n}\n\nexport const defaultOrderQuery: {\n order: 'desc';\n limit: 100;\n} = {\n order: 'desc',\n limit: 100,\n};\n\nexport enum AssistantStreamEvents {\n ThreadCreated = 'thread.created',\n ThreadRunCreated = 'thread.run.created',\n ThreadRunQueued = 'thread.run.queued',\n ThreadRunInProgress = 'thread.run.in_progress',\n ThreadRunRequiresAction = 'thread.run.requires_action',\n ThreadRunCompleted = 'thread.run.completed',\n ThreadRunFailed = 'thread.run.failed',\n ThreadRunCancelling = 'thread.run.cancelling',\n ThreadRunCancelled = 'thread.run.cancelled',\n ThreadRunExpired = 'thread.run.expired',\n ThreadRunStepCreated = 'thread.run.step.created',\n ThreadRunStepInProgress = 'thread.run.step.in_progress',\n ThreadRunStepCompleted = 'thread.run.step.completed',\n ThreadRunStepFailed = 'thread.run.step.failed',\n ThreadRunStepCancelled = 'thread.run.step.cancelled',\n ThreadRunStepExpired = 'thread.run.step.expired',\n ThreadRunStepDelta = 'thread.run.step.delta',\n ThreadMessageCreated = 'thread.message.created',\n ThreadMessageInProgress = 'thread.message.in_progress',\n ThreadMessageCompleted = 'thread.message.completed',\n ThreadMessageIncomplete = 'thread.message.incomplete',\n ThreadMessageDelta = 'thread.message.delta',\n ErrorEvent = 'error',\n}\n","import { z } from 'zod';\nimport { Tools } from './types/assistants';\nimport type { TMessageContentParts, FunctionTool, FunctionToolCall } from './types/assistants';\nimport type { TFile } from './types/files';\n\nexport const isUUID = z.string().uuid();\n\nexport enum AuthType {\n OVERRIDE_AUTH = 'override_auth',\n USER_PROVIDED = 'user_provided',\n SYSTEM_DEFINED = 'SYSTEM_DEFINED',\n}\n\nexport const authTypeSchema = z.nativeEnum(AuthType);\n\nexport enum EModelEndpoint {\n azureOpenAI = 'azureOpenAI',\n openAI = 'openAI',\n bingAI = 'bingAI',\n chatGPTBrowser = 'chatGPTBrowser',\n google = 'google',\n gptPlugins = 'gptPlugins',\n anthropic = 'anthropic',\n assistants = 'assistants',\n azureAssistants = 'azureAssistants',\n custom = 'custom',\n}\n\nexport type AssistantsEndpoint = EModelEndpoint.assistants | EModelEndpoint.azureAssistants;\n\nexport const isAssistantsEndpoint = (endpoint?: AssistantsEndpoint | null | string): boolean => {\n if (!endpoint) {\n return false;\n }\n return endpoint.toLowerCase().endsWith(EModelEndpoint.assistants);\n};\n\nexport enum ImageDetail {\n low = 'low',\n auto = 'auto',\n high = 'high',\n}\n\nexport const imageDetailNumeric = {\n [ImageDetail.low]: 0,\n [ImageDetail.auto]: 1,\n [ImageDetail.high]: 2,\n};\n\nexport const imageDetailValue = {\n 0: ImageDetail.low,\n 1: ImageDetail.auto,\n 2: ImageDetail.high,\n};\n\nexport const eImageDetailSchema = z.nativeEnum(ImageDetail);\n\nexport const defaultAssistantFormValues = {\n assistant: '',\n id: '',\n name: '',\n description: '',\n instructions: '',\n model: '',\n functions: [],\n code_interpreter: false,\n image_vision: false,\n retrieval: false,\n};\n\nexport const ImageVisionTool: FunctionTool = {\n type: Tools.function,\n [Tools.function]: {\n name: 'image_vision',\n description: 'Get detailed text descriptions for all current image attachments.',\n parameters: {\n type: 'object',\n properties: {},\n required: [],\n },\n },\n};\n\nexport const isImageVisionTool = (tool: FunctionTool | FunctionToolCall) =>\n tool.type === 'function' && tool.function?.name === ImageVisionTool?.function?.name;\n\nexport const openAISettings = {\n model: {\n default: 'gpt-4o',\n },\n temperature: {\n min: 0,\n max: 1,\n step: 0.01,\n default: 1,\n },\n top_p: {\n min: 0,\n max: 1,\n step: 0.01,\n default: 1,\n },\n presence_penalty: {\n min: 0,\n max: 2,\n step: 0.01,\n default: 0,\n },\n frequency_penalty: {\n min: 0,\n max: 2,\n step: 0.01,\n default: 0,\n },\n resendFiles: {\n default: true,\n },\n maxContextTokens: {\n default: undefined,\n },\n max_tokens: {\n default: undefined,\n },\n imageDetail: {\n default: ImageDetail.auto,\n },\n};\n\nexport const googleSettings = {\n model: {\n default: 'gemini-1.5-flash-latest',\n },\n maxOutputTokens: {\n min: 1,\n max: 8192,\n step: 1,\n default: 8192,\n },\n temperature: {\n min: 0,\n max: 2,\n step: 0.01,\n default: 1,\n },\n topP: {\n min: 0,\n max: 1,\n step: 0.01,\n default: 0.95,\n },\n topK: {\n min: 1,\n max: 40,\n step: 0.01,\n default: 40,\n },\n};\n\nexport const endpointSettings = {\n [EModelEndpoint.openAI]: openAISettings,\n [EModelEndpoint.google]: googleSettings,\n};\n\nconst google = endpointSettings[EModelEndpoint.google];\n\nexport const eModelEndpointSchema = z.nativeEnum(EModelEndpoint);\n\nexport const extendedModelEndpointSchema = z.union([eModelEndpointSchema, z.string()]);\n\nexport const tPluginAuthConfigSchema = z.object({\n authField: z.string(),\n label: z.string(),\n description: z.string(),\n});\n\nexport type TPluginAuthConfig = z.infer<typeof tPluginAuthConfigSchema>;\n\nexport const tPluginSchema = z.object({\n name: z.string(),\n pluginKey: z.string(),\n description: z.string(),\n icon: z.string(),\n authConfig: z.array(tPluginAuthConfigSchema),\n authenticated: z.boolean().optional(),\n isButton: z.boolean().optional(),\n});\n\nexport type TPlugin = z.infer<typeof tPluginSchema>;\n\nexport type TInput = {\n inputStr: string;\n};\n\nexport type TResPlugin = {\n plugin: string;\n input: string;\n thought: string;\n loading?: boolean;\n outputs?: string;\n latest?: string;\n inputs?: TInput[];\n};\n\nexport const tExampleSchema = z.object({\n input: z.object({\n content: z.string(),\n }),\n output: z.object({\n content: z.string(),\n }),\n});\n\nexport type TExample = z.infer<typeof tExampleSchema>;\n\nexport enum EAgent {\n functions = 'functions',\n classic = 'classic',\n}\n\nexport const agentOptionSettings = {\n model: {\n default: 'gpt-4o',\n },\n temperature: {\n min: 0,\n max: 1,\n step: 0.01,\n default: 0,\n },\n agent: {\n default: EAgent.functions,\n options: [EAgent.functions, EAgent.classic],\n },\n skipCompletion: {\n default: true,\n },\n};\n\nexport const eAgentOptionsSchema = z.nativeEnum(EAgent);\n\nexport const tAgentOptionsSchema = z.object({\n agent: z.string().default(EAgent.functions),\n skipCompletion: z.boolean().default(agentOptionSettings.skipCompletion.default),\n model: z.string(),\n temperature: z.number().default(agentOptionSettings.temperature.default),\n});\n\nexport const tMessageSchema = z.object({\n messageId: z.string(),\n endpoint: z.string().optional(),\n clientId: z.string().nullable().optional(),\n conversationId: z.string().nullable(),\n parentMessageId: z.string().nullable(),\n responseMessageId: z.string().nullable().optional(),\n overrideParentMessageId: z.string().nullable().optional(),\n bg: z.string().nullable().optional(),\n model: z.string().nullable().optional(),\n title: z.string().nullable().or(z.literal('New Chat')).default('New Chat'),\n sender: z.string(),\n text: z.string(),\n generation: z.string().nullable().optional(),\n isEdited: z.boolean().optional(),\n isCreatedByUser: z.boolean(),\n error: z.boolean(),\n createdAt: z\n .string()\n .optional()\n .default(() => new Date().toISOString()),\n updatedAt: z\n .string()\n .optional()\n .default(() => new Date().toISOString()),\n current: z.boolean().optional(),\n unfinished: z.boolean().optional(),\n searchResult: z.boolean().optional(),\n finish_reason: z.string().optional(),\n /* assistant */\n thread_id: z.string().optional(),\n /* frontend components */\n iconURL: z.string().optional(),\n});\n\nexport type TMessage = z.input<typeof tMessageSchema> & {\n children?: TMessage[];\n plugin?: TResPlugin | null;\n plugins?: TResPlugin[];\n content?: TMessageContentParts[];\n files?: Partial<TFile>[];\n};\n\nexport const coerceNumber = z.union([z.number(), z.string()]).transform((val) => {\n if (typeof val === 'string') {\n return val.trim() === '' ? undefined : parseFloat(val);\n }\n return val;\n});\n\nexport const tConversationSchema = z.object({\n conversationId: z.string().nullable(),\n title: z.string().nullable().or(z.literal('New Chat')).default('New Chat'),\n user: z.string().optional(),\n endpoint: eModelEndpointSchema.nullable(),\n endpointType: eModelEndpointSchema.optional(),\n suggestions: z.array(z.string()).optional(),\n messages: z.array(z.string()).optional(),\n tools: z.union([z.array(tPluginSchema), z.array(z.string())]).optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n modelLabel: z.string().nullable().optional(),\n examples: z.array(tExampleSchema).optional(),\n /* Prefer modelLabel over chatGptLabel */\n chatGptLabel: z.string().nullable().optional(),\n userLabel: z.string().optional(),\n model: z.string().nullable().optional(),\n promptPrefix: z.string().nullable().optional(),\n temperature: z.number().optional(),\n topP: z.number().optional(),\n topK: z.number().optional(),\n context: z.string().nullable().optional(),\n top_p: z.number().optional(),\n frequency_penalty: z.number().optional(),\n presence_penalty: z.number().optional(),\n parentMessageId: z.string().optional(),\n maxOutputTokens: z.number().optional(),\n agentOptions: tAgentOptionsSchema.nullable().optional(),\n file_ids: z.array(z.string()).optional(),\n maxContextTokens: coerceNumber.optional(),\n max_tokens: coerceNumber.optional(),\n /* vision */\n resendFiles: z.boolean().optional(),\n imageDetail: eImageDetailSchema.optional(),\n /* assistant */\n assistant_id: z.string().optional(),\n instructions: z.string().optional(),\n /** Used to overwrite active conversation settings when saving a Preset */\n presetOverride: z.record(z.unknown()).optional(),\n stop: z.array(z.string()).optional(),\n /* frontend components */\n iconURL: z.string().optional(),\n greeting: z.string().optional(),\n spec: z.string().optional(),\n /*\n Deprecated fields\n */\n /** @deprecated */\n systemMessage: z.string().nullable().optional(),\n /** @deprecated */\n jailbreak: z.boolean().optional(),\n /** @deprecated */\n jailbreakConversationId: z.string().nullable().optional(),\n /** @deprecated */\n conversationSignature: z.string().nullable().optional(),\n /** @deprecated */\n clientId: z.string().nullable().optional(),\n /** @deprecated */\n invocationId: z.number().nullable().optional(),\n /** @deprecated */\n toneStyle: z.string().nullable().optional(),\n /** @deprecated */\n resendImages: z.boolean().optional(),\n});\n\nexport const tPresetSchema = tConversationSchema\n .omit({\n conversationId: true,\n createdAt: true,\n updatedAt: true,\n title: true,\n })\n .merge(\n z.object({\n conversationId: z.string().nullable().optional(),\n presetId: z.string().nullable().optional(),\n title: z.string().nullable().optional(),\n defaultPreset: z.boolean().optional(),\n order: z.number().optional(),\n endpoint: extendedModelEndpointSchema.nullable(),\n }),\n );\n\nexport const tConvoUpdateSchema = tConversationSchema.merge(\n z.object({\n endpoint: extendedModelEndpointSchema.nullable(),\n }),\n);\n\nexport const tPresetUpdateSchema = tConversationSchema.merge(\n z.object({\n endpoint: extendedModelEndpointSchema.nullable(),\n }),\n);\n\nexport type TPreset = z.infer<typeof tPresetSchema>;\n\nexport type TSetOption = (\n param: number | string,\n) => (newValue: number | string | boolean | string[] | Partial<TPreset>) => void;\n\nexport type TConversation = z.infer<typeof tConversationSchema> & {\n presetOverride?: Partial<TPreset>;\n};\n\nexport const tSharedLinkSchema = z.object({\n conversationId: z.string(),\n shareId: z.string(),\n messages: z.array(z.string()),\n isAnonymous: z.boolean(),\n isPublic: z.boolean(),\n isVisible: z.boolean(),\n title: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\nexport type TSharedLink = z.infer<typeof tSharedLinkSchema>;\n\nexport const openAISchema = tConversationSchema\n .pick({\n model: true,\n modelLabel: true,\n chatGptLabel: true,\n promptPrefix: true,\n temperature: true,\n top_p: true,\n presence_penalty: true,\n frequency_penalty: true,\n resendFiles: true,\n imageDetail: true,\n stop: true,\n iconURL: true,\n greeting: true,\n spec: true,\n maxContextTokens: true,\n max_tokens: true,\n })\n .transform((obj) => {\n const result = {\n ...obj,\n model: obj.model ?? openAISettings.model.default,\n chatGptLabel: obj.chatGptLabel ?? obj.modelLabel ?? null,\n promptPrefix: obj.promptPrefix ?? null,\n temperature: obj.temperature ?? openAISettings.temperature.default,\n top_p: obj.top_p ?? openAISettings.top_p.default,\n presence_penalty: obj.presence_penalty ?? openAISettings.presence_penalty.default,\n frequency_penalty: obj.frequency_penalty ?? openAISettings.frequency_penalty.default,\n resendFiles:\n typeof obj.resendFiles === 'boolean' ? obj.resendFiles : openAISettings.resendFiles.default,\n imageDetail: obj.imageDetail ?? openAISettings.imageDetail.default,\n stop: obj.stop ?? undefined,\n iconURL: obj.iconURL ?? undefined,\n greeting: obj.greeting ?? undefined,\n spec: obj.spec ?? undefined,\n maxContextTokens: obj.maxContextTokens ?? undefined,\n max_tokens: obj.max_tokens ?? undefined,\n };\n\n if (obj.modelLabel) {\n result.modelLabel = null;\n }\n\n return result;\n })\n .catch(() => ({\n model: openAISettings.model.default,\n chatGptLabel: null,\n promptPrefix: null,\n temperature: openAISettings.temperature.default,\n top_p: openAISettings.top_p.default,\n presence_penalty: openAISettings.presence_penalty.default,\n frequency_penalty: openAISettings.frequency_penalty.default,\n resendFiles: openAISettings.resendFiles.default,\n imageDetail: openAISettings.imageDetail.default,\n stop: undefined,\n iconURL: undefined,\n greeting: undefined,\n spec: undefined,\n maxContextTokens: undefined,\n max_tokens: undefined,\n }));\n\nexport const googleSchema = tConversationSchema\n .pick({\n model: true,\n modelLabel: true,\n promptPrefix: true,\n examples: true,\n temperature: true,\n maxOutputTokens: true,\n topP: true,\n topK: true,\n iconURL: true,\n greeting: true,\n spec: true,\n maxContextTokens: true,\n })\n .transform((obj) => {\n return {\n ...obj,\n model: obj.model ?? google.model.default,\n modelLabel: obj.modelLabel ?? null,\n promptPrefix: obj.promptPrefix ?? null,\n examples: obj.examples ?? [{ input: { content: '' }, output: { content: '' } }],\n temperature: obj.temperature ?? google.temperature.default,\n maxOutputTokens: obj.maxOutputTokens ?? google.maxOutputTokens.default,\n topP: obj.topP ?? google.topP.default,\n topK: obj.topK ?? google.topK.default,\n iconURL: obj.iconURL ?? undefined,\n greeting: obj.greeting ?? undefined,\n spec: obj.spec ?? undefined,\n maxContextTokens: obj.maxContextTokens ?? undefined,\n };\n })\n .catch(() => ({\n model: google.model.default,\n modelLabel: null,\n promptPrefix: null,\n examples: [{ input: { content: '' }, output: { content: '' } }],\n temperature: google.temperature.default,\n maxOutputTokens: google.maxOutputTokens.default,\n topP: google.topP.default,\n topK: google.topK.default,\n iconURL: undefined,\n greeting: undefined,\n spec: undefined,\n maxContextTokens: undefined,\n }));\n\nexport const bingAISchema = tConversationSchema\n .pick({\n jailbreak: true,\n systemMessage: true,\n context: true,\n toneStyle: true,\n jailbreakConversationId: true,\n conversationSignature: true,\n clientId: true,\n invocationId: true,\n })\n .transform((obj) => ({\n ...obj,\n model: '',\n jailbreak: obj.jailbreak ?? false,\n systemMessage: obj.systemMessage ?? null,\n context: obj.context ?? null,\n toneStyle: obj.toneStyle ?? 'creative',\n jailbreakConversationId: obj.jailbreakConversationId ?? null,\n conversationSignature: obj.conversationSignature ?? null,\n clientId: obj.clientId ?? null,\n invocationId: obj.invocationId ?? 1,\n }))\n .catch(() => ({\n model: '',\n jailbreak: false,\n systemMessage: null,\n context: null,\n toneStyle: 'creative',\n jailbreakConversationId: null,\n conversationSignature: null,\n clientId: null,\n invocationId: 1,\n }));\n\nexport const anthropicSchema = tConversationSchema\n .pick({\n model: true,\n modelLabel: true,\n promptPrefix: true,\n temperature: true,\n maxOutputTokens: true,\n topP: true,\n topK: true,\n resendFiles: true,\n iconURL: true,\n greeting: true,\n spec: true,\n maxContextTokens: true,\n })\n .transform((obj) => ({\n ...obj,\n model: obj.model ?? 'claude-1',\n modelLabel: obj.modelLabel ?? null,\n promptPrefix: obj.promptPrefix ?? null,\n temperature: obj.temperature ?? 1,\n maxOutputTokens: obj.maxOutputTokens ?? 4000,\n topP: obj.topP ?? 0.7,\n topK: obj.topK ?? 5,\n resendFiles: typeof obj.resendFiles === 'boolean' ? obj.resendFiles : true,\n iconURL: obj.iconURL ?? undefined,\n greeting: obj.greeting ?? undefined,\n spec: obj.spec ?? undefined,\n maxContextTokens: obj.maxContextTokens ?? undefined,\n }))\n .catch(() => ({\n model: 'claude-1',\n modelLabel: null,\n promptPrefix: null,\n temperature: 1,\n maxOutputTokens: 4000,\n topP: 0.7,\n topK: 5,\n resendFiles: true,\n iconURL: undefined,\n greeting: undefined,\n spec: undefined,\n maxContextTokens: undefined,\n }));\n\nexport const chatGPTBrowserSchema = tConversationSchema\n .pick({\n model: true,\n })\n .transform((obj) => ({\n ...obj,\n model: obj.model ?? 'text-davinci-002-render-sha',\n }))\n .catch(() => ({\n model: 'text-davinci-002-render-sha',\n }));\n\nexport const gptPluginsSchema = tConversationSchema\n .pick({\n model: true,\n modelLabel: true,\n chatGptLabel: true,\n promptPrefix: true,\n temperature: true,\n top_p: true,\n presence_penalty: true,\n frequency_penalty: true,\n tools: true,\n agentOptions: true,\n iconURL: true,\n greeting: true,\n spec: true,\n maxContextTokens: true,\n })\n .transform((obj) => {\n const result = {\n ...obj,\n model: obj.model ?? 'gpt-3.5-turbo',\n chatGptLabel: obj.chatGptLabel ?? obj.modelLabel ?? null,\n promptPrefix: obj.promptPrefix ?? null,\n temperature: obj.temperature ?? 0.8,\n top_p: obj.top_p ?? 1,\n presence_penalty: obj.presence_penalty ?? 0,\n frequency_penalty: obj.frequency_penalty ?? 0,\n tools: obj.tools ?? [],\n agentOptions: obj.agentOptions ?? {\n agent: EAgent.functions,\n skipCompletion: true,\n model: 'gpt-3.5-turbo',\n temperature: 0,\n },\n iconURL: obj.iconURL ?? undefined,\n greeting: obj.greeting ?? undefined,\n spec: obj.spec ?? undefined,\n maxContextTokens: obj.maxContextTokens ?? undefined,\n };\n\n if (obj.modelLabel) {\n result.modelLabel = null;\n }\n\n return result;\n })\n .catch(() => ({\n model: 'gpt-3.5-turbo',\n chatGptLabel: null,\n promptPrefix: null,\n temperature: 0.8,\n top_p: 1,\n presence_penalty: 0,\n frequency_penalty: 0,\n tools: [],\n agentOptions: {\n agent: EAgent.functions,\n skipCompletion: true,\n model: 'gpt-3.5-turbo',\n temperature: 0,\n },\n iconURL: undefined,\n greeting: undefined,\n spec: undefined,\n maxContextTokens: undefined,\n }));\n\nexport function removeNullishValues<T extends object>(obj: T): T {\n const newObj: Partial<T> = { ...obj };\n\n (Object.keys(newObj) as Array<keyof T>).forEach((key) => {\n if (newObj[key] === undefined || newObj[key] === null || newObj[key] === '') {\n delete newObj[key];\n }\n });\n\n return newObj as T;\n}\n\nexport const assistantSchema = tConversationSchema\n .pick({\n model: true,\n assistant_id: true,\n instructions: true,\n promptPrefix: true,\n iconURL: true,\n greeting: true,\n spec: true,\n })\n .transform((obj) => ({\n ...obj,\n model: obj.model ?? openAISettings.model.default,\n assistant_id: obj.assistant_id ?? undefined,\n instructions: obj.instructions ?? undefined,\n promptPrefix: obj.promptPrefix ?? null,\n iconURL: obj.iconURL ?? undefined,\n greeting: obj.greeting ?? undefined,\n spec: obj.spec ?? undefined,\n }))\n .catch(() => ({\n model: openAISettings.model.default,\n assistant_id: undefined,\n instructions: undefined,\n promptPrefix: null,\n iconURL: undefined,\n greeting: undefined,\n spec: undefined,\n }));\n\nexport const compactAssistantSchema = tConversationSchema\n .pick({\n model: true,\n assistant_id: true,\n instructions: true,\n promptPrefix: true,\n iconURL: true,\n greeting: true,\n spec: true,\n })\n // will change after adding temperature\n .transform(removeNullishValues)\n .catch(() => ({}));\n\nexport const compactOpenAISchema = tConversationSchema\n .pick({\n model: true,\n chatGptLabel: true,\n promptPrefix: true,\n temperature: true,\n top_p: true,\n presence_penalty: true,\n frequency_penalty: true,\n resendFiles: true,\n imageDetail: true,\n stop: true,\n iconURL: true,\n greeting: true,\n spec: true,\n maxContextTokens: true,\n max_tokens: true,\n })\n .transform((obj: Partial<TConversation>) => {\n const newObj: Partial<TConversation> = { ...obj };\n if (newObj.temperature === 1) {\n delete newObj.temperature;\n }\n if (newObj.top_p === 1) {\n delete newObj.top_p;\n }\n if (newObj.presence_penalty === 0) {\n delete newObj.presence_penalty;\n }\n if (newObj.frequency_penalty === 0) {\n delete newObj.frequency_penalty;\n }\n if (newObj.resendFiles === true) {\n delete newObj.resendFiles;\n }\n if (newObj.imageDetail === ImageDetail.auto) {\n delete newObj.imageDetail;\n }\n\n return removeNullishValues(newObj);\n })\n .catch(() => ({}));\n\nexport const compactGoogleSchema = tConversationSchema\n .pick({\n model: true,\n modelLabel: true,\n promptPrefix: true,\n examples: true,\n temperature: true,\n maxOutputTokens: true,\n topP: true,\n topK: true,\n iconURL: true,\n greeting: true,\n spec: true,\n maxContextTokens: true,\n })\n .transform((obj) => {\n const newObj: Partial<TConversation> = { ...obj };\n if (newObj.temperature === google.temperature.default) {\n delete newObj.temperature;\n }\n if (newObj.maxOutputTokens === google.maxOutputTokens.default) {\n delete newObj.maxOutputTokens;\n }\n if (newObj.topP === google.topP.default) {\n delete newObj.topP;\n }\n if (newObj.topK === google.topK.default) {\n delete newObj.topK;\n }\n\n return removeNullishValues(newObj);\n })\n .catch(() => ({}));\n\nexport const compactAnthropicSchema = tConversationSchema\n .pick({\n model: true,\n modelLabel: true,\n promptPrefix: true,\n temperature: true,\n maxOutputTokens: true,\n topP: true,\n topK: true,\n resendFiles: true,\n iconURL: true,\n greeting: true,\n spec: true,\n maxContextTokens: true,\n })\n .transform((obj) => {\n const newObj: Partial<TConversation> = { ...obj };\n if (newObj.temperature === 1) {\n delete newObj.temperature;\n }\n if (newObj.maxOutputTokens === 4000) {\n delete newObj.maxOutputTokens;\n }\n if (newObj.topP === 0.7) {\n delete newObj.topP;\n }\n if (newObj.topK === 5) {\n delete newObj.topK;\n }\n if (newObj.resendFiles === true) {\n delete newObj.resendFiles;\n }\n\n return removeNullishValues(newObj);\n })\n .catch(() => ({}));\n\nexport const compactChatGPTSchema = tConversationSchema\n .pick({\n model: true,\n })\n .transform((obj) => {\n const newObj: Partial<TConversation> = { ...obj };\n return removeNullishValues(newObj);\n })\n .catch(() => ({}));\n\nexport const compactPluginsSchema = tConversationSchema\n .pick({\n model: true,\n chatGptLabel: true,\n promptPrefix: true,\n temperature: true,\n top_p: true,\n presence_penalty: true,\n frequency_penalty: true,\n tools: true,\n agentOptions: true,\n iconURL: true,\n greeting: true,\n spec: true,\n maxContextTokens: true,\n })\n .transform((obj) => {\n const newObj: Partial<TConversation> = { ...obj };\n if (newObj.chatGptLabel === null) {\n delete newObj.chatGptLabel;\n }\n if (newObj.promptPrefix === null) {\n delete newObj.promptPrefix;\n }\n if (newObj.temperature === 0.8) {\n delete newObj.temperature;\n }\n if (newObj.top_p === 1) {\n delete newObj.top_p;\n }\n if (newObj.presence_penalty === 0) {\n delete newObj.presence_penalty;\n }\n if (newObj.frequency_penalty === 0) {\n delete newObj.frequency_penalty;\n }\n if (newObj.tools?.length === 0) {\n delete newObj.tools;\n }\n\n if (\n newObj.agentOptions &&\n newObj.agentOptions.agent === EAgent.functions &&\n newObj.agentOptions.skipCompletion === true &&\n newObj.agentOptions.model === 'gpt-3.5-turbo' &&\n newObj.agentOptions.temperature === 0\n ) {\n delete newObj.agentOptions;\n }\n\n return removeNullishValues(newObj);\n })\n .catch(() => ({}));\n","/* eslint-disable max-len */\nimport { z } from 'zod';\nimport { EModelEndpoint } from './schemas';\nimport type { FileConfig, EndpointFileConfig } from './types/files';\n\nexport const supportsFiles = {\n [EModelEndpoint.openAI]: true,\n [EModelEndpoint.google]: true,\n [EModelEndpoint.assistants]: true,\n [EModelEndpoint.azureAssistants]: true,\n [EModelEndpoint.azureOpenAI]: true,\n [EModelEndpoint.anthropic]: true,\n [EModelEndpoint.custom]: true,\n};\n\nexport const excelFileTypes = [\n 'application/vnd.ms-excel',\n 'application/msexcel',\n 'application/x-msexcel',\n 'application/x-ms-excel',\n 'application/x-excel',\n 'application/x-dos_ms_excel',\n 'application/xls',\n 'application/x-xls',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n];\n\nexport const fullMimeTypesList = [\n 'text/x-c',\n 'text/x-c++',\n 'application/csv',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'text/html',\n 'text/x-java',\n 'application/json',\n 'text/markdown',\n 'application/pdf',\n 'text/x-php',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'text/x-python',\n 'text/x-script.python',\n 'text/x-ruby',\n 'text/x-tex',\n 'text/plain',\n 'text/css',\n 'image/jpeg',\n 'text/javascript',\n 'image/gif',\n 'image/png',\n 'application/x-tar',\n 'application/typescript',\n 'application/xml',\n 'application/zip',\n ...excelFileTypes,\n];\n\nexport const codeInterpreterMimeTypesList = [\n 'text/x-c',\n 'text/x-c++',\n 'application/csv',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'text/html',\n 'text/x-java',\n 'application/json',\n 'text/markdown',\n 'application/pdf',\n 'text/x-php',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'text/x-python',\n 'text/x-script.python',\n 'text/x-ruby',\n 'text/x-tex',\n 'text/plain',\n 'text/css',\n 'image/jpeg',\n 'text/javascript',\n 'image/gif',\n 'image/png',\n 'application/x-tar',\n 'application/typescript',\n 'application/xml',\n 'application/zip',\n ...excelFileTypes,\n];\n\nexport const retrievalMimeTypesList = [\n 'text/x-c',\n 'text/x-c++',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'text/html',\n 'text/x-java',\n 'application/json',\n 'text/markdown',\n 'application/pdf',\n 'text/x-php',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'text/x-python',\n 'text/x-script.python',\n 'text/x-ruby',\n 'text/x-tex',\n 'text/plain',\n];\n\nexport const imageExtRegex = /\\.(jpg|jpeg|png|gif|webp)$/i;\n\nexport const excelMimeTypes =\n /^application\\/(vnd\\.ms-excel|msexcel|x-msexcel|x-ms-excel|x-excel|x-dos_ms_excel|xls|x-xls|vnd\\.openxmlformats-officedocument\\.spreadsheetml\\.sheet)$/;\n\nexport const textMimeTypes =\n /^(text\\/(x-c|x-c\\+\\+|x-java|html|markdown|x-php|x-python|x-script\\.python|x-ruby|x-tex|plain|css|javascript|csv))$/;\n\nexport const applicationMimeTypes =\n /^(application\\/(epub\\+zip|csv|json|pdf|x-tar|typescript|vnd\\.openxmlformats-officedocument\\.(wordprocessingml\\.document|presentationml\\.presentation|spreadsheetml\\.sheet)|xml|zip))$/;\n\nexport const imageMimeTypes = /^image\\/(jpeg|gif|png|webp)$/;\n\nexport const supportedMimeTypes = [\n textMimeTypes,\n excelMimeTypes,\n applicationMimeTypes,\n imageMimeTypes,\n];\n\nexport const codeInterpreterMimeTypes = [\n textMimeTypes,\n excelMimeTypes,\n applicationMimeTypes,\n imageMimeTypes,\n];\n\nexport const codeTypeMapping: { [key: string]: string } = {\n c: 'text/x-c',\n cs: 'text/x-csharp',\n cpp: 'text/x-c++',\n md: 'text/markdown',\n php: 'text/x-php',\n py: 'text/x-python',\n rb: 'text/x-ruby',\n tex: 'text/x-tex',\n js: 'text/javascript',\n sh: 'application/x-sh',\n ts: 'application/typescript',\n tar: 'application/x-tar',\n zip: 'application/zip',\n};\n\nexport const retrievalMimeTypes = [\n /^(text\\/(x-c|x-c\\+\\+|html|x-java|markdown|x-php|x-python|x-script\\.python|x-ruby|x-tex|plain|xml))$/,\n /^(application\\/(json|pdf|vnd\\.openxmlformats-officedocument\\.(wordprocessingml\\.document|presentationml\\.presentation)))$/,\n];\n\nexport const megabyte = 1024 * 1024;\n/** Helper function to get megabytes value */\nexport const mbToBytes = (mb: number): number => mb * megabyte;\n\nconst defaultSizeLimit = mbToBytes(512);\nconst assistantsFileConfig = {\n fileLimit: 10,\n fileSizeLimit: defaultSizeLimit,\n totalSizeLimit: defaultSizeLimit,\n supportedMimeTypes,\n disabled: false,\n};\n\nexport const fileConfig = {\n endpoints: {\n [EModelEndpoint.assistants]: assistantsFileConfig,\n [EModelEndpoint.azureAssistants]: assistantsFileConfig,\n default: {\n fileLimit: 10,\n fileSizeLimit: defaultSizeLimit,\n totalSizeLimit: defaultSizeLimit,\n supportedMimeTypes,\n disabled: false,\n },\n },\n serverFileSizeLimit: defaultSizeLimit,\n avatarSizeLimit: mbToBytes(2),\n checkType: function (fileType: string, supportedTypes: RegExp[] = supportedMimeTypes) {\n return supportedTypes.some((regex) => regex.test(fileType));\n },\n};\n\nconst supportedMimeTypesSchema = z\n .array(z.any())\n .optional()\n .refine(\n (mimeTypes) => {\n if (!mimeTypes) {\n return true;\n }\n return mimeTypes.every(\n (mimeType) => mimeType instanceof RegExp || typeof mimeType === 'string',\n );\n },\n {\n message: 'Each mimeType must be a string or a RegExp object.',\n },\n );\n\nexport const endpointFileConfigSchema = z.object({\n disabled: z.boolean().optional(),\n fileLimit: z.number().min(0).optional(),\n fileSizeLimit: z.number().min(0).optional(),\n totalSizeLimit: z.number().min(0).optional(),\n supportedMimeTypes: supportedMimeTypesSchema.optional(),\n});\n\nexport const fileConfigSchema = z.object({\n endpoints: z.record(endpointFileConfigSchema).optional(),\n serverFileSizeLimit: z.number().min(0).optional(),\n avatarSizeLimit: z.number().min(0).optional(),\n});\n\n/** Helper function to safely convert string patterns to RegExp objects */\nexport const convertStringsToRegex = (patterns: string[]): RegExp[] =>\n patterns.reduce((acc: RegExp[], pattern) => {\n try {\n const regex = new RegExp(pattern);\n acc.push(regex);\n } catch (error) {\n console.error(`Invalid regex pattern \"${pattern}\" skipped.`);\n }\n return acc;\n }, []);\n\nexport function mergeFileConfig(dynamic: z.infer<typeof fileConfigSchema> | undefined): FileConfig {\n const mergedConfig = fileConfig as FileConfig;\n if (!dynamic) {\n return mergedConfig;\n }\n\n if (dynamic.serverFileSizeLimit !== undefined) {\n mergedConfig.serverFileSizeLimit = mbToBytes(dynamic.serverFileSizeLimit);\n }\n\n if (dynamic.avatarSizeLimit !== undefined) {\n mergedConfig.avatarSizeLimit = mbToBytes(dynamic.avatarSizeLimit);\n }\n\n if (!dynamic.endpoints) {\n return mergedConfig;\n }\n\n for (const key in dynamic.endpoints) {\n const dynamicEndpoint = (dynamic.endpoints as Record<string, EndpointFileConfig>)[key];\n\n if (!mergedConfig.endpoints[key]) {\n mergedConfig.endpoints[key] = {};\n }\n\n const mergedEndpoint = mergedConfig.endpoints[key];\n\n if (dynamicEndpoint.disabled === true) {\n mergedEndpoint.disabled = true;\n mergedEndpoint.fileLimit = 0;\n mergedEndpoint.fileSizeLimit = 0;\n mergedEndpoint.totalSizeLimit = 0;\n mergedEndpoint.supportedMimeTypes = [];\n continue;\n }\n\n if (dynamicEndpoint.fileSizeLimit !== undefined) {\n mergedEndpoint.fileSizeLimit = mbToBytes(dynamicEndpoint.fileSizeLimit);\n }\n\n if (dynamicEndpoint.totalSizeLimit !== undefined) {\n mergedEndpoint.totalSizeLimit = mbToBytes(dynamicEndpoint.totalSizeLimit);\n }\n\n const configKeys = ['fileLimit'] as const;\n configKeys.forEach((field) => {\n if (dynamicEndpoint[field] !== undefined) {\n mergedEndpoint[field] = dynamicEndpoint[field];\n }\n });\n\n if (dynamicEndpoint.supportedMimeTypes) {\n mergedEndpoint.supportedMimeTypes = convertStringsToRegex(\n dynamicEndpoint.supportedMimeTypes as unknown as string[],\n );\n }\n }\n\n return mergedConfig;\n}\n","import { z } from 'zod';\nimport type { TPreset } from './schemas';\nimport {\n EModelEndpoint,\n tPresetSchema,\n eModelEndpointSchema,\n AuthType,\n authTypeSchema,\n} from './schemas';\n\nexport type TModelSpec = {\n name: string;\n label: string;\n preset: TPreset;\n order?: number;\n default?: boolean;\n description?: string;\n showIconInMenu?: boolean;\n showIconInHeader?: boolean;\n iconURL?: string | EModelEndpoint; // Allow using project-included icons\n authType?: AuthType;\n};\n\nexport const tModelSpecSchema = z.object({\n name: z.string(),\n label: z.string(),\n preset: tPresetSchema,\n order: z.number().optional(),\n default: z.boolean().optional(),\n description: z.string().optional(),\n showIconInMenu: z.boolean().optional(),\n showIconInHeader: z.boolean().optional(),\n iconURL: z.union([z.string(), eModelEndpointSchema]).optional(),\n authType: authTypeSchema.optional(),\n});\n\nexport const specsConfigSchema = z.object({\n enforce: z.boolean().default(false),\n prioritize: z.boolean().default(true),\n list: z.array(tModelSpecSchema).optional(),\n});\n\nexport type TSpecsConfig = z.infer<typeof specsConfigSchema>;\n","import { EToolResources } from './assistants';\n\nexport enum FileSources {\n local = 'local',\n firebase = 'firebase',\n azure = 'azure',\n openai = 'openai',\n s3 = 's3',\n vectordb = 'vectordb',\n}\n\nexport const checkOpenAIStorage = (source: string) =>\n source === FileSources.openai || source === FileSources.azure;\n\nexport enum FileContext {\n avatar = 'avatar',\n unknown = 'unknown',\n assistants = 'assistants',\n image_generation = 'image_generation',\n assistants_output = 'assistants_output',\n message_attachment = 'message_attachment',\n filename = 'filename',\n updatedAt = 'updatedAt',\n source = 'source',\n context = 'context',\n bytes = 'bytes',\n}\n\nexport type EndpointFileConfig = {\n disabled?: boolean;\n fileLimit?: number;\n fileSizeLimit?: number;\n totalSizeLimit?: number;\n supportedMimeTypes?: RegExp[];\n};\n\nexport type FileConfig = {\n endpoints: {\n [key: string]: EndpointFileConfig;\n };\n serverFileSizeLimit?: number;\n avatarSizeLimit?: number;\n checkType?: (fileType: string, supportedTypes: RegExp[]) => boolean;\n};\n\nexport type TFile = {\n _id?: string;\n __v?: number;\n user: string;\n conversationId?: string;\n message?: string;\n file_id: string;\n temp_file_id?: string;\n bytes: number;\n embedded: boolean;\n filename: string;\n filepath: string;\n object: 'file';\n type: string;\n usage: number;\n context?: FileContext;\n source?: FileSources;\n filterSource?: FileSources;\n width?: number;\n height?: number;\n expiresAt?: string | Date;\n preview?: string;\n createdAt?: string | Date;\n updatedAt?: string | Date;\n};\n\nexport type TFileUpload = TFile & {\n temp_file_id: string;\n};\n\nexport type AvatarUploadResponse = {\n url: string;\n};\n\nexport type SpeechToTextResponse = {\n text: string;\n};\n\nexport type VoiceResponse = string[];\n\nexport type UploadMutationOptions = {\n onSuccess?: (data: TFileUpload, variables: FormData, context?: unknown) => void;\n onMutate?: (variables: FormData) => void | Promise<unknown>;\n onError?: (error: unknown, variables: FormData, context?: unknown) => void;\n};\n\nexport type UploadAvatarOptions = {\n onSuccess?: (data: AvatarUploadResponse, variables: FormData, context?: unknown) => void;\n onMutate?: (variables: FormData) => void | Promise<unknown>;\n onError?: (error: unknown, variables: FormData, context?: unknown) => void;\n};\n\nexport type SpeechToTextOptions = {\n onSuccess?: (data: SpeechToTextResponse, variables: FormData, context?: unknown) => void;\n onMutate?: (variables: FormData) => void | Promise<unknown>;\n onError?: (error: unknown, variables: FormData, context?: unknown) => void;\n};\n\nexport type TextToSpeechOptions = {\n onSuccess?: (data: ArrayBuffer, variables: FormData, context?: unknown) => void;\n onMutate?: (variables: FormData) => void | Promise<unknown>;\n onError?: (error: unknown, variables: FormData, context?: unknown) => void;\n};\n\nexport type VoiceOptions = {\n onSuccess?: (data: VoiceResponse, variables: unknown, context?: unknown) => void;\n onMutate?: () => void | Promise<unknown>;\n onError?: (error: unknown, variables: unknown, context?: unknown) => void;\n};\n\nexport type DeleteFilesResponse = {\n message: string;\n result: Record<string, unknown>;\n};\n\nexport type BatchFile = {\n file_id: string;\n filepath: string;\n embedded: boolean;\n source: FileSources;\n};\n\nexport type DeleteFilesBody = {\n files: BatchFile[];\n assistant_id?: string;\n tool_resource?: EToolResources;\n};\n\nexport type DeleteMutationOptions = {\n onSuccess?: (data: DeleteFilesResponse, variables: DeleteFilesBody, context?: unknown) => void;\n onMutate?: (variables: DeleteFilesBody) => void | Promise<unknown>;\n onError?: (error: unknown, variables: DeleteFilesBody, context?: unknown) => void;\n};\n","/* eslint-disable max-len */\nimport { z } from 'zod';\nimport type { ZodError } from 'zod';\nimport { EModelEndpoint, eModelEndpointSchema } from './schemas';\nimport { fileConfigSchema } from './file-config';\nimport { specsConfigSchema } from './models';\nimport { FileSources } from './types/files';\nimport { TModelsConfig } from './types';\n\nexport const defaultSocialLogins = ['google', 'facebook', 'openid', 'github', 'discord'];\n\nexport const defaultRetrievalModels = [\n 'gpt-4o',\n 'gpt-4o-2024-05-13',\n 'gpt-4-turbo-preview',\n 'gpt-3.5-turbo-0125',\n 'gpt-4-0125-preview',\n 'gpt-4-1106-preview',\n 'gpt-3.5-turbo-1106',\n 'gpt-3.5-turbo-0125',\n 'gpt-4-turbo',\n 'gpt-4-0125',\n 'gpt-4-1106',\n];\n\nexport enum SettingsViews {\n default = 'default',\n advanced = 'advanced',\n}\n\nexport const fileSourceSchema = z.nativeEnum(FileSources);\n\n// Helper type to extract the shape of the Zod object schema\ntype SchemaShape<T> = T extends z.ZodObject<infer U> ? U : never;\n\n// Helper type to determine the default value or undefined based on whether the field has a default\ntype DefaultValue<T> = T extends z.ZodDefault<z.ZodTypeAny>\n ? ReturnType<T['_def']['defaultValue']>\n : undefined;\n\n// Extract default values or undefined from the schema shape\ntype ExtractDefaults<T> = {\n [P in keyof T]: DefaultValue<T[P]>;\n};\n\nexport type SchemaDefaults<T> = ExtractDefaults<SchemaShape<T>>;\n\nexport type TConfigDefaults = SchemaDefaults<typeof configSchema>;\n\nexport function getSchemaDefaults<Schema extends z.AnyZodObject>(\n schema: Schema,\n): ExtractDefaults<SchemaShape<Schema>> {\n const shape = schema.shape;\n const entries = Object.entries(shape).map(([key, value]) => {\n if (value instanceof z.ZodDefault) {\n // Extract default value if it exists\n return [key, value._def.defaultValue()];\n }\n return [key, undefined];\n });\n\n // Create the object with the right types\n return Object.fromEntries(entries) as ExtractDefaults<SchemaShape<Schema>>;\n}\n\nexport const modelConfigSchema = z\n .object({\n deploymentName: z.string().optional(),\n version: z.string().optional(),\n assistants: z.boolean().optional(),\n })\n .or(z.boolean());\n\nexport type TAzureModelConfig = z.infer<typeof modelConfigSchema>;\n\nexport const azureBaseSchema = z.object({\n apiKey: z.string(),\n serverless: z.boolean().optional(),\n instanceName: z.string().optional(),\n deploymentName: z.string().optional(),\n assistants: z.boolean().optional(),\n addParams: z.record(z.any()).optional(),\n dropParams: z.array(z.string()).optional(),\n forcePrompt: z.boolean().optional(),\n version: z.string().optional(),\n baseURL: z.string().optional(),\n additionalHeaders: z.record(z.any()).optional(),\n});\n\nexport type TAzureBaseSchema = z.infer<typeof azureBaseSchema>;\n\nexport const azureGroupSchema = z\n .object({\n group: z.string(),\n models: z.record(z.string(), modelConfigSchema),\n })\n .required()\n .and(azureBaseSchema);\n\nexport const azureGroupConfigsSchema = z.array(azureGroupSchema).min(1);\nexport type TAzureGroup = z.infer<typeof azureGroupSchema>;\nexport type TAzureGroups = z.infer<typeof azureGroupConfigsSchema>;\nexport type TAzureModelMapSchema = {\n // deploymentName?: string;\n // version?: string;\n group: string;\n};\n\nexport type TAzureModelGroupMap = Record<string, TAzureModelMapSchema>;\nexport type TAzureGroupMap = Record<\n string,\n TAzureBaseSchema & { models: Record<string, TAzureModelConfig> }\n>;\n\nexport type TValidatedAzureConfig = {\n modelNames: string[];\n modelGroupMap: TAzureModelGroupMap;\n groupMap: TAzureGroupMap;\n};\n\nexport type TAzureConfigValidationResult = TValidatedAzureConfig & {\n isValid: boolean;\n errors: (ZodError | string)[];\n};\n\nexport enum Capabilities {\n code_interpreter = 'code_interpreter',\n image_vision = 'image_vision',\n retrieval = 'retrieval',\n actions = 'actions',\n tools = 'tools',\n}\n\nexport const defaultAssistantsVersion = {\n [EModelEndpoint.assistants]: 2,\n [EModelEndpoint.azureAssistants]: 1,\n};\n\nexport const assistantEndpointSchema = z.object({\n /* assistants specific */\n disableBuilder: z.boolean().optional(),\n pollIntervalMs: z.number().optional(),\n timeoutMs: z.number().optional(),\n version: z.union([z.string(), z.number()]).default(2),\n supportedIds: z.array(z.string()).min(1).optional(),\n excludedIds: z.array(z.string()).min(1).optional(),\n privateAssistants: z.boolean().optional(),\n retrievalModels: z.array(z.string()).min(1).optional().default(defaultRetrievalModels),\n capabilities: z\n .array(z.nativeEnum(Capabilities))\n .optional()\n .default([\n Capabilities.code_interpreter,\n Capabilities.image_vision,\n Capabilities.retrieval,\n Capabilities.actions,\n Capabilities.tools,\n ]),\n /* general */\n apiKey: z.string().optional(),\n baseURL: z.string().optional(),\n models: z\n .object({\n default: z.array(z.string()).min(1),\n fetch: z.boolean().optional(),\n userIdQuery: z.boolean().optional(),\n })\n .optional(),\n titleConvo: z.boolean().optional(),\n titleMethod: z.union([z.literal('completion'), z.literal('functions')]).optional(),\n titleModel: z.string().optional(),\n headers: z.record(z.any()).optional(),\n});\n\nexport type TAssistantEndpoint = z.infer<typeof assistantEndpointSchema>;\n\nexport const endpointSchema = z.object({\n name: z.string().refine((value) => !eModelEndpointSchema.safeParse(value).success, {\n message: `Value cannot be one of the default endpoint (EModelEndpoint) values: ${Object.values(\n EModelEndpoint,\n ).join(', ')}`,\n }),\n apiKey: z.string(),\n baseURL: z.string(),\n models: z.object({\n default: z.array(z.string()).min(1),\n fetch: z.boolean().optional(),\n userIdQuery: z.boolean().optional(),\n }),\n titleConvo: z.boolean().optional(),\n titleMethod: z.union([z.literal('completion'), z.literal('functions')]).optional(),\n titleModel: z.string().optional(),\n summarize: z.boolean().optional(),\n summaryModel: z.string().optional(),\n forcePrompt: z.boolean().optional(),\n modelDisplayLabel: z.string().optional(),\n headers: z.record(z.any()).optional(),\n addParams: z.record(z.any()).optional(),\n dropParams: z.array(z.string()).optional(),\n customOrder: z.number().optional(),\n directEndpoint: z.boolean().optional(),\n titleMessageRole: z.string().optional(),\n});\n\nexport type TEndpoint = z.infer<typeof endpointSchema>;\n\nexport const azureEndpointSchema = z\n .object({\n groups: azureGroupConfigsSchema,\n plugins: z.boolean().optional(),\n assistants: z.boolean().optional(),\n })\n .and(\n endpointSchema\n .pick({\n titleConvo: true,\n titleMethod: true,\n titleModel: true,\n summarize: true,\n summaryModel: true,\n customOrder: true,\n })\n .partial(),\n );\n\nexport type TAzureConfig = Omit<z.infer<typeof azureEndpointSchema>, 'groups'> &\n TAzureConfigValidationResult;\n\nconst ttsOpenaiSchema = z.object({\n url: z.string().optional(),\n apiKey: z.string(),\n model: z.string(),\n voices: z.array(z.string()),\n});\n\nconst ttsElevenLabsSchema = z.object({\n url: z.string().optional(),\n websocketUrl: z.string().optional(),\n apiKey: z.string(),\n model: z.string(),\n voices: z.array(z.string()),\n voice_settings: z\n .object({\n similarity_boost: z.number().optional(),\n stability: z.number().optional(),\n style: z.number().optional(),\n use_speaker_boost: z.boolean().optional(),\n })\n .optional(),\n pronunciation_dictionary_locators: z.array(z.string()).optional(),\n});\n\nconst ttsLocalaiSchema = z.object({\n url: z.string(),\n apiKey: z.string().optional(),\n voices: z.array(z.string()),\n backend: z.string(),\n});\n\nconst ttsSchema = z.object({\n openai: ttsOpenaiSchema.optional(),\n elevenLabs: ttsElevenLabsSchema.optional(),\n localai: ttsLocalaiSchema.optional(),\n});\n\nconst sttSchema = z.object({\n openai: z\n .object({\n url: z.string().optional(),\n apiKey: z.string().optional(),\n model: z.string().optional(),\n })\n .optional(),\n});\n\nexport const rateLimitSchema = z.object({\n fileUploads: z\n .object({\n ipMax: z.number().optional(),\n ipWindowInMinutes: z.number().optional(),\n userMax: z.number().optional(),\n userWindowInMinutes: z.number().optional(),\n })\n .optional(),\n conversationsImport: z\n .object({\n ipMax: z.number().optional(),\n ipWindowInMinutes: z.number().optional(),\n userMax: z.number().optional(),\n userWindowInMinutes: z.number().optional(),\n })\n .optional(),\n});\n\nexport enum EImageOutputType {\n PNG = 'png',\n WEBP = 'webp',\n JPEG = 'jpeg',\n}\n\nexport const configSchema = z.object({\n version: z.string(),\n cache: z.boolean().default(true),\n secureImageLinks: z.boolean().optional(),\n imageOutputType: z.nativeEnum(EImageOutputType).default(EImageOutputType.PNG),\n includedTools: z.array(z.string()).optional(),\n filteredTools: z.array(z.string()).optional(),\n interface: z\n .object({\n privacyPolicy: z\n .object({\n externalUrl: z.string().optional(),\n openNewTab: z.boolean().optional(),\n })\n .optional(),\n termsOfService: z\n .object({\n externalUrl: z.string().optional(),\n openNewTab: z.boolean().optional(),\n })\n .optional(),\n endpointsMenu: z.boolean().optional(),\n modelSelect: z.boolean().optional(),\n parameters: z.boolean().optional(),\n sidePanel: z.boolean().optional(),\n presets: z.boolean().optional(),\n })\n .default({\n endpointsMenu: true,\n modelSelect: true,\n parameters: true,\n sidePanel: true,\n presets: true,\n }),\n fileStrategy: fileSourceSchema.default(FileSources.local),\n registration: z\n .object({\n socialLogins: z.array(z.string()).optional(),\n allowedDomains: z.array(z.string()).optional(),\n })\n .default({ socialLogins: defaultSocialLogins }),\n tts: ttsSchema.optional(),\n stt: sttSchema.optional(),\n rateLimits: rateLimitSchema.optional(),\n fileConfig: fileConfigSchema.optional(),\n modelSpecs: specsConfigSchema.optional(),\n endpoints: z\n .object({\n [EModelEndpoint.azureOpenAI]: azureEndpointSchema.optional(),\n [EModelEndpoint.azureAssistants]: assistantEndpointSchema.optional(),\n [EModelEndpoint.assistants]: assistantEndpointSchema.optional(),\n custom: z.array(endpointSchema.partial()).optional(),\n })\n .strict()\n .refine((data) => Object.keys(data).length > 0, {\n message: 'At least one `endpoints` field must be provided.',\n })\n .optional(),\n});\n\nexport const getConfigDefaults = () => getSchemaDefaults(configSchema);\n\nexport type TCustomConfig = z.infer<typeof configSchema>;\n\nexport type TProviderSchema =\n | z.infer<typeof ttsOpenaiSchema>\n | z.infer<typeof ttsElevenLabsSchema>\n | z.infer<typeof ttsLocalaiSchema>\n | undefined;\n\nexport enum KnownEndpoints {\n anyscale = 'anyscale',\n apipie = 'apipie',\n cohere = 'cohere',\n fireworks = 'fireworks',\n groq = 'groq',\n huggingface = 'huggingface',\n mistral = 'mistral',\n mlx = 'mlx',\n ollama = 'ollama',\n openrouter = 'openrouter',\n perplexity = 'perplexity',\n shuttleai = 'shuttleai',\n 'together.ai' = 'together.ai',\n}\n\nexport enum FetchTokenConfig {\n openrouter = KnownEndpoints.openrouter,\n}\n\nexport const defaultEndpoints: EModelEndpoint[] = [\n EModelEndpoint.openAI,\n EModelEndpoint.assistants,\n EModelEndpoint.azureAssistants,\n EModelEndpoint.azureOpenAI,\n EModelEndpoint.bingAI,\n EModelEndpoint.chatGPTBrowser,\n EModelEndpoint.gptPlugins,\n EModelEndpoint.google,\n EModelEndpoint.anthropic,\n EModelEndpoint.custom,\n];\n\nexport const alternateName = {\n [EModelEndpoint.openAI]: 'OpenAI',\n [EModelEndpoint.assistants]: 'Assistants',\n [EModelEndpoint.azureAssistants]: 'Azure Assistants',\n [EModelEndpoint.azureOpenAI]: 'Azure OpenAI',\n [EModelEndpoint.bingAI]: 'Bing',\n [EModelEndpoint.chatGPTBrowser]: 'ChatGPT',\n [EModelEndpoint.gptPlugins]: 'Plugins',\n [EModelEndpoint.google]: 'Google',\n [EModelEndpoint.anthropic]: 'Anthropic',\n [EModelEndpoint.custom]: 'Custom',\n};\n\nconst sharedOpenAIModels = [\n 'gpt-3.5-turbo',\n 'gpt-3.5-turbo-0125',\n 'gpt-4-turbo',\n 'gpt-4-turbo-2024-04-09',\n 'gpt-4-0125-preview',\n 'gpt-4-turbo-preview',\n 'gpt-4-1106-preview',\n 'gpt-3.5-turbo-1106',\n 'gpt-3.5-turbo-16k-0613',\n 'gpt-3.5-turbo-16k',\n 'gpt-4',\n 'gpt-4-0314',\n 'gpt-4-32k-0314',\n 'gpt-4-0613',\n 'gpt-3.5-turbo-0613',\n];\n\nexport const defaultModels = {\n [EModelEndpoint.azureAssistants]: sharedOpenAIModels,\n [EModelEndpoint.assistants]: ['gpt-4o', ...sharedOpenAIModels],\n [EModelEndpoint.google]: [\n 'gemini-pro',\n 'gemini-pro-vision',\n 'chat-bison',\n 'chat-bison-32k',\n 'codechat-bison',\n 'codechat-bison-32k',\n 'text-bison',\n 'text-bison-32k',\n 'text-unicorn',\n 'code-gecko',\n 'code-bison',\n 'code-bison-32k',\n ],\n [EModelEndpoint.anthropic]: [\n 'claude-3-opus-20240229',\n 'claude-3-sonnet-20240229',\n 'claude-3-haiku-20240307',\n 'claude-2.1',\n 'claude-2',\n 'claude-1.2',\n 'claude-1',\n 'claude-1-100k',\n 'claude-instant-1',\n 'claude-instant-1-100k',\n ],\n [EModelEndpoint.openAI]: [\n 'gpt-4o',\n ...sharedOpenAIModels,\n 'gpt-4-vision-preview',\n 'gpt-3.5-turbo-instruct-0914',\n 'gpt-3.5-turbo-0301',\n 'gpt-3.5-turbo-instruct',\n 'text-davinci-003',\n ],\n};\n\nconst fitlerAssistantModels = (str: string) => {\n return /gpt-4|gpt-3\\\\.5/i.test(str) && !/vision|instruct/i.test(str);\n};\n\nconst openAIModels = defaultModels[EModelEndpoint.openAI];\n\nexport const initialModelsConfig: TModelsConfig = {\n initial: [],\n [EModelEndpoint.openAI]: openAIModels,\n [EModelEndpoint.assistants]: openAIModels.filter(fitlerAssistantModels),\n [EModelEndpoint.gptPlugins]: openAIModels,\n [EModelEndpoint.azureOpenAI]: openAIModels,\n [EModelEndpoint.bingAI]: ['BingAI', 'Sydney'],\n [EModelEndpoint.chatGPTBrowser]: ['text-davinci-002-render-sha'],\n [EModelEndpoint.google]: defaultModels[EModelEndpoint.google],\n [EModelEndpoint.anthropic]: defaultModels[EModelEndpoint.anthropic],\n};\n\nexport const EndpointURLs: { [key in EModelEndpoint]: string } = {\n [EModelEndpoint.openAI]: `/api/ask/${EModelEndpoint.openAI}`,\n [EModelEndpoint.bingAI]: `/api/ask/${EModelEndpoint.bingAI}`,\n [EModelEndpoint.google]: `/api/ask/${EModelEndpoint.google}`,\n [EModelEndpoint.custom]: `/api/ask/${EModelEndpoint.custom}`,\n [EModelEndpoint.anthropic]: `/api/ask/${EModelEndpoint.anthropic}`,\n [EModelEndpoint.gptPlugins]: `/api/ask/${EModelEndpoint.gptPlugins}`,\n [EModelEndpoint.azureOpenAI]: `/api/ask/${EModelEndpoint.azureOpenAI}`,\n [EModelEndpoint.chatGPTBrowser]: `/api/ask/${EModelEndpoint.chatGPTBrowser}`,\n [EModelEndpoint.azureAssistants]: '/api/assistants/v1/chat',\n [EModelEndpoint.assistants]: '/api/assistants/v2/chat',\n};\n\nexport const modularEndpoints = new Set<EModelEndpoint | string>([\n EModelEndpoint.gptPlugins,\n EModelEndpoint.anthropic,\n EModelEndpoint.google,\n EModelEndpoint.openAI,\n EModelEndpoint.azureOpenAI,\n EModelEndpoint.custom,\n]);\n\nexport const supportsBalanceCheck = {\n [EModelEndpoint.custom]: true,\n [EModelEndpoint.openAI]: true,\n [EModelEndpoint.anthropic]: true,\n [EModelEndpoint.gptPlugins]: true,\n [EModelEndpoint.assistants]: true,\n [EModelEndpoint.azureAssistants]: true,\n [EModelEndpoint.azureOpenAI]: true,\n};\n\nexport const visionModels = [\n 'gpt-4o',\n 'gpt-4-turbo',\n 'gpt-4-vision',\n 'llava',\n 'llava-13b',\n 'gemini-pro-vision',\n 'claude-3',\n 'gemini-1.5',\n];\nexport enum VisionModes {\n generative = 'generative',\n}\n\nexport function validateVisionModel({\n model,\n additionalModels = [],\n availableModels,\n}: {\n model: string;\n additionalModels?: string[];\n availableModels?: string[];\n}) {\n if (!model) {\n return false;\n }\n\n if (model === 'gpt-4-turbo-preview') {\n return false;\n }\n\n if (availableModels && !availableModels.includes(model)) {\n return false;\n }\n\n return visionModels.concat(additionalModels).some((visionModel) => model.includes(visionModel));\n}\n\nexport const imageGenTools = new Set(['dalle', 'dall-e', 'stable-diffusion']);\n\n/**\n * Enum for cache keys.\n */\nexport enum CacheKeys {\n /**\n * Key for the config store namespace.\n */\n CONFIG_STORE = 'configStore',\n /**\n * Key for the plugins cache.\n */\n PLUGINS = 'plugins',\n /**\n * Key for the title generation cache.\n */\n GEN_TITLE = 'genTitle',\n /**\n /**\n * Key for the tools cache.\n */\n TOOLS = 'tools',\n /**\n * Key for the model config cache.\n */\n MODELS_CONFIG = 'modelsConfig',\n /**\n * Key for the model queries cache.\n */\n MODEL_QUERIES = 'modelQueries',\n /**\n * Key for the default endpoint config cache.\n */\n ENDPOINT_CONFIG = 'endpointsConfig',\n /**\n * Key for accessing the model token config cache.\n */\n TOKEN_CONFIG = 'tokenConfig',\n /**\n * Key for the custom config cache.\n */\n CUSTOM_CONFIG = 'customConfig',\n /**\n * Key for accessing Abort Keys\n */\n ABORT_KEYS = 'abortKeys',\n /**\n * Key for the override config cache.\n */\n OVERRIDE_CONFIG = 'overrideConfig',\n /**\n * Key for the bans cache.\n */\n BANS = 'bans',\n /**\n * Key for the encoded domains cache.\n * Used by Azure OpenAI Assistants.\n */\n ENCODED_DOMAINS = 'encoded_domains',\n /**\n * Key for the cached audio run Ids.\n */\n AUDIO_RUNS = 'audioRuns',\n}\n\n/**\n * Enum for violation types, used to identify, log, and cache violations.\n */\nexport enum ViolationTypes {\n /**\n * File Upload Violations (exceeding limit).\n */\n FILE_UPLOAD_LIMIT = 'file_upload_limit',\n /**\n * Illegal Model Request (not available).\n */\n ILLEGAL_MODEL_REQUEST = 'illegal_model_request',\n /**\n * Token Limit Violation.\n */\n TOKEN_BALANCE = 'token_balance',\n /**\n * An issued ban.\n */\n BAN = 'ban',\n}\n\n/**\n * Enum for error message types that are not \"violations\" as above, used to identify client-facing errors.\n */\nexport enum ErrorTypes {\n /**\n * No User-provided Key.\n */\n NO_USER_KEY = 'no_user_key',\n /**\n * Expired User-provided Key.\n */\n EXPIRED_USER_KEY = 'expired_user_key',\n /**\n * Invalid User-provided Key.\n */\n INVALID_USER_KEY = 'invalid_user_key',\n /**\n * No Base URL Provided.\n */\n NO_BASE_URL = 'no_base_url',\n /**\n * Moderation error\n */\n MODERATION = 'moderation',\n}\n\n/**\n * Enum for authentication keys.\n */\nexport enum AuthKeys {\n /**\n * Key for the Service Account to use Vertex AI.\n */\n GOOGLE_SERVICE_KEY = 'GOOGLE_SERVICE_KEY',\n /**\n * API key to use Google Generative AI.\n *\n * Note: this is not for Environment Variables, but to access encrypted object values.\n */\n GOOGLE_API_KEY = 'GOOGLE_API_KEY',\n}\n\n/**\n * Enum for Image Detail Cost.\n *\n * **Low Res Fixed Cost:** `85`\n *\n * **High Res Calculation:**\n *\n * Number of `512px` Tiles * `170` + `85` (Additional Cost)\n */\nexport enum ImageDetailCost {\n /**\n * Low resolution is a fixed value.\n */\n LOW = 85,\n /**\n * High resolution Cost Per Tile\n */\n HIGH = 170,\n /**\n * Additional Cost added to High Resolution Total Cost\n */\n ADDITIONAL = 85,\n}\n\n/**\n * Tab values for Settings Dialog\n */\nexport enum SettingsTabValues {\n /**\n * Tab for General Settings\n */\n GENERAL = 'general',\n /**\n * Tab for Messages Settings\n */\n MESSAGES = 'messages',\n /**\n * Tab for Speech Settings\n */\n SPEECH = 'speech',\n /**\n * Tab for Beta Features\n */\n BETA = 'beta',\n /**\n * Tab for Data Controls\n */\n DATA = 'data',\n /**\n * Tab for Account Settings\n */\n ACCOUNT = 'account',\n}\n\n/** Enum for app-wide constants */\nexport enum Constants {\n /** Key for the app's version. */\n VERSION = 'v0.7.2',\n /** Key for the Custom Config's version (librechat.yaml). */\n CONFIG_VERSION = '1.1.3',\n /** Standard value for the first message's `parentMessageId` value, to indicate no parent exists. */\n NO_PARENT = '00000000-0000-0000-0000-000000000000',\n /** Fixed, encoded domain length for Azure OpenAI Assistants Function name parsing. */\n ENCODED_DOMAIN_LENGTH = 10,\n /** Identifier for using current_model in multi-model requests. */\n CURRENT_MODEL = 'current_model',\n}\n\nexport enum LocalStorageKeys {\n /** Key for the admin defined App Title */\n APP_TITLE = 'appTitle',\n /** Key for the last conversation setup. */\n LAST_CONVO_SETUP = 'lastConversationSetup',\n /** Key for the last BingAI Settings */\n LAST_BING = 'lastBingSettings',\n /** Key for the last selected model. */\n LAST_MODEL = 'lastSelectedModel',\n /** Key for the last selected tools. */\n LAST_TOOLS = 'lastSelectedTools',\n /** Key for the last selected spec by name*/\n LAST_SPEC = 'lastSelectedSpec',\n /** Key for temporary files to delete */\n FILES_TO_DELETE = 'filesToDelete',\n /** Prefix key for the last selected assistant ID by index */\n ASST_ID_PREFIX = 'assistant_id__',\n /** Key for the last selected fork setting */\n FORK_SETTING = 'forkSetting',\n /** Key for remembering the last selected option, instead of manually selecting */\n REMEMBER_FORK_OPTION = 'rememberForkOption',\n /** Key for remembering the split at target fork option modifier */\n FORK_SPLIT_AT_TARGET = 'splitAtTarget',\n}\n\nexport enum ForkOptions {\n /** Key for direct path option */\n DIRECT_PATH = 'directPath',\n /** Key for including branches */\n INCLUDE_BRANCHES = 'includeBranches',\n /** Key for target level fork (default) */\n TARGET_LEVEL = '',\n}\n\n/**\n * Enum for Cohere related constants\n */\nexport enum CohereConstants {\n /**\n * Cohere API Endpoint, for special handling\n */\n API_URL = 'https://api.cohere.ai/v1',\n /**\n * Role for \"USER\" messages\n */\n ROLE_USER = 'USER',\n /**\n * Role for \"SYSTEM\" messages\n */\n ROLE_SYSTEM = 'SYSTEM',\n /**\n * Role for \"CHATBOT\" messages\n */\n ROLE_CHATBOT = 'CHATBOT',\n /**\n * Title message as required by Cohere\n */\n TITLE_MESSAGE = 'TITLE:',\n}\n","import type { ZodIssue } from 'zod';\nimport type * as a from './types/assistants';\nimport type * as s from './schemas';\nimport type * as t from './types';\nimport { ContentTypes } from './types/assistants';\nimport {\n EModelEndpoint,\n openAISchema,\n googleSchema,\n bingAISchema,\n anthropicSchema,\n chatGPTBrowserSchema,\n gptPluginsSchema,\n assistantSchema,\n compactOpenAISchema,\n compactGoogleSchema,\n compactAnthropicSchema,\n compactChatGPTSchema,\n compactPluginsSchema,\n compactAssistantSchema,\n} from './schemas';\nimport { alternateName } from './config';\n\ntype EndpointSchema =\n | typeof openAISchema\n | typeof googleSchema\n | typeof bingAISchema\n | typeof anthropicSchema\n | typeof chatGPTBrowserSchema\n | typeof gptPluginsSchema\n | typeof assistantSchema;\n\nconst endpointSchemas: Record<EModelEndpoint, EndpointSchema> = {\n [EModelEndpoint.openAI]: openAISchema,\n [EModelEndpoint.azureOpenAI]: openAISchema,\n [EModelEndpoint.custom]: openAISchema,\n [EModelEndpoint.google]: googleSchema,\n [EModelEndpoint.bingAI]: bingAISchema,\n [EModelEndpoint.anthropic]: anthropicSchema,\n [EModelEndpoint.chatGPTBrowser]: chatGPTBrowserSchema,\n [EModelEndpoint.gptPlugins]: gptPluginsSchema,\n [EModelEndpoint.assistants]: assistantSchema,\n [EModelEndpoint.azureAssistants]: assistantSchema,\n};\n\n// const schemaCreators: Record<EModelEndpoint, (customSchema: DefaultSchemaValues) => EndpointSchema> = {\n// [EModelEndpoint.google]: createGoogleSchema,\n// };\n\n/** Get the enabled endpoints from the `ENDPOINTS` environment variable */\nexport function getEnabledEndpoints() {\n const defaultEndpoints: string[] = [\n EModelEndpoint.openAI,\n EModelEndpoint.assistants,\n EModelEndpoint.azureAssistants,\n EModelEndpoint.azureOpenAI,\n EModelEndpoint.google,\n EModelEndpoint.bingAI,\n EModelEndpoint.chatGPTBrowser,\n EModelEndpoint.gptPlugins,\n EModelEndpoint.anthropic,\n ];\n\n const endpointsEnv = process.env.ENDPOINTS || '';\n let enabledEndpoints = defaultEndpoints;\n if (endpointsEnv) {\n enabledEndpoints = endpointsEnv\n .split(',')\n .filter((endpoint) => endpoint?.trim())\n .map((endpoint) => endpoint.trim());\n }\n return enabledEndpoints;\n}\n\n/** Orders an existing EndpointsConfig object based on enabled endpoint/custom ordering */\nexport function orderEndpointsConfig(endpointsConfig: t.TEndpointsConfig) {\n if (!endpointsConfig) {\n return {};\n }\n const enabledEndpoints = getEnabledEndpoints();\n const endpointKeys = Object.keys(endpointsConfig);\n const defaultCustomIndex = enabledEndpoints.indexOf(EModelEndpoint.custom);\n return endpointKeys.reduce(\n (accumulatedConfig: Record<string, t.TConfig | null | undefined>, currentEndpointKey) => {\n const isCustom = !(currentEndpointKey in EModelEndpoint);\n const isEnabled = enabledEndpoints.includes(currentEndpointKey);\n if (!isEnabled && !isCustom) {\n return accumulatedConfig;\n }\n\n const index = enabledEndpoints.indexOf(currentEndpointKey);\n\n if (isCustom) {\n accumulatedConfig[currentEndpointKey] = {\n order: defaultCustomIndex >= 0 ? defaultCustomIndex : 9999,\n ...(endpointsConfig[currentEndpointKey] as Omit<t.TConfig, 'order'> & { order?: number }),\n };\n } else if (endpointsConfig[currentEndpointKey]) {\n accumulatedConfig[currentEndpointKey] = {\n ...endpointsConfig[currentEndpointKey],\n order: index,\n };\n }\n return accumulatedConfig;\n },\n {},\n );\n}\n\n/** Converts an array of Zod issues into a string. */\nexport function errorsToString(errors: ZodIssue[]) {\n return errors\n .map((error) => {\n const field = error.path.join('.');\n const message = error.message;\n\n return `${field}: ${message}`;\n })\n .join(' ');\n}\n\nexport const envVarRegex = /^\\${(.+)}$/;\n\n/** Extracts the value of an environment variable from a string. */\nexport function extractEnvVariable(value: string) {\n const envVarMatch = value.match(envVarRegex);\n if (envVarMatch) {\n return process.env[envVarMatch[1]] || value;\n }\n return value;\n}\n\n/** Resolves header values to env variables if detected */\nexport function resolveHeaders(headers: Record<string, string> | undefined) {\n const resolvedHeaders = { ...(headers ?? {}) };\n\n if (headers && typeof headers === 'object' && !Array.isArray(headers)) {\n Object.keys(headers).forEach((key) => {\n resolvedHeaders[key] = extractEnvVariable(headers[key]);\n });\n }\n\n return resolvedHeaders;\n}\n\nexport function getFirstDefinedValue(possibleValues: string[]) {\n let returnValue;\n for (const value of possibleValues) {\n if (value) {\n returnValue = value;\n break;\n }\n }\n return returnValue;\n}\n\nexport type TPossibleValues = {\n models: string[];\n secondaryModels?: string[];\n};\n\nexport const parseConvo = ({\n endpoint,\n endpointType,\n conversation,\n possibleValues,\n}: {\n endpoint: EModelEndpoint;\n endpointType?: EModelEndpoint;\n conversation: Partial<s.TConversation | s.TPreset>;\n possibleValues?: TPossibleValues;\n // TODO: POC for default schema\n // defaultSchema?: Partial<EndpointSchema>,\n}) => {\n let schema = endpointSchemas[endpoint];\n\n if (!schema && !endpointType) {\n throw new Error(`Unknown endpoint: ${endpoint}`);\n } else if (!schema && endpointType) {\n schema = endpointSchemas[endpointType];\n }\n\n // if (defaultSchema && schemaCreators[endpoint]) {\n // schema = schemaCreators[endpoint](defaultSchema);\n // }\n\n const convo = schema.parse(conversation) as s.TConversation;\n const { models, secondaryModels } = possibleValues ?? {};\n\n if (models && convo) {\n convo.model = getFirstDefinedValue(models) ?? convo.model;\n }\n\n if (secondaryModels && convo.agentOptions) {\n convo.agentOptions.model = getFirstDefinedValue(secondaryModels) ?? convo.agentOptions.model;\n }\n\n return convo;\n};\n\nexport const getResponseSender = (endpointOption: t.TEndpointOption): string => {\n const { model, endpoint, endpointType, modelDisplayLabel, chatGptLabel, modelLabel, jailbreak } =\n endpointOption;\n\n if (\n [\n EModelEndpoint.openAI,\n EModelEndpoint.azureOpenAI,\n EModelEndpoint.gptPlugins,\n EModelEndpoint.chatGPTBrowser,\n ].includes(endpoint)\n ) {\n if (chatGptLabel) {\n return chatGptLabel;\n } else if (model && model.includes('gpt-3')) {\n return 'GPT-3.5';\n } else if (model && model.includes('gpt-4')) {\n return 'GPT-4';\n } else if (model && model.includes('mistral')) {\n return 'Mistral';\n }\n return alternateName[endpoint] ?? 'ChatGPT';\n }\n\n if (endpoint === EModelEndpoint.bingAI) {\n return jailbreak ? 'Sydney' : 'BingAI';\n }\n\n if (endpoint === EModelEndpoint.anthropic) {\n return modelLabel ?? 'Claude';\n }\n\n if (endpoint === EModelEndpoint.google) {\n if (modelLabel) {\n return modelLabel;\n } else if (model && model.includes('gemini')) {\n return 'Gemini';\n } else if (model && model.includes('code')) {\n return 'Codey';\n }\n\n return 'PaLM2';\n }\n\n if (endpoint === EModelEndpoint.custom || endpointType === EModelEndpoint.custom) {\n if (modelLabel) {\n return modelLabel;\n } else if (chatGptLabel) {\n return chatGptLabel;\n } else if (model && model.includes('mistral')) {\n return 'Mistral';\n } else if (model && model.includes('gpt-3')) {\n return 'GPT-3.5';\n } else if (model && model.includes('gpt-4')) {\n return 'GPT-4';\n } else if (modelDisplayLabel) {\n return modelDisplayLabel;\n }\n\n return 'AI';\n }\n\n return '';\n};\n\ntype CompactEndpointSchema =\n | typeof compactOpenAISchema\n | typeof compactAssistantSchema\n | typeof compactGoogleSchema\n | typeof bingAISchema\n | typeof compactAnthropicSchema\n | typeof compactChatGPTSchema\n | typeof compactPluginsSchema;\n\nconst compactEndpointSchemas: Record<string, CompactEndpointSchema> = {\n [EModelEndpoint.openAI]: compactOpenAISchema,\n [EModelEndpoint.azureOpenAI]: compactOpenAISchema,\n [EModelEndpoint.custom]: compactOpenAISchema,\n [EModelEndpoint.assistants]: compactAssistantSchema,\n [EModelEndpoint.azureAssistants]: compactAssistantSchema,\n [EModelEndpoint.google]: compactGoogleSchema,\n /* BingAI needs all fields */\n [EModelEndpoint.bingAI]: bingAISchema,\n [EModelEndpoint.anthropic]: compactAnthropicSchema,\n [EModelEndpoint.chatGPTBrowser]: compactChatGPTSchema,\n [EModelEndpoint.gptPlugins]: compactPluginsSchema,\n};\n\nexport const parseCompactConvo = ({\n endpoint,\n endpointType,\n conversation,\n possibleValues,\n}: {\n endpoint?: EModelEndpoint;\n endpointType?: EModelEndpoint;\n conversation: Partial<s.TConversation | s.TPreset>;\n possibleValues?: TPossibleValues;\n // TODO: POC for default schema\n // defaultSchema?: Partial<EndpointSchema>,\n}) => {\n if (!endpoint) {\n throw new Error(`undefined endpoint: ${endpoint}`);\n }\n\n let schema = compactEndpointSchemas[endpoint];\n\n if (!schema && !endpointType) {\n throw new Error(`Unknown endpoint: ${endpoint}`);\n } else if (!schema && endpointType) {\n schema = compactEndpointSchemas[endpointType];\n }\n\n const convo = schema.parse(conversation) as s.TConversation;\n // const { models, secondaryModels } = possibleValues ?? {};\n const { models } = possibleValues ?? {};\n\n if (models && convo) {\n convo.model = getFirstDefinedValue(models) ?? convo.model;\n }\n\n // if (secondaryModels && convo.agentOptions) {\n // convo.agentOptionmodel = getFirstDefinedValue(secondaryModels) ?? convo.agentOptionmodel;\n // }\n\n return convo;\n};\n\nexport function parseTextParts(contentParts: a.TMessageContentParts[]): string {\n let result = '';\n\n for (const part of contentParts) {\n if (part.type === ContentTypes.TEXT) {\n const textValue = part.text.value;\n\n if (\n result.length > 0 &&\n textValue.length > 0 &&\n result[result.length - 1] !== ' ' &&\n textValue[0] !== ' '\n ) {\n result += ' ';\n }\n result += textValue;\n }\n }\n\n return result;\n}\n","import type { ZodError } from 'zod';\nimport type {\n TAzureGroups,\n TAzureGroupMap,\n TAzureModelGroupMap,\n TValidatedAzureConfig,\n TAzureConfigValidationResult,\n} from '../src/config';\nimport { errorsToString, extractEnvVariable, envVarRegex } from '../src/parsers';\nimport { azureGroupConfigsSchema } from '../src/config';\n\nexport const deprecatedAzureVariables = [\n /* \"related to\" precedes description text */\n { key: 'AZURE_OPENAI_DEFAULT_MODEL', description: 'setting a default model' },\n { key: 'AZURE_OPENAI_MODELS', description: 'setting models' },\n {\n key: 'AZURE_USE_MODEL_AS_DEPLOYMENT_NAME',\n description: 'using model names as deployment names',\n },\n { key: 'AZURE_API_KEY', description: 'setting a single Azure API key' },\n { key: 'AZURE_OPENAI_API_INSTANCE_NAME', description: 'setting a single Azure instance name' },\n {\n key: 'AZURE_OPENAI_API_DEPLOYMENT_NAME',\n description: 'setting a single Azure deployment name',\n },\n { key: 'AZURE_OPENAI_API_VERSION', description: 'setting a single Azure API version' },\n {\n key: 'AZURE_OPENAI_API_COMPLETIONS_DEPLOYMENT_NAME',\n description: 'setting a single Azure completions deployment name',\n },\n {\n key: 'AZURE_OPENAI_API_EMBEDDINGS_DEPLOYMENT_NAME',\n description: 'setting a single Azure embeddings deployment name',\n },\n {\n key: 'PLUGINS_USE_AZURE',\n description: 'using Azure for Plugins',\n },\n];\n\nexport const conflictingAzureVariables = [\n {\n key: 'INSTANCE_NAME',\n },\n {\n key: 'DEPLOYMENT_NAME',\n },\n];\n\nexport function validateAzureGroups(configs: TAzureGroups): TAzureConfigValidationResult {\n let isValid = true;\n const modelNames: string[] = [];\n const modelGroupMap: TAzureModelGroupMap = {};\n const groupMap: TAzureGroupMap = {};\n const errors: (ZodError | string)[] = [];\n\n const result = azureGroupConfigsSchema.safeParse(configs);\n if (!result.success) {\n isValid = false;\n errors.push(errorsToString(result.error.errors));\n } else {\n for (const group of result.data) {\n const {\n group: groupName,\n apiKey,\n instanceName,\n deploymentName,\n version,\n baseURL,\n additionalHeaders,\n models,\n serverless,\n ...rest\n } = group;\n\n if (groupMap[groupName]) {\n errors.push(`Duplicate group name detected: \"${groupName}\". Group names must be unique.`);\n return { isValid: false, modelNames, modelGroupMap, groupMap, errors };\n }\n\n if (serverless && !baseURL) {\n errors.push(`Group \"${groupName}\" is serverless but missing mandatory \"baseURL.\"`);\n return { isValid: false, modelNames, modelGroupMap, groupMap, errors };\n }\n\n if (!instanceName && !serverless) {\n errors.push(\n `Group \"${groupName}\" is missing an \"instanceName\" for non-serverless configuration.`,\n );\n return { isValid: false, modelNames, modelGroupMap, groupMap, errors };\n }\n\n groupMap[groupName] = {\n apiKey,\n instanceName,\n deploymentName,\n version,\n baseURL,\n additionalHeaders,\n models,\n serverless,\n ...rest,\n };\n\n for (const modelName in group.models) {\n modelNames.push(modelName);\n const model = group.models[modelName];\n\n if (modelGroupMap[modelName]) {\n errors.push(\n `Duplicate model name detected: \"${modelName}\". Model names must be unique across groups.`,\n );\n return { isValid: false, modelNames, modelGroupMap, groupMap, errors };\n }\n\n if (serverless) {\n modelGroupMap[modelName] = {\n group: groupName,\n };\n continue;\n }\n\n if (typeof model === 'boolean') {\n // For boolean models, check if group-level deploymentName and version are present.\n if (!group.deploymentName || !group.version) {\n errors.push(\n `Model \"${modelName}\" in group \"${groupName}\" is missing a deploymentName or version.`,\n );\n return { isValid: false, modelNames, modelGroupMap, groupMap, errors };\n }\n\n modelGroupMap[modelName] = {\n group: groupName,\n };\n } else {\n // For object models, check if deploymentName and version are required but missing.\n if (\n (!model.deploymentName && !group.deploymentName) ||\n (!model.version && !group.version)\n ) {\n errors.push(\n `Model \"${modelName}\" in group \"${groupName}\" is missing a required deploymentName or version.`,\n );\n return { isValid: false, modelNames, modelGroupMap, groupMap, errors };\n }\n\n modelGroupMap[modelName] = {\n group: groupName,\n // deploymentName: model.deploymentName || group.deploymentName,\n // version: model.version || group.version,\n };\n }\n }\n }\n }\n\n return { isValid, modelNames, modelGroupMap, groupMap, errors };\n}\n\ntype AzureOptions = {\n azureOpenAIApiKey: string;\n azureOpenAIApiInstanceName?: string;\n azureOpenAIApiDeploymentName?: string;\n azureOpenAIApiVersion?: string;\n};\n\ntype MappedAzureConfig = {\n azureOptions: AzureOptions;\n baseURL?: string;\n headers?: Record<string, string>;\n serverless?: boolean;\n};\n\nexport function mapModelToAzureConfig({\n modelName,\n modelGroupMap,\n groupMap,\n}: Omit<TValidatedAzureConfig, 'modelNames'> & {\n modelName: string;\n}): MappedAzureConfig {\n const modelConfig = modelGroupMap[modelName];\n if (!modelConfig) {\n throw new Error(`Model named \"${modelName}\" not found in configuration.`);\n }\n\n const groupConfig = groupMap[modelConfig.group];\n if (!groupConfig) {\n throw new Error(\n `Group \"${modelConfig.group}\" for model \"${modelName}\" not found in configuration.`,\n );\n }\n\n const instanceName = groupConfig.instanceName;\n\n if (!instanceName && !groupConfig.serverless) {\n throw new Error(\n `Group \"${modelConfig.group}\" is missing an instanceName for non-serverless configuration.`,\n );\n }\n\n if (groupConfig.serverless && !groupConfig.baseURL) {\n throw new Error(\n `Group \"${modelConfig.group}\" is missing the required base URL for serverless configuration.`,\n );\n }\n\n if (groupConfig.serverless) {\n const result: MappedAzureConfig = {\n azureOptions: {\n azureOpenAIApiKey: extractEnvVariable(groupConfig.apiKey),\n },\n baseURL: extractEnvVariable(groupConfig.baseURL as string),\n serverless: true,\n };\n\n const apiKeyValue = result.azureOptions.azureOpenAIApiKey;\n if (typeof apiKeyValue === 'string' && envVarRegex.test(apiKeyValue)) {\n throw new Error(`Azure configuration environment variable \"${apiKeyValue}\" was not found.`);\n }\n\n if (groupConfig.additionalHeaders) {\n result.headers = groupConfig.additionalHeaders;\n }\n\n return result;\n }\n\n if (!instanceName) {\n throw new Error(\n `Group \"${modelConfig.group}\" is missing an instanceName for non-serverless configuration.`,\n );\n }\n\n const modelDetails = groupConfig.models[modelName];\n const { deploymentName, version } =\n typeof modelDetails === 'object'\n ? {\n deploymentName: modelDetails.deploymentName || groupConfig.deploymentName,\n version: modelDetails.version || groupConfig.version,\n }\n : {\n deploymentName: groupConfig.deploymentName,\n version: groupConfig.version,\n };\n\n if (!deploymentName || !version) {\n throw new Error(\n `Model \"${modelName}\" in group \"${modelConfig.group}\" is missing a deploymentName (\"${deploymentName}\") or version (\"${version}\").`,\n );\n }\n\n const azureOptions: AzureOptions = {\n azureOpenAIApiKey: extractEnvVariable(groupConfig.apiKey),\n azureOpenAIApiInstanceName: extractEnvVariable(instanceName),\n azureOpenAIApiDeploymentName: extractEnvVariable(deploymentName),\n azureOpenAIApiVersion: extractEnvVariable(version),\n };\n\n for (const value of Object.values(azureOptions)) {\n if (typeof value === 'string' && envVarRegex.test(value)) {\n throw new Error(`Azure configuration environment variable \"${value}\" was not found.`);\n }\n }\n\n const result: MappedAzureConfig = { azureOptions };\n\n if (groupConfig.baseURL) {\n result.baseURL = extractEnvVariable(groupConfig.baseURL);\n }\n\n if (groupConfig.additionalHeaders) {\n result.headers = groupConfig.additionalHeaders;\n }\n\n return result;\n}\n\nexport function mapGroupToAzureConfig({\n groupName,\n groupMap,\n}: {\n groupName: string;\n groupMap: TAzureGroupMap;\n}): MappedAzureConfig {\n const groupConfig = groupMap[groupName];\n if (!groupConfig) {\n throw new Error(`Group named \"${groupName}\" not found in configuration.`);\n }\n\n const instanceName = groupConfig.instanceName as string;\n\n if (!instanceName && !groupConfig.serverless) {\n throw new Error(\n `Group \"${groupName}\" is missing an instanceName for non-serverless configuration.`,\n );\n }\n\n if (groupConfig.serverless && !groupConfig.baseURL) {\n throw new Error(\n `Group \"${groupName}\" is missing the required base URL for serverless configuration.`,\n );\n }\n\n const models = Object.keys(groupConfig.models);\n if (models.length === 0) {\n throw new Error(`Group \"${groupName}\" does not have any models configured.`);\n }\n\n // Use the first available model in the group\n const firstModelName = models[0];\n const modelDetails = groupConfig.models[firstModelName];\n\n const azureOptions: AzureOptions = {\n azureOpenAIApiKey: extractEnvVariable(groupConfig.apiKey),\n azureOpenAIApiInstanceName: extractEnvVariable(instanceName),\n // DeploymentName and Version set below\n };\n\n if (groupConfig.serverless) {\n return {\n azureOptions,\n baseURL: extractEnvVariable(groupConfig.baseURL ?? ''),\n serverless: true,\n ...(groupConfig.additionalHeaders && { headers: groupConfig.additionalHeaders }),\n };\n }\n\n const { deploymentName, version } =\n typeof modelDetails === 'object'\n ? {\n deploymentName: modelDetails.deploymentName || groupConfig.deploymentName,\n version: modelDetails.version || groupConfig.version,\n }\n : {\n deploymentName: groupConfig.deploymentName,\n version: groupConfig.version,\n };\n\n if (!deploymentName || !version) {\n throw new Error(\n `Model \"${firstModelName}\" in group \"${groupName}\" or the group itself is missing a deploymentName (\"${deploymentName}\") or version (\"${version}\").`,\n );\n }\n\n azureOptions.azureOpenAIApiDeploymentName = extractEnvVariable(deploymentName);\n azureOptions.azureOpenAIApiVersion = extractEnvVariable(version);\n\n const result: MappedAzureConfig = { azureOptions };\n\n if (groupConfig.baseURL) {\n result.baseURL = extractEnvVariable(groupConfig.baseURL);\n }\n\n if (groupConfig.additionalHeaders) {\n result.headers = groupConfig.additionalHeaders;\n }\n\n return result;\n}\n","import { z, ZodArray, ZodError, ZodIssueCode } from 'zod';\nimport { tConversationSchema, googleSettings as google, openAISettings as openAI } from './schemas';\nimport type { ZodIssue } from 'zod';\nimport type { TConversation, TSetOption, TPreset } from './schemas';\n\nexport type GoogleSettings = Partial<typeof google>;\nexport type OpenAISettings = Partial<typeof google>;\n\nexport type ComponentType =\n | 'input'\n | 'textarea'\n | 'slider'\n | 'checkbox'\n | 'switch'\n | 'dropdown'\n | 'tags';\n\nexport type OptionType = 'conversation' | 'model' | 'custom';\n\nexport enum ComponentTypes {\n Input = 'input',\n Textarea = 'textarea',\n Slider = 'slider',\n Checkbox = 'checkbox',\n Switch = 'switch',\n Dropdown = 'dropdown',\n Tags = 'tags',\n}\n\nexport enum SettingTypes {\n Number = 'number',\n Boolean = 'boolean',\n String = 'string',\n Enum = 'enum',\n Array = 'array',\n}\n\nexport enum OptionTypes {\n Conversation = 'conversation',\n Model = 'model',\n Custom = 'custom',\n}\nexport interface SettingDefinition {\n key: string;\n description?: string;\n type: 'number' | 'boolean' | 'string' | 'enum' | 'array';\n default?: number | boolean | string | string[];\n showDefault?: boolean;\n options?: string[];\n range?: SettingRange;\n enumMappings?: Record<string, number | boolean | string>;\n component: ComponentType;\n optionType?: OptionType;\n columnSpan?: number;\n columns?: number;\n label?: string;\n placeholder?: string;\n labelCode?: boolean;\n placeholderCode?: boolean;\n descriptionCode?: boolean;\n minText?: number;\n maxText?: number;\n minTags?: number; // Specific to tags component\n maxTags?: number; // Specific to tags component\n includeInput?: boolean; // Specific to slider component\n descriptionSide?: 'top' | 'right' | 'bottom' | 'left';\n}\n\nexport type DynamicSettingProps = Partial<SettingDefinition> & {\n readonly?: boolean;\n settingKey: string;\n setOption: TSetOption;\n conversation: TConversation | TPreset | null;\n defaultValue?: number | boolean | string | string[];\n className?: string;\n inputClassName?: string;\n};\n\nconst requiredSettingFields = ['key', 'type', 'component'];\n\nexport interface SettingRange {\n min: number;\n max: number;\n step?: number;\n}\n\nexport type SettingsConfiguration = SettingDefinition[];\n\nexport function generateDynamicSchema(settings: SettingsConfiguration) {\n const schemaFields: { [key: string]: z.ZodTypeAny } = {};\n\n for (const setting of settings) {\n const {\n key,\n type,\n default: defaultValue,\n range,\n options,\n minText,\n maxText,\n minTags,\n maxTags,\n } = setting;\n\n if (type === SettingTypes.Number) {\n let schema = z.number();\n if (range) {\n schema = schema.min(range.min);\n schema = schema.max(range.max);\n }\n if (typeof defaultValue === 'number') {\n schemaFields[key] = schema.default(defaultValue);\n } else {\n schemaFields[key] = schema;\n }\n continue;\n }\n\n if (type === SettingTypes.Boolean) {\n const schema = z.boolean();\n if (typeof defaultValue === 'boolean') {\n schemaFields[key] = schema.default(defaultValue);\n } else {\n schemaFields[key] = schema;\n }\n continue;\n }\n\n if (type === SettingTypes.String) {\n let schema = z.string();\n if (minText) {\n schema = schema.min(minText);\n }\n if (maxText) {\n schema = schema.max(maxText);\n }\n if (typeof defaultValue === 'string') {\n schemaFields[key] = schema.default(defaultValue);\n } else {\n schemaFields[key] = schema;\n }\n continue;\n }\n\n if (type === SettingTypes.Enum) {\n if (!options || options.length === 0) {\n console.warn(`Missing or empty 'options' for enum setting '${key}'.`);\n continue;\n }\n\n const schema = z.enum(options as [string, ...string[]]);\n if (typeof defaultValue === 'string') {\n schemaFields[key] = schema.default(defaultValue);\n } else {\n schemaFields[key] = schema;\n }\n continue;\n }\n\n if (type === SettingTypes.Array) {\n let schema: z.ZodSchema = z.array(z.string().or(z.number()));\n if (minTags && schema instanceof ZodArray) {\n schema = schema.min(minTags);\n }\n if (maxTags && schema instanceof ZodArray) {\n schema = schema.max(maxTags);\n }\n\n if (defaultValue && Array.isArray(defaultValue)) {\n schema = schema.default(defaultValue);\n }\n\n schemaFields[key] = schema;\n continue;\n }\n\n console.warn(`Unsupported setting type: ${type}`);\n }\n\n return z.object(schemaFields);\n}\n\nconst ZodTypeToSettingType: Record<string, string | undefined> = {\n ZodString: 'string',\n ZodNumber: 'number',\n ZodBoolean: 'boolean',\n};\n\nconst minColumns = 1;\nconst maxColumns = 4;\nconst minSliderOptions = 2;\nconst minDropdownOptions = 2;\n\n/**\n * Validates the provided setting using the constraints unique to each component type.\n * @throws {ZodError} Throws a ZodError if any validation fails.\n */\nexport function validateSettingDefinitions(settings: SettingsConfiguration): void {\n const errors: ZodIssue[] = [];\n // Validate columns\n const columnsSet = new Set<number>();\n for (const setting of settings) {\n if (setting.columns !== undefined) {\n if (setting.columns < minColumns || setting.columns > maxColumns) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid columns value for setting ${setting.key}. Must be between ${minColumns} and ${maxColumns}.`,\n path: ['columns'],\n });\n } else {\n columnsSet.add(setting.columns);\n }\n }\n }\n\n const columns = columnsSet.size === 1 ? columnsSet.values().next().value : 2;\n\n for (const setting of settings) {\n for (const field of requiredSettingFields) {\n if (setting[field as keyof SettingDefinition] === undefined) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Missing required field ${field} for setting ${setting.key}.`,\n path: [field],\n });\n }\n }\n\n // check accepted types\n const settingTypes = Object.values(SettingTypes);\n if (!settingTypes.includes(setting.type as SettingTypes)) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid type for setting ${setting.key}. Must be one of ${settingTypes.join(\n ', ',\n )}.`,\n path: ['type'],\n });\n }\n\n // Predefined constraints based on components\n if (\n (setting.component === ComponentTypes.Tags && setting.type !== SettingTypes.Array) ||\n (setting.component !== ComponentTypes.Tags && setting.type === SettingTypes.Array)\n ) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Tags component for setting ${setting.key} must have type array.`,\n path: ['type'],\n });\n }\n\n if (setting.component === ComponentTypes.Tags) {\n if (setting.minTags !== undefined && setting.minTags < 0) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid minTags value for setting ${setting.key}. Must be non-negative.`,\n path: ['minTags'],\n });\n }\n if (setting.maxTags !== undefined && setting.maxTags < 0) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid maxTags value for setting ${setting.key}. Must be non-negative.`,\n path: ['maxTags'],\n });\n }\n if (setting.default && !Array.isArray(setting.default)) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid default value for setting ${setting.key}. Must be an array.`,\n path: ['default'],\n });\n }\n if (setting.default && setting.maxTags && (setting.default as []).length > setting.maxTags) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid default value for setting ${setting.key}. Must have at most ${setting.maxTags} tags.`,\n path: ['default'],\n });\n }\n if (setting.default && setting.minTags && (setting.default as []).length < setting.minTags) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid default value for setting ${setting.key}. Must have at least ${setting.minTags} tags.`,\n path: ['default'],\n });\n }\n if (!setting.default) {\n setting.default = [];\n }\n }\n\n if (\n setting.component === ComponentTypes.Input ||\n setting.component === ComponentTypes.Textarea\n ) {\n if (setting.type === SettingTypes.Number && setting.component === ComponentTypes.Textarea) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Textarea component for setting ${setting.key} must have type string.`,\n path: ['type'],\n });\n // continue;\n }\n\n if (\n setting.minText !== undefined &&\n setting.maxText !== undefined &&\n setting.minText > setting.maxText\n ) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `For setting ${setting.key}, minText cannot be greater than maxText.`,\n path: [setting.key, 'minText', 'maxText'],\n });\n // continue;\n }\n if (!setting.placeholder) {\n setting.placeholder = '';\n } // Default placeholder\n }\n\n if (setting.component === ComponentTypes.Slider) {\n if (setting.type === SettingTypes.Number && !setting.range) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Slider component for setting ${setting.key} must have a range if type is number.`,\n path: ['range'],\n });\n // continue;\n }\n if (\n setting.type === SettingTypes.Enum &&\n (!setting.options || setting.options.length < minSliderOptions)\n ) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Slider component for setting ${setting.key} requires at least ${minSliderOptions} options for enum type.`,\n path: ['options'],\n });\n // continue;\n }\n setting.includeInput =\n setting.type === SettingTypes.Number ? setting.includeInput ?? true : false; // Default to true if type is number\n }\n\n if (setting.component === ComponentTypes.Slider && setting.type === SettingTypes.Number) {\n if (setting.default === undefined && setting.range) {\n // Set default to the middle of the range if unspecified\n setting.default = Math.round((setting.range.min + setting.range.max) / 2);\n }\n }\n\n if (\n setting.component === ComponentTypes.Checkbox ||\n setting.component === ComponentTypes.Switch\n ) {\n if (setting.options && setting.options.length > 2) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Checkbox/Switch component for setting ${setting.key} must have 1-2 options.`,\n path: ['options'],\n });\n // continue;\n }\n if (!setting.default && setting.type === SettingTypes.Boolean) {\n setting.default = false; // Default to false if type is boolean\n }\n }\n\n if (setting.component === ComponentTypes.Dropdown) {\n if (!setting.options || setting.options.length < minDropdownOptions) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Dropdown component for setting ${setting.key} requires at least ${minDropdownOptions} options.`,\n path: ['options'],\n });\n // continue;\n }\n if (!setting.default && setting.options && setting.options.length > 0) {\n setting.default = setting.options[0]; // Default to first option if not specified\n }\n }\n\n // Default columnSpan\n if (!setting.columnSpan) {\n setting.columnSpan = Math.floor(columns / 2);\n }\n\n // Default label to key\n if (!setting.label) {\n setting.label = setting.key;\n }\n\n // Validate minText and maxText for input/textarea\n if (\n setting.component === ComponentTypes.Input ||\n setting.component === ComponentTypes.Textarea\n ) {\n if (setting.minText !== undefined && setting.minText < 0) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid minText value for setting ${setting.key}. Must be non-negative.`,\n path: ['minText'],\n });\n }\n if (setting.maxText !== undefined && setting.maxText < 0) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid maxText value for setting ${setting.key}. Must be non-negative.`,\n path: ['maxText'],\n });\n }\n }\n\n // Validate optionType and conversation schema\n if (setting.optionType !== OptionTypes.Custom) {\n const conversationSchema = tConversationSchema.shape[setting.key as keyof TConversation];\n if (!conversationSchema) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Setting ${setting.key} with optionType \"${setting.optionType}\" must be defined in tConversationSchema.`,\n path: ['optionType'],\n });\n } else {\n const zodType = conversationSchema._def.typeName;\n const settingTypeEquivalent = ZodTypeToSettingType[zodType] || null;\n if (settingTypeEquivalent !== setting.type) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Setting ${setting.key} with optionType \"${setting.optionType}\" must match the type defined in tConversationSchema.`,\n path: ['optionType'],\n });\n }\n }\n }\n\n /* Default value checks */\n if (setting.type === SettingTypes.Number && isNaN(setting.default as number)) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid default value for setting ${setting.key}. Must be a number.`,\n path: ['default'],\n });\n }\n\n if (setting.type === SettingTypes.Boolean && typeof setting.default !== 'boolean') {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid default value for setting ${setting.key}. Must be a boolean.`,\n path: ['default'],\n });\n }\n\n if (\n (setting.type === SettingTypes.String || setting.type === SettingTypes.Enum) &&\n typeof setting.default !== 'string'\n ) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid default value for setting ${setting.key}. Must be a string.`,\n path: ['default'],\n });\n }\n\n if (\n setting.type === SettingTypes.Enum &&\n setting.options &&\n !setting.options.includes(setting.default as string)\n ) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid default value for setting ${\n setting.key\n }. Must be one of the options: [${setting.options.join(', ')}].`,\n path: ['default'],\n });\n }\n\n if (\n setting.type === SettingTypes.Number &&\n setting.range &&\n typeof setting.default === 'number' &&\n (setting.default < setting.range.min || setting.default > setting.range.max)\n ) {\n errors.push({\n code: ZodIssueCode.custom,\n message: `Invalid default value for setting ${setting.key}. Must be within the range [${setting.range.min}, ${setting.range.max}].`,\n path: ['default'],\n });\n }\n }\n\n if (errors.length > 0) {\n throw new ZodError(errors);\n }\n}\n\nexport const generateOpenAISchema = (customOpenAI: OpenAISettings) => {\n const defaults = { ...openAI, ...customOpenAI };\n return tConversationSchema\n .pick({\n model: true,\n chatGptLabel: true,\n promptPrefix: true,\n temperature: true,\n top_p: true,\n presence_penalty: true,\n frequency_penalty: true,\n resendFiles: true,\n imageDetail: true,\n maxContextTokens: true,\n })\n .transform((obj) => ({\n ...obj,\n model: obj.model ?? defaults.model.default,\n chatGptLabel: obj.chatGptLabel ?? null,\n promptPrefix: obj.promptPrefix ?? null,\n temperature: obj.temperature ?? defaults.temperature.default,\n top_p: obj.top_p ?? defaults.top_p.default,\n presence_penalty: obj.presence_penalty ?? defaults.presence_penalty.default,\n frequency_penalty: obj.frequency_penalty ?? defaults.frequency_penalty.default,\n resendFiles:\n typeof obj.resendFiles === 'boolean' ? obj.resendFiles : defaults.resendFiles.default,\n imageDetail: obj.imageDetail ?? defaults.imageDetail.default,\n maxContextTokens: obj.maxContextTokens ?? undefined,\n }))\n .catch(() => ({\n model: defaults.model.default,\n chatGptLabel: null,\n promptPrefix: null,\n temperature: defaults.temperature.default,\n top_p: defaults.top_p.default,\n presence_penalty: defaults.presence_penalty.default,\n frequency_penalty: defaults.frequency_penalty.default,\n resendFiles: defaults.resendFiles.default,\n imageDetail: defaults.imageDetail.default,\n maxContextTokens: undefined,\n }));\n};\n\nexport const generateGoogleSchema = (customGoogle: GoogleSettings) => {\n const defaults = { ...google, ...customGoogle };\n return tConversationSchema\n .pick({\n model: true,\n modelLabel: true,\n promptPrefix: true,\n examples: true,\n temperature: true,\n maxOutputTokens: true,\n topP: true,\n topK: true,\n maxContextTokens: true,\n })\n .transform((obj) => {\n return {\n ...obj,\n model: obj.model ?? defaults.model.default,\n modelLabel: obj.modelLabel ?? null,\n promptPrefix: obj.promptPrefix ?? null,\n examples: obj.examples ?? [{ input: { content: '' }, output: { content: '' } }],\n temperature: obj.temperature ?? defaults.temperature.default,\n maxOutputTokens: obj.maxOutputTokens ?? defaults.maxOutputTokens.default,\n topP: obj.topP ?? defaults.topP.default,\n topK: obj.topK ?? defaults.topK.default,\n maxContextTokens: obj.maxContextTokens ?? undefined,\n };\n })\n .catch(() => ({\n model: defaults.model.default,\n modelLabel: null,\n promptPrefix: null,\n examples: [{ input: { content: '' }, output: { content: '' } }],\n temperature: defaults.temperature.default,\n maxOutputTokens: defaults.maxOutputTokens.default,\n topP: defaults.topP.default,\n topK: defaults.topK.default,\n maxContextTokens: undefined,\n }));\n};\n","export enum QueryKeys {\n messages = 'messages',\n sharedMessages = 'sharedMessages',\n sharedLinks = 'sharedLinks',\n allConversations = 'allConversations',\n archivedConversations = 'archivedConversations',\n searchConversations = 'searchConversations',\n conversation = 'conversation',\n searchEnabled = 'searchEnabled',\n user = 'user',\n name = 'name', // user key name\n models = 'models',\n balance = 'balance',\n endpoints = 'endpoints',\n presets = 'presets',\n searchResults = 'searchResults',\n tokenCount = 'tokenCount',\n availablePlugins = 'availablePlugins',\n startupConfig = 'startupConfig',\n assistants = 'assistants',\n assistant = 'assistant',\n endpointsConfigOverride = 'endpointsConfigOverride',\n files = 'files',\n fileConfig = 'fileConfig',\n tools = 'tools',\n actions = 'actions',\n assistantDocs = 'assistantDocs',\n fileDownload = 'fileDownload',\n voices = 'voices',\n}\n\nexport enum MutationKeys {\n fileUpload = 'fileUpload',\n fileDelete = 'fileDelete',\n updatePreset = 'updatePreset',\n deletePreset = 'deletePreset',\n logoutUser = 'logoutUser',\n avatarUpload = 'avatarUpload',\n speechToText = 'speechToText',\n textToSpeech = 'textToSpeech',\n assistantAvatarUpload = 'assistantAvatarUpload',\n updateAction = 'updateAction',\n deleteAction = 'deleteAction',\n}\n","import axios from 'axios';\n\nexport function setAcceptLanguageHeader(value: string): void {\n axios.defaults.headers.common['Accept-Language'] = value;\n}\n\nexport function setTokenHeader(token: string) {\n axios.defaults.headers.common['Authorization'] = 'Bearer ' + token;\n}\n","import type { AssistantsEndpoint } from './schemas';\n\nexport const user = () => '/api/user';\n\nexport const balance = () => '/api/balance';\n\nexport const userPlugins = () => '/api/user/plugins';\n\nexport const messages = (conversationId: string, messageId?: string) =>\n `/api/messages/${conversationId}${messageId ? `/${messageId}` : ''}`;\n\nconst shareRoot = '/api/share';\nexport const shareMessages = (shareId: string) => `${shareRoot}/${shareId}`;\nexport const getSharedLinks = (pageNumber: string, isPublic: boolean) =>\n `${shareRoot}?pageNumber=${pageNumber}&isPublic=${isPublic}`;\nexport const createSharedLink = shareRoot;\nexport const updateSharedLink = shareRoot;\n\nconst keysEndpoint = '/api/keys';\n\nexport const keys = () => keysEndpoint;\n\nexport const userKeyQuery = (name: string) => `${keysEndpoint}?name=${name}`;\n\nexport const revokeUserKey = (name: string) => `${keysEndpoint}/${name}`;\n\nexport const revokeAllUserKeys = () => `${keysEndpoint}?all=true`;\n\nexport const abortRequest = (endpoint: string) => `/api/ask/${endpoint}/abort`;\n\nexport const conversationsRoot = '/api/convos';\n\nexport const conversations = (pageNumber: string, isArchived?: boolean) =>\n `${conversationsRoot}?pageNumber=${pageNumber}${isArchived ? '&isArchived=true' : ''}`;\n\nexport const conversationById = (id: string) => `${conversationsRoot}/${id}`;\n\nexport const genTitle = () => `${conversationsRoot}/gen_title`;\n\nexport const updateConversation = () => `${conversationsRoot}/update`;\n\nexport const deleteConversation = () => `${conversationsRoot}/clear`;\n\nexport const importConversation = () => `${conversationsRoot}/import`;\n\nexport const forkConversation = () => `${conversationsRoot}/fork`;\n\nexport const importConversationJobStatus = (jobId: string) =>\n `${conversationsRoot}/import/jobs/${jobId}`;\n\nexport const search = (q: string, pageNumber: string) =>\n `/api/search?q=${q}&pageNumber=${pageNumber}`;\n\nexport const searchEnabled = () => '/api/search/enable';\n\nexport const presets = () => '/api/presets';\n\nexport const deletePreset = () => '/api/presets/delete';\n\nexport const aiEndpoints = () => '/api/endpoints';\n\nexport const endpointsConfigOverride = () => '/api/endpoints/config/override';\n\nexport const models = () => '/api/models';\n\nexport const tokenizer = () => '/api/tokenizer';\n\nexport const login = () => '/api/auth/login';\n\nexport const logout = () => '/api/auth/logout';\n\nexport const register = () => '/api/auth/register';\n\nexport const loginFacebook = () => '/api/auth/facebook';\n\nexport const loginGoogle = () => '/api/auth/google';\n\nexport const refreshToken = (retry?: boolean) => `/api/auth/refresh${retry ? '?retry=true' : ''}`;\n\nexport const requestPasswordReset = () => '/api/auth/requestPasswordReset';\n\nexport const resetPassword = () => '/api/auth/resetPassword';\n\nexport const plugins = () => '/api/plugins';\n\nexport const config = () => '/api/config';\n\nexport const assistants = ({\n path,\n options,\n version,\n endpoint,\n}: {\n path?: string;\n options?: object;\n endpoint?: AssistantsEndpoint;\n version: number | string;\n}) => {\n let url = `/api/assistants/v${version}`;\n\n if (path) {\n url += `/${path}`;\n }\n\n if (endpoint) {\n options = {\n ...(options ?? {}),\n endpoint,\n };\n }\n\n if (options && Object.keys(options).length > 0) {\n const queryParams = new URLSearchParams(options as Record<string, string>).toString();\n url += `?${queryParams}`;\n }\n\n return url;\n};\n\nexport const files = () => '/api/files';\n\nexport const images = () => `${files()}/images`;\n\nexport const avatar = () => `${images()}/avatar`;\n\nexport const speechToText = () => `${files()}/stt`;\n\nexport const textToSpeech = () => `${files()}/tts`;\n\nexport const textToSpeechManual = () => `${textToSpeech()}/manual`;\n\nexport const textToSpeechVoices = () => `${textToSpeech()}/voices`;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport axios, { AxiosRequestConfig, AxiosError } from 'axios';\nimport { setTokenHeader } from './headers-helpers';\nimport * as endpoints from './api-endpoints';\n\nasync function _get<T>(url: string, options?: AxiosRequestConfig): Promise<T> {\n const response = await axios.get(url, { ...options });\n return response.data;\n}\n\nasync function _getResponse<T>(url: string, options?: AxiosRequestConfig): Promise<T> {\n return await axios.get(url, { ...options });\n}\n\nasync function _post(url: string, data?: any) {\n const response = await axios.post(url, JSON.stringify(data), {\n headers: { 'Content-Type': 'application/json' },\n });\n return response.data;\n}\n\nasync function _postMultiPart(url: string, formData: FormData, options?: AxiosRequestConfig) {\n const response = await axios.post(url, formData, {\n ...options,\n headers: { 'Content-Type': 'multipart/form-data' },\n });\n return response.data;\n}\n\nasync function _postTTS(url: string, formData: FormData, options?: AxiosRequestConfig) {\n const response = await axios.post(url, formData, {\n ...options,\n headers: { 'Content-Type': 'multipart/form-data' },\n responseType: 'arraybuffer',\n });\n return response.data;\n}\n\nasync function _put(url: string, data?: any) {\n const response = await axios.put(url, JSON.stringify(data), {\n headers: { 'Content-Type': 'application/json' },\n });\n return response.data;\n}\n\nasync function _delete<T>(url: string): Promise<T> {\n const response = await axios.delete(url);\n return response.data;\n}\n\nasync function _deleteWithOptions<T>(url: string, options?: AxiosRequestConfig): Promise<T> {\n const response = await axios.delete(url, { ...options });\n return response.data;\n}\n\nasync function _patch(url: string, data?: any) {\n const response = await axios.patch(url, JSON.stringify(data), {\n headers: { 'Content-Type': 'application/json' },\n });\n return response.data;\n}\n\nlet isRefreshing = false;\nlet failedQueue: { resolve: (value?: any) => void; reject: (reason?: any) => void }[] = [];\n\nconst refreshToken = (retry?: boolean) => _post(endpoints.refreshToken(retry));\n\nconst processQueue = (error: AxiosError | null, token: string | null = null) => {\n failedQueue.forEach((prom) => {\n if (error) {\n prom.reject(error);\n } else {\n prom.resolve(token);\n }\n });\n failedQueue = [];\n};\n\naxios.interceptors.response.use(\n (response) => response,\n async (error) => {\n const originalRequest = error.config;\n\n if (error.response.status === 401 && !originalRequest._retry) {\n originalRequest._retry = true;\n\n if (isRefreshing) {\n try {\n const token = await new Promise((resolve, reject) => {\n failedQueue.push({ resolve, reject });\n });\n originalRequest.headers['Authorization'] = 'Bearer ' + token;\n return await axios(originalRequest);\n } catch (err) {\n return Promise.reject(err);\n }\n }\n\n isRefreshing = true;\n\n try {\n const { token } = await refreshToken(\n // Handle edge case where we get a blank screen if the initial 401 error is from a refresh token request\n originalRequest.url?.includes('api/auth/refresh') ? true : false,\n );\n\n if (token) {\n originalRequest.headers['Authorization'] = 'Bearer ' + token;\n setTokenHeader(token);\n window.dispatchEvent(new CustomEvent('tokenUpdated', { detail: token }));\n processQueue(null, token);\n return await axios(originalRequest);\n } else {\n window.location.href = '/login';\n }\n } catch (err) {\n processQueue(err as AxiosError, null);\n return Promise.reject(err);\n } finally {\n isRefreshing = false;\n }\n }\n\n return Promise.reject(error);\n },\n);\n\nexport default {\n get: _get,\n getResponse: _getResponse,\n post: _post,\n postMultiPart: _postMultiPart,\n postTTS: _postTTS,\n put: _put,\n delete: _delete,\n deleteWithOptions: _deleteWithOptions,\n patch: _patch,\n refreshToken,\n};\n","import * as f from './types/files';\nimport * as q from './types/queries';\nimport * as m from './types/mutations';\nimport * as a from './types/assistants';\nimport * as t from './types';\nimport * as s from './schemas';\nimport request from './request';\nimport * as endpoints from './api-endpoints';\nimport type { AxiosResponse } from 'axios';\n\nexport function abortRequestWithMessage(\n endpoint: string,\n abortKey: string,\n message: string,\n): Promise<void> {\n return request.post(endpoints.abortRequest(endpoint), { arg: { abortKey, message } });\n}\n\nexport function revokeUserKey(name: string): Promise<unknown> {\n return request.delete(endpoints.revokeUserKey(name));\n}\n\nexport function revokeAllUserKeys(): Promise<unknown> {\n return request.delete(endpoints.revokeAllUserKeys());\n}\n\nexport function getMessagesByConvoId(conversationId: string): Promise<s.TMessage[]> {\n if (conversationId === 'new') {\n return Promise.resolve([]);\n }\n return request.get(endpoints.messages(conversationId));\n}\n\nexport function getSharedMessages(shareId: string): Promise<t.TSharedMessagesResponse> {\n return request.get(endpoints.shareMessages(shareId));\n}\n\nexport const listSharedLinks = (\n params?: q.SharedLinkListParams,\n): Promise<q.SharedLinksResponse> => {\n const pageNumber = params?.pageNumber || '1'; // Default to page 1 if not provided\n const isPublic = params?.isPublic || true; // Default to true if not provided\n return request.get(endpoints.getSharedLinks(pageNumber, isPublic));\n};\n\nexport function getSharedLink(shareId: string): Promise<t.TSharedLinkResponse> {\n return request.get(endpoints.shareMessages(shareId));\n}\n\nexport function createSharedLink(payload: t.TSharedLinkRequest): Promise<t.TSharedLinkResponse> {\n return request.post(endpoints.createSharedLink, payload);\n}\n\nexport function updateSharedLink(payload: t.TSharedLinkRequest): Promise<t.TSharedLinkResponse> {\n return request.patch(endpoints.updateSharedLink, payload);\n}\n\nexport function deleteSharedLink(shareId: string): Promise<t.TDeleteSharedLinkResponse> {\n return request.delete(endpoints.shareMessages(shareId));\n}\n\nexport function updateMessage(payload: t.TUpdateMessageRequest): Promise<unknown> {\n const { conversationId, messageId, text } = payload;\n if (!conversationId) {\n throw new Error('conversationId is required');\n }\n\n return request.put(endpoints.messages(conversationId, messageId), { text });\n}\n\nexport function updateUserKey(payload: t.TUpdateUserKeyRequest) {\n const { value } = payload;\n if (!value) {\n throw new Error('value is required');\n }\n\n return request.put(endpoints.keys(), payload);\n}\n\nexport function getPresets(): Promise<s.TPreset[]> {\n return request.get(endpoints.presets());\n}\n\nexport function createPreset(payload: s.TPreset): Promise<s.TPreset> {\n return request.post(endpoints.presets(), payload);\n}\n\nexport function updatePreset(payload: s.TPreset): Promise<s.TPreset> {\n return request.post(endpoints.presets(), payload);\n}\n\nexport function deletePreset(arg: s.TPreset | undefined): Promise<m.PresetDeleteResponse> {\n return request.post(endpoints.deletePreset(), arg);\n}\n\nexport function getSearchEnabled(): Promise<boolean> {\n return request.get(endpoints.searchEnabled());\n}\n\nexport function getUser(): Promise<t.TUser> {\n return request.get(endpoints.user());\n}\n\nexport function getUserBalance(): Promise<string> {\n return request.get(endpoints.balance());\n}\n\nexport const updateTokenCount = (text: string) => {\n return request.post(endpoints.tokenizer(), { arg: text });\n};\n\nexport const login = (payload: t.TLoginUser) => {\n return request.post(endpoints.login(), payload);\n};\n\nexport const logout = () => {\n return request.post(endpoints.logout());\n};\n\nexport const register = (payload: t.TRegisterUser) => {\n return request.post(endpoints.register(), payload);\n};\n\nexport const userKeyQuery = (name: string): Promise<t.TCheckUserKeyResponse> =>\n request.get(endpoints.userKeyQuery(name));\n\nexport const getLoginGoogle = () => {\n return request.get(endpoints.loginGoogle());\n};\n\nexport const requestPasswordReset = (\n payload: t.TRequestPasswordReset,\n): Promise<t.TRequestPasswordResetResponse> => {\n return request.post(endpoints.requestPasswordReset(), payload);\n};\n\nexport const resetPassword = (payload: t.TResetPassword) => {\n return request.post(endpoints.resetPassword(), payload);\n};\n\nexport const getAvailablePlugins = (): Promise<s.TPlugin[]> => {\n return request.get(endpoints.plugins());\n};\n\nexport const updateUserPlugins = (payload: t.TUpdateUserPlugins) => {\n return request.post(endpoints.userPlugins(), payload);\n};\n\n/* Config */\n\nexport const getStartupConfig = (): Promise<t.TStartupConfig> => {\n return request.get(endpoints.config());\n};\n\nexport const getAIEndpoints = (): Promise<t.TEndpointsConfig> => {\n return request.get(endpoints.aiEndpoints());\n};\n\nexport const getModels = async (): Promise<t.TModelsConfig> => {\n return request.get(endpoints.models());\n};\n\nexport const getEndpointsConfigOverride = (): Promise<unknown | boolean> => {\n return request.get(endpoints.endpointsConfigOverride());\n};\n\n/* Assistants */\n\nexport const createAssistant = ({\n version,\n ...data\n}: a.AssistantCreateParams): Promise<a.Assistant> => {\n return request.post(endpoints.assistants({ version }), data);\n};\n\nexport const getAssistantById = ({\n endpoint,\n assistant_id,\n version,\n}: {\n endpoint: s.AssistantsEndpoint;\n assistant_id: string;\n version: number | string | number;\n}): Promise<a.Assistant> => {\n return request.get(\n endpoints.assistants({\n path: assistant_id,\n endpoint,\n version,\n }),\n );\n};\n\nexport const updateAssistant = ({\n assistant_id,\n data,\n version,\n}: {\n assistant_id: string;\n data: a.AssistantUpdateParams;\n version: number | string;\n}): Promise<a.Assistant> => {\n return request.patch(\n endpoints.assistants({\n path: assistant_id,\n version,\n }),\n data,\n );\n};\n\nexport const deleteAssistant = ({\n assistant_id,\n model,\n endpoint,\n version,\n}: m.DeleteAssistantBody & { version: number | string }): Promise<void> => {\n return request.delete(\n endpoints.assistants({\n path: assistant_id,\n options: { model, endpoint },\n version,\n }),\n );\n};\n\nexport const listAssistants = (\n params: a.AssistantListParams,\n version: number | string,\n): Promise<a.AssistantListResponse> => {\n return request.get(\n endpoints.assistants({\n version,\n options: params,\n }),\n );\n};\n\nexport function getAssistantDocs({\n endpoint,\n version,\n}: {\n endpoint: s.AssistantsEndpoint;\n version: number | string;\n}): Promise<a.AssistantDocument[]> {\n return request.get(\n endpoints.assistants({\n path: 'documents',\n version,\n endpoint,\n }),\n );\n}\n\n/* Tools */\n\nexport const getAvailableTools = (\n version: number | string,\n endpoint: s.AssistantsEndpoint,\n): Promise<s.TPlugin[]> => {\n return request.get(\n endpoints.assistants({\n path: 'tools',\n endpoint,\n version,\n }),\n );\n};\n\n/* Files */\n\nexport const getFiles = (): Promise<f.TFile[]> => {\n return request.get(endpoints.files());\n};\n\nexport const getFileConfig = (): Promise<f.FileConfig> => {\n return request.get(`${endpoints.files()}/config`);\n};\n\nexport const uploadImage = (data: FormData): Promise<f.TFileUpload> => {\n return request.postMultiPart(endpoints.images(), data);\n};\n\nexport const uploadFile = (data: FormData): Promise<f.TFileUpload> => {\n return request.postMultiPart(endpoints.files(), data);\n};\n\n/**\n * Imports a conversations file.\n *\n * @param data - The FormData containing the file to import.\n * @returns A Promise that resolves to the import start response.\n */\nexport const importConversationsFile = (data: FormData): Promise<t.TImportStartResponse> => {\n return request.postMultiPart(endpoints.importConversation(), data);\n};\n\n/**\n * Retrieves the status of an import conversation job.\n *\n * @param jobId - The ID of the import conversation job.\n * @returns A promise that resolves to the import job status.\n */\nexport const queryImportConversationJobStatus = async (\n jobId: string,\n): Promise<t.TImportJobStatus> => {\n return request.get(endpoints.importConversationJobStatus(jobId));\n};\n\nexport const uploadAvatar = (data: FormData): Promise<f.AvatarUploadResponse> => {\n return request.postMultiPart(endpoints.avatar(), data);\n};\n\nexport const uploadAssistantAvatar = (data: m.AssistantAvatarVariables): Promise<a.Assistant> => {\n return request.postMultiPart(\n endpoints.assistants({\n path: `avatar/${data.assistant_id}`,\n options: { model: data.model, endpoint: data.endpoint },\n version: data.version,\n }),\n data.formData,\n );\n};\n\nexport const getFileDownload = async (userId: string, file_id: string): Promise<AxiosResponse> => {\n return request.getResponse(`${endpoints.files()}/download/${userId}/${file_id}`, {\n responseType: 'blob',\n headers: {\n Accept: 'application/octet-stream',\n },\n });\n};\n\nexport const deleteFiles = async (\n files: f.BatchFile[],\n assistant_id?: string,\n tool_resource?: a.EToolResources,\n): Promise<f.DeleteFilesResponse> =>\n request.deleteWithOptions(endpoints.files(), {\n data: { files, assistant_id, tool_resource },\n });\n\nexport const speechToText = (data: FormData): Promise<f.SpeechToTextResponse> => {\n return request.postMultiPart(endpoints.speechToText(), data);\n};\n\nexport const textToSpeech = (data: FormData): Promise<ArrayBuffer> => {\n return request.postTTS(endpoints.textToSpeechManual(), data);\n};\n\nexport const getVoices = (): Promise<f.VoiceResponse> => {\n return request.get(endpoints.textToSpeechVoices());\n};\n\n/* actions */\n\nexport const updateAction = (data: m.UpdateActionVariables): Promise<m.UpdateActionResponse> => {\n const { assistant_id, version, ...body } = data;\n return request.post(\n endpoints.assistants({\n path: `actions/${assistant_id}`,\n version,\n }),\n body,\n );\n};\n\nexport function getActions({\n endpoint,\n version,\n}: {\n endpoint: s.AssistantsEndpoint;\n version: number | string;\n}): Promise<a.Action[]> {\n return request.get(\n endpoints.assistants({\n path: 'actions',\n version,\n endpoint,\n }),\n );\n}\n\nexport const deleteAction = async ({\n assistant_id,\n action_id,\n model,\n version,\n endpoint,\n}: m.DeleteActionVariables & { version: number | string }): Promise<void> =>\n request.delete(\n endpoints.assistants({\n path: `actions/${assistant_id}/${action_id}/${model}`,\n version,\n endpoint,\n }),\n );\n\n/* conversations */\n\nexport function forkConversation(payload: t.TForkConvoRequest): Promise<t.TForkConvoResponse> {\n return request.post(endpoints.forkConversation(), payload);\n}\n\nexport function deleteConversation(payload: t.TDeleteConversationRequest) {\n //todo: this should be a DELETE request\n return request.post(endpoints.deleteConversation(), { arg: payload });\n}\n\nexport function clearAllConversations(): Promise<unknown> {\n return request.post(endpoints.deleteConversation(), { arg: {} });\n}\n\nexport const listConversations = (\n params?: q.ConversationListParams,\n): Promise<q.ConversationListResponse> => {\n // Assuming params has a pageNumber property\n const pageNumber = params?.pageNumber || '1'; // Default to page 1 if not provided\n const isArchived = params?.isArchived || false; // Default to false if not provided\n return request.get(endpoints.conversations(pageNumber, isArchived));\n};\n\nexport const listConversationsByQuery = (\n params?: q.ConversationListParams & { searchQuery?: string },\n): Promise<q.ConversationListResponse> => {\n const pageNumber = params?.pageNumber || '1'; // Default to page 1 if not provided\n const searchQuery = params?.searchQuery || ''; // If no search query is provided, default to an empty string\n // Update the endpoint to handle a search query\n if (searchQuery !== '') {\n return request.get(endpoints.search(searchQuery, pageNumber));\n } else {\n return request.get(endpoints.conversations(pageNumber));\n }\n};\n\nexport const searchConversations = async (\n q: string,\n pageNumber: string,\n): Promise<t.TSearchResults> => {\n return request.get(endpoints.search(q, pageNumber));\n};\n\nexport function getConversations(pageNumber: string): Promise<t.TGetConversationsResponse> {\n return request.get(endpoints.conversations(pageNumber));\n}\n\nexport function getConversationById(id: string): Promise<s.TConversation> {\n return request.get(endpoints.conversationById(id));\n}\n\nexport function updateConversation(\n payload: t.TUpdateConversationRequest,\n): Promise<t.TUpdateConversationResponse> {\n return request.post(endpoints.updateConversation(), { arg: payload });\n}\n\nexport function archiveConversation(\n payload: t.TArchiveConversationRequest,\n): Promise<t.TArchiveConversationResponse> {\n return request.post(endpoints.updateConversation(), { arg: payload });\n}\n\nexport function genTitle(payload: m.TGenTitleRequest): Promise<m.TGenTitleResponse> {\n return request.post(endpoints.genTitle(), payload);\n}\n","/* eslint-disable */\n/**\n * Copyright (C) 2016 Maxime Petazzoni <maxime.petazzoni@bulix.org>.\n * All rights reserved.\n */\n\nimport request from './request';\nimport { setTokenHeader } from './headers-helpers';\n\nvar SSE = function (url, options) {\n if (!(this instanceof SSE)) {\n return new SSE(url, options);\n }\n\n this.INITIALIZING = -1;\n this.CONNECTING = 0;\n this.OPEN = 1;\n this.CLOSED = 2;\n\n this.url = url;\n\n options = options || {};\n this.headers = options.headers || {};\n this.payload = options.payload !== undefined ? options.payload : '';\n this.method = options.method || (this.payload && 'POST') || 'GET';\n this.withCredentials = !!options.withCredentials;\n\n this.FIELD_SEPARATOR = ':';\n this.listeners = {};\n\n this.xhr = null;\n this.readyState = this.INITIALIZING;\n this.progress = 0;\n this.chunk = '';\n\n this.addEventListener = function (type, listener) {\n if (this.listeners[type] === undefined) {\n this.listeners[type] = [];\n }\n\n if (this.listeners[type].indexOf(listener) === -1) {\n this.listeners[type].push(listener);\n }\n };\n\n this.removeEventListener = function (type, listener) {\n if (this.listeners[type] === undefined) {\n return;\n }\n\n var filtered = [];\n this.listeners[type].forEach(function (element) {\n if (element !== listener) {\n filtered.push(element);\n }\n });\n if (filtered.length === 0) {\n delete this.listeners[type];\n } else {\n this.listeners[type] = filtered;\n }\n };\n\n this.dispatchEvent = function (e) {\n if (!e) {\n return true;\n }\n\n e.source = this;\n\n var onHandler = 'on' + e.type;\n if (this.hasOwnProperty(onHandler)) {\n this[onHandler].call(this, e);\n if (e.defaultPrevented) {\n return false;\n }\n }\n\n if (this.listeners[e.type]) {\n return this.listeners[e.type].every(function (callback) {\n callback(e);\n return !e.defaultPrevented;\n });\n }\n\n return true;\n };\n\n this._setReadyState = function (state) {\n var event = new CustomEvent('readystatechange');\n event.readyState = state;\n this.readyState = state;\n this.dispatchEvent(event);\n };\n\n this._onStreamFailure = function (e) {\n var event = new CustomEvent('error');\n event.data = e.currentTarget.response;\n this.dispatchEvent(event);\n this.close();\n };\n\n this._onStreamAbort = function (e) {\n this.dispatchEvent(new CustomEvent('abort'));\n this.close();\n };\n\n this._onStreamProgress = async function (e) {\n if (!this.xhr) {\n return;\n }\n\n if (this.xhr.status === 401 && !this._retry) {\n this._retry = true;\n try {\n const refreshResponse = await request.refreshToken();\n this.headers = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${refreshResponse.token}`,\n };\n setTokenHeader(refreshResponse.token);\n window.dispatchEvent(new CustomEvent('tokenUpdated', { detail: refreshResponse.token }));\n this.stream();\n } catch (err) {\n this._onStreamFailure(e);\n return;\n }\n } else if (this.xhr.status !== 200) {\n this._onStreamFailure(e);\n return;\n }\n\n if (this.readyState == this.CONNECTING) {\n this.dispatchEvent(new CustomEvent('open'));\n this._setReadyState(this.OPEN);\n }\n\n var data = this.xhr.responseText.substring(this.progress);\n this.progress += data.length;\n data.split(/(\\r\\n|\\r|\\n){2}/g).forEach(\n function (part) {\n if (part.trim().length === 0) {\n this.dispatchEvent(this._parseEventChunk(this.chunk.trim()));\n this.chunk = '';\n } else {\n this.chunk += part;\n }\n }.bind(this),\n );\n };\n\n this._onStreamLoaded = function (e) {\n this._onStreamProgress(e);\n\n // Parse the last chunk.\n this.dispatchEvent(this._parseEventChunk(this.chunk));\n this.chunk = '';\n };\n\n /**\n * Parse a received SSE event chunk into a constructed event object.\n */\n this._parseEventChunk = function (chunk) {\n if (!chunk || chunk.length === 0) {\n return null;\n }\n\n var e = { id: null, retry: null, data: '', event: 'message' };\n chunk.split(/\\n|\\r\\n|\\r/).forEach(\n function (line) {\n line = line.trimRight();\n var index = line.indexOf(this.FIELD_SEPARATOR);\n if (index <= 0) {\n // Line was either empty, or started with a separator and is a comment.\n // Either way, ignore.\n return;\n }\n\n var field = line.substring(0, index);\n if (!(field in e)) {\n return;\n }\n\n var value = line.substring(index + 1).trimLeft();\n if (field === 'data') {\n e[field] += value;\n } else {\n e[field] = value;\n }\n }.bind(this),\n );\n\n var event = new CustomEvent(e.event);\n event.data = e.data;\n event.id = e.id;\n return event;\n };\n\n this._checkStreamClosed = function () {\n if (!this.xhr) {\n return;\n }\n\n if (this.xhr.readyState === XMLHttpRequest.DONE) {\n this._setReadyState(this.CLOSED);\n }\n };\n\n this.stream = function () {\n this._setReadyState(this.CONNECTING);\n\n this.xhr = new XMLHttpRequest();\n this.xhr.addEventListener('progress', this._onStreamProgress.bind(this));\n this.xhr.addEventListener('load', this._onStreamLoaded.bind(this));\n this.xhr.addEventListener('readystatechange', this._checkStreamClosed.bind(this));\n this.xhr.addEventListener('error', this._onStreamFailure.bind(this));\n this.xhr.addEventListener('abort', this._onStreamAbort.bind(this));\n this.xhr.open(this.method, this.url);\n for (var header in this.headers) {\n this.xhr.setRequestHeader(header, this.headers[header]);\n }\n this.xhr.withCredentials = this.withCredentials;\n this.xhr.send(this.payload);\n };\n\n this.close = function () {\n if (this.readyState === this.CLOSED) {\n return;\n }\n\n this.xhr.abort();\n this.xhr = null;\n this._setReadyState(this.CLOSED);\n };\n};\n\nexport { SSE };\n// Export our SSE module for npm.js\n// if (typeof exports !== 'undefined') {\n// // exports.SSE = SSE;\n// module.exports = { SSE };\n// }\n","import axios from 'axios';\nimport { URL } from 'url';\nimport crypto from 'crypto';\nimport { load } from 'js-yaml';\nimport type { FunctionTool, Schema, Reference, ActionMetadata } from './types/assistants';\nimport type { OpenAPIV3 } from 'openapi-types';\nimport { Tools, AuthTypeEnum, AuthorizationTypeEnum } from './types/assistants';\n\nexport type ParametersSchema = {\n type: string;\n properties: Record<string, Reference | Schema>;\n required: string[];\n};\n\nexport type ApiKeyCredentials = {\n api_key: string;\n custom_auth_header?: string;\n authorization_type?: AuthorizationTypeEnum;\n};\n\nexport type OAuthCredentials = {\n tokenUrl: string;\n clientId: string;\n clientSecret: string;\n scope: string;\n};\n\nexport type Credentials = ApiKeyCredentials | OAuthCredentials;\n\nexport function sha1(input: string) {\n return crypto.createHash('sha1').update(input).digest('hex');\n}\n\nexport function createURL(domain: string, path: string) {\n const myURL = new URL(path, domain);\n return myURL.toString();\n}\n\nexport class FunctionSignature {\n name: string;\n description: string;\n parameters: ParametersSchema;\n\n constructor(name: string, description: string, parameters: ParametersSchema) {\n this.name = name;\n this.description = description;\n if (parameters.properties?.['requestBody']) {\n this.parameters = parameters.properties?.['requestBody'] as ParametersSchema;\n } else {\n this.parameters = parameters;\n }\n }\n\n toObjectTool(): FunctionTool {\n return {\n type: Tools.function,\n function: {\n name: this.name,\n description: this.description,\n parameters: this.parameters,\n },\n };\n }\n}\n\nexport class ActionRequest {\n domain: string;\n path: string;\n method: string;\n operation: string;\n operationHash?: string;\n isConsequential: boolean;\n contentType: string;\n params?: object;\n\n constructor(\n domain: string,\n path: string,\n method: string,\n operation: string,\n isConsequential: boolean,\n contentType: string,\n ) {\n this.domain = domain;\n this.path = path;\n this.method = method;\n this.operation = operation;\n this.isConsequential = isConsequential;\n this.contentType = contentType;\n }\n\n private authHeaders: Record<string, string> = {};\n private authToken?: string;\n\n async setParams(params: object) {\n this.operationHash = sha1(JSON.stringify(params));\n this.params = params;\n\n for (const [key, value] of Object.entries(params)) {\n const paramPattern = `{${key}}`;\n if (this.path.includes(paramPattern)) {\n this.path = this.path.replace(paramPattern, encodeURIComponent(value as string));\n delete (this.params as Record<string, unknown>)[key];\n }\n }\n }\n\n async setAuth(metadata: ActionMetadata) {\n if (!metadata.auth) {\n return;\n }\n\n const {\n type,\n /* API Key */\n authorization_type,\n custom_auth_header,\n /* OAuth */\n authorization_url,\n client_url,\n scope,\n token_exchange_method,\n } = metadata.auth;\n\n const {\n /* API Key */\n api_key,\n /* OAuth */\n oauth_client_id,\n oauth_client_secret,\n } = metadata;\n\n const isApiKey = api_key && type === AuthTypeEnum.ServiceHttp;\n const isOAuth =\n oauth_client_id &&\n oauth_client_secret &&\n type === AuthTypeEnum.OAuth &&\n authorization_url &&\n client_url &&\n scope &&\n token_exchange_method;\n\n if (isApiKey && authorization_type === AuthorizationTypeEnum.Basic) {\n const basicToken = Buffer.from(api_key).toString('base64');\n this.authHeaders['Authorization'] = `Basic ${basicToken}`;\n } else if (isApiKey && authorization_type === AuthorizationTypeEnum.Bearer) {\n this.authHeaders['Authorization'] = `Bearer ${api_key}`;\n } else if (\n isApiKey &&\n authorization_type === AuthorizationTypeEnum.Custom &&\n custom_auth_header\n ) {\n this.authHeaders[custom_auth_header] = api_key;\n } else if (isOAuth) {\n // TODO: WIP - OAuth support\n if (!this.authToken) {\n const tokenResponse = await axios.post(\n client_url,\n {\n client_id: oauth_client_id,\n client_secret: oauth_client_secret,\n scope: scope,\n grant_type: 'client_credentials',\n },\n {\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n },\n );\n this.authToken = tokenResponse.data.access_token;\n }\n this.authHeaders['Authorization'] = `Bearer ${this.authToken}`;\n }\n }\n\n async execute() {\n const url = createURL(this.domain, this.path);\n const headers = {\n ...this.authHeaders,\n 'Content-Type': this.contentType,\n };\n\n const method = this.method.toLowerCase();\n\n if (method === 'get') {\n return axios.get(url, { headers, params: this.params });\n } else if (method === 'post') {\n return axios.post(url, this.params, { headers });\n } else if (method === 'put') {\n return axios.put(url, this.params, { headers });\n } else if (method === 'delete') {\n return axios.delete(url, { headers, data: this.params });\n } else if (method === 'patch') {\n return axios.patch(url, this.params, { headers });\n } else {\n throw new Error(`Unsupported HTTP method: ${this.method}`);\n }\n }\n}\n\nexport function resolveRef(\n schema: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject | OpenAPIV3.RequestBodyObject,\n components?: OpenAPIV3.ComponentsObject,\n): OpenAPIV3.SchemaObject {\n if ('$ref' in schema && components) {\n const refPath = schema.$ref.replace(/^#\\/components\\/schemas\\//, '');\n const resolvedSchema = components.schemas?.[refPath];\n if (!resolvedSchema) {\n throw new Error(`Reference ${schema.$ref} not found`);\n }\n return resolveRef(resolvedSchema, components);\n }\n return schema as OpenAPIV3.SchemaObject;\n}\n\nfunction sanitizeOperationId(input: string) {\n return input.replace(/[^a-zA-Z0-9_-]/g, '');\n}\n\n/** Function to convert OpenAPI spec to function signatures and request builders */\nexport function openapiToFunction(openapiSpec: OpenAPIV3.Document): {\n functionSignatures: FunctionSignature[];\n requestBuilders: Record<string, ActionRequest>;\n} {\n const functionSignatures: FunctionSignature[] = [];\n const requestBuilders: Record<string, ActionRequest> = {};\n\n // Base URL from OpenAPI spec servers\n const baseUrl = openapiSpec.servers?.[0]?.url ?? '';\n\n // Iterate over each path and method in the OpenAPI spec\n for (const [path, methods] of Object.entries(openapiSpec.paths)) {\n for (const [method, operation] of Object.entries(methods as OpenAPIV3.PathsObject)) {\n const operationObj = operation as OpenAPIV3.OperationObject & {\n 'x-openai-isConsequential'?: boolean;\n };\n\n // Operation ID is used as the function name\n const defaultOperationId = `${method}_${path}`;\n const operationId = operationObj.operationId || sanitizeOperationId(defaultOperationId);\n const description = operationObj.summary || operationObj.description || '';\n\n const parametersSchema: ParametersSchema = { type: 'object', properties: {}, required: [] };\n\n if (operationObj.requestBody) {\n const requestBody = operationObj.requestBody as OpenAPIV3.RequestBodyObject;\n const content = requestBody.content;\n const contentType = Object.keys(content)[0];\n const schema = content[contentType]?.schema;\n const resolvedSchema = resolveRef(\n schema as OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject,\n openapiSpec.components,\n );\n parametersSchema.properties['requestBody'] = resolvedSchema;\n }\n\n if (operationObj.parameters) {\n for (const param of operationObj.parameters) {\n const paramObj = param as OpenAPIV3.ParameterObject;\n const resolvedSchema = resolveRef(\n { ...paramObj.schema } as OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject,\n openapiSpec.components,\n );\n parametersSchema.properties[paramObj.name] = resolvedSchema;\n if (paramObj.required) {\n parametersSchema.required.push(paramObj.name);\n }\n if (paramObj.description && !('$$ref' in parametersSchema.properties[paramObj.name])) {\n parametersSchema.properties[paramObj.name].description = paramObj.description;\n }\n }\n }\n\n const functionSignature = new FunctionSignature(operationId, description, parametersSchema);\n functionSignatures.push(functionSignature);\n\n const actionRequest = new ActionRequest(\n baseUrl,\n path,\n method,\n operationId,\n !!operationObj['x-openai-isConsequential'], // Custom extension for consequential actions\n operationObj.requestBody ? 'application/json' : 'application/x-www-form-urlencoded',\n );\n\n requestBuilders[operationId] = actionRequest;\n }\n }\n\n return { functionSignatures, requestBuilders };\n}\n\nexport type ValidationResult = {\n status: boolean;\n message: string;\n spec?: OpenAPIV3.Document;\n};\n\nexport function validateAndParseOpenAPISpec(specString: string): ValidationResult {\n try {\n let parsedSpec;\n try {\n parsedSpec = JSON.parse(specString);\n } catch {\n parsedSpec = load(specString);\n }\n\n // Check for servers\n if (\n !parsedSpec.servers ||\n !Array.isArray(parsedSpec.servers) ||\n parsedSpec.servers.length === 0\n ) {\n return { status: false, message: 'Could not find a valid URL in `servers`' };\n }\n\n if (!parsedSpec.servers[0].url) {\n return { status: false, message: 'Could not find a valid URL in `servers`' };\n }\n\n // Check for paths\n const paths = parsedSpec.paths;\n if (!paths || typeof paths !== 'object' || Object.keys(paths).length === 0) {\n return { status: false, message: 'No paths found in the OpenAPI spec.' };\n }\n\n const components = parsedSpec.components?.schemas || {};\n const messages = [];\n\n for (const [path, methods] of Object.entries(paths)) {\n for (const [httpMethod, operation] of Object.entries(methods as OpenAPIV3.PathItemObject)) {\n // Ensure operation is a valid operation object\n const { responses } = operation as OpenAPIV3.OperationObject;\n if (typeof operation === 'object' && responses) {\n for (const [statusCode, response] of Object.entries(responses)) {\n const content = (response as OpenAPIV3.ResponseObject).content;\n if (content && content['application/json'] && content['application/json'].schema) {\n const schema = content['application/json'].schema;\n if ('$ref' in schema && typeof schema.$ref === 'string') {\n const refName = schema.$ref.split('/').pop();\n if (refName && !components[refName]) {\n messages.push(\n `In context=('paths', '${path}', '${httpMethod}', '${statusCode}', 'response', 'content', 'application/json', 'schema'), reference to unknown component ${refName}; using empty schema`,\n );\n }\n }\n }\n }\n }\n }\n }\n\n return {\n status: true,\n message: messages.join('\\n') || 'OpenAPI spec is valid.',\n spec: parsedSpec,\n };\n } catch (error) {\n return { status: false, message: 'Error parsing OpenAPI spec.' };\n }\n}\n","import type * as t from './types';\nimport { EndpointURLs } from './config';\nimport * as s from './schemas';\n\nexport default function createPayload(submission: t.TSubmission) {\n const { conversation, userMessage, endpointOption, isEdited, isContinued } = submission;\n const { conversationId } = s.tConvoUpdateSchema.parse(conversation);\n const { endpoint, endpointType } = endpointOption as {\n endpoint: s.EModelEndpoint;\n endpointType?: s.EModelEndpoint;\n };\n\n let server = EndpointURLs[endpointType ?? endpoint];\n\n if (isEdited && s.isAssistantsEndpoint(endpoint)) {\n server += '/modify';\n } else if (isEdited) {\n server = server.replace('/ask/', '/edit/');\n }\n\n const payload: t.TPayload = {\n ...userMessage,\n ...endpointOption,\n isContinued: !!(isEdited && isContinued),\n conversationId,\n };\n\n return { server, payload };\n}\n"],"names":["Tools","EToolResources","AnnotationTypes","ContentTypes","StepTypes","ToolCallTypes","StepStatus","MessageContentTypes","RunStatus","AuthTypeEnum","AuthorizationTypeEnum","TokenExchangeMethodEnum","FilePurpose","actionDelimiter","actionDomainSeparator","hostImageIdSuffix","hostImageNamePrefix","AssistantStreamEvents","defaultOrderQuery","order","limit","AuthType","isUUID","z","string","uuid","EModelEndpoint","authTypeSchema","nativeEnum","ImageDetail","isAssistantsEndpoint","endpoint","toLowerCase","endsWith","assistants","EAgent","imageDetailNumeric","_a","low","auto","high","imageDetailValue","eImageDetailSchema","defaultAssistantFormValues","assistant","id","name","description","instructions","model","functions","code_interpreter","image_vision","retrieval","ImageVisionTool","_b","type","function","parameters","properties","required","isImageVisionTool","tool","openAISettings","default","temperature","min","max","step","top_p","presence_penalty","frequency_penalty","resendFiles","maxContextTokens","undefined","max_tokens","imageDetail","googleSettings","maxOutputTokens","topP","topK","endpointSettings","_c","openAI","google","eModelEndpointSchema","extendedModelEndpointSchema","union","tPluginAuthConfigSchema","object","authField","label","tPluginSchema","pluginKey","icon","authConfig","array","authenticated","boolean","optional","isButton","tExampleSchema","input","content","output","agentOptionSettings","agent","options","classic","skipCompletion","eAgentOptionsSchema","tAgentOptionsSchema","number","tMessageSchema","messageId","clientId","nullable","conversationId","parentMessageId","responseMessageId","overrideParentMessageId","bg","title","or","literal","sender","text","generation","isEdited","isCreatedByUser","error","createdAt","Date","toISOString","updatedAt","current","unfinished","searchResult","finish_reason","thread_id","iconURL","coerceNumber","transform","val","trim","parseFloat","tConversationSchema","user","endpointType","suggestions","messages","tools","modelLabel","examples","chatGptLabel","userLabel","promptPrefix","context","agentOptions","file_ids","assistant_id","presetOverride","record","unknown","stop","greeting","spec","systemMessage","jailbreak","jailbreakConversationId","conversationSignature","invocationId","toneStyle","resendImages","tPresetSchema","omit","merge","presetId","defaultPreset","tConvoUpdateSchema","tPresetUpdateSchema","tSharedLinkSchema","shareId","isAnonymous","isPublic","isVisible","openAISchema","pick","obj","result","__assign","_d","_e","_f","_g","_h","_j","_k","_l","_m","_o","_p","_q","catch","googleSchema","bingAISchema","anthropicSchema","chatGPTBrowserSchema","gptPluginsSchema","removeNullishValues","newObj","Object","keys","forEach","key","assistantSchema","compactAssistantSchema","compactOpenAISchema","compactGoogleSchema","compactAnthropicSchema","compactChatGPTSchema","compactPluginsSchema","length","supportsFiles","azureAssistants","azureOpenAI","anthropic","custom","excelFileTypes","fullMimeTypesList","__spreadArray","codeInterpreterMimeTypesList","retrievalMimeTypesList","imageExtRegex","excelMimeTypes","textMimeTypes","applicationMimeTypes","imageMimeTypes","supportedMimeTypes","codeInterpreterMimeTypes","codeTypeMapping","c","cs","cpp","md","php","py","rb","tex","js","sh","ts","tar","zip","retrievalMimeTypes","megabyte","mbToBytes","mb","defaultSizeLimit","assistantsFileConfig","fileLimit","fileSizeLimit","totalSizeLimit","disabled","fileConfig","endpoints","serverFileSizeLimit","avatarSizeLimit","checkType","fileType","supportedTypes","some","regex","test","supportedMimeTypesSchema","any","refine","mimeTypes","every","mimeType","RegExp","message","endpointFileConfigSchema","fileConfigSchema","convertStringsToRegex","patterns","reduce","acc","pattern","push","console","mergeFileConfig","dynamic","mergedConfig","dynamicEndpoint","mergedEndpoint","field","FileSources","tModelSpecSchema","preset","showIconInMenu","showIconInHeader","authType","specsConfigSchema","enforce","prioritize","list","FileContext","checkOpenAIStorage","source","openai","azure","SettingsViews","defaultSocialLogins","defaultRetrievalModels","fileSourceSchema","getSchemaDefaults","schema","shape","entries","map","value","ZodDefault","_def","defaultValue","fromEntries","Capabilities","modelConfigSchema","deploymentName","version","azureBaseSchema","apiKey","serverless","instanceName","addParams","dropParams","forcePrompt","baseURL","additionalHeaders","azureGroupSchema","group","models","and","azureGroupConfigsSchema","EImageOutputType","defaultAssistantsVersion","assistantEndpointSchema","disableBuilder","pollIntervalMs","timeoutMs","supportedIds","excludedIds","privateAssistants","retrievalModels","capabilities","actions","fetch","userIdQuery","titleConvo","titleMethod","titleModel","headers","endpointSchema","safeParse","success","concat","values","join","summarize","summaryModel","modelDisplayLabel","customOrder","directEndpoint","titleMessageRole","azureEndpointSchema","groups","plugins","partial","ttsOpenaiSchema","url","voices","ttsElevenLabsSchema","websocketUrl","voice_settings","similarity_boost","stability","style","use_speaker_boost","pronunciation_dictionary_locators","ttsLocalaiSchema","backend","ttsSchema","elevenLabs","localai","sttSchema","rateLimitSchema","fileUploads","ipMax","ipWindowInMinutes","userMax","userWindowInMinutes","conversationsImport","KnownEndpoints","FetchTokenConfig","configSchema","cache","secureImageLinks","imageOutputType","PNG","includedTools","filteredTools","interface","privacyPolicy","externalUrl","openNewTab","termsOfService","endpointsMenu","modelSelect","sidePanel","presets","fileStrategy","local","registration","socialLogins","allowedDomains","tts","stt","rateLimits","modelSpecs","strict","data","getConfigDefaults","VisionModes","defaultEndpoints","bingAI","chatGPTBrowser","gptPlugins","alternateName","sharedOpenAIModels","defaultModels","openAIModels","initialModelsConfig","initial","filter","str","EndpointURLs","modularEndpoints","Set","supportsBalanceCheck","visionModels","validateVisionModel","additionalModels","availableModels","includes","visionModel","CacheKeys","ViolationTypes","ErrorTypes","AuthKeys","ImageDetailCost","SettingsTabValues","Constants","LocalStorageKeys","ForkOptions","CohereConstants","imageGenTools","endpointSchemas","getEnabledEndpoints","endpointsEnv","process","env","ENDPOINTS","enabledEndpoints","split","orderEndpointsConfig","endpointsConfig","endpointKeys","defaultCustomIndex","indexOf","accumulatedConfig","currentEndpointKey","isCustom","index","errorsToString","errors","path","envVarRegex","extractEnvVariable","envVarMatch","match","resolveHeaders","resolvedHeaders","Array","isArray","getFirstDefinedValue","possibleValues","returnValue","_i","possibleValues_1","parseConvo","conversation","Error","convo","parse","secondaryModels","getResponseSender","endpointOption","compactEndpointSchemas","parseCompactConvo","parseTextParts","contentParts","contentParts_1","part","TEXT","textValue","ComponentTypes","SettingTypes","OptionTypes","deprecatedAzureVariables","conflictingAzureVariables","validateAzureGroups","configs","isValid","modelNames","modelGroupMap","groupMap","groupName","rest","modelName","mapModelToAzureConfig","modelConfig","groupConfig","result_1","azureOptions","azureOpenAIApiKey","apiKeyValue","modelDetails","azureOpenAIApiInstanceName","azureOpenAIApiDeploymentName","azureOpenAIApiVersion","mapGroupToAzureConfig","firstModelName","requiredSettingFields","generateDynamicSchema","settings","schemaFields","settings_1","setting","range","minText","maxText","minTags","maxTags","Number","Boolean","String","Enum","warn","ZodArray","enum","ZodTypeToSettingType","ZodString","ZodNumber","ZodBoolean","validateSettingDefinitions","columnsSet","settings_2","columns","code","ZodIssueCode","add","size","next","settings_3","requiredSettingFields_1","settingTypes","component","Tags","Input","Textarea","placeholder","Slider","includeInput","Math","round","Checkbox","Switch","Dropdown","columnSpan","floor","optionType","Custom","conversationSchema","zodType","typeName","isNaN","ZodError","QueryKeys","MutationKeys","generateOpenAISchema","customOpenAI","defaults","generateGoogleSchema","customGoogle","setAcceptLanguageHeader","axios","common","setTokenHeader","token","shareRoot","shareMessages","createSharedLink","updateSharedLink","keysEndpoint","conversationsRoot","conversations","pageNumber","isArchived","updateConversation","deleteConversation","importConversationJobStatus","jobId","search","q","queryParams","URLSearchParams","toString","images","textToSpeech","_post","post","JSON","stringify","sent","isRefreshing","failedQueue","refreshToken","retry","endpoints.refreshToken","processQueue","prom","reject","resolve","interceptors","response","use","__awaiter","originalRequest","config","status","_retry","Promise","err_1","window","dispatchEvent","CustomEvent","detail","location","href","err_2","request","get","getResponse","postMultiPart","formData","postTTS","responseType","put","delete","deleteWithOptions","patch","abortKey","endpoints.abortRequest","arg","payload","endpoints.updateConversation","endpoints.deleteConversation","__rest","endpoints.assistants","endpoints.createSharedLink","action_id","files","tool_resource","endpoints.shareMessages","endpoints.conversationById","endpoints.conversations","userId","file_id","Accept","endpoints.messages","params","searchQuery","endpoints.search","endpoints.getSharedLinks","endpoints.importConversationJobStatus","endpoints.revokeUserKey","body","endpoints.updateSharedLink","endpoints.images","endpoints.userKeyQuery","SSE","this","INITIALIZING","CONNECTING","OPEN","CLOSED","method","withCredentials","FIELD_SEPARATOR","listeners","xhr","readyState","progress","chunk","addEventListener","listener","removeEventListener","filtered","element","e","onHandler","hasOwnProperty","call","defaultPrevented","callback","_setReadyState","state","event","_onStreamFailure","currentTarget","close","_onStreamAbort","_onStreamProgress","async","refreshResponse","Authorization","stream","err","responseText","substring","_parseEventChunk","bind","_onStreamLoaded","line","trimRight","trimLeft","_checkStreamClosed","XMLHttpRequest","DONE","header","open","setRequestHeader","send","abort","sha1","crypto","createHash","update","digest","createURL","domain","URL","FunctionSignature","prototype","toObjectTool","ActionRequest","operation","isConsequential","contentType","authHeaders","setParams","operationHash","paramPattern","replace","encodeURIComponent","setAuth","metadata","auth","authorization_type","custom_auth_header","authorization_url","client_url","scope","token_exchange_method","api_key","oauth_client_id","oauth_client_secret","isApiKey","ServiceHttp","isOAuth","OAuth","Basic","basicToken","Buffer","from","Bearer","authToken","client_id","client_secret","grant_type","tokenResponse","access_token","execute","resolveRef","components","refPath","$ref","resolvedSchema","schemas","openapiToFunction","openapiSpec","functionSignatures","requestBuilders","baseUrl","servers","paths","methods","operationObj","defaultOperationId","operationId","summary","parametersSchema","requestBody","paramObj","functionSignature","actionRequest","validateAndParseOpenAPISpec","specString","parsedSpec","load","httpMethod","responses","statusCode","refName","pop","createPayload","submission","userMessage","isContinued","s.tConvoUpdateSchema","server","s.isAssistantsEndpoint"],"mappings":"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"}
|