fix: error handling for model imports should be handled gracefully

This commit is contained in:
Louis 2024-10-03 19:44:52 +07:00
parent 27c6ac6c8d
commit 2c2f179e1d
No known key found for this signature in database
GPG Key ID: 44FA9F4D33C37DE2
3 changed files with 66 additions and 8 deletions

View File

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

View File

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