@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.
Files changed (234) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +367 -0
  3. package/dist/index.d.ts +8 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +40 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/models/Exception/ApiResponseError.d.ts +6 -0
  8. package/dist/models/Exception/ApiResponseError.d.ts.map +1 -0
  9. package/dist/models/Exception/ApiResponseError.js +13 -0
  10. package/dist/models/Exception/ApiResponseError.js.map +1 -0
  11. package/dist/models/Exception/ConfigurationError.d.ts +4 -0
  12. package/dist/models/Exception/ConfigurationError.d.ts.map +1 -0
  13. package/dist/models/Exception/ConfigurationError.js +11 -0
  14. package/dist/models/Exception/ConfigurationError.js.map +1 -0
  15. package/dist/models/Exception/MeteringError.d.ts +5 -0
  16. package/dist/models/Exception/MeteringError.d.ts.map +1 -0
  17. package/dist/models/Exception/MeteringError.js +12 -0
  18. package/dist/models/Exception/MeteringError.js.map +1 -0
  19. package/dist/models/Exception/MiddlewareActivationError.d.ts +4 -0
  20. package/dist/models/Exception/MiddlewareActivationError.d.ts.map +1 -0
  21. package/dist/models/Exception/MiddlewareActivationError.js +11 -0
  22. package/dist/models/Exception/MiddlewareActivationError.js.map +1 -0
  23. package/dist/models/Exception/StreamTrackingError.d.ts +4 -0
  24. package/dist/models/Exception/StreamTrackingError.d.ts.map +1 -0
  25. package/dist/models/Exception/StreamTrackingError.js +11 -0
  26. package/dist/models/Exception/StreamTrackingError.js.map +1 -0
  27. package/dist/models/Exception/TokenCountingError.d.ts +4 -0
  28. package/dist/models/Exception/TokenCountingError.d.ts.map +1 -0
  29. package/dist/models/Exception/TokenCountingError.js +11 -0
  30. package/dist/models/Exception/TokenCountingError.js.map +1 -0
  31. package/dist/models/Exception/index.d.ts +7 -0
  32. package/dist/models/Exception/index.d.ts.map +1 -0
  33. package/dist/models/Exception/index.js +23 -0
  34. package/dist/models/Exception/index.js.map +1 -0
  35. package/dist/models/Logger.d.ts +10 -0
  36. package/dist/models/Logger.d.ts.map +1 -0
  37. package/dist/models/Logger.js +36 -0
  38. package/dist/models/Logger.js.map +1 -0
  39. package/dist/models/index.d.ts +3 -0
  40. package/dist/models/index.d.ts.map +1 -0
  41. package/dist/models/index.js +19 -0
  42. package/dist/models/index.js.map +1 -0
  43. package/dist/perplexity-ai/client.d.ts +31 -0
  44. package/dist/perplexity-ai/client.d.ts.map +1 -0
  45. package/dist/perplexity-ai/client.js +75 -0
  46. package/dist/perplexity-ai/client.js.map +1 -0
  47. package/dist/perplexity-ai/index.d.ts +3 -0
  48. package/dist/perplexity-ai/index.d.ts.map +1 -0
  49. package/dist/perplexity-ai/index.js +19 -0
  50. package/dist/perplexity-ai/index.js.map +1 -0
  51. package/dist/perplexity-ai/middleware.d.ts +2 -0
  52. package/dist/perplexity-ai/middleware.d.ts.map +1 -0
  53. package/dist/perplexity-ai/middleware.js +163 -0
  54. package/dist/perplexity-ai/middleware.js.map +1 -0
  55. package/dist/types/context.d.ts +9 -0
  56. package/dist/types/context.d.ts.map +1 -0
  57. package/dist/types/context.js +3 -0
  58. package/dist/types/context.js.map +1 -0
  59. package/dist/types/index.d.ts +12 -0
  60. package/dist/types/index.d.ts.map +1 -0
  61. package/dist/types/index.js +28 -0
  62. package/dist/types/index.js.map +1 -0
  63. package/dist/types/metering.d.ts +28 -0
  64. package/dist/types/metering.d.ts.map +1 -0
  65. package/dist/types/metering.js +3 -0
  66. package/dist/types/metering.js.map +1 -0
  67. package/dist/types/modelInfo.d.ts +6 -0
  68. package/dist/types/modelInfo.d.ts.map +1 -0
  69. package/dist/types/modelInfo.js +3 -0
  70. package/dist/types/modelInfo.js.map +1 -0
  71. package/dist/types/operation.d.ts +5 -0
  72. package/dist/types/operation.d.ts.map +1 -0
  73. package/dist/types/operation.js +9 -0
  74. package/dist/types/operation.js.map +1 -0
  75. package/dist/types/perplexityConfig.d.ts +5 -0
  76. package/dist/types/perplexityConfig.d.ts.map +1 -0
  77. package/dist/types/perplexityConfig.js +3 -0
  78. package/dist/types/perplexityConfig.js.map +1 -0
  79. package/dist/types/provider.d.ts +4 -0
  80. package/dist/types/provider.d.ts.map +1 -0
  81. package/dist/types/provider.js +8 -0
  82. package/dist/types/provider.js.map +1 -0
  83. package/dist/types/reveniumConfig.d.ts +6 -0
  84. package/dist/types/reveniumConfig.d.ts.map +1 -0
  85. package/dist/types/reveniumConfig.js +3 -0
  86. package/dist/types/reveniumConfig.js.map +1 -0
  87. package/dist/types/streamTracker.d.ts +9 -0
  88. package/dist/types/streamTracker.d.ts.map +1 -0
  89. package/dist/types/streamTracker.js +3 -0
  90. package/dist/types/streamTracker.js.map +1 -0
  91. package/dist/types/subscriber.d.ts +9 -0
  92. package/dist/types/subscriber.d.ts.map +1 -0
  93. package/dist/types/subscriber.js +3 -0
  94. package/dist/types/subscriber.js.map +1 -0
  95. package/dist/types/tokenCounts.d.ts +6 -0
  96. package/dist/types/tokenCounts.d.ts.map +1 -0
  97. package/dist/types/tokenCounts.js +3 -0
  98. package/dist/types/tokenCounts.js.map +1 -0
  99. package/dist/types/usageData.d.ts +16 -0
  100. package/dist/types/usageData.d.ts.map +1 -0
  101. package/dist/types/usageData.js +3 -0
  102. package/dist/types/usageData.js.map +1 -0
  103. package/dist/types/usageMetadata.d.ts +14 -0
  104. package/dist/types/usageMetadata.d.ts.map +1 -0
  105. package/dist/types/usageMetadata.js +3 -0
  106. package/dist/types/usageMetadata.js.map +1 -0
  107. package/dist/utils/activeMiddleware.d.ts +2 -0
  108. package/dist/utils/activeMiddleware.d.ts.map +1 -0
  109. package/dist/utils/activeMiddleware.js +24 -0
  110. package/dist/utils/activeMiddleware.js.map +1 -0
  111. package/dist/utils/askConsole.d.ts +2 -0
  112. package/dist/utils/askConsole.d.ts.map +1 -0
  113. package/dist/utils/askConsole.js +20 -0
  114. package/dist/utils/askConsole.js.map +1 -0
  115. package/dist/utils/calculateDurationMs.d.ts +2 -0
  116. package/dist/utils/calculateDurationMs.d.ts.map +1 -0
  117. package/dist/utils/calculateDurationMs.js +7 -0
  118. package/dist/utils/calculateDurationMs.js.map +1 -0
  119. package/dist/utils/constants/constants.d.ts +9 -0
  120. package/dist/utils/constants/constants.d.ts.map +1 -0
  121. package/dist/utils/constants/constants.js +19 -0
  122. package/dist/utils/constants/constants.js.map +1 -0
  123. package/dist/utils/constants/messages.d.ts +19 -0
  124. package/dist/utils/constants/messages.d.ts.map +1 -0
  125. package/dist/utils/constants/messages.js +22 -0
  126. package/dist/utils/constants/messages.js.map +1 -0
  127. package/dist/utils/createMeteringRequest.d.ts +3 -0
  128. package/dist/utils/createMeteringRequest.d.ts.map +1 -0
  129. package/dist/utils/createMeteringRequest.js +10 -0
  130. package/dist/utils/createMeteringRequest.js.map +1 -0
  131. package/dist/utils/createPerplexityMetadata.d.ts +3 -0
  132. package/dist/utils/createPerplexityMetadata.d.ts.map +1 -0
  133. package/dist/utils/createPerplexityMetadata.js +12 -0
  134. package/dist/utils/createPerplexityMetadata.js.map +1 -0
  135. package/dist/utils/extractModelName.d.ts +2 -0
  136. package/dist/utils/extractModelName.d.ts.map +1 -0
  137. package/dist/utils/extractModelName.js +15 -0
  138. package/dist/utils/extractModelName.js.map +1 -0
  139. package/dist/utils/extractPerplexityTokenCounts.d.ts +3 -0
  140. package/dist/utils/extractPerplexityTokenCounts.d.ts.map +1 -0
  141. package/dist/utils/extractPerplexityTokenCounts.js +17 -0
  142. package/dist/utils/extractPerplexityTokenCounts.js.map +1 -0
  143. package/dist/utils/extractStopReason.d.ts +2 -0
  144. package/dist/utils/extractStopReason.d.ts.map +1 -0
  145. package/dist/utils/extractStopReason.js +14 -0
  146. package/dist/utils/extractStopReason.js.map +1 -0
  147. package/dist/utils/extractUsageMetadata.d.ts +3 -0
  148. package/dist/utils/extractUsageMetadata.d.ts.map +1 -0
  149. package/dist/utils/extractUsageMetadata.js +15 -0
  150. package/dist/utils/extractUsageMetadata.js.map +1 -0
  151. package/dist/utils/formatTimestamp.d.ts +2 -0
  152. package/dist/utils/formatTimestamp.d.ts.map +1 -0
  153. package/dist/utils/formatTimestamp.js +7 -0
  154. package/dist/utils/formatTimestamp.js.map +1 -0
  155. package/dist/utils/generateTransactionId.d.ts +2 -0
  156. package/dist/utils/generateTransactionId.d.ts.map +1 -0
  157. package/dist/utils/generateTransactionId.js +8 -0
  158. package/dist/utils/generateTransactionId.js.map +1 -0
  159. package/dist/utils/getEnv.d.ts +4 -0
  160. package/dist/utils/getEnv.d.ts.map +1 -0
  161. package/dist/utils/getEnv.js +16 -0
  162. package/dist/utils/getEnv.js.map +1 -0
  163. package/dist/utils/index.d.ts +13 -0
  164. package/dist/utils/index.d.ts.map +1 -0
  165. package/dist/utils/index.js +29 -0
  166. package/dist/utils/index.js.map +1 -0
  167. package/dist/utils/safeExtract.d.ts +2 -0
  168. package/dist/utils/safeExtract.d.ts.map +1 -0
  169. package/dist/utils/safeExtract.js +22 -0
  170. package/dist/utils/safeExtract.js.map +1 -0
  171. package/dist/utils/sendMeteringData.d.ts +3 -0
  172. package/dist/utils/sendMeteringData.d.ts.map +1 -0
  173. package/dist/utils/sendMeteringData.js +35 -0
  174. package/dist/utils/sendMeteringData.js.map +1 -0
  175. package/dist/utils/verifyLogVerbose.d.ts +2 -0
  176. package/dist/utils/verifyLogVerbose.d.ts.map +1 -0
  177. package/dist/utils/verifyLogVerbose.js +10 -0
  178. package/dist/utils/verifyLogVerbose.js.map +1 -0
  179. package/examples/README.md +316 -0
  180. package/examples/basic-client-example.ts +36 -0
  181. package/examples/metadata-example.ts +92 -0
  182. package/examples/multiple-models-example.ts +65 -0
  183. package/examples/openai-client-example.ts +76 -0
  184. package/examples/perplexity_basic_example.ts +24 -0
  185. package/examples/perplexity_middleware_example.ts +222 -0
  186. package/examples/run-all-examples.ts +118 -0
  187. package/examples/simple-test.ts +278 -0
  188. package/examples/streaming-example.ts +46 -0
  189. package/package.json +54 -0
  190. package/src/index.ts +38 -0
  191. package/src/models/Exception/ApiResponseError.ts +6 -0
  192. package/src/models/Exception/ConfigurationError.ts +6 -0
  193. package/src/models/Exception/MeteringError.ts +6 -0
  194. package/src/models/Exception/MiddlewareActivationError.ts +6 -0
  195. package/src/models/Exception/StreamTrackingError.ts +6 -0
  196. package/src/models/Exception/TokenCountingError.ts +6 -0
  197. package/src/models/Exception/index.ts +6 -0
  198. package/src/models/Logger.ts +38 -0
  199. package/src/models/index.ts +2 -0
  200. package/src/perplexity-ai/client.ts +97 -0
  201. package/src/perplexity-ai/index.ts +2 -0
  202. package/src/perplexity-ai/middleware.ts +259 -0
  203. package/src/types/context.ts +9 -0
  204. package/src/types/index.ts +11 -0
  205. package/src/types/metering.ts +28 -0
  206. package/src/types/modelInfo.ts +5 -0
  207. package/src/types/operation.ts +4 -0
  208. package/src/types/perplexityConfig.ts +4 -0
  209. package/src/types/provider.ts +3 -0
  210. package/src/types/reveniumConfig.ts +5 -0
  211. package/src/types/streamTracker.ts +9 -0
  212. package/src/types/subscriber.ts +8 -0
  213. package/src/types/tokenCounts.ts +5 -0
  214. package/src/types/usageData.ts +16 -0
  215. package/src/types/usageMetadata.ts +13 -0
  216. package/src/utils/activeMiddleware.ts +34 -0
  217. package/src/utils/askConsole.ts +15 -0
  218. package/src/utils/calculateDurationMs.ts +3 -0
  219. package/src/utils/constants/constants.ts +17 -0
  220. package/src/utils/constants/messages.ts +35 -0
  221. package/src/utils/createMeteringRequest.ts +16 -0
  222. package/src/utils/createPerplexityMetadata.ts +11 -0
  223. package/src/utils/extractModelName.ts +14 -0
  224. package/src/utils/extractPerplexityTokenCounts.ts +16 -0
  225. package/src/utils/extractStopReason.ts +13 -0
  226. package/src/utils/extractUsageMetadata.ts +15 -0
  227. package/src/utils/formatTimestamp.ts +3 -0
  228. package/src/utils/generateTransactionId.ts +5 -0
  229. package/src/utils/getEnv.ts +16 -0
  230. package/src/utils/index.ts +12 -0
  231. package/src/utils/safeExtract.ts +18 -0
  232. package/src/utils/sendMeteringData.ts +46 -0
  233. package/src/utils/verifyLogVerbose.ts +7 -0
  234. 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);