UNPKG

node-llama-cpp

Version:

Run AI models locally on your machine with node.js bindings for llama.cpp. Enforce a JSON schema on the model output on the generation level

34 lines 1.61 kB
import { GbnfTerminal } from "../GbnfTerminal.js"; export class GbnfRef extends GbnfTerminal { getValueTerminal; defName; def; constructor({ getValueTerminal, defName, def }) { super(); this.getValueTerminal = getValueTerminal; this.defName = defName; this.def = def; } getGrammar(grammarGenerator) { return this.generateRuleName(grammarGenerator); } generateRuleName(grammarGenerator) { if (!grammarGenerator.defRuleNames.has([this.defName, this.def])) { const alreadyGeneratingGrammarForThisRef = grammarGenerator.defRuleNames.get([this.defName, this.def]) === null; if (alreadyGeneratingGrammarForThisRef) return grammarGenerator.generateRuleNameForDef(this.defName, this.def); grammarGenerator.defRuleNames.set([this.defName, this.def], null); const grammar = this.getValueTerminal().resolve(grammarGenerator); if (grammarGenerator.rules.has(grammar) && grammarGenerator.defRuleNames.get([this.defName, this.def]) === null) { grammarGenerator.defRuleNames.set([this.defName, this.def], grammar); return grammar; } const ruleName = grammarGenerator.generateRuleNameForDef(this.defName, this.def); grammarGenerator.rules.set(ruleName, grammar); grammarGenerator.ruleContentToRuleName.set(grammar, ruleName); return ruleName; } return grammarGenerator.generateRuleNameForDef(this.defName, this.def); } } //# sourceMappingURL=GbnfRef.js.map