export type FormValue = Record export type TypeWithI18N = { en_US: T zh_Hans: T [key: string]: T } export enum FormTypeEnum { textInput = 'text-input', textNumber = 'number-input', secretInput = 'secret-input', select = 'select', radio = 'radio', boolean = 'boolean', files = 'files', file = 'file', } export type FormOption = { label: TypeWithI18N value: string show_on: FormShowOnObject[] } export enum ModelTypeEnum { textGeneration = 'llm', textEmbedding = 'text-embedding', rerank = 'rerank', speech2text = 'speech2text', moderation = 'moderation', tts = 'tts', } export const MODEL_TYPE_TEXT = { [ModelTypeEnum.textGeneration]: 'LLM', [ModelTypeEnum.textEmbedding]: 'Text Embedding', [ModelTypeEnum.rerank]: 'Rerank', [ModelTypeEnum.speech2text]: 'Speech2text', [ModelTypeEnum.moderation]: 'Moderation', [ModelTypeEnum.tts]: 'TTS', } export enum ConfigurationMethodEnum { predefinedModel = 'predefined-model', customizableModel = 'customizable-model', fetchFromRemote = 'fetch-from-remote', } export enum ModelFeatureEnum { toolCall = 'tool-call', multiToolCall = 'multi-tool-call', agentThought = 'agent-thought', vision = 'vision', video = 'video', document = 'document', audio = 'audio', } export enum ModelFeatureTextEnum { toolCall = 'Tool Call', multiToolCall = 'Multi Tool Call', agentThought = 'Agent Thought', vision = 'Vision', video = 'Video', document = 'Document', audio = 'Audio', } export enum ModelStatusEnum { active = 'active', noConfigure = 'no-configure', quotaExceeded = 'quota-exceeded', noPermission = 'no-permission', disabled = 'disabled', } export const MODEL_STATUS_TEXT: { [k: string]: TypeWithI18N } = { 'no-configure': { en_US: 'No Configure', zh_Hans: '未配置凭据', }, 'quota-exceeded': { en_US: 'Quota Exceeded', zh_Hans: '额度不足', }, 'no-permission': { en_US: 'No Permission', zh_Hans: '无使用权限', }, } export enum CustomConfigurationStatusEnum { active = 'active', noConfigure = 'no-configure', } export type FormShowOnObject = { variable: string value: string } export type CredentialFormSchemaBase = { variable: string label: TypeWithI18N type: FormTypeEnum required: boolean default?: string tooltip?: TypeWithI18N show_on: FormShowOnObject[] url?: string } export type CredentialFormSchemaTextInput = CredentialFormSchemaBase & { max_length?: number; placeholder?: TypeWithI18N } export type CredentialFormSchemaNumberInput = CredentialFormSchemaBase & { min?: number; max?: number; placeholder?: TypeWithI18N } export type CredentialFormSchemaSelect = CredentialFormSchemaBase & { options: FormOption[]; placeholder?: TypeWithI18N } export type CredentialFormSchemaRadio = CredentialFormSchemaBase & { options: FormOption[] } export type CredentialFormSchemaSecretInput = CredentialFormSchemaBase & { placeholder?: TypeWithI18N } export type CredentialFormSchema = CredentialFormSchemaTextInput | CredentialFormSchemaSelect | CredentialFormSchemaRadio | CredentialFormSchemaSecretInput export type ModelItem = { model: string label: TypeWithI18N model_type: ModelTypeEnum features?: ModelFeatureEnum[] fetch_from: ConfigurationMethodEnum status: ModelStatusEnum model_properties: Record load_balancing_enabled: boolean deprecated?: boolean } export enum PreferredProviderTypeEnum { system = 'system', custom = 'custom', } export enum CurrentSystemQuotaTypeEnum { trial = 'trial', free = 'free', paid = 'paid', } export enum QuotaUnitEnum { times = 'times', tokens = 'tokens', credits = 'credits', } export type QuotaConfiguration = { quota_type: CurrentSystemQuotaTypeEnum quota_unit: QuotaUnitEnum quota_limit: number quota_used: number last_used: number is_valid: boolean } export type ModelProvider = { provider: string label: TypeWithI18N description?: TypeWithI18N help: { title: TypeWithI18N url: TypeWithI18N } icon_small: TypeWithI18N icon_large: TypeWithI18N background?: string supported_model_types: ModelTypeEnum[] configurate_methods: ConfigurationMethodEnum[] provider_credential_schema: { credential_form_schemas: CredentialFormSchema[] } model_credential_schema: { model: { label: TypeWithI18N placeholder: TypeWithI18N } credential_form_schemas: CredentialFormSchema[] } preferred_provider_type: PreferredProviderTypeEnum custom_configuration: { status: CustomConfigurationStatusEnum } system_configuration: { enabled: boolean current_quota_type: CurrentSystemQuotaTypeEnum quota_configurations: QuotaConfiguration[] } } export type Model = { provider: string icon_large: TypeWithI18N icon_small: TypeWithI18N label: TypeWithI18N models: ModelItem[] status: ModelStatusEnum } export type DefaultModelResponse = { model: string model_type: ModelTypeEnum provider: { provider: string icon_large: TypeWithI18N icon_small: TypeWithI18N } } export type DefaultModel = { provider: string model: string } export type CustomConfigurationModelFixedFields = { __model_name: string __model_type: ModelTypeEnum } export type ModelParameterRule = { default?: number | string | boolean | string[] help?: TypeWithI18N label: TypeWithI18N min?: number max?: number name: string precision?: number required: false type: string use_template?: string options?: string[] tagPlaceholder?: TypeWithI18N } export type ModelLoadBalancingConfigEntry = { /** model balancing config entry id */ id?: string /** is config entry enabled */ enabled?: boolean /** config entry name */ name: string /** model balancing credential */ credentials: Record /** is config entry currently removed from Round-robin queue */ in_cooldown?: boolean /** cooldown time (in seconds) */ ttl?: number } export type ModelLoadBalancingConfig = { enabled: boolean configs: ModelLoadBalancingConfigEntry[] }