@revenium/perplexity 2.0.4 → 2.0.6
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/CHANGELOG.md +113 -98
- package/LICENSE +21 -21
- package/README.md +292 -271
- package/SECURITY.md +34 -0
- package/dist/cjs/core/client/index.js +13 -0
- package/dist/cjs/core/client/index.js.map +1 -0
- package/dist/cjs/core/client/manager.js +88 -0
- package/dist/cjs/core/client/manager.js.map +1 -0
- package/dist/cjs/core/config/index.js +21 -0
- package/dist/cjs/core/config/index.js.map +1 -0
- package/dist/cjs/core/config/loader.js +48 -0
- package/dist/cjs/core/config/loader.js.map +1 -0
- package/dist/cjs/core/config/manager.js +77 -0
- package/dist/cjs/core/config/manager.js.map +1 -0
- package/dist/cjs/core/config/validator.js +47 -0
- package/dist/cjs/core/config/validator.js.map +1 -0
- package/dist/cjs/core/middleware/index.js +14 -0
- package/dist/cjs/core/middleware/index.js.map +1 -0
- package/dist/cjs/core/middleware/interfaces.js +94 -0
- package/dist/cjs/core/middleware/interfaces.js.map +1 -0
- package/dist/cjs/core/middleware/revenium-client.js +44 -0
- package/dist/cjs/core/middleware/revenium-client.js.map +1 -0
- package/dist/cjs/core/middleware/streaming-wrapper.js +80 -0
- package/dist/cjs/core/middleware/streaming-wrapper.js.map +1 -0
- package/dist/cjs/core/providers/detector.js +38 -0
- package/dist/cjs/core/providers/detector.js.map +1 -0
- package/dist/cjs/core/providers/index.js +14 -0
- package/dist/cjs/core/providers/index.js.map +1 -0
- package/dist/cjs/core/tracking/api-client.js +67 -0
- package/dist/cjs/core/tracking/api-client.js.map +1 -0
- package/dist/cjs/core/tracking/index.js +21 -0
- package/dist/cjs/core/tracking/index.js.map +1 -0
- package/dist/cjs/core/tracking/payload-builder.js +95 -0
- package/dist/cjs/core/tracking/payload-builder.js.map +1 -0
- package/dist/cjs/core/tracking/usage-tracker.js +83 -0
- package/dist/cjs/core/tracking/usage-tracker.js.map +1 -0
- package/dist/cjs/index.js +55 -59
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/function-parameters.js +14 -0
- package/dist/cjs/types/function-parameters.js.map +1 -0
- package/dist/cjs/types/index.js +20 -1
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/utils/constants.js +20 -0
- package/dist/cjs/utils/constants.js.map +1 -0
- package/dist/cjs/utils/error-handler.js +194 -0
- package/dist/cjs/utils/error-handler.js.map +1 -0
- package/dist/cjs/utils/metadata-builder.js +191 -0
- package/dist/cjs/utils/metadata-builder.js.map +1 -0
- package/dist/cjs/utils/stop-reason-mapper.js +74 -0
- package/dist/cjs/utils/stop-reason-mapper.js.map +1 -0
- package/dist/cjs/utils/transaction-id.js +19 -0
- package/dist/cjs/utils/transaction-id.js.map +1 -0
- package/dist/cjs/utils/url-builder.js +57 -0
- package/dist/cjs/utils/url-builder.js.map +1 -0
- package/dist/esm/core/client/index.js +5 -0
- package/dist/esm/core/client/index.js.map +1 -0
- package/dist/esm/core/client/manager.js +81 -0
- package/dist/esm/core/client/manager.js.map +1 -0
- package/dist/esm/core/config/index.js +11 -0
- package/dist/esm/core/config/index.js.map +1 -0
- package/dist/esm/core/config/loader.js +45 -0
- package/dist/esm/core/config/loader.js.map +1 -0
- package/dist/esm/core/config/manager.js +70 -0
- package/dist/esm/core/config/manager.js.map +1 -0
- package/dist/esm/core/config/validator.js +44 -0
- package/dist/esm/core/config/validator.js.map +1 -0
- package/dist/esm/core/middleware/index.js +7 -0
- package/dist/esm/core/middleware/index.js.map +1 -0
- package/dist/esm/core/middleware/interfaces.js +89 -0
- package/dist/esm/core/middleware/interfaces.js.map +1 -0
- package/dist/esm/core/middleware/revenium-client.js +37 -0
- package/dist/esm/core/middleware/revenium-client.js.map +1 -0
- package/dist/esm/core/middleware/streaming-wrapper.js +76 -0
- package/dist/esm/core/middleware/streaming-wrapper.js.map +1 -0
- package/dist/esm/core/providers/detector.js +34 -0
- package/dist/esm/core/providers/detector.js.map +1 -0
- package/dist/esm/core/providers/index.js +9 -0
- package/dist/esm/core/providers/index.js.map +1 -0
- package/dist/esm/core/tracking/api-client.js +64 -0
- package/dist/esm/core/tracking/api-client.js.map +1 -0
- package/dist/esm/core/tracking/index.js +13 -0
- package/dist/esm/core/tracking/index.js.map +1 -0
- package/dist/esm/core/tracking/payload-builder.js +92 -0
- package/dist/esm/core/tracking/payload-builder.js.map +1 -0
- package/dist/esm/core/tracking/usage-tracker.js +79 -0
- package/dist/esm/core/tracking/usage-tracker.js.map +1 -0
- package/dist/esm/index.js +42 -39
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/function-parameters.js +13 -0
- package/dist/esm/types/function-parameters.js.map +1 -0
- package/dist/esm/types/index.js +6 -2
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/utils/constants.js +17 -0
- package/dist/esm/utils/constants.js.map +1 -0
- package/dist/esm/utils/error-handler.js +182 -0
- package/dist/esm/utils/error-handler.js.map +1 -0
- package/dist/esm/utils/metadata-builder.js +183 -0
- package/dist/esm/utils/metadata-builder.js.map +1 -0
- package/dist/esm/utils/stop-reason-mapper.js +69 -0
- package/dist/esm/utils/stop-reason-mapper.js.map +1 -0
- package/dist/esm/utils/transaction-id.js +16 -0
- package/dist/esm/utils/transaction-id.js.map +1 -0
- package/dist/esm/utils/url-builder.js +53 -0
- package/dist/esm/utils/url-builder.js.map +1 -0
- package/dist/types/core/client/index.d.ts +5 -0
- package/dist/types/core/client/index.d.ts.map +1 -0
- package/dist/types/core/client/manager.d.ts +44 -0
- package/dist/types/core/client/manager.d.ts.map +1 -0
- package/dist/types/core/config/index.d.ts +10 -0
- package/dist/types/core/config/index.d.ts.map +1 -0
- package/dist/types/core/config/loader.d.ts +13 -0
- package/dist/types/core/config/loader.d.ts.map +1 -0
- package/dist/types/core/config/manager.d.ts +28 -0
- package/dist/types/core/config/manager.d.ts.map +1 -0
- package/dist/types/core/config/validator.d.ts +12 -0
- package/dist/types/core/config/validator.d.ts.map +1 -0
- package/dist/types/core/middleware/index.d.ts +7 -0
- package/dist/types/core/middleware/index.d.ts.map +1 -0
- package/dist/types/core/middleware/interfaces.d.ts +35 -0
- package/dist/types/core/middleware/interfaces.d.ts.map +1 -0
- package/dist/types/core/middleware/revenium-client.d.ts +25 -0
- package/dist/types/core/middleware/revenium-client.d.ts.map +1 -0
- package/dist/types/core/middleware/streaming-wrapper.d.ts +21 -0
- package/dist/types/core/middleware/streaming-wrapper.d.ts.map +1 -0
- package/dist/types/core/providers/detector.d.ts +24 -0
- package/dist/types/core/providers/detector.d.ts.map +1 -0
- package/dist/types/core/providers/index.d.ts +8 -0
- package/dist/types/core/providers/index.d.ts.map +1 -0
- package/dist/types/core/tracking/api-client.d.ts +17 -0
- package/dist/types/core/tracking/api-client.d.ts.map +1 -0
- package/dist/types/core/tracking/index.d.ts +11 -0
- package/dist/types/core/tracking/index.d.ts.map +1 -0
- package/dist/types/core/tracking/payload-builder.d.ts +24 -0
- package/dist/types/core/tracking/payload-builder.d.ts.map +1 -0
- package/dist/types/core/tracking/usage-tracker.d.ts +30 -0
- package/dist/types/core/tracking/usage-tracker.d.ts.map +1 -0
- package/dist/types/index.d.ts +50 -26
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/types/function-parameters.d.ts +185 -0
- package/dist/types/types/function-parameters.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +108 -129
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/utils/constants.d.ts +9 -0
- package/dist/types/utils/constants.d.ts.map +1 -0
- package/dist/types/utils/error-handler.d.ts +95 -0
- package/dist/types/utils/error-handler.d.ts.map +1 -0
- package/dist/types/utils/metadata-builder.d.ts +65 -0
- package/dist/types/utils/metadata-builder.d.ts.map +1 -0
- package/dist/types/utils/stop-reason-mapper.d.ts +29 -0
- package/dist/types/utils/stop-reason-mapper.d.ts.map +1 -0
- package/dist/types/utils/transaction-id.d.ts +14 -0
- package/dist/types/utils/transaction-id.d.ts.map +1 -0
- package/dist/types/utils/url-builder.d.ts +22 -0
- package/dist/types/utils/url-builder.d.ts.map +1 -0
- package/examples/README.md +226 -322
- package/examples/advanced.ts +123 -0
- package/examples/basic.ts +45 -50
- package/examples/getting_started.ts +41 -64
- package/examples/metadata.ts +68 -65
- package/examples/stream.ts +53 -0
- package/package.json +72 -72
- package/dist/cjs/constants.js +0 -70
- package/dist/cjs/constants.js.map +0 -1
- package/dist/cjs/core/config/perplexity-config.js +0 -45
- package/dist/cjs/core/config/perplexity-config.js.map +0 -1
- package/dist/cjs/core/config/revenium-config.js +0 -80
- package/dist/cjs/core/config/revenium-config.js.map +0 -1
- package/dist/cjs/core/tracking/metering.js +0 -211
- package/dist/cjs/core/tracking/metering.js.map +0 -1
- package/dist/cjs/core/wrapper/perplexity-client.js +0 -187
- package/dist/cjs/core/wrapper/perplexity-client.js.map +0 -1
- package/dist/cjs/utils/logger.js +0 -23
- package/dist/cjs/utils/logger.js.map +0 -1
- package/dist/esm/constants.js +0 -67
- package/dist/esm/constants.js.map +0 -1
- package/dist/esm/core/config/perplexity-config.js +0 -40
- package/dist/esm/core/config/perplexity-config.js.map +0 -1
- package/dist/esm/core/config/revenium-config.js +0 -72
- package/dist/esm/core/config/revenium-config.js.map +0 -1
- package/dist/esm/core/tracking/metering.js +0 -206
- package/dist/esm/core/tracking/metering.js.map +0 -1
- package/dist/esm/core/wrapper/perplexity-client.js +0 -180
- package/dist/esm/core/wrapper/perplexity-client.js.map +0 -1
- package/dist/esm/utils/logger.js +0 -20
- package/dist/esm/utils/logger.js.map +0 -1
- package/dist/types/constants.d.ts +0 -67
- package/dist/types/constants.d.ts.map +0 -1
- package/dist/types/core/config/perplexity-config.d.ts +0 -24
- package/dist/types/core/config/perplexity-config.d.ts.map +0 -1
- package/dist/types/core/config/revenium-config.d.ts +0 -37
- package/dist/types/core/config/revenium-config.d.ts.map +0 -1
- package/dist/types/core/tracking/metering.d.ts +0 -31
- package/dist/types/core/tracking/metering.d.ts.map +0 -1
- package/dist/types/core/wrapper/perplexity-client.d.ts +0 -32
- package/dist/types/core/wrapper/perplexity-client.d.ts.map +0 -1
- package/dist/types/utils/logger.d.ts +0 -10
- package/dist/types/utils/logger.d.ts.map +0 -1
- package/examples/advanced-features.ts +0 -148
- package/examples/chat.ts +0 -73
- package/examples/streaming.ts +0 -50
package/examples/README.md
CHANGED
|
@@ -1,322 +1,226 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
This
|
|
4
|
-
|
|
5
|
-
## Prerequisites
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
- Simple
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
**
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
-
|
|
163
|
-
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
**
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
**
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
Response: [First 80 characters]...
|
|
228
|
-
|
|
229
|
-
✓ Multiple models demonstrated
|
|
230
|
-
|
|
231
|
-
=== All Advanced Features Demonstrated ===
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
---
|
|
235
|
-
|
|
236
|
-
### 6. Getting Started
|
|
237
|
-
|
|
238
|
-
**Location**: `examples/getting_started.ts`
|
|
239
|
-
|
|
240
|
-
**What it demonstrates:**
|
|
241
|
-
|
|
242
|
-
- Quick start example
|
|
243
|
-
- Minimal configuration
|
|
244
|
-
- Basic usage pattern
|
|
245
|
-
|
|
246
|
-
**Run it:**
|
|
247
|
-
|
|
248
|
-
```bash
|
|
249
|
-
npm run example:getting-started
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
---
|
|
253
|
-
|
|
254
|
-
## Troubleshooting
|
|
255
|
-
|
|
256
|
-
### "Missing API Key" Error
|
|
257
|
-
|
|
258
|
-
Make sure you've created a `.env` file with your API keys:
|
|
259
|
-
|
|
260
|
-
```bash
|
|
261
|
-
# Check if .env exists
|
|
262
|
-
ls .env
|
|
263
|
-
|
|
264
|
-
# Verify it has the required keys
|
|
265
|
-
cat .env
|
|
266
|
-
```
|
|
267
|
-
|
|
268
|
-
### "Module not found" Error
|
|
269
|
-
|
|
270
|
-
Install dependencies first:
|
|
271
|
-
|
|
272
|
-
```bash
|
|
273
|
-
npm install
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
### "Requests not being tracked"
|
|
277
|
-
|
|
278
|
-
1. Check your `.env` file has correct values:
|
|
279
|
-
|
|
280
|
-
- `PERPLEXITY_API_KEY` is set
|
|
281
|
-
- `REVENIUM_METERING_API_KEY` is set
|
|
282
|
-
- `REVENIUM_METERING_BASE_URL` is set to `https://api.revenium.ai`
|
|
283
|
-
|
|
284
|
-
2. Enable debug logging:
|
|
285
|
-
|
|
286
|
-
```bash
|
|
287
|
-
DEBUG=true npm run example:basic
|
|
288
|
-
```
|
|
289
|
-
|
|
290
|
-
### TypeScript Errors
|
|
291
|
-
|
|
292
|
-
Ensure you have TypeScript and tsx installed:
|
|
293
|
-
|
|
294
|
-
```bash
|
|
295
|
-
npm install -D typescript tsx @types/node
|
|
296
|
-
```
|
|
297
|
-
|
|
298
|
-
---
|
|
299
|
-
|
|
300
|
-
## Getting Your API Keys
|
|
301
|
-
|
|
302
|
-
### Perplexity API Key
|
|
303
|
-
|
|
304
|
-
1. Go to [Perplexity AI Settings](https://www.perplexity.ai/settings/api)
|
|
305
|
-
2. Create a new API key
|
|
306
|
-
3. Add to `.env` as `PERPLEXITY_API_KEY`
|
|
307
|
-
|
|
308
|
-
### Revenium API Key
|
|
309
|
-
|
|
310
|
-
1. Sign up at [Revenium](https://ai.revenium.io)
|
|
311
|
-
2. Create a new API key in your dashboard
|
|
312
|
-
3. Add to `.env` as `REVENIUM_METERING_API_KEY`
|
|
313
|
-
|
|
314
|
-
---
|
|
315
|
-
|
|
316
|
-
## Support
|
|
317
|
-
|
|
318
|
-
For issues or questions:
|
|
319
|
-
|
|
320
|
-
- [GitHub Issues](https://github.com/revenium/revenium-middleware-perplexity-node/issues)
|
|
321
|
-
- [Documentation](https://docs.revenium.io)
|
|
322
|
-
- Contact: Reach out to the Revenium team for additional support
|
|
1
|
+
# Revenium Perplexity Middleware - Examples
|
|
2
|
+
|
|
3
|
+
This directory contains examples demonstrating how to use the Revenium Perplexity middleware.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
Before running the examples, make sure you have:
|
|
8
|
+
|
|
9
|
+
1. **Node.js 16 or later** installed
|
|
10
|
+
2. **Revenium API Key** - Get one from [Revenium Dashboard](https://app.revenium.io)
|
|
11
|
+
3. **Perplexity API Key** - Get one from [Perplexity Platform](https://www.perplexity.ai)
|
|
12
|
+
|
|
13
|
+
## Setup
|
|
14
|
+
|
|
15
|
+
1. **Clone the repository** (if you haven't already):
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
git clone https://github.com/revenium/revenium-middleware-perplexity-node.git
|
|
19
|
+
cd revenium-middleware-perplexity-node
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
2. **Install dependencies**:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npm install
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
3. **Configure environment variables**:
|
|
29
|
+
|
|
30
|
+
Copy the `.env.example` file to `.env` and edit it with your API keys:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
cp .env.example .env
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
See [.env.example](https://github.com/revenium/revenium-middleware-perplexity-node/blob/HEAD/.env.example) for all available configuration options.
|
|
37
|
+
|
|
38
|
+
## Examples
|
|
39
|
+
|
|
40
|
+
### 1. Getting Started
|
|
41
|
+
|
|
42
|
+
**File:** `getting_started.ts`
|
|
43
|
+
|
|
44
|
+
The simplest example to get you started with Revenium tracking:
|
|
45
|
+
|
|
46
|
+
- Initialize the middleware
|
|
47
|
+
- Create a basic chat completion
|
|
48
|
+
- Display response and usage metrics
|
|
49
|
+
|
|
50
|
+
**Run:**
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npm run example:getting-started
|
|
54
|
+
# or
|
|
55
|
+
npx tsx examples/getting_started.ts
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**What it does:**
|
|
59
|
+
|
|
60
|
+
- Loads configuration from environment variables
|
|
61
|
+
- Creates a simple chat completion request
|
|
62
|
+
- Automatically sends metering data to Revenium API
|
|
63
|
+
- Displays the response
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
### 2. Basic Usage
|
|
68
|
+
|
|
69
|
+
**File:** `basic.ts`
|
|
70
|
+
|
|
71
|
+
Demonstrates standard Perplexity API usage:
|
|
72
|
+
|
|
73
|
+
- Chat completions with metadata
|
|
74
|
+
- Simple metadata tracking
|
|
75
|
+
|
|
76
|
+
**Run:**
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
npm run example:basic
|
|
80
|
+
# or
|
|
81
|
+
npx tsx examples/basic.ts
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**What it does:**
|
|
85
|
+
|
|
86
|
+
- Creates chat completions with metadata tracking
|
|
87
|
+
- Demonstrates basic metadata usage
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
### 3. Metadata
|
|
92
|
+
|
|
93
|
+
**File:** `metadata.ts`
|
|
94
|
+
|
|
95
|
+
Demonstrates all available metadata fields:
|
|
96
|
+
|
|
97
|
+
- Complete metadata structure
|
|
98
|
+
- All optional fields documented
|
|
99
|
+
- Subscriber information
|
|
100
|
+
|
|
101
|
+
**Run:**
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
npm run example:metadata
|
|
105
|
+
# or
|
|
106
|
+
npx tsx examples/metadata.ts
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
**What it does:**
|
|
110
|
+
|
|
111
|
+
- Shows all available metadata fields
|
|
112
|
+
- Demonstrates subscriber tracking
|
|
113
|
+
- Includes organization and product tracking
|
|
114
|
+
|
|
115
|
+
**Metadata fields supported:**
|
|
116
|
+
|
|
117
|
+
- `traceId` - Session or conversation tracking identifier
|
|
118
|
+
- `taskType` - Type of AI task being performed
|
|
119
|
+
- `agent` - AI agent or bot identifier
|
|
120
|
+
- `organizationId` - Organization identifier
|
|
121
|
+
- `productId` - Product or service identifier
|
|
122
|
+
- `subscriptionId` - Subscription tier identifier
|
|
123
|
+
- `responseQualityScore` - Quality rating (0.0-1.0)
|
|
124
|
+
- `subscriber` - Nested subscriber object with `id`, `email`, `credential` (with `name` and `value`)
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
### 4. Streaming
|
|
129
|
+
|
|
130
|
+
**File:** `stream.ts`
|
|
131
|
+
|
|
132
|
+
Demonstrates streaming responses:
|
|
133
|
+
|
|
134
|
+
- Real-time token streaming
|
|
135
|
+
- Accumulating responses
|
|
136
|
+
- Streaming metrics
|
|
137
|
+
|
|
138
|
+
**Run:**
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
npm run example:stream
|
|
142
|
+
# or
|
|
143
|
+
npx tsx examples/stream.ts
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**What it does:**
|
|
147
|
+
|
|
148
|
+
- Creates a streaming chat completion
|
|
149
|
+
- Displays tokens as they arrive in real-time
|
|
150
|
+
- Tracks streaming metrics
|
|
151
|
+
- Sends metering data after stream completes
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
### 5. Advanced Features
|
|
156
|
+
|
|
157
|
+
**File:** `advanced.ts`
|
|
158
|
+
|
|
159
|
+
Demonstrates advanced Perplexity features:
|
|
160
|
+
|
|
161
|
+
- Multi-turn conversations
|
|
162
|
+
- Different temperature settings
|
|
163
|
+
- Multiple Perplexity models
|
|
164
|
+
|
|
165
|
+
**Run:**
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
npm run example:advanced
|
|
169
|
+
# or
|
|
170
|
+
npx tsx examples/advanced.ts
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
**What it does:**
|
|
174
|
+
|
|
175
|
+
- Demonstrates multi-turn conversation with system prompt
|
|
176
|
+
- Shows creative responses with higher temperature
|
|
177
|
+
- Uses sonar-reasoning model for complex reasoning tasks
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## Common Issues
|
|
182
|
+
|
|
183
|
+
### "Client not initialized" error
|
|
184
|
+
|
|
185
|
+
**Solution:** Make sure to call `Initialize()` before using `GetClient()`.
|
|
186
|
+
|
|
187
|
+
### "REVENIUM_METERING_API_KEY is required" error
|
|
188
|
+
|
|
189
|
+
**Solution:** Set the `REVENIUM_METERING_API_KEY` environment variable in your `.env` file.
|
|
190
|
+
|
|
191
|
+
### "invalid Revenium API key format" error
|
|
192
|
+
|
|
193
|
+
**Solution:** Revenium API keys should start with `hak_`. Check your API key format.
|
|
194
|
+
|
|
195
|
+
### Environment variables not loading
|
|
196
|
+
|
|
197
|
+
**Solution:** Make sure your `.env` file is in the project root directory and contains the required variables.
|
|
198
|
+
|
|
199
|
+
### Perplexity API errors
|
|
200
|
+
|
|
201
|
+
**Solution:** Make sure you have set `PERPLEXITY_API_KEY` in your `.env` file and that it starts with `pplx-`.
|
|
202
|
+
|
|
203
|
+
### Debug Mode
|
|
204
|
+
|
|
205
|
+
Enable detailed logging to troubleshoot issues:
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
# In .env file
|
|
209
|
+
REVENIUM_DEBUG=true
|
|
210
|
+
|
|
211
|
+
# Then run examples
|
|
212
|
+
npm run example:getting-started
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## Next Steps
|
|
216
|
+
|
|
217
|
+
- Check the [main README](https://github.com/revenium/revenium-middleware-perplexity-node/blob/HEAD/README.md) for detailed documentation
|
|
218
|
+
- Visit the [Revenium Dashboard](https://app.revenium.io) to view your metering data
|
|
219
|
+
- See [.env.example](https://github.com/revenium/revenium-middleware-perplexity-node/blob/HEAD/.env.example) for all configuration options
|
|
220
|
+
|
|
221
|
+
## Support
|
|
222
|
+
|
|
223
|
+
For issues or questions:
|
|
224
|
+
|
|
225
|
+
- Documentation: https://docs.revenium.io
|
|
226
|
+
- Email: support@revenium.io
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Advanced Example
|
|
3
|
+
* Demonstrates advanced features like system prompts, conversation history,
|
|
4
|
+
* and different model parameters with Revenium Perplexity middleware.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Initialize, GetClient, UsageMetadata } from "@revenium/perplexity";
|
|
8
|
+
|
|
9
|
+
async function main() {
|
|
10
|
+
// Initialize middleware
|
|
11
|
+
Initialize();
|
|
12
|
+
|
|
13
|
+
// Get client
|
|
14
|
+
const client = GetClient();
|
|
15
|
+
|
|
16
|
+
// Metadata for tracking
|
|
17
|
+
const metadata: UsageMetadata = {
|
|
18
|
+
organizationId: "org-advanced-demo",
|
|
19
|
+
productId: "prod-perplexity-advanced",
|
|
20
|
+
taskType: "multi-turn-conversation",
|
|
21
|
+
subscriber: {
|
|
22
|
+
id: "user-advanced-001",
|
|
23
|
+
email: "advanced@example.com",
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
console.log("=== Advanced Perplexity Example ===\n");
|
|
28
|
+
|
|
29
|
+
// Example 1: Using system prompt and conversation history
|
|
30
|
+
console.log("1. Multi-turn conversation with system prompt:\n");
|
|
31
|
+
|
|
32
|
+
const response1 = await client
|
|
33
|
+
.chat()
|
|
34
|
+
.completions()
|
|
35
|
+
.create(
|
|
36
|
+
{
|
|
37
|
+
model: "sonar-pro",
|
|
38
|
+
messages: [
|
|
39
|
+
{
|
|
40
|
+
role: "system",
|
|
41
|
+
content:
|
|
42
|
+
"You are a helpful AI assistant that provides concise, accurate answers.",
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
role: "user",
|
|
46
|
+
content: "What is the capital of France?",
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
role: "assistant",
|
|
50
|
+
content: "The capital of France is Paris.",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
role: "user",
|
|
54
|
+
content: "What is its population?",
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
max_tokens: 500,
|
|
58
|
+
temperature: 0.7,
|
|
59
|
+
},
|
|
60
|
+
metadata
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
console.log(`Assistant: ${response1.choices[0].message.content}\n`);
|
|
64
|
+
console.log(`Tokens used: ${response1.usage?.total_tokens}\n`);
|
|
65
|
+
|
|
66
|
+
// Example 2: Using different temperature for creative responses
|
|
67
|
+
console.log("2. Creative response with higher temperature:\n");
|
|
68
|
+
|
|
69
|
+
const response2 = await client
|
|
70
|
+
.chat()
|
|
71
|
+
.completions()
|
|
72
|
+
.create(
|
|
73
|
+
{
|
|
74
|
+
model: "sonar-pro",
|
|
75
|
+
messages: [
|
|
76
|
+
{
|
|
77
|
+
role: "user",
|
|
78
|
+
content:
|
|
79
|
+
"Write a creative tagline for an AI company in 10 words or less.",
|
|
80
|
+
},
|
|
81
|
+
],
|
|
82
|
+
max_tokens: 100,
|
|
83
|
+
temperature: 1.0, // Higher temperature for more creativity
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
...metadata,
|
|
87
|
+
taskType: "creative-generation",
|
|
88
|
+
}
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
console.log(`Assistant: ${response2.choices[0].message.content}\n`);
|
|
92
|
+
|
|
93
|
+
// Example 3: Using sonar-reasoning for complex reasoning tasks
|
|
94
|
+
console.log("3. Complex reasoning with sonar-reasoning model:\n");
|
|
95
|
+
|
|
96
|
+
const response3 = await client
|
|
97
|
+
.chat()
|
|
98
|
+
.completions()
|
|
99
|
+
.create(
|
|
100
|
+
{
|
|
101
|
+
model: "sonar-reasoning",
|
|
102
|
+
messages: [
|
|
103
|
+
{
|
|
104
|
+
role: "user",
|
|
105
|
+
content:
|
|
106
|
+
"If a train travels 120 km in 2 hours, and then 180 km in 3 hours, what is its average speed for the entire journey?",
|
|
107
|
+
},
|
|
108
|
+
],
|
|
109
|
+
max_tokens: 500,
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
...metadata,
|
|
113
|
+
taskType: "reasoning",
|
|
114
|
+
}
|
|
115
|
+
);
|
|
116
|
+
|
|
117
|
+
console.log(`Assistant: ${response3.choices[0].message.content}\n`);
|
|
118
|
+
console.log(`Tokens used: ${response3.usage?.total_tokens}\n`);
|
|
119
|
+
|
|
120
|
+
console.log("\nAll usage data sent to Revenium! Check your dashboard");
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
main().catch(console.error);
|