promptfoo 0.107.0 → 0.107.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.
Files changed (141) hide show
  1. package/dist/package.json +20 -17
  2. package/dist/src/app/assets/{index-aPpzVtDP.js → index-DmqkyVHC.js} +234 -234
  3. package/dist/src/app/assets/{index.es-BZ4ADnog.js → index.es-BSriX8RW.js} +1 -1
  4. package/dist/src/app/assets/{sync-ulUFOpow.js → sync-CAUebwzg.js} +1 -1
  5. package/dist/src/app/index.html +1 -1
  6. package/dist/src/assertions/answerRelevance.d.ts.map +1 -1
  7. package/dist/src/assertions/contains.d.ts.map +1 -1
  8. package/dist/src/assertions/contextRecall.d.ts.map +1 -1
  9. package/dist/src/assertions/contextRelevance.d.ts.map +1 -1
  10. package/dist/src/assertions/cost.d.ts.map +1 -1
  11. package/dist/src/assertions/equals.d.ts.map +1 -1
  12. package/dist/src/assertions/factuality.d.ts.map +1 -1
  13. package/dist/src/assertions/geval.d.ts.map +1 -1
  14. package/dist/src/assertions/guardrails.d.ts.map +1 -1
  15. package/dist/src/assertions/javascript.d.ts.map +1 -1
  16. package/dist/src/assertions/latency.d.ts.map +1 -1
  17. package/dist/src/assertions/llmRubric.d.ts.map +1 -1
  18. package/dist/src/assertions/modelGradedClosedQa.d.ts.map +1 -1
  19. package/dist/src/assertions/moderation.d.ts.map +1 -1
  20. package/dist/src/assertions/openai.d.ts.map +1 -1
  21. package/dist/src/assertions/python.d.ts.map +1 -1
  22. package/dist/src/assertions/redteam.d.ts.map +1 -1
  23. package/dist/src/assertions/regex.d.ts.map +1 -1
  24. package/dist/src/assertions/similar.d.ts.map +1 -1
  25. package/dist/src/assertions/sql.d.ts.map +1 -1
  26. package/dist/src/assertions/startsWith.d.ts.map +1 -1
  27. package/dist/src/assertions/xml.d.ts.map +1 -1
  28. package/dist/src/commands/auth.d.ts.map +1 -1
  29. package/dist/src/commands/auth.js +4 -5
  30. package/dist/src/commands/auth.js.map +1 -1
  31. package/dist/src/commands/init.d.ts.map +1 -1
  32. package/dist/src/commands/init.js +14 -2
  33. package/dist/src/commands/init.js.map +1 -1
  34. package/dist/src/database/tables.d.ts +22 -0
  35. package/dist/src/database/tables.d.ts.map +1 -1
  36. package/dist/src/fetch.js +1 -1
  37. package/dist/src/fetch.js.map +1 -1
  38. package/dist/src/globalConfig/cloud.d.ts +1 -0
  39. package/dist/src/globalConfig/cloud.d.ts.map +1 -1
  40. package/dist/src/globalConfig/cloud.js +11 -10
  41. package/dist/src/globalConfig/cloud.js.map +1 -1
  42. package/dist/src/matchers.d.ts.map +1 -1
  43. package/dist/src/matchers.js +79 -39
  44. package/dist/src/matchers.js.map +1 -1
  45. package/dist/src/onboarding.d.ts.map +1 -1
  46. package/dist/src/onboarding.js +5 -8
  47. package/dist/src/onboarding.js.map +1 -1
  48. package/dist/src/prompts/grading.d.ts +1 -10
  49. package/dist/src/prompts/grading.d.ts.map +1 -1
  50. package/dist/src/prompts/grading.js +37 -42
  51. package/dist/src/prompts/grading.js.map +1 -1
  52. package/dist/src/prompts/processors/javascript.d.ts.map +1 -1
  53. package/dist/src/prompts/processors/python.d.ts.map +1 -1
  54. package/dist/src/providers/adaline.gateway.d.ts.map +1 -1
  55. package/dist/src/providers/adaline.gateway.js +6 -5
  56. package/dist/src/providers/adaline.gateway.js.map +1 -1
  57. package/dist/src/providers/anthropic/completion.d.ts +15 -0
  58. package/dist/src/providers/anthropic/completion.d.ts.map +1 -0
  59. package/dist/src/providers/anthropic/completion.js +93 -0
  60. package/dist/src/providers/anthropic/completion.js.map +1 -0
  61. package/dist/src/providers/anthropic/defaults.d.ts +18 -0
  62. package/dist/src/providers/anthropic/defaults.d.ts.map +1 -0
  63. package/dist/src/providers/anthropic/defaults.js +105 -0
  64. package/dist/src/providers/anthropic/defaults.js.map +1 -0
  65. package/dist/src/providers/anthropic/generic.d.ts +37 -0
  66. package/dist/src/providers/anthropic/generic.d.ts.map +1 -0
  67. package/dist/src/providers/anthropic/generic.js +46 -0
  68. package/dist/src/providers/anthropic/generic.js.map +1 -0
  69. package/dist/src/providers/anthropic/messages.d.ts +23 -0
  70. package/dist/src/providers/anthropic/messages.d.ts.map +1 -0
  71. package/dist/src/providers/anthropic/messages.js +129 -0
  72. package/dist/src/providers/anthropic/messages.js.map +1 -0
  73. package/dist/src/providers/anthropic/types.d.ts +26 -0
  74. package/dist/src/providers/anthropic/types.d.ts.map +1 -0
  75. package/dist/src/providers/anthropic/types.js +3 -0
  76. package/dist/src/providers/anthropic/types.js.map +1 -0
  77. package/dist/src/providers/anthropic/util.d.ts +18 -0
  78. package/dist/src/providers/anthropic/util.d.ts.map +1 -0
  79. package/dist/src/providers/anthropic/util.js +192 -0
  80. package/dist/src/providers/anthropic/util.js.map +1 -0
  81. package/dist/src/providers/bedrock.d.ts +12 -12
  82. package/dist/src/providers/bedrock.d.ts.map +1 -1
  83. package/dist/src/providers/bedrock.js +14 -12
  84. package/dist/src/providers/bedrock.js.map +1 -1
  85. package/dist/src/providers/defaults.d.ts +1 -12
  86. package/dist/src/providers/defaults.d.ts.map +1 -1
  87. package/dist/src/providers/defaults.js +24 -22
  88. package/dist/src/providers/defaults.js.map +1 -1
  89. package/dist/src/providers/openai/realtime.d.ts +68 -0
  90. package/dist/src/providers/openai/realtime.d.ts.map +1 -0
  91. package/dist/src/providers/openai/realtime.js +919 -0
  92. package/dist/src/providers/openai/realtime.js.map +1 -0
  93. package/dist/src/providers/openai/util.d.ts +10 -0
  94. package/dist/src/providers/openai/util.d.ts.map +1 -1
  95. package/dist/src/providers/openai/util.js +32 -2
  96. package/dist/src/providers/openai/util.js.map +1 -1
  97. package/dist/src/providers/registry.d.ts.map +1 -1
  98. package/dist/src/providers/registry.js +30 -11
  99. package/dist/src/providers/registry.js.map +1 -1
  100. package/dist/src/redteam/constants.d.ts +1 -1
  101. package/dist/src/redteam/constants.d.ts.map +1 -1
  102. package/dist/src/redteam/constants.js +7 -0
  103. package/dist/src/redteam/constants.js.map +1 -1
  104. package/dist/src/redteam/extraction/entities.d.ts.map +1 -1
  105. package/dist/src/redteam/extraction/entities.js +2 -0
  106. package/dist/src/redteam/extraction/entities.js.map +1 -1
  107. package/dist/src/redteam/graders.d.ts.map +1 -1
  108. package/dist/src/redteam/graders.js +2 -0
  109. package/dist/src/redteam/graders.js.map +1 -1
  110. package/dist/src/redteam/plugins/index.d.ts.map +1 -1
  111. package/dist/src/redteam/plugins/index.js +2 -0
  112. package/dist/src/redteam/plugins/index.js.map +1 -1
  113. package/dist/src/redteam/plugins/toolDiscovery.d.ts +13 -0
  114. package/dist/src/redteam/plugins/toolDiscovery.d.ts.map +1 -0
  115. package/dist/src/redteam/plugins/toolDiscovery.js +102 -0
  116. package/dist/src/redteam/plugins/toolDiscovery.js.map +1 -0
  117. package/dist/src/redteam/providers/shared.d.ts.map +1 -1
  118. package/dist/src/redteam/strategies/iterative.js +1 -1
  119. package/dist/src/redteam/strategies/iterative.js.map +1 -1
  120. package/dist/src/types/env.d.ts +3 -0
  121. package/dist/src/types/env.d.ts.map +1 -1
  122. package/dist/src/types/env.js +1 -0
  123. package/dist/src/types/env.js.map +1 -1
  124. package/dist/src/types/index.d.ts +291 -0
  125. package/dist/src/types/index.d.ts.map +1 -1
  126. package/dist/src/types/providers.d.ts +13 -0
  127. package/dist/src/types/providers.d.ts.map +1 -1
  128. package/dist/src/util/database.d.ts +2 -0
  129. package/dist/src/util/database.d.ts.map +1 -1
  130. package/dist/src/util/objectUtils.d.ts.map +1 -1
  131. package/dist/src/util/time.d.ts.map +1 -1
  132. package/dist/src/validators/providers.d.ts +20 -0
  133. package/dist/src/validators/providers.d.ts.map +1 -1
  134. package/dist/src/validators/redteam.d.ts +8 -0
  135. package/dist/src/validators/redteam.d.ts.map +1 -1
  136. package/dist/tsconfig.tsbuildinfo +1 -1
  137. package/package.json +20 -17
  138. package/dist/src/providers/anthropic.d.ts +0 -84
  139. package/dist/src/providers/anthropic.d.ts.map +0 -1
  140. package/dist/src/providers/anthropic.js +0 -505
  141. package/dist/src/providers/anthropic.js.map +0 -1
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "promptfoo",
3
3
  "description": "LLM eval & testing toolkit",
4
4
  "author": "Ian Webster",
5
- "version": "0.107.0",
5
+ "version": "0.107.2",
6
6
  "license": "MIT",
7
7
  "type": "commonjs",
8
8
  "repository": {
@@ -99,22 +99,22 @@
99
99
  "google-auth-library": "^9.7.0",
100
100
  "ibm-cloud-sdk-core": "^5.0.2",
101
101
  "langfuse": "^3.7.0",
102
+ "node-gtts": "^2.0.2",
102
103
  "node-sql-parser": "^5.2.0",
103
104
  "pdf-parse": "^1.1.1",
104
105
  "playwright": "^1.47.2",
105
106
  "playwright-extra": "^4.3.6",
106
107
  "puppeteer-extra-plugin-stealth": "^2.11.2",
107
- "sharp": "^0.33.5",
108
- "node-gtts": "^2.0.2"
108
+ "sharp": "^0.33.5"
109
109
  },
110
110
  "devDependencies": {
111
111
  "@aws-sdk/client-bedrock-runtime": "^3.758.0",
112
112
  "@aws-sdk/credential-provider-sso": "^3.758.0",
113
- "@azure/identity": "^4.7.0",
114
- "@eslint/js": "^9.21.0",
113
+ "@azure/identity": "^4.8.0",
114
+ "@eslint/js": "^9.22.0",
115
115
  "@libsql/client": "^0.14.0",
116
116
  "@swc/cli": "^0.6.0",
117
- "@swc/core": "^1.11.4",
117
+ "@swc/core": "^1.11.9",
118
118
  "@swc/jest": "^0.2.37",
119
119
  "@trivago/prettier-plugin-sort-imports": "^5.2.2",
120
120
  "@types/async": "^3.2.24",
@@ -136,13 +136,15 @@
136
136
  "@types/semver": "^7.5.8",
137
137
  "@types/supertest": "^6.0.2",
138
138
  "@types/uuid": "^10.0.0",
139
+ "@typescript-eslint/eslint-plugin": "^8.26.1",
140
+ "@typescript-eslint/parser": "^8.26.1",
139
141
  "check-dependency-version-consistency": "^5.0.0",
140
142
  "cloudflare": "3.4.0",
141
143
  "concurrently": "^9.1.2",
142
144
  "drizzle-kit": "^0.30.4",
143
- "eslint": "^9.21.0",
145
+ "eslint": "^9.22.0",
144
146
  "eslint-plugin-jest": "^28.11.0",
145
- "eslint-plugin-react-hooks": "^5.1.0",
147
+ "eslint-plugin-react-hooks": "^5.2.0",
146
148
  "eslint-plugin-react-refresh": "^0.4.19",
147
149
  "eslint-plugin-unicorn": "^57.0.0",
148
150
  "eslint-plugin-unused-imports": "^4.1.4",
@@ -150,18 +152,19 @@
150
152
  "madge": "^8.0.0",
151
153
  "nock": "^13.5.6",
152
154
  "nodemon": "^3.1.9",
153
- "prettier": "^3.5.2",
155
+ "prettier": "^3.5.3",
154
156
  "shx": "^0.3.4",
155
157
  "supertest": "^7.0.0",
156
158
  "ts-node": "^10.9.2",
157
- "typescript": "^5.7.3",
158
- "typescript-eslint": "^8.25.0",
159
+ "typescript": "^5.8.2",
160
+ "typescript-eslint": "^8.26.1",
159
161
  "zod-to-json-schema": "^3.24.3"
160
162
  },
161
163
  "dependencies": {
162
164
  "@anthropic-ai/sdk": "^0.39.0",
163
- "@apidevtools/json-schema-ref-parser": "^11.9.1",
164
- "@googleapis/sheets": "^9.3.1",
165
+ "@apidevtools/json-schema-ref-parser": "^11.9.3",
166
+ "@googleapis/sheets": "^9.4.0",
167
+ "@types/ws": "^8.18.0",
165
168
  "ajv": "^8.17.1",
166
169
  "ajv-formats": "^3.0.1",
167
170
  "async": "^3.2.6",
@@ -173,7 +176,7 @@
173
176
  "cli-progress": "^3.12.0",
174
177
  "cli-table3": "^0.6.5",
175
178
  "commander": "^12.1.0",
176
- "compression": "^1.7.5",
179
+ "compression": "^1.8.0",
177
180
  "cors": "^2.8.5",
178
181
  "csv-parse": "^5.6.0",
179
182
  "csv-stringify": "^6.5.2",
@@ -190,10 +193,10 @@
190
193
  "inquirer": "^11.1.0",
191
194
  "js-rouge": "^3.0.0",
192
195
  "js-yaml": "^4.1.0",
193
- "mathjs": "^14.2.1",
196
+ "mathjs": "^14.3.1",
194
197
  "node-cache": "^5.1.2",
195
198
  "nunjucks": "^3.2.4",
196
- "openai": "^4.86.1",
199
+ "openai": "^4.87.3",
197
200
  "opener": "^1.5.2",
198
201
  "proxy-agent": "^6.5.0",
199
202
  "python-shell": "^5.0.0",
@@ -202,7 +205,7 @@
202
205
  "semver": "^7.7.1",
203
206
  "socket.io": "^4.8.1",
204
207
  "tsx": "^4.19.3",
205
- "undici": "^7.2.3",
208
+ "undici": "^7.5.0",
206
209
  "uuid": "^10.0.0",
207
210
  "winston": "^3.17.0",
208
211
  "ws": "^8.18.1",
@@ -1,84 +0,0 @@
1
- import Anthropic from '@anthropic-ai/sdk';
2
- import type { ApiProvider, ProviderResponse } from '../types';
3
- import type { EnvOverrides } from '../types/env';
4
- interface AnthropicMessageOptions {
5
- apiBaseUrl?: string;
6
- apiKey?: string;
7
- cost?: number;
8
- extra_body?: Record<string, any>;
9
- headers?: Record<string, string>;
10
- max_tokens?: number;
11
- model?: string;
12
- temperature?: number;
13
- thinking?: Anthropic.Messages.ThinkingConfigParam;
14
- tool_choice?: Anthropic.Messages.ToolChoice;
15
- tools?: Anthropic.Tool[];
16
- top_k?: number;
17
- top_p?: number;
18
- beta?: string[];
19
- showThinking?: boolean;
20
- }
21
- export declare function outputFromMessage(message: Anthropic.Messages.Message, showThinking: boolean): string;
22
- export declare function parseMessages(messages: string): {
23
- system?: Anthropic.TextBlockParam[];
24
- extractedMessages: Anthropic.MessageParam[];
25
- thinking?: Anthropic.ThinkingConfigParam;
26
- };
27
- export declare function calculateAnthropicCost(modelName: string, config: AnthropicMessageOptions, promptTokens?: number, completionTokens?: number): number | undefined;
28
- export declare class AnthropicMessagesProvider implements ApiProvider {
29
- modelName: string;
30
- config: AnthropicMessageOptions;
31
- env?: EnvOverrides;
32
- apiKey?: string;
33
- anthropic: Anthropic;
34
- static ANTHROPIC_MODELS: {
35
- id: string;
36
- cost: {
37
- input: number;
38
- output: number;
39
- };
40
- }[];
41
- static ANTHROPIC_MODELS_NAMES: string[];
42
- constructor(modelName: string, options?: {
43
- id?: string;
44
- config?: AnthropicMessageOptions;
45
- env?: EnvOverrides;
46
- });
47
- id(): string;
48
- toString(): string;
49
- getApiKey(): string | undefined;
50
- getApiBaseUrl(): string | undefined;
51
- callApi(prompt: string): Promise<ProviderResponse>;
52
- }
53
- interface AnthropicCompletionOptions {
54
- apiKey?: string;
55
- max_tokens_to_sample?: number;
56
- temperature?: number;
57
- top_p?: number;
58
- top_k?: number;
59
- }
60
- export declare class AnthropicCompletionProvider implements ApiProvider {
61
- static ANTHROPIC_COMPLETION_MODELS: string[];
62
- modelName: string;
63
- apiKey?: string;
64
- anthropic: Anthropic;
65
- config: AnthropicCompletionOptions;
66
- constructor(modelName: string, options?: {
67
- config?: AnthropicCompletionOptions;
68
- id?: string;
69
- env?: EnvOverrides;
70
- });
71
- id(): string;
72
- toString(): string;
73
- callApi(prompt: string): Promise<ProviderResponse>;
74
- }
75
- export declare const DefaultGradingProvider: AnthropicMessagesProvider;
76
- export declare const DefaultGradingJsonProvider: AnthropicMessagesProvider;
77
- export declare const DefaultSuggestionsProvider: AnthropicMessagesProvider;
78
- export declare class AnthropicLlmRubricProvider extends AnthropicMessagesProvider {
79
- constructor(modelName: string);
80
- callApi(prompt: string): Promise<ProviderResponse>;
81
- }
82
- export declare const DefaultLlmRubricProvider: AnthropicLlmRubricProvider;
83
- export {};
84
- //# sourceMappingURL=anthropic.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/providers/anthropic.ts"],"names":[],"mappings":"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"}