@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.
Files changed (255) hide show
  1. package/.env.example +2 -2
  2. package/README.md +448 -566
  3. package/examples/basic.ts +17 -0
  4. package/examples/chat-completions.ts +22 -0
  5. package/examples/enhanced.ts +20 -0
  6. package/examples/streaming.ts +24 -0
  7. package/package.json +45 -61
  8. package/playground/basic.js +7 -17
  9. package/playground/enhanced.js +9 -22
  10. package/playground/streaming.js +10 -26
  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/basic-client-example.ts +0 -36
  211. package/examples/metadata-example.ts +0 -97
  212. package/examples/multiple-models-example.ts +0 -65
  213. package/examples/openai-client-example.ts +0 -76
  214. package/examples/perplexity_basic_example.ts +0 -24
  215. package/examples/perplexity_middleware_example.ts +0 -222
  216. package/examples/run-all-examples.ts +0 -118
  217. package/examples/simple-test.ts +0 -278
  218. package/examples/streaming-example.ts +0 -46
  219. package/playground/custom-config.js +0 -82
  220. package/playground/metadata.js +0 -94
  221. package/playground/multiple-models.js +0 -62
  222. package/playground/openai-client.js +0 -73
  223. package/src/models/Exception/ApiResponseError.ts +0 -6
  224. package/src/models/Exception/ConfigurationError.ts +0 -6
  225. package/src/models/Exception/MeteringError.ts +0 -6
  226. package/src/models/Exception/MiddlewareActivationError.ts +0 -6
  227. package/src/models/Exception/StreamTrackingError.ts +0 -6
  228. package/src/models/Exception/TokenCountingError.ts +0 -6
  229. package/src/models/Exception/index.ts +0 -6
  230. package/src/models/index.ts +0 -2
  231. package/src/perplexity-ai/client.ts +0 -100
  232. package/src/perplexity-ai/index.ts +0 -2
  233. package/src/perplexity-ai/middleware.ts +0 -297
  234. package/src/types/context.ts +0 -9
  235. package/src/types/index.ts +0 -11
  236. package/src/types/modelInfo.ts +0 -5
  237. package/src/types/operation.ts +0 -4
  238. package/src/types/perplexityConfig.ts +0 -4
  239. package/src/types/provider.ts +0 -3
  240. package/src/types/reveniumConfig.ts +0 -5
  241. package/src/types/streamTracker.ts +0 -9
  242. package/src/types/tokenCounts.ts +0 -5
  243. package/src/types/usageData.ts +0 -16
  244. package/src/utils/activeMiddleware.ts +0 -34
  245. package/src/utils/askConsole.ts +0 -15
  246. package/src/utils/createMeteringRequest.ts +0 -16
  247. package/src/utils/createPerplexityMetadata.ts +0 -11
  248. package/src/utils/extractModelName.ts +0 -14
  249. package/src/utils/extractPerplexityTokenCounts.ts +0 -16
  250. package/src/utils/extractStopReason.ts +0 -13
  251. package/src/utils/extractUsageMetadata.ts +0 -15
  252. package/src/utils/getEnv.ts +0 -16
  253. package/src/utils/sendMeteringData.ts +0 -46
  254. package/src/utils/verifyLogVerbose.ts +0 -7
  255. /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();
@@ -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();
@@ -1,6 +0,0 @@
1
- export class ApiResponseError extends Error {
2
- constructor(message: string, public statusCode?: number, public response?: any) {
3
- super(message);
4
- this.name = 'ApiResponseError';
5
- }
6
- }
@@ -1,6 +0,0 @@
1
- export class ConfigurationError extends Error {
2
- constructor(message: string) {
3
- super(message);
4
- this.name = 'ConfigurationError';
5
- }
6
- }
@@ -1,6 +0,0 @@
1
- export class MeteringError extends Error {
2
- constructor(message: string, public originalError?: Error) {
3
- super(message);
4
- this.name = 'MeteringError';
5
- }
6
- }
@@ -1,6 +0,0 @@
1
- export class MiddlewareActivationError extends Error {
2
- constructor(message: string) {
3
- super(message);
4
- this.name = 'MiddlewareActivationError';
5
- }
6
- }
@@ -1,6 +0,0 @@
1
- export class StreamTrackingError extends Error {
2
- constructor(message: string) {
3
- super(message);
4
- this.name = 'StreamTrackingError';
5
- }
6
- }
@@ -1,6 +0,0 @@
1
- export class TokenCountingError extends Error {
2
- constructor(message: string) {
3
- super(message);
4
- this.name = 'TokenCountingError';
5
- }
6
- }
@@ -1,6 +0,0 @@
1
- export * from "./ApiResponseError";
2
- export * from "./ConfigurationError";
3
- export * from "./MeteringError";
4
- export * from "./MiddlewareActivationError";
5
- export * from "./StreamTrackingError";
6
- export * from "./TokenCountingError";
@@ -1,2 +0,0 @@
1
- export * from "./Logger";
2
- export * from "./Exception";
@@ -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 };
@@ -1,2 +0,0 @@
1
- export * from "./middleware";
2
- export * from "./client";