dvc890's picture
[feat]add project files
41af422
import type { ObjectId } from 'mongodb'
import type { TextAuditServiceOptions, TextAuditServiceProvider } from 'src/utils/textAudit'
export enum Status {
Normal = 0,
Deleted = 1,
InversionDeleted = 2,
ResponseDeleted = 3,
PreVerify = 4,
AdminVerify = 5,
Disabled = 6,
}
export enum UserRole {
Admin = 0,
User = 1,
Guest = 2,
Support = 3,
Viewer = 4,
Contributor = 5,
Developer = 6,
Tester = 7,
Partner = 8,
}
export class UserInfo {
_id: ObjectId
name: string
email: string
password: string
status: Status
createTime: string
verifyTime?: string
avatar?: string
description?: string
updateTime?: string
config?: UserConfig
roles?: UserRole[]
constructor(email: string, password: string) {
this.name = email
this.email = email
this.password = password
this.status = Status.PreVerify
this.createTime = new Date().toLocaleString()
this.verifyTime = null
this.updateTime = new Date().toLocaleString()
this.roles = [UserRole.User]
}
}
export class UserConfig {
chatModel: CHATMODEL
}
// https://platform.openai.com/docs/models/overview
export type CHATMODEL = 'gpt-3.5-turbo' | 'gpt-3.5-turbo-0301' | 'gpt-4' | 'gpt-4-0314' | 'gpt-4-32k' | 'gpt-4-32k-0314' | 'text-davinci-002-render-sha' | 'text-davinci-002-render-sha-mobile' | 'gpt-4-mobile' | 'gpt-4-browsing'
export const CHATMODELS: CHATMODEL[] = [
'gpt-3.5-turbo',
'gpt-3.5-turbo-0301',
'gpt-4',
'gpt-4-0314',
'gpt-4-32k',
'gpt-4-32k-0314',
'text-davinci-002-render-sha',
'text-davinci-002-render-sha-mobile',
'gpt-4-mobile',
'gpt-4-browsing',
]
export const chatModelOptions = [
'gpt-3.5-turbo',
'gpt-3.5-turbo-0301',
'gpt-4',
'gpt-4-0314',
'gpt-4-32k',
'gpt-4-32k-0314',
'text-davinci-002-render-sha',
'text-davinci-002-render-sha-mobile',
'gpt-4-mobile',
'gpt-4-browsing',
].map((model: string) => {
let label = model
if (model === 'text-davinci-002-render-sha')
label = 'gpt-3.5-browsing'
if (model === 'text-davinci-002-render-sha-mobile')
label = 'gpt-3.5-mobile'
return {
label,
key: model,
value: model,
}
})
export class ChatRoom {
_id: ObjectId
roomId: number
userId: string
title: string
prompt: string
usingContext: boolean
status: Status = Status.Normal
constructor(userId: string, title: string, roomId: number) {
this.userId = userId
this.title = title
this.prompt = undefined
this.roomId = roomId
this.usingContext = true
}
}
export class ChatOptions {
parentMessageId?: string
messageId?: string
conversationId?: string
prompt_tokens?: number
completion_tokens?: number
total_tokens?: number
estimated?: boolean
constructor(parentMessageId?: string, messageId?: string, conversationId?: string) {
this.parentMessageId = parentMessageId
this.messageId = messageId
this.conversationId = conversationId
}
}
export class previousResponse {
response: string
options: ChatOptions
}
export class ChatInfo {
_id: ObjectId
roomId: number
uuid: number
dateTime: number
prompt: string
response?: string
status: Status = Status.Normal
options: ChatOptions
previousResponse?: previousResponse[]
constructor(roomId: number, uuid: number, prompt: string, options: ChatOptions) {
this.roomId = roomId
this.uuid = uuid
this.prompt = prompt
this.options = options
this.dateTime = new Date().getTime()
}
}
export class UsageResponse {
prompt_tokens: number
completion_tokens: number
total_tokens: number
estimated: boolean
}
export class ChatUsage {
_id: ObjectId
userId: ObjectId
roomId: number
chatId: ObjectId
messageId: string
promptTokens: number
completionTokens: number
totalTokens: number
estimated: boolean
dateTime: number
constructor(userId: ObjectId, roomId: number, chatId: ObjectId, messageId: string, usage: UsageResponse) {
this.userId = userId
this.roomId = roomId
this.chatId = chatId
this.messageId = messageId
if (usage) {
this.promptTokens = usage.prompt_tokens
this.completionTokens = usage.completion_tokens
this.totalTokens = usage.total_tokens
this.estimated = usage.estimated
}
this.dateTime = new Date().getTime()
}
}
export class Config {
constructor(
public _id: ObjectId,
public timeoutMs: number,
public apiKey?: string,
public apiDisableDebug?: boolean,
public accessToken?: string,
public apiBaseUrl?: string,
public apiModel?: APIMODEL,
public reverseProxy?: string,
public socksProxy?: string,
public socksAuth?: string,
public httpsProxy?: string,
public siteConfig?: SiteConfig,
public mailConfig?: MailConfig,
public auditConfig?: AuditConfig,
) { }
}
export class SiteConfig {
constructor(
public siteTitle?: string,
public loginEnabled?: boolean,
public loginSalt?: string,
public registerEnabled?: boolean,
public registerReview?: boolean,
public registerMails?: string,
public siteDomain?: string,
) { }
}
export class MailConfig {
constructor(
public smtpHost: string,
public smtpPort: number,
public smtpTsl: boolean,
public smtpUserName: string,
public smtpPassword: string,
) { }
}
export class AuditConfig {
constructor(
public enabled: boolean,
public provider: TextAuditServiceProvider,
public options: TextAuditServiceOptions,
public textType: TextAudioType,
public customizeEnabled: boolean,
public sensitiveWords: string,
) { }
}
export enum TextAudioType {
None = 0,
Request = 1 << 0, // 二进制 01
Response = 1 << 1, // 二进制 10
All = Request | Response, // 二进制 11
}
export class KeyConfig {
_id: ObjectId
key: string
keyModel: APIMODEL
chatModels: CHATMODEL[]
userRoles: UserRole[]
status: Status
remark: string
constructor(key: string, keyModel: APIMODEL, chatModels: CHATMODEL[], userRoles: UserRole[], remark: string) {
this.key = key
this.keyModel = keyModel
this.chatModels = chatModels
this.userRoles = userRoles
this.status = Status.Normal
this.remark = remark
}
}
export type APIMODEL = 'ChatGPTAPI' | 'ChatGPTUnofficialProxyAPI'