| import { specialVariables } from 'librechat-data-provider'; |
| import type { TPromptGroup } from 'librechat-data-provider'; |
|
|
| |
| |
| |
| export const detectVariables = (text: string): boolean => { |
| |
| const allVariablesRegex = /{{([^{}]+?)}}/gi; |
| const matches = Array.from(text.matchAll(allVariablesRegex)).map((match) => |
| match[1].trim().toLowerCase(), |
| ); |
|
|
| |
| return matches.some((variable) => !specialVariables[variable]); |
| }; |
|
|
| export const wrapVariable = (variable: string) => `{{${variable}}}`; |
|
|
| export const extractUniqueVariables = (text: string): string[] => { |
| const regex = /{{(.*?)}}/g; |
| let match: RegExpExecArray | null; |
| const variables = new Set<string>(); |
| while ((match = regex.exec(text)) !== null) { |
| variables.add(match[1]); |
| } |
| return Array.from(variables); |
| }; |
|
|
| export const extractVariableInfo = (text: string) => { |
| const regex = /{{(.*?)}}/g; |
| let match: RegExpExecArray | null; |
| const allVariables: string[] = []; |
| const uniqueVariables: string[] = []; |
| const repeatedVariables: Set<string> = new Set(); |
| const variableCount: Map<string, number> = new Map(); |
| const variableIndexMap: Map<string, number> = new Map(); |
|
|
| while ((match = regex.exec(text)) !== null) { |
| const variable = match[1]; |
| allVariables.push(variable); |
|
|
| const count = variableCount.get(variable) ?? 0; |
| variableCount.set(variable, count + 1); |
|
|
| if (count > 0) { |
| repeatedVariables.add(variable); |
| } else { |
| uniqueVariables.push(variable); |
| variableIndexMap.set(variable, uniqueVariables.length - 1); |
| } |
| } |
|
|
| return { |
| allVariables, |
| uniqueVariables, |
| repeatedVariables, |
| variableIndexMap, |
| }; |
| }; |
|
|
| export function formatDateTime(dateTimeString: string) { |
| const date = new Date(dateTimeString); |
|
|
| const month = date.getMonth() + 1; |
| const day = date.getDate(); |
| const year = date.getFullYear(); |
| const hours = date.getHours(); |
| const minutes = date.getMinutes(); |
| const seconds = date.getSeconds(); |
|
|
| const formattedMinutes = minutes.toString().padStart(2, '0'); |
| const formattedSeconds = seconds.toString().padStart(2, '0'); |
|
|
| const ampm = hours >= 12 ? 'PM' : 'AM'; |
|
|
| const formattedHours = hours % 12 || 12; |
|
|
| const formattedDate = `${month}/${day}/${year}`; |
| const formattedTime = `${formattedHours}:${formattedMinutes}:${formattedSeconds} ${ampm}`; |
|
|
| return `${formattedDate}, ${formattedTime}`; |
| } |
|
|
| export const mapPromptGroups = (groups: TPromptGroup[]): Record<string, TPromptGroup> => { |
| return groups.reduce( |
| (acc, group) => { |
| if (!group._id) { |
| return acc; |
| } |
| acc[group._id] = group; |
| return acc; |
| }, |
| {} as Record<string, TPromptGroup>, |
| ); |
| }; |
|
|