构建问题是由于wasm未能实例化或未导入wasm引起的。
wasm.__wbindgen_add_to_stack_pointer 不是一个函数
回答:
为了在React中使用tiktoken wasm以获得更好的性能,请按照以下步骤进行webpack 5的配置。
在webpack配置中添加以下覆盖。你也可以直接从js cdn使用wasm。如果你想使用cdn,可以跳过这一步:
module.exports = (config, env) => { config.experiments = { asyncWebAssembly: true, layers: true, };}
使用配置覆盖来使用tiktoken:
import { get_encoding, init } from 'tiktoken/init';import wasm from 'tiktoken/tiktoken_bg.wasm'; let tikInit = false; const countTokens= (str) =>{ if (!tikInit) { tikInit = true; const wasmFile = await fetch(wasm); const buffer = await wasmFile.arrayBuffer(); await init((imports) => WebAssembly.instantiate(buffer, imports)); } const e = get_encoding('cl100k_base'); const t = e.encode(str); e.free(); return t.length; }
使用js cdn来获取wasm并在不使用配置覆盖的情况下使用tiktoken:
import { get_encoding, init } from 'tiktoken/init';import wasm from 'tiktoken/tiktoken_bg.wasm'; let tikInit = false; const countTokens= (str) =>{ if (!tikInit) { tikInit = true;} const wasmFile = await fetch( 'https://cdn.jsdelivr.net/npm/[email protected]/tiktoken_bg.wasm' ); const buffer = await wasmFile.arrayBuffer(); await init((imports) => WebAssembly.instantiate(buffer, imports)); } const e = get_encoding('cl100k_base'); const t = e.encode(str); e.free(); return t.length; }