promptfoo 0.18.0 → 0.18.1
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 +5 -5
- package/dist/package.json +1 -1
- package/dist/src/providers/llama.d.ts +30 -0
- package/dist/src/providers/llama.d.ts.map +1 -0
- package/dist/src/providers/llama.js +67 -0
- package/dist/src/providers/llama.js.map +1 -0
- package/dist/src/providers.d.ts.map +1 -1
- package/dist/src/providers.js +6 -1
- package/dist/src/providers.js.map +1 -1
- package/dist/src/util.js +1 -1
- package/package.json +1 -1
- package/src/providers/llama.ts +95 -0
- package/src/providers.ts +5 -1
- package/src/util.ts +1 -1
- package/src/web/client/package-lock.json +0 -5726
package/README.md
CHANGED
|
@@ -4,15 +4,15 @@
|
|
|
4
4
|
[](https://github.com/typpo/promptfoo/actions/workflows/main.yml)
|
|
5
5
|

|
|
6
6
|
|
|
7
|
-
`promptfoo` is a tool for testing and evaluating LLM
|
|
7
|
+
`promptfoo` is a tool for testing and evaluating LLM output quality.
|
|
8
8
|
|
|
9
9
|
With promptfoo, you can:
|
|
10
10
|
|
|
11
|
-
- **Systematically test prompts** against predefined test cases
|
|
11
|
+
- **Systematically test prompts & models** against predefined test cases
|
|
12
12
|
- **Evaluate quality and catch regressions** by comparing LLM outputs side-by-side
|
|
13
|
-
- **Speed up evaluations** with caching and
|
|
14
|
-
- **Score outputs automatically** by defining
|
|
15
|
-
- Use as a CLI, or
|
|
13
|
+
- **Speed up evaluations** with caching and concurrency
|
|
14
|
+
- **Score outputs automatically** by defining test cases
|
|
15
|
+
- Use as a CLI, library, or in CI/CD
|
|
16
16
|
- Use OpenAI, Anthropic, open-source models like Llama and Vicuna, or integrate custom API providers for any LLM API
|
|
17
17
|
|
|
18
18
|
The goal: **test-driven prompt engineering**, rather than trial-and-error.
|
package/dist/package.json
CHANGED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ApiProvider, ProviderResponse } from '../types.js';
|
|
2
|
+
interface LlamaCompletionOptions {
|
|
3
|
+
n_predict?: number;
|
|
4
|
+
temperature?: number;
|
|
5
|
+
top_k?: number;
|
|
6
|
+
top_p?: number;
|
|
7
|
+
n_keep?: number;
|
|
8
|
+
stop?: string[];
|
|
9
|
+
repeat_penalty?: number;
|
|
10
|
+
repeat_last_n?: number;
|
|
11
|
+
penalize_nl?: boolean;
|
|
12
|
+
presence_penalty?: number;
|
|
13
|
+
frequency_penalty?: number;
|
|
14
|
+
mirostat?: boolean;
|
|
15
|
+
mirostat_tau?: number;
|
|
16
|
+
mirostat_eta?: number;
|
|
17
|
+
seed?: number;
|
|
18
|
+
ignore_eos?: boolean;
|
|
19
|
+
logit_bias?: Record<string, number>;
|
|
20
|
+
}
|
|
21
|
+
export declare class LlamaProvider implements ApiProvider {
|
|
22
|
+
modelName: string;
|
|
23
|
+
options?: LlamaCompletionOptions;
|
|
24
|
+
constructor(modelName: string, options?: LlamaCompletionOptions);
|
|
25
|
+
id(): string;
|
|
26
|
+
toString(): string;
|
|
27
|
+
callApi(prompt: string, options?: LlamaCompletionOptions): Promise<ProviderResponse>;
|
|
28
|
+
}
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=llama.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llama.d.ts","sourceRoot":"","sources":["../../../src/providers/llama.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEjE,UAAU,sBAAsB;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,qBAAa,aAAc,YAAW,WAAW;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,sBAAsB,CAAC;gBAErB,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,sBAAsB;IAK/D,EAAE,IAAI,MAAM;IAIZ,QAAQ,IAAI,MAAM;IAIZ,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAoD3F"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LlamaProvider = void 0;
|
|
4
|
+
const cache_1 = require("../cache");
|
|
5
|
+
const shared_1 = require("./shared");
|
|
6
|
+
class LlamaProvider {
|
|
7
|
+
constructor(modelName, options) {
|
|
8
|
+
this.modelName = modelName;
|
|
9
|
+
this.options = options;
|
|
10
|
+
}
|
|
11
|
+
id() {
|
|
12
|
+
return `llama:${this.modelName}`;
|
|
13
|
+
}
|
|
14
|
+
toString() {
|
|
15
|
+
return `[Llama Provider ${this.modelName}]`;
|
|
16
|
+
}
|
|
17
|
+
async callApi(prompt, options) {
|
|
18
|
+
options = Object.assign({}, this.options, options);
|
|
19
|
+
const body = {
|
|
20
|
+
prompt,
|
|
21
|
+
n_predict: options?.n_predict || 512,
|
|
22
|
+
temperature: options?.temperature,
|
|
23
|
+
top_k: options?.top_k,
|
|
24
|
+
top_p: options?.top_p,
|
|
25
|
+
n_keep: options?.n_keep,
|
|
26
|
+
stop: options?.stop,
|
|
27
|
+
repeat_penalty: options?.repeat_penalty,
|
|
28
|
+
repeat_last_n: options?.repeat_last_n,
|
|
29
|
+
penalize_nl: options?.penalize_nl,
|
|
30
|
+
presence_penalty: options?.presence_penalty,
|
|
31
|
+
frequency_penalty: options?.frequency_penalty,
|
|
32
|
+
mirostat: options?.mirostat,
|
|
33
|
+
mirostat_tau: options?.mirostat_tau,
|
|
34
|
+
mirostat_eta: options?.mirostat_eta,
|
|
35
|
+
seed: options?.seed,
|
|
36
|
+
ignore_eos: options?.ignore_eos,
|
|
37
|
+
logit_bias: options?.logit_bias,
|
|
38
|
+
};
|
|
39
|
+
let response;
|
|
40
|
+
try {
|
|
41
|
+
response = await (0, cache_1.fetchJsonWithCache)(`${process.env.LLAMA_BASE_URL || 'http://localhost:8080'}/completion`, {
|
|
42
|
+
method: 'POST',
|
|
43
|
+
headers: {
|
|
44
|
+
'Content-Type': 'application/json',
|
|
45
|
+
},
|
|
46
|
+
body: JSON.stringify(body),
|
|
47
|
+
}, shared_1.REQUEST_TIMEOUT_MS);
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
return {
|
|
51
|
+
error: `API call error: ${String(err)}`,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
return {
|
|
56
|
+
output: response.data.content,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
return {
|
|
61
|
+
error: `API response error: ${String(err)}: ${JSON.stringify(response.data)}`,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.LlamaProvider = LlamaProvider;
|
|
67
|
+
//# sourceMappingURL=llama.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llama.js","sourceRoot":"","sources":["../../../src/providers/llama.ts"],"names":[],"mappings":";;;AAAA,oCAA8C;AAC9C,qCAA8C;AAwB9C,MAAa,aAAa;IAIxB,YAAY,SAAiB,EAAE,OAAgC;QAC7D,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,EAAE;QACA,OAAO,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;IACnC,CAAC;IAED,QAAQ;QACN,OAAO,mBAAmB,IAAI,CAAC,SAAS,GAAG,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,OAAgC;QAC5D,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG;YACX,MAAM;YACN,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,GAAG;YACpC,WAAW,EAAE,OAAO,EAAE,WAAW;YACjC,KAAK,EAAE,OAAO,EAAE,KAAK;YACrB,KAAK,EAAE,OAAO,EAAE,KAAK;YACrB,MAAM,EAAE,OAAO,EAAE,MAAM;YACvB,IAAI,EAAE,OAAO,EAAE,IAAI;YACnB,cAAc,EAAE,OAAO,EAAE,cAAc;YACvC,aAAa,EAAE,OAAO,EAAE,aAAa;YACrC,WAAW,EAAE,OAAO,EAAE,WAAW;YACjC,gBAAgB,EAAE,OAAO,EAAE,gBAAgB;YAC3C,iBAAiB,EAAE,OAAO,EAAE,iBAAiB;YAC7C,QAAQ,EAAE,OAAO,EAAE,QAAQ;YAC3B,YAAY,EAAE,OAAO,EAAE,YAAY;YACnC,YAAY,EAAE,OAAO,EAAE,YAAY;YACnC,IAAI,EAAE,OAAO,EAAE,IAAI;YACnB,UAAU,EAAE,OAAO,EAAE,UAAU;YAC/B,UAAU,EAAE,OAAO,EAAE,UAAU;SAChC,CAAC;QAEF,IAAI,QAAQ,CAAC;QACb,IAAI;YACF,QAAQ,GAAG,MAAM,IAAA,0BAAkB,EACjC,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,uBAAuB,aAAa,EACrE;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aAC3B,EACD,2BAAkB,CACnB,CAAC;SACH;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO;gBACL,KAAK,EAAE,mBAAmB,MAAM,CAAC,GAAG,CAAC,EAAE;aACxC,CAAC;SACH;QAED,IAAI;YACF,OAAO;gBACL,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO;aAC9B,CAAC;SACH;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO;gBACL,KAAK,EAAE,uBAAuB,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;aAC9E,CAAC;SACH;IACH,CAAC;CACF;AArED,sCAqEC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/providers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/providers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAQrF,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,UAAU,GAAG,UAAU,EAAE,GAAG,iBAAiB,EAAE,GAAG,gBAAgB,EACjF,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,EAAE,CAAC,CA6BxB;AAED,wBAAsB,eAAe,CACnC,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,cAAc,EACxB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,CAAC,CAiGtB;;;;;;;;;;AAED,wBAQE"}
|
package/dist/src/providers.js
CHANGED
|
@@ -32,6 +32,7 @@ const openai_1 = require("./providers/openai");
|
|
|
32
32
|
const anthropic_1 = require("./providers/anthropic");
|
|
33
33
|
const replicate_1 = require("./providers/replicate");
|
|
34
34
|
const localai_1 = require("./providers/localai");
|
|
35
|
+
const llama_1 = require("./providers/llama");
|
|
35
36
|
const scriptCompletion_1 = require("./providers/scriptCompletion");
|
|
36
37
|
const azureopenai_1 = require("./providers/azureopenai");
|
|
37
38
|
async function loadApiProviders(providerPaths, basePath) {
|
|
@@ -133,7 +134,11 @@ async function loadApiProvider(providerPath, context, basePath) {
|
|
|
133
134
|
const modelName = options.slice(1).join(':');
|
|
134
135
|
return new replicate_1.ReplicateProvider(modelName, undefined, context?.config);
|
|
135
136
|
}
|
|
136
|
-
if (providerPath
|
|
137
|
+
if (providerPath === 'llama' || providerPath.startsWith('llama:')) {
|
|
138
|
+
const modelName = providerPath.split(':')[1];
|
|
139
|
+
return new llama_1.LlamaProvider(modelName, context?.config);
|
|
140
|
+
}
|
|
141
|
+
else if (providerPath?.startsWith('localai:')) {
|
|
137
142
|
const options = providerPath.split(':');
|
|
138
143
|
const modelType = options[1];
|
|
139
144
|
const modelName = options[2];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/providers.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/providers.ts"],"names":[],"mappings":"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"}
|
package/dist/src/util.js
CHANGED
|
@@ -409,7 +409,7 @@ function writeLatestResults(results, config) {
|
|
|
409
409
|
config,
|
|
410
410
|
results,
|
|
411
411
|
}, null, 2));
|
|
412
|
-
if (fs.existsSync(latestResultsPath)
|
|
412
|
+
if (fs.existsSync(latestResultsPath) && fs.lstatSync(latestResultsPath).isSymbolicLink()) {
|
|
413
413
|
fs.unlinkSync(latestResultsPath);
|
|
414
414
|
}
|
|
415
415
|
fs.symlinkSync(newResultsPath, latestResultsPath);
|
package/package.json
CHANGED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { fetchJsonWithCache } from '../cache';
|
|
2
|
+
import { REQUEST_TIMEOUT_MS } from './shared';
|
|
3
|
+
|
|
4
|
+
import type { ApiProvider, ProviderResponse } from '../types.js';
|
|
5
|
+
|
|
6
|
+
interface LlamaCompletionOptions {
|
|
7
|
+
n_predict?: number;
|
|
8
|
+
temperature?: number;
|
|
9
|
+
top_k?: number;
|
|
10
|
+
top_p?: number;
|
|
11
|
+
n_keep?: number;
|
|
12
|
+
stop?: string[];
|
|
13
|
+
repeat_penalty?: number;
|
|
14
|
+
repeat_last_n?: number;
|
|
15
|
+
penalize_nl?: boolean;
|
|
16
|
+
presence_penalty?: number;
|
|
17
|
+
frequency_penalty?: number;
|
|
18
|
+
mirostat?: boolean;
|
|
19
|
+
mirostat_tau?: number;
|
|
20
|
+
mirostat_eta?: number;
|
|
21
|
+
seed?: number;
|
|
22
|
+
ignore_eos?: boolean;
|
|
23
|
+
logit_bias?: Record<string, number>;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export class LlamaProvider implements ApiProvider {
|
|
27
|
+
modelName: string;
|
|
28
|
+
options?: LlamaCompletionOptions;
|
|
29
|
+
|
|
30
|
+
constructor(modelName: string, options?: LlamaCompletionOptions) {
|
|
31
|
+
this.modelName = modelName;
|
|
32
|
+
this.options = options;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
id(): string {
|
|
36
|
+
return `llama:${this.modelName}`;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
toString(): string {
|
|
40
|
+
return `[Llama Provider ${this.modelName}]`;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async callApi(prompt: string, options?: LlamaCompletionOptions): Promise<ProviderResponse> {
|
|
44
|
+
options = Object.assign({}, this.options, options);
|
|
45
|
+
const body = {
|
|
46
|
+
prompt,
|
|
47
|
+
n_predict: options?.n_predict || 512,
|
|
48
|
+
temperature: options?.temperature,
|
|
49
|
+
top_k: options?.top_k,
|
|
50
|
+
top_p: options?.top_p,
|
|
51
|
+
n_keep: options?.n_keep,
|
|
52
|
+
stop: options?.stop,
|
|
53
|
+
repeat_penalty: options?.repeat_penalty,
|
|
54
|
+
repeat_last_n: options?.repeat_last_n,
|
|
55
|
+
penalize_nl: options?.penalize_nl,
|
|
56
|
+
presence_penalty: options?.presence_penalty,
|
|
57
|
+
frequency_penalty: options?.frequency_penalty,
|
|
58
|
+
mirostat: options?.mirostat,
|
|
59
|
+
mirostat_tau: options?.mirostat_tau,
|
|
60
|
+
mirostat_eta: options?.mirostat_eta,
|
|
61
|
+
seed: options?.seed,
|
|
62
|
+
ignore_eos: options?.ignore_eos,
|
|
63
|
+
logit_bias: options?.logit_bias,
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
let response;
|
|
67
|
+
try {
|
|
68
|
+
response = await fetchJsonWithCache(
|
|
69
|
+
`${process.env.LLAMA_BASE_URL || 'http://localhost:8080'}/completion`,
|
|
70
|
+
{
|
|
71
|
+
method: 'POST',
|
|
72
|
+
headers: {
|
|
73
|
+
'Content-Type': 'application/json',
|
|
74
|
+
},
|
|
75
|
+
body: JSON.stringify(body),
|
|
76
|
+
},
|
|
77
|
+
REQUEST_TIMEOUT_MS,
|
|
78
|
+
);
|
|
79
|
+
} catch (err) {
|
|
80
|
+
return {
|
|
81
|
+
error: `API call error: ${String(err)}`,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
try {
|
|
86
|
+
return {
|
|
87
|
+
output: response.data.content,
|
|
88
|
+
};
|
|
89
|
+
} catch (err) {
|
|
90
|
+
return {
|
|
91
|
+
error: `API response error: ${String(err)}: ${JSON.stringify(response.data)}`,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
package/src/providers.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { OpenAiCompletionProvider, OpenAiChatCompletionProvider } from './provid
|
|
|
4
4
|
import { AnthropicCompletionProvider } from './providers/anthropic';
|
|
5
5
|
import { ReplicateProvider } from './providers/replicate';
|
|
6
6
|
import { LocalAiCompletionProvider, LocalAiChatProvider } from './providers/localai';
|
|
7
|
+
import { LlamaProvider } from './providers/llama';
|
|
7
8
|
import { ScriptCompletionProvider } from './providers/scriptCompletion';
|
|
8
9
|
import {
|
|
9
10
|
AzureOpenAiChatCompletionProvider,
|
|
@@ -133,7 +134,10 @@ export async function loadApiProvider(
|
|
|
133
134
|
return new ReplicateProvider(modelName, undefined, context?.config);
|
|
134
135
|
}
|
|
135
136
|
|
|
136
|
-
if (providerPath
|
|
137
|
+
if (providerPath === 'llama' || providerPath.startsWith('llama:')) {
|
|
138
|
+
const modelName = providerPath.split(':')[1];
|
|
139
|
+
return new LlamaProvider(modelName, context?.config);
|
|
140
|
+
} else if (providerPath?.startsWith('localai:')) {
|
|
137
141
|
const options = providerPath.split(':');
|
|
138
142
|
const modelType = options[1];
|
|
139
143
|
const modelName = options[2];
|
package/src/util.ts
CHANGED
|
@@ -456,7 +456,7 @@ export function writeLatestResults(results: EvaluateSummary, config: Partial<Uni
|
|
|
456
456
|
2,
|
|
457
457
|
),
|
|
458
458
|
);
|
|
459
|
-
if (fs.existsSync(latestResultsPath)
|
|
459
|
+
if (fs.existsSync(latestResultsPath) && fs.lstatSync(latestResultsPath).isSymbolicLink()) {
|
|
460
460
|
fs.unlinkSync(latestResultsPath);
|
|
461
461
|
}
|
|
462
462
|
fs.symlinkSync(newResultsPath, latestResultsPath);
|