@revenium/perplexity 2.0.4 → 2.0.5
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 +32 -33
- package/README.md +120 -101
- package/SECURITY.md +34 -0
- package/dist/cjs/constants/models.js +38 -0
- package/dist/cjs/constants/models.js.map +1 -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 +85 -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 +45 -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 +60 -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/constants/models.js +35 -0
- package/dist/esm/constants/models.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 +78 -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 +42 -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 +46 -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/constants/models.d.ts +39 -0
- package/dist/types/constants/models.d.ts.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 +56 -27
- 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 +124 -220
- package/examples/advanced.ts +123 -0
- package/examples/basic.ts +32 -37
- package/examples/getting_started.ts +26 -49
- package/examples/metadata.ts +51 -48
- package/examples/stream.ts +53 -0
- package/package.json +9 -10
- 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
1
|
/**
|
|
2
|
-
* Basic
|
|
3
|
-
*
|
|
4
|
-
* This example demonstrates how to use the Perplexity middleware
|
|
5
|
-
* to create a simple chat completion with Revenium metering.
|
|
2
|
+
* Basic Example
|
|
3
|
+
* Demonstrates basic usage of Revenium Perplexity middleware.
|
|
6
4
|
*/
|
|
7
5
|
|
|
8
|
-
import {
|
|
9
|
-
initializeReveniumFromEnv,
|
|
10
|
-
initializePerplexityFromEnv,
|
|
11
|
-
createChatCompletion,
|
|
12
|
-
UsageMetadata,
|
|
13
|
-
} from "../src";
|
|
6
|
+
import { Initialize, GetClient, UsageMetadata } from "@revenium/perplexity";
|
|
14
7
|
|
|
15
8
|
async function main() {
|
|
16
|
-
// Initialize
|
|
17
|
-
|
|
18
|
-
initializePerplexityFromEnv();
|
|
9
|
+
// Initialize middleware
|
|
10
|
+
Initialize();
|
|
19
11
|
|
|
20
|
-
//
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
12
|
+
// Get client
|
|
13
|
+
const client = GetClient();
|
|
14
|
+
const metadata: UsageMetadata = {
|
|
15
|
+
organizationId: "org-basic-demo",
|
|
16
|
+
productId: "prod-perplexity-basic",
|
|
24
17
|
};
|
|
25
18
|
|
|
26
|
-
|
|
27
|
-
|
|
19
|
+
// Create chat completion
|
|
20
|
+
const response = await client
|
|
21
|
+
.chat()
|
|
22
|
+
.completions()
|
|
23
|
+
.create(
|
|
28
24
|
{
|
|
29
|
-
|
|
30
|
-
|
|
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,
|
|
31
34
|
},
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
maxTokens: 100,
|
|
35
|
-
usageMetadata,
|
|
36
|
-
});
|
|
35
|
+
metadata
|
|
36
|
+
);
|
|
37
37
|
|
|
38
|
-
// Display
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
console.log(
|
|
43
|
-
`Tokens Used: ${result.usage.totalTokens} (prompt: ${result.usage.promptTokens}, completion: ${result.usage.completionTokens})`
|
|
44
|
-
);
|
|
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");
|
|
45
43
|
}
|
|
46
44
|
|
|
47
|
-
main().catch(
|
|
48
|
-
console.error("Error:", error.message);
|
|
49
|
-
process.exit(1);
|
|
50
|
-
});
|
|
45
|
+
main().catch(console.error);
|
|
@@ -1,64 +1,41 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Getting Started with Revenium Perplexity Middleware
|
|
3
3
|
*
|
|
4
|
-
* This
|
|
5
|
-
* Shows basic usage with all metadata options documented.
|
|
4
|
+
* This example shows the new Initialize/GetClient pattern.
|
|
6
5
|
*/
|
|
7
6
|
|
|
8
|
-
import {
|
|
9
|
-
initializeReveniumFromEnv,
|
|
10
|
-
initializePerplexityFromEnv,
|
|
11
|
-
createChatCompletion,
|
|
12
|
-
} from "../src";
|
|
7
|
+
import { Initialize, GetClient, UsageMetadata } from "@revenium/perplexity";
|
|
13
8
|
|
|
14
9
|
async function main() {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
18
|
|
|
19
19
|
// Create a simple chat completion
|
|
20
|
-
const
|
|
21
|
-
|
|
20
|
+
const response = await client
|
|
21
|
+
.chat()
|
|
22
|
+
.completions()
|
|
23
|
+
.create(
|
|
22
24
|
{
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
usageMetadata: {
|
|
32
|
-
// User identification
|
|
33
|
-
subscriber: {
|
|
34
|
-
id: 'user-123',
|
|
35
|
-
email: 'user@example.com',
|
|
36
|
-
credential: {
|
|
37
|
-
name: 'api-key-prod',
|
|
38
|
-
value: 'key-abc-123'
|
|
39
|
-
}
|
|
25
|
+
model: "sonar-pro",
|
|
26
|
+
messages: [
|
|
27
|
+
{
|
|
28
|
+
role: "user",
|
|
29
|
+
content: "What is artificial intelligence?",
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
max_tokens: 500,
|
|
40
33
|
},
|
|
34
|
+
metadata
|
|
35
|
+
);
|
|
41
36
|
|
|
42
|
-
|
|
43
|
-
|
|
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);
|
|
37
|
+
console.log("Assistant:", response.choices[0]?.message?.content);
|
|
38
|
+
console.log("\nUsage:", response.usage);
|
|
62
39
|
}
|
|
63
40
|
|
|
64
41
|
main().catch(console.error);
|
package/examples/metadata.ts
CHANGED
|
@@ -1,65 +1,68 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* This example demonstrates how to pass comprehensive metadata
|
|
5
|
-
* for enhanced tracking, analytics, and metering purposes.
|
|
6
|
-
*
|
|
7
|
-
* For complete metadata options and details, see:
|
|
8
|
-
* https://revenium.readme.io/reference/meter_ai_completion
|
|
2
|
+
* Metadata Example
|
|
3
|
+
* Demonstrates advanced metadata usage with Revenium Perplexity middleware.
|
|
9
4
|
*/
|
|
10
5
|
|
|
11
|
-
import {
|
|
12
|
-
initializeReveniumFromEnv,
|
|
13
|
-
initializePerplexityFromEnv,
|
|
14
|
-
createChatCompletion,
|
|
15
|
-
UsageMetadata,
|
|
16
|
-
} from "../src";
|
|
6
|
+
import { Initialize, GetClient, UsageMetadata } from "@revenium/perplexity";
|
|
17
7
|
|
|
18
8
|
async function main() {
|
|
19
|
-
// Initialize
|
|
20
|
-
|
|
21
|
-
initializePerplexityFromEnv();
|
|
9
|
+
// Initialize middleware
|
|
10
|
+
Initialize();
|
|
22
11
|
|
|
23
|
-
//
|
|
24
|
-
const
|
|
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
|
|
25
33
|
subscriber: {
|
|
26
|
-
id: "user-
|
|
27
|
-
email: "
|
|
34
|
+
id: "user-12345",
|
|
35
|
+
email: "developer@company.com",
|
|
28
36
|
credential: {
|
|
29
|
-
name: "api-key",
|
|
30
|
-
value: "key-
|
|
37
|
+
name: "api-key-prod",
|
|
38
|
+
value: "key-abc-123",
|
|
31
39
|
},
|
|
32
40
|
},
|
|
33
|
-
organizationId: "org-example",
|
|
34
|
-
productId: "product-premium",
|
|
35
|
-
agent: "calculator-bot-v1",
|
|
36
|
-
traceId: "trace-abc-123",
|
|
37
41
|
};
|
|
38
42
|
|
|
39
|
-
const
|
|
40
|
-
|
|
43
|
+
const response = await client
|
|
44
|
+
.chat()
|
|
45
|
+
.completions()
|
|
46
|
+
.create(
|
|
41
47
|
{
|
|
42
|
-
|
|
43
|
-
|
|
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,
|
|
44
57
|
},
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
maxTokens: 200,
|
|
48
|
-
usageMetadata,
|
|
49
|
-
});
|
|
58
|
+
metadata
|
|
59
|
+
);
|
|
50
60
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
);
|
|
57
|
-
console.log(
|
|
58
|
-
"Metadata tracked: subscriber, organization, product, agent, trace"
|
|
59
|
-
);
|
|
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");
|
|
60
66
|
}
|
|
61
67
|
|
|
62
|
-
main().catch(
|
|
63
|
-
console.error("Error:", error.message);
|
|
64
|
-
process.exit(1);
|
|
65
|
-
});
|
|
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,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@revenium/perplexity",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.5",
|
|
4
4
|
"description": "NodeJS middleware for Perplexity AI API with Revenium metering",
|
|
5
5
|
"homepage": "https://github.com/revenium/revenium-middleware-perplexity-node#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -25,7 +25,8 @@
|
|
|
25
25
|
"examples/",
|
|
26
26
|
"README.md",
|
|
27
27
|
"CHANGELOG.md",
|
|
28
|
-
"LICENSE"
|
|
28
|
+
"LICENSE",
|
|
29
|
+
"SECURITY.md"
|
|
29
30
|
],
|
|
30
31
|
"scripts": {
|
|
31
32
|
"clean": "rm -rf dist",
|
|
@@ -34,13 +35,12 @@
|
|
|
34
35
|
"build:types": "tsc -p tsconfig.types.json",
|
|
35
36
|
"build": "npm run clean && npm run build:esm && npm run build:cjs && npm run build:types",
|
|
36
37
|
"prepublishOnly": "npm run build",
|
|
37
|
-
"example:getting-started": "tsx examples/getting_started.ts",
|
|
38
|
-
"example:basic": "tsx examples/basic.ts",
|
|
39
|
-
"example:
|
|
40
|
-
"example:
|
|
41
|
-
"example:
|
|
42
|
-
"
|
|
43
|
-
"test": "npm run example:getting-started && npm run example:basic && npm run example:streaming && npm run example:chat && npm run example:metadata && npm run example:advanced"
|
|
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
44
|
},
|
|
45
45
|
"keywords": [
|
|
46
46
|
"revenium",
|
|
@@ -55,7 +55,6 @@
|
|
|
55
55
|
],
|
|
56
56
|
"author": "Revenium",
|
|
57
57
|
"license": "MIT",
|
|
58
|
-
"type": "commonjs",
|
|
59
58
|
"engines": {
|
|
60
59
|
"node": ">=20.0.0"
|
|
61
60
|
},
|
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"}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Revenium Configuration Module
|
|
4
|
-
* Manages Revenium metering configuration and initialization
|
|
5
|
-
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.initializeReveniumFromEnv = initializeReveniumFromEnv;
|
|
8
|
-
exports.initializeRevenium = initializeRevenium;
|
|
9
|
-
exports.getReveniumConfig = getReveniumConfig;
|
|
10
|
-
exports.isReveniumEnabled = isReveniumEnabled;
|
|
11
|
-
exports.disableRevenium = disableRevenium;
|
|
12
|
-
exports.enableRevenium = enableRevenium;
|
|
13
|
-
const logger_1 = require("../../utils/logger");
|
|
14
|
-
let reveniumConfig = null;
|
|
15
|
-
/**
|
|
16
|
-
* Initialize Revenium configuration from environment variables
|
|
17
|
-
*/
|
|
18
|
-
function initializeReveniumFromEnv() {
|
|
19
|
-
const meteringApiKey = process.env.REVENIUM_METERING_API_KEY?.trim().replace(/^["']|["']$/g, "");
|
|
20
|
-
const meteringBaseUrl = process.env.REVENIUM_METERING_BASE_URL?.trim().replace(/^["']|["']$/g, "");
|
|
21
|
-
if (!meteringApiKey || !meteringBaseUrl) {
|
|
22
|
-
logger_1.logger.warn("Revenium metering disabled: Missing REVENIUM_METERING_API_KEY or REVENIUM_METERING_BASE_URL");
|
|
23
|
-
reveniumConfig = {
|
|
24
|
-
meteringApiKey: "",
|
|
25
|
-
meteringBaseUrl: "",
|
|
26
|
-
enabled: false,
|
|
27
|
-
};
|
|
28
|
-
return reveniumConfig;
|
|
29
|
-
}
|
|
30
|
-
reveniumConfig = {
|
|
31
|
-
meteringApiKey,
|
|
32
|
-
meteringBaseUrl,
|
|
33
|
-
enabled: true,
|
|
34
|
-
};
|
|
35
|
-
logger_1.logger.info("Revenium configuration initialized successfully");
|
|
36
|
-
logger_1.logger.debug(`Metering Base URL: ${meteringBaseUrl}`);
|
|
37
|
-
return reveniumConfig;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Initialize Revenium configuration with custom values
|
|
41
|
-
*/
|
|
42
|
-
function initializeRevenium(config) {
|
|
43
|
-
reveniumConfig = {
|
|
44
|
-
...config,
|
|
45
|
-
enabled: true,
|
|
46
|
-
};
|
|
47
|
-
logger_1.logger.info("Revenium configuration initialized with custom config");
|
|
48
|
-
return reveniumConfig;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Get current Revenium configuration
|
|
52
|
-
*/
|
|
53
|
-
function getReveniumConfig() {
|
|
54
|
-
return reveniumConfig;
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Check if Revenium is enabled
|
|
58
|
-
*/
|
|
59
|
-
function isReveniumEnabled() {
|
|
60
|
-
return reveniumConfig?.enabled ?? false;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Disable Revenium metering
|
|
64
|
-
*/
|
|
65
|
-
function disableRevenium() {
|
|
66
|
-
if (reveniumConfig) {
|
|
67
|
-
reveniumConfig.enabled = false;
|
|
68
|
-
logger_1.logger.info("Revenium metering disabled");
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Enable Revenium metering
|
|
73
|
-
*/
|
|
74
|
-
function enableRevenium() {
|
|
75
|
-
if (reveniumConfig) {
|
|
76
|
-
reveniumConfig.enabled = true;
|
|
77
|
-
logger_1.logger.info("Revenium metering enabled");
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
//# sourceMappingURL=revenium-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"revenium-config.js","sourceRoot":"","sources":["../../../../src/core/config/revenium-config.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAeH,8DA6BC;AAKD,gDAWC;AAKD,8CAEC;AAKD,8CAEC;AAKD,0CAKC;AAKD,wCAKC;AA5FD,+CAA4C;AAQ5C,IAAI,cAAc,GAA0B,IAAI,CAAC;AAEjD;;GAEG;AACH,SAAgB,yBAAyB;IACvC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,IAAI,EAAE,CAAC,OAAO,CAC1E,cAAc,EACd,EAAE,CACH,CAAC;IACF,MAAM,eAAe,GACnB,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAE7E,IAAI,CAAC,cAAc,IAAI,CAAC,eAAe,EAAE,CAAC;QACxC,eAAM,CAAC,IAAI,CACT,6FAA6F,CAC9F,CAAC;QACF,cAAc,GAAG;YACf,cAAc,EAAE,EAAE;YAClB,eAAe,EAAE,EAAE;YACnB,OAAO,EAAE,KAAK;SACf,CAAC;QACF,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,cAAc,GAAG;QACf,cAAc;QACd,eAAe;QACf,OAAO,EAAE,IAAI;KACd,CAAC;IAEF,eAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;IAC/D,eAAM,CAAC,KAAK,CAAC,sBAAsB,eAAe,EAAE,CAAC,CAAC;IACtD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,MAGlC;IACC,cAAc,GAAG;QACf,GAAG,MAAM;QACT,OAAO,EAAE,IAAI;KACd,CAAC;IAEF,eAAM,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;IACrE,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,cAAc,EAAE,OAAO,IAAI,KAAK,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe;IAC7B,IAAI,cAAc,EAAE,CAAC;QACnB,cAAc,CAAC,OAAO,GAAG,KAAK,CAAC;QAC/B,eAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc;IAC5B,IAAI,cAAc,EAAE,CAAC;QACnB,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;QAC9B,eAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC"}
|