@revenium/perplexity 2.0.3 → 2.0.5
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 +47 -10
- package/README.md +144 -720
- package/SECURITY.md +34 -0
- package/dist/cjs/constants/models.js +38 -0
- package/dist/cjs/constants/models.js.map +1 -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 +85 -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 +45 -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 +60 -54
- package/dist/cjs/index.js.map +1 -0
- 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 -16
- package/dist/cjs/types/index.js.map +1 -0
- 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/constants/models.js +35 -0
- package/dist/esm/constants/models.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 +78 -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 +42 -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 +46 -36
- package/dist/esm/index.js.map +1 -0
- 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 -15
- package/dist/esm/types/index.js.map +1 -0
- 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/constants/models.d.ts +39 -0
- package/dist/types/constants/models.d.ts.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 +56 -27
- package/dist/types/index.d.ts.map +1 -0
- 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 -137
- package/dist/types/types/index.d.ts.map +1 -0
- 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 +136 -233
- package/examples/advanced.ts +123 -0
- package/examples/basic.ts +36 -46
- package/examples/getting_started.ts +41 -0
- package/examples/metadata.ts +55 -59
- package/examples/stream.ts +53 -0
- package/package.json +12 -17
- package/dist/cjs/core/config/perplexity-config.js +0 -45
- package/dist/cjs/core/config/revenium-config.js +0 -80
- package/dist/cjs/core/tracking/metering.js +0 -131
- package/dist/cjs/core/wrapper/perplexity-client.js +0 -177
- package/dist/cjs/utils/logger.js +0 -23
- package/dist/esm/core/config/perplexity-config.js +0 -40
- package/dist/esm/core/config/revenium-config.js +0 -72
- package/dist/esm/core/tracking/metering.js +0 -126
- package/dist/esm/core/wrapper/perplexity-client.js +0 -170
- package/dist/esm/utils/logger.js +0 -20
- package/dist/types/core/config/perplexity-config.d.ts +0 -24
- package/dist/types/core/config/revenium-config.d.ts +0 -37
- package/dist/types/core/tracking/metering.d.ts +0 -31
- package/dist/types/core/wrapper/perplexity-client.d.ts +0 -32
- package/dist/types/utils/logger.d.ts +0 -10
- package/examples/chat.ts +0 -87
- package/examples/streaming.ts +0 -61
package/examples/README.md
CHANGED
|
@@ -1,323 +1,226 @@
|
|
|
1
|
-
# Revenium Perplexity
|
|
1
|
+
# Revenium Perplexity Middleware - Examples
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
This directory contains examples demonstrating how to use the Revenium Perplexity middleware.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Prerequisites
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Before running the examples, make sure you have:
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
1. **Node.js 20 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)
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
## Setup
|
|
13
14
|
|
|
14
|
-
**
|
|
15
|
+
1. **Clone the repository** (if you haven't already):
|
|
15
16
|
|
|
16
|
-
|
|
17
|
+
```bash
|
|
18
|
+
git clone https://github.com/revenium/revenium-middleware-perplexity-node.git
|
|
19
|
+
cd revenium-middleware-perplexity-node
|
|
20
|
+
```
|
|
17
21
|
|
|
18
|
-
|
|
22
|
+
2. **Install dependencies**:
|
|
19
23
|
|
|
20
|
-
```bash
|
|
21
|
-
npm install
|
|
22
|
-
|
|
23
|
-
```
|
|
24
|
+
```bash
|
|
25
|
+
npm install
|
|
26
|
+
```
|
|
24
27
|
|
|
25
|
-
|
|
28
|
+
3. **Configure environment variables**:
|
|
26
29
|
|
|
27
|
-
|
|
30
|
+
Copy the `.env.example` file to `.env` and edit it with your API keys:
|
|
28
31
|
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
|
|
32
|
+
```bash
|
|
33
|
+
cp .env.example .env
|
|
34
|
+
```
|
|
32
35
|
|
|
33
|
-
|
|
34
|
-
REVENIUM_METERING_API_KEY=hak_your_revenium_key
|
|
35
|
-
REVENIUM_METERING_BASE_URL=https://api.revenium.io/meter/v2
|
|
36
|
+
See [.env.example](https://github.com/revenium/revenium-middleware-perplexity-node/blob/HEAD/.env.example) for all available configuration options.
|
|
36
37
|
|
|
37
|
-
|
|
38
|
-
PERPLEXITY_API_BASE_URL=https://api.perplexity.ai
|
|
38
|
+
## Examples
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
DEBUG=true
|
|
42
|
-
```
|
|
40
|
+
### 1. Getting Started
|
|
43
41
|
|
|
44
|
-
|
|
42
|
+
**File:** `getting_started.ts`
|
|
45
43
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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:**
|
|
53
51
|
|
|
54
|
-
Or run all examples:
|
|
55
52
|
```bash
|
|
56
|
-
npm
|
|
53
|
+
npm run example:getting-started
|
|
54
|
+
# or
|
|
55
|
+
npx tsx examples/getting_started.ts
|
|
57
56
|
```
|
|
58
57
|
|
|
59
|
-
|
|
58
|
+
**What it does:**
|
|
60
59
|
|
|
61
|
-
|
|
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
|
|
62
64
|
|
|
63
|
-
|
|
64
|
-
```typescript
|
|
65
|
-
// test-perplexity.ts
|
|
66
|
-
import { config } from "dotenv";
|
|
67
|
-
import {
|
|
68
|
-
initializeReveniumFromEnv,
|
|
69
|
-
initializePerplexityFromEnv,
|
|
70
|
-
createChatCompletion,
|
|
71
|
-
} from "@revenium/perplexity";
|
|
65
|
+
---
|
|
72
66
|
|
|
73
|
-
|
|
67
|
+
### 2. Basic Usage
|
|
74
68
|
|
|
75
|
-
|
|
76
|
-
// Initialize configurations
|
|
77
|
-
initializeReveniumFromEnv();
|
|
78
|
-
initializePerplexityFromEnv();
|
|
69
|
+
**File:** `basic.ts`
|
|
79
70
|
|
|
80
|
-
|
|
81
|
-
const result = await createChatCompletion({
|
|
82
|
-
messages: [{ role: "user", content: "Hello!" }],
|
|
83
|
-
model: "sonar-pro",
|
|
84
|
-
});
|
|
71
|
+
Demonstrates standard Perplexity API usage:
|
|
85
72
|
|
|
86
|
-
|
|
87
|
-
|
|
73
|
+
- Chat completions with metadata
|
|
74
|
+
- Simple metadata tracking
|
|
88
75
|
|
|
89
|
-
|
|
90
|
-
```
|
|
76
|
+
**Run:**
|
|
91
77
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
const {
|
|
97
|
-
initializeReveniumFromEnv,
|
|
98
|
-
initializePerplexityFromEnv,
|
|
99
|
-
createChatCompletion
|
|
100
|
-
} = require("@revenium/perplexity");
|
|
101
|
-
|
|
102
|
-
async function test() {
|
|
103
|
-
initializeReveniumFromEnv();
|
|
104
|
-
initializePerplexityFromEnv();
|
|
105
|
-
|
|
106
|
-
const result = await createChatCompletion({
|
|
107
|
-
messages: [{ role: "user", content: "Hello!" }],
|
|
108
|
-
model: "sonar-pro",
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
console.log(result.choices[0].message.content);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
test();
|
|
78
|
+
```bash
|
|
79
|
+
npm run example:basic
|
|
80
|
+
# or
|
|
81
|
+
npx tsx examples/basic.ts
|
|
115
82
|
```
|
|
116
83
|
|
|
117
|
-
|
|
84
|
+
**What it does:**
|
|
118
85
|
|
|
119
|
-
|
|
86
|
+
- Creates chat completions with metadata tracking
|
|
87
|
+
- Demonstrates basic metadata usage
|
|
120
88
|
|
|
121
|
-
|
|
122
|
-
{
|
|
123
|
-
"scripts": {
|
|
124
|
-
"test:perplexity": "tsx test-perplexity.ts"
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
```
|
|
89
|
+
---
|
|
128
90
|
|
|
129
|
-
|
|
130
|
-
```json
|
|
131
|
-
{
|
|
132
|
-
"scripts": {
|
|
133
|
-
"test:perplexity": "node test-perplexity.js"
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
```
|
|
91
|
+
### 3. Metadata
|
|
137
92
|
|
|
138
|
-
|
|
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:**
|
|
139
102
|
|
|
140
103
|
```bash
|
|
141
|
-
npm run
|
|
104
|
+
npm run example:metadata
|
|
105
|
+
# or
|
|
106
|
+
npx tsx examples/metadata.ts
|
|
142
107
|
```
|
|
143
108
|
|
|
144
|
-
|
|
109
|
+
**What it does:**
|
|
145
110
|
|
|
146
|
-
|
|
147
|
-
-
|
|
148
|
-
-
|
|
149
|
-
- `chat.ts` - Multi-turn conversations with context
|
|
150
|
-
- `metadata.ts` - Custom usage tracking and analytics
|
|
111
|
+
- Shows all available metadata fields
|
|
112
|
+
- Demonstrates subscriber tracking
|
|
113
|
+
- Includes organization and product tracking
|
|
151
114
|
|
|
152
|
-
|
|
115
|
+
**Metadata fields supported:**
|
|
153
116
|
|
|
154
|
-
|
|
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`)
|
|
155
125
|
|
|
156
|
-
|
|
157
|
-
your-project/
|
|
158
|
-
├── .env # Your API keys (DON'T COMMIT!)
|
|
159
|
-
├── .env.example # Template for others
|
|
160
|
-
├── .gitignore # Include .env
|
|
161
|
-
├── package.json
|
|
162
|
-
├── src/
|
|
163
|
-
│ ├── perplexity/
|
|
164
|
-
│ │ ├── client.ts # Perplexity client setup
|
|
165
|
-
│ │ └── prompts.ts # Your prompts
|
|
166
|
-
│ └── index.ts
|
|
167
|
-
└── tests/
|
|
168
|
-
└── perplexity.test.ts
|
|
169
|
-
```
|
|
126
|
+
---
|
|
170
127
|
|
|
171
|
-
|
|
128
|
+
### 4. Streaming
|
|
172
129
|
|
|
173
|
-
|
|
130
|
+
**File:** `stream.ts`
|
|
174
131
|
|
|
175
|
-
|
|
132
|
+
Demonstrates streaming responses:
|
|
176
133
|
|
|
177
|
-
|
|
178
|
-
-
|
|
179
|
-
-
|
|
180
|
-
- Automatic metering to Revenium
|
|
134
|
+
- Real-time token streaming
|
|
135
|
+
- Accumulating responses
|
|
136
|
+
- Streaming metrics
|
|
181
137
|
|
|
182
138
|
**Run:**
|
|
139
|
+
|
|
183
140
|
```bash
|
|
184
|
-
npm run example:
|
|
141
|
+
npm run example:stream
|
|
142
|
+
# or
|
|
143
|
+
npx tsx examples/stream.ts
|
|
185
144
|
```
|
|
186
145
|
|
|
187
|
-
|
|
146
|
+
**What it does:**
|
|
188
147
|
|
|
189
|
-
|
|
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
|
|
190
152
|
|
|
191
|
-
|
|
192
|
-
- Streaming chat completions
|
|
193
|
-
- Real-time content delivery
|
|
194
|
-
- Automatic tracking when stream completes
|
|
153
|
+
---
|
|
195
154
|
|
|
196
|
-
|
|
197
|
-
```bash
|
|
198
|
-
npm run example:streaming
|
|
199
|
-
```
|
|
155
|
+
### 5. Advanced Features
|
|
200
156
|
|
|
201
|
-
|
|
157
|
+
**File:** `advanced.ts`
|
|
202
158
|
|
|
203
|
-
|
|
159
|
+
Demonstrates advanced Perplexity features:
|
|
204
160
|
|
|
205
|
-
|
|
206
|
-
-
|
|
207
|
-
-
|
|
208
|
-
- Multi-message interactions
|
|
161
|
+
- Multi-turn conversations
|
|
162
|
+
- Different temperature settings
|
|
163
|
+
- Multiple Perplexity models
|
|
209
164
|
|
|
210
165
|
**Run:**
|
|
166
|
+
|
|
211
167
|
```bash
|
|
212
|
-
npm run example:
|
|
168
|
+
npm run example:advanced
|
|
169
|
+
# or
|
|
170
|
+
npx tsx examples/advanced.ts
|
|
213
171
|
```
|
|
214
172
|
|
|
215
|
-
|
|
173
|
+
**What it does:**
|
|
216
174
|
|
|
217
|
-
|
|
175
|
+
- Demonstrates multi-turn conversation with system prompt
|
|
176
|
+
- Shows creative responses with higher temperature
|
|
177
|
+
- Uses sonar-reasoning model for complex reasoning tasks
|
|
218
178
|
|
|
219
|
-
|
|
220
|
-
- Custom subscriber information
|
|
221
|
-
- Organization and product tracking
|
|
222
|
-
- Quality scoring
|
|
223
|
-
- Business analytics integration
|
|
179
|
+
---
|
|
224
180
|
|
|
225
|
-
|
|
226
|
-
```bash
|
|
227
|
-
npm run example:metadata
|
|
228
|
-
```
|
|
181
|
+
## Common Issues
|
|
229
182
|
|
|
230
|
-
|
|
183
|
+
### "Client not initialized" error
|
|
231
184
|
|
|
232
|
-
|
|
185
|
+
**Solution:** Make sure to call `Initialize()` before using `GetClient()`.
|
|
233
186
|
|
|
234
|
-
|
|
235
|
-
import {
|
|
236
|
-
initializeReveniumFromEnv,
|
|
237
|
-
initializePerplexityFromEnv,
|
|
238
|
-
createChatCompletion
|
|
239
|
-
} from "@revenium/perplexity";
|
|
240
|
-
```
|
|
187
|
+
### "REVENIUM_METERING_API_KEY is required" error
|
|
241
188
|
|
|
242
|
-
|
|
189
|
+
**Solution:** Set the `REVENIUM_METERING_API_KEY` environment variable in your `.env` file.
|
|
243
190
|
|
|
244
|
-
|
|
245
|
-
import {
|
|
246
|
-
initializeRevenium,
|
|
247
|
-
initializePerplexity,
|
|
248
|
-
createChatCompletion
|
|
249
|
-
} from "@revenium/perplexity";
|
|
191
|
+
### "invalid Revenium API key format" error
|
|
250
192
|
|
|
251
|
-
|
|
252
|
-
initializeRevenium({
|
|
253
|
-
apiKey: process.env.REVENIUM_METERING_API_KEY!,
|
|
254
|
-
baseUrl: "https://api.revenium.io/meter/v2"
|
|
255
|
-
});
|
|
193
|
+
**Solution:** Revenium API keys should start with `hak_`. Check your API key format.
|
|
256
194
|
|
|
257
|
-
|
|
258
|
-
apiKey: process.env.PERPLEXITY_API_KEY!
|
|
259
|
-
});
|
|
260
|
-
```
|
|
195
|
+
### Environment variables not loading
|
|
261
196
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
```typescript
|
|
265
|
-
const result = await createChatCompletion({
|
|
266
|
-
messages: [{ role: "user", content: "Hello" }],
|
|
267
|
-
model: "sonar-pro",
|
|
268
|
-
usageMetadata: {
|
|
269
|
-
subscriberId: "user-123",
|
|
270
|
-
subscriberEmail: "user@example.com",
|
|
271
|
-
organizationId: "acme-corp",
|
|
272
|
-
productId: "chat-app"
|
|
273
|
-
}
|
|
274
|
-
});
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
## Troubleshooting
|
|
197
|
+
**Solution:** Make sure your `.env` file is in the project root directory and contains the required variables.
|
|
278
198
|
|
|
279
|
-
###
|
|
199
|
+
### Perplexity API errors
|
|
280
200
|
|
|
281
|
-
|
|
282
|
-
2. **Environment variables not loading**: Verify your `.env` file exists and `dotenv` is configured
|
|
283
|
-
3. **API key errors**: Check both Perplexity and Revenium API keys are valid
|
|
284
|
-
4. **TypeScript errors**: Ensure you have `tsx` or `ts-node` installed for TypeScript projects
|
|
201
|
+
**Solution:** Make sure you have set `PERPLEXITY_API_KEY` in your `.env` file and that it starts with `pplx-`.
|
|
285
202
|
|
|
286
203
|
### Debug Mode
|
|
287
204
|
|
|
288
|
-
Enable
|
|
205
|
+
Enable detailed logging to troubleshoot issues:
|
|
289
206
|
|
|
290
207
|
```bash
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
### Expected Output
|
|
295
|
-
|
|
296
|
-
When running examples successfully:
|
|
297
|
-
```
|
|
298
|
-
Basic Chat Completion Example
|
|
299
|
-
|
|
300
|
-
Initializing configurations...
|
|
301
|
-
Configurations initialized
|
|
302
|
-
|
|
303
|
-
Creating chat completion...
|
|
304
|
-
Chat completion created
|
|
208
|
+
# In .env file
|
|
209
|
+
REVENIUM_DEBUG=true
|
|
305
210
|
|
|
306
|
-
|
|
307
|
-
|
|
211
|
+
# Then run examples
|
|
212
|
+
npm run example:getting-started
|
|
308
213
|
```
|
|
309
214
|
|
|
310
|
-
##
|
|
215
|
+
## Next Steps
|
|
311
216
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
-
|
|
315
|
-
- `playground/streaming.js`
|
|
316
|
-
- `playground/chat.js`
|
|
317
|
-
- `playground/metadata.js`
|
|
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
|
|
318
220
|
|
|
319
221
|
## Support
|
|
320
222
|
|
|
223
|
+
For issues or questions:
|
|
224
|
+
|
|
321
225
|
- Documentation: https://docs.revenium.io
|
|
322
|
-
- GitHub Issues: https://github.com/revenium/revenium-middleware-perplexity-node/issues
|
|
323
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);
|
package/examples/basic.ts
CHANGED
|
@@ -1,55 +1,45 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Basic
|
|
3
|
-
*
|
|
4
|
-
* This example demonstrates how to use the Perplexity middleware
|
|
5
|
-
* to create a simple chat completion with Revenium metering.
|
|
2
|
+
* Basic Example
|
|
3
|
+
* Demonstrates basic usage of Revenium Perplexity middleware.
|
|
6
4
|
*/
|
|
7
5
|
|
|
8
|
-
import {
|
|
9
|
-
initializeReveniumFromEnv,
|
|
10
|
-
initializePerplexityFromEnv,
|
|
11
|
-
createChatCompletion,
|
|
12
|
-
PERPLEXITY_MODELS,
|
|
13
|
-
} from "../src";
|
|
6
|
+
import { Initialize, GetClient, UsageMetadata } from "@revenium/perplexity";
|
|
14
7
|
|
|
15
8
|
async function main() {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
9
|
+
// Initialize middleware
|
|
10
|
+
Initialize();
|
|
11
|
+
|
|
12
|
+
// Get client
|
|
13
|
+
const client = GetClient();
|
|
14
|
+
const metadata: UsageMetadata = {
|
|
15
|
+
organizationId: "org-basic-demo",
|
|
16
|
+
productId: "prod-perplexity-basic",
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
// Create chat completion
|
|
20
|
+
const response = await client
|
|
21
|
+
.chat()
|
|
22
|
+
.completions()
|
|
23
|
+
.create(
|
|
28
24
|
{
|
|
29
|
-
|
|
30
|
-
|
|
25
|
+
model: "sonar-pro",
|
|
26
|
+
messages: [
|
|
27
|
+
{
|
|
28
|
+
role: "user",
|
|
29
|
+
content:
|
|
30
|
+
"Say hello in Spanish and explain why Spanish is a beautiful language in 2-3 sentences.",
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
max_tokens: 1000,
|
|
31
34
|
},
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
console.log(
|
|
40
|
-
console.log(`Model: ${result.model}`);
|
|
41
|
-
console.log(`Transaction ID: ${result.transactionId}`);
|
|
42
|
-
console.log(`\nToken Usage:`);
|
|
43
|
-
console.log(` - Prompt Tokens: ${result.usage.promptTokens}`);
|
|
44
|
-
console.log(` - Completion Tokens: ${result.usage.completionTokens}`);
|
|
45
|
-
console.log(` - Total Tokens: ${result.usage.totalTokens}`);
|
|
46
|
-
console.log("─────────────────────────────────────────\n");
|
|
47
|
-
|
|
48
|
-
console.log("Example completed successfully!");
|
|
35
|
+
metadata
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
// Display response
|
|
39
|
+
if (response.choices.length > 0) {
|
|
40
|
+
console.log(`Assistant: ${response.choices[0].message.content}`);
|
|
41
|
+
}
|
|
42
|
+
console.log("\nUsage data sent to Revenium! Check your dashboard");
|
|
49
43
|
}
|
|
50
44
|
|
|
51
|
-
main().catch(
|
|
52
|
-
console.error("Error:", error.message);
|
|
53
|
-
process.exit(1);
|
|
54
|
-
});
|
|
55
|
-
|
|
45
|
+
main().catch(console.error);
|