@sesamecare-oss/ai-templating 0.0.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.
- package/README.md +254 -0
- package/build/TemplateManager.d.ts +32 -0
- package/build/TemplateManager.js +189 -0
- package/build/TemplateManager.js.map +1 -0
- package/build/compile-prompt.d.ts +3 -0
- package/build/compile-prompt.js +42 -0
- package/build/compile-prompt.js.map +1 -0
- package/build/handlebars-helpers.d.ts +1 -0
- package/build/handlebars-helpers.js +26 -0
- package/build/handlebars-helpers.js.map +1 -0
- package/build/index.d.ts +5 -0
- package/build/index.js +5 -0
- package/build/index.js.map +1 -0
- package/build/sources/filesystem.d.ts +12 -0
- package/build/sources/filesystem.js +88 -0
- package/build/sources/filesystem.js.map +1 -0
- package/build/sources/langfuse.d.ts +12 -0
- package/build/sources/langfuse.js +170 -0
- package/build/sources/langfuse.js.map +1 -0
- package/build/template-files.d.ts +6 -0
- package/build/template-files.js +36 -0
- package/build/template-files.js.map +1 -0
- package/build/template-loader.d.ts +3 -0
- package/build/template-loader.js +22 -0
- package/build/template-loader.js.map +1 -0
- package/build/template-store.d.ts +10 -0
- package/build/template-store.js +104 -0
- package/build/template-store.js.map +1 -0
- package/build/tsconfig.build.tsbuildinfo +1 -0
- package/build/types.d.ts +72 -0
- package/build/types.js +1 -0
- package/build/types.js.map +1 -0
- package/build/weighted-selector.d.ts +17 -0
- package/build/weighted-selector.js +77 -0
- package/build/weighted-selector.js.map +1 -0
- package/package.json +91 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A fast non-cryptographic hash function.
|
|
3
|
+
* https://en.wikipedia.org/wiki/Fowler-Noll-Vo_hash_function
|
|
4
|
+
*/
|
|
5
|
+
export declare function fnv1a32(str: string): number;
|
|
6
|
+
export declare function seededUnitFloat(seed: string): number;
|
|
7
|
+
export interface WeightedItem {
|
|
8
|
+
key: string;
|
|
9
|
+
weight: number;
|
|
10
|
+
}
|
|
11
|
+
export declare function parseWeights(expr: string): WeightedItem[];
|
|
12
|
+
export declare function weightedPick(expressionOrItems: string | WeightedItem[], seed: string): string;
|
|
13
|
+
export declare function normalize<T extends {
|
|
14
|
+
weight?: number;
|
|
15
|
+
}>(items: T[]): (T & {
|
|
16
|
+
weight: number;
|
|
17
|
+
})[];
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A fast non-cryptographic hash function.
|
|
3
|
+
* https://en.wikipedia.org/wiki/Fowler-Noll-Vo_hash_function
|
|
4
|
+
*/
|
|
5
|
+
export function fnv1a32(str) {
|
|
6
|
+
let h = 0x811c9dc5;
|
|
7
|
+
for (let i = 0; i < str.length; i++) {
|
|
8
|
+
h ^= str.charCodeAt(i);
|
|
9
|
+
h = Math.imul(h, 0x01000193);
|
|
10
|
+
}
|
|
11
|
+
return h >>> 0;
|
|
12
|
+
}
|
|
13
|
+
export function seededUnitFloat(seed) {
|
|
14
|
+
return fnv1a32(seed) / 0xffffffff;
|
|
15
|
+
}
|
|
16
|
+
export function parseWeights(expr) {
|
|
17
|
+
const parts = expr
|
|
18
|
+
.split(',')
|
|
19
|
+
.map((part) => part.trim())
|
|
20
|
+
.filter(Boolean);
|
|
21
|
+
const explicit = [];
|
|
22
|
+
const implicit = [];
|
|
23
|
+
for (const part of parts) {
|
|
24
|
+
const [key, rawWeight] = part.split(':');
|
|
25
|
+
if (rawWeight === undefined) {
|
|
26
|
+
implicit.push(key.trim());
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
const weight = Number(rawWeight);
|
|
30
|
+
if (!key || Number.isNaN(weight) || weight < 0) {
|
|
31
|
+
implicit.push(key.trim());
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
explicit.push({ key: key.trim(), weight });
|
|
35
|
+
}
|
|
36
|
+
if (implicit.length > 0) {
|
|
37
|
+
const explicitTotal = explicit.reduce((sum, item) => sum + item.weight, 0);
|
|
38
|
+
const remaining = explicit.length > 0 ? explicitTotal : 100;
|
|
39
|
+
const implicitWeight = remaining / implicit.length;
|
|
40
|
+
for (const key of implicit) {
|
|
41
|
+
explicit.push({ key, weight: implicitWeight });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return explicit;
|
|
45
|
+
}
|
|
46
|
+
export function weightedPick(expressionOrItems, seed) {
|
|
47
|
+
const items = typeof expressionOrItems === 'string' ? parseWeights(expressionOrItems) : expressionOrItems;
|
|
48
|
+
const total = items.reduce((sum, item) => sum + item.weight, 0);
|
|
49
|
+
if (total <= 0) {
|
|
50
|
+
throw new Error('Total weight must be > 0');
|
|
51
|
+
}
|
|
52
|
+
const random = seededUnitFloat(seed) * total;
|
|
53
|
+
let accumulator = 0;
|
|
54
|
+
for (const { key, weight } of items) {
|
|
55
|
+
accumulator += weight;
|
|
56
|
+
if (random < accumulator) {
|
|
57
|
+
return key;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return items.at(-1).key;
|
|
61
|
+
}
|
|
62
|
+
export function normalize(items) {
|
|
63
|
+
const unweightedCount = items.filter((item) => item.weight === undefined).length;
|
|
64
|
+
const total = items.reduce((sum, item) => sum + (item.weight ?? 0), 0);
|
|
65
|
+
if (unweightedCount === 0) {
|
|
66
|
+
if (total > 0) {
|
|
67
|
+
return items;
|
|
68
|
+
}
|
|
69
|
+
return items.map((item) => ({ ...item, weight: 1 }));
|
|
70
|
+
}
|
|
71
|
+
const defaultWeight = total > 0 ? total / unweightedCount : 1;
|
|
72
|
+
return items.map((item) => ({
|
|
73
|
+
...item,
|
|
74
|
+
weight: item.weight === undefined ? defaultWeight : item.weight,
|
|
75
|
+
}));
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=weighted-selector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"weighted-selector.js","sourceRoot":"","sources":["../src/weighted-selector.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@sesamecare-oss/ai-templating",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"description": "Manage prompts and skills using Langfuse and local filesystem with Handlebars templating",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "build/index.js",
|
|
7
|
+
"types": "build/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./build/index.js",
|
|
11
|
+
"types": "./build/index.d.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"build",
|
|
16
|
+
"README.md"
|
|
17
|
+
],
|
|
18
|
+
"author": "Developers <developers@sesamecare.com>",
|
|
19
|
+
"license": "UNLICENSED",
|
|
20
|
+
"packageManager": "yarn@3.8.7",
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "tsc -p tsconfig.build.json",
|
|
23
|
+
"clean": "yarn dlx rimraf ./build ./tsconfig.tsbuildinfo",
|
|
24
|
+
"lint": "eslint .",
|
|
25
|
+
"postinstall": "cpconfig",
|
|
26
|
+
"prepublishOnly": "yarn build",
|
|
27
|
+
"test": "vitest run"
|
|
28
|
+
},
|
|
29
|
+
"keywords": [
|
|
30
|
+
"typescript",
|
|
31
|
+
"handlebars",
|
|
32
|
+
"langfuse",
|
|
33
|
+
"ai",
|
|
34
|
+
"sesame"
|
|
35
|
+
],
|
|
36
|
+
"repository": {
|
|
37
|
+
"type": "git",
|
|
38
|
+
"url": "git+https://github.com/sesamecare/ai-templating.git"
|
|
39
|
+
},
|
|
40
|
+
"publishConfig": {
|
|
41
|
+
"access": "public"
|
|
42
|
+
},
|
|
43
|
+
"release": {
|
|
44
|
+
"branches": [
|
|
45
|
+
"main"
|
|
46
|
+
],
|
|
47
|
+
"plugins": [
|
|
48
|
+
"@semantic-release/commit-analyzer",
|
|
49
|
+
"@semantic-release/release-notes-generator",
|
|
50
|
+
[
|
|
51
|
+
"@semantic-release/exec",
|
|
52
|
+
{
|
|
53
|
+
"publishCmd": "yarn dlx pinst --disable"
|
|
54
|
+
}
|
|
55
|
+
],
|
|
56
|
+
"@semantic-release/npm",
|
|
57
|
+
"@semantic-release/github"
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
"config": {
|
|
61
|
+
"cpconfig": "@openapi-typescript-infra/cpconfig"
|
|
62
|
+
},
|
|
63
|
+
"engines": {
|
|
64
|
+
"node": ">=22"
|
|
65
|
+
},
|
|
66
|
+
"dependencies": {
|
|
67
|
+
"@apidevtools/json-schema-ref-parser": "^15.3.1",
|
|
68
|
+
"@langfuse/client": "^5.0.1",
|
|
69
|
+
"@langfuse/core": "^5.0.1",
|
|
70
|
+
"@openapi-typescript-infra/service": "^6.12.0",
|
|
71
|
+
"ai": "^6.0.132",
|
|
72
|
+
"date-fns": "^4.1.0",
|
|
73
|
+
"handlebars": "^4.7.8",
|
|
74
|
+
"handlebars-helpers": "^0.10.0"
|
|
75
|
+
},
|
|
76
|
+
"devDependencies": {
|
|
77
|
+
"@openapi-typescript-infra/cpconfig": "^1.1.0",
|
|
78
|
+
"@semantic-release/exec": "^7.1.0",
|
|
79
|
+
"@semantic-release/github": "^12.0.6",
|
|
80
|
+
"@types/handlebars-helpers": "^0.5.6",
|
|
81
|
+
"@types/node": "^25.5.0",
|
|
82
|
+
"cpconfig": "^1.4.4",
|
|
83
|
+
"eslint": "^9",
|
|
84
|
+
"eslint-import-resolver-typescript": "^4.4.4",
|
|
85
|
+
"eslint-plugin-import": "^2.32.0",
|
|
86
|
+
"prettier": "^3.8.1",
|
|
87
|
+
"typescript": "^5.9.3",
|
|
88
|
+
"typescript-eslint": "^8.57.1",
|
|
89
|
+
"vitest": "^4.1.0"
|
|
90
|
+
}
|
|
91
|
+
}
|