@revenium/perplexity 1.0.9 → 1.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. package/.env.example +2 -2
  2. package/README.md +0 -0
  3. package/examples/basic.ts +17 -0
  4. package/examples/chat-completions.ts +23 -0
  5. package/examples/enhanced.ts +21 -0
  6. package/examples/streaming.ts +25 -0
  7. package/package.json +45 -61
  8. package/playground/basic.js +7 -16
  9. package/playground/enhanced.js +9 -21
  10. package/playground/streaming.js +10 -25
  11. package/src/index.ts +1 -35
  12. package/src/interfaces/chatCompletionRequest.ts +9 -0
  13. package/src/interfaces/credential.ts +4 -0
  14. package/src/interfaces/meteringRequest.ts +14 -0
  15. package/src/{types/metering.ts → interfaces/meteringResponse.ts} +3 -3
  16. package/src/interfaces/operation.ts +4 -0
  17. package/src/{types → interfaces}/subscriber.ts +1 -1
  18. package/src/interfaces/tokenCounts.ts +7 -0
  19. package/src/{types → interfaces}/usageMetadata.ts +1 -1
  20. package/src/middleware.ts +151 -0
  21. package/src/models/Logger.ts +5 -5
  22. package/src/models/Metering.ts +86 -0
  23. package/src/utils/calculateDurationMs.ts +1 -1
  24. package/src/utils/constants/constants.ts +9 -16
  25. package/src/utils/constants/logLevels.ts +1 -0
  26. package/src/utils/constants/messages.ts +8 -32
  27. package/src/utils/constants/models.ts +20 -0
  28. package/src/utils/extractTokenCount.ts +26 -0
  29. package/src/utils/generateTransactionId.ts +1 -1
  30. package/src/utils/index.ts +39 -12
  31. package/src/utils/loadEnv.ts +8 -0
  32. package/src/utils/safeExtract.ts +60 -11
  33. package/tsconfig.json +10 -18
  34. package/dist/index.d.ts +0 -8
  35. package/dist/index.d.ts.map +0 -1
  36. package/dist/index.js +0 -40
  37. package/dist/index.js.map +0 -1
  38. package/dist/models/Exception/ApiResponseError.d.ts +0 -6
  39. package/dist/models/Exception/ApiResponseError.d.ts.map +0 -1
  40. package/dist/models/Exception/ApiResponseError.js +0 -13
  41. package/dist/models/Exception/ApiResponseError.js.map +0 -1
  42. package/dist/models/Exception/ConfigurationError.d.ts +0 -4
  43. package/dist/models/Exception/ConfigurationError.d.ts.map +0 -1
  44. package/dist/models/Exception/ConfigurationError.js +0 -11
  45. package/dist/models/Exception/ConfigurationError.js.map +0 -1
  46. package/dist/models/Exception/MeteringError.d.ts +0 -5
  47. package/dist/models/Exception/MeteringError.d.ts.map +0 -1
  48. package/dist/models/Exception/MeteringError.js +0 -12
  49. package/dist/models/Exception/MeteringError.js.map +0 -1
  50. package/dist/models/Exception/MiddlewareActivationError.d.ts +0 -4
  51. package/dist/models/Exception/MiddlewareActivationError.d.ts.map +0 -1
  52. package/dist/models/Exception/MiddlewareActivationError.js +0 -11
  53. package/dist/models/Exception/MiddlewareActivationError.js.map +0 -1
  54. package/dist/models/Exception/StreamTrackingError.d.ts +0 -4
  55. package/dist/models/Exception/StreamTrackingError.d.ts.map +0 -1
  56. package/dist/models/Exception/StreamTrackingError.js +0 -11
  57. package/dist/models/Exception/StreamTrackingError.js.map +0 -1
  58. package/dist/models/Exception/TokenCountingError.d.ts +0 -4
  59. package/dist/models/Exception/TokenCountingError.d.ts.map +0 -1
  60. package/dist/models/Exception/TokenCountingError.js +0 -11
  61. package/dist/models/Exception/TokenCountingError.js.map +0 -1
  62. package/dist/models/Exception/index.d.ts +0 -7
  63. package/dist/models/Exception/index.d.ts.map +0 -1
  64. package/dist/models/Exception/index.js +0 -23
  65. package/dist/models/Exception/index.js.map +0 -1
  66. package/dist/models/Logger.d.ts +0 -10
  67. package/dist/models/Logger.d.ts.map +0 -1
  68. package/dist/models/Logger.js +0 -36
  69. package/dist/models/Logger.js.map +0 -1
  70. package/dist/models/index.d.ts +0 -3
  71. package/dist/models/index.d.ts.map +0 -1
  72. package/dist/models/index.js +0 -19
  73. package/dist/models/index.js.map +0 -1
  74. package/dist/perplexity-ai/client.d.ts +0 -31
  75. package/dist/perplexity-ai/client.d.ts.map +0 -1
  76. package/dist/perplexity-ai/client.js +0 -75
  77. package/dist/perplexity-ai/client.js.map +0 -1
  78. package/dist/perplexity-ai/index.d.ts +0 -3
  79. package/dist/perplexity-ai/index.d.ts.map +0 -1
  80. package/dist/perplexity-ai/index.js +0 -19
  81. package/dist/perplexity-ai/index.js.map +0 -1
  82. package/dist/perplexity-ai/middleware.d.ts +0 -2
  83. package/dist/perplexity-ai/middleware.d.ts.map +0 -1
  84. package/dist/perplexity-ai/middleware.js +0 -195
  85. package/dist/perplexity-ai/middleware.js.map +0 -1
  86. package/dist/types/context.d.ts +0 -9
  87. package/dist/types/context.d.ts.map +0 -1
  88. package/dist/types/context.js +0 -3
  89. package/dist/types/context.js.map +0 -1
  90. package/dist/types/index.d.ts +0 -12
  91. package/dist/types/index.d.ts.map +0 -1
  92. package/dist/types/index.js +0 -28
  93. package/dist/types/index.js.map +0 -1
  94. package/dist/types/metering.d.ts +0 -28
  95. package/dist/types/metering.d.ts.map +0 -1
  96. package/dist/types/metering.js +0 -3
  97. package/dist/types/metering.js.map +0 -1
  98. package/dist/types/modelInfo.d.ts +0 -6
  99. package/dist/types/modelInfo.d.ts.map +0 -1
  100. package/dist/types/modelInfo.js +0 -3
  101. package/dist/types/modelInfo.js.map +0 -1
  102. package/dist/types/operation.d.ts +0 -5
  103. package/dist/types/operation.d.ts.map +0 -1
  104. package/dist/types/operation.js +0 -9
  105. package/dist/types/operation.js.map +0 -1
  106. package/dist/types/perplexityConfig.d.ts +0 -5
  107. package/dist/types/perplexityConfig.d.ts.map +0 -1
  108. package/dist/types/perplexityConfig.js +0 -3
  109. package/dist/types/perplexityConfig.js.map +0 -1
  110. package/dist/types/provider.d.ts +0 -4
  111. package/dist/types/provider.d.ts.map +0 -1
  112. package/dist/types/provider.js +0 -8
  113. package/dist/types/provider.js.map +0 -1
  114. package/dist/types/reveniumConfig.d.ts +0 -6
  115. package/dist/types/reveniumConfig.d.ts.map +0 -1
  116. package/dist/types/reveniumConfig.js +0 -3
  117. package/dist/types/reveniumConfig.js.map +0 -1
  118. package/dist/types/streamTracker.d.ts +0 -9
  119. package/dist/types/streamTracker.d.ts.map +0 -1
  120. package/dist/types/streamTracker.js +0 -3
  121. package/dist/types/streamTracker.js.map +0 -1
  122. package/dist/types/subscriber.d.ts +0 -9
  123. package/dist/types/subscriber.d.ts.map +0 -1
  124. package/dist/types/subscriber.js +0 -3
  125. package/dist/types/subscriber.js.map +0 -1
  126. package/dist/types/tokenCounts.d.ts +0 -6
  127. package/dist/types/tokenCounts.d.ts.map +0 -1
  128. package/dist/types/tokenCounts.js +0 -3
  129. package/dist/types/tokenCounts.js.map +0 -1
  130. package/dist/types/usageData.d.ts +0 -16
  131. package/dist/types/usageData.d.ts.map +0 -1
  132. package/dist/types/usageData.js +0 -3
  133. package/dist/types/usageData.js.map +0 -1
  134. package/dist/types/usageMetadata.d.ts +0 -14
  135. package/dist/types/usageMetadata.d.ts.map +0 -1
  136. package/dist/types/usageMetadata.js +0 -3
  137. package/dist/types/usageMetadata.js.map +0 -1
  138. package/dist/utils/activeMiddleware.d.ts +0 -2
  139. package/dist/utils/activeMiddleware.d.ts.map +0 -1
  140. package/dist/utils/activeMiddleware.js +0 -24
  141. package/dist/utils/activeMiddleware.js.map +0 -1
  142. package/dist/utils/askConsole.d.ts +0 -2
  143. package/dist/utils/askConsole.d.ts.map +0 -1
  144. package/dist/utils/askConsole.js +0 -20
  145. package/dist/utils/askConsole.js.map +0 -1
  146. package/dist/utils/calculateDurationMs.d.ts +0 -2
  147. package/dist/utils/calculateDurationMs.d.ts.map +0 -1
  148. package/dist/utils/calculateDurationMs.js +0 -7
  149. package/dist/utils/calculateDurationMs.js.map +0 -1
  150. package/dist/utils/constants/constants.d.ts +0 -9
  151. package/dist/utils/constants/constants.d.ts.map +0 -1
  152. package/dist/utils/constants/constants.js +0 -19
  153. package/dist/utils/constants/constants.js.map +0 -1
  154. package/dist/utils/constants/messages.d.ts +0 -19
  155. package/dist/utils/constants/messages.d.ts.map +0 -1
  156. package/dist/utils/constants/messages.js +0 -22
  157. package/dist/utils/constants/messages.js.map +0 -1
  158. package/dist/utils/createMeteringRequest.d.ts +0 -3
  159. package/dist/utils/createMeteringRequest.d.ts.map +0 -1
  160. package/dist/utils/createMeteringRequest.js +0 -10
  161. package/dist/utils/createMeteringRequest.js.map +0 -1
  162. package/dist/utils/createPerplexityMetadata.d.ts +0 -3
  163. package/dist/utils/createPerplexityMetadata.d.ts.map +0 -1
  164. package/dist/utils/createPerplexityMetadata.js +0 -12
  165. package/dist/utils/createPerplexityMetadata.js.map +0 -1
  166. package/dist/utils/extractModelName.d.ts +0 -2
  167. package/dist/utils/extractModelName.d.ts.map +0 -1
  168. package/dist/utils/extractModelName.js +0 -15
  169. package/dist/utils/extractModelName.js.map +0 -1
  170. package/dist/utils/extractPerplexityTokenCounts.d.ts +0 -3
  171. package/dist/utils/extractPerplexityTokenCounts.d.ts.map +0 -1
  172. package/dist/utils/extractPerplexityTokenCounts.js +0 -17
  173. package/dist/utils/extractPerplexityTokenCounts.js.map +0 -1
  174. package/dist/utils/extractStopReason.d.ts +0 -2
  175. package/dist/utils/extractStopReason.d.ts.map +0 -1
  176. package/dist/utils/extractStopReason.js +0 -14
  177. package/dist/utils/extractStopReason.js.map +0 -1
  178. package/dist/utils/extractUsageMetadata.d.ts +0 -3
  179. package/dist/utils/extractUsageMetadata.d.ts.map +0 -1
  180. package/dist/utils/extractUsageMetadata.js +0 -15
  181. package/dist/utils/extractUsageMetadata.js.map +0 -1
  182. package/dist/utils/formatTimestamp.d.ts +0 -2
  183. package/dist/utils/formatTimestamp.d.ts.map +0 -1
  184. package/dist/utils/formatTimestamp.js +0 -7
  185. package/dist/utils/formatTimestamp.js.map +0 -1
  186. package/dist/utils/generateTransactionId.d.ts +0 -2
  187. package/dist/utils/generateTransactionId.d.ts.map +0 -1
  188. package/dist/utils/generateTransactionId.js +0 -8
  189. package/dist/utils/generateTransactionId.js.map +0 -1
  190. package/dist/utils/getEnv.d.ts +0 -4
  191. package/dist/utils/getEnv.d.ts.map +0 -1
  192. package/dist/utils/getEnv.js +0 -16
  193. package/dist/utils/getEnv.js.map +0 -1
  194. package/dist/utils/index.d.ts +0 -13
  195. package/dist/utils/index.d.ts.map +0 -1
  196. package/dist/utils/index.js +0 -29
  197. package/dist/utils/index.js.map +0 -1
  198. package/dist/utils/safeExtract.d.ts +0 -2
  199. package/dist/utils/safeExtract.d.ts.map +0 -1
  200. package/dist/utils/safeExtract.js +0 -22
  201. package/dist/utils/safeExtract.js.map +0 -1
  202. package/dist/utils/sendMeteringData.d.ts +0 -3
  203. package/dist/utils/sendMeteringData.d.ts.map +0 -1
  204. package/dist/utils/sendMeteringData.js +0 -35
  205. package/dist/utils/sendMeteringData.js.map +0 -1
  206. package/dist/utils/verifyLogVerbose.d.ts +0 -2
  207. package/dist/utils/verifyLogVerbose.d.ts.map +0 -1
  208. package/dist/utils/verifyLogVerbose.js +0 -10
  209. package/dist/utils/verifyLogVerbose.js.map +0 -1
  210. package/examples/README.md +0 -316
  211. package/examples/basic-client-example.ts +0 -36
  212. package/examples/metadata-example.ts +0 -97
  213. package/examples/multiple-models-example.ts +0 -65
  214. package/examples/openai-client-example.ts +0 -76
  215. package/examples/perplexity_basic_example.ts +0 -24
  216. package/examples/perplexity_middleware_example.ts +0 -222
  217. package/examples/run-all-examples.ts +0 -118
  218. package/examples/simple-test.ts +0 -278
  219. package/examples/streaming-example.ts +0 -46
  220. package/playground/custom-config.js +0 -82
  221. package/playground/metadata.js +0 -94
  222. package/playground/multiple-models.js +0 -62
  223. package/playground/openai-client.js +0 -73
  224. package/src/models/Exception/ApiResponseError.ts +0 -6
  225. package/src/models/Exception/ConfigurationError.ts +0 -6
  226. package/src/models/Exception/MeteringError.ts +0 -6
  227. package/src/models/Exception/MiddlewareActivationError.ts +0 -6
  228. package/src/models/Exception/StreamTrackingError.ts +0 -6
  229. package/src/models/Exception/TokenCountingError.ts +0 -6
  230. package/src/models/Exception/index.ts +0 -6
  231. package/src/models/index.ts +0 -2
  232. package/src/perplexity-ai/client.ts +0 -100
  233. package/src/perplexity-ai/index.ts +0 -2
  234. package/src/perplexity-ai/middleware.ts +0 -297
  235. package/src/types/context.ts +0 -9
  236. package/src/types/index.ts +0 -11
  237. package/src/types/modelInfo.ts +0 -5
  238. package/src/types/operation.ts +0 -4
  239. package/src/types/perplexityConfig.ts +0 -4
  240. package/src/types/provider.ts +0 -3
  241. package/src/types/reveniumConfig.ts +0 -5
  242. package/src/types/streamTracker.ts +0 -9
  243. package/src/types/tokenCounts.ts +0 -5
  244. package/src/types/usageData.ts +0 -16
  245. package/src/utils/activeMiddleware.ts +0 -34
  246. package/src/utils/askConsole.ts +0 -15
  247. package/src/utils/createMeteringRequest.ts +0 -16
  248. package/src/utils/createPerplexityMetadata.ts +0 -11
  249. package/src/utils/extractModelName.ts +0 -14
  250. package/src/utils/extractPerplexityTokenCounts.ts +0 -16
  251. package/src/utils/extractStopReason.ts +0 -13
  252. package/src/utils/extractUsageMetadata.ts +0 -15
  253. package/src/utils/getEnv.ts +0 -16
  254. package/src/utils/sendMeteringData.ts +0 -46
  255. package/src/utils/verifyLogVerbose.ts +0 -7
  256. /package/src/utils/{formatTimestamp.ts → formatTimeStamp.ts} +0 -0
@@ -1,65 +0,0 @@
1
- import { config } from "dotenv";
2
- import { createPerplexityClient } from "../src/perplexity-ai";
3
-
4
- config();
5
-
6
- async function multipleModelsExample() {
7
- console.log("\n🔧 Perplexity AI - Multiple Models Example");
8
- console.log("=".repeat(50));
9
-
10
- try {
11
- // Create client instance
12
- const client = createPerplexityClient();
13
-
14
- // Test different prompts with the same model
15
- const testCases = [
16
- {
17
- name: "sonar-pro (Quantum Computing)",
18
- description: "Latest and most capable model",
19
- prompt: "Explain quantum computing in simple terms",
20
- },
21
- {
22
- name: "sonar-pro (AI Developments)",
23
- description: "Latest and most capable model",
24
- prompt: "What are the latest developments in AI?",
25
- },
26
- {
27
- name: "sonar-pro (Weather)",
28
- description: "Latest and most capable model",
29
- prompt: "What is the weather like today?",
30
- },
31
- ];
32
-
33
- for (const testCase of testCases) {
34
- console.log(`\n🤖 Testing: ${testCase.name}`);
35
- console.log(`📝 Description: ${testCase.description}`);
36
- console.log("-".repeat(40));
37
-
38
- try {
39
- const response = await client.createChatCompletion({
40
- model: "sonar-pro",
41
- messages: [
42
- {
43
- role: "user",
44
- content: testCase.prompt,
45
- },
46
- ],
47
- });
48
-
49
- console.log("✅ Response:");
50
- console.log(response.choices[0]?.message?.content?.substring(0, 200) + "...");
51
- console.log("📊 Usage tracked by middleware");
52
-
53
- } catch (error) {
54
- console.log(`❌ Error with ${testCase.name}:`, error);
55
- }
56
- }
57
-
58
- console.log("\n🎉 Multiple models example completed!");
59
-
60
- } catch (error) {
61
- console.error("❌ Error:", error);
62
- }
63
- }
64
-
65
- multipleModelsExample().catch(console.error);
@@ -1,76 +0,0 @@
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);
@@ -1,24 +0,0 @@
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();
@@ -1,222 +0,0 @@
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);
@@ -1,118 +0,0 @@
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);