promptmetrics-sample 1.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/.env.example +12 -0
- package/README.md +235 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/tests/logs.test.d.ts +7 -0
- package/dist/tests/logs.test.d.ts.map +1 -0
- package/dist/tests/logs.test.js +163 -0
- package/dist/tests/logs.test.js.map +1 -0
- package/dist/tests/providers.test.d.ts +7 -0
- package/dist/tests/providers.test.d.ts.map +1 -0
- package/dist/tests/providers.test.js +99 -0
- package/dist/tests/providers.test.js.map +1 -0
- package/dist/tests/tags.test.d.ts +7 -0
- package/dist/tests/tags.test.d.ts.map +1 -0
- package/dist/tests/tags.test.js +220 -0
- package/dist/tests/tags.test.js.map +1 -0
- package/dist/tests/template-run-load.test.d.ts +11 -0
- package/dist/tests/template-run-load.test.d.ts.map +1 -0
- package/dist/tests/template-run-load.test.js +245 -0
- package/dist/tests/template-run-load.test.js.map +1 -0
- package/dist/tests/templates.test.d.ts +7 -0
- package/dist/tests/templates.test.d.ts.map +1 -0
- package/dist/tests/templates.test.js +152 -0
- package/dist/tests/templates.test.js.map +1 -0
- package/dist/tests/traceable.test.d.ts +7 -0
- package/dist/tests/traceable.test.d.ts.map +1 -0
- package/dist/tests/traceable.test.js +300 -0
- package/dist/tests/traceable.test.js.map +1 -0
- package/dist/tests/traces.test.d.ts +7 -0
- package/dist/tests/traces.test.d.ts.map +1 -0
- package/dist/tests/traces.test.js +264 -0
- package/dist/tests/traces.test.js.map +1 -0
- package/dist/tests/versions.test.d.ts +7 -0
- package/dist/tests/versions.test.d.ts.map +1 -0
- package/dist/tests/versions.test.js +145 -0
- package/dist/tests/versions.test.js.map +1 -0
- package/dist/utils/logger.d.ts +26 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +79 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +36 -0
- package/sample-project-plan.md +316 -0
- package/src/index.ts +36 -0
- package/src/tests/logs.test.ts +180 -0
- package/src/tests/providers.test.ts +99 -0
- package/src/tests/tags.test.ts +237 -0
- package/src/tests/template-run-load.test.ts +332 -0
- package/src/tests/templates.test.ts +154 -0
- package/src/tests/traceable.test.ts +290 -0
- package/src/tests/traces.test.ts +298 -0
- package/src/tests/versions.test.ts +155 -0
- package/src/utils/logger.ts +91 -0
- package/tsconfig.json +21 -0
package/.env.example
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# PromptMetrics Sample Project Configuration
|
|
2
|
+
|
|
3
|
+
# Required: API base URL
|
|
4
|
+
BASE_URL=http://localhost:3000
|
|
5
|
+
|
|
6
|
+
# Required: Your workspace API key
|
|
7
|
+
PROMPTMETRICS_API_KEY=pm_your_workspace_api_key
|
|
8
|
+
|
|
9
|
+
# Test data (update with your actual IDs from the UI)
|
|
10
|
+
TEST_TEMPLATE_NAME=test-template
|
|
11
|
+
TEST_TEMPLATE_ID=your_template_id_here
|
|
12
|
+
TEST_VERSION_ID=your_version_id_here
|
package/README.md
ADDED
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
# PromptMetrics SDK Sample Project
|
|
2
|
+
|
|
3
|
+
A comprehensive test project to validate all PromptMetrics SDK functionality.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
- Node.js 18+
|
|
8
|
+
- PromptMetrics backend running (default: http://localhost:3000)
|
|
9
|
+
- A workspace API key (starts with `pm_`)
|
|
10
|
+
- Test templates/versions created in the UI
|
|
11
|
+
|
|
12
|
+
## Setup
|
|
13
|
+
|
|
14
|
+
### 1. Install Dependencies
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm install
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### 2. Link SDK (for local development)
|
|
21
|
+
|
|
22
|
+
If testing with local SDK:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npm link ../promptmetrics-sdk
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Or install from npm:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npm install @promptmetrics/sdk
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### 3. Configure Environment
|
|
35
|
+
|
|
36
|
+
Copy `.env.example` to `.env` and update values:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
cp .env.example .env
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Edit `.env`:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# Required
|
|
46
|
+
BASE_URL=http://localhost:3000
|
|
47
|
+
PROMPTMETRICS_API_KEY=pm_your_workspace_api_key
|
|
48
|
+
|
|
49
|
+
# Test data (get these from the UI)
|
|
50
|
+
TEST_TEMPLATE_NAME=your-template-name
|
|
51
|
+
TEST_TEMPLATE_ID=your_template_id
|
|
52
|
+
TEST_VERSION_ID=your_version_id
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 4. Build SDK (if using local link)
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
cd ../promptmetrics-sdk
|
|
59
|
+
npm run build
|
|
60
|
+
cd ../promptmetrics-sample
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Running Tests
|
|
64
|
+
|
|
65
|
+
### Run All Tests
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
npm run test:all
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Run Individual Test Suites
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
# Template operations
|
|
75
|
+
npm run test:templates
|
|
76
|
+
|
|
77
|
+
# Version operations (run, update, etc.)
|
|
78
|
+
npm run test:versions
|
|
79
|
+
|
|
80
|
+
# Log operations
|
|
81
|
+
npm run test:logs
|
|
82
|
+
|
|
83
|
+
# Provider operations
|
|
84
|
+
npm run test:providers
|
|
85
|
+
|
|
86
|
+
# Trace operations
|
|
87
|
+
npm run test:traces
|
|
88
|
+
|
|
89
|
+
# @traceable decorator
|
|
90
|
+
npm run test:traceable
|
|
91
|
+
|
|
92
|
+
# pm_tags feature
|
|
93
|
+
npm run test:tags
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Show Configuration
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
npm start
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Test Suites
|
|
103
|
+
|
|
104
|
+
### Templates (`test:templates`)
|
|
105
|
+
|
|
106
|
+
- Get template by name
|
|
107
|
+
- Get template by ID
|
|
108
|
+
- Get template with specific version number
|
|
109
|
+
- Get template with env_label (production/staging/development)
|
|
110
|
+
- List templates with pagination
|
|
111
|
+
- List templates with search filter
|
|
112
|
+
|
|
113
|
+
### Versions (`test:versions`)
|
|
114
|
+
|
|
115
|
+
- Get version by ID
|
|
116
|
+
- Get version by template name + version number
|
|
117
|
+
- Run version with variables
|
|
118
|
+
- Run version with custom parameters
|
|
119
|
+
- Run version with model override
|
|
120
|
+
- Run version with pm_tags
|
|
121
|
+
- Update version metadata
|
|
122
|
+
|
|
123
|
+
### Logs (`test:logs`)
|
|
124
|
+
|
|
125
|
+
- List logs with pagination
|
|
126
|
+
- List logs filtered by template_id
|
|
127
|
+
- List logs filtered by version_id
|
|
128
|
+
- List logs filtered by status
|
|
129
|
+
- List logs filtered by source
|
|
130
|
+
- Get log by ID
|
|
131
|
+
- Verify tags in logs
|
|
132
|
+
|
|
133
|
+
### Providers (`test:providers`)
|
|
134
|
+
|
|
135
|
+
- List all LLM providers
|
|
136
|
+
- Get models for OpenAI
|
|
137
|
+
- Get models for Anthropic
|
|
138
|
+
- Get models for OpenRouter
|
|
139
|
+
|
|
140
|
+
### Traces (`test:traces`)
|
|
141
|
+
|
|
142
|
+
- Create manual trace
|
|
143
|
+
- Create trace with group_id
|
|
144
|
+
- Create batch traces
|
|
145
|
+
- Get trace by span_id
|
|
146
|
+
- Get trace tree
|
|
147
|
+
- Get traces by group_id
|
|
148
|
+
- List traces with filters
|
|
149
|
+
- Add score to trace
|
|
150
|
+
- Update trace metadata
|
|
151
|
+
- Get trace analytics
|
|
152
|
+
|
|
153
|
+
### Traceable Decorator (`test:traceable`)
|
|
154
|
+
|
|
155
|
+
- Basic @traceable decorator
|
|
156
|
+
- @traceable with static metadata
|
|
157
|
+
- @traceable with tags
|
|
158
|
+
- Nested @traceable (parent-child)
|
|
159
|
+
- @traceable with LLM call inside
|
|
160
|
+
- pm.track.metadata() inside traced function
|
|
161
|
+
- pm.track.score() inside traced function
|
|
162
|
+
- pm.track.group() for conversation grouping
|
|
163
|
+
- Error handling in @traceable
|
|
164
|
+
|
|
165
|
+
### Tags (`test:tags`)
|
|
166
|
+
|
|
167
|
+
- Run version with pm_tags array
|
|
168
|
+
- Run version without pm_tags (inherit from template)
|
|
169
|
+
- Run version with single tag
|
|
170
|
+
- Run version with many tags
|
|
171
|
+
- Verify tags stored in prompt log
|
|
172
|
+
- Tags with special characters
|
|
173
|
+
- Tags inside @traceable function
|
|
174
|
+
|
|
175
|
+
## Project Structure
|
|
176
|
+
|
|
177
|
+
```
|
|
178
|
+
promptmetrics-sample/
|
|
179
|
+
├── src/
|
|
180
|
+
│ ├── index.ts # Main entry point
|
|
181
|
+
│ ├── tests/
|
|
182
|
+
│ │ ├── templates.test.ts
|
|
183
|
+
│ │ ├── versions.test.ts
|
|
184
|
+
│ │ ├── logs.test.ts
|
|
185
|
+
│ │ ├── providers.test.ts
|
|
186
|
+
│ │ ├── traces.test.ts
|
|
187
|
+
│ │ ├── traceable.test.ts
|
|
188
|
+
│ │ └── tags.test.ts
|
|
189
|
+
│ └── utils/
|
|
190
|
+
│ └── logger.ts # Test logging utility
|
|
191
|
+
├── .env # Environment variables
|
|
192
|
+
├── .env.example # Example env file
|
|
193
|
+
├── package.json
|
|
194
|
+
├── tsconfig.json
|
|
195
|
+
└── README.md
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## Troubleshooting
|
|
199
|
+
|
|
200
|
+
### "Cannot find module '@promptmetrics/sdk'"
|
|
201
|
+
|
|
202
|
+
Make sure the SDK is built:
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
cd ../promptmetrics-sdk
|
|
206
|
+
npm run build
|
|
207
|
+
cd ../promptmetrics-sample
|
|
208
|
+
npm link ../promptmetrics-sdk
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### "BASE_URL environment variable is required"
|
|
212
|
+
|
|
213
|
+
Make sure `.env` file exists and has `BASE_URL` set.
|
|
214
|
+
|
|
215
|
+
### "API key is required"
|
|
216
|
+
|
|
217
|
+
Make sure `PROMPTMETRICS_API_KEY` is set in `.env` or passed to the test.
|
|
218
|
+
|
|
219
|
+
### Tests failing with "not found"
|
|
220
|
+
|
|
221
|
+
Make sure:
|
|
222
|
+
|
|
223
|
+
1. Backend is running at the configured `BASE_URL`
|
|
224
|
+
2. `TEST_TEMPLATE_NAME`, `TEST_TEMPLATE_ID`, and `TEST_VERSION_ID` are correct
|
|
225
|
+
3. The API key has access to the workspace
|
|
226
|
+
|
|
227
|
+
## Debug Mode
|
|
228
|
+
|
|
229
|
+
Enable debug logging by setting `DEBUG=true`:
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
DEBUG=true npm run test:templates
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
Or set `debug: true` in the PromptMetrics config.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,eAAe,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#!/usr/bin/env ts-node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* PromptMetrics SDK Sample Project
|
|
5
|
+
* Main entry point - runs all test suites
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
require("dotenv/config");
|
|
9
|
+
const logger_1 = require("./utils/logger");
|
|
10
|
+
async function main() {
|
|
11
|
+
logger_1.logger.header("PromptMetrics SDK Sample Project");
|
|
12
|
+
console.log("This project tests all SDK functionality.\n");
|
|
13
|
+
console.log("Available test commands:");
|
|
14
|
+
console.log(" npm run test:templates - Test template operations");
|
|
15
|
+
console.log(" npm run test:versions - Test version operations");
|
|
16
|
+
console.log(" npm run test:logs - Test log operations");
|
|
17
|
+
console.log(" npm run test:providers - Test provider operations");
|
|
18
|
+
console.log(" npm run test:traces - Test trace operations");
|
|
19
|
+
console.log(" npm run test:traceable - Test @traceable decorator");
|
|
20
|
+
console.log(" npm run test:tags - Test pm_tags feature");
|
|
21
|
+
console.log(" npm run test:all - Run all tests");
|
|
22
|
+
console.log("\nConfiguration:");
|
|
23
|
+
console.log(` BASE_URL: ${process.env.BASE_URL || "NOT SET"}`);
|
|
24
|
+
console.log(` API_KEY: ${process.env.PROMPTMETRICS_API_KEY ? "SET (pm_***)" : "NOT SET"}`);
|
|
25
|
+
console.log(` TEST_TEMPLATE_NAME: ${process.env.TEST_TEMPLATE_NAME || "NOT SET"}`);
|
|
26
|
+
console.log(` TEST_VERSION_ID: ${process.env.TEST_VERSION_ID || "NOT SET"}`);
|
|
27
|
+
}
|
|
28
|
+
main().catch(console.error);
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AACA;;;GAGG;;AAEH,yBAAuB;AACvB,2CAAwC;AAExC,KAAK,UAAU,IAAI;IACjB,eAAM,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;IAElD,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CACT,cACE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SACvD,EAAE,CACH,CAAC;IACF,OAAO,CAAC,GAAG,CACT,yBAAyB,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,SAAS,EAAE,CACvE,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,sBAAsB,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,SAAS,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.test.d.ts","sourceRoot":"","sources":["../../src/tests/logs.test.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,eAAe,CAAC"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
#!/usr/bin/env ts-node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* Logs Test Suite
|
|
5
|
+
* Tests all log-related SDK operations
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
require("dotenv/config");
|
|
9
|
+
const sdk_1 = require("@promptmetrics/sdk");
|
|
10
|
+
const logger_1 = require("../utils/logger");
|
|
11
|
+
const pm = new sdk_1.PromptMetrics({
|
|
12
|
+
apiKey: process.env.PROMPTMETRICS_API_KEY,
|
|
13
|
+
});
|
|
14
|
+
const TEST_TEMPLATE_ID = process.env.TEST_TEMPLATE_ID;
|
|
15
|
+
const TEST_VERSION_ID = process.env.TEST_VERSION_ID;
|
|
16
|
+
// Store log ID from first test for subsequent tests
|
|
17
|
+
let fetchedLogId = null;
|
|
18
|
+
const tests = [
|
|
19
|
+
{
|
|
20
|
+
name: "List logs with pagination",
|
|
21
|
+
fn: async () => {
|
|
22
|
+
const result = await pm.logs.list({
|
|
23
|
+
page: 1,
|
|
24
|
+
limit: 10,
|
|
25
|
+
sort_by: "created_at",
|
|
26
|
+
sort_order: "desc",
|
|
27
|
+
});
|
|
28
|
+
if (!result)
|
|
29
|
+
throw new Error("Failed to list logs");
|
|
30
|
+
logger_1.logger.data("Logs Count", result.length);
|
|
31
|
+
if (result.length > 0) {
|
|
32
|
+
fetchedLogId = result[0]._id;
|
|
33
|
+
logger_1.logger.data("First Log ID", result[0]._id);
|
|
34
|
+
logger_1.logger.data("First Log Status", result[0].status);
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: "List logs filtered by template_id",
|
|
40
|
+
fn: async () => {
|
|
41
|
+
if (!TEST_TEMPLATE_ID) {
|
|
42
|
+
logger_1.logger.info("Skipped - TEST_TEMPLATE_ID not set");
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const result = await pm.logs.list({
|
|
46
|
+
template_id: TEST_TEMPLATE_ID,
|
|
47
|
+
page: 1,
|
|
48
|
+
limit: 10,
|
|
49
|
+
});
|
|
50
|
+
if (!result)
|
|
51
|
+
throw new Error("Failed to list logs");
|
|
52
|
+
logger_1.logger.data("Logs for Template", result.length);
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: "List logs filtered by version_id",
|
|
57
|
+
fn: async () => {
|
|
58
|
+
if (!TEST_VERSION_ID) {
|
|
59
|
+
logger_1.logger.info("Skipped - TEST_VERSION_ID not set");
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const result = await pm.logs.list({
|
|
63
|
+
template_version_id: TEST_VERSION_ID,
|
|
64
|
+
page: 1,
|
|
65
|
+
limit: 10,
|
|
66
|
+
});
|
|
67
|
+
if (!result)
|
|
68
|
+
throw new Error("Failed to list logs");
|
|
69
|
+
logger_1.logger.data("Logs for Version", result.length);
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
name: "List logs filtered by status (SUCCESS)",
|
|
74
|
+
fn: async () => {
|
|
75
|
+
const result = await pm.logs.list({
|
|
76
|
+
status: "SUCCESS",
|
|
77
|
+
page: 1,
|
|
78
|
+
limit: 10,
|
|
79
|
+
});
|
|
80
|
+
if (!result)
|
|
81
|
+
throw new Error("Failed to list logs");
|
|
82
|
+
logger_1.logger.data("Successful Logs", result.length);
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
name: "List logs filtered by status (ERROR)",
|
|
87
|
+
fn: async () => {
|
|
88
|
+
const result = await pm.logs.list({
|
|
89
|
+
status: "ERROR",
|
|
90
|
+
page: 1,
|
|
91
|
+
limit: 10,
|
|
92
|
+
});
|
|
93
|
+
if (!result)
|
|
94
|
+
throw new Error("Failed to list logs");
|
|
95
|
+
logger_1.logger.data("Error Logs", result.length);
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: "List logs filtered by source (SDK)",
|
|
100
|
+
fn: async () => {
|
|
101
|
+
const result = await pm.logs.list({
|
|
102
|
+
source: "sdk",
|
|
103
|
+
page: 1,
|
|
104
|
+
limit: 10,
|
|
105
|
+
});
|
|
106
|
+
if (!result)
|
|
107
|
+
throw new Error("Failed to list logs");
|
|
108
|
+
logger_1.logger.data("SDK Logs", result.length);
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: "Get log by ID",
|
|
113
|
+
fn: async () => {
|
|
114
|
+
if (!fetchedLogId) {
|
|
115
|
+
logger_1.logger.info("Skipped - No log ID available from previous test");
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const log = await pm.logs.get(fetchedLogId);
|
|
119
|
+
if (!log)
|
|
120
|
+
throw new Error("Log not found");
|
|
121
|
+
logger_1.logger.data("Log ID", log._id);
|
|
122
|
+
logger_1.logger.data("Request ID", log.request_id);
|
|
123
|
+
logger_1.logger.data("Status", log.status);
|
|
124
|
+
logger_1.logger.data("Latency", `${log.latency}s`);
|
|
125
|
+
logger_1.logger.data("Total Cost", `$${log.total_cost}`);
|
|
126
|
+
logger_1.logger.data("Tags", log.tags || "No tags");
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
name: "Verify log has tags (from pm_tags)",
|
|
131
|
+
fn: async () => {
|
|
132
|
+
// Run a version with tags first
|
|
133
|
+
const versionId = TEST_VERSION_ID;
|
|
134
|
+
if (!versionId) {
|
|
135
|
+
logger_1.logger.info("Skipped - TEST_VERSION_ID not set");
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const runResult = await pm.versions.run(versionId, {
|
|
139
|
+
variables: { topic: "Tag Verification" },
|
|
140
|
+
pm_tags: ["verify-test", "log-check"],
|
|
141
|
+
});
|
|
142
|
+
// Get the log and verify tags
|
|
143
|
+
const logs = await pm.logs.list({
|
|
144
|
+
template_version_id: versionId,
|
|
145
|
+
limit: 1,
|
|
146
|
+
sort_by: "created_at",
|
|
147
|
+
sort_order: "desc",
|
|
148
|
+
});
|
|
149
|
+
if (logs.length > 0) {
|
|
150
|
+
const latestLog = logs[0];
|
|
151
|
+
logger_1.logger.data("Log Tags", latestLog.tags);
|
|
152
|
+
if (latestLog.tags && latestLog.tags.includes("verify-test")) {
|
|
153
|
+
logger_1.logger.success("Tags verified in log!");
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
logger_1.logger.info("Tags may be stored but not returned in list");
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
];
|
|
162
|
+
(0, logger_1.runTestSuite)("Logs Test Suite", tests);
|
|
163
|
+
//# sourceMappingURL=logs.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.test.js","sourceRoot":"","sources":["../../src/tests/logs.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.test.d.ts","sourceRoot":"","sources":["../../src/tests/providers.test.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,eAAe,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
#!/usr/bin/env ts-node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* Providers Test Suite
|
|
5
|
+
* Tests all provider-related SDK operations
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
require("dotenv/config");
|
|
9
|
+
const sdk_1 = require("@promptmetrics/sdk");
|
|
10
|
+
const logger_1 = require("../utils/logger");
|
|
11
|
+
const pm = new sdk_1.PromptMetrics({
|
|
12
|
+
apiKey: process.env.PROMPTMETRICS_API_KEY,
|
|
13
|
+
});
|
|
14
|
+
const tests = [
|
|
15
|
+
{
|
|
16
|
+
name: "List all LLM providers",
|
|
17
|
+
fn: async () => {
|
|
18
|
+
const providers = await pm.providers.list();
|
|
19
|
+
if (!providers)
|
|
20
|
+
throw new Error("Failed to list providers");
|
|
21
|
+
logger_1.logger.data("Providers Count", providers.length);
|
|
22
|
+
providers.forEach((provider) => {
|
|
23
|
+
logger_1.logger.info(`Provider: ${provider.name} (${provider.slug})`);
|
|
24
|
+
logger_1.logger.data(" Has Key", provider.has_key || false);
|
|
25
|
+
});
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: "Get models for OpenAI provider",
|
|
30
|
+
fn: async () => {
|
|
31
|
+
try {
|
|
32
|
+
const provider = await pm.providers.getModels("openai");
|
|
33
|
+
if (!provider)
|
|
34
|
+
throw new Error("Provider not found");
|
|
35
|
+
logger_1.logger.data("Provider Name", provider.name);
|
|
36
|
+
logger_1.logger.data("Models Count", provider.models?.length || 0);
|
|
37
|
+
if (provider.models && provider.models.length > 0) {
|
|
38
|
+
logger_1.logger.info("Sample models:");
|
|
39
|
+
provider.models.slice(0, 5).forEach((model) => {
|
|
40
|
+
logger_1.logger.info(` - ${model.name}`);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
const err = error;
|
|
46
|
+
if (err.message?.includes("not found")) {
|
|
47
|
+
logger_1.logger.info("OpenAI provider not configured - this is OK");
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
throw error;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: "Get models for Anthropic/Claude provider",
|
|
57
|
+
fn: async () => {
|
|
58
|
+
try {
|
|
59
|
+
const provider = await pm.providers.getModels("anthropic");
|
|
60
|
+
if (!provider)
|
|
61
|
+
throw new Error("Provider not found");
|
|
62
|
+
logger_1.logger.data("Provider Name", provider.name);
|
|
63
|
+
logger_1.logger.data("Models Count", provider.models?.length || 0);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
const err = error;
|
|
67
|
+
if (err.message?.includes("not found")) {
|
|
68
|
+
logger_1.logger.info("Anthropic provider not configured - this is OK");
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
throw error;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: "Get models for OpenRouter provider",
|
|
78
|
+
fn: async () => {
|
|
79
|
+
try {
|
|
80
|
+
const provider = await pm.providers.getModels("openrouter");
|
|
81
|
+
if (!provider)
|
|
82
|
+
throw new Error("Provider not found");
|
|
83
|
+
logger_1.logger.data("Provider Name", provider.name);
|
|
84
|
+
logger_1.logger.data("Models Count", provider.models?.length || 0);
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
const err = error;
|
|
88
|
+
if (err.message?.includes("not found")) {
|
|
89
|
+
logger_1.logger.info("OpenRouter provider not configured - this is OK");
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
throw error;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
];
|
|
98
|
+
(0, logger_1.runTestSuite)("Providers Test Suite", tests);
|
|
99
|
+
//# sourceMappingURL=providers.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.test.js","sourceRoot":"","sources":["../../src/tests/providers.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.test.d.ts","sourceRoot":"","sources":["../../src/tests/tags.test.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,eAAe,CAAC"}
|