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.
Files changed (55) hide show
  1. package/.env.example +12 -0
  2. package/README.md +235 -0
  3. package/dist/index.d.ts +7 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +29 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/tests/logs.test.d.ts +7 -0
  8. package/dist/tests/logs.test.d.ts.map +1 -0
  9. package/dist/tests/logs.test.js +163 -0
  10. package/dist/tests/logs.test.js.map +1 -0
  11. package/dist/tests/providers.test.d.ts +7 -0
  12. package/dist/tests/providers.test.d.ts.map +1 -0
  13. package/dist/tests/providers.test.js +99 -0
  14. package/dist/tests/providers.test.js.map +1 -0
  15. package/dist/tests/tags.test.d.ts +7 -0
  16. package/dist/tests/tags.test.d.ts.map +1 -0
  17. package/dist/tests/tags.test.js +220 -0
  18. package/dist/tests/tags.test.js.map +1 -0
  19. package/dist/tests/template-run-load.test.d.ts +11 -0
  20. package/dist/tests/template-run-load.test.d.ts.map +1 -0
  21. package/dist/tests/template-run-load.test.js +245 -0
  22. package/dist/tests/template-run-load.test.js.map +1 -0
  23. package/dist/tests/templates.test.d.ts +7 -0
  24. package/dist/tests/templates.test.d.ts.map +1 -0
  25. package/dist/tests/templates.test.js +152 -0
  26. package/dist/tests/templates.test.js.map +1 -0
  27. package/dist/tests/traceable.test.d.ts +7 -0
  28. package/dist/tests/traceable.test.d.ts.map +1 -0
  29. package/dist/tests/traceable.test.js +300 -0
  30. package/dist/tests/traceable.test.js.map +1 -0
  31. package/dist/tests/traces.test.d.ts +7 -0
  32. package/dist/tests/traces.test.d.ts.map +1 -0
  33. package/dist/tests/traces.test.js +264 -0
  34. package/dist/tests/traces.test.js.map +1 -0
  35. package/dist/tests/versions.test.d.ts +7 -0
  36. package/dist/tests/versions.test.d.ts.map +1 -0
  37. package/dist/tests/versions.test.js +145 -0
  38. package/dist/tests/versions.test.js.map +1 -0
  39. package/dist/utils/logger.d.ts +26 -0
  40. package/dist/utils/logger.d.ts.map +1 -0
  41. package/dist/utils/logger.js +79 -0
  42. package/dist/utils/logger.js.map +1 -0
  43. package/package.json +36 -0
  44. package/sample-project-plan.md +316 -0
  45. package/src/index.ts +36 -0
  46. package/src/tests/logs.test.ts +180 -0
  47. package/src/tests/providers.test.ts +99 -0
  48. package/src/tests/tags.test.ts +237 -0
  49. package/src/tests/template-run-load.test.ts +332 -0
  50. package/src/tests/templates.test.ts +154 -0
  51. package/src/tests/traceable.test.ts +290 -0
  52. package/src/tests/traces.test.ts +298 -0
  53. package/src/tests/versions.test.ts +155 -0
  54. package/src/utils/logger.ts +91 -0
  55. 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.
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ts-node
2
+ /**
3
+ * PromptMetrics SDK Sample Project
4
+ * Main entry point - runs all test suites
5
+ */
6
+ import "dotenv/config";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -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,7 @@
1
+ #!/usr/bin/env ts-node
2
+ /**
3
+ * Logs Test Suite
4
+ * Tests all log-related SDK operations
5
+ */
6
+ import "dotenv/config";
7
+ //# sourceMappingURL=logs.test.d.ts.map
@@ -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":";;AACA;;;GAGG;;AAEH,yBAAuB;AACvB,4CAAmD;AACnD,4CAAuD;AAEvD,MAAM,EAAE,GAAG,IAAI,mBAAa,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAsB;CAC3C,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;AACtD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;AAEpD,oDAAoD;AACpD,IAAI,YAAY,GAAkB,IAAI,CAAC;AAEvC,MAAM,KAAK,GAAG;IACZ;QACE,IAAI,EAAE,2BAA2B;QACjC,EAAE,EAAE,KAAK,IAAI,EAAE;YACb,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;gBAChC,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,EAAE;gBACT,OAAO,EAAE,YAAY;gBACrB,UAAU,EAAE,MAAM;aACnB,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACpD,eAAM,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAEzC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC7B,eAAM,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC3C,eAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;KACF;IAED;QACE,IAAI,EAAE,mCAAmC;QACzC,EAAE,EAAE,KAAK,IAAI,EAAE;YACb,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,eAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;gBAClD,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;gBAChC,WAAW,EAAE,gBAAgB;gBAC7B,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,EAAE;aACV,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACpD,eAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC;KACF;IAED;QACE,IAAI,EAAE,kCAAkC;QACxC,EAAE,EAAE,KAAK,IAAI,EAAE;YACb,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,eAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;gBACjD,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;gBAChC,mBAAmB,EAAE,eAAe;gBACpC,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,EAAE;aACV,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACpD,eAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC;KACF;IAED;QACE,IAAI,EAAE,wCAAwC;QAC9C,EAAE,EAAE,KAAK,IAAI,EAAE;YACb,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;gBAChC,MAAM,EAAE,SAAS;gBACjB,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,EAAE;aACV,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACpD,eAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC;KACF;IAED;QACE,IAAI,EAAE,sCAAsC;QAC5C,EAAE,EAAE,KAAK,IAAI,EAAE;YACb,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;gBAChC,MAAM,EAAE,OAAO;gBACf,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,EAAE;aACV,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACpD,eAAM,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC;KACF;IAED;QACE,IAAI,EAAE,oCAAoC;QAC1C,EAAE,EAAE,KAAK,IAAI,EAAE;YACb,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;gBAChC,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,EAAE;aACV,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACpD,eAAM,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC;KACF;IAED;QACE,IAAI,EAAE,eAAe;QACrB,EAAE,EAAE,KAAK,IAAI,EAAE;YACb,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,eAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;gBAChE,OAAO;YACT,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC5C,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;YAE3C,eAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/B,eAAM,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;YAC1C,eAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YAClC,eAAM,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC;YAC1C,eAAM,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;YAChD,eAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC;QAC7C,CAAC;KACF;IAED;QACE,IAAI,EAAE,oCAAoC;QAC1C,EAAE,EAAE,KAAK,IAAI,EAAE;YACb,gCAAgC;YAChC,MAAM,SAAS,GAAG,eAAe,CAAC;YAClC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,eAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;gBACjD,OAAO;YACT,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE;gBACjD,SAAS,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE;gBACxC,OAAO,EAAE,CAAC,aAAa,EAAE,WAAW,CAAC;aACtC,CAAC,CAAC;YAEH,8BAA8B;YAC9B,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC9B,mBAAmB,EAAE,SAAS;gBAC9B,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,YAAY;gBACrB,UAAU,EAAE,MAAM;aACnB,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC1B,eAAM,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;gBAExC,IAAI,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;oBAC7D,eAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;gBAC1C,CAAC;qBAAM,CAAC;oBACN,eAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC;QACH,CAAC;KACF;CACF,CAAC;AAEF,IAAA,qBAAY,EAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ts-node
2
+ /**
3
+ * Providers Test Suite
4
+ * Tests all provider-related SDK operations
5
+ */
6
+ import "dotenv/config";
7
+ //# sourceMappingURL=providers.test.d.ts.map
@@ -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,7 @@
1
+ #!/usr/bin/env ts-node
2
+ /**
3
+ * Tags Test Suite
4
+ * Tests the pm_tags feature for prompt logs
5
+ */
6
+ import "dotenv/config";
7
+ //# sourceMappingURL=tags.test.d.ts.map
@@ -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"}