@revenium/perplexity 1.0.10 → 1.0.14
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 +2 -2
- package/README.md +448 -566
- package/examples/basic.ts +17 -0
- package/examples/chat-completions.ts +22 -0
- package/examples/enhanced.ts +20 -0
- package/examples/streaming.ts +24 -0
- package/package.json +45 -61
- package/playground/basic.js +7 -17
- package/playground/enhanced.js +9 -22
- package/playground/streaming.js +10 -26
- package/src/index.ts +1 -35
- package/src/interfaces/chatCompletionRequest.ts +9 -0
- package/src/interfaces/credential.ts +4 -0
- package/src/interfaces/meteringRequest.ts +14 -0
- package/src/{types/metering.ts → interfaces/meteringResponse.ts} +3 -3
- package/src/interfaces/operation.ts +4 -0
- package/src/{types → interfaces}/subscriber.ts +1 -1
- package/src/interfaces/tokenCounts.ts +7 -0
- package/src/{types → interfaces}/usageMetadata.ts +1 -1
- package/src/middleware.ts +151 -0
- package/src/models/Logger.ts +5 -5
- package/src/models/Metering.ts +86 -0
- package/src/utils/calculateDurationMs.ts +1 -1
- package/src/utils/constants/constants.ts +9 -16
- package/src/utils/constants/logLevels.ts +1 -0
- package/src/utils/constants/messages.ts +8 -32
- package/src/utils/constants/models.ts +20 -0
- package/src/utils/extractTokenCount.ts +26 -0
- package/src/utils/generateTransactionId.ts +1 -1
- package/src/utils/index.ts +39 -12
- package/src/utils/loadEnv.ts +8 -0
- package/src/utils/safeExtract.ts +60 -11
- package/tsconfig.json +10 -18
- package/dist/index.d.ts +0 -8
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -40
- package/dist/index.js.map +0 -1
- package/dist/models/Exception/ApiResponseError.d.ts +0 -6
- package/dist/models/Exception/ApiResponseError.d.ts.map +0 -1
- package/dist/models/Exception/ApiResponseError.js +0 -13
- package/dist/models/Exception/ApiResponseError.js.map +0 -1
- package/dist/models/Exception/ConfigurationError.d.ts +0 -4
- package/dist/models/Exception/ConfigurationError.d.ts.map +0 -1
- package/dist/models/Exception/ConfigurationError.js +0 -11
- package/dist/models/Exception/ConfigurationError.js.map +0 -1
- package/dist/models/Exception/MeteringError.d.ts +0 -5
- package/dist/models/Exception/MeteringError.d.ts.map +0 -1
- package/dist/models/Exception/MeteringError.js +0 -12
- package/dist/models/Exception/MeteringError.js.map +0 -1
- package/dist/models/Exception/MiddlewareActivationError.d.ts +0 -4
- package/dist/models/Exception/MiddlewareActivationError.d.ts.map +0 -1
- package/dist/models/Exception/MiddlewareActivationError.js +0 -11
- package/dist/models/Exception/MiddlewareActivationError.js.map +0 -1
- package/dist/models/Exception/StreamTrackingError.d.ts +0 -4
- package/dist/models/Exception/StreamTrackingError.d.ts.map +0 -1
- package/dist/models/Exception/StreamTrackingError.js +0 -11
- package/dist/models/Exception/StreamTrackingError.js.map +0 -1
- package/dist/models/Exception/TokenCountingError.d.ts +0 -4
- package/dist/models/Exception/TokenCountingError.d.ts.map +0 -1
- package/dist/models/Exception/TokenCountingError.js +0 -11
- package/dist/models/Exception/TokenCountingError.js.map +0 -1
- package/dist/models/Exception/index.d.ts +0 -7
- package/dist/models/Exception/index.d.ts.map +0 -1
- package/dist/models/Exception/index.js +0 -23
- package/dist/models/Exception/index.js.map +0 -1
- package/dist/models/Logger.d.ts +0 -10
- package/dist/models/Logger.d.ts.map +0 -1
- package/dist/models/Logger.js +0 -36
- package/dist/models/Logger.js.map +0 -1
- package/dist/models/index.d.ts +0 -3
- package/dist/models/index.d.ts.map +0 -1
- package/dist/models/index.js +0 -19
- package/dist/models/index.js.map +0 -1
- package/dist/perplexity-ai/client.d.ts +0 -31
- package/dist/perplexity-ai/client.d.ts.map +0 -1
- package/dist/perplexity-ai/client.js +0 -75
- package/dist/perplexity-ai/client.js.map +0 -1
- package/dist/perplexity-ai/index.d.ts +0 -3
- package/dist/perplexity-ai/index.d.ts.map +0 -1
- package/dist/perplexity-ai/index.js +0 -19
- package/dist/perplexity-ai/index.js.map +0 -1
- package/dist/perplexity-ai/middleware.d.ts +0 -2
- package/dist/perplexity-ai/middleware.d.ts.map +0 -1
- package/dist/perplexity-ai/middleware.js +0 -195
- package/dist/perplexity-ai/middleware.js.map +0 -1
- package/dist/types/context.d.ts +0 -9
- package/dist/types/context.d.ts.map +0 -1
- package/dist/types/context.js +0 -3
- package/dist/types/context.js.map +0 -1
- package/dist/types/index.d.ts +0 -12
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -28
- package/dist/types/index.js.map +0 -1
- package/dist/types/metering.d.ts +0 -28
- package/dist/types/metering.d.ts.map +0 -1
- package/dist/types/metering.js +0 -3
- package/dist/types/metering.js.map +0 -1
- package/dist/types/modelInfo.d.ts +0 -6
- package/dist/types/modelInfo.d.ts.map +0 -1
- package/dist/types/modelInfo.js +0 -3
- package/dist/types/modelInfo.js.map +0 -1
- package/dist/types/operation.d.ts +0 -5
- package/dist/types/operation.d.ts.map +0 -1
- package/dist/types/operation.js +0 -9
- package/dist/types/operation.js.map +0 -1
- package/dist/types/perplexityConfig.d.ts +0 -5
- package/dist/types/perplexityConfig.d.ts.map +0 -1
- package/dist/types/perplexityConfig.js +0 -3
- package/dist/types/perplexityConfig.js.map +0 -1
- package/dist/types/provider.d.ts +0 -4
- package/dist/types/provider.d.ts.map +0 -1
- package/dist/types/provider.js +0 -8
- package/dist/types/provider.js.map +0 -1
- package/dist/types/reveniumConfig.d.ts +0 -6
- package/dist/types/reveniumConfig.d.ts.map +0 -1
- package/dist/types/reveniumConfig.js +0 -3
- package/dist/types/reveniumConfig.js.map +0 -1
- package/dist/types/streamTracker.d.ts +0 -9
- package/dist/types/streamTracker.d.ts.map +0 -1
- package/dist/types/streamTracker.js +0 -3
- package/dist/types/streamTracker.js.map +0 -1
- package/dist/types/subscriber.d.ts +0 -9
- package/dist/types/subscriber.d.ts.map +0 -1
- package/dist/types/subscriber.js +0 -3
- package/dist/types/subscriber.js.map +0 -1
- package/dist/types/tokenCounts.d.ts +0 -6
- package/dist/types/tokenCounts.d.ts.map +0 -1
- package/dist/types/tokenCounts.js +0 -3
- package/dist/types/tokenCounts.js.map +0 -1
- package/dist/types/usageData.d.ts +0 -16
- package/dist/types/usageData.d.ts.map +0 -1
- package/dist/types/usageData.js +0 -3
- package/dist/types/usageData.js.map +0 -1
- package/dist/types/usageMetadata.d.ts +0 -14
- package/dist/types/usageMetadata.d.ts.map +0 -1
- package/dist/types/usageMetadata.js +0 -3
- package/dist/types/usageMetadata.js.map +0 -1
- package/dist/utils/activeMiddleware.d.ts +0 -2
- package/dist/utils/activeMiddleware.d.ts.map +0 -1
- package/dist/utils/activeMiddleware.js +0 -24
- package/dist/utils/activeMiddleware.js.map +0 -1
- package/dist/utils/askConsole.d.ts +0 -2
- package/dist/utils/askConsole.d.ts.map +0 -1
- package/dist/utils/askConsole.js +0 -20
- package/dist/utils/askConsole.js.map +0 -1
- package/dist/utils/calculateDurationMs.d.ts +0 -2
- package/dist/utils/calculateDurationMs.d.ts.map +0 -1
- package/dist/utils/calculateDurationMs.js +0 -7
- package/dist/utils/calculateDurationMs.js.map +0 -1
- package/dist/utils/constants/constants.d.ts +0 -9
- package/dist/utils/constants/constants.d.ts.map +0 -1
- package/dist/utils/constants/constants.js +0 -19
- package/dist/utils/constants/constants.js.map +0 -1
- package/dist/utils/constants/messages.d.ts +0 -19
- package/dist/utils/constants/messages.d.ts.map +0 -1
- package/dist/utils/constants/messages.js +0 -22
- package/dist/utils/constants/messages.js.map +0 -1
- package/dist/utils/createMeteringRequest.d.ts +0 -3
- package/dist/utils/createMeteringRequest.d.ts.map +0 -1
- package/dist/utils/createMeteringRequest.js +0 -10
- package/dist/utils/createMeteringRequest.js.map +0 -1
- package/dist/utils/createPerplexityMetadata.d.ts +0 -3
- package/dist/utils/createPerplexityMetadata.d.ts.map +0 -1
- package/dist/utils/createPerplexityMetadata.js +0 -12
- package/dist/utils/createPerplexityMetadata.js.map +0 -1
- package/dist/utils/extractModelName.d.ts +0 -2
- package/dist/utils/extractModelName.d.ts.map +0 -1
- package/dist/utils/extractModelName.js +0 -15
- package/dist/utils/extractModelName.js.map +0 -1
- package/dist/utils/extractPerplexityTokenCounts.d.ts +0 -3
- package/dist/utils/extractPerplexityTokenCounts.d.ts.map +0 -1
- package/dist/utils/extractPerplexityTokenCounts.js +0 -17
- package/dist/utils/extractPerplexityTokenCounts.js.map +0 -1
- package/dist/utils/extractStopReason.d.ts +0 -2
- package/dist/utils/extractStopReason.d.ts.map +0 -1
- package/dist/utils/extractStopReason.js +0 -14
- package/dist/utils/extractStopReason.js.map +0 -1
- package/dist/utils/extractUsageMetadata.d.ts +0 -3
- package/dist/utils/extractUsageMetadata.d.ts.map +0 -1
- package/dist/utils/extractUsageMetadata.js +0 -15
- package/dist/utils/extractUsageMetadata.js.map +0 -1
- package/dist/utils/formatTimestamp.d.ts +0 -2
- package/dist/utils/formatTimestamp.d.ts.map +0 -1
- package/dist/utils/formatTimestamp.js +0 -7
- package/dist/utils/formatTimestamp.js.map +0 -1
- package/dist/utils/generateTransactionId.d.ts +0 -2
- package/dist/utils/generateTransactionId.d.ts.map +0 -1
- package/dist/utils/generateTransactionId.js +0 -8
- package/dist/utils/generateTransactionId.js.map +0 -1
- package/dist/utils/getEnv.d.ts +0 -4
- package/dist/utils/getEnv.d.ts.map +0 -1
- package/dist/utils/getEnv.js +0 -16
- package/dist/utils/getEnv.js.map +0 -1
- package/dist/utils/index.d.ts +0 -13
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -29
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/safeExtract.d.ts +0 -2
- package/dist/utils/safeExtract.d.ts.map +0 -1
- package/dist/utils/safeExtract.js +0 -22
- package/dist/utils/safeExtract.js.map +0 -1
- package/dist/utils/sendMeteringData.d.ts +0 -3
- package/dist/utils/sendMeteringData.d.ts.map +0 -1
- package/dist/utils/sendMeteringData.js +0 -35
- package/dist/utils/sendMeteringData.js.map +0 -1
- package/dist/utils/verifyLogVerbose.d.ts +0 -2
- package/dist/utils/verifyLogVerbose.d.ts.map +0 -1
- package/dist/utils/verifyLogVerbose.js +0 -10
- package/dist/utils/verifyLogVerbose.js.map +0 -1
- package/examples/basic-client-example.ts +0 -36
- package/examples/metadata-example.ts +0 -97
- package/examples/multiple-models-example.ts +0 -65
- package/examples/openai-client-example.ts +0 -76
- package/examples/perplexity_basic_example.ts +0 -24
- package/examples/perplexity_middleware_example.ts +0 -222
- package/examples/run-all-examples.ts +0 -118
- package/examples/simple-test.ts +0 -278
- package/examples/streaming-example.ts +0 -46
- package/playground/custom-config.js +0 -82
- package/playground/metadata.js +0 -94
- package/playground/multiple-models.js +0 -62
- package/playground/openai-client.js +0 -73
- package/src/models/Exception/ApiResponseError.ts +0 -6
- package/src/models/Exception/ConfigurationError.ts +0 -6
- package/src/models/Exception/MeteringError.ts +0 -6
- package/src/models/Exception/MiddlewareActivationError.ts +0 -6
- package/src/models/Exception/StreamTrackingError.ts +0 -6
- package/src/models/Exception/TokenCountingError.ts +0 -6
- package/src/models/Exception/index.ts +0 -6
- package/src/models/index.ts +0 -2
- package/src/perplexity-ai/client.ts +0 -100
- package/src/perplexity-ai/index.ts +0 -2
- package/src/perplexity-ai/middleware.ts +0 -297
- package/src/types/context.ts +0 -9
- package/src/types/index.ts +0 -11
- package/src/types/modelInfo.ts +0 -5
- package/src/types/operation.ts +0 -4
- package/src/types/perplexityConfig.ts +0 -4
- package/src/types/provider.ts +0 -3
- package/src/types/reveniumConfig.ts +0 -5
- package/src/types/streamTracker.ts +0 -9
- package/src/types/tokenCounts.ts +0 -5
- package/src/types/usageData.ts +0 -16
- package/src/utils/activeMiddleware.ts +0 -34
- package/src/utils/askConsole.ts +0 -15
- package/src/utils/createMeteringRequest.ts +0 -16
- package/src/utils/createPerplexityMetadata.ts +0 -11
- package/src/utils/extractModelName.ts +0 -14
- package/src/utils/extractPerplexityTokenCounts.ts +0 -16
- package/src/utils/extractStopReason.ts +0 -13
- package/src/utils/extractUsageMetadata.ts +0 -15
- package/src/utils/getEnv.ts +0 -16
- package/src/utils/sendMeteringData.ts +0 -46
- package/src/utils/verifyLogVerbose.ts +0 -7
- /package/src/utils/{formatTimestamp.ts → formatTimeStamp.ts} +0 -0
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { createPerplexityClient } from "@revenium/perplexity";
|
|
2
|
-
|
|
3
|
-
async function customConfigExample() {
|
|
4
|
-
console.log("\n⚙️ Perplexity AI - Custom Configuration Example");
|
|
5
|
-
console.log("=".repeat(50));
|
|
6
|
-
|
|
7
|
-
try {
|
|
8
|
-
// Example 1: Using environment variables (default)
|
|
9
|
-
console.log("\n1️⃣ Using environment variables:");
|
|
10
|
-
const defaultClient = createPerplexityClient();
|
|
11
|
-
|
|
12
|
-
const response1 = await defaultClient.createChatCompletion({
|
|
13
|
-
model: "sonar-pro",
|
|
14
|
-
messages: [
|
|
15
|
-
{
|
|
16
|
-
role: "user",
|
|
17
|
-
content: "Hello from default configuration!",
|
|
18
|
-
},
|
|
19
|
-
],
|
|
20
|
-
});
|
|
21
|
-
console.log("✅ Default config response:", response1.choices[0]?.message?.content?.substring(0, 50) + "...");
|
|
22
|
-
|
|
23
|
-
// Example 2: Custom API key only
|
|
24
|
-
console.log("\n2️⃣ Using custom API key:");
|
|
25
|
-
const customKeyClient = createPerplexityClient(process.env.PERPLEXITY_API_KEY);
|
|
26
|
-
|
|
27
|
-
const response2 = await customKeyClient.createChatCompletion({
|
|
28
|
-
model: "sonar-pro",
|
|
29
|
-
messages: [
|
|
30
|
-
{
|
|
31
|
-
role: "user",
|
|
32
|
-
content: "Hello from custom API key configuration!",
|
|
33
|
-
},
|
|
34
|
-
],
|
|
35
|
-
});
|
|
36
|
-
console.log("✅ Custom key response:", response2.choices[0]?.message?.content?.substring(0, 50) + "...");
|
|
37
|
-
|
|
38
|
-
// Example 3: Custom API key and base URL
|
|
39
|
-
console.log("\n3️⃣ Using custom API key and base URL:");
|
|
40
|
-
const fullCustomClient = createPerplexityClient(
|
|
41
|
-
process.env.PERPLEXITY_API_KEY,
|
|
42
|
-
"https://api.perplexity.ai"
|
|
43
|
-
);
|
|
44
|
-
|
|
45
|
-
const response3 = await fullCustomClient.createChatCompletion({
|
|
46
|
-
model: "sonar-pro",
|
|
47
|
-
messages: [
|
|
48
|
-
{
|
|
49
|
-
role: "user",
|
|
50
|
-
content: "Hello from fully custom configuration!",
|
|
51
|
-
},
|
|
52
|
-
],
|
|
53
|
-
});
|
|
54
|
-
console.log("✅ Full custom response:", response3.choices[0]?.message?.content?.substring(0, 50) + "...");
|
|
55
|
-
|
|
56
|
-
// Example 4: Custom base URL only (API key from env)
|
|
57
|
-
console.log("\n4️⃣ Using custom base URL only:");
|
|
58
|
-
const customUrlClient = createPerplexityClient(
|
|
59
|
-
undefined,
|
|
60
|
-
"https://api.perplexity.ai"
|
|
61
|
-
);
|
|
62
|
-
|
|
63
|
-
const response4 = await customUrlClient.createChatCompletion({
|
|
64
|
-
model: "sonar-pro",
|
|
65
|
-
messages: [
|
|
66
|
-
{
|
|
67
|
-
role: "user",
|
|
68
|
-
content: "Hello from custom URL configuration!",
|
|
69
|
-
},
|
|
70
|
-
],
|
|
71
|
-
});
|
|
72
|
-
console.log("✅ Custom URL response:", response4.choices[0]?.message?.content?.substring(0, 50) + "...");
|
|
73
|
-
|
|
74
|
-
console.log("\n🎉 All configuration examples completed successfully!");
|
|
75
|
-
console.log("📊 All requests tracked by middleware regardless of configuration");
|
|
76
|
-
|
|
77
|
-
} catch (error) {
|
|
78
|
-
console.error("❌ Error:", error);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
customConfigExample();
|
package/playground/metadata.js
DELETED
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import { createPerplexityClient } from "@revenium/perplexity";
|
|
2
|
-
|
|
3
|
-
async function metadataExample() {
|
|
4
|
-
console.log("\n📊 Perplexity AI - Metadata Tracking Example");
|
|
5
|
-
console.log("=".repeat(50));
|
|
6
|
-
|
|
7
|
-
try {
|
|
8
|
-
// Create client instance
|
|
9
|
-
const client = createPerplexityClient();
|
|
10
|
-
|
|
11
|
-
// Example 1: Basic metadata
|
|
12
|
-
console.log("\n1️⃣ Basic metadata tracking:");
|
|
13
|
-
const basicResponse = await client.createChatCompletion({
|
|
14
|
-
model: "sonar-pro",
|
|
15
|
-
messages: [
|
|
16
|
-
{
|
|
17
|
-
role: "user",
|
|
18
|
-
content: "Analyze this quarterly report for key insights",
|
|
19
|
-
},
|
|
20
|
-
],
|
|
21
|
-
usageMetadata: {
|
|
22
|
-
traceId: "conv-28a7e9d4",
|
|
23
|
-
taskType: "document-analysis",
|
|
24
|
-
subscriberEmail: "user@example.com",
|
|
25
|
-
organizationId: "acme-corp",
|
|
26
|
-
subscriptionId: "premium-plan",
|
|
27
|
-
},
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
console.log(
|
|
31
|
-
"✅ Response:",
|
|
32
|
-
basicResponse.choices[0]?.message?.content?.substring(0, 100) + "..."
|
|
33
|
-
);
|
|
34
|
-
|
|
35
|
-
// Example 2: Advanced metadata
|
|
36
|
-
console.log("\n2️⃣ Advanced metadata tracking:");
|
|
37
|
-
const advancedResponse = await client.createChatCompletion({
|
|
38
|
-
model: "sonar-pro",
|
|
39
|
-
messages: [
|
|
40
|
-
{
|
|
41
|
-
role: "user",
|
|
42
|
-
content: "What are the latest developments in AI?",
|
|
43
|
-
},
|
|
44
|
-
],
|
|
45
|
-
usageMetadata: {
|
|
46
|
-
traceId: "conv-advanced-123",
|
|
47
|
-
taskType: "research",
|
|
48
|
-
subscriberId: "user-12345",
|
|
49
|
-
subscriberCredentialName: "api-key-1",
|
|
50
|
-
productId: "business-intelligence",
|
|
51
|
-
agent: "research-assistant-v2",
|
|
52
|
-
responseQualityScore: 0.95,
|
|
53
|
-
},
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
console.log(
|
|
57
|
-
"✅ Response:",
|
|
58
|
-
advancedResponse.choices[0]?.message?.content?.substring(0, 100) + "..."
|
|
59
|
-
);
|
|
60
|
-
|
|
61
|
-
// Example 3: Streaming with metadata
|
|
62
|
-
console.log("\n3️⃣ Streaming with metadata:");
|
|
63
|
-
const stream = await client.createStreamingChatCompletion({
|
|
64
|
-
model: "sonar-pro",
|
|
65
|
-
messages: [
|
|
66
|
-
{
|
|
67
|
-
role: "user",
|
|
68
|
-
content: "Write a creative story about AI",
|
|
69
|
-
},
|
|
70
|
-
],
|
|
71
|
-
usageMetadata: {
|
|
72
|
-
traceId: "conv-streaming-456",
|
|
73
|
-
taskType: "creative-writing",
|
|
74
|
-
organizationId: "creative-studio",
|
|
75
|
-
agent: "story-generator",
|
|
76
|
-
},
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
console.log("📝 Streaming response with metadata:");
|
|
80
|
-
for await (const chunk of stream) {
|
|
81
|
-
const content = chunk.choices[0]?.delta?.content;
|
|
82
|
-
if (content) {
|
|
83
|
-
process.stdout.write(content);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
console.log("\n\n🎉 All metadata examples completed successfully!");
|
|
88
|
-
console.log("📊 All usage tracked with custom metadata");
|
|
89
|
-
} catch (error) {
|
|
90
|
-
console.error("❌ Error:", error);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
metadataExample();
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { createPerplexityClient } from "@revenium/perplexity";
|
|
2
|
-
|
|
3
|
-
async function multipleModelsExample() {
|
|
4
|
-
console.log("\n🔧 Perplexity AI - Multiple Models Example");
|
|
5
|
-
console.log("=".repeat(50));
|
|
6
|
-
|
|
7
|
-
try {
|
|
8
|
-
// Create client instance
|
|
9
|
-
const client = createPerplexityClient();
|
|
10
|
-
|
|
11
|
-
// Test different prompts with the same model
|
|
12
|
-
const testCases = [
|
|
13
|
-
{
|
|
14
|
-
name: "sonar-pro (Quantum Computing)",
|
|
15
|
-
description: "Latest and most capable model",
|
|
16
|
-
prompt: "Explain quantum computing in simple terms",
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
name: "sonar-pro (AI Developments)",
|
|
20
|
-
description: "Latest and most capable model",
|
|
21
|
-
prompt: "What are the latest developments in AI?",
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
name: "sonar-pro (Weather)",
|
|
25
|
-
description: "Latest and most capable model",
|
|
26
|
-
prompt: "What is the weather like today?",
|
|
27
|
-
},
|
|
28
|
-
];
|
|
29
|
-
|
|
30
|
-
for (const testCase of testCases) {
|
|
31
|
-
console.log(`\n🤖 Testing: ${testCase.name}`);
|
|
32
|
-
console.log(`📝 Description: ${testCase.description}`);
|
|
33
|
-
console.log("-".repeat(40));
|
|
34
|
-
|
|
35
|
-
try {
|
|
36
|
-
const response = await client.createChatCompletion({
|
|
37
|
-
model: "sonar-pro",
|
|
38
|
-
messages: [
|
|
39
|
-
{
|
|
40
|
-
role: "user",
|
|
41
|
-
content: testCase.prompt,
|
|
42
|
-
},
|
|
43
|
-
],
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
console.log("✅ Response:");
|
|
47
|
-
console.log(response.choices[0]?.message?.content?.substring(0, 200) + "...");
|
|
48
|
-
console.log("📊 Usage tracked by middleware");
|
|
49
|
-
|
|
50
|
-
} catch (error) {
|
|
51
|
-
console.log(`❌ Error with ${testCase.name}:`, error);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
console.log("\n🎉 Multiple models example completed!");
|
|
56
|
-
|
|
57
|
-
} catch (error) {
|
|
58
|
-
console.error("❌ Error:", error);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
multipleModelsExample();
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { OpenAI } from "openai";
|
|
2
|
-
|
|
3
|
-
// Import middleware to activate automatic tracking
|
|
4
|
-
import "@revenium/perplexity";
|
|
5
|
-
|
|
6
|
-
async function openaiClientExample() {
|
|
7
|
-
console.log("\n🤖 Perplexity AI - OpenAI Client Example");
|
|
8
|
-
console.log("=".repeat(50));
|
|
9
|
-
|
|
10
|
-
try {
|
|
11
|
-
// Create OpenAI client configured for Perplexity (like in basic example)
|
|
12
|
-
const client = new OpenAI({
|
|
13
|
-
apiKey: process.env.PERPLEXITY_API_KEY,
|
|
14
|
-
baseURL: "https://api.perplexity.ai",
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
console.log("✅ OpenAI client configured for Perplexity AI");
|
|
18
|
-
console.log("📊 Middleware automatically tracking all requests");
|
|
19
|
-
|
|
20
|
-
// Test different types of requests
|
|
21
|
-
console.log("\n1️⃣ Basic chat completion:");
|
|
22
|
-
const basicResponse = await client.chat.completions.create({
|
|
23
|
-
model: "sonar-pro",
|
|
24
|
-
messages: [
|
|
25
|
-
{
|
|
26
|
-
role: "user",
|
|
27
|
-
content: "What is the meaning of life, the universe and everything?",
|
|
28
|
-
},
|
|
29
|
-
],
|
|
30
|
-
});
|
|
31
|
-
console.log("✅ Response:", basicResponse.choices[0]?.message?.content?.substring(0, 100) + "...");
|
|
32
|
-
|
|
33
|
-
console.log("\n2️⃣ Streaming chat completion:");
|
|
34
|
-
const stream = await client.chat.completions.create({
|
|
35
|
-
model: "sonar-pro",
|
|
36
|
-
messages: [
|
|
37
|
-
{
|
|
38
|
-
role: "user",
|
|
39
|
-
content: "Write a short poem about AI",
|
|
40
|
-
},
|
|
41
|
-
],
|
|
42
|
-
stream: true,
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
console.log("📝 Streaming response:");
|
|
46
|
-
for await (const chunk of stream) {
|
|
47
|
-
const content = chunk.choices[0]?.delta?.content;
|
|
48
|
-
if (content) {
|
|
49
|
-
process.stdout.write(content);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
console.log("\n\n3️⃣ Different prompt:");
|
|
54
|
-
const differentResponse = await client.chat.completions.create({
|
|
55
|
-
model: "sonar-pro",
|
|
56
|
-
messages: [
|
|
57
|
-
{
|
|
58
|
-
role: "user",
|
|
59
|
-
content: "Explain machine learning in one sentence",
|
|
60
|
-
},
|
|
61
|
-
],
|
|
62
|
-
});
|
|
63
|
-
console.log("✅ Response:", differentResponse.choices[0]?.message?.content);
|
|
64
|
-
|
|
65
|
-
console.log("\n🎉 All examples completed successfully!");
|
|
66
|
-
console.log("📊 All usage automatically tracked by middleware");
|
|
67
|
-
|
|
68
|
-
} catch (error) {
|
|
69
|
-
console.error("❌ Error:", error);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
openaiClientExample();
|
package/src/models/index.ts
DELETED
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { OpenAI } from "openai";
|
|
2
|
-
import type { ChatCompletionMessageParam } from "openai/resources/chat/completions";
|
|
3
|
-
import { Logger } from "../models";
|
|
4
|
-
import {
|
|
5
|
-
PERPLEXITY_CHAT_COMPLETION_FAILED_MESSAGE,
|
|
6
|
-
PERPLEXITY_CLIENT_INITIALIZED_MESSAGE,
|
|
7
|
-
PERPLEXITY_GET_MODELS_FAILED_MESSAGE,
|
|
8
|
-
PERPLEXITY_REQUIRED_API_KEY_MESSAGE,
|
|
9
|
-
PERPLEXITY_STREAMING_CHAT_COMPLETION_FAILED_MESSAGE,
|
|
10
|
-
} from "../utils/constants/messages";
|
|
11
|
-
|
|
12
|
-
// Import middleware to activate automatic tracking
|
|
13
|
-
import "./middleware";
|
|
14
|
-
import { CURRENT_PERPLEXITY_BASE_URL } from "../utils/constants/constants";
|
|
15
|
-
|
|
16
|
-
//Perplexity AI Client with middleware integration
|
|
17
|
-
export class PerplexityClient {
|
|
18
|
-
private client: OpenAI;
|
|
19
|
-
|
|
20
|
-
constructor(apiKey?: string, baseUrl?: string) {
|
|
21
|
-
const perplexityApiKey = apiKey || process.env.PERPLEXITY_API_KEY;
|
|
22
|
-
|
|
23
|
-
if (!perplexityApiKey) {
|
|
24
|
-
throw new Error(PERPLEXITY_REQUIRED_API_KEY_MESSAGE);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
this.client = new OpenAI({
|
|
28
|
-
apiKey: perplexityApiKey,
|
|
29
|
-
baseURL: baseUrl ?? CURRENT_PERPLEXITY_BASE_URL,
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
Logger.info(PERPLEXITY_CLIENT_INITIALIZED_MESSAGE);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
//Create a chat completion
|
|
36
|
-
async createChatCompletion(params: {
|
|
37
|
-
model: string;
|
|
38
|
-
messages: ChatCompletionMessageParam[];
|
|
39
|
-
stream?: false;
|
|
40
|
-
usageMetadata?: any;
|
|
41
|
-
[key: string]: any;
|
|
42
|
-
}) {
|
|
43
|
-
try {
|
|
44
|
-
// Remove usageMetadata from params as it's not part of OpenAI API
|
|
45
|
-
const { usageMetadata, ...openaiParams } = params;
|
|
46
|
-
const response = await this.client.chat.completions.create(openaiParams);
|
|
47
|
-
return response;
|
|
48
|
-
} catch (error) {
|
|
49
|
-
Logger.error(PERPLEXITY_CHAT_COMPLETION_FAILED_MESSAGE, { error });
|
|
50
|
-
throw error;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
//Create a streaming chat completion
|
|
55
|
-
async createStreamingChatCompletion(params: {
|
|
56
|
-
model: string;
|
|
57
|
-
messages: ChatCompletionMessageParam[];
|
|
58
|
-
usageMetadata?: any;
|
|
59
|
-
[key: string]: any;
|
|
60
|
-
}) {
|
|
61
|
-
try {
|
|
62
|
-
// Remove usageMetadata from params as it's not part of OpenAI API
|
|
63
|
-
const { usageMetadata, ...openaiParams } = params;
|
|
64
|
-
const stream = await this.client.chat.completions.create({
|
|
65
|
-
...openaiParams,
|
|
66
|
-
stream: true,
|
|
67
|
-
});
|
|
68
|
-
return stream;
|
|
69
|
-
} catch (error) {
|
|
70
|
-
Logger.error(PERPLEXITY_STREAMING_CHAT_COMPLETION_FAILED_MESSAGE, {
|
|
71
|
-
error,
|
|
72
|
-
});
|
|
73
|
-
throw error;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
//Get available models
|
|
78
|
-
async getModels() {
|
|
79
|
-
try {
|
|
80
|
-
const models = await this.client.models.list();
|
|
81
|
-
return models;
|
|
82
|
-
} catch (error) {
|
|
83
|
-
Logger.error(PERPLEXITY_GET_MODELS_FAILED_MESSAGE, { error });
|
|
84
|
-
throw error;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Create a Perplexity client instance
|
|
91
|
-
*/
|
|
92
|
-
export function createPerplexityClient(
|
|
93
|
-
apiKey?: string,
|
|
94
|
-
baseUrl?: string
|
|
95
|
-
): PerplexityClient {
|
|
96
|
-
return new PerplexityClient(apiKey, baseUrl);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
// Export the OpenAI client for advanced usage
|
|
100
|
-
export { OpenAI };
|