Merge pull request #3766 from janhq/hotfix/graceful-error-handling-model-import

hotfix: graceful error handling model import
This commit is contained in:
Louis 2024-10-04 15:05:46 +07:00 committed by GitHub
commit 3f6843aa53
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 66 additions and 8 deletions

View File

@ -784,5 +784,63 @@ describe('JanModelExtension', () => {
expect.anything()
)
})
it('should handle model with valid chat_template', async () => {
executeMock.mockResolvedValue('{prompt}')
;(gguf as jest.Mock).mockResolvedValue({
metadata: {},
})
// @ts-ignore
global.NODE = 'node'
// @ts-ignore
global.DEFAULT_MODEL = {
parameters: { stop: [] },
settings: {
prompt_template: '<|im-start|>{prompt}<|im-end|>',
},
}
const result = await sut.retrieveGGUFMetadata({})
expect(result).toEqual({
parameters: {
stop: [],
},
settings: {
ctx_len: 4096,
ngl: 33,
prompt_template: '{prompt}',
},
})
})
it('should handle model without chat_template', async () => {
executeMock.mockRejectedValue({})
;(gguf as jest.Mock).mockResolvedValue({
metadata: {},
})
// @ts-ignore
global.NODE = 'node'
// @ts-ignore
global.DEFAULT_MODEL = {
parameters: { stop: [] },
settings: {
prompt_template: '<|im-start|>{prompt}<|im-end|>',
},
}
const result = await sut.retrieveGGUFMetadata({})
expect(result).toEqual({
parameters: {
stop: [],
},
settings: {
ctx_len: 4096,
ngl: 33,
prompt_template: '<|im-start|>{prompt}<|im-end|>',
},
})
})
})
})

View File

@ -577,7 +577,7 @@ export default class JanModelExtension extends ModelExtension {
dirName,
binaryFileName,
])
)
).catch(() => undefined)
const updatedModel = await this.retrieveGGUFMetadata(metadata)
@ -877,8 +877,13 @@ export default class JanModelExtension extends ModelExtension {
* @returns
*/
async retrieveGGUFMetadata(metadata: any): Promise<Partial<Model>> {
const template = await executeOnMain(NODE, 'renderJinjaTemplate', metadata)
const defaultModel = DEFAULT_MODEL as Model
var template = await executeOnMain(
NODE,
'renderJinjaTemplate',
metadata
).catch(() => undefined)
const eos_id = metadata['tokenizer.ggml.eos_token_id']
const architecture = metadata['general.architecture']

View File

@ -16,12 +16,7 @@ export const retrieveGGUFMetadata = async (ggufPath: string) => {
// Parse metadata and tensor info
const { metadata } = ggufMetadata(buffer.buffer)
// Parse jinja template
const renderedTemplate = renderJinjaTemplate(metadata)
return {
...metadata,
parsed_chat_template: renderedTemplate,
}
return metadata
} catch (e) {
console.log('[MODEL_EXT]', e)
}