Spaces:
Runtime error
Runtime error
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' |