@revenium/perplexity 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +367 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/models/Exception/ApiResponseError.d.ts +6 -0
- package/dist/models/Exception/ApiResponseError.d.ts.map +1 -0
- package/dist/models/Exception/ApiResponseError.js +13 -0
- package/dist/models/Exception/ApiResponseError.js.map +1 -0
- package/dist/models/Exception/ConfigurationError.d.ts +4 -0
- package/dist/models/Exception/ConfigurationError.d.ts.map +1 -0
- package/dist/models/Exception/ConfigurationError.js +11 -0
- package/dist/models/Exception/ConfigurationError.js.map +1 -0
- package/dist/models/Exception/MeteringError.d.ts +5 -0
- package/dist/models/Exception/MeteringError.d.ts.map +1 -0
- package/dist/models/Exception/MeteringError.js +12 -0
- package/dist/models/Exception/MeteringError.js.map +1 -0
- package/dist/models/Exception/MiddlewareActivationError.d.ts +4 -0
- package/dist/models/Exception/MiddlewareActivationError.d.ts.map +1 -0
- package/dist/models/Exception/MiddlewareActivationError.js +11 -0
- package/dist/models/Exception/MiddlewareActivationError.js.map +1 -0
- package/dist/models/Exception/StreamTrackingError.d.ts +4 -0
- package/dist/models/Exception/StreamTrackingError.d.ts.map +1 -0
- package/dist/models/Exception/StreamTrackingError.js +11 -0
- package/dist/models/Exception/StreamTrackingError.js.map +1 -0
- package/dist/models/Exception/TokenCountingError.d.ts +4 -0
- package/dist/models/Exception/TokenCountingError.d.ts.map +1 -0
- package/dist/models/Exception/TokenCountingError.js +11 -0
- package/dist/models/Exception/TokenCountingError.js.map +1 -0
- package/dist/models/Exception/index.d.ts +7 -0
- package/dist/models/Exception/index.d.ts.map +1 -0
- package/dist/models/Exception/index.js +23 -0
- package/dist/models/Exception/index.js.map +1 -0
- package/dist/models/Logger.d.ts +10 -0
- package/dist/models/Logger.d.ts.map +1 -0
- package/dist/models/Logger.js +36 -0
- package/dist/models/Logger.js.map +1 -0
- package/dist/models/index.d.ts +3 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +19 -0
- package/dist/models/index.js.map +1 -0
- package/dist/perplexity-ai/client.d.ts +31 -0
- package/dist/perplexity-ai/client.d.ts.map +1 -0
- package/dist/perplexity-ai/client.js +75 -0
- package/dist/perplexity-ai/client.js.map +1 -0
- package/dist/perplexity-ai/index.d.ts +3 -0
- package/dist/perplexity-ai/index.d.ts.map +1 -0
- package/dist/perplexity-ai/index.js +19 -0
- package/dist/perplexity-ai/index.js.map +1 -0
- package/dist/perplexity-ai/middleware.d.ts +2 -0
- package/dist/perplexity-ai/middleware.d.ts.map +1 -0
- package/dist/perplexity-ai/middleware.js +163 -0
- package/dist/perplexity-ai/middleware.js.map +1 -0
- package/dist/types/context.d.ts +9 -0
- package/dist/types/context.d.ts.map +1 -0
- package/dist/types/context.js +3 -0
- package/dist/types/context.js.map +1 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +28 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/metering.d.ts +28 -0
- package/dist/types/metering.d.ts.map +1 -0
- package/dist/types/metering.js +3 -0
- package/dist/types/metering.js.map +1 -0
- package/dist/types/modelInfo.d.ts +6 -0
- package/dist/types/modelInfo.d.ts.map +1 -0
- package/dist/types/modelInfo.js +3 -0
- package/dist/types/modelInfo.js.map +1 -0
- package/dist/types/operation.d.ts +5 -0
- package/dist/types/operation.d.ts.map +1 -0
- package/dist/types/operation.js +9 -0
- package/dist/types/operation.js.map +1 -0
- package/dist/types/perplexityConfig.d.ts +5 -0
- package/dist/types/perplexityConfig.d.ts.map +1 -0
- package/dist/types/perplexityConfig.js +3 -0
- package/dist/types/perplexityConfig.js.map +1 -0
- package/dist/types/provider.d.ts +4 -0
- package/dist/types/provider.d.ts.map +1 -0
- package/dist/types/provider.js +8 -0
- package/dist/types/provider.js.map +1 -0
- package/dist/types/reveniumConfig.d.ts +6 -0
- package/dist/types/reveniumConfig.d.ts.map +1 -0
- package/dist/types/reveniumConfig.js +3 -0
- package/dist/types/reveniumConfig.js.map +1 -0
- package/dist/types/streamTracker.d.ts +9 -0
- package/dist/types/streamTracker.d.ts.map +1 -0
- package/dist/types/streamTracker.js +3 -0
- package/dist/types/streamTracker.js.map +1 -0
- package/dist/types/subscriber.d.ts +9 -0
- package/dist/types/subscriber.d.ts.map +1 -0
- package/dist/types/subscriber.js +3 -0
- package/dist/types/subscriber.js.map +1 -0
- package/dist/types/tokenCounts.d.ts +6 -0
- package/dist/types/tokenCounts.d.ts.map +1 -0
- package/dist/types/tokenCounts.js +3 -0
- package/dist/types/tokenCounts.js.map +1 -0
- package/dist/types/usageData.d.ts +16 -0
- package/dist/types/usageData.d.ts.map +1 -0
- package/dist/types/usageData.js +3 -0
- package/dist/types/usageData.js.map +1 -0
- package/dist/types/usageMetadata.d.ts +14 -0
- package/dist/types/usageMetadata.d.ts.map +1 -0
- package/dist/types/usageMetadata.js +3 -0
- package/dist/types/usageMetadata.js.map +1 -0
- package/dist/utils/activeMiddleware.d.ts +2 -0
- package/dist/utils/activeMiddleware.d.ts.map +1 -0
- package/dist/utils/activeMiddleware.js +24 -0
- package/dist/utils/activeMiddleware.js.map +1 -0
- package/dist/utils/askConsole.d.ts +2 -0
- package/dist/utils/askConsole.d.ts.map +1 -0
- package/dist/utils/askConsole.js +20 -0
- package/dist/utils/askConsole.js.map +1 -0
- package/dist/utils/calculateDurationMs.d.ts +2 -0
- package/dist/utils/calculateDurationMs.d.ts.map +1 -0
- package/dist/utils/calculateDurationMs.js +7 -0
- package/dist/utils/calculateDurationMs.js.map +1 -0
- package/dist/utils/constants/constants.d.ts +9 -0
- package/dist/utils/constants/constants.d.ts.map +1 -0
- package/dist/utils/constants/constants.js +19 -0
- package/dist/utils/constants/constants.js.map +1 -0
- package/dist/utils/constants/messages.d.ts +19 -0
- package/dist/utils/constants/messages.d.ts.map +1 -0
- package/dist/utils/constants/messages.js +22 -0
- package/dist/utils/constants/messages.js.map +1 -0
- package/dist/utils/createMeteringRequest.d.ts +3 -0
- package/dist/utils/createMeteringRequest.d.ts.map +1 -0
- package/dist/utils/createMeteringRequest.js +10 -0
- package/dist/utils/createMeteringRequest.js.map +1 -0
- package/dist/utils/createPerplexityMetadata.d.ts +3 -0
- package/dist/utils/createPerplexityMetadata.d.ts.map +1 -0
- package/dist/utils/createPerplexityMetadata.js +12 -0
- package/dist/utils/createPerplexityMetadata.js.map +1 -0
- package/dist/utils/extractModelName.d.ts +2 -0
- package/dist/utils/extractModelName.d.ts.map +1 -0
- package/dist/utils/extractModelName.js +15 -0
- package/dist/utils/extractModelName.js.map +1 -0
- package/dist/utils/extractPerplexityTokenCounts.d.ts +3 -0
- package/dist/utils/extractPerplexityTokenCounts.d.ts.map +1 -0
- package/dist/utils/extractPerplexityTokenCounts.js +17 -0
- package/dist/utils/extractPerplexityTokenCounts.js.map +1 -0
- package/dist/utils/extractStopReason.d.ts +2 -0
- package/dist/utils/extractStopReason.d.ts.map +1 -0
- package/dist/utils/extractStopReason.js +14 -0
- package/dist/utils/extractStopReason.js.map +1 -0
- package/dist/utils/extractUsageMetadata.d.ts +3 -0
- package/dist/utils/extractUsageMetadata.d.ts.map +1 -0
- package/dist/utils/extractUsageMetadata.js +15 -0
- package/dist/utils/extractUsageMetadata.js.map +1 -0
- package/dist/utils/formatTimestamp.d.ts +2 -0
- package/dist/utils/formatTimestamp.d.ts.map +1 -0
- package/dist/utils/formatTimestamp.js +7 -0
- package/dist/utils/formatTimestamp.js.map +1 -0
- package/dist/utils/generateTransactionId.d.ts +2 -0
- package/dist/utils/generateTransactionId.d.ts.map +1 -0
- package/dist/utils/generateTransactionId.js +8 -0
- package/dist/utils/generateTransactionId.js.map +1 -0
- package/dist/utils/getEnv.d.ts +4 -0
- package/dist/utils/getEnv.d.ts.map +1 -0
- package/dist/utils/getEnv.js +16 -0
- package/dist/utils/getEnv.js.map +1 -0
- package/dist/utils/index.d.ts +13 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +29 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/safeExtract.d.ts +2 -0
- package/dist/utils/safeExtract.d.ts.map +1 -0
- package/dist/utils/safeExtract.js +22 -0
- package/dist/utils/safeExtract.js.map +1 -0
- package/dist/utils/sendMeteringData.d.ts +3 -0
- package/dist/utils/sendMeteringData.d.ts.map +1 -0
- package/dist/utils/sendMeteringData.js +35 -0
- package/dist/utils/sendMeteringData.js.map +1 -0
- package/dist/utils/verifyLogVerbose.d.ts +2 -0
- package/dist/utils/verifyLogVerbose.d.ts.map +1 -0
- package/dist/utils/verifyLogVerbose.js +10 -0
- package/dist/utils/verifyLogVerbose.js.map +1 -0
- package/examples/README.md +316 -0
- package/examples/basic-client-example.ts +36 -0
- package/examples/metadata-example.ts +92 -0
- package/examples/multiple-models-example.ts +65 -0
- package/examples/openai-client-example.ts +76 -0
- package/examples/perplexity_basic_example.ts +24 -0
- package/examples/perplexity_middleware_example.ts +222 -0
- package/examples/run-all-examples.ts +118 -0
- package/examples/simple-test.ts +278 -0
- package/examples/streaming-example.ts +46 -0
- package/package.json +54 -0
- package/src/index.ts +38 -0
- package/src/models/Exception/ApiResponseError.ts +6 -0
- package/src/models/Exception/ConfigurationError.ts +6 -0
- package/src/models/Exception/MeteringError.ts +6 -0
- package/src/models/Exception/MiddlewareActivationError.ts +6 -0
- package/src/models/Exception/StreamTrackingError.ts +6 -0
- package/src/models/Exception/TokenCountingError.ts +6 -0
- package/src/models/Exception/index.ts +6 -0
- package/src/models/Logger.ts +38 -0
- package/src/models/index.ts +2 -0
- package/src/perplexity-ai/client.ts +97 -0
- package/src/perplexity-ai/index.ts +2 -0
- package/src/perplexity-ai/middleware.ts +259 -0
- package/src/types/context.ts +9 -0
- package/src/types/index.ts +11 -0
- package/src/types/metering.ts +28 -0
- package/src/types/modelInfo.ts +5 -0
- package/src/types/operation.ts +4 -0
- package/src/types/perplexityConfig.ts +4 -0
- package/src/types/provider.ts +3 -0
- package/src/types/reveniumConfig.ts +5 -0
- package/src/types/streamTracker.ts +9 -0
- package/src/types/subscriber.ts +8 -0
- package/src/types/tokenCounts.ts +5 -0
- package/src/types/usageData.ts +16 -0
- package/src/types/usageMetadata.ts +13 -0
- package/src/utils/activeMiddleware.ts +34 -0
- package/src/utils/askConsole.ts +15 -0
- package/src/utils/calculateDurationMs.ts +3 -0
- package/src/utils/constants/constants.ts +17 -0
- package/src/utils/constants/messages.ts +35 -0
- package/src/utils/createMeteringRequest.ts +16 -0
- package/src/utils/createPerplexityMetadata.ts +11 -0
- package/src/utils/extractModelName.ts +14 -0
- package/src/utils/extractPerplexityTokenCounts.ts +16 -0
- package/src/utils/extractStopReason.ts +13 -0
- package/src/utils/extractUsageMetadata.ts +15 -0
- package/src/utils/formatTimestamp.ts +3 -0
- package/src/utils/generateTransactionId.ts +5 -0
- package/src/utils/getEnv.ts +16 -0
- package/src/utils/index.ts +12 -0
- package/src/utils/safeExtract.ts +18 -0
- package/src/utils/sendMeteringData.ts +46 -0
- package/src/utils/verifyLogVerbose.ts +7 -0
- package/tsconfig.json +23 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { config } from "dotenv";
|
|
2
|
+
import { OpenAI } from "openai";
|
|
3
|
+
|
|
4
|
+
// Import middleware to activate automatic tracking
|
|
5
|
+
import "../src/perplexity-ai";
|
|
6
|
+
|
|
7
|
+
config();
|
|
8
|
+
|
|
9
|
+
async function openaiClientExample() {
|
|
10
|
+
console.log("\n๐ค Perplexity AI - OpenAI Client Example");
|
|
11
|
+
console.log("=".repeat(50));
|
|
12
|
+
|
|
13
|
+
try {
|
|
14
|
+
// Create OpenAI client configured for Perplexity (like in basic example)
|
|
15
|
+
const client = new OpenAI({
|
|
16
|
+
apiKey: process.env.PERPLEXITY_API_KEY,
|
|
17
|
+
baseURL: "https://api.perplexity.ai",
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
console.log("โ
OpenAI client configured for Perplexity AI");
|
|
21
|
+
console.log("๐ Middleware automatically tracking all requests");
|
|
22
|
+
|
|
23
|
+
// Test different types of requests
|
|
24
|
+
console.log("\n1๏ธโฃ Basic chat completion:");
|
|
25
|
+
const basicResponse = await client.chat.completions.create({
|
|
26
|
+
model: "sonar-pro",
|
|
27
|
+
messages: [
|
|
28
|
+
{
|
|
29
|
+
role: "user",
|
|
30
|
+
content: "What is the meaning of life, the universe and everything?",
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
});
|
|
34
|
+
console.log("โ
Response:", basicResponse.choices[0]?.message?.content?.substring(0, 100) + "...");
|
|
35
|
+
|
|
36
|
+
console.log("\n2๏ธโฃ Streaming chat completion:");
|
|
37
|
+
const stream = await client.chat.completions.create({
|
|
38
|
+
model: "sonar-pro",
|
|
39
|
+
messages: [
|
|
40
|
+
{
|
|
41
|
+
role: "user",
|
|
42
|
+
content: "Write a short poem about AI",
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
stream: true,
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
console.log("๐ Streaming response:");
|
|
49
|
+
for await (const chunk of stream) {
|
|
50
|
+
const content = chunk.choices[0]?.delta?.content;
|
|
51
|
+
if (content) {
|
|
52
|
+
process.stdout.write(content);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
console.log("\n\n3๏ธโฃ Different prompt:");
|
|
57
|
+
const differentResponse = await client.chat.completions.create({
|
|
58
|
+
model: "sonar-pro",
|
|
59
|
+
messages: [
|
|
60
|
+
{
|
|
61
|
+
role: "user",
|
|
62
|
+
content: "Explain machine learning in one sentence",
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
});
|
|
66
|
+
console.log("โ
Response:", differentResponse.choices[0]?.message?.content);
|
|
67
|
+
|
|
68
|
+
console.log("\n๐ All examples completed successfully!");
|
|
69
|
+
console.log("๐ All usage automatically tracked by middleware");
|
|
70
|
+
|
|
71
|
+
} catch (error) {
|
|
72
|
+
console.error("โ Error:", error);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
openaiClientExample().catch(console.error);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { config } from "dotenv";
|
|
2
|
+
import { OpenAI } from "openai";
|
|
3
|
+
|
|
4
|
+
config();
|
|
5
|
+
|
|
6
|
+
const client = new OpenAI({
|
|
7
|
+
apiKey: process.env.PERPLEXITY_API_KEY,
|
|
8
|
+
baseURL: "https://api.perplexity.ai",
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
const getResponse = async () => {
|
|
12
|
+
const response = await client.chat.completions.create({
|
|
13
|
+
model: "sonar-pro",
|
|
14
|
+
messages: [
|
|
15
|
+
{
|
|
16
|
+
role: "user",
|
|
17
|
+
content: "What is the meaning of life, the universe and everything?",
|
|
18
|
+
},
|
|
19
|
+
],
|
|
20
|
+
});
|
|
21
|
+
console.log("response", response);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
getResponse();
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { config } from "dotenv";
|
|
2
|
+
import { OpenAI } from "openai";
|
|
3
|
+
|
|
4
|
+
// Importar el middleware para activar el tracking automรกtico
|
|
5
|
+
import "../src/index";
|
|
6
|
+
|
|
7
|
+
config();
|
|
8
|
+
|
|
9
|
+
// Configurar el cliente de OpenAI para usar Perplexity
|
|
10
|
+
const client = new OpenAI({
|
|
11
|
+
apiKey: process.env.PERPLEXITY_API_KEY,
|
|
12
|
+
baseURL: "https://api.perplexity.ai",
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Ejemplo bรกsico usando el middleware
|
|
17
|
+
*/
|
|
18
|
+
const basicExample = async () => {
|
|
19
|
+
console.log("\n๐ค Perplexity AI - Middleware Example");
|
|
20
|
+
console.log("=".repeat(50));
|
|
21
|
+
|
|
22
|
+
const perplexityApiKey = process.env.PERPLEXITY_API_KEY;
|
|
23
|
+
const reveniumKey = process.env.REVENIUM_METERING_API_KEY;
|
|
24
|
+
|
|
25
|
+
if (!perplexityApiKey) {
|
|
26
|
+
console.log("โ PERPLEXITY_API_KEY not found");
|
|
27
|
+
console.log(" Set: export PERPLEXITY_API_KEY=your-perplexity-api-key");
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (!reveniumKey) {
|
|
32
|
+
console.log(
|
|
33
|
+
"โ ๏ธ REVENIUM_METERING_API_KEY not found - metering will be disabled"
|
|
34
|
+
);
|
|
35
|
+
console.log(" Set: export REVENIUM_METERING_API_KEY=your-revenium-key");
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
console.log(`โ
Perplexity API Key: ${perplexityApiKey.substring(0, 10)}...`);
|
|
39
|
+
if (reveniumKey) {
|
|
40
|
+
console.log(`โ
Revenium Key: ${reveniumKey.substring(0, 10)}...`);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
try {
|
|
44
|
+
const response = await client.chat.completions.create({
|
|
45
|
+
model: "sonar-pro",
|
|
46
|
+
messages: [
|
|
47
|
+
{
|
|
48
|
+
role: "user",
|
|
49
|
+
content: "What is the meaning of life, the universe and everything?",
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
const content = response.choices[0]?.message?.content;
|
|
55
|
+
if (content) {
|
|
56
|
+
console.log(`โ
Response: ${content.substring(0, 100)}...`);
|
|
57
|
+
} else {
|
|
58
|
+
console.log("โ
Response received (no content)");
|
|
59
|
+
}
|
|
60
|
+
console.log("โ
Response received successfully");
|
|
61
|
+
console.log("๐ Token usage automatically tracked by middleware");
|
|
62
|
+
console.log("๐ Middleware integration successful!");
|
|
63
|
+
return true;
|
|
64
|
+
} catch (error) {
|
|
65
|
+
console.log(`โ Perplexity test failed: ${error}`);
|
|
66
|
+
console.error(error);
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Ejemplo con metadatos de uso
|
|
73
|
+
*/
|
|
74
|
+
const enhancedExample = async () => {
|
|
75
|
+
console.log("\n๐ Perplexity AI - Enhanced Tracking Example");
|
|
76
|
+
console.log("=".repeat(50));
|
|
77
|
+
|
|
78
|
+
const perplexityApiKey = process.env.PERPLEXITY_API_KEY;
|
|
79
|
+
if (!perplexityApiKey) {
|
|
80
|
+
console.log("โ PERPLEXITY_API_KEY not found");
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
try {
|
|
85
|
+
const response = await client.chat.completions.create({
|
|
86
|
+
model: "sonar-pro",
|
|
87
|
+
messages: [
|
|
88
|
+
{
|
|
89
|
+
role: "user",
|
|
90
|
+
content: "Analyze this quarterly report for key insights",
|
|
91
|
+
},
|
|
92
|
+
],
|
|
93
|
+
// Los metadatos se pueden incluir en el body de la request
|
|
94
|
+
// El middleware los detectarรก automรกticamente
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
const content = response.choices[0]?.message?.content;
|
|
98
|
+
if (content) {
|
|
99
|
+
console.log(`โ
Enhanced response: ${content.substring(0, 100)}...`);
|
|
100
|
+
} else {
|
|
101
|
+
console.log("โ
Enhanced response received (no content)");
|
|
102
|
+
}
|
|
103
|
+
console.log("๐ฏ Enhanced tracking with middleware successful!");
|
|
104
|
+
return true;
|
|
105
|
+
} catch (error) {
|
|
106
|
+
console.log(`โ Perplexity enhanced test failed: ${error}`);
|
|
107
|
+
console.error(error);
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Ejemplo con streaming
|
|
114
|
+
*/
|
|
115
|
+
const streamingExample = async () => {
|
|
116
|
+
console.log("\n๐ Perplexity AI - Streaming Example");
|
|
117
|
+
console.log("=".repeat(50));
|
|
118
|
+
|
|
119
|
+
const perplexityApiKey = process.env.PERPLEXITY_API_KEY;
|
|
120
|
+
if (!perplexityApiKey) {
|
|
121
|
+
console.log("โ PERPLEXITY_API_KEY not found");
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
try {
|
|
126
|
+
const stream = await client.chat.completions.create({
|
|
127
|
+
model: "sonar-pro",
|
|
128
|
+
messages: [
|
|
129
|
+
{
|
|
130
|
+
role: "user",
|
|
131
|
+
content: "Write a creative story about AI",
|
|
132
|
+
},
|
|
133
|
+
],
|
|
134
|
+
stream: true,
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
let streamedContent = "";
|
|
138
|
+
for await (const chunk of stream) {
|
|
139
|
+
const content = chunk.choices[0]?.delta?.content;
|
|
140
|
+
if (content) {
|
|
141
|
+
streamedContent += content;
|
|
142
|
+
process.stdout.write(content);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
console.log("\nโ
Streaming completed successfully");
|
|
147
|
+
console.log("๐ Streaming usage automatically tracked by middleware");
|
|
148
|
+
return true;
|
|
149
|
+
} catch (error) {
|
|
150
|
+
console.log(`โ Perplexity streaming test failed: ${error}`);
|
|
151
|
+
console.error(error);
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Ejemplo con diferentes modelos
|
|
158
|
+
*/
|
|
159
|
+
const differentModelExample = async () => {
|
|
160
|
+
console.log("\n๐ง Perplexity AI - Different Model Example");
|
|
161
|
+
console.log("=".repeat(50));
|
|
162
|
+
|
|
163
|
+
const perplexityApiKey = process.env.PERPLEXITY_API_KEY;
|
|
164
|
+
if (!perplexityApiKey) {
|
|
165
|
+
console.log("โ PERPLEXITY_API_KEY not found");
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
try {
|
|
170
|
+
const response = await client.chat.completions.create({
|
|
171
|
+
model: "sonar-pro",
|
|
172
|
+
messages: [
|
|
173
|
+
{
|
|
174
|
+
role: "user",
|
|
175
|
+
content: "Explain quantum computing in simple terms",
|
|
176
|
+
},
|
|
177
|
+
],
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
const content = response.choices[0]?.message?.content;
|
|
181
|
+
if (content) {
|
|
182
|
+
console.log(`โ
Llama response: ${content.substring(0, 100)}...`);
|
|
183
|
+
} else {
|
|
184
|
+
console.log("โ
Llama response received (no content)");
|
|
185
|
+
}
|
|
186
|
+
console.log("โ
Different model test successful!");
|
|
187
|
+
return true;
|
|
188
|
+
} catch (error) {
|
|
189
|
+
console.log(`โ Perplexity different model test failed: ${error}`);
|
|
190
|
+
console.error(error);
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Funciรณn principal que ejecuta todos los ejemplos
|
|
197
|
+
*/
|
|
198
|
+
const main = async (): Promise<void> => {
|
|
199
|
+
console.log("๐ Starting Revenium Perplexity AI Middleware Examples");
|
|
200
|
+
console.log("=".repeat(60));
|
|
201
|
+
|
|
202
|
+
let successCount = 0;
|
|
203
|
+
const totalTests: number = 4;
|
|
204
|
+
|
|
205
|
+
// Ejecutar ejemplos de Perplexity AI
|
|
206
|
+
if (await basicExample()) successCount++;
|
|
207
|
+
if (await enhancedExample()) successCount++;
|
|
208
|
+
if (await streamingExample()) successCount++;
|
|
209
|
+
if (await differentModelExample()) successCount++;
|
|
210
|
+
|
|
211
|
+
console.log("\n" + "=".repeat(60));
|
|
212
|
+
console.log(`๐ Test Results: ${successCount}/${totalTests} tests passed`);
|
|
213
|
+
|
|
214
|
+
if (successCount === totalTests) {
|
|
215
|
+
console.log("๐ All tests passed! Middleware is working correctly.");
|
|
216
|
+
} else {
|
|
217
|
+
console.log("โ ๏ธ Some tests failed. Check the logs above for details.");
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
// Ejecutar el ejemplo
|
|
222
|
+
main().catch(console.error);
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { config } from "dotenv";
|
|
2
|
+
import { createPerplexityClient } from "../src/perplexity-ai";
|
|
3
|
+
|
|
4
|
+
config();
|
|
5
|
+
|
|
6
|
+
async function runAllExamples() {
|
|
7
|
+
console.log("๐ Running All Perplexity AI Middleware Examples");
|
|
8
|
+
console.log("=".repeat(60));
|
|
9
|
+
|
|
10
|
+
const examples = [
|
|
11
|
+
{
|
|
12
|
+
name: "Basic Client Example",
|
|
13
|
+
run: async () => {
|
|
14
|
+
const client = createPerplexityClient();
|
|
15
|
+
const response = await client.createChatCompletion({
|
|
16
|
+
model: "sonar-pro",
|
|
17
|
+
messages: [
|
|
18
|
+
{
|
|
19
|
+
role: "user",
|
|
20
|
+
content: "Say hello in one sentence",
|
|
21
|
+
},
|
|
22
|
+
],
|
|
23
|
+
});
|
|
24
|
+
return response.choices[0]?.message?.content || "";
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: "Streaming Example",
|
|
29
|
+
run: async () => {
|
|
30
|
+
const client = createPerplexityClient();
|
|
31
|
+
const stream = await client.createStreamingChatCompletion({
|
|
32
|
+
model: "sonar-pro",
|
|
33
|
+
messages: [
|
|
34
|
+
{
|
|
35
|
+
role: "user",
|
|
36
|
+
content: "Write a very short story",
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
let content = "";
|
|
42
|
+
for await (const chunk of stream) {
|
|
43
|
+
const chunkContent = chunk.choices[0]?.delta?.content;
|
|
44
|
+
if (chunkContent) {
|
|
45
|
+
content += chunkContent;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return content;
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: "Multiple Models Example",
|
|
53
|
+
run: async () => {
|
|
54
|
+
const client = createPerplexityClient();
|
|
55
|
+
const response = await client.createChatCompletion({
|
|
56
|
+
model: "sonar-pro",
|
|
57
|
+
messages: [
|
|
58
|
+
{
|
|
59
|
+
role: "user",
|
|
60
|
+
content: "What is AI?",
|
|
61
|
+
},
|
|
62
|
+
],
|
|
63
|
+
});
|
|
64
|
+
return response.choices[0]?.message?.content || "";
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
name: "Metadata Example",
|
|
69
|
+
run: async () => {
|
|
70
|
+
const client = createPerplexityClient();
|
|
71
|
+
const response = await client.createChatCompletion({
|
|
72
|
+
model: "sonar-pro",
|
|
73
|
+
messages: [
|
|
74
|
+
{
|
|
75
|
+
role: "user",
|
|
76
|
+
content: "What is the weather like?",
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
usageMetadata: {
|
|
80
|
+
traceId: "test-123",
|
|
81
|
+
taskType: "weather-query",
|
|
82
|
+
organizationId: "test-org",
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
return response.choices[0]?.message?.content || "";
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
];
|
|
89
|
+
|
|
90
|
+
let successCount = 0;
|
|
91
|
+
const totalExamples = examples.length;
|
|
92
|
+
|
|
93
|
+
for (const example of examples) {
|
|
94
|
+
console.log(`\n๐ค Running: ${example.name}`);
|
|
95
|
+
console.log("-".repeat(40));
|
|
96
|
+
|
|
97
|
+
try {
|
|
98
|
+
const result = await example.run();
|
|
99
|
+
console.log("โ
Success!");
|
|
100
|
+
console.log("๐ Response:", result.substring(0, 100) + "...");
|
|
101
|
+
successCount++;
|
|
102
|
+
} catch (error) {
|
|
103
|
+
console.log("โ Failed:", error);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
console.log("\n" + "=".repeat(60));
|
|
108
|
+
console.log(`๐ Results: ${successCount}/${totalExamples} examples passed`);
|
|
109
|
+
|
|
110
|
+
if (successCount === totalExamples) {
|
|
111
|
+
console.log("๐ All examples completed successfully!");
|
|
112
|
+
console.log("โ
Middleware is working correctly");
|
|
113
|
+
} else {
|
|
114
|
+
console.log("โ ๏ธ Some examples failed. Check the logs above.");
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
runAllExamples().catch(console.error);
|