@revenium/perplexity 2.0.4 → 2.0.6
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/CHANGELOG.md +113 -98
- package/LICENSE +21 -21
- package/README.md +292 -271
- package/SECURITY.md +34 -0
- package/dist/cjs/core/client/index.js +13 -0
- package/dist/cjs/core/client/index.js.map +1 -0
- package/dist/cjs/core/client/manager.js +88 -0
- package/dist/cjs/core/client/manager.js.map +1 -0
- package/dist/cjs/core/config/index.js +21 -0
- package/dist/cjs/core/config/index.js.map +1 -0
- package/dist/cjs/core/config/loader.js +48 -0
- package/dist/cjs/core/config/loader.js.map +1 -0
- package/dist/cjs/core/config/manager.js +77 -0
- package/dist/cjs/core/config/manager.js.map +1 -0
- package/dist/cjs/core/config/validator.js +47 -0
- package/dist/cjs/core/config/validator.js.map +1 -0
- package/dist/cjs/core/middleware/index.js +14 -0
- package/dist/cjs/core/middleware/index.js.map +1 -0
- package/dist/cjs/core/middleware/interfaces.js +94 -0
- package/dist/cjs/core/middleware/interfaces.js.map +1 -0
- package/dist/cjs/core/middleware/revenium-client.js +44 -0
- package/dist/cjs/core/middleware/revenium-client.js.map +1 -0
- package/dist/cjs/core/middleware/streaming-wrapper.js +80 -0
- package/dist/cjs/core/middleware/streaming-wrapper.js.map +1 -0
- package/dist/cjs/core/providers/detector.js +38 -0
- package/dist/cjs/core/providers/detector.js.map +1 -0
- package/dist/cjs/core/providers/index.js +14 -0
- package/dist/cjs/core/providers/index.js.map +1 -0
- package/dist/cjs/core/tracking/api-client.js +67 -0
- package/dist/cjs/core/tracking/api-client.js.map +1 -0
- package/dist/cjs/core/tracking/index.js +21 -0
- package/dist/cjs/core/tracking/index.js.map +1 -0
- package/dist/cjs/core/tracking/payload-builder.js +95 -0
- package/dist/cjs/core/tracking/payload-builder.js.map +1 -0
- package/dist/cjs/core/tracking/usage-tracker.js +83 -0
- package/dist/cjs/core/tracking/usage-tracker.js.map +1 -0
- package/dist/cjs/index.js +55 -59
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/function-parameters.js +14 -0
- package/dist/cjs/types/function-parameters.js.map +1 -0
- package/dist/cjs/types/index.js +20 -1
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/utils/constants.js +20 -0
- package/dist/cjs/utils/constants.js.map +1 -0
- package/dist/cjs/utils/error-handler.js +194 -0
- package/dist/cjs/utils/error-handler.js.map +1 -0
- package/dist/cjs/utils/metadata-builder.js +191 -0
- package/dist/cjs/utils/metadata-builder.js.map +1 -0
- package/dist/cjs/utils/stop-reason-mapper.js +74 -0
- package/dist/cjs/utils/stop-reason-mapper.js.map +1 -0
- package/dist/cjs/utils/transaction-id.js +19 -0
- package/dist/cjs/utils/transaction-id.js.map +1 -0
- package/dist/cjs/utils/url-builder.js +57 -0
- package/dist/cjs/utils/url-builder.js.map +1 -0
- package/dist/esm/core/client/index.js +5 -0
- package/dist/esm/core/client/index.js.map +1 -0
- package/dist/esm/core/client/manager.js +81 -0
- package/dist/esm/core/client/manager.js.map +1 -0
- package/dist/esm/core/config/index.js +11 -0
- package/dist/esm/core/config/index.js.map +1 -0
- package/dist/esm/core/config/loader.js +45 -0
- package/dist/esm/core/config/loader.js.map +1 -0
- package/dist/esm/core/config/manager.js +70 -0
- package/dist/esm/core/config/manager.js.map +1 -0
- package/dist/esm/core/config/validator.js +44 -0
- package/dist/esm/core/config/validator.js.map +1 -0
- package/dist/esm/core/middleware/index.js +7 -0
- package/dist/esm/core/middleware/index.js.map +1 -0
- package/dist/esm/core/middleware/interfaces.js +89 -0
- package/dist/esm/core/middleware/interfaces.js.map +1 -0
- package/dist/esm/core/middleware/revenium-client.js +37 -0
- package/dist/esm/core/middleware/revenium-client.js.map +1 -0
- package/dist/esm/core/middleware/streaming-wrapper.js +76 -0
- package/dist/esm/core/middleware/streaming-wrapper.js.map +1 -0
- package/dist/esm/core/providers/detector.js +34 -0
- package/dist/esm/core/providers/detector.js.map +1 -0
- package/dist/esm/core/providers/index.js +9 -0
- package/dist/esm/core/providers/index.js.map +1 -0
- package/dist/esm/core/tracking/api-client.js +64 -0
- package/dist/esm/core/tracking/api-client.js.map +1 -0
- package/dist/esm/core/tracking/index.js +13 -0
- package/dist/esm/core/tracking/index.js.map +1 -0
- package/dist/esm/core/tracking/payload-builder.js +92 -0
- package/dist/esm/core/tracking/payload-builder.js.map +1 -0
- package/dist/esm/core/tracking/usage-tracker.js +79 -0
- package/dist/esm/core/tracking/usage-tracker.js.map +1 -0
- package/dist/esm/index.js +42 -39
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/function-parameters.js +13 -0
- package/dist/esm/types/function-parameters.js.map +1 -0
- package/dist/esm/types/index.js +6 -2
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/utils/constants.js +17 -0
- package/dist/esm/utils/constants.js.map +1 -0
- package/dist/esm/utils/error-handler.js +182 -0
- package/dist/esm/utils/error-handler.js.map +1 -0
- package/dist/esm/utils/metadata-builder.js +183 -0
- package/dist/esm/utils/metadata-builder.js.map +1 -0
- package/dist/esm/utils/stop-reason-mapper.js +69 -0
- package/dist/esm/utils/stop-reason-mapper.js.map +1 -0
- package/dist/esm/utils/transaction-id.js +16 -0
- package/dist/esm/utils/transaction-id.js.map +1 -0
- package/dist/esm/utils/url-builder.js +53 -0
- package/dist/esm/utils/url-builder.js.map +1 -0
- package/dist/types/core/client/index.d.ts +5 -0
- package/dist/types/core/client/index.d.ts.map +1 -0
- package/dist/types/core/client/manager.d.ts +44 -0
- package/dist/types/core/client/manager.d.ts.map +1 -0
- package/dist/types/core/config/index.d.ts +10 -0
- package/dist/types/core/config/index.d.ts.map +1 -0
- package/dist/types/core/config/loader.d.ts +13 -0
- package/dist/types/core/config/loader.d.ts.map +1 -0
- package/dist/types/core/config/manager.d.ts +28 -0
- package/dist/types/core/config/manager.d.ts.map +1 -0
- package/dist/types/core/config/validator.d.ts +12 -0
- package/dist/types/core/config/validator.d.ts.map +1 -0
- package/dist/types/core/middleware/index.d.ts +7 -0
- package/dist/types/core/middleware/index.d.ts.map +1 -0
- package/dist/types/core/middleware/interfaces.d.ts +35 -0
- package/dist/types/core/middleware/interfaces.d.ts.map +1 -0
- package/dist/types/core/middleware/revenium-client.d.ts +25 -0
- package/dist/types/core/middleware/revenium-client.d.ts.map +1 -0
- package/dist/types/core/middleware/streaming-wrapper.d.ts +21 -0
- package/dist/types/core/middleware/streaming-wrapper.d.ts.map +1 -0
- package/dist/types/core/providers/detector.d.ts +24 -0
- package/dist/types/core/providers/detector.d.ts.map +1 -0
- package/dist/types/core/providers/index.d.ts +8 -0
- package/dist/types/core/providers/index.d.ts.map +1 -0
- package/dist/types/core/tracking/api-client.d.ts +17 -0
- package/dist/types/core/tracking/api-client.d.ts.map +1 -0
- package/dist/types/core/tracking/index.d.ts +11 -0
- package/dist/types/core/tracking/index.d.ts.map +1 -0
- package/dist/types/core/tracking/payload-builder.d.ts +24 -0
- package/dist/types/core/tracking/payload-builder.d.ts.map +1 -0
- package/dist/types/core/tracking/usage-tracker.d.ts +30 -0
- package/dist/types/core/tracking/usage-tracker.d.ts.map +1 -0
- package/dist/types/index.d.ts +50 -26
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/types/function-parameters.d.ts +185 -0
- package/dist/types/types/function-parameters.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +108 -129
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/utils/constants.d.ts +9 -0
- package/dist/types/utils/constants.d.ts.map +1 -0
- package/dist/types/utils/error-handler.d.ts +95 -0
- package/dist/types/utils/error-handler.d.ts.map +1 -0
- package/dist/types/utils/metadata-builder.d.ts +65 -0
- package/dist/types/utils/metadata-builder.d.ts.map +1 -0
- package/dist/types/utils/stop-reason-mapper.d.ts +29 -0
- package/dist/types/utils/stop-reason-mapper.d.ts.map +1 -0
- package/dist/types/utils/transaction-id.d.ts +14 -0
- package/dist/types/utils/transaction-id.d.ts.map +1 -0
- package/dist/types/utils/url-builder.d.ts +22 -0
- package/dist/types/utils/url-builder.d.ts.map +1 -0
- package/examples/README.md +226 -322
- package/examples/advanced.ts +123 -0
- package/examples/basic.ts +45 -50
- package/examples/getting_started.ts +41 -64
- package/examples/metadata.ts +68 -65
- package/examples/stream.ts +53 -0
- package/package.json +72 -72
- package/dist/cjs/constants.js +0 -70
- package/dist/cjs/constants.js.map +0 -1
- package/dist/cjs/core/config/perplexity-config.js +0 -45
- package/dist/cjs/core/config/perplexity-config.js.map +0 -1
- package/dist/cjs/core/config/revenium-config.js +0 -80
- package/dist/cjs/core/config/revenium-config.js.map +0 -1
- package/dist/cjs/core/tracking/metering.js +0 -211
- package/dist/cjs/core/tracking/metering.js.map +0 -1
- package/dist/cjs/core/wrapper/perplexity-client.js +0 -187
- package/dist/cjs/core/wrapper/perplexity-client.js.map +0 -1
- package/dist/cjs/utils/logger.js +0 -23
- package/dist/cjs/utils/logger.js.map +0 -1
- package/dist/esm/constants.js +0 -67
- package/dist/esm/constants.js.map +0 -1
- package/dist/esm/core/config/perplexity-config.js +0 -40
- package/dist/esm/core/config/perplexity-config.js.map +0 -1
- package/dist/esm/core/config/revenium-config.js +0 -72
- package/dist/esm/core/config/revenium-config.js.map +0 -1
- package/dist/esm/core/tracking/metering.js +0 -206
- package/dist/esm/core/tracking/metering.js.map +0 -1
- package/dist/esm/core/wrapper/perplexity-client.js +0 -180
- package/dist/esm/core/wrapper/perplexity-client.js.map +0 -1
- package/dist/esm/utils/logger.js +0 -20
- package/dist/esm/utils/logger.js.map +0 -1
- package/dist/types/constants.d.ts +0 -67
- package/dist/types/constants.d.ts.map +0 -1
- package/dist/types/core/config/perplexity-config.d.ts +0 -24
- package/dist/types/core/config/perplexity-config.d.ts.map +0 -1
- package/dist/types/core/config/revenium-config.d.ts +0 -37
- package/dist/types/core/config/revenium-config.d.ts.map +0 -1
- package/dist/types/core/tracking/metering.d.ts +0 -31
- package/dist/types/core/tracking/metering.d.ts.map +0 -1
- package/dist/types/core/wrapper/perplexity-client.d.ts +0 -32
- package/dist/types/core/wrapper/perplexity-client.d.ts.map +0 -1
- package/dist/types/utils/logger.d.ts +0 -10
- package/dist/types/utils/logger.d.ts.map +0 -1
- package/examples/advanced-features.ts +0 -148
- package/examples/chat.ts +0 -73
- package/examples/streaming.ts +0 -50
package/examples/basic.ts
CHANGED
|
@@ -1,50 +1,45 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Basic
|
|
3
|
-
*
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
// Display
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
console.log(
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
main().catch((error) => {
|
|
48
|
-
console.error("Error:", error.message);
|
|
49
|
-
process.exit(1);
|
|
50
|
-
});
|
|
1
|
+
/**
|
|
2
|
+
* Basic Example
|
|
3
|
+
* Demonstrates basic usage of Revenium Perplexity middleware.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { Initialize, GetClient, UsageMetadata } from "@revenium/perplexity";
|
|
7
|
+
|
|
8
|
+
async function main() {
|
|
9
|
+
// Initialize middleware
|
|
10
|
+
Initialize();
|
|
11
|
+
|
|
12
|
+
// Get client
|
|
13
|
+
const client = GetClient();
|
|
14
|
+
const metadata: UsageMetadata = {
|
|
15
|
+
organizationId: "org-basic-demo",
|
|
16
|
+
productId: "prod-perplexity-basic",
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
// Create chat completion
|
|
20
|
+
const response = await client
|
|
21
|
+
.chat()
|
|
22
|
+
.completions()
|
|
23
|
+
.create(
|
|
24
|
+
{
|
|
25
|
+
model: "sonar-pro",
|
|
26
|
+
messages: [
|
|
27
|
+
{
|
|
28
|
+
role: "user",
|
|
29
|
+
content:
|
|
30
|
+
"Say hello in Spanish and explain why Spanish is a beautiful language in 2-3 sentences.",
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
max_tokens: 1000,
|
|
34
|
+
},
|
|
35
|
+
metadata
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
// Display response
|
|
39
|
+
if (response.choices.length > 0) {
|
|
40
|
+
console.log(`Assistant: ${response.choices[0].message.content}`);
|
|
41
|
+
}
|
|
42
|
+
console.log("\nUsage data sent to Revenium! Check your dashboard");
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
main().catch(console.error);
|
|
@@ -1,64 +1,41 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Getting Started with Revenium Perplexity Middleware
|
|
3
|
-
*
|
|
4
|
-
* This
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
// Create a simple chat completion
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
// Organization & billing
|
|
43
|
-
organizationId: 'my-customers-name',
|
|
44
|
-
subscriptionId: 'plan-enterprise-2024',
|
|
45
|
-
|
|
46
|
-
// Product & task tracking
|
|
47
|
-
productId: 'my-product',
|
|
48
|
-
taskType: 'qa',
|
|
49
|
-
agent: 'customer-support',
|
|
50
|
-
|
|
51
|
-
// Session tracking
|
|
52
|
-
traceId: 'session-' + Date.now(),
|
|
53
|
-
|
|
54
|
-
// Quality metrics
|
|
55
|
-
responseQualityScore: 0.95
|
|
56
|
-
}
|
|
57
|
-
*/
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
console.log("Response:", result.content);
|
|
61
|
-
console.log("\nUsage:", result.usage);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
main().catch(console.error);
|
|
1
|
+
/**
|
|
2
|
+
* Getting Started with Revenium Perplexity Middleware
|
|
3
|
+
*
|
|
4
|
+
* This example shows the new Initialize/GetClient pattern.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Initialize, GetClient, UsageMetadata } from "@revenium/perplexity";
|
|
8
|
+
|
|
9
|
+
async function main() {
|
|
10
|
+
Initialize();
|
|
11
|
+
|
|
12
|
+
// Get client
|
|
13
|
+
const client = GetClient();
|
|
14
|
+
const metadata: UsageMetadata = {
|
|
15
|
+
organizationId: "org-getting-started",
|
|
16
|
+
productId: "prod-perplexity-getting-started",
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
// Create a simple chat completion
|
|
20
|
+
const response = await client
|
|
21
|
+
.chat()
|
|
22
|
+
.completions()
|
|
23
|
+
.create(
|
|
24
|
+
{
|
|
25
|
+
model: "sonar-pro",
|
|
26
|
+
messages: [
|
|
27
|
+
{
|
|
28
|
+
role: "user",
|
|
29
|
+
content: "What is artificial intelligence?",
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
max_tokens: 500,
|
|
33
|
+
},
|
|
34
|
+
metadata
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
console.log("Assistant:", response.choices[0]?.message?.content);
|
|
38
|
+
console.log("\nUsage:", response.usage);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
main().catch(console.error);
|
package/examples/metadata.ts
CHANGED
|
@@ -1,65 +1,68 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Metadata Example
|
|
3
|
+
* Demonstrates advanced metadata usage with Revenium Perplexity middleware.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { Initialize, GetClient, UsageMetadata } from "@revenium/perplexity";
|
|
7
|
+
|
|
8
|
+
async function main() {
|
|
9
|
+
// Initialize middleware
|
|
10
|
+
Initialize();
|
|
11
|
+
|
|
12
|
+
// Get client
|
|
13
|
+
const client = GetClient();
|
|
14
|
+
|
|
15
|
+
// Optional metadata for advanced reporting, lineage tracking, and cost allocation
|
|
16
|
+
const metadata: UsageMetadata = {
|
|
17
|
+
// Organization & billing
|
|
18
|
+
organizationId: "org-metadata-demo",
|
|
19
|
+
subscriptionId: "plan-premium-2025",
|
|
20
|
+
|
|
21
|
+
// Product & task tracking
|
|
22
|
+
productId: "ai-assistant",
|
|
23
|
+
taskType: "explanation-request",
|
|
24
|
+
agent: "perplexity-metadata-chat-node",
|
|
25
|
+
|
|
26
|
+
// Session tracking
|
|
27
|
+
traceId: "session-" + Date.now(),
|
|
28
|
+
|
|
29
|
+
// Quality metrics
|
|
30
|
+
responseQualityScore: 0.95, // 0.0-1.0 scale
|
|
31
|
+
|
|
32
|
+
// User tracking
|
|
33
|
+
subscriber: {
|
|
34
|
+
id: "user-12345",
|
|
35
|
+
email: "developer@company.com",
|
|
36
|
+
credential: {
|
|
37
|
+
name: "api-key-prod",
|
|
38
|
+
value: "key-abc-123",
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const response = await client
|
|
44
|
+
.chat()
|
|
45
|
+
.completions()
|
|
46
|
+
.create(
|
|
47
|
+
{
|
|
48
|
+
model: "sonar-pro",
|
|
49
|
+
messages: [
|
|
50
|
+
{
|
|
51
|
+
role: "user",
|
|
52
|
+
content:
|
|
53
|
+
"Say hello in Spanish and explain why Spanish is a beautiful language in 2-3 sentences.",
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
max_tokens: 1000,
|
|
57
|
+
},
|
|
58
|
+
metadata
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
// Display response
|
|
62
|
+
if (response.choices.length > 0) {
|
|
63
|
+
console.log(`Assistant: ${response.choices[0].message.content}`);
|
|
64
|
+
}
|
|
65
|
+
console.log("\nUsage data sent to Revenium! Check your dashboard");
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
main().catch(console.error);
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Streaming Example with Revenium Perplexity Middleware (New Go-Aligned API)
|
|
3
|
+
*
|
|
4
|
+
* This example shows how to use streaming with the new API.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Initialize, GetClient } from "@revenium/perplexity";
|
|
8
|
+
|
|
9
|
+
async function main() {
|
|
10
|
+
// Initialize from environment variables
|
|
11
|
+
Initialize();
|
|
12
|
+
|
|
13
|
+
// Get client
|
|
14
|
+
const client = GetClient();
|
|
15
|
+
|
|
16
|
+
console.log("Streaming response:\n");
|
|
17
|
+
|
|
18
|
+
// Create a streaming chat completion
|
|
19
|
+
const stream = await client
|
|
20
|
+
.chat()
|
|
21
|
+
.completions()
|
|
22
|
+
.createStreaming(
|
|
23
|
+
{
|
|
24
|
+
model: "sonar-pro",
|
|
25
|
+
messages: [
|
|
26
|
+
{
|
|
27
|
+
role: "user",
|
|
28
|
+
content: "Write a short poem about AI",
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
max_tokens: 200,
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
// Optional metadata
|
|
35
|
+
organizationId: "my-customers-name",
|
|
36
|
+
productId: "my-product",
|
|
37
|
+
subscriber: {
|
|
38
|
+
id: "user-123",
|
|
39
|
+
email: "user@example.com",
|
|
40
|
+
},
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
// Process stream
|
|
45
|
+
for await (const chunk of stream) {
|
|
46
|
+
const content = chunk.choices[0]?.delta?.content || "";
|
|
47
|
+
process.stdout.write(content);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
console.log("\n\nUsage data sent to Revenium! Check your dashboard");
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
main().catch(console.error);
|
package/package.json
CHANGED
|
@@ -1,72 +1,72 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@revenium/perplexity",
|
|
3
|
-
"version": "2.0.
|
|
4
|
-
"description": "NodeJS middleware for Perplexity AI API with Revenium metering",
|
|
5
|
-
"homepage": "https://github.com/revenium/revenium-middleware-perplexity-node#readme",
|
|
6
|
-
"bugs": {
|
|
7
|
-
"url": "https://github.com/revenium/revenium-middleware-perplexity-node/issues"
|
|
8
|
-
},
|
|
9
|
-
"repository": {
|
|
10
|
-
"type": "git",
|
|
11
|
-
"url": "git+https://github.com/revenium/revenium-middleware-perplexity-node.git"
|
|
12
|
-
},
|
|
13
|
-
"main": "dist/cjs/index.js",
|
|
14
|
-
"module": "dist/esm/index.js",
|
|
15
|
-
"types": "dist/types/index.d.ts",
|
|
16
|
-
"exports": {
|
|
17
|
-
".": {
|
|
18
|
-
"import": "./dist/esm/index.js",
|
|
19
|
-
"require": "./dist/cjs/index.js",
|
|
20
|
-
"types": "./dist/types/index.d.ts"
|
|
21
|
-
}
|
|
22
|
-
},
|
|
23
|
-
"files": [
|
|
24
|
-
"dist/",
|
|
25
|
-
"examples/",
|
|
26
|
-
"README.md",
|
|
27
|
-
"CHANGELOG.md",
|
|
28
|
-
"LICENSE"
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
"
|
|
33
|
-
"build:
|
|
34
|
-
"build:
|
|
35
|
-
"build": "
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"example:
|
|
39
|
-
"example:
|
|
40
|
-
"example:
|
|
41
|
-
"example:
|
|
42
|
-
"example:
|
|
43
|
-
"test": "npm run example:getting-started && npm run example:
|
|
44
|
-
},
|
|
45
|
-
"keywords": [
|
|
46
|
-
"revenium",
|
|
47
|
-
"middleware",
|
|
48
|
-
"perplexity",
|
|
49
|
-
"ai",
|
|
50
|
-
"chat",
|
|
51
|
-
"completion",
|
|
52
|
-
"metering",
|
|
53
|
-
"monitoring",
|
|
54
|
-
"typescript"
|
|
55
|
-
],
|
|
56
|
-
"author": "Revenium",
|
|
57
|
-
"license": "MIT",
|
|
58
|
-
"type": "commonjs",
|
|
59
|
-
"engines": {
|
|
60
|
-
"node": ">=20.0.0"
|
|
61
|
-
},
|
|
62
|
-
"dependencies": {
|
|
63
|
-
"dotenv": "^17.2.2",
|
|
64
|
-
"openai": "^5.23.1",
|
|
65
|
-
"tsx": "^4.19.2",
|
|
66
|
-
"typescript": "^5.9.2",
|
|
67
|
-
"uuid": "^13.0.0"
|
|
68
|
-
},
|
|
69
|
-
"devDependencies": {
|
|
70
|
-
"@types/node": "^24.7.1"
|
|
71
|
-
}
|
|
72
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@revenium/perplexity",
|
|
3
|
+
"version": "2.0.6",
|
|
4
|
+
"description": "NodeJS middleware for Perplexity AI API with Revenium metering",
|
|
5
|
+
"homepage": "https://github.com/revenium/revenium-middleware-perplexity-node#readme",
|
|
6
|
+
"bugs": {
|
|
7
|
+
"url": "https://github.com/revenium/revenium-middleware-perplexity-node/issues"
|
|
8
|
+
},
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/revenium/revenium-middleware-perplexity-node.git"
|
|
12
|
+
},
|
|
13
|
+
"main": "dist/cjs/index.js",
|
|
14
|
+
"module": "dist/esm/index.js",
|
|
15
|
+
"types": "dist/types/index.d.ts",
|
|
16
|
+
"exports": {
|
|
17
|
+
".": {
|
|
18
|
+
"import": "./dist/esm/index.js",
|
|
19
|
+
"require": "./dist/cjs/index.js",
|
|
20
|
+
"types": "./dist/types/index.d.ts"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"dist/",
|
|
25
|
+
"examples/",
|
|
26
|
+
"README.md",
|
|
27
|
+
"CHANGELOG.md",
|
|
28
|
+
"LICENSE",
|
|
29
|
+
"SECURITY.md"
|
|
30
|
+
],
|
|
31
|
+
"scripts": {
|
|
32
|
+
"clean": "rm -rf dist",
|
|
33
|
+
"build:esm": "tsc -p tsconfig.esm.json",
|
|
34
|
+
"build:cjs": "tsc -p tsconfig.cjs.json",
|
|
35
|
+
"build:types": "tsc -p tsconfig.types.json",
|
|
36
|
+
"build": "npm run build:esm && npm run build:cjs && npm run build:types",
|
|
37
|
+
"prepublishOnly": "npm run build",
|
|
38
|
+
"example:getting-started": "npx tsx examples/getting_started.ts",
|
|
39
|
+
"example:basic": "npx tsx examples/basic.ts",
|
|
40
|
+
"example:metadata": "npx tsx examples/metadata.ts",
|
|
41
|
+
"example:advanced": "npx tsx examples/advanced.ts",
|
|
42
|
+
"example:stream": "npx tsx examples/stream.ts",
|
|
43
|
+
"test": "npm run example:getting-started && npm run example:stream"
|
|
44
|
+
},
|
|
45
|
+
"keywords": [
|
|
46
|
+
"revenium",
|
|
47
|
+
"middleware",
|
|
48
|
+
"perplexity",
|
|
49
|
+
"ai",
|
|
50
|
+
"chat",
|
|
51
|
+
"completion",
|
|
52
|
+
"metering",
|
|
53
|
+
"monitoring",
|
|
54
|
+
"typescript"
|
|
55
|
+
],
|
|
56
|
+
"author": "Revenium",
|
|
57
|
+
"license": "MIT",
|
|
58
|
+
"type": "commonjs",
|
|
59
|
+
"engines": {
|
|
60
|
+
"node": ">=20.0.0"
|
|
61
|
+
},
|
|
62
|
+
"dependencies": {
|
|
63
|
+
"dotenv": "^17.2.2",
|
|
64
|
+
"openai": "^5.23.1",
|
|
65
|
+
"tsx": "^4.19.2",
|
|
66
|
+
"typescript": "^5.9.2",
|
|
67
|
+
"uuid": "^13.0.0"
|
|
68
|
+
},
|
|
69
|
+
"devDependencies": {
|
|
70
|
+
"@types/node": "^24.7.1"
|
|
71
|
+
}
|
|
72
|
+
}
|
package/dist/cjs/constants.js
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Configuration constants for Revenium Perplexity middleware
|
|
4
|
-
* Centralizes all magic numbers and default values
|
|
5
|
-
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.API_ENDPOINTS = exports.DEFAULT_CONFIG = exports.PERPLEXITY_PATTERNS = exports.MIDDLEWARE_INFO = void 0;
|
|
8
|
-
/**
|
|
9
|
-
* Middleware identification
|
|
10
|
-
*
|
|
11
|
-
* Per Revenium API spec (https://revenium.readme.io/reference/meter_ai_completion):
|
|
12
|
-
* "middlewareSource: Identifier of the Revenium middleware package or SDK that
|
|
13
|
-
* captured and submitted this AI completion metadata. This field is AUTOMATICALLY
|
|
14
|
-
* SET by Revenium's middleware packages (e.g., 'revenium-openai-python',
|
|
15
|
-
* 'revenium-anthropic-node')."
|
|
16
|
-
*/
|
|
17
|
-
exports.MIDDLEWARE_INFO = {
|
|
18
|
-
/** Package name */
|
|
19
|
-
NAME: "@revenium/perplexity",
|
|
20
|
-
/** Package version */
|
|
21
|
-
VERSION: "2.0.4",
|
|
22
|
-
/** Full middleware source identifier for API tracking */
|
|
23
|
-
SOURCE: "@revenium/perplexity-2.0.4",
|
|
24
|
-
};
|
|
25
|
-
/**
|
|
26
|
-
* Perplexity model patterns and API response mappings
|
|
27
|
-
*
|
|
28
|
-
* Per Revenium API spec (https://revenium.readme.io/reference/meter_ai_completion):
|
|
29
|
-
* stopReason enum: "END", "END_SEQUENCE", "TIMEOUT", "TOKEN_LIMIT",
|
|
30
|
-
* "COST_LIMIT", "COMPLETION_LIMIT", "ERROR", "CANCELLED"
|
|
31
|
-
*
|
|
32
|
-
* We map Perplexity's finish_reason values to these Revenium enums.
|
|
33
|
-
* Only provider-reported values are mapped; middleware-level values
|
|
34
|
-
* (TIMEOUT, COST_LIMIT, etc.) are not applicable to provider responses.
|
|
35
|
-
*/
|
|
36
|
-
exports.PERPLEXITY_PATTERNS = {
|
|
37
|
-
/** Known Perplexity/OpenAI finish reasons */
|
|
38
|
-
FINISH_REASONS: {
|
|
39
|
-
STOP: "stop",
|
|
40
|
-
LENGTH: "length",
|
|
41
|
-
TOOL_CALLS: "tool_calls",
|
|
42
|
-
CONTENT_FILTER: "content_filter",
|
|
43
|
-
FUNCTION_CALL: "function_call",
|
|
44
|
-
},
|
|
45
|
-
/** Revenium stop reason mappings from Perplexity finish_reason to Revenium enum */
|
|
46
|
-
REVENIUM_STOP_REASON_MAP: {
|
|
47
|
-
stop: "END",
|
|
48
|
-
length: "TOKEN_LIMIT",
|
|
49
|
-
tool_calls: "END",
|
|
50
|
-
content_filter: "END",
|
|
51
|
-
function_call: "END",
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
/**
|
|
55
|
-
* Default configuration values
|
|
56
|
-
*/
|
|
57
|
-
exports.DEFAULT_CONFIG = {
|
|
58
|
-
/** Default Revenium API base URL */
|
|
59
|
-
REVENIUM_BASE_URL: "https://api.revenium.ai",
|
|
60
|
-
/** Default Perplexity API base URL */
|
|
61
|
-
PERPLEXITY_BASE_URL: "https://api.perplexity.ai",
|
|
62
|
-
};
|
|
63
|
-
/**
|
|
64
|
-
* API endpoints
|
|
65
|
-
*/
|
|
66
|
-
exports.API_ENDPOINTS = {
|
|
67
|
-
/** Revenium AI completions endpoint */
|
|
68
|
-
AI_COMPLETIONS: "/meter/v2/ai/completions",
|
|
69
|
-
};
|
|
70
|
-
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH;;;;;;;;GAQG;AACU,QAAA,eAAe,GAAG;IAC7B,mBAAmB;IACnB,IAAI,EAAE,sBAAsB;IAC5B,sBAAsB;IACtB,OAAO,EAAE,OAAO;IAChB,yDAAyD;IACzD,MAAM,EAAE,4BAA4B;CAC5B,CAAC;AAEX;;;;;;;;;;GAUG;AACU,QAAA,mBAAmB,GAAG;IACjC,6CAA6C;IAC7C,cAAc,EAAE;QACd,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,QAAQ;QAChB,UAAU,EAAE,YAAY;QACxB,cAAc,EAAE,gBAAgB;QAChC,aAAa,EAAE,eAAe;KACtB;IAEV,mFAAmF;IACnF,wBAAwB,EAAE;QACxB,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,aAAa;QACrB,UAAU,EAAE,KAAK;QACjB,cAAc,EAAE,KAAK;QACrB,aAAa,EAAE,KAAK;KACZ;CACF,CAAC;AAEX;;GAEG;AACU,QAAA,cAAc,GAAG;IAC5B,oCAAoC;IACpC,iBAAiB,EAAE,yBAAyB;IAE5C,sCAAsC;IACtC,mBAAmB,EAAE,2BAA2B;CACxC,CAAC;AAEX;;GAEG;AACU,QAAA,aAAa,GAAG;IAC3B,uCAAuC;IACvC,cAAc,EAAE,0BAA0B;CAClC,CAAC"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Perplexity Configuration Module
|
|
4
|
-
* Manages Perplexity API configuration
|
|
5
|
-
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.initializePerplexityFromEnv = initializePerplexityFromEnv;
|
|
8
|
-
exports.initializePerplexity = initializePerplexity;
|
|
9
|
-
exports.getPerplexityConfig = getPerplexityConfig;
|
|
10
|
-
const logger_1 = require("../../utils/logger");
|
|
11
|
-
let perplexityConfig = null;
|
|
12
|
-
/**
|
|
13
|
-
* Initialize Perplexity configuration from environment variables
|
|
14
|
-
*/
|
|
15
|
-
function initializePerplexityFromEnv() {
|
|
16
|
-
const apiKey = process.env.PERPLEXITY_API_KEY;
|
|
17
|
-
const baseUrl = process.env.PERPLEXITY_API_BASE_URL || "https://api.perplexity.ai";
|
|
18
|
-
if (!apiKey) {
|
|
19
|
-
throw new Error("PERPLEXITY_API_KEY environment variable is required but not set");
|
|
20
|
-
}
|
|
21
|
-
perplexityConfig = {
|
|
22
|
-
apiKey,
|
|
23
|
-
baseUrl,
|
|
24
|
-
};
|
|
25
|
-
logger_1.logger.info("Perplexity configuration initialized successfully");
|
|
26
|
-
return perplexityConfig;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Initialize Perplexity configuration with custom values
|
|
30
|
-
*/
|
|
31
|
-
function initializePerplexity(config) {
|
|
32
|
-
perplexityConfig = {
|
|
33
|
-
apiKey: config.apiKey,
|
|
34
|
-
baseUrl: config.baseUrl || "https://api.perplexity.ai",
|
|
35
|
-
};
|
|
36
|
-
logger_1.logger.info("Perplexity configuration initialized with custom config");
|
|
37
|
-
return perplexityConfig;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Get current Perplexity configuration
|
|
41
|
-
*/
|
|
42
|
-
function getPerplexityConfig() {
|
|
43
|
-
return perplexityConfig;
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=perplexity-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"perplexity-config.js","sourceRoot":"","sources":["../../../../src/core/config/perplexity-config.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAcH,kEAkBC;AAKD,oDAWC;AAKD,kDAEC;AArDD,+CAA4C;AAO5C,IAAI,gBAAgB,GAA4B,IAAI,CAAC;AAErD;;GAEG;AACH,SAAgB,2BAA2B;IACzC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC9C,MAAM,OAAO,GACX,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,2BAA2B,CAAC;IAErE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,iEAAiE,CAClE,CAAC;IACJ,CAAC;IAED,gBAAgB,GAAG;QACjB,MAAM;QACN,OAAO;KACR,CAAC;IAEF,eAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;IACjE,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,MAGpC;IACC,gBAAgB,GAAG;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,2BAA2B;KACvD,CAAC;IAEF,eAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IACvE,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB;IACjC,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}
|