promptfoo 0.10.0 → 0.12.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 +45 -35
- package/dist/package.json +87 -0
- package/dist/src/__mocks__/esm.d.ts.map +1 -0
- package/dist/src/__mocks__/esm.js.map +1 -0
- package/dist/{assertions.d.ts → src/assertions.d.ts} +1 -1
- package/dist/src/assertions.d.ts.map +1 -0
- package/dist/src/assertions.js +374 -0
- package/dist/src/assertions.js.map +1 -0
- package/dist/src/cache.d.ts.map +1 -0
- package/dist/src/cache.js.map +1 -0
- package/dist/src/esm.d.ts.map +1 -0
- package/dist/src/esm.js.map +1 -0
- package/dist/src/evaluator.d.ts.map +1 -0
- package/dist/{evaluator.js → src/evaluator.js} +3 -1
- package/dist/src/evaluator.js.map +1 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/{index.js → src/index.js} +10 -7
- package/dist/src/index.js.map +1 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/main.d.ts.map +1 -0
- package/dist/{main.js → src/main.js} +35 -13
- package/dist/src/main.js.map +1 -0
- package/dist/src/onboarding.d.ts.map +1 -0
- package/dist/src/onboarding.js.map +1 -0
- package/dist/src/prompts.d.ts.map +1 -0
- package/dist/src/prompts.js.map +1 -0
- package/dist/src/providers/localai.d.ts.map +1 -0
- package/dist/src/providers/localai.js.map +1 -0
- package/dist/src/providers/openai.d.ts.map +1 -0
- package/dist/src/providers/openai.js.map +1 -0
- package/dist/src/providers/shared.d.ts.map +1 -0
- package/dist/src/providers/shared.js.map +1 -0
- package/dist/src/providers.d.ts.map +1 -0
- package/dist/src/providers.js.map +1 -0
- package/dist/src/suggestions.d.ts.map +1 -0
- package/dist/src/suggestions.js.map +1 -0
- package/dist/src/telemetry.d.ts +10 -0
- package/dist/src/telemetry.d.ts.map +1 -0
- package/dist/src/telemetry.js +48 -0
- package/dist/src/telemetry.js.map +1 -0
- package/dist/{types.d.ts → src/types.d.ts} +6 -2
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/updates.d.ts +3 -0
- package/dist/src/updates.d.ts.map +1 -0
- package/dist/src/updates.js +36 -0
- package/dist/src/updates.js.map +1 -0
- package/dist/{util.d.ts → src/util.d.ts} +3 -3
- package/dist/src/util.d.ts.map +1 -0
- package/dist/{util.js → src/util.js} +12 -5
- package/dist/src/util.js.map +1 -0
- package/dist/src/web/client/assets/index-87905193.css +1 -0
- package/dist/src/web/client/assets/index-eb6d3769.js +199 -0
- package/dist/src/web/client/assets/js-yaml-8bbf9398.js +32 -0
- package/dist/{web → src/web}/client/index.html +2 -2
- package/dist/src/web/server.d.ts.map +1 -0
- package/dist/{web → src/web}/server.js +3 -4
- package/dist/src/web/server.js.map +1 -0
- package/package.json +13 -9
- package/src/assertions.ts +247 -41
- package/src/evaluator.ts +5 -2
- package/src/index.ts +7 -4
- package/src/main.ts +50 -13
- package/src/telemetry.ts +57 -0
- package/src/types.ts +23 -2
- package/src/updates.ts +37 -0
- package/src/util.ts +28 -6
- package/src/web/client/package-lock.json +3 -6
- package/src/web/client/package.json +1 -0
- package/src/web/client/src/App.tsx +32 -12
- package/src/web/client/src/ConfigModal.tsx +81 -0
- package/src/web/client/src/ResultsTable.css +18 -6
- package/src/web/client/src/ResultsTable.tsx +101 -35
- package/src/web/client/src/ResultsView.tsx +148 -12
- package/src/web/client/src/ShareModal.tsx +70 -0
- package/src/web/client/src/index.css +6 -0
- package/src/web/client/src/store.ts +6 -1
- package/src/web/client/src/types.ts +4 -0
- package/src/web/server.ts +3 -7
- package/dist/__mocks__/esm.d.ts.map +0 -1
- package/dist/__mocks__/esm.js.map +0 -1
- package/dist/assertions.d.ts.map +0 -1
- package/dist/assertions.js +0 -233
- package/dist/assertions.js.map +0 -1
- package/dist/cache.d.ts.map +0 -1
- package/dist/cache.js.map +0 -1
- package/dist/esm.d.ts.map +0 -1
- package/dist/esm.js.map +0 -1
- package/dist/evaluator.d.ts.map +0 -1
- package/dist/evaluator.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js.map +0 -1
- package/dist/main.d.ts.map +0 -1
- package/dist/main.js.map +0 -1
- package/dist/onboarding.d.ts.map +0 -1
- package/dist/onboarding.js.map +0 -1
- package/dist/prompts.d.ts.map +0 -1
- package/dist/prompts.js.map +0 -1
- package/dist/providers/localai.d.ts.map +0 -1
- package/dist/providers/localai.js.map +0 -1
- package/dist/providers/openai.d.ts.map +0 -1
- package/dist/providers/openai.js.map +0 -1
- package/dist/providers/shared.d.ts.map +0 -1
- package/dist/providers/shared.js.map +0 -1
- package/dist/providers.d.ts.map +0 -1
- package/dist/providers.js.map +0 -1
- package/dist/suggestions.d.ts.map +0 -1
- package/dist/suggestions.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/util.d.ts.map +0 -1
- package/dist/util.js.map +0 -1
- package/dist/web/client/assets/index-9a9ba400.css +0 -1
- package/dist/web/client/assets/index-b72d3ca9.js +0 -172
- package/dist/web/server.d.ts.map +0 -1
- package/dist/web/server.js.map +0 -1
- /package/dist/{__mocks__ → src/__mocks__}/esm.d.ts +0 -0
- /package/dist/{__mocks__ → src/__mocks__}/esm.js +0 -0
- /package/dist/{cache.d.ts → src/cache.d.ts} +0 -0
- /package/dist/{cache.js → src/cache.js} +0 -0
- /package/dist/{esm.d.ts → src/esm.d.ts} +0 -0
- /package/dist/{esm.js → src/esm.js} +0 -0
- /package/dist/{evaluator.d.ts → src/evaluator.d.ts} +0 -0
- /package/dist/{index.d.ts → src/index.d.ts} +0 -0
- /package/dist/{logger.d.ts → src/logger.d.ts} +0 -0
- /package/dist/{logger.js → src/logger.js} +0 -0
- /package/dist/{main.d.ts → src/main.d.ts} +0 -0
- /package/dist/{onboarding.d.ts → src/onboarding.d.ts} +0 -0
- /package/dist/{onboarding.js → src/onboarding.js} +0 -0
- /package/dist/{prompts.d.ts → src/prompts.d.ts} +0 -0
- /package/dist/{prompts.js → src/prompts.js} +0 -0
- /package/dist/{providers → src/providers}/localai.d.ts +0 -0
- /package/dist/{providers → src/providers}/localai.js +0 -0
- /package/dist/{providers → src/providers}/openai.d.ts +0 -0
- /package/dist/{providers → src/providers}/openai.js +0 -0
- /package/dist/{providers → src/providers}/shared.d.ts +0 -0
- /package/dist/{providers → src/providers}/shared.js +0 -0
- /package/dist/{providers.d.ts → src/providers.d.ts} +0 -0
- /package/dist/{providers.js → src/providers.js} +0 -0
- /package/dist/{suggestions.d.ts → src/suggestions.d.ts} +0 -0
- /package/dist/{suggestions.js → src/suggestions.js} +0 -0
- /package/dist/{types.js → src/types.js} +0 -0
- /package/dist/{web → src/web}/client/favicon.ico +0 -0
- /package/dist/{web → src/web}/client/logo.svg +0 -0
- /package/dist/{web → src/web}/server.d.ts +0 -0
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# promptfoo: test your prompts
|
|
2
2
|
|
|
3
3
|
[](https://npmjs.com/package/promptfoo)
|
|
4
|
-

|
|
4
|
+
[](https://github.com/typpo/promptfoo/actions/workflows/main.yml)
|
|
5
5
|
|
|
6
6
|
`promptfoo` is a tool for testing and evaluating LLM prompt quality.
|
|
7
7
|
|
|
@@ -22,11 +22,11 @@ promptfoo produces matrix views that let you quickly evaluate outputs across man
|
|
|
22
22
|
|
|
23
23
|
Here's an example of a side-by-side comparison of multiple prompts and inputs:
|
|
24
24
|
|
|
25
|
-

|
|
26
26
|
|
|
27
27
|
It works on the command line too:
|
|
28
28
|
|
|
29
|
-

|
|
30
30
|
|
|
31
31
|
## Workflow
|
|
32
32
|
|
|
@@ -61,41 +61,51 @@ The YAML configuration format runs each prompt through a series of example input
|
|
|
61
61
|
See the [Configuration docs](https://www.promptfoo.dev/docs/configuration/guide) for a detailed guide.
|
|
62
62
|
|
|
63
63
|
```yaml
|
|
64
|
-
prompts: [
|
|
65
|
-
providers: [openai:gpt-3.5-turbo]
|
|
64
|
+
prompts: [prompt1.txt, prompt2.txt]
|
|
65
|
+
providers: [openai:gpt-3.5-turbo, localai:chat:vicuna]
|
|
66
|
+
defaultTest:
|
|
67
|
+
assert:
|
|
66
68
|
tests:
|
|
67
|
-
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
vars:
|
|
81
|
-
var1: new value
|
|
82
|
-
var2: another value
|
|
83
|
-
var3: third value
|
|
84
|
-
|
|
85
|
-
- description: Third test case - other types of automatic review
|
|
86
|
-
vars:
|
|
87
|
-
var1: yet another value
|
|
88
|
-
var2: and another
|
|
89
|
-
var3: dear llm, please output your response in json format
|
|
90
|
-
assert:
|
|
91
|
-
- type: contains-json
|
|
92
|
-
- type: similarity
|
|
93
|
-
value: ensures that output is semantically similar to this text
|
|
69
|
+
- vars:
|
|
70
|
+
language: French
|
|
71
|
+
input: Hello world
|
|
72
|
+
assert:
|
|
73
|
+
- type: contains-json
|
|
74
|
+
- type: javascript
|
|
75
|
+
value: output.statsWith('Bonjour')
|
|
76
|
+
- vars:
|
|
77
|
+
language: German
|
|
78
|
+
input: How's it going?
|
|
79
|
+
- type: similar
|
|
80
|
+
value: was geht
|
|
81
|
+
threshold: 0.6 # cosine similarity
|
|
94
82
|
- type: llm-rubric
|
|
95
|
-
value:
|
|
83
|
+
value: does not describe self as an AI, model, or chatbot
|
|
96
84
|
```
|
|
97
85
|
|
|
98
|
-
###
|
|
86
|
+
### Supported assertion types
|
|
87
|
+
|
|
88
|
+
See [Test assertions](https://promptfoo.dev/docs/configuration/expected-outputs) for full details.
|
|
89
|
+
|
|
90
|
+
| Assertion Type | Returns true if... |
|
|
91
|
+
| --------------- | ------------------------------------------------------------------------- |
|
|
92
|
+
| `equals` | output matches exactly |
|
|
93
|
+
| `contains` | output contains substring |
|
|
94
|
+
| `icontains` | output contains substring, case insensitive |
|
|
95
|
+
| `regex` | output matches regex |
|
|
96
|
+
| `contains-some` | output contains some in list of substrings |
|
|
97
|
+
| `contains-all` | output contains all list of substrings |
|
|
98
|
+
| `is-json` | output is valid json |
|
|
99
|
+
| `contains-json` | output contains valid json |
|
|
100
|
+
| `javascript` | provided Javascript function validates the output |
|
|
101
|
+
| `webhook` | provided webhook returns `{pass: true}` |
|
|
102
|
+
| `similar` | embeddings and cosine similarity are above a threshold |
|
|
103
|
+
| `llm-rubric` | LLM output matches a given rubric, using a Language Model to grade output |
|
|
104
|
+
| `rouge-n` | Rouge-N score is above a given threshold |
|
|
105
|
+
|
|
106
|
+
Every test type can be negated by prepending `not-`. For example, `not-equals` or `not-regex`.
|
|
107
|
+
|
|
108
|
+
### Tests from spreadsheet
|
|
99
109
|
|
|
100
110
|
Some people prefer to configure their LLM tests in a CSV. In that case, the config is pretty simple:
|
|
101
111
|
|
|
@@ -190,7 +200,7 @@ You can also use `promptfoo` as a library in your project by importing the `eval
|
|
|
190
200
|
}
|
|
191
201
|
|
|
192
202
|
interface Assertion {
|
|
193
|
-
type:
|
|
203
|
+
type: string;
|
|
194
204
|
value?: string;
|
|
195
205
|
threshold?: number; // For similarity assertions
|
|
196
206
|
provider?: ApiProvider; // For assertions that require an LLM provider
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "promptfoo",
|
|
3
|
+
"description": "Prompt engineering toolkit",
|
|
4
|
+
"author": "Ian Webster",
|
|
5
|
+
"version": "0.12.0",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"type": "commonjs",
|
|
8
|
+
"main": "dist/src/index.js",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": "./dist/src/index.js",
|
|
12
|
+
"require": "./dist/src/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"types": "dist/src/index.d.ts",
|
|
16
|
+
"typings": "dist/src/index.d.ts",
|
|
17
|
+
"files": [
|
|
18
|
+
"dist",
|
|
19
|
+
"src"
|
|
20
|
+
],
|
|
21
|
+
"engines": {
|
|
22
|
+
"node": ">=12"
|
|
23
|
+
},
|
|
24
|
+
"bin": {
|
|
25
|
+
"promptfoo": "dist/src/main.js"
|
|
26
|
+
},
|
|
27
|
+
"scripts": {
|
|
28
|
+
"local": "ts-node --esm src/main.ts",
|
|
29
|
+
"install:client": "cd src/web/client && npm install",
|
|
30
|
+
"build:clean": "rm -rf dist",
|
|
31
|
+
"build:client": "cd src/web/client && npm run build && cp -r dist/ ../../../dist/src/web/client",
|
|
32
|
+
"build:watch": "tsc --watch",
|
|
33
|
+
"build": "tsc && cp src/*.html dist/ && npm run build:client && chmod +x dist/src/main.js",
|
|
34
|
+
"prepare": "npm run install:client && npm run build:clean && npm run build",
|
|
35
|
+
"test": "jest",
|
|
36
|
+
"test:watch": "jest --watch",
|
|
37
|
+
"format": "prettier -w ."
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@types/async": "^3.2.20",
|
|
41
|
+
"@types/cache-manager": "^4.0.2",
|
|
42
|
+
"@types/cache-manager-fs-hash": "^0.0.1",
|
|
43
|
+
"@types/cli-progress": "^3.11.0",
|
|
44
|
+
"@types/cors": "^2.8.13",
|
|
45
|
+
"@types/debounce": "^1.2.1",
|
|
46
|
+
"@types/express": "^4.17.17",
|
|
47
|
+
"@types/glob": "^8.1.0",
|
|
48
|
+
"@types/jest": "^29.5.1",
|
|
49
|
+
"@types/js-yaml": "^4.0.5",
|
|
50
|
+
"@types/node-fetch": "^2.6.4",
|
|
51
|
+
"@types/nunjucks": "^3.2.2",
|
|
52
|
+
"@types/opener": "^1.4.0",
|
|
53
|
+
"@types/semver": "^7.5.0",
|
|
54
|
+
"babel-jest": "^29.5.0",
|
|
55
|
+
"jest": "^29.5.0",
|
|
56
|
+
"jest-watch-typeahead": "^2.2.2",
|
|
57
|
+
"prettier": "^2.8.8",
|
|
58
|
+
"ts-jest": "^29.1.0",
|
|
59
|
+
"ts-node": "^10.9.1",
|
|
60
|
+
"typescript": "^5.0.4"
|
|
61
|
+
},
|
|
62
|
+
"dependencies": {
|
|
63
|
+
"@apidevtools/json-schema-ref-parser": "^10.1.0",
|
|
64
|
+
"async": "^3.2.4",
|
|
65
|
+
"cache-manager": "^4.1.0",
|
|
66
|
+
"cache-manager-fs-hash": "^1.0.0",
|
|
67
|
+
"chalk": "^4.1.2",
|
|
68
|
+
"cli-progress": "^3.12.0",
|
|
69
|
+
"cli-table3": "^0.6.3",
|
|
70
|
+
"commander": "^10.0.1",
|
|
71
|
+
"cors": "^2.8.5",
|
|
72
|
+
"csv-parse": "^5.3.8",
|
|
73
|
+
"csv-stringify": "^6.3.2",
|
|
74
|
+
"debounce": "^1.2.1",
|
|
75
|
+
"express": "^4.18.2",
|
|
76
|
+
"glob": "^10.2.6",
|
|
77
|
+
"js-yaml": "^4.1.0",
|
|
78
|
+
"node-fetch": "^2.6.7",
|
|
79
|
+
"nunjucks": "^3.2.4",
|
|
80
|
+
"opener": "^1.5.2",
|
|
81
|
+
"rouge": "^1.0.3",
|
|
82
|
+
"semver": "^7.5.1",
|
|
83
|
+
"socket.io": "^4.6.1",
|
|
84
|
+
"tiny-invariant": "^1.3.1",
|
|
85
|
+
"winston": "^3.8.2"
|
|
86
|
+
}
|
|
87
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"esm.d.ts","sourceRoot":"","sources":["../../../src/__mocks__/esm.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,WAE3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"esm.js","sourceRoot":"","sources":["../../../src/__mocks__/esm.ts"],"names":[],"mappings":";;;AAAA,SAAgB,YAAY;IAC1B,OAAO,WAAW,CAAC;AACrB,CAAC;AAFD,oCAEC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Assertion, GradingConfig, GradingResult, AtomicTestCase } from './types';
|
|
2
2
|
export declare function runAssertions(test: AtomicTestCase, output: string): Promise<GradingResult>;
|
|
3
3
|
export declare function runAssertion(assertion: Assertion, test: AtomicTestCase, output: string): Promise<GradingResult>;
|
|
4
|
-
export declare function matchesSimilarity(expected: string, output: string, threshold: number): Promise<GradingResult>;
|
|
4
|
+
export declare function matchesSimilarity(expected: string, output: string, threshold: number, inverse?: boolean): Promise<GradingResult>;
|
|
5
5
|
export declare function matchesLlmRubric(expected: string, output: string, options?: GradingConfig): Promise<GradingResult>;
|
|
6
6
|
export declare function assertionFromString(expected: string): Assertion;
|
|
7
7
|
declare const _default: {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertions.d.ts","sourceRoot":"","sources":["../../src/assertions.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,SAAS,EAET,aAAa,EACb,aAAa,EACb,cAAc,EACf,MAAM,SAAS,CAAC;AA4BjB,wBAAsB,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAyBhG;AAED,wBAAsB,YAAY,CAChC,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,aAAa,CAAC,CAiNxB;AAoBD,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC,aAAa,CAAC,CA6CxB;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,aAAa,CAAC,CAgDxB;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAwD/D;;;;;AAED,wBAGE"}
|
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.assertionFromString = exports.matchesLlmRubric = exports.matchesSimilarity = exports.runAssertion = exports.runAssertions = void 0;
|
|
7
|
+
const rouge_1 = __importDefault(require("rouge"));
|
|
8
|
+
const tiny_invariant_1 = __importDefault(require("tiny-invariant"));
|
|
9
|
+
const nunjucks_1 = __importDefault(require("nunjucks"));
|
|
10
|
+
const telemetry_1 = __importDefault(require("./telemetry"));
|
|
11
|
+
const openai_1 = require("./providers/openai");
|
|
12
|
+
const util_1 = require("./util");
|
|
13
|
+
const providers_1 = require("./providers");
|
|
14
|
+
const prompts_1 = require("./prompts");
|
|
15
|
+
const DEFAULT_SEMANTIC_SIMILARITY_THRESHOLD = 0.8;
|
|
16
|
+
function handleRougeScore(baseType, assertion, expected, output, inverted) {
|
|
17
|
+
const fnName = baseType[baseType.length - 1];
|
|
18
|
+
const rougeMethod = rouge_1.default[fnName];
|
|
19
|
+
const score = rougeMethod(output, expected);
|
|
20
|
+
const pass = score >= (assertion.threshold || 0.75) != inverted;
|
|
21
|
+
return {
|
|
22
|
+
pass,
|
|
23
|
+
reason: pass
|
|
24
|
+
? `${baseType.toUpperCase()} score ${score} is greater than or equal to threshold ${assertion.threshold || 0.75}`
|
|
25
|
+
: `${baseType.toUpperCase()} score ${score} is less than threshold ${assertion.threshold || 0.75}`,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
async function runAssertions(test, output) {
|
|
29
|
+
const tokensUsed = {
|
|
30
|
+
total: 0,
|
|
31
|
+
prompt: 0,
|
|
32
|
+
completion: 0,
|
|
33
|
+
};
|
|
34
|
+
if (!test.assert) {
|
|
35
|
+
return { pass: true, reason: 'No assertions', tokensUsed };
|
|
36
|
+
}
|
|
37
|
+
for (const assertion of test.assert) {
|
|
38
|
+
const result = await runAssertion(assertion, test, output);
|
|
39
|
+
if (!result.pass) {
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
if (result.tokensUsed) {
|
|
43
|
+
tokensUsed.total += result.tokensUsed.total;
|
|
44
|
+
tokensUsed.prompt += result.tokensUsed.prompt;
|
|
45
|
+
tokensUsed.completion += result.tokensUsed.completion;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return { pass: true, reason: 'All assertions passed', tokensUsed };
|
|
49
|
+
}
|
|
50
|
+
exports.runAssertions = runAssertions;
|
|
51
|
+
async function runAssertion(assertion, test, output) {
|
|
52
|
+
let pass = false;
|
|
53
|
+
(0, tiny_invariant_1.default)(assertion.type, `Assertion must have a type: ${JSON.stringify(assertion)}`);
|
|
54
|
+
const inverse = assertion.type.startsWith('not-');
|
|
55
|
+
const baseType = inverse ? assertion.type.slice(4) : assertion.type;
|
|
56
|
+
telemetry_1.default.record('assertion_used', {
|
|
57
|
+
type: baseType,
|
|
58
|
+
});
|
|
59
|
+
if (baseType === 'equals') {
|
|
60
|
+
pass = assertion.value === output;
|
|
61
|
+
return {
|
|
62
|
+
pass,
|
|
63
|
+
reason: pass ? 'Assertion passed' : `Expected output "${assertion.value}"`,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
if (baseType === 'is-json') {
|
|
67
|
+
try {
|
|
68
|
+
JSON.parse(output);
|
|
69
|
+
pass = !inverse;
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
pass = inverse;
|
|
73
|
+
}
|
|
74
|
+
return { pass, reason: pass ? 'Assertion passed' : 'Expected output to be valid JSON' };
|
|
75
|
+
}
|
|
76
|
+
if (baseType === 'contains') {
|
|
77
|
+
(0, tiny_invariant_1.default)(assertion.value, '"contains" assertion type must have a string value');
|
|
78
|
+
(0, tiny_invariant_1.default)(typeof assertion.value === 'string', '"contains" assertion type must have a string value');
|
|
79
|
+
pass = output.includes(assertion.value) !== inverse;
|
|
80
|
+
return {
|
|
81
|
+
pass,
|
|
82
|
+
reason: pass
|
|
83
|
+
? 'Assertion passed'
|
|
84
|
+
: `Expected output to ${inverse ? 'not ' : ''}contain "${assertion.value}"`,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
if (baseType === 'contains-any') {
|
|
88
|
+
(0, tiny_invariant_1.default)(assertion.value, '"contains-any" assertion type must have a value');
|
|
89
|
+
(0, tiny_invariant_1.default)(Array.isArray(assertion.value), '"contains-any" assertion type must have an array value');
|
|
90
|
+
pass = assertion.value.some((value) => output.includes(value)) !== inverse;
|
|
91
|
+
return {
|
|
92
|
+
pass,
|
|
93
|
+
reason: pass
|
|
94
|
+
? 'Assertion passed'
|
|
95
|
+
: `Expected output to ${inverse ? 'not ' : ''}contain one of "${assertion.value.join(', ')}"`,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
if (baseType === 'contains-all') {
|
|
99
|
+
(0, tiny_invariant_1.default)(assertion.value, '"contains-all" assertion type must have a value');
|
|
100
|
+
(0, tiny_invariant_1.default)(Array.isArray(assertion.value), '"contains-all" assertion type must have an array value');
|
|
101
|
+
pass = assertion.value.every((value) => output.includes(value)) !== inverse;
|
|
102
|
+
return {
|
|
103
|
+
pass,
|
|
104
|
+
reason: pass
|
|
105
|
+
? 'Assertion passed'
|
|
106
|
+
: `Expected output to ${inverse ? 'not ' : ''}contain all of "${assertion.value.join(', ')}"`,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
if (baseType === 'regex') {
|
|
110
|
+
(0, tiny_invariant_1.default)(assertion.value, '"regex" assertion type must have a string value');
|
|
111
|
+
(0, tiny_invariant_1.default)(typeof assertion.value === 'string', '"contains" assertion type must have a string value');
|
|
112
|
+
const regex = new RegExp(assertion.value);
|
|
113
|
+
pass = regex.test(output) !== inverse;
|
|
114
|
+
return {
|
|
115
|
+
pass,
|
|
116
|
+
reason: pass
|
|
117
|
+
? 'Assertion passed'
|
|
118
|
+
: `Expected output to ${inverse ? 'not ' : ''}match regex "${assertion.value}"`,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
if (baseType === 'icontains') {
|
|
122
|
+
(0, tiny_invariant_1.default)(assertion.value, '"icontains" assertion type must have a string value');
|
|
123
|
+
(0, tiny_invariant_1.default)(typeof assertion.value === 'string', '"icontains" assertion type must have a string value');
|
|
124
|
+
pass = output.toLowerCase().includes(assertion.value.toLowerCase()) !== inverse;
|
|
125
|
+
return {
|
|
126
|
+
pass,
|
|
127
|
+
reason: pass
|
|
128
|
+
? 'Assertion passed'
|
|
129
|
+
: `Expected output to ${inverse ? 'not ' : ''}contain "${assertion.value}"`,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
if (baseType === 'contains-json') {
|
|
133
|
+
pass = containsJSON(output) !== inverse;
|
|
134
|
+
return {
|
|
135
|
+
pass,
|
|
136
|
+
reason: pass
|
|
137
|
+
? 'Assertion passed'
|
|
138
|
+
: `Expected output to ${inverse ? 'not ' : ''}contain valid JSON`,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
if (baseType === 'javascript') {
|
|
142
|
+
try {
|
|
143
|
+
const customFunction = new Function('output', 'context', `return ${assertion.value}`);
|
|
144
|
+
const context = {
|
|
145
|
+
vars: test.vars || {},
|
|
146
|
+
};
|
|
147
|
+
pass = customFunction(output, context) !== inverse;
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
return {
|
|
151
|
+
pass: false,
|
|
152
|
+
reason: `Custom function threw error: ${err.message}
|
|
153
|
+
${assertion.value}`,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
return {
|
|
157
|
+
pass,
|
|
158
|
+
reason: pass
|
|
159
|
+
? 'Assertion passed'
|
|
160
|
+
: `Custom function returned ${inverse ? 'true' : 'false'}
|
|
161
|
+
${assertion.value}`,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
if (baseType === 'similar') {
|
|
165
|
+
(0, tiny_invariant_1.default)(assertion.value, 'Similarity assertion must have a string value');
|
|
166
|
+
(0, tiny_invariant_1.default)(typeof assertion.value === 'string', '"contains" assertion type must have a string value');
|
|
167
|
+
return matchesSimilarity(assertion.value, output, assertion.threshold || 0.75, inverse);
|
|
168
|
+
}
|
|
169
|
+
if (baseType === 'llm-rubric') {
|
|
170
|
+
(0, tiny_invariant_1.default)(assertion.value, 'Similarity assertion must have a string value');
|
|
171
|
+
(0, tiny_invariant_1.default)(typeof assertion.value === 'string', '"contains" assertion type must have a string value');
|
|
172
|
+
return matchesLlmRubric(assertion.value, output, test.options);
|
|
173
|
+
}
|
|
174
|
+
if (baseType === 'webhook') {
|
|
175
|
+
(0, tiny_invariant_1.default)(assertion.value, '"webhook" assertion type must have a URL value');
|
|
176
|
+
(0, tiny_invariant_1.default)(typeof assertion.value === 'string', '"webhook" assertion type must have a URL value');
|
|
177
|
+
try {
|
|
178
|
+
const context = {
|
|
179
|
+
vars: test.vars || {},
|
|
180
|
+
};
|
|
181
|
+
const response = await (0, util_1.fetchWithTimeout)(assertion.value, {
|
|
182
|
+
method: 'POST',
|
|
183
|
+
headers: {
|
|
184
|
+
'Content-Type': 'application/json',
|
|
185
|
+
},
|
|
186
|
+
body: JSON.stringify({ output, context }),
|
|
187
|
+
}, process.env.WEBHOOK_TIMEOUT ? parseInt(process.env.WEBHOOK_TIMEOUT, 10) : 5000);
|
|
188
|
+
if (!response.ok) {
|
|
189
|
+
throw new Error(`Webhook response status: ${response.status}`);
|
|
190
|
+
}
|
|
191
|
+
const jsonResponse = await response.json();
|
|
192
|
+
pass = jsonResponse.pass !== inverse;
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
return {
|
|
196
|
+
pass: false,
|
|
197
|
+
reason: `Webhook error: ${err.message}`,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
pass,
|
|
202
|
+
reason: pass ? 'Assertion passed' : `Webhook returned ${inverse ? 'true' : 'false'}`,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
if (baseType === 'rouge-n') {
|
|
206
|
+
(0, tiny_invariant_1.default)(assertion.value, '"rouge" assertion type must a value (string or string array)');
|
|
207
|
+
return handleRougeScore(baseType, assertion, assertion.value, output, inverse);
|
|
208
|
+
}
|
|
209
|
+
throw new Error('Unknown assertion type: ' + assertion.type);
|
|
210
|
+
}
|
|
211
|
+
exports.runAssertion = runAssertion;
|
|
212
|
+
function containsJSON(str) {
|
|
213
|
+
// Regular expression to check for JSON-like pattern
|
|
214
|
+
const jsonPattern = /({[\s\S]*}|\[[\s\S]*])/;
|
|
215
|
+
const match = str.match(jsonPattern);
|
|
216
|
+
if (!match) {
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
try {
|
|
220
|
+
JSON.parse(match[0]);
|
|
221
|
+
return true;
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
return false;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
async function matchesSimilarity(expected, output, threshold, inverse = false) {
|
|
228
|
+
const expectedEmbedding = await openai_1.DefaultEmbeddingProvider.callEmbeddingApi(expected);
|
|
229
|
+
const outputEmbedding = await openai_1.DefaultEmbeddingProvider.callEmbeddingApi(output);
|
|
230
|
+
const tokensUsed = {
|
|
231
|
+
total: (expectedEmbedding.tokenUsage?.total || 0) + (outputEmbedding.tokenUsage?.total || 0),
|
|
232
|
+
prompt: (expectedEmbedding.tokenUsage?.prompt || 0) + (outputEmbedding.tokenUsage?.prompt || 0),
|
|
233
|
+
completion: (expectedEmbedding.tokenUsage?.completion || 0) +
|
|
234
|
+
(outputEmbedding.tokenUsage?.completion || 0),
|
|
235
|
+
};
|
|
236
|
+
if (expectedEmbedding.error || outputEmbedding.error) {
|
|
237
|
+
return {
|
|
238
|
+
pass: false,
|
|
239
|
+
reason: expectedEmbedding.error || outputEmbedding.error || 'Unknown error fetching embeddings',
|
|
240
|
+
tokensUsed,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
if (!expectedEmbedding.embedding || !outputEmbedding.embedding) {
|
|
244
|
+
return {
|
|
245
|
+
pass: false,
|
|
246
|
+
reason: 'Embedding not found',
|
|
247
|
+
tokensUsed,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
const similarity = (0, util_1.cosineSimilarity)(expectedEmbedding.embedding, outputEmbedding.embedding);
|
|
251
|
+
const pass = inverse ? similarity <= threshold : similarity >= threshold;
|
|
252
|
+
const greaterThanReason = `Similarity ${similarity} is greater than threshold ${threshold}`;
|
|
253
|
+
const lessThanReason = `Similarity ${similarity} is less than threshold ${threshold}`;
|
|
254
|
+
if (pass) {
|
|
255
|
+
return {
|
|
256
|
+
pass: true,
|
|
257
|
+
reason: inverse ? lessThanReason : greaterThanReason,
|
|
258
|
+
tokensUsed,
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
return {
|
|
262
|
+
pass: false,
|
|
263
|
+
reason: inverse ? greaterThanReason : lessThanReason,
|
|
264
|
+
tokensUsed,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
exports.matchesSimilarity = matchesSimilarity;
|
|
268
|
+
async function matchesLlmRubric(expected, output, options) {
|
|
269
|
+
if (!options) {
|
|
270
|
+
throw new Error('Cannot grade output without grading config. Specify --grader option or grading config.');
|
|
271
|
+
}
|
|
272
|
+
const prompt = nunjucks_1.default.renderString(options.rubricPrompt || prompts_1.DEFAULT_GRADING_PROMPT, {
|
|
273
|
+
content: output,
|
|
274
|
+
rubric: expected,
|
|
275
|
+
});
|
|
276
|
+
let provider = options.provider || openai_1.DefaultGradingProvider;
|
|
277
|
+
if (typeof provider === 'string') {
|
|
278
|
+
provider = await (0, providers_1.loadApiProvider)(provider);
|
|
279
|
+
}
|
|
280
|
+
const resp = await provider.callApi(prompt);
|
|
281
|
+
if (resp.error || !resp.output) {
|
|
282
|
+
return {
|
|
283
|
+
pass: false,
|
|
284
|
+
reason: resp.error || 'No output',
|
|
285
|
+
tokensUsed: {
|
|
286
|
+
total: resp.tokenUsage?.total || 0,
|
|
287
|
+
prompt: resp.tokenUsage?.prompt || 0,
|
|
288
|
+
completion: resp.tokenUsage?.completion || 0,
|
|
289
|
+
},
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
try {
|
|
293
|
+
const parsed = JSON.parse(resp.output);
|
|
294
|
+
parsed.tokensUsed = {
|
|
295
|
+
total: resp.tokenUsage?.total || 0,
|
|
296
|
+
prompt: resp.tokenUsage?.prompt || 0,
|
|
297
|
+
completion: resp.tokenUsage?.completion || 0,
|
|
298
|
+
};
|
|
299
|
+
return parsed;
|
|
300
|
+
}
|
|
301
|
+
catch (err) {
|
|
302
|
+
return {
|
|
303
|
+
pass: false,
|
|
304
|
+
reason: `Output is not valid JSON: ${resp.output}`,
|
|
305
|
+
tokensUsed: {
|
|
306
|
+
total: resp.tokenUsage?.total || 0,
|
|
307
|
+
prompt: resp.tokenUsage?.prompt || 0,
|
|
308
|
+
completion: resp.tokenUsage?.completion || 0,
|
|
309
|
+
},
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
exports.matchesLlmRubric = matchesLlmRubric;
|
|
314
|
+
function assertionFromString(expected) {
|
|
315
|
+
// Legacy options
|
|
316
|
+
if (expected.startsWith('fn:') || expected.startsWith('eval:')) {
|
|
317
|
+
// TODO(1.0): delete eval: legacy option
|
|
318
|
+
const sliceLength = expected.startsWith('fn:') ? 'fn:'.length : 'eval:'.length;
|
|
319
|
+
const functionBody = expected.slice(sliceLength);
|
|
320
|
+
return {
|
|
321
|
+
type: 'javascript',
|
|
322
|
+
value: functionBody,
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
if (expected.startsWith('grade:')) {
|
|
326
|
+
return {
|
|
327
|
+
type: 'llm-rubric',
|
|
328
|
+
value: expected.slice(6),
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
// New options
|
|
332
|
+
const assertionRegex = /^(not-)?(equals|contains-any|contains-all|contains-json|is-json|regex|icontains|contains|webhook|rouge-n|similar)(?::|\((\d+(\.\d+)?)\):)?(.*)$/;
|
|
333
|
+
const regexMatch = expected.match(assertionRegex);
|
|
334
|
+
if (regexMatch) {
|
|
335
|
+
const [_, notPrefix, type, __, thresholdStr, value] = regexMatch;
|
|
336
|
+
const fullType = notPrefix ? `not-${type}` : type;
|
|
337
|
+
const threshold = parseFloat(thresholdStr);
|
|
338
|
+
if (type === 'contains-any' || type === 'contains-all') {
|
|
339
|
+
return {
|
|
340
|
+
type: fullType,
|
|
341
|
+
value: value.split(',').map((s) => s.trim()),
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
else if (type === 'contains-json' || type === 'is-json') {
|
|
345
|
+
return {
|
|
346
|
+
type: fullType,
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
else if (type === 'rouge-n' || type === 'similar') {
|
|
350
|
+
return {
|
|
351
|
+
type: fullType,
|
|
352
|
+
value,
|
|
353
|
+
threshold: threshold || (type === 'similar' ? DEFAULT_SEMANTIC_SIMILARITY_THRESHOLD : 0.75),
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
else {
|
|
357
|
+
return {
|
|
358
|
+
type: fullType,
|
|
359
|
+
value,
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
// Default to equality
|
|
364
|
+
return {
|
|
365
|
+
type: 'equals',
|
|
366
|
+
value: expected,
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
exports.assertionFromString = assertionFromString;
|
|
370
|
+
exports.default = {
|
|
371
|
+
matchesSimilarity,
|
|
372
|
+
matchesLlmRubric,
|
|
373
|
+
};
|
|
374
|
+
//# sourceMappingURL=assertions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertions.js","sourceRoot":"","sources":["../../src/assertions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/cache.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAkC3D,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,WAAW,EAChB,OAAO,yBAAkB,EACzB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CAyCzC;AAED,wBAAgB,WAAW,SAE1B;AAED,wBAAgB,YAAY,SAG3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"esm.d.ts","sourceRoot":"","sources":["../../src/esm.ts"],"names":[],"mappings":"AAKA,wBAAgB,YAAY,IAAI,MAAM,CAOrC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"esm.js","sourceRoot":"","sources":["../../src/esm.ts"],"names":[],"mappings":";AAAA,0DAA0D;;;AAE1D,0BAA0B;AAC1B,sCAAsC;AAEtC,SAAgB,YAAY;IAC1B;;;;KAIC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAPD,oCAOC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../src/evaluator.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAEV,eAAe,EAGf,eAAe,EAEf,SAAS,EAIV,MAAM,SAAS,CAAC;AA8VjB,wBAAgB,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,4BAGtE"}
|