mirror of
https://github.com/langgenius/dify.git
synced 2026-02-09 23:20:12 -05:00
feat: knowledge pipeline (#25360)
Signed-off-by: -LAN- <laipz8200@outlook.com> Co-authored-by: twwu <twwu@dify.ai> Co-authored-by: crazywoola <100913391+crazywoola@users.noreply.github.com> Co-authored-by: jyong <718720800@qq.com> Co-authored-by: Wu Tianwei <30284043+WTW0313@users.noreply.github.com> Co-authored-by: QuantumGhost <obelisk.reg+git@gmail.com> Co-authored-by: lyzno1 <yuanyouhuilyz@gmail.com> Co-authored-by: quicksand <quicksandzn@gmail.com> Co-authored-by: Jyong <76649700+JohnJyong@users.noreply.github.com> Co-authored-by: lyzno1 <92089059+lyzno1@users.noreply.github.com> Co-authored-by: zxhlyh <jasonapring2015@outlook.com> Co-authored-by: Yongtao Huang <yongtaoh2022@gmail.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: Joel <iamjoel007@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: nite-knite <nkCoding@gmail.com> Co-authored-by: Hanqing Zhao <sherry9277@gmail.com> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Co-authored-by: Harry <xh001x@hotmail.com>
This commit is contained in:
@@ -25,22 +25,22 @@ describe('formatFileSize', () => {
|
||||
expect(formatFileSize(0)).toBe(0)
|
||||
})
|
||||
test('should format bytes correctly', () => {
|
||||
expect(formatFileSize(500)).toBe('500.00B')
|
||||
expect(formatFileSize(500)).toBe('500.00 bytes')
|
||||
})
|
||||
test('should format kilobytes correctly', () => {
|
||||
expect(formatFileSize(1500)).toBe('1.46KB')
|
||||
expect(formatFileSize(1500)).toBe('1.46 KB')
|
||||
})
|
||||
test('should format megabytes correctly', () => {
|
||||
expect(formatFileSize(1500000)).toBe('1.43MB')
|
||||
expect(formatFileSize(1500000)).toBe('1.43 MB')
|
||||
})
|
||||
test('should format gigabytes correctly', () => {
|
||||
expect(formatFileSize(1500000000)).toBe('1.40GB')
|
||||
expect(formatFileSize(1500000000)).toBe('1.40 GB')
|
||||
})
|
||||
test('should format terabytes correctly', () => {
|
||||
expect(formatFileSize(1500000000000)).toBe('1.36TB')
|
||||
expect(formatFileSize(1500000000000)).toBe('1.36 TB')
|
||||
})
|
||||
test('should format petabytes correctly', () => {
|
||||
expect(formatFileSize(1500000000000000)).toBe('1.33PB')
|
||||
expect(formatFileSize(1500000000000000)).toBe('1.33 PB')
|
||||
})
|
||||
})
|
||||
describe('formatTime', () => {
|
||||
|
||||
@@ -14,8 +14,8 @@ export const formatNumber = (num: number | string) => {
|
||||
/**
|
||||
* Format file size into standard string format.
|
||||
* @param fileSize file size (Byte)
|
||||
* @example formatFileSize(1024) will return '1.00KB'
|
||||
* @example formatFileSize(1024 * 1024) will return '1.00MB'
|
||||
* @example formatFileSize(1024) will return '1.00 KB'
|
||||
* @example formatFileSize(1024 * 1024) will return '1.00 MB'
|
||||
*/
|
||||
export const formatFileSize = (fileSize: number) => {
|
||||
if (!fileSize)
|
||||
@@ -26,7 +26,9 @@ export const formatFileSize = (fileSize: number) => {
|
||||
fileSize = fileSize / 1024
|
||||
index++
|
||||
}
|
||||
return `${fileSize.toFixed(2)}${units[index]}B`
|
||||
if (index === 0)
|
||||
return `${fileSize.toFixed(2)} bytes`
|
||||
return `${fileSize.toFixed(2)} ${units[index]}B`
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -56,3 +58,35 @@ export const downloadFile = ({ data, fileName }: { data: Blob; fileName: string
|
||||
a.remove()
|
||||
window.URL.revokeObjectURL(url)
|
||||
}
|
||||
|
||||
/**
|
||||
* Formats a number into a readable string using "k", "M", or "B" suffix.
|
||||
* @example
|
||||
* 950 => "950"
|
||||
* 1200 => "1.2k"
|
||||
* 1500000 => "1.5M"
|
||||
* 2000000000 => "2B"
|
||||
*
|
||||
* @param {number} num - The number to format
|
||||
* @returns {string} - The formatted number string
|
||||
*/
|
||||
export const formatNumberAbbreviated = (num: number) => {
|
||||
// If less than 1000, return as-is
|
||||
if (num < 1000) return num.toString()
|
||||
|
||||
// Define thresholds and suffixes
|
||||
const units = [
|
||||
{ value: 1e9, symbol: 'B' },
|
||||
{ value: 1e6, symbol: 'M' },
|
||||
{ value: 1e3, symbol: 'k' },
|
||||
]
|
||||
|
||||
for (let i = 0; i < units.length; i++) {
|
||||
if (num >= units[i].value) {
|
||||
const formatted = (num / units[i].value).toFixed(1)
|
||||
return formatted.endsWith('.0')
|
||||
? `${Number.parseInt(formatted)}${units[i].symbol}`
|
||||
: `${formatted}${units[i].symbol}`
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import {
|
||||
PRE_PROMPT_PLACEHOLDER_TEXT,
|
||||
QUERY_PLACEHOLDER_TEXT,
|
||||
} from '@/app/components/base/prompt-editor/constants'
|
||||
import type { InputVar } from '@/app/components/workflow/types'
|
||||
import { InputVarType } from '@/app/components/workflow/types'
|
||||
|
||||
const otherAllowedRegex = /^\w+$/
|
||||
@@ -27,7 +28,7 @@ export const getNewVar = (key: string, type: string) => {
|
||||
}
|
||||
}
|
||||
|
||||
export const getNewVarInWorkflow = (key: string, type = InputVarType.textInput) => {
|
||||
export const getNewVarInWorkflow = (key: string, type = InputVarType.textInput): InputVar => {
|
||||
const { max_length, ...rest } = VAR_ITEM_TEMPLATE_IN_WORKFLOW
|
||||
if (type !== InputVarType.textInput) {
|
||||
return {
|
||||
@@ -42,6 +43,9 @@ export const getNewVarInWorkflow = (key: string, type = InputVarType.textInput)
|
||||
type,
|
||||
variable: key,
|
||||
label: key.slice(0, getMaxVarNameLength(key)),
|
||||
placeholder: '',
|
||||
default: '',
|
||||
hint: '',
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user