92 lines
2.8 KiB
TypeScript
92 lines
2.8 KiB
TypeScript
/*
|
|
Copyright (C) 2023-2026 QuantumNous
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU Affero General Public License as
|
|
published by the Free Software Foundation, either version 3 of the
|
|
License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU Affero General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Affero General Public License
|
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
For commercial licensing, please contact support@quantumnous.com
|
|
*/
|
|
import { z } from 'zod'
|
|
|
|
export const STORAGE_VERSION = 1
|
|
export const MAX_STORED_MESSAGES = 100
|
|
export const MAX_STORED_MESSAGES_BYTES = 1024 * 1024
|
|
export const MAX_LOADED_MESSAGES_CHARS = 120_000
|
|
export const MAX_LOADED_MESSAGE_CHARS = 40_000
|
|
|
|
export const playgroundConfigSchema = z.object({
|
|
model: z.string().optional(),
|
|
group: z.string().optional(),
|
|
temperature: z.number().optional(),
|
|
top_p: z.number().optional(),
|
|
max_tokens: z.number().optional(),
|
|
frequency_penalty: z.number().optional(),
|
|
presence_penalty: z.number().optional(),
|
|
seed: z.number().nullable().optional(),
|
|
stream: z.boolean().optional(),
|
|
})
|
|
|
|
export const parameterEnabledSchema = z.object({
|
|
temperature: z.boolean().optional(),
|
|
top_p: z.boolean().optional(),
|
|
max_tokens: z.boolean().optional(),
|
|
frequency_penalty: z.boolean().optional(),
|
|
presence_penalty: z.boolean().optional(),
|
|
seed: z.boolean().optional(),
|
|
})
|
|
|
|
const messageRoleSchema = z.enum(['user', 'assistant', 'system'])
|
|
const messageStatusSchema = z.enum([
|
|
'loading',
|
|
'streaming',
|
|
'complete',
|
|
'error',
|
|
])
|
|
|
|
const messageVersionSchema = z.object({
|
|
id: z.string(),
|
|
content: z.string(),
|
|
})
|
|
|
|
const sourceSchema = z.object({
|
|
href: z.string(),
|
|
title: z.string(),
|
|
})
|
|
|
|
const reasoningSchema = z.object({
|
|
content: z.string(),
|
|
duration: z.number(),
|
|
startedAt: z.number().optional(),
|
|
completedAt: z.number().optional(),
|
|
durationMs: z.number().optional(),
|
|
})
|
|
|
|
const messageSchema = z.object({
|
|
key: z.string(),
|
|
from: messageRoleSchema,
|
|
versions: z.array(messageVersionSchema).min(1),
|
|
createdAt: z.number().optional(),
|
|
startedAt: z.number().optional(),
|
|
completedAt: z.number().optional(),
|
|
durationMs: z.number().optional(),
|
|
sources: z.array(sourceSchema).optional(),
|
|
reasoning: reasoningSchema.optional(),
|
|
isReasoningStreaming: z.boolean().optional(),
|
|
isReasoningComplete: z.boolean().optional(),
|
|
isContentComplete: z.boolean().optional(),
|
|
status: messageStatusSchema.optional(),
|
|
errorCode: z.string().nullable().optional(),
|
|
})
|
|
|
|
export const messagesSchema = z.array(messageSchema)
|