feat: switch from mustache to handlebars templates

old-agentic-v1^2
Travis Fischer 2023-05-26 22:11:12 -07:00
rodzic df18d69ed9
commit 6917523cba
4 zmienionych plików z 67 dodań i 20 usunięć

Wyświetl plik

@ -37,11 +37,12 @@
"dependencies": {
"@dqbd/tiktoken": "^1.0.7",
"dotenv-safe": "^8.2.0",
"handlebars": "^4.7.7",
"jsonrepair": "^3.1.0",
"ky": "^0.33.3",
"mustache": "^4.2.0",
"openai-fetch": "^1.3.0",
"p-map": "^6.0.0",
"quick-lru": "^6.1.1",
"ts-dedent": "^2.2.0",
"type-fest": "^3.11.0",
"zod": "^3.21.4",
@ -50,7 +51,6 @@
},
"devDependencies": {
"@trivago/prettier-plugin-sort-imports": "^4.1.1",
"@types/mustache": "^4.2.2",
"@types/node": "^20.2.5",
"ava": "^5.3.0",
"del-cli": "^5.0.0",

Wyświetl plik

@ -7,21 +7,24 @@ dependencies:
dotenv-safe:
specifier: ^8.2.0
version: 8.2.0
handlebars:
specifier: ^4.7.7
version: 4.7.7
jsonrepair:
specifier: ^3.1.0
version: 3.1.0
ky:
specifier: ^0.33.3
version: 0.33.3
mustache:
specifier: ^4.2.0
version: 4.2.0
openai-fetch:
specifier: ^1.3.0
version: 1.3.0
p-map:
specifier: ^6.0.0
version: 6.0.0
quick-lru:
specifier: ^6.1.1
version: 6.1.1
ts-dedent:
specifier: ^2.2.0
version: 2.2.0
@ -42,9 +45,6 @@ devDependencies:
'@trivago/prettier-plugin-sort-imports':
specifier: ^4.1.1
version: 4.1.1(prettier@2.8.8)
'@types/mustache':
specifier: ^4.2.2
version: 4.2.2
'@types/node':
specifier: ^20.2.5
version: 20.2.5
@ -494,10 +494,6 @@ packages:
resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==}
dev: true
/@types/mustache@4.2.2:
resolution: {integrity: sha512-MUSpfpW0yZbTgjekDbH0shMYBUD+X/uJJJMm9LXN1d5yjl5lCY1vN/eWKD6D1tOtjA6206K0zcIPnUaFMurdNA==}
dev: true
/@types/node@20.2.5:
resolution: {integrity: sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==}
dev: true
@ -1404,6 +1400,19 @@ packages:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
dev: true
/handlebars@4.7.7:
resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==}
engines: {node: '>=0.4.7'}
hasBin: true
dependencies:
minimist: 1.2.8
neo-async: 2.6.2
source-map: 0.6.1
wordwrap: 1.0.0
optionalDependencies:
uglify-js: 3.17.4
dev: false
/hard-rejection@2.1.0:
resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==}
engines: {node: '>=6'}
@ -1981,6 +1990,10 @@ packages:
kind-of: 6.0.3
dev: true
/minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
dev: false
/ms@2.1.2:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
dev: true
@ -1989,11 +2002,6 @@ packages:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
dev: true
/mustache@4.2.0:
resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==}
hasBin: true
dev: false
/mz@2.7.0:
resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
dependencies:
@ -2002,6 +2010,10 @@ packages:
thenify-all: 1.6.0
dev: true
/neo-async@2.6.2:
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
dev: false
/nice-try@1.0.5:
resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==}
dev: true
@ -2334,6 +2346,11 @@ packages:
engines: {node: '>=10'}
dev: true
/quick-lru@6.1.1:
resolution: {integrity: sha512-S27GBT+F0NTRiehtbrgaSE1idUAJ5bX8dPAQTdylEyNlrdcH5X4Lz7Edz3DYzecbsCluD5zO8ZNEe04z3D3u6Q==}
engines: {node: '>=12'}
dev: false
/read-pkg-up@8.0.0:
resolution: {integrity: sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==}
engines: {node: '>=12'}
@ -2580,7 +2597,6 @@ packages:
/source-map@0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
dev: true
/source-map@0.8.0-beta.0:
resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
@ -2899,6 +2915,14 @@ packages:
engines: {node: '>=12.20'}
hasBin: true
/uglify-js@3.17.4:
resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==}
engines: {node: '>=0.8.0'}
hasBin: true
requiresBuild: true
dev: false
optional: true
/unbox-primitive@1.0.2:
resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
dependencies:
@ -2969,6 +2993,10 @@ packages:
isexe: 2.0.0
dev: true
/wordwrap@1.0.0:
resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
dev: false
/wrap-ansi@6.2.0:
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
engines: {node: '>=8'}

Wyświetl plik

@ -1,11 +1,11 @@
import { jsonrepair } from 'jsonrepair'
import Mustache from 'mustache'
import { dedent } from 'ts-dedent'
import { ZodRawShape, ZodTypeAny, z } from 'zod'
import { printNode, zodToTs } from 'zod-to-ts'
import * as types from './types'
import { BaseTaskCallBuilder } from './task'
import { getCompiledTemplate } from './template'
import {
extractJSONArrayFromString,
extractJSONObjectFromString
@ -105,7 +105,7 @@ export abstract class BaseChatModelBuilder<
return {
...message,
content: message.content
? Mustache.render(dedent(message.content), input).trim()
? getCompiledTemplate(dedent(message.content))(input).trim()
: ''
}
})

19
src/template.ts 100644
Wyświetl plik

@ -0,0 +1,19 @@
import Handlebars from 'handlebars'
import QuickLRU from 'quick-lru'
const lru = new QuickLRU({ maxSize: 1000 })
export function getCompiledTemplate(template: string) {
let compiledTemplate = lru.get(template) as HandlebarsTemplateDelegate
if (compiledTemplate) {
return compiledTemplate
}
compiledTemplate = Handlebars.compile(template, {
noEscape: true
})
lru.set(template, compiledTemplate)
return compiledTemplate
}