node-llama-cpp 3.1.1 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/README.md +1 -1
  2. package/dist/ChatWrapper.js +1 -1
  3. package/dist/ChatWrapper.js.map +1 -1
  4. package/dist/bindings/AddonTypes.d.ts +10 -3
  5. package/dist/bindings/Llama.d.ts +31 -1
  6. package/dist/bindings/Llama.js +95 -10
  7. package/dist/bindings/Llama.js.map +1 -1
  8. package/dist/bindings/getLlama.d.ts +26 -2
  9. package/dist/bindings/getLlama.js +60 -5
  10. package/dist/bindings/getLlama.js.map +1 -1
  11. package/dist/bindings/utils/MemoryOrchestrator.d.ts +2 -0
  12. package/dist/bindings/utils/MemoryOrchestrator.js +3 -2
  13. package/dist/bindings/utils/MemoryOrchestrator.js.map +1 -1
  14. package/dist/bindings/utils/clearAllLocalBuilds.js +2 -2
  15. package/dist/bindings/utils/clearAllLocalBuilds.js.map +1 -1
  16. package/dist/bindings/utils/compileLLamaCpp.d.ts +1 -1
  17. package/dist/bindings/utils/compileLLamaCpp.js +54 -1
  18. package/dist/bindings/utils/compileLLamaCpp.js.map +1 -1
  19. package/dist/bindings/utils/detectAvailableComputeLayers.js.map +1 -1
  20. package/dist/bindings/utils/getGpuTypesToUseForOption.js +1 -1
  21. package/dist/bindings/utils/getGpuTypesToUseForOption.js.map +1 -1
  22. package/dist/bindings/utils/getLinuxDistroInfo.js +1 -1
  23. package/dist/bindings/utils/getLinuxDistroInfo.js.map +1 -1
  24. package/dist/bindings/utils/testBindingBinary.d.ts +2 -1
  25. package/dist/bindings/utils/testBindingBinary.js +122 -37
  26. package/dist/bindings/utils/testBindingBinary.js.map +1 -1
  27. package/dist/bindings/utils/testCmakeBinary.js +1 -1
  28. package/dist/bindings/utils/testCmakeBinary.js.map +1 -1
  29. package/dist/chatWrappers/FunctionaryChatWrapper.js.map +1 -1
  30. package/dist/chatWrappers/GemmaChatWrapper.js.map +1 -1
  31. package/dist/chatWrappers/Llama3_1ChatWrapper.js +3 -2
  32. package/dist/chatWrappers/Llama3_1ChatWrapper.js.map +1 -1
  33. package/dist/chatWrappers/Llama3_2LightweightChatWrapper.d.ts +35 -0
  34. package/dist/chatWrappers/Llama3_2LightweightChatWrapper.js +253 -0
  35. package/dist/chatWrappers/Llama3_2LightweightChatWrapper.js.map +1 -0
  36. package/dist/chatWrappers/utils/ChatModelFunctionsDocumentationGenerator.d.ts +13 -0
  37. package/dist/chatWrappers/utils/ChatModelFunctionsDocumentationGenerator.js +31 -1
  38. package/dist/chatWrappers/utils/ChatModelFunctionsDocumentationGenerator.js.map +1 -1
  39. package/dist/chatWrappers/utils/chunkChatItems.js +1 -1
  40. package/dist/chatWrappers/utils/chunkChatItems.js.map +1 -1
  41. package/dist/chatWrappers/utils/getModelLinageNames.d.ts +2 -0
  42. package/dist/chatWrappers/utils/getModelLinageNames.js +18 -0
  43. package/dist/chatWrappers/utils/getModelLinageNames.js.map +1 -0
  44. package/dist/chatWrappers/utils/isJinjaTemplateEquivalentToSpecializedChatWrapper.js.map +1 -1
  45. package/dist/chatWrappers/utils/isLlama3_2LightweightModel.d.ts +2 -0
  46. package/dist/chatWrappers/utils/isLlama3_2LightweightModel.js +9 -0
  47. package/dist/chatWrappers/utils/isLlama3_2LightweightModel.js.map +1 -0
  48. package/dist/chatWrappers/utils/resolveChatWrapper.d.ts +4 -2
  49. package/dist/chatWrappers/utils/resolveChatWrapper.js +10 -32
  50. package/dist/chatWrappers/utils/resolveChatWrapper.js.map +1 -1
  51. package/dist/cli/commands/ChatCommand.js +2 -3
  52. package/dist/cli/commands/ChatCommand.js.map +1 -1
  53. package/dist/cli/commands/CompleteCommand.js +1 -2
  54. package/dist/cli/commands/CompleteCommand.js.map +1 -1
  55. package/dist/cli/commands/InfillCommand.js +1 -2
  56. package/dist/cli/commands/InfillCommand.js.map +1 -1
  57. package/dist/cli/commands/InitCommand.d.ts +2 -1
  58. package/dist/cli/commands/InitCommand.js +32 -13
  59. package/dist/cli/commands/InitCommand.js.map +1 -1
  60. package/dist/cli/commands/inspect/commands/InspectEstimateCommand.js +0 -1
  61. package/dist/cli/commands/inspect/commands/InspectEstimateCommand.js.map +1 -1
  62. package/dist/cli/commands/inspect/commands/InspectGgufCommand.d.ts +1 -0
  63. package/dist/cli/commands/inspect/commands/InspectGgufCommand.js +47 -11
  64. package/dist/cli/commands/inspect/commands/InspectGgufCommand.js.map +1 -1
  65. package/dist/cli/commands/inspect/commands/InspectGpuCommand.js +14 -3
  66. package/dist/cli/commands/inspect/commands/InspectGpuCommand.js.map +1 -1
  67. package/dist/cli/recommendedModels.js +11 -0
  68. package/dist/cli/recommendedModels.js.map +1 -1
  69. package/dist/cli/utils/consolePromptQuestion.js +0 -1
  70. package/dist/cli/utils/consolePromptQuestion.js.map +1 -1
  71. package/dist/cli/utils/interactivelyAskForModel.js +3 -1
  72. package/dist/cli/utils/interactivelyAskForModel.js.map +1 -1
  73. package/dist/evaluator/LlamaChat/LlamaChat.js +37 -24
  74. package/dist/evaluator/LlamaChat/LlamaChat.js.map +1 -1
  75. package/dist/evaluator/LlamaChat/utils/contextShiftStrategies/eraseFirstResponseAndKeepFirstSystemChatContextShiftStrategy.js +63 -8
  76. package/dist/evaluator/LlamaChat/utils/contextShiftStrategies/eraseFirstResponseAndKeepFirstSystemChatContextShiftStrategy.js.map +1 -1
  77. package/dist/evaluator/LlamaChatSession/LlamaChatSession.d.ts +8 -1
  78. package/dist/evaluator/LlamaChatSession/LlamaChatSession.js +156 -138
  79. package/dist/evaluator/LlamaChatSession/LlamaChatSession.js.map +1 -1
  80. package/dist/evaluator/LlamaChatSession/utils/defineChatSessionFunction.d.ts +1 -1
  81. package/dist/evaluator/LlamaCompletion.js +11 -9
  82. package/dist/evaluator/LlamaCompletion.js.map +1 -1
  83. package/dist/evaluator/LlamaContext/LlamaContext.d.ts +11 -0
  84. package/dist/evaluator/LlamaContext/LlamaContext.js +66 -8
  85. package/dist/evaluator/LlamaContext/LlamaContext.js.map +1 -1
  86. package/dist/evaluator/LlamaContext/utils/batchItemsPrioritizationStrategies/firstInFirstOutStrategy.js.map +1 -1
  87. package/dist/evaluator/LlamaContext/utils/batchItemsPrioritizationStrategies/maximumParallelismStrategy.js.map +1 -1
  88. package/dist/evaluator/LlamaGrammar.js +7 -0
  89. package/dist/evaluator/LlamaGrammar.js.map +1 -1
  90. package/dist/evaluator/LlamaJsonSchemaGrammar.d.ts +3 -2
  91. package/dist/evaluator/LlamaJsonSchemaGrammar.js +3 -0
  92. package/dist/evaluator/LlamaJsonSchemaGrammar.js.map +1 -1
  93. package/dist/evaluator/LlamaModel/LlamaModel.js +8 -4
  94. package/dist/evaluator/LlamaModel/LlamaModel.js.map +1 -1
  95. package/dist/gguf/fileReaders/GgufFileReader.d.ts +1 -1
  96. package/dist/gguf/fileReaders/GgufFsFileReader.d.ts +1 -1
  97. package/dist/gguf/fileReaders/GgufNetworkFetchFileReader.d.ts +1 -1
  98. package/dist/gguf/insights/GgufInsights.d.ts +1 -0
  99. package/dist/gguf/insights/GgufInsights.js +8 -0
  100. package/dist/gguf/insights/GgufInsights.js.map +1 -1
  101. package/dist/gguf/insights/GgufInsightsConfigurationResolver.d.ts +40 -4
  102. package/dist/gguf/insights/GgufInsightsConfigurationResolver.js +116 -93
  103. package/dist/gguf/insights/GgufInsightsConfigurationResolver.js.map +1 -1
  104. package/dist/gguf/insights/utils/getRamUsageFromUnifiedVram.d.ts +5 -0
  105. package/dist/gguf/insights/utils/getRamUsageFromUnifiedVram.js +7 -0
  106. package/dist/gguf/insights/utils/getRamUsageFromUnifiedVram.js.map +1 -0
  107. package/dist/gguf/insights/utils/resolveContextContextSizeOption.d.ts +11 -1
  108. package/dist/gguf/insights/utils/resolveContextContextSizeOption.js +47 -17
  109. package/dist/gguf/insights/utils/resolveContextContextSizeOption.js.map +1 -1
  110. package/dist/gguf/insights/utils/scoreLevels.js.map +1 -1
  111. package/dist/gguf/readGgufFileInfo.js +1 -1
  112. package/dist/gguf/readGgufFileInfo.js.map +1 -1
  113. package/dist/gguf/utils/getGgufMetadataKeyValue.d.ts +1 -0
  114. package/dist/gguf/utils/getGgufMetadataKeyValue.js +27 -0
  115. package/dist/gguf/utils/getGgufMetadataKeyValue.js.map +1 -0
  116. package/dist/index.d.ts +3 -2
  117. package/dist/index.js +2 -1
  118. package/dist/index.js.map +1 -1
  119. package/dist/tsconfig.tsbuildinfo +1 -1
  120. package/dist/types.d.ts +2 -2
  121. package/dist/utils/StopGenerationDetector.js +1 -1
  122. package/dist/utils/StopGenerationDetector.js.map +1 -1
  123. package/dist/utils/ThreadsSplitter.js +2 -2
  124. package/dist/utils/ThreadsSplitter.js.map +1 -1
  125. package/dist/utils/createModelDownloader.js.map +1 -1
  126. package/dist/utils/findCharacterRemovalCountToFitChatHistoryInContext.d.ts +2 -1
  127. package/dist/utils/findCharacterRemovalCountToFitChatHistoryInContext.js +14 -1
  128. package/dist/utils/findCharacterRemovalCountToFitChatHistoryInContext.js.map +1 -1
  129. package/dist/utils/gbnfJson/GbnfGrammarGenerator.d.ts +5 -0
  130. package/dist/utils/gbnfJson/GbnfGrammarGenerator.js +15 -0
  131. package/dist/utils/gbnfJson/GbnfGrammarGenerator.js.map +1 -1
  132. package/dist/utils/gbnfJson/GbnfTerminal.d.ts +3 -0
  133. package/dist/utils/gbnfJson/GbnfTerminal.js +25 -3
  134. package/dist/utils/gbnfJson/GbnfTerminal.js.map +1 -1
  135. package/dist/utils/gbnfJson/getGbnfGrammarForGbnfJsonSchema.d.ts +1 -1
  136. package/dist/utils/gbnfJson/getGbnfGrammarForGbnfJsonSchema.js.map +1 -1
  137. package/dist/utils/gbnfJson/terminals/GbnfAnyJson.d.ts +9 -0
  138. package/dist/utils/gbnfJson/terminals/GbnfAnyJson.js +53 -0
  139. package/dist/utils/gbnfJson/terminals/GbnfAnyJson.js.map +1 -0
  140. package/dist/utils/gbnfJson/terminals/GbnfArray.d.ts +11 -2
  141. package/dist/utils/gbnfJson/terminals/GbnfArray.js +64 -15
  142. package/dist/utils/gbnfJson/terminals/GbnfArray.js.map +1 -1
  143. package/dist/utils/gbnfJson/terminals/GbnfBoolean.d.ts +3 -2
  144. package/dist/utils/gbnfJson/terminals/GbnfBoolean.js +13 -7
  145. package/dist/utils/gbnfJson/terminals/GbnfBoolean.js.map +1 -1
  146. package/dist/utils/gbnfJson/terminals/GbnfCommaWhitespace.d.ts +11 -0
  147. package/dist/utils/gbnfJson/terminals/GbnfCommaWhitespace.js +28 -0
  148. package/dist/utils/gbnfJson/terminals/GbnfCommaWhitespace.js.map +1 -0
  149. package/dist/utils/gbnfJson/terminals/GbnfFormatString.d.ts +11 -0
  150. package/dist/utils/gbnfJson/terminals/GbnfFormatString.js +90 -0
  151. package/dist/utils/gbnfJson/terminals/GbnfFormatString.js.map +1 -0
  152. package/dist/utils/gbnfJson/terminals/GbnfGrammar.d.ts +4 -1
  153. package/dist/utils/gbnfJson/terminals/GbnfGrammar.js +8 -1
  154. package/dist/utils/gbnfJson/terminals/GbnfGrammar.js.map +1 -1
  155. package/dist/utils/gbnfJson/terminals/GbnfInsideStringChar.d.ts +5 -0
  156. package/dist/utils/gbnfJson/terminals/GbnfInsideStringChar.js +24 -0
  157. package/dist/utils/gbnfJson/terminals/GbnfInsideStringChar.js.map +1 -0
  158. package/dist/utils/gbnfJson/terminals/GbnfNumber.js +4 -3
  159. package/dist/utils/gbnfJson/terminals/GbnfNumber.js.map +1 -1
  160. package/dist/utils/gbnfJson/terminals/GbnfNumberValue.d.ts +3 -1
  161. package/dist/utils/gbnfJson/terminals/GbnfNumberValue.js +8 -2
  162. package/dist/utils/gbnfJson/terminals/GbnfNumberValue.js.map +1 -1
  163. package/dist/utils/gbnfJson/terminals/GbnfObjectMap.d.ts +14 -5
  164. package/dist/utils/gbnfJson/terminals/GbnfObjectMap.js +67 -9
  165. package/dist/utils/gbnfJson/terminals/GbnfObjectMap.js.map +1 -1
  166. package/dist/utils/gbnfJson/terminals/GbnfOr.d.ts +2 -1
  167. package/dist/utils/gbnfJson/terminals/GbnfOr.js +9 -5
  168. package/dist/utils/gbnfJson/terminals/GbnfOr.js.map +1 -1
  169. package/dist/utils/gbnfJson/terminals/GbnfRepetition.d.ts +7 -1
  170. package/dist/utils/gbnfJson/terminals/GbnfRepetition.js +69 -20
  171. package/dist/utils/gbnfJson/terminals/GbnfRepetition.js.map +1 -1
  172. package/dist/utils/gbnfJson/terminals/GbnfString.d.ts +8 -1
  173. package/dist/utils/gbnfJson/terminals/GbnfString.js +31 -21
  174. package/dist/utils/gbnfJson/terminals/GbnfString.js.map +1 -1
  175. package/dist/utils/gbnfJson/terminals/GbnfStringValue.d.ts +2 -0
  176. package/dist/utils/gbnfJson/terminals/GbnfStringValue.js +7 -4
  177. package/dist/utils/gbnfJson/terminals/GbnfStringValue.js.map +1 -1
  178. package/dist/utils/gbnfJson/terminals/GbnfWhitespace.d.ts +2 -1
  179. package/dist/utils/gbnfJson/terminals/GbnfWhitespace.js +24 -5
  180. package/dist/utils/gbnfJson/terminals/GbnfWhitespace.js.map +1 -1
  181. package/dist/utils/gbnfJson/terminals/gbnfConsts.d.ts +16 -1
  182. package/dist/utils/gbnfJson/terminals/gbnfConsts.js +47 -1
  183. package/dist/utils/gbnfJson/terminals/gbnfConsts.js.map +1 -1
  184. package/dist/utils/gbnfJson/types.d.ts +164 -17
  185. package/dist/utils/gbnfJson/types.js +6 -0
  186. package/dist/utils/gbnfJson/types.js.map +1 -1
  187. package/dist/utils/gbnfJson/utils/getGbnfJsonTerminalForGbnfJsonSchema.js +61 -9
  188. package/dist/utils/gbnfJson/utils/getGbnfJsonTerminalForGbnfJsonSchema.js.map +1 -1
  189. package/dist/utils/gbnfJson/utils/validateObjectAgainstGbnfSchema.js +99 -8
  190. package/dist/utils/gbnfJson/utils/validateObjectAgainstGbnfSchema.js.map +1 -1
  191. package/dist/utils/getTypeScriptTypeStringForGbnfJsonSchema.js +125 -16
  192. package/dist/utils/getTypeScriptTypeStringForGbnfJsonSchema.js.map +1 -1
  193. package/dist/utils/hashString.js +1 -1
  194. package/dist/utils/hashString.js.map +1 -1
  195. package/dist/utils/includesText.d.ts +1 -0
  196. package/dist/utils/includesText.js +12 -0
  197. package/dist/utils/includesText.js.map +1 -0
  198. package/dist/utils/spawnCommand.js +1 -1
  199. package/dist/utils/spawnCommand.js.map +1 -1
  200. package/dist/utils/transformPromisable.js +1 -2
  201. package/dist/utils/transformPromisable.js.map +1 -1
  202. package/dist/utils/truncateTextAndRoundToWords.d.ts +4 -3
  203. package/dist/utils/truncateTextAndRoundToWords.js +90 -39
  204. package/dist/utils/truncateTextAndRoundToWords.js.map +1 -1
  205. package/dist/utils/waitForLockfileRelease.js +0 -1
  206. package/dist/utils/waitForLockfileRelease.js.map +1 -1
  207. package/dist/utils/wrapAbortSignal.d.ts +1 -1
  208. package/dist/utils/wrapAbortSignal.js +9 -4
  209. package/dist/utils/wrapAbortSignal.js.map +1 -1
  210. package/llama/CMakeLists.txt +16 -90
  211. package/llama/addon/AddonContext.cpp +1 -1
  212. package/llama/addon/AddonGrammar.cpp +49 -1
  213. package/llama/addon/AddonGrammar.h +3 -0
  214. package/llama/addon/AddonModel.cpp +4 -4
  215. package/llama/addon/AddonSampler.cpp +0 -13
  216. package/llama/addon/AddonSampler.h +0 -2
  217. package/llama/addon/addon.cpp +19 -0
  218. package/llama/addon/globals/getGpuInfo.cpp +61 -53
  219. package/llama/addon/globals/getSwapInfo.cpp +69 -0
  220. package/llama/addon/globals/getSwapInfo.h +4 -0
  221. package/llama/binariesGithubRelease.json +1 -1
  222. package/llama/gitRelease.bundle +0 -0
  223. package/llama/gpuInfo/vulkan-gpu-info.cpp +15 -16
  224. package/llama/gpuInfo/vulkan-gpu-info.h +1 -2
  225. package/llama/grammars/README.md +1 -1
  226. package/llama/llama.cpp.info.json +1 -1
  227. package/package.json +57 -51
  228. package/templates/README.md +6 -0
  229. package/templates/packed/electron-typescript-react.json +1 -1
  230. package/templates/packed/node-typescript.json +1 -1
  231. package/llama/gpuInfo/cuda-gpu-info.cu +0 -120
  232. package/llama/gpuInfo/cuda-gpu-info.h +0 -10
  233. package/llama/gpuInfo/metal-gpu-info.h +0 -8
  234. package/llama/gpuInfo/metal-gpu-info.mm +0 -30
@@ -10,6 +10,12 @@ export class GbnfWhitespace extends GbnfTerminal {
10
10
  this.newLine = newLine;
11
11
  }
12
12
  getGrammar() {
13
+ return this._getGrammar();
14
+ }
15
+ getGrammarFromResolve() {
16
+ return this._getGrammar(false);
17
+ }
18
+ _getGrammar(wrap = true) {
13
19
  if (this.scopeState.settings.allowNewLines && this.newLine !== false) {
14
20
  const values = [
15
21
  ...(this.newLine === "before"
@@ -19,8 +25,8 @@ export class GbnfWhitespace extends GbnfTerminal {
19
25
  ? []
20
26
  : [
21
27
  or([
22
- new GbnfVerbatimText(" ".repeat(this.scopeState.currentNestingScope * this.scopeState.settings.scopePadSpaces)).getGrammar(),
23
- new GbnfVerbatimText("\t".repeat(this.scopeState.currentNestingScope)).getGrammar()
28
+ verbatimTextRepetition(" ", this.scopeState.currentNestingScope * this.scopeState.settings.scopePadSpaces),
29
+ verbatimTextRepetition("\t", this.scopeState.currentNestingScope)
24
30
  ])
25
31
  ]),
26
32
  ...(this.newLine === "after"
@@ -30,19 +36,32 @@ export class GbnfWhitespace extends GbnfTerminal {
30
36
  return or([
31
37
  values.join(" "),
32
38
  "[ ]?"
33
- ]);
39
+ ], wrap);
34
40
  }
35
41
  return "[ ]?";
36
42
  }
37
43
  getRuleName() {
38
44
  return reservedRuleNames.whitespace({
39
- newLine: this.newLine,
45
+ newLine: this.scopeState.settings.allowNewLines
46
+ ? this.newLine
47
+ : false,
40
48
  scopeSpaces: this.scopeState.settings.scopePadSpaces,
41
49
  nestingScope: this.scopeState.currentNestingScope
42
50
  });
43
51
  }
44
52
  }
45
- function or(definitions) {
53
+ function or(definitions, wrap = true) {
54
+ if (!wrap)
55
+ return definitions.join(" | ");
46
56
  return "(" + definitions.join(" | ") + ")";
47
57
  }
58
+ function verbatimTextRepetition(text, count) {
59
+ const textRepetitionGrammar = new GbnfVerbatimText(text.repeat(count)).getGrammar();
60
+ if (count <= 1)
61
+ return textRepetitionGrammar;
62
+ const textRepetitionGrammarWithRepetition = new GbnfVerbatimText(text).getGrammar() + "{" + count + "}";
63
+ if (textRepetitionGrammarWithRepetition.length < textRepetitionGrammar.length)
64
+ return textRepetitionGrammarWithRepetition;
65
+ return textRepetitionGrammar;
66
+ }
48
67
  //# sourceMappingURL=GbnfWhitespace.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GbnfWhitespace.js","sourceRoot":"","sources":["../../../../src/utils/gbnfJson/terminals/GbnfWhitespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAC,iBAAiB,EAAC,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AAGvD,MAAM,OAAO,cAAe,SAAQ,YAAY;IAC5B,UAAU,CAAqB;IAC/B,OAAO,CAA6B;IAEpD,YAAmB,UAA8B,EAAE,EAC/C,OAAO,GAAG,QAAQ,KAIlB,EAAE;QACF,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAEM,UAAU;QACb,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YACnE,MAAM,MAAM,GAAG;gBACX,GAAG,CACC,IAAI,CAAC,OAAO,KAAK,QAAQ;oBACrB,CAAC,CAAC,CAAC,OAAO,CAAC;oBACX,CAAC,CAAC,EAAE,CACX;gBACD,GAAG,CACC,IAAI,CAAC,UAAU,CAAC,mBAAmB,KAAK,CAAC;oBACrC,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC;wBACE,EAAE,CAAC;4BACC,IAAI,gBAAgB,CAChB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,CAC5F,CAAC,UAAU,EAAE;4BACd,IAAI,gBAAgB,CAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,CACnD,CAAC,UAAU,EAAE;yBACjB,CAAC;qBACL,CACR;gBACD,GAAG,CACC,IAAI,CAAC,OAAO,KAAK,OAAO;oBACpB,CAAC,CAAC,CAAC,OAAO,CAAC;oBACX,CAAC,CAAC,EAAE,CACX;aACJ,CAAC;YAEF,OAAO,EAAE,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;gBAChB,MAAM;aACT,CAAC,CAAC;QACP,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAEkB,WAAW;QAC1B,OAAO,iBAAiB,CAAC,UAAU,CAAC;YAChC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,cAAc;YACpD,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,mBAAmB;SACpD,CAAC,CAAC;IACP,CAAC;CACJ;AAED,SAAS,EAAE,CAAC,WAAqB;IAC7B,OAAO,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"GbnfWhitespace.js","sourceRoot":"","sources":["../../../../src/utils/gbnfJson/terminals/GbnfWhitespace.ts"],"names":[],"mappings":"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"}
@@ -6,10 +6,25 @@ export declare const reservedRuleNames: {
6
6
  readonly fractional: "fractional-number-rule";
7
7
  readonly integer: "integer-number-rule";
8
8
  };
9
- readonly string: "string-rule";
9
+ readonly stringChar: "string-char-rule";
10
+ readonly string: ({ minLength, maxLength }: {
11
+ minLength: number;
12
+ maxLength?: number;
13
+ }) => string;
14
+ readonly formatString: (format: string) => string;
10
15
  readonly whitespace: ({ newLine, nestingScope, scopeSpaces }: {
11
16
  newLine?: "before" | "after" | false;
12
17
  nestingScope: number;
13
18
  scopeSpaces: number;
14
19
  }) => string;
20
+ readonly commaWhitespace: ({ newLine, nestingScope, scopeSpaces }: {
21
+ newLine?: "before" | "after" | false;
22
+ nestingScope: number;
23
+ scopeSpaces: number;
24
+ }) => string;
25
+ readonly anyJson: ({ allowNewLines, nestingScope, scopeSpaces }: {
26
+ allowNewLines: boolean;
27
+ nestingScope: number;
28
+ scopeSpaces: number;
29
+ }) => string;
15
30
  };
@@ -6,7 +6,27 @@ export const reservedRuleNames = {
6
6
  fractional: "fractional-number-rule",
7
7
  integer: "integer-number-rule"
8
8
  },
9
- string: "string-rule",
9
+ stringChar: "string-char-rule",
10
+ string({ minLength, maxLength }) {
11
+ if (minLength === 0 && maxLength == null)
12
+ return "string-rule";
13
+ else if (maxLength == null)
14
+ return [
15
+ "string-",
16
+ minLength,
17
+ "-rule"
18
+ ].join("");
19
+ return [
20
+ "string-",
21
+ minLength,
22
+ "-",
23
+ maxLength,
24
+ "-rule"
25
+ ].join("");
26
+ },
27
+ formatString(format) {
28
+ return "string-format-" + format + "-rule";
29
+ },
10
30
  whitespace({ newLine, nestingScope, scopeSpaces }) {
11
31
  if (!newLine)
12
32
  return "whitespace-no-new-lines-rule";
@@ -21,6 +41,32 @@ export const reservedRuleNames = {
21
41
  "-" + scopeSpaces,
22
42
  "-rule"
23
43
  ].join("");
44
+ },
45
+ commaWhitespace({ newLine, nestingScope, scopeSpaces }) {
46
+ if (!newLine)
47
+ return "comma-whitespace-no-new-lines-rule";
48
+ return [
49
+ "comma-whitespace-",
50
+ newLine === "before"
51
+ ? "b"
52
+ : newLine === "after"
53
+ ? "a"
54
+ : "n",
55
+ "-" + nestingScope,
56
+ "-" + scopeSpaces,
57
+ "-rule"
58
+ ].join("");
59
+ },
60
+ anyJson({ allowNewLines, nestingScope, scopeSpaces }) {
61
+ return [
62
+ "any-json-",
63
+ !allowNewLines
64
+ ? "s-"
65
+ : "",
66
+ nestingScope,
67
+ "-" + scopeSpaces,
68
+ "-rule"
69
+ ].join("");
24
70
  }
25
71
  };
26
72
  //# sourceMappingURL=gbnfConsts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gbnfConsts.js","sourceRoot":"","sources":["../../../../src/utils/gbnfJson/terminals/gbnfConsts.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC7B,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,cAAc;IACvB,MAAM,EAAE;QACJ,UAAU,EAAE,wBAAwB;QACpC,OAAO,EAAE,qBAAqB;KACjC;IACD,MAAM,EAAE,aAAa;IACrB,UAAU,CAAC,EAAC,OAAO,EAAE,YAAY,EAAE,WAAW,EAE7C;QACG,IAAI,CAAC,OAAO;YACR,OAAO,8BAA8B,CAAC;QAE1C,OAAO;YACH,aAAa;YACb,OAAO,KAAK,QAAQ;gBAChB,CAAC,CAAC,GAAG;gBACL,CAAC,CAAC,OAAO,KAAK,OAAO;oBACjB,CAAC,CAAC,GAAG;oBACL,CAAC,CAAC,GAAG;YACb,GAAG,GAAG,YAAY;YAClB,GAAG,GAAG,WAAW;YACjB,OAAO;SACV,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,CAAC;CACK,CAAC"}
1
+ {"version":3,"file":"gbnfConsts.js","sourceRoot":"","sources":["../../../../src/utils/gbnfJson/terminals/gbnfConsts.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC7B,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,cAAc;IACvB,MAAM,EAAE;QACJ,UAAU,EAAE,wBAAwB;QACpC,OAAO,EAAE,qBAAqB;KACjC;IACD,UAAU,EAAE,kBAAkB;IAC9B,MAAM,CAAC,EAAC,SAAS,EAAE,SAAS,EAA0C;QAClE,IAAI,SAAS,KAAK,CAAC,IAAI,SAAS,IAAI,IAAI;YACpC,OAAO,aAAa,CAAC;aACpB,IAAI,SAAS,IAAI,IAAI;YACtB,OAAO;gBACH,SAAS;gBACT,SAAS;gBACT,OAAO;aACV,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,OAAO;YACH,SAAS;YACT,SAAS;YACT,GAAG;YACH,SAAS;YACT,OAAO;SACV,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,CAAC;IACD,YAAY,CAAC,MAAc;QACvB,OAAO,gBAAgB,GAAG,MAAM,GAAG,OAAO,CAAC;IAC/C,CAAC;IACD,UAAU,CAAC,EAAC,OAAO,EAAE,YAAY,EAAE,WAAW,EAE7C;QACG,IAAI,CAAC,OAAO;YACR,OAAO,8BAA8B,CAAC;QAE1C,OAAO;YACH,aAAa;YACb,OAAO,KAAK,QAAQ;gBAChB,CAAC,CAAC,GAAG;gBACL,CAAC,CAAC,OAAO,KAAK,OAAO;oBACjB,CAAC,CAAC,GAAG;oBACL,CAAC,CAAC,GAAG;YACb,GAAG,GAAG,YAAY;YAClB,GAAG,GAAG,WAAW;YACjB,OAAO;SACV,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,CAAC;IACD,eAAe,CAAC,EAAC,OAAO,EAAE,YAAY,EAAE,WAAW,EAElD;QACG,IAAI,CAAC,OAAO;YACR,OAAO,oCAAoC,CAAC;QAEhD,OAAO;YACH,mBAAmB;YACnB,OAAO,KAAK,QAAQ;gBAChB,CAAC,CAAC,GAAG;gBACL,CAAC,CAAC,OAAO,KAAK,OAAO;oBACjB,CAAC,CAAC,GAAG;oBACL,CAAC,CAAC,GAAG;YACb,GAAG,GAAG,YAAY;YAClB,GAAG,GAAG,WAAW;YACjB,OAAO;SACV,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,CAAC;IACD,OAAO,CAAC,EAAC,aAAa,EAAE,YAAY,EAAE,WAAW,EAEhD;QACG,OAAO;YACH,WAAW;YACX,CAAC,aAAa;gBACV,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,EAAE;YACR,YAAY;YACZ,GAAG,GAAG,WAAW;YACjB,OAAO;SACV,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,CAAC;CACK,CAAC"}
@@ -1,44 +1,191 @@
1
1
  export type GbnfJsonSchemaImmutableType = "string" | "number" | "integer" | "boolean" | "null";
2
- export type GbnfJsonSchema = GbnfJsonBasicSchema | GbnfJsonConstSchema | GbnfJsonEnumSchema | GbnfJsonOneOfSchema | GbnfJsonObjectSchema | GbnfJsonArraySchema;
2
+ export type GbnfJsonSchema = GbnfJsonBasicSchema | GbnfJsonConstSchema | GbnfJsonEnumSchema | GbnfJsonOneOfSchema | GbnfJsonStringSchema | GbnfJsonObjectSchema | GbnfJsonArraySchema;
3
3
  export type GbnfJsonBasicSchema = {
4
- type: GbnfJsonSchemaImmutableType | readonly GbnfJsonSchemaImmutableType[];
4
+ readonly type: GbnfJsonSchemaImmutableType | readonly GbnfJsonSchemaImmutableType[];
5
+ /**
6
+ * A description of what you expect the model to set this value to.
7
+ *
8
+ * Only passed to the model when using function calling, and has no effect when using JSON Schema grammar directly.
9
+ */
10
+ readonly description?: string;
5
11
  };
6
12
  export type GbnfJsonConstSchema = {
7
- const: string | number | boolean | null;
13
+ readonly const: string | number | boolean | null;
14
+ /**
15
+ * A description of what you expect the model to set this value to.
16
+ *
17
+ * Only passed to the model when using function calling, and has no effect when using JSON Schema grammar directly.
18
+ */
19
+ readonly description?: string;
8
20
  };
9
21
  export type GbnfJsonEnumSchema = {
10
- enum: readonly (string | number | boolean | null)[];
22
+ readonly enum: readonly (string | number | boolean | null)[];
23
+ /**
24
+ * A description of what you expect the model to set this value to.
25
+ *
26
+ * Only passed to the model when using function calling, and has no effect when using JSON Schema grammar directly.
27
+ */
28
+ readonly description?: string;
11
29
  };
12
30
  export type GbnfJsonOneOfSchema = {
13
- oneOf: readonly GbnfJsonSchema[];
31
+ readonly oneOf: readonly GbnfJsonSchema[];
32
+ /**
33
+ * A description of what you expect the model to set this value to.
34
+ *
35
+ * Only passed to the model when using function calling, and has no effect when using JSON Schema grammar directly.
36
+ */
37
+ readonly description?: string;
38
+ };
39
+ export type GbnfJsonStringSchema = GbnfJsonBasicStringSchema | GbnfJsonFormatStringSchema;
40
+ export type GbnfJsonBasicStringSchema = {
41
+ readonly type: "string";
42
+ /**
43
+ * When using `minLength` and/or `maxLength`,
44
+ * ensure to inform the model as part of the prompt what your expectations are regarding the length of the string.
45
+ * Not doing this may lead to hallucinations.
46
+ */
47
+ readonly minLength?: number;
48
+ /**
49
+ * When using `minLength` and/or `maxLength`,
50
+ * ensure to inform the model as part of the prompt what your expectations are regarding the length of the string.
51
+ * Not doing this may lead to hallucinations.
52
+ */
53
+ readonly maxLength?: number;
54
+ /**
55
+ * A description of what you expect the model to set this value to.
56
+ *
57
+ * Only passed to the model when using function calling, and has no effect when using JSON Schema grammar directly.
58
+ */
59
+ readonly description?: string;
60
+ };
61
+ export type GbnfJsonFormatStringSchema = {
62
+ readonly type: "string";
63
+ readonly format: "date-time" | "time" | "date";
64
+ /**
65
+ * A description of what you expect the model to set this value to.
66
+ *
67
+ * Only passed to the model when using function calling, and has no effect when using JSON Schema grammar directly.
68
+ */
69
+ readonly description?: string;
14
70
  };
15
71
  export type GbnfJsonObjectSchema<Keys extends string = string> = {
16
- type: "object";
17
- properties: Readonly<{
18
- [key in Keys]: GbnfJsonSchema;
19
- }>;
20
- required?: readonly Keys[];
72
+ readonly type: "object";
73
+ readonly properties?: {
74
+ readonly [key in Keys]: GbnfJsonSchema;
75
+ };
76
+ /**
77
+ * Unlike the JSON Schema spec, `additionalProperties` defaults to `false` to avoid breaking existing code.
78
+ */
79
+ readonly additionalProperties?: boolean | GbnfJsonSchema;
80
+ /**
81
+ * Make sure you define `additionalProperties` for this to have any effect.
82
+ *
83
+ * When using `minProperties` and/or `maxProperties`,
84
+ * ensure to inform the model as part of the prompt what your expectations are regarding the number of keys in the object.
85
+ * Not doing this may lead to hallucinations.
86
+ */
87
+ readonly minProperties?: number;
88
+ /**
89
+ * Make sure you define `additionalProperties` for this to have any effect.
90
+ *
91
+ * When using `minProperties` and/or `maxProperties`,
92
+ * ensure to inform the model as part of the prompt what your expectations are regarding the number of keys in the object.
93
+ * Not doing this may lead to hallucinations.
94
+ */
95
+ readonly maxProperties?: number;
96
+ /**
97
+ * `required` is always set to all keys in `properties`, and setting it has no effect.
98
+ *
99
+ * This limitation is due to how the generation works, and may be fixed in the future.
100
+ *
101
+ * This key is part of the type to avoid breaking exiting code (though it was never actually used in the past),
102
+ * and will be removed in the future.
103
+ * @deprecated
104
+ */
105
+ readonly required?: readonly Keys[];
106
+ /**
107
+ * A description of what you expect the model to set this value to.
108
+ *
109
+ * Only passed to the model when using function calling, and has no effect when using JSON Schema grammar directly.
110
+ */
111
+ readonly description?: string;
21
112
  };
22
113
  export type GbnfJsonArraySchema = {
23
- type: "array";
24
- items: GbnfJsonSchema;
114
+ readonly type: "array";
115
+ readonly items?: GbnfJsonSchema;
116
+ readonly prefixItems?: readonly GbnfJsonSchema[];
117
+ /**
118
+ * When using `minItems` and/or `maxItems`,
119
+ * ensure to inform the model as part of the prompt what your expectations are regarding the length of the array.
120
+ * Not doing this may lead to hallucinations.
121
+ */
122
+ readonly minItems?: number;
123
+ /**
124
+ * When using `minItems` and/or `maxItems`,
125
+ * ensure to inform the model as part of the prompt what your expectations are regarding the length of the array.
126
+ * Not doing this may lead to hallucinations.
127
+ */
128
+ readonly maxItems?: number;
129
+ /**
130
+ * A description of what you expect the model to set this value to.
131
+ *
132
+ * Only passed to the model when using function calling, and has no effect when using JSON Schema grammar directly.
133
+ */
134
+ readonly description?: string;
25
135
  };
26
136
  /**
27
137
  * Converts a GBNF JSON schema to a TypeScript type
28
138
  */
29
139
  export type GbnfJsonSchemaToType<T> = GbnfJsonSchemaToTSType<T>;
30
- export type GbnfJsonSchemaToTSType<T> = GbnfJsonBasicSchema extends T ? undefined : undefined extends T ? undefined : T extends GbnfJsonBasicSchema ? GbnfJsonBasicSchemaToType<T["type"]> : T extends GbnfJsonConstSchema ? T["const"] : T extends GbnfJsonEnumSchema ? T["enum"][number] : T extends GbnfJsonOneOfSchema ? GbnfJsonSchemaToType<T["oneOf"][number]> : T extends GbnfJsonObjectSchema ? GbnfJsonObjectSchemaToType<T["properties"]> : T extends GbnfJsonArraySchema ? GbnfJsonSchemaToType<T["items"]>[] : undefined;
31
- type GbnfJsonBasicSchemaToType<T> = T extends GbnfJsonSchemaImmutableType ? ImmutableTypeToType<T> : T extends GbnfJsonSchemaImmutableType[] ? ImmutableTypeToType<T[number]> : never;
32
- type ImmutableTypeToType<T> = T extends "string" ? string : T extends "number" ? number : T extends "integer" ? number : T extends "boolean" ? boolean : T extends "null" ? null : never;
33
- type GbnfJsonObjectSchemaToType<Props> = {
34
- [P in keyof Props]: GbnfJsonSchemaToType<Props[P]>;
140
+ export type GbnfJsonSchemaToTSType<T> = Readonly<GbnfJsonBasicSchema> extends T ? undefined : undefined extends T ? undefined : T extends GbnfJsonBasicStringSchema ? GbnfJsonBasicStringSchemaToType<T> : T extends GbnfJsonFormatStringSchema ? string : T extends GbnfJsonBasicSchema ? GbnfJsonBasicSchemaToType<T["type"]> : T extends GbnfJsonConstSchema ? T["const"] : T extends GbnfJsonEnumSchema ? T["enum"][number] : T extends GbnfJsonOneOfSchema ? GbnfJsonSchemaToType<T["oneOf"][number]> : T extends GbnfJsonObjectSchema ? GbnfJsonObjectSchemaToType<T> : T extends GbnfJsonArraySchema ? ArrayTypeToType<T> : undefined;
141
+ type GbnfJsonBasicStringSchemaToType<T extends GbnfJsonBasicStringSchema> = T["maxLength"] extends 0 ? "" : string;
142
+ type GbnfJsonBasicSchemaToType<T extends GbnfJsonBasicSchema["type"]> = T extends GbnfJsonSchemaImmutableType ? ImmutableTypeToType<T> : T extends GbnfJsonSchemaImmutableType[] ? ImmutableTypeToType<T[number]> : never;
143
+ type ImmutableTypeToType<T extends GbnfJsonSchemaImmutableType> = T extends "string" ? string : T extends "number" ? number : T extends "integer" ? number : T extends "boolean" ? boolean : T extends "null" ? null : never;
144
+ type ArrayTypeToType<T extends GbnfJsonArraySchema, MinItems extends number = T["minItems"] extends number ? T["prefixItems"] extends readonly GbnfJsonSchema[] ? keyof T["prefixItems"] extends T["minItems"] ? T["prefixItems"]["length"] : T["minItems"] : T["minItems"] : T["prefixItems"] extends readonly GbnfJsonSchema[] ? T["prefixItems"]["length"] : 0> = T["prefixItems"] extends readonly GbnfJsonSchema[] ? (MinItems extends T["prefixItems"]["length"] ? (T["maxItems"] extends MinItems ? [
145
+ ...GbnfJsonOrderedArrayTypes<T["prefixItems"]>,
146
+ ...IndexRangeWithSkip<MinItems, T["prefixItems"]["length"], T["items"] extends GbnfJsonSchema ? GbnfJsonSchemaToType<T["items"]> : GbnfJsonAnyValue>
147
+ ] : [
148
+ ...GbnfJsonOrderedArrayTypes<T["prefixItems"]>,
149
+ ...(T["items"] extends GbnfJsonSchema ? GbnfJsonSchemaToType<T["items"]> : GbnfJsonAnyValue)[]
150
+ ]) : T["maxItems"] extends MinItems ? [
151
+ ...GbnfJsonOrderedArrayTypes<T["prefixItems"]>,
152
+ ...(T["items"] extends GbnfJsonSchema ? IndexRangeWithSkip<T["maxItems"], T["prefixItems"]["length"], GbnfJsonSchemaToType<T["items"]>> : IndexRangeWithSkip<T["maxItems"], T["prefixItems"]["length"], GbnfJsonAnyValue>)
153
+ ] : [
154
+ ...GbnfJsonOrderedArrayTypes<T["prefixItems"]>,
155
+ ...IndexRangeWithSkip<MinItems, T["prefixItems"]["length"], T["items"] extends GbnfJsonSchema ? GbnfJsonSchemaToType<T["items"]> : GbnfJsonAnyValue>,
156
+ ...(T["items"] extends GbnfJsonSchema ? GbnfJsonSchemaToType<T["items"]> : GbnfJsonAnyValue)[]
157
+ ]) : T["items"] extends GbnfJsonSchema ? (MinItems extends 0 ? GbnfJsonSchemaToType<T["items"]>[] : T["maxItems"] extends MinItems ? IndexRange<T["maxItems"], GbnfJsonSchemaToType<T["items"]>> : [
158
+ ...IndexRange<MinItems, GbnfJsonSchemaToType<T["items"]>>,
159
+ ...GbnfJsonSchemaToType<T["items"]>[]
160
+ ]) : (MinItems extends 0 ? GbnfJsonAnyValue[] : T["maxItems"] extends MinItems ? IndexRange<T["maxItems"], GbnfJsonAnyValue> : [
161
+ ...IndexRange<MinItems, GbnfJsonAnyValue>,
162
+ ...GbnfJsonAnyValue[]
163
+ ]);
164
+ type GbnfJsonObjectSchemaToType<T extends GbnfJsonObjectSchema, Props extends Readonly<Record<string, GbnfJsonSchema>> | undefined = T["properties"], AdditionalProps extends true | false | GbnfJsonSchema | undefined = T["additionalProperties"], PropsMap = Props extends undefined ? {} : {
165
+ -readonly [P in keyof Props]: GbnfJsonSchemaToType<Props[P]>;
166
+ }, Res = AdditionalProps extends undefined | false ? PropsMap : AdditionalProps extends true ? PropsMap & {
167
+ [key: string]: GbnfJsonAnyValue;
168
+ } : AdditionalProps extends GbnfJsonSchema ? PropsMap & {
169
+ [key: string]: GbnfJsonSchemaToType<AdditionalProps>;
170
+ } : PropsMap> = Res;
171
+ type GbnfJsonAnyValue = string | number | boolean | null | GbnfJsonAnyValue[] | {
172
+ [key: string]: GbnfJsonAnyValue;
35
173
  };
36
174
  export declare function isGbnfJsonConstSchema(schema: GbnfJsonSchema): schema is GbnfJsonConstSchema;
37
175
  export declare function isGbnfJsonEnumSchema(schema: GbnfJsonSchema): schema is GbnfJsonEnumSchema;
38
176
  export declare function isGbnfJsonOneOfSchema(schema: GbnfJsonSchema): schema is GbnfJsonOneOfSchema;
177
+ export declare function isGbnfJsonBasicStringSchema(schema: GbnfJsonSchema): schema is GbnfJsonBasicStringSchema;
178
+ export declare function isGbnfJsonFormatStringSchema(schema: GbnfJsonSchema): schema is GbnfJsonFormatStringSchema;
39
179
  export declare function isGbnfJsonObjectSchema(schema: GbnfJsonSchema): schema is GbnfJsonObjectSchema;
40
180
  export declare function isGbnfJsonArraySchema(schema: GbnfJsonSchema): schema is GbnfJsonArraySchema;
41
181
  export declare function isGbnfJsonBasicSchemaIncludesType<T extends GbnfJsonSchemaImmutableType>(schema: GbnfJsonBasicSchema, type: T): schema is GbnfJsonBasicSchema & {
42
182
  type: T | (T | GbnfJsonSchemaImmutableType)[];
43
183
  };
184
+ type IndexRange<Length extends number, FillType = number, Res = _IndexRange<[], Length, FillType>> = Res;
185
+ type _IndexRange<Value extends FillType[], MaxLength extends number, FillType = number> = Value["length"] extends MaxLength ? Value : _IndexRange<[...Value, FillType], MaxLength, FillType>;
186
+ type IndexRangeWithSkip<Length extends number, SkipFirst extends number, FillType, Res = _IndexRangeWithSkip<[], IndexRange<SkipFirst>, Length, FillType>> = Res;
187
+ type _IndexRangeWithSkip<Value extends FillType[], ConditionValue extends number[], MaxLength extends number, FillType> = ConditionValue["length"] extends MaxLength ? Value : _IndexRangeWithSkip<[...Value, FillType], [...ConditionValue, ConditionValue["length"]], MaxLength, FillType>;
188
+ type GbnfJsonOrderedArrayTypes<T extends readonly GbnfJsonSchema[]> = {
189
+ -readonly [P in keyof T]: GbnfJsonSchemaToType<T[P]>;
190
+ };
44
191
  export {};
@@ -7,6 +7,12 @@ export function isGbnfJsonEnumSchema(schema) {
7
7
  export function isGbnfJsonOneOfSchema(schema) {
8
8
  return schema.oneOf != null;
9
9
  }
10
+ export function isGbnfJsonBasicStringSchema(schema) {
11
+ return schema.type === "string" && schema.format == null;
12
+ }
13
+ export function isGbnfJsonFormatStringSchema(schema) {
14
+ return schema.type === "string" && schema.format != null;
15
+ }
10
16
  export function isGbnfJsonObjectSchema(schema) {
11
17
  return schema.type === "object";
12
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/utils/gbnfJson/types.ts"],"names":[],"mappings":"AA4EA,MAAM,UAAU,qBAAqB,CAAC,MAAsB;IACxD,OAAQ,MAA8B,CAAC,KAAK,KAAK,SAAS,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAsB;IACvD,OAAQ,MAA6B,CAAC,IAAI,IAAI,IAAI,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAsB;IACxD,OAAQ,MAA8B,CAAC,KAAK,IAAI,IAAI,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAsB;IACzD,OAAQ,MAA+B,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAsB;IACxD,OAAQ,MAA8B,CAAC,IAAI,KAAK,OAAO,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC7C,MAA2B,EAAE,IAAO;IAEpC,IAAI,MAAM,CAAC,IAAI,YAAY,KAAK;QAC5B,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEtC,OAAO,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/utils/gbnfJson/types.ts"],"names":[],"mappings":"AAoTA,MAAM,UAAU,qBAAqB,CAAC,MAAsB;IACxD,OAAQ,MAA8B,CAAC,KAAK,KAAK,SAAS,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAsB;IACvD,OAAQ,MAA6B,CAAC,IAAI,IAAI,IAAI,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAsB;IACxD,OAAQ,MAA8B,CAAC,KAAK,IAAI,IAAI,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAAsB;IAC9D,OAAQ,MAAoC,CAAC,IAAI,KAAK,QAAQ,IAAK,MAAqC,CAAC,MAAM,IAAI,IAAI,CAAC;AAC5H,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,MAAsB;IAC/D,OAAQ,MAAqC,CAAC,IAAI,KAAK,QAAQ,IAAK,MAAqC,CAAC,MAAM,IAAI,IAAI,CAAC;AAC7H,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAsB;IACzD,OAAQ,MAA+B,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAsB;IACxD,OAAQ,MAA8B,CAAC,IAAI,KAAK,OAAO,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC7C,MAA2B,EAAE,IAAO;IAEpC,IAAI,MAAM,CAAC,IAAI,YAAY,KAAK;QAC5B,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEtC,OAAO,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC;AAChC,CAAC"}
@@ -6,7 +6,10 @@ import { GbnfString } from "../terminals/GbnfString.js";
6
6
  import { GbnfNumber } from "../terminals/GbnfNumber.js";
7
7
  import { GbnfBoolean } from "../terminals/GbnfBoolean.js";
8
8
  import { GbnfNull } from "../terminals/GbnfNull.js";
9
- import { isGbnfJsonArraySchema, isGbnfJsonBasicSchemaIncludesType, isGbnfJsonConstSchema, isGbnfJsonEnumSchema, isGbnfJsonObjectSchema, isGbnfJsonOneOfSchema } from "../types.js";
9
+ import { isGbnfJsonArraySchema, isGbnfJsonBasicSchemaIncludesType, isGbnfJsonConstSchema, isGbnfJsonEnumSchema, isGbnfJsonObjectSchema, isGbnfJsonOneOfSchema, isGbnfJsonBasicStringSchema, isGbnfJsonFormatStringSchema } from "../types.js";
10
+ import { getConsoleLogPrefix } from "../../getConsoleLogPrefix.js";
11
+ import { GbnfAnyJson } from "../terminals/GbnfAnyJson.js";
12
+ import { GbnfFormatString } from "../terminals/GbnfFormatString.js";
10
13
  import { getGbnfJsonTerminalForLiteral } from "./getGbnfJsonTerminalForLiteral.js";
11
14
  import { GbnfJsonScopeState } from "./GbnfJsonScopeState.js";
12
15
  export function getGbnfJsonTerminalForGbnfJsonSchema(schema, grammarGenerator, scopeState = new GbnfJsonScopeState()) {
@@ -22,17 +25,66 @@ export function getGbnfJsonTerminalForGbnfJsonSchema(schema, grammarGenerator, s
22
25
  return new GbnfOr(schema.enum.map((item) => getGbnfJsonTerminalForLiteral(item)));
23
26
  }
24
27
  else if (isGbnfJsonObjectSchema(schema)) {
25
- return new GbnfObjectMap(Object.entries(schema.properties).map(([propName, propSchema]) => {
26
- return {
27
- required: true,
28
- key: new GbnfStringValue(propName),
29
- value: getGbnfJsonTerminalForGbnfJsonSchema(propSchema, grammarGenerator, scopeState.getForNewScope())
30
- };
31
- }), scopeState);
28
+ const propertiesEntries = Object.entries(schema.properties ?? {});
29
+ let maxProperties = schema.maxProperties;
30
+ if (schema.properties != null && maxProperties != null && maxProperties < propertiesEntries.length) {
31
+ console.warn(getConsoleLogPrefix(true, false), `maxProperties (${maxProperties}) must be greater than or equal to ` +
32
+ `properties object keys number (${propertiesEntries.length}). ` +
33
+ "Using properties object keys number as maxProperties.");
34
+ maxProperties = propertiesEntries.length;
35
+ }
36
+ return new GbnfObjectMap({
37
+ fields: propertiesEntries.map(([propName, propSchema]) => {
38
+ return {
39
+ required: true,
40
+ key: new GbnfStringValue(propName),
41
+ value: getGbnfJsonTerminalForGbnfJsonSchema(propSchema, grammarGenerator, scopeState.getForNewScope())
42
+ };
43
+ }),
44
+ additionalProperties: (schema.additionalProperties == null || schema.additionalProperties === false)
45
+ ? undefined
46
+ : schema.additionalProperties === true
47
+ ? new GbnfAnyJson(scopeState.getForNewScope())
48
+ : getGbnfJsonTerminalForGbnfJsonSchema(schema.additionalProperties, grammarGenerator, scopeState.getForNewScope()),
49
+ minProperties: schema.minProperties,
50
+ maxProperties,
51
+ scopeState
52
+ });
32
53
  }
33
54
  else if (isGbnfJsonArraySchema(schema)) {
34
- return new GbnfArray(getGbnfJsonTerminalForGbnfJsonSchema(schema.items, grammarGenerator, scopeState), scopeState);
55
+ let maxItems = schema.maxItems;
56
+ if (schema.prefixItems != null && maxItems != null && maxItems < schema.prefixItems.length) {
57
+ console.warn(getConsoleLogPrefix(true, false), `maxItems (${maxItems}) must be greater than or equal to prefixItems array length (${schema.prefixItems.length}). ` +
58
+ "Using prefixItems length as maxItems.");
59
+ maxItems = schema.prefixItems.length;
60
+ }
61
+ return new GbnfArray({
62
+ items: schema.items == null
63
+ ? undefined
64
+ : getGbnfJsonTerminalForGbnfJsonSchema(schema.items, grammarGenerator, scopeState.getForNewScope()),
65
+ prefixItems: schema.prefixItems == null
66
+ ? undefined
67
+ : schema.prefixItems.map((item) => (getGbnfJsonTerminalForGbnfJsonSchema(item, grammarGenerator, scopeState.getForNewScope()))),
68
+ minItems: schema.minItems,
69
+ maxItems,
70
+ scopeState
71
+ });
35
72
  }
73
+ else if (isGbnfJsonBasicStringSchema(schema)) {
74
+ const minLength = Math.max(0, schema.minLength ?? 0);
75
+ let maxLength = schema.maxLength;
76
+ if (maxLength != null && maxLength < minLength) {
77
+ console.warn(getConsoleLogPrefix(true, false), `maxLength (${maxLength}) must be greater than or equal to minLength (${minLength}). ` +
78
+ "Using minLength as maxLength.");
79
+ maxLength = minLength;
80
+ }
81
+ return new GbnfString({
82
+ minLength,
83
+ maxLength
84
+ });
85
+ }
86
+ else if (isGbnfJsonFormatStringSchema(schema))
87
+ return new GbnfFormatString(schema.format);
36
88
  const terminals = [];
37
89
  if (isGbnfJsonBasicSchemaIncludesType(schema, "string"))
38
90
  terminals.push(new GbnfString());
@@ -1 +1 @@
1
- {"version":3,"file":"getGbnfJsonTerminalForGbnfJsonSchema.js","sourceRoot":"","sources":["../../../../src/utils/gbnfJson/utils/getGbnfJsonTerminalForGbnfJsonSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAC,aAAa,EAAC,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAC,eAAe,EAAC,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAC,SAAS,EAAC,MAAM,2BAA2B,CAAC;AAEpD,OAAO,EAAC,UAAU,EAAC,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAC,UAAU,EAAC,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAC,WAAW,EAAC,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAC,QAAQ,EAAC,MAAM,0BAA0B,CAAC;AAElD,OAAO,EACa,qBAAqB,EAAE,iCAAiC,EAAE,qBAAqB,EAAE,oBAAoB,EACrH,sBAAsB,EAAE,qBAAqB,EAChD,MAAM,aAAa,CAAC;AACrB,OAAO,EAAC,6BAA6B,EAAC,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAC,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AAG3D,MAAM,UAAU,oCAAoC,CAChD,MAAsB,EAAE,gBAAsC,EAAE,aAAiC,IAAI,kBAAkB,EAAE;IAEzH,IAAI,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK;aACtB,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,oCAAoC,CAAC,SAAS,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC;QAEvG,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;SAAM,IAAI,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;QACvC,OAAO,6BAA6B,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC;SAAM,IAAI,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtF,CAAC;SAAM,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC;QACxC,OAAO,IAAI,aAAa,CACpB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE;YAC7D,OAAO;gBACH,QAAQ,EAAE,IAAI;gBACd,GAAG,EAAE,IAAI,eAAe,CAAC,QAAQ,CAAC;gBAClC,KAAK,EAAE,oCAAoC,CAAC,UAAU,EAAE,gBAAgB,EAAE,UAAU,CAAC,cAAc,EAAE,CAAC;aACzG,CAAC;QACN,CAAC,CAAC,EACF,UAAU,CACb,CAAC;IACN,CAAC;SAAM,IAAI,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,SAAS,CAAC,oCAAoC,CAAC,MAAM,CAAC,KAAK,EAAE,gBAAgB,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;IACvH,CAAC;IAED,MAAM,SAAS,GAAmB,EAAE,CAAC;IAErC,IAAI,iCAAiC,CAAC,MAAM,EAAE,QAAQ,CAAC;QACnD,SAAS,CAAC,IAAI,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC;IAErC,IAAI,iCAAiC,CAAC,MAAM,EAAE,QAAQ,CAAC;QACnD,SAAS,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,EAAC,eAAe,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC;IAE5D,IAAI,iCAAiC,CAAC,MAAM,EAAE,SAAS,CAAC;QACpD,SAAS,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,EAAC,eAAe,EAAE,KAAK,EAAC,CAAC,CAAC,CAAC;IAE7D,IAAI,iCAAiC,CAAC,MAAM,EAAE,SAAS,CAAC;QACpD,SAAS,CAAC,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;IAEtC,IAAI,iCAAiC,CAAC,MAAM,EAAE,MAAM,CAAC;QACjD,SAAS,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;IAEnC,OAAO,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"getGbnfJsonTerminalForGbnfJsonSchema.js","sourceRoot":"","sources":["../../../../src/utils/gbnfJson/utils/getGbnfJsonTerminalForGbnfJsonSchema.ts"],"names":[],"mappings":"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"}