jest-fuzzy 0.1.0 → 0.1.2
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 +69 -46
- package/dist/cjs/config.d.ts +5 -2
- package/dist/cjs/config.d.ts.map +1 -1
- package/dist/cjs/config.js +4 -1
- package/dist/cjs/config.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/providers/anthropic.d.ts +2 -2
- package/dist/cjs/providers/anthropic.d.ts.map +1 -1
- package/dist/cjs/providers/anthropic.js +45 -73
- package/dist/cjs/providers/anthropic.js.map +1 -1
- package/dist/cjs/providers/google.d.ts +2 -2
- package/dist/cjs/providers/google.d.ts.map +1 -1
- package/dist/cjs/providers/google.js +50 -75
- package/dist/cjs/providers/google.js.map +1 -1
- package/dist/cjs/providers/index.d.ts +2 -2
- package/dist/cjs/providers/index.d.ts.map +1 -1
- package/dist/cjs/providers/index.js +4 -4
- package/dist/cjs/providers/index.js.map +1 -1
- package/dist/cjs/providers/openai.d.ts +2 -2
- package/dist/cjs/providers/openai.d.ts.map +1 -1
- package/dist/cjs/providers/openai.js +33 -62
- package/dist/cjs/providers/openai.js.map +1 -1
- package/dist/cjs/types.d.ts +6 -0
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/esm/config.d.ts +5 -2
- package/dist/esm/config.d.ts.map +1 -1
- package/dist/esm/config.js +4 -1
- package/dist/esm/config.js.map +1 -1
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/providers/anthropic.d.ts +2 -2
- package/dist/esm/providers/anthropic.d.ts.map +1 -1
- package/dist/esm/providers/anthropic.js +45 -40
- package/dist/esm/providers/anthropic.js.map +1 -1
- package/dist/esm/providers/google.d.ts +2 -2
- package/dist/esm/providers/google.d.ts.map +1 -1
- package/dist/esm/providers/google.js +50 -42
- package/dist/esm/providers/google.js.map +1 -1
- package/dist/esm/providers/index.d.ts +2 -2
- package/dist/esm/providers/index.d.ts.map +1 -1
- package/dist/esm/providers/index.js +4 -4
- package/dist/esm/providers/index.js.map +1 -1
- package/dist/esm/providers/openai.d.ts +2 -2
- package/dist/esm/providers/openai.d.ts.map +1 -1
- package/dist/esm/providers/openai.js +33 -29
- package/dist/esm/providers/openai.js.map +1 -1
- package/dist/esm/types.d.ts +6 -0
- package/dist/esm/types.d.ts.map +1 -1
- package/package.json +1 -20
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { LLMProvider, JudgmentResult } from "../types.js";
|
|
2
2
|
export declare class OpenAIProvider implements LLMProvider {
|
|
3
|
-
private
|
|
3
|
+
private apiKey;
|
|
4
4
|
private constructor();
|
|
5
|
-
static create(): Promise<OpenAIProvider>;
|
|
5
|
+
static create(apiKey?: string): Promise<OpenAIProvider>;
|
|
6
6
|
judge(prompt: string): Promise<JudgmentResult>;
|
|
7
7
|
}
|
|
8
8
|
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAoB/D,qBAAa,cAAe,YAAW,WAAW;IAChD,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO;WAIM,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAWvD,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;CAuCrD"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const OPENAI_API_URL = "https://api.openai.com/v1/responses";
|
|
1
2
|
const JUDGMENT_SCHEMA = {
|
|
2
3
|
type: "object",
|
|
3
4
|
properties: {
|
|
@@ -14,47 +15,50 @@ const JUDGMENT_SCHEMA = {
|
|
|
14
15
|
additionalProperties: false,
|
|
15
16
|
};
|
|
16
17
|
export class OpenAIProvider {
|
|
17
|
-
|
|
18
|
-
constructor(
|
|
19
|
-
this.
|
|
18
|
+
apiKey;
|
|
19
|
+
constructor(apiKey) {
|
|
20
|
+
this.apiKey = apiKey;
|
|
20
21
|
}
|
|
21
|
-
static async create() {
|
|
22
|
-
const
|
|
23
|
-
if (!
|
|
24
|
-
throw new Error("jest-fuzzy: Missing
|
|
25
|
-
|
|
26
|
-
try {
|
|
27
|
-
const module = await import("openai");
|
|
28
|
-
const OpenAI = module.default;
|
|
29
|
-
const client = new OpenAI({ apiKey });
|
|
30
|
-
return new OpenAIProvider(client);
|
|
31
|
-
}
|
|
32
|
-
catch (e) {
|
|
33
|
-
throw new Error("jest-fuzzy: To use gpt-5-nano, install openai");
|
|
22
|
+
static async create(apiKey) {
|
|
23
|
+
const key = apiKey ?? process.env.OPENAI_API_KEY;
|
|
24
|
+
if (!key) {
|
|
25
|
+
throw new Error("jest-fuzzy: Missing API key for gpt-5-nano model. " +
|
|
26
|
+
"Either pass it via configure({ apiKeys: { openai: '...' } }) or set OPENAI_API_KEY environment variable.");
|
|
34
27
|
}
|
|
28
|
+
return new OpenAIProvider(key);
|
|
35
29
|
}
|
|
36
30
|
async judge(prompt) {
|
|
37
|
-
|
|
38
|
-
|
|
31
|
+
const response = await fetch(OPENAI_API_URL, {
|
|
32
|
+
method: "POST",
|
|
33
|
+
headers: {
|
|
34
|
+
"Content-Type": "application/json",
|
|
35
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
36
|
+
},
|
|
37
|
+
body: JSON.stringify({
|
|
39
38
|
model: "gpt-4o-mini",
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
39
|
+
max_output_tokens: 1024,
|
|
40
|
+
input: [{ role: "user", content: prompt }],
|
|
41
|
+
text: {
|
|
42
|
+
format: {
|
|
43
|
+
type: "json_schema",
|
|
45
44
|
name: "judgment",
|
|
46
45
|
strict: true,
|
|
47
46
|
schema: JUDGMENT_SCHEMA,
|
|
48
47
|
},
|
|
49
48
|
},
|
|
50
|
-
})
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
49
|
+
}),
|
|
50
|
+
});
|
|
51
|
+
if (!response.ok) {
|
|
52
|
+
const errorText = await response.text();
|
|
53
|
+
throw new Error(`jest-fuzzy: OpenAI API error (${response.status}): ${errorText}`);
|
|
54
54
|
}
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
const data = (await response.json());
|
|
56
|
+
const text = data.output?.[0]?.content?.[0]?.text;
|
|
57
|
+
if (!text) {
|
|
58
|
+
throw new Error("jest-fuzzy: OpenAI API returned no content");
|
|
57
59
|
}
|
|
60
|
+
const parsed = JSON.parse(text);
|
|
61
|
+
return { verdict: parsed.verdict, explanation: parsed.explanation };
|
|
58
62
|
}
|
|
59
63
|
}
|
|
60
64
|
//# sourceMappingURL=openai.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/providers/openai.ts"],"names":[],"mappings":"AAEA,MAAM,eAAe,GAAG;IACtB,IAAI,EAAE,QAAiB;IACvB,UAAU,EAAE;QACV,OAAO,EAAE;YACP,IAAI,EAAE,SAAkB;YACxB,WAAW,EAAE,qDAAqD;SACnE;QACD,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,WAAW,EAAE,oCAAoC;SAClD;KACF;IACD,QAAQ,EAAE,CAAC,SAAS,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/providers/openai.ts"],"names":[],"mappings":"AAEA,MAAM,cAAc,GAAG,qCAAqC,CAAC;AAE7D,MAAM,eAAe,GAAG;IACtB,IAAI,EAAE,QAAiB;IACvB,UAAU,EAAE;QACV,OAAO,EAAE;YACP,IAAI,EAAE,SAAkB;YACxB,WAAW,EAAE,qDAAqD;SACnE;QACD,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,WAAW,EAAE,oCAAoC;SAClD;KACF;IACD,QAAQ,EAAE,CAAC,SAAS,EAAE,aAAa,CAAU;IAC7C,oBAAoB,EAAE,KAAK;CAC5B,CAAC;AAEF,MAAM,OAAO,cAAc;IACjB,MAAM,CAAS;IAEvB,YAAoB,MAAc;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAe;QACjC,MAAM,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QACjD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CACb,oDAAoD;gBAClD,0GAA0G,CAC7G,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAc;QACxB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,cAAc,EAAE;YAC3C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;aACvC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK,EAAE,aAAa;gBACpB,iBAAiB,EAAE,IAAI;gBACvB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;gBAC1C,IAAI,EAAE;oBACJ,MAAM,EAAE;wBACN,IAAI,EAAE,aAAa;wBACnB,IAAI,EAAE,UAAU;wBAChB,MAAM,EAAE,IAAI;wBACZ,MAAM,EAAE,eAAe;qBACxB;iBACF;aACF,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,iCAAiC,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;QACrF,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAElC,CAAC;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;QAElD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA8C,CAAC;QAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;IACtE,CAAC;CACF"}
|
package/dist/esm/types.d.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
export type ModelName = "claude-haiku-4-5" | "gemini-3-flash-preview" | "gpt-5-nano";
|
|
2
|
+
export interface ApiKeys {
|
|
3
|
+
anthropic?: string;
|
|
4
|
+
google?: string;
|
|
5
|
+
openai?: string;
|
|
6
|
+
}
|
|
2
7
|
export interface JestFuzzyConfig {
|
|
3
8
|
model?: ModelName;
|
|
9
|
+
apiKeys?: ApiKeys;
|
|
4
10
|
}
|
|
5
11
|
export interface SemanticMatchOptions {
|
|
6
12
|
threshold?: "strict" | "loose";
|
package/dist/esm/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GACjB,kBAAkB,GAClB,wBAAwB,GACxB,YAAY,CAAC;AAEjB,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,MAAM,CAAC;CACvB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,IAAI,CAAC;QACb,UAAU,QAAQ,CAAC,CAAC;YAClB,mBAAmB,CACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,CAAC,CAAC,CAAC;YACd,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;SACzC;KACF;CACF"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GACjB,kBAAkB,GAClB,wBAAwB,GACxB,YAAY,CAAC;AAEjB,MAAM,WAAW,OAAO;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,MAAM,CAAC;CACvB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,IAAI,CAAC;QACb,UAAU,QAAQ,CAAC,CAAC;YAClB,mBAAmB,CACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,CAAC,CAAC,CAAC;YACd,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;SACzC;KACF;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jest-fuzzy",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "LLM-powered fuzzy matchers for Jest",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -37,30 +37,11 @@
|
|
|
37
37
|
],
|
|
38
38
|
"license": "MIT",
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@anthropic-ai/sdk": "^0.39.0",
|
|
41
|
-
"@google/generative-ai": "^0.21.0",
|
|
42
40
|
"@types/jest": "^29.5.14",
|
|
43
41
|
"@types/node": "^22.10.5",
|
|
44
42
|
"dotenv": "^16.4.7",
|
|
45
43
|
"jest": "^29.7.0",
|
|
46
|
-
"openai": "^4.77.3",
|
|
47
44
|
"ts-jest": "^29.2.5",
|
|
48
45
|
"typescript": "^5.7.2"
|
|
49
|
-
},
|
|
50
|
-
"peerDependencies": {
|
|
51
|
-
"@anthropic-ai/sdk": ">=0.24.0",
|
|
52
|
-
"@google/generative-ai": ">=0.10.0",
|
|
53
|
-
"openai": ">=4.0.0"
|
|
54
|
-
},
|
|
55
|
-
"peerDependenciesMeta": {
|
|
56
|
-
"@anthropic-ai/sdk": {
|
|
57
|
-
"optional": true
|
|
58
|
-
},
|
|
59
|
-
"@google/generative-ai": {
|
|
60
|
-
"optional": true
|
|
61
|
-
},
|
|
62
|
-
"openai": {
|
|
63
|
-
"optional": true
|
|
64
|
-
}
|
|
65
46
|
}
|
|
66
47
|
}
|