mirror of
https://github.com/langgenius/dify.git
synced 2026-08-29 19:54:46 +08:00
Signed-off-by: kenwoodjw <blackxin55+@gmail.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: zxhlyh <jasonapring2015@outlook.com> Co-authored-by: 起岚 <155608604+xiaoyaoqilan@users.noreply.github.com> Co-authored-by: Parman Mohammadalizadeh <prmma23@gmail.com> Co-authored-by: Escape0707 <tothesong@gmail.com> Co-authored-by: Xin Zhang <zhangxin@dify.ai> Co-authored-by: iridescentWen <66297467+iridescentWen@users.noreply.github.com> Co-authored-by: Bond Zhu <37842169+MRZHUH@users.noreply.github.com> Co-authored-by: KVOJJJin <jzongcode@gmail.com> Co-authored-by: Joel <iamjoel007@gmail.com> Co-authored-by: 非法操作 <hjlarry@163.com> Co-authored-by: yyh <92089059+lyzno1@users.noreply.github.com> Co-authored-by: Asuka Minato <i@asukaminato.eu.org> Co-authored-by: Chester <superdiao6@gmail.com> Co-authored-by: WH-2099 <wh2099@pm.me> Co-authored-by: Jony <619963502@qq.com> Co-authored-by: Jony <13896935+zyz619963502zyz@users.noreply.github.com> Co-authored-by: Harsh Kashyap <harsh.kashyap2001@gmail.com> Co-authored-by: Harsh Kashyap <Harsh23Kashyap@users.noreply.github.com> Co-authored-by: kenwoodjw <blackxin55+@gmail.com> Co-authored-by: csurong <csurong1@gmail.com> Co-authored-by: caosurong <surong.cao@thinkingdata.cn> Co-authored-by: Taranum Wasu <81034301+Taranum01@users.noreply.github.com> Co-authored-by: Taranum01 <50813317+Taranum01@users.noreply.github.com> Co-authored-by: Pranav Agarwal <agarwalpranav0711@gmail.com> Co-authored-by: Stephen Zhou <hi@hyoban.cc> Co-authored-by: zl86790 <marshal_li_b@163.com> Co-authored-by: QuantumGhost <obelisk.reg+git@gmail.com> Co-authored-by: yunlu.wen <yunlu.wen@dify.ai> Co-authored-by: yyh <yuanyouhuilyz@gmail.com>
69 lines
2.5 KiB
TypeScript
69 lines
2.5 KiB
TypeScript
export function isSkillErrorRecord(value: unknown): value is Record<string, unknown> {
|
|
return typeof value === 'object' && value !== null
|
|
}
|
|
|
|
export async function normalizeSkillError(error: unknown): Promise<unknown> {
|
|
if (!(error instanceof Response)) return error
|
|
|
|
try {
|
|
return await error.clone().json()
|
|
} catch {
|
|
return error
|
|
}
|
|
}
|
|
|
|
export function getSkillErrorCode(error: unknown): string | undefined {
|
|
if (!isSkillErrorRecord(error)) return undefined
|
|
|
|
const data = isSkillErrorRecord(error.data) ? error.data : undefined
|
|
const candidates = [error, data, error.body, data?.body]
|
|
for (const candidate of candidates) {
|
|
if (isSkillErrorRecord(candidate) && typeof candidate.code === 'string') return candidate.code
|
|
}
|
|
|
|
const messages = candidates.flatMap((candidate) => {
|
|
if (!isSkillErrorRecord(candidate)) return []
|
|
return typeof candidate.message === 'string' ? [candidate.message] : []
|
|
})
|
|
if (messages.some((message) => /must contain SKILL\.md/i.test(message))) return 'missing_skill_md'
|
|
if (messages.some((message) => /skill name .+ already exists/i.test(message)))
|
|
return 'skill_name_conflict'
|
|
if (messages.some((message) => /skill limit/i.test(message))) return 'skill_limit_exceeded'
|
|
|
|
return undefined
|
|
}
|
|
|
|
function getSkillErrorDetails(error: unknown): Record<string, unknown> | undefined {
|
|
if (!isSkillErrorRecord(error)) return undefined
|
|
|
|
const data = isSkillErrorRecord(error.data) ? error.data : undefined
|
|
const candidates = [error, data, error.body, data?.body]
|
|
for (const candidate of candidates) {
|
|
if (isSkillErrorRecord(candidate) && isSkillErrorRecord(candidate.details))
|
|
return candidate.details
|
|
}
|
|
|
|
return undefined
|
|
}
|
|
|
|
export function getSkillErrorDetailNumber(error: unknown, key: string): number | undefined {
|
|
const value = getSkillErrorDetails(error)?.[key]
|
|
return typeof value === 'number' ? value : undefined
|
|
}
|
|
|
|
export function getSkillErrorDetailString(error: unknown, key: string): string | undefined {
|
|
const value = getSkillErrorDetails(error)?.[key]
|
|
if (typeof value === 'string') return value
|
|
if (key !== 'name' || !isSkillErrorRecord(error)) return undefined
|
|
|
|
const data = isSkillErrorRecord(error.data) ? error.data : undefined
|
|
const candidates = [error, data, error.body, data?.body]
|
|
for (const candidate of candidates) {
|
|
if (!isSkillErrorRecord(candidate) || typeof candidate.message !== 'string') continue
|
|
const match = candidate.message.match(/skill name ["']?(.+?)["']? already exists/i)
|
|
if (match?.[1]) return match[1]
|
|
}
|
|
|
|
return undefined
|
|
}
|