@superblocksteam/sdk-api 2.0.103 → 2.0.104-next.1
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/README.md +58 -299
- package/dist/api/definition.js +1 -1
- package/dist/api/definition.js.map +1 -1
- package/dist/api/index.d.ts +0 -2
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +0 -2
- package/dist/api/index.js.map +1 -1
- package/dist/errors.d.ts +0 -44
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +0 -32
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -9
- package/dist/index.js.map +1 -1
- package/dist/integrations/anthropic/types.d.ts +3 -22
- package/dist/integrations/anthropic/types.d.ts.map +1 -1
- package/dist/integrations/athena/types.d.ts +2 -2
- package/dist/integrations/base/index.d.ts +1 -1
- package/dist/integrations/base/index.d.ts.map +1 -1
- package/dist/integrations/base/rest-api-integration-client.d.ts +4 -48
- package/dist/integrations/base/rest-api-integration-client.d.ts.map +1 -1
- package/dist/integrations/base/rest-api-integration-client.js +2 -110
- package/dist/integrations/base/rest-api-integration-client.js.map +1 -1
- package/dist/integrations/base/types.d.ts +1 -67
- package/dist/integrations/base/types.d.ts.map +1 -1
- package/dist/integrations/bigquery/types.d.ts +3 -3
- package/dist/integrations/databricks/types.d.ts +3 -3
- package/dist/integrations/documentation.test.d.ts +2 -0
- package/dist/integrations/documentation.test.d.ts.map +1 -0
- package/dist/integrations/documentation.test.js +83 -0
- package/dist/integrations/documentation.test.js.map +1 -0
- package/dist/integrations/index.d.ts +1 -1
- package/dist/integrations/index.d.ts.map +1 -1
- package/dist/integrations/index.js.map +1 -1
- package/dist/integrations/lakebase/types.d.ts +4 -4
- package/dist/integrations/mariadb/types.d.ts +2 -2
- package/dist/integrations/mssql/types.d.ts +2 -2
- package/dist/integrations/mysql/types.d.ts +4 -4
- package/dist/integrations/openai_v2/types.d.ts +4 -22
- package/dist/integrations/openai_v2/types.d.ts.map +1 -1
- package/dist/integrations/oracledb/types.d.ts +2 -2
- package/dist/integrations/registry.d.ts +0 -16
- package/dist/integrations/registry.d.ts.map +1 -1
- package/dist/integrations/registry.js +38 -38
- package/dist/integrations/registry.js.map +1 -1
- package/dist/integrations/registry.test.js +1 -3
- package/dist/integrations/registry.test.js.map +1 -1
- package/dist/integrations/restapiintegration/types.d.ts +2 -2
- package/dist/integrations/restapiintegration/types.d.ts.map +1 -1
- package/dist/integrations/snowflakecortex/client.d.ts +1 -2
- package/dist/integrations/snowflakecortex/client.d.ts.map +1 -1
- package/dist/integrations/snowflakecortex/client.js +1 -2
- package/dist/integrations/snowflakecortex/client.js.map +1 -1
- package/dist/integrations/snowflakecortex/types.d.ts +3 -4
- package/dist/integrations/snowflakecortex/types.d.ts.map +1 -1
- package/dist/runtime/index.d.ts +0 -3
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +1 -6
- package/dist/runtime/index.js.map +1 -1
- package/package.json +1 -1
- package/src/api/definition.ts +1 -1
- package/src/api/index.ts +0 -4
- package/src/errors.ts +0 -48
- package/src/index.ts +2 -28
- package/src/integrations/anthropic/README.md +5 -101
- package/src/integrations/anthropic/types.ts +3 -29
- package/src/integrations/athena/README.md +4 -4
- package/src/integrations/athena/types.ts +2 -2
- package/src/integrations/base/index.ts +0 -2
- package/src/integrations/base/rest-api-integration-client.ts +4 -153
- package/src/integrations/base/types.ts +3 -74
- package/src/integrations/bigquery/README.md +28 -3
- package/src/integrations/bigquery/types.ts +3 -3
- package/src/integrations/cohere/README.md +11 -11
- package/src/integrations/databricks/README.md +29 -4
- package/src/integrations/databricks/types.ts +3 -3
- package/src/integrations/documentation.test.ts +122 -0
- package/src/integrations/fireworks/README.md +43 -17
- package/src/integrations/googleanalytics/README.md +2 -2
- package/src/integrations/googledrive/README.md +2 -2
- package/src/integrations/groq/README.md +41 -34
- package/src/integrations/gsheets/README.md +2 -2
- package/src/integrations/index.ts +0 -1
- package/src/integrations/lakebase/types.ts +4 -4
- package/src/integrations/launchdarkly/README.md +2 -2
- package/src/integrations/mariadb/README.md +3 -3
- package/src/integrations/mariadb/types.ts +2 -2
- package/src/integrations/mistral/README.md +39 -13
- package/src/integrations/mssql/README.md +3 -3
- package/src/integrations/mssql/types.ts +2 -2
- package/src/integrations/mysql/README.md +4 -4
- package/src/integrations/mysql/types.ts +4 -4
- package/src/integrations/openai_v2/README.md +44 -116
- package/src/integrations/openai_v2/types.ts +4 -29
- package/src/integrations/oracledb/README.md +3 -3
- package/src/integrations/oracledb/types.ts +2 -2
- package/src/integrations/pagerduty/README.md +2 -2
- package/src/integrations/perplexity/README.md +2 -1
- package/src/integrations/registry.test.ts +1 -3
- package/src/integrations/registry.ts +38 -127
- package/src/integrations/restapiintegration/README.md +4 -43
- package/src/integrations/restapiintegration/types.ts +2 -8
- package/src/integrations/sendgrid/README.md +2 -2
- package/src/integrations/snowflakecortex/README.md +4 -53
- package/src/integrations/snowflakecortex/client.ts +2 -3
- package/src/integrations/snowflakecortex/types.ts +3 -11
- package/src/integrations/stabilityai/README.md +2 -2
- package/src/runtime/index.ts +1 -23
- package/dist/api/streaming.d.ts +0 -229
- package/dist/api/streaming.d.ts.map +0 -1
- package/dist/api/streaming.js +0 -107
- package/dist/api/streaming.js.map +0 -1
- package/dist/api/streaming.test.d.ts +0 -5
- package/dist/api/streaming.test.d.ts.map +0 -1
- package/dist/api/streaming.test.js +0 -364
- package/dist/api/streaming.test.js.map +0 -1
- package/dist/runtime/execute.d.ts +0 -128
- package/dist/runtime/execute.d.ts.map +0 -1
- package/dist/runtime/execute.js +0 -84
- package/dist/runtime/execute.js.map +0 -1
- package/dist/runtime/streaming-context.d.ts +0 -49
- package/dist/runtime/streaming-context.d.ts.map +0 -1
- package/dist/runtime/streaming-context.js +0 -71
- package/dist/runtime/streaming-context.js.map +0 -1
- package/dist/runtime/streaming-executor.d.ts +0 -159
- package/dist/runtime/streaming-executor.d.ts.map +0 -1
- package/dist/runtime/streaming-executor.js +0 -229
- package/dist/runtime/streaming-executor.js.map +0 -1
- package/src/api/streaming.test.ts +0 -433
- package/src/api/streaming.ts +0 -303
- package/src/runtime/execute.ts +0 -221
- package/src/runtime/streaming-context.ts +0 -164
- package/src/runtime/streaming-executor.ts +0 -367
|
@@ -10,7 +10,9 @@ Interact with Groq's ultra-fast inference API for LLM chat completions with low
|
|
|
10
10
|
|
|
11
11
|
## Usage
|
|
12
12
|
|
|
13
|
-
###
|
|
13
|
+
### Step 1: List Available Models
|
|
14
|
+
|
|
15
|
+
Model availability varies by account and changes over time. Before making requests, validate which models are available:
|
|
14
16
|
|
|
15
17
|
```typescript
|
|
16
18
|
import { api, z, groq } from "@superblocksteam/sdk-api";
|
|
@@ -18,6 +20,30 @@ import { api, z, groq } from "@superblocksteam/sdk-api";
|
|
|
18
20
|
// Integration ID from the integrations panel
|
|
19
21
|
const PROD_GROQ = "a1b2c3d4-5678-90ab-cdef-groq00000001";
|
|
20
22
|
|
|
23
|
+
const ModelsResponseSchema = z.object({
|
|
24
|
+
data: z.array(
|
|
25
|
+
z.object({
|
|
26
|
+
id: z.string(),
|
|
27
|
+
object: z.string(),
|
|
28
|
+
}),
|
|
29
|
+
),
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
const models = await ctx.integrations.groq.apiRequest(
|
|
33
|
+
{
|
|
34
|
+
method: "GET",
|
|
35
|
+
path: "/v1/models",
|
|
36
|
+
},
|
|
37
|
+
{ response: ModelsResponseSchema },
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
// Use a model ID from the response in subsequent requests
|
|
41
|
+
const availableModelId = models.data[0]?.id;
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Chat Completion
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
21
47
|
const ChatCompletionResponseSchema = z.object({
|
|
22
48
|
id: z.string(),
|
|
23
49
|
object: z.literal("chat.completion"),
|
|
@@ -59,7 +85,7 @@ export default api({
|
|
|
59
85
|
const result = await ctx.integrations.groq.apiRequest(
|
|
60
86
|
{
|
|
61
87
|
method: "POST",
|
|
62
|
-
path: "/
|
|
88
|
+
path: "/v1/chat/completions",
|
|
63
89
|
body: {
|
|
64
90
|
model: "llama-3.1-70b-versatile",
|
|
65
91
|
messages: [
|
|
@@ -83,7 +109,7 @@ export default api({
|
|
|
83
109
|
const llama70b = await ctx.integrations.groq.apiRequest(
|
|
84
110
|
{
|
|
85
111
|
method: "POST",
|
|
86
|
-
path: "/
|
|
112
|
+
path: "/v1/chat/completions",
|
|
87
113
|
body: {
|
|
88
114
|
model: "llama-3.1-70b-versatile",
|
|
89
115
|
messages: [{ role: "user", content: "Hello" }],
|
|
@@ -96,7 +122,7 @@ const llama70b = await ctx.integrations.groq.apiRequest(
|
|
|
96
122
|
const llama8b = await ctx.integrations.groq.apiRequest(
|
|
97
123
|
{
|
|
98
124
|
method: "POST",
|
|
99
|
-
path: "/
|
|
125
|
+
path: "/v1/chat/completions",
|
|
100
126
|
body: {
|
|
101
127
|
model: "llama-3.1-8b-instant",
|
|
102
128
|
messages: [{ role: "user", content: "Hello" }],
|
|
@@ -109,7 +135,7 @@ const llama8b = await ctx.integrations.groq.apiRequest(
|
|
|
109
135
|
const mixtral = await ctx.integrations.groq.apiRequest(
|
|
110
136
|
{
|
|
111
137
|
method: "POST",
|
|
112
|
-
path: "/
|
|
138
|
+
path: "/v1/chat/completions",
|
|
113
139
|
body: {
|
|
114
140
|
model: "mixtral-8x7b-32768",
|
|
115
141
|
messages: [{ role: "user", content: "Hello" }],
|
|
@@ -150,7 +176,7 @@ const ToolCallResponseSchema = z.object({
|
|
|
150
176
|
const result = await ctx.integrations.groq.apiRequest(
|
|
151
177
|
{
|
|
152
178
|
method: "POST",
|
|
153
|
-
path: "/
|
|
179
|
+
path: "/v1/chat/completions",
|
|
154
180
|
body: {
|
|
155
181
|
model: "llama-3.1-70b-versatile",
|
|
156
182
|
messages: [{ role: "user", content: "What's the weather in Tokyo?" }],
|
|
@@ -200,7 +226,7 @@ const JSONResponseSchema = z.object({
|
|
|
200
226
|
const result = await ctx.integrations.groq.apiRequest(
|
|
201
227
|
{
|
|
202
228
|
method: "POST",
|
|
203
|
-
path: "/
|
|
229
|
+
path: "/v1/chat/completions",
|
|
204
230
|
body: {
|
|
205
231
|
model: "llama-3.1-70b-versatile",
|
|
206
232
|
messages: [
|
|
@@ -234,55 +260,36 @@ await groq.createChatCompletion({ ... });
|
|
|
234
260
|
|
|
235
261
|
// CORRECT - Use apiRequest
|
|
236
262
|
await ctx.integrations.groq.apiRequest(
|
|
237
|
-
{ method: "POST", path: "/
|
|
263
|
+
{ method: "POST", path: "/v1/chat/completions", body: { ... } },
|
|
238
264
|
{ response: ChatCompletionResponseSchema }
|
|
239
265
|
);
|
|
240
266
|
```
|
|
241
267
|
|
|
242
268
|
### OpenAI-Compatible Path
|
|
243
269
|
|
|
244
|
-
|
|
270
|
+
The integration's base URL already includes `https://api.groq.com/openai`, so paths should start with `/v1/`:
|
|
245
271
|
|
|
246
272
|
```typescript
|
|
247
|
-
// WRONG -
|
|
273
|
+
// WRONG - Duplicates the /openai prefix (base URL already includes it)
|
|
248
274
|
await ctx.integrations.groq.apiRequest(
|
|
249
|
-
{ method: "POST", path: "/v1/chat/completions", body: { ... } },
|
|
275
|
+
{ method: "POST", path: "/openai/v1/chat/completions", body: { ... } },
|
|
250
276
|
{ response: schema }
|
|
251
277
|
);
|
|
252
278
|
|
|
253
|
-
// CORRECT -
|
|
279
|
+
// CORRECT - Start with /v1/ (the integration prepends /openai automatically)
|
|
254
280
|
await ctx.integrations.groq.apiRequest(
|
|
255
|
-
{ method: "POST", path: "/
|
|
281
|
+
{ method: "POST", path: "/v1/chat/completions", body: { ... } },
|
|
256
282
|
{ response: schema }
|
|
257
283
|
);
|
|
258
284
|
```
|
|
259
285
|
|
|
260
|
-
### Model Availability
|
|
261
|
-
|
|
262
|
-
Groq has specific models available. Check current availability:
|
|
263
|
-
|
|
264
|
-
| Model | Context Window | Best For |
|
|
265
|
-
| ----------------------- | -------------- | ------------------ |
|
|
266
|
-
| llama-3.1-70b-versatile | 128K | General use |
|
|
267
|
-
| llama-3.1-8b-instant | 128K | Fast, simple tasks |
|
|
268
|
-
| mixtral-8x7b-32768 | 32K | Code, reasoning |
|
|
269
|
-
| gemma2-9b-it | 8K | Lightweight tasks |
|
|
270
|
-
|
|
271
|
-
```typescript
|
|
272
|
-
// Ensure model is available
|
|
273
|
-
const body = {
|
|
274
|
-
model: "llama-3.1-70b-versatile", // Verify model exists
|
|
275
|
-
messages: [...],
|
|
276
|
-
};
|
|
277
|
-
```
|
|
278
|
-
|
|
279
286
|
### Rate Limits
|
|
280
287
|
|
|
281
288
|
Groq has rate limits based on tokens per minute. Monitor usage:
|
|
282
289
|
|
|
283
290
|
```typescript
|
|
284
291
|
const result = await ctx.integrations.groq.apiRequest(
|
|
285
|
-
{ method: "POST", path: "/
|
|
292
|
+
{ method: "POST", path: "/v1/chat/completions", body: { ... } },
|
|
286
293
|
{ response: ChatCompletionResponseSchema }
|
|
287
294
|
);
|
|
288
295
|
|
|
@@ -297,7 +304,7 @@ import { RestApiValidationError } from "@superblocksteam/sdk-api";
|
|
|
297
304
|
|
|
298
305
|
try {
|
|
299
306
|
const result = await ctx.integrations.groq.apiRequest(
|
|
300
|
-
{ method: "POST", path: "/
|
|
307
|
+
{ method: "POST", path: "/v1/chat/completions", body: { ... } },
|
|
301
308
|
{ response: ChatCompletionResponseSchema }
|
|
302
309
|
);
|
|
303
310
|
} catch (error) {
|
|
@@ -24,7 +24,7 @@ Interact with Google Sheets with full type safety and runtime validation.
|
|
|
24
24
|
### Read Spreadsheet Data
|
|
25
25
|
|
|
26
26
|
```typescript
|
|
27
|
-
import { api, z,
|
|
27
|
+
import { api, z, googleSheets } from "@superblocksteam/sdk-api";
|
|
28
28
|
|
|
29
29
|
// Integration ID from the integrations panel
|
|
30
30
|
const PROD_GSHEETS = "a1b2c3d4-5678-90ab-cdef-gsheets00001";
|
|
@@ -39,7 +39,7 @@ const RowSchema = z.array(
|
|
|
39
39
|
|
|
40
40
|
export default api({
|
|
41
41
|
integrations: {
|
|
42
|
-
sheets:
|
|
42
|
+
sheets: googleSheets(PROD_GSHEETS),
|
|
43
43
|
},
|
|
44
44
|
name: "GoogleSheetsExample",
|
|
45
45
|
input: z.object({
|
|
@@ -19,14 +19,14 @@ import type { TraceMetadata } from "../registry.js";
|
|
|
19
19
|
*
|
|
20
20
|
* // Parameterized query
|
|
21
21
|
* const users = await lb.query(
|
|
22
|
-
* 'SELECT * FROM users WHERE status =
|
|
22
|
+
* 'SELECT * FROM users WHERE status = $1',
|
|
23
23
|
* UserSchema,
|
|
24
24
|
* ['active'],
|
|
25
25
|
* );
|
|
26
26
|
*
|
|
27
27
|
* // Execute a mutation
|
|
28
28
|
* const result = await lb.execute(
|
|
29
|
-
* 'INSERT INTO users (name, email) VALUES (
|
|
29
|
+
* 'INSERT INTO users (name, email) VALUES ($1, $2)',
|
|
30
30
|
* ['Alice', 'alice@example.com'],
|
|
31
31
|
* );
|
|
32
32
|
* ```
|
|
@@ -35,7 +35,7 @@ export interface LakebaseClient extends BaseIntegrationClient {
|
|
|
35
35
|
/**
|
|
36
36
|
* Execute a SQL query and return validated rows.
|
|
37
37
|
*
|
|
38
|
-
* @param sql - SQL query string with
|
|
38
|
+
* @param sql - SQL query string with `$1`, `$2` placeholders for parameters
|
|
39
39
|
* @param schema - Zod schema for validating each result row
|
|
40
40
|
* @param params - Optional query parameters for server-side binding
|
|
41
41
|
* @returns Array of validated rows
|
|
@@ -50,7 +50,7 @@ export interface LakebaseClient extends BaseIntegrationClient {
|
|
|
50
50
|
/**
|
|
51
51
|
* Execute a SQL statement (INSERT, UPDATE, DELETE).
|
|
52
52
|
*
|
|
53
|
-
* @param sql - SQL statement with
|
|
53
|
+
* @param sql - SQL statement with `$1`, `$2` placeholders for parameters
|
|
54
54
|
* @param params - Optional query parameters for server-side binding
|
|
55
55
|
* @returns The affected row count
|
|
56
56
|
*/
|
|
@@ -13,7 +13,7 @@ Manage feature flags, get flag evaluations, and interact with LaunchDarkly's fea
|
|
|
13
13
|
### Get Feature Flag
|
|
14
14
|
|
|
15
15
|
```typescript
|
|
16
|
-
import { api, z,
|
|
16
|
+
import { api, z, launchDarkly } from "@superblocksteam/sdk-api";
|
|
17
17
|
|
|
18
18
|
// Integration ID from the integrations panel
|
|
19
19
|
const PROD_LAUNCHDARKLY = "a1b2c3d4-5678-90ab-cdef-launchda0001";
|
|
@@ -44,7 +44,7 @@ const FlagSchema = z.object({
|
|
|
44
44
|
|
|
45
45
|
export default api({
|
|
46
46
|
integrations: {
|
|
47
|
-
launchdarkly:
|
|
47
|
+
launchdarkly: launchDarkly(PROD_LAUNCHDARKLY),
|
|
48
48
|
},
|
|
49
49
|
name: "LaunchDarklyExample",
|
|
50
50
|
input: z.object({
|
|
@@ -39,7 +39,7 @@ export default api({
|
|
|
39
39
|
}),
|
|
40
40
|
async run(ctx, { status }) {
|
|
41
41
|
const users = await ctx.integrations.mariadb.query(
|
|
42
|
-
"SELECT id, name, email, created_at FROM users WHERE status =
|
|
42
|
+
"SELECT id, name, email, created_at FROM users WHERE status = ?",
|
|
43
43
|
UserSchema,
|
|
44
44
|
[status],
|
|
45
45
|
);
|
|
@@ -54,13 +54,13 @@ export default api({
|
|
|
54
54
|
```typescript
|
|
55
55
|
// INSERT
|
|
56
56
|
await ctx.integrations.mariadb.execute(
|
|
57
|
-
"INSERT INTO users (name, email) VALUES (
|
|
57
|
+
"INSERT INTO users (name, email) VALUES (?, ?)",
|
|
58
58
|
["John Doe", "john@example.com"],
|
|
59
59
|
);
|
|
60
60
|
|
|
61
61
|
// UPDATE
|
|
62
62
|
const updateResult = await ctx.integrations.mariadb.execute(
|
|
63
|
-
"UPDATE users SET last_login = NOW() WHERE id =
|
|
63
|
+
"UPDATE users SET last_login = NOW() WHERE id = ?",
|
|
64
64
|
[userId],
|
|
65
65
|
);
|
|
66
66
|
console.log(`Updated ${updateResult.rowCount} rows`);
|
|
@@ -25,7 +25,7 @@ import type { TraceMetadata } from "../registry.js";
|
|
|
25
25
|
* });
|
|
26
26
|
*
|
|
27
27
|
* const users = await mariadb.query(
|
|
28
|
-
* 'SELECT * FROM users WHERE status =
|
|
28
|
+
* 'SELECT * FROM users WHERE status = ?',
|
|
29
29
|
* UserSchema,
|
|
30
30
|
* ['active']
|
|
31
31
|
* );
|
|
@@ -35,7 +35,7 @@ export interface MariaDBClient extends BaseIntegrationClient {
|
|
|
35
35
|
/**
|
|
36
36
|
* Execute a SQL query and validate results against a Zod schema.
|
|
37
37
|
*
|
|
38
|
-
* @param sql - SQL query string (use
|
|
38
|
+
* @param sql - SQL query string (use ? placeholders for parameters)
|
|
39
39
|
* @param schema - Zod schema to validate the query results
|
|
40
40
|
* @param params - Optional query parameters
|
|
41
41
|
* @returns Promise resolving to validated query results
|
|
@@ -10,7 +10,9 @@ Interact with Mistral AI's APIs for chat completions, embeddings, and code gener
|
|
|
10
10
|
|
|
11
11
|
## Usage
|
|
12
12
|
|
|
13
|
-
###
|
|
13
|
+
### Step 1: List Available Models
|
|
14
|
+
|
|
15
|
+
Model availability varies by account and API plan. Before making requests, validate which models you can access:
|
|
14
16
|
|
|
15
17
|
```typescript
|
|
16
18
|
import { api, z, mistral } from "@superblocksteam/sdk-api";
|
|
@@ -18,6 +20,30 @@ import { api, z, mistral } from "@superblocksteam/sdk-api";
|
|
|
18
20
|
// Integration ID from the integrations panel
|
|
19
21
|
const PROD_MISTRAL = "a1b2c3d4-5678-90ab-cdef-mistral00001";
|
|
20
22
|
|
|
23
|
+
const ModelsResponseSchema = z.object({
|
|
24
|
+
data: z.array(
|
|
25
|
+
z.object({
|
|
26
|
+
id: z.string(),
|
|
27
|
+
object: z.string(),
|
|
28
|
+
}),
|
|
29
|
+
),
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
const models = await ctx.integrations.mistral.apiRequest(
|
|
33
|
+
{
|
|
34
|
+
method: "GET",
|
|
35
|
+
path: "/models",
|
|
36
|
+
},
|
|
37
|
+
{ response: ModelsResponseSchema },
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
// Use a model ID from the response in subsequent requests
|
|
41
|
+
const availableModelId = models.data[0]?.id;
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Chat Completion
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
21
47
|
const ChatCompletionResponseSchema = z.object({
|
|
22
48
|
id: z.string(),
|
|
23
49
|
object: z.string(),
|
|
@@ -55,7 +81,7 @@ export default api({
|
|
|
55
81
|
const result = await ctx.integrations.mistral.apiRequest(
|
|
56
82
|
{
|
|
57
83
|
method: "POST",
|
|
58
|
-
path: "/
|
|
84
|
+
path: "/chat/completions",
|
|
59
85
|
body: {
|
|
60
86
|
model: "mistral-large-latest",
|
|
61
87
|
messages: [{ role: "user", content: prompt }],
|
|
@@ -76,7 +102,7 @@ export default api({
|
|
|
76
102
|
const large = await ctx.integrations.mistral.apiRequest(
|
|
77
103
|
{
|
|
78
104
|
method: "POST",
|
|
79
|
-
path: "/
|
|
105
|
+
path: "/chat/completions",
|
|
80
106
|
body: {
|
|
81
107
|
model: "mistral-large-latest",
|
|
82
108
|
messages: [{ role: "user", content: "Complex analysis..." }],
|
|
@@ -89,7 +115,7 @@ const large = await ctx.integrations.mistral.apiRequest(
|
|
|
89
115
|
const medium = await ctx.integrations.mistral.apiRequest(
|
|
90
116
|
{
|
|
91
117
|
method: "POST",
|
|
92
|
-
path: "/
|
|
118
|
+
path: "/chat/completions",
|
|
93
119
|
body: {
|
|
94
120
|
model: "mistral-medium-latest",
|
|
95
121
|
messages: [{ role: "user", content: "General task..." }],
|
|
@@ -102,7 +128,7 @@ const medium = await ctx.integrations.mistral.apiRequest(
|
|
|
102
128
|
const small = await ctx.integrations.mistral.apiRequest(
|
|
103
129
|
{
|
|
104
130
|
method: "POST",
|
|
105
|
-
path: "/
|
|
131
|
+
path: "/chat/completions",
|
|
106
132
|
body: {
|
|
107
133
|
model: "mistral-small-latest",
|
|
108
134
|
messages: [{ role: "user", content: "Simple task..." }],
|
|
@@ -115,7 +141,7 @@ const small = await ctx.integrations.mistral.apiRequest(
|
|
|
115
141
|
const codestral = await ctx.integrations.mistral.apiRequest(
|
|
116
142
|
{
|
|
117
143
|
method: "POST",
|
|
118
|
-
path: "/
|
|
144
|
+
path: "/chat/completions",
|
|
119
145
|
body: {
|
|
120
146
|
model: "codestral-latest",
|
|
121
147
|
messages: [{ role: "user", content: "Write a function to..." }],
|
|
@@ -148,7 +174,7 @@ const EmbeddingsResponseSchema = z.object({
|
|
|
148
174
|
const result = await ctx.integrations.mistral.apiRequest(
|
|
149
175
|
{
|
|
150
176
|
method: "POST",
|
|
151
|
-
path: "/
|
|
177
|
+
path: "/embeddings",
|
|
152
178
|
body: {
|
|
153
179
|
model: "mistral-embed",
|
|
154
180
|
input: ["Hello world", "Bonjour le monde"],
|
|
@@ -193,7 +219,7 @@ const FunctionCallResponseSchema = z.object({
|
|
|
193
219
|
const result = await ctx.integrations.mistral.apiRequest(
|
|
194
220
|
{
|
|
195
221
|
method: "POST",
|
|
196
|
-
path: "/
|
|
222
|
+
path: "/chat/completions",
|
|
197
223
|
body: {
|
|
198
224
|
model: "mistral-large-latest",
|
|
199
225
|
messages: [{ role: "user", content: "What's the weather in London?" }],
|
|
@@ -227,7 +253,7 @@ const result = await ctx.integrations.mistral.apiRequest(
|
|
|
227
253
|
const result = await ctx.integrations.mistral.apiRequest(
|
|
228
254
|
{
|
|
229
255
|
method: "POST",
|
|
230
|
-
path: "/
|
|
256
|
+
path: "/chat/completions",
|
|
231
257
|
body: {
|
|
232
258
|
model: "mistral-large-latest",
|
|
233
259
|
messages: [
|
|
@@ -260,7 +286,7 @@ await mistral.embed({ ... });
|
|
|
260
286
|
|
|
261
287
|
// CORRECT - Use apiRequest
|
|
262
288
|
await ctx.integrations.mistral.apiRequest(
|
|
263
|
-
{ method: "POST", path: "/
|
|
289
|
+
{ method: "POST", path: "/chat/completions", body: { ... } },
|
|
264
290
|
{ response: ChatCompletionResponseSchema }
|
|
265
291
|
);
|
|
266
292
|
```
|
|
@@ -288,7 +314,7 @@ Mistral has a safe mode for content moderation:
|
|
|
288
314
|
const result = await ctx.integrations.mistral.apiRequest(
|
|
289
315
|
{
|
|
290
316
|
method: "POST",
|
|
291
|
-
path: "/
|
|
317
|
+
path: "/chat/completions",
|
|
292
318
|
body: {
|
|
293
319
|
model: "mistral-large-latest",
|
|
294
320
|
messages: [{ role: "user", content: "..." }],
|
|
@@ -307,7 +333,7 @@ Mistral supports system messages:
|
|
|
307
333
|
const result = await ctx.integrations.mistral.apiRequest(
|
|
308
334
|
{
|
|
309
335
|
method: "POST",
|
|
310
|
-
path: "/
|
|
336
|
+
path: "/chat/completions",
|
|
311
337
|
body: {
|
|
312
338
|
model: "mistral-large-latest",
|
|
313
339
|
messages: [
|
|
@@ -327,7 +353,7 @@ import { RestApiValidationError } from "@superblocksteam/sdk-api";
|
|
|
327
353
|
|
|
328
354
|
try {
|
|
329
355
|
const result = await ctx.integrations.mistral.apiRequest(
|
|
330
|
-
{ method: "POST", path: "/
|
|
356
|
+
{ method: "POST", path: "/chat/completions", body: { ... } },
|
|
331
357
|
{ response: ChatCompletionResponseSchema }
|
|
332
358
|
);
|
|
333
359
|
} catch (error) {
|
|
@@ -39,7 +39,7 @@ export default api({
|
|
|
39
39
|
}),
|
|
40
40
|
async run(ctx, { status }) {
|
|
41
41
|
const users = await ctx.integrations.mssql.query(
|
|
42
|
-
"SELECT id, name, email, created_at FROM users WHERE status =
|
|
42
|
+
"SELECT id, name, email, created_at FROM users WHERE status = @PARAM_1",
|
|
43
43
|
UserSchema,
|
|
44
44
|
[status],
|
|
45
45
|
);
|
|
@@ -54,13 +54,13 @@ export default api({
|
|
|
54
54
|
```typescript
|
|
55
55
|
// INSERT
|
|
56
56
|
await ctx.integrations.mssql.execute(
|
|
57
|
-
"INSERT INTO users (name, email) VALUES (
|
|
57
|
+
"INSERT INTO users (name, email) VALUES (@PARAM_1, @PARAM_2)",
|
|
58
58
|
["John Doe", "john@example.com"],
|
|
59
59
|
);
|
|
60
60
|
|
|
61
61
|
// UPDATE
|
|
62
62
|
const updateResult = await ctx.integrations.mssql.execute(
|
|
63
|
-
"UPDATE users SET last_login = GETDATE() WHERE id =
|
|
63
|
+
"UPDATE users SET last_login = GETDATE() WHERE id = @PARAM_1",
|
|
64
64
|
[userId],
|
|
65
65
|
);
|
|
66
66
|
console.log(`Updated ${updateResult.rowCount} rows`);
|
|
@@ -25,7 +25,7 @@ import type { TraceMetadata } from "../registry.js";
|
|
|
25
25
|
* });
|
|
26
26
|
*
|
|
27
27
|
* const users = await mssql.query(
|
|
28
|
-
* 'SELECT * FROM users WHERE status =
|
|
28
|
+
* 'SELECT * FROM users WHERE status = @PARAM_1',
|
|
29
29
|
* UserSchema,
|
|
30
30
|
* ['active']
|
|
31
31
|
* );
|
|
@@ -35,7 +35,7 @@ export interface MSSQLClient extends BaseIntegrationClient {
|
|
|
35
35
|
/**
|
|
36
36
|
* Execute a SQL query and validate results against a Zod schema.
|
|
37
37
|
*
|
|
38
|
-
* @param sql - SQL query string (use
|
|
38
|
+
* @param sql - SQL query string (use @PARAM_1, @PARAM_2, etc. for parameters)
|
|
39
39
|
* @param schema - Zod schema to validate the query results
|
|
40
40
|
* @param params - Optional query parameters
|
|
41
41
|
* @returns Promise resolving to validated query results
|
|
@@ -39,7 +39,7 @@ export default api({
|
|
|
39
39
|
}),
|
|
40
40
|
async run(ctx, { status }) {
|
|
41
41
|
const users = await ctx.integrations.mysql.query(
|
|
42
|
-
"SELECT id, name, email, created_at FROM users WHERE status =
|
|
42
|
+
"SELECT id, name, email, created_at FROM users WHERE status = ?",
|
|
43
43
|
UserSchema,
|
|
44
44
|
[status],
|
|
45
45
|
);
|
|
@@ -54,13 +54,13 @@ export default api({
|
|
|
54
54
|
```typescript
|
|
55
55
|
// INSERT
|
|
56
56
|
await ctx.integrations.mysql.execute(
|
|
57
|
-
"INSERT INTO users (name, email) VALUES (
|
|
57
|
+
"INSERT INTO users (name, email) VALUES (?, ?)",
|
|
58
58
|
["John Doe", "john@example.com"],
|
|
59
59
|
);
|
|
60
60
|
|
|
61
61
|
// UPDATE
|
|
62
62
|
const updateResult = await ctx.integrations.mysql.execute(
|
|
63
|
-
"UPDATE users SET last_login = NOW() WHERE id =
|
|
63
|
+
"UPDATE users SET last_login = NOW() WHERE id = ?",
|
|
64
64
|
[userId],
|
|
65
65
|
);
|
|
66
66
|
console.log(`Updated ${updateResult.rowCount} rows`);
|
|
@@ -90,7 +90,7 @@ const orders = await ctx.integrations.mysql.query(
|
|
|
90
90
|
c.email as customer_email
|
|
91
91
|
FROM orders o
|
|
92
92
|
JOIN customers c ON o.customer_id = c.id
|
|
93
|
-
WHERE o.status =
|
|
93
|
+
WHERE o.status = ?`,
|
|
94
94
|
OrderWithCustomerSchema,
|
|
95
95
|
["pending"],
|
|
96
96
|
);
|
|
@@ -25,7 +25,7 @@ import type { TraceMetadata } from "../registry.js";
|
|
|
25
25
|
* });
|
|
26
26
|
*
|
|
27
27
|
* const users = await mysql.query(
|
|
28
|
-
* 'SELECT * FROM users WHERE status =
|
|
28
|
+
* 'SELECT * FROM users WHERE status = ?',
|
|
29
29
|
* UserSchema,
|
|
30
30
|
* ['active']
|
|
31
31
|
* );
|
|
@@ -35,7 +35,7 @@ export interface MySQLClient extends BaseIntegrationClient {
|
|
|
35
35
|
/**
|
|
36
36
|
* Execute a SQL query and validate results against a Zod schema.
|
|
37
37
|
*
|
|
38
|
-
* @param sql - SQL query string (use
|
|
38
|
+
* @param sql - SQL query string (use ? placeholders for parameters)
|
|
39
39
|
* @param schema - Zod schema to validate the query results
|
|
40
40
|
* @param params - Optional query parameters
|
|
41
41
|
* @returns Promise resolving to validated query results
|
|
@@ -52,7 +52,7 @@ export interface MySQLClient extends BaseIntegrationClient {
|
|
|
52
52
|
* });
|
|
53
53
|
*
|
|
54
54
|
* const users = await mysql.query(
|
|
55
|
-
* 'SELECT * FROM users WHERE status =
|
|
55
|
+
* 'SELECT * FROM users WHERE status = ?',
|
|
56
56
|
* UserSchema,
|
|
57
57
|
* ['active']
|
|
58
58
|
* );
|
|
@@ -75,7 +75,7 @@ export interface MySQLClient extends BaseIntegrationClient {
|
|
|
75
75
|
* @example
|
|
76
76
|
* ```typescript
|
|
77
77
|
* const result = await mysql.execute(
|
|
78
|
-
* 'UPDATE users SET last_login = NOW() WHERE id =
|
|
78
|
+
* 'UPDATE users SET last_login = NOW() WHERE id = ?',
|
|
79
79
|
* [userId]
|
|
80
80
|
* );
|
|
81
81
|
* console.log(`Updated ${result.rowCount} rows`);
|