@bitbitpress/client 0.1.8 → 0.1.10
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 +132 -117
- package/dist/examples/basic-usage.d.ts.map +1 -1
- package/dist/examples/basic-usage.js +41 -47
- package/dist/examples/basic-usage.js.map +1 -1
- package/dist/generated/openapi.d.ts +28 -40
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/user/index.d.ts +33 -32
- package/dist/user/index.d.ts.map +1 -1
- package/dist/user/index.js +46 -22
- package/dist/user/index.js.map +1 -1
- package/dist/user/profile.d.ts +2 -2
- package/dist/user/profile.d.ts.map +1 -1
- package/dist/user/profile.js +2 -2
- package/dist/user/profile.js.map +1 -1
- package/dist/user/recommendations.d.ts +5 -12
- package/dist/user/recommendations.d.ts.map +1 -1
- package/dist/user/recommendations.js +3 -3
- package/dist/user/recommendations.js.map +1 -1
- package/dist/user/report.d.ts +3 -3
- package/dist/user/report.d.ts.map +1 -1
- package/dist/user/report.js +3 -3
- package/dist/user/report.js.map +1 -1
- package/dist/user/signal-batch-manager.d.ts +5 -7
- package/dist/user/signal-batch-manager.d.ts.map +1 -1
- package/dist/user/signal-batch-manager.js +7 -7
- package/dist/user/signal-batch-manager.js.map +1 -1
- package/dist/user/signal.d.ts +3 -3
- package/dist/user/signal.d.ts.map +1 -1
- package/dist/user/signal.js +3 -3
- package/dist/user/signal.js.map +1 -1
- package/dist/user/synthesize-batch-manager.d.ts +23 -0
- package/dist/user/synthesize-batch-manager.d.ts.map +1 -0
- package/dist/user/{batch-manager.js → synthesize-batch-manager.js} +28 -32
- package/dist/user/synthesize-batch-manager.js.map +1 -0
- package/dist/user/synthesize.d.ts +29 -13
- package/dist/user/synthesize.d.ts.map +1 -1
- package/dist/user/synthesize.js +43 -6
- package/dist/user/synthesize.js.map +1 -1
- package/dist/user/token.d.ts +3 -3
- package/dist/user/token.d.ts.map +1 -1
- package/dist/user/token.js +3 -3
- package/dist/user/token.js.map +1 -1
- package/dist/user/typeDefs.d.ts +18 -0
- package/dist/user/typeDefs.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/user/batch-manager.d.ts +0 -20
- package/dist/user/batch-manager.d.ts.map +0 -1
- package/dist/user/batch-manager.js.map +0 -1
package/README.md
CHANGED
|
@@ -411,147 +411,137 @@ console.log('Signal 2 recorded:', response2.recorded);
|
|
|
411
411
|
|
|
412
412
|
#### synthesizeItem
|
|
413
413
|
|
|
414
|
-
Synthesize a single item (batched). Items are automatically batched and sent together after the configured timeout. Returns a promise that resolves with the
|
|
414
|
+
Synthesize a single item (batched). Items are automatically batched and sent together after the configured timeout. Returns a promise that resolves with the final data event for that item's index. Optionally receive streaming data via `onStreamingData` when stream events have `complete: false`.
|
|
415
415
|
|
|
416
416
|
```typescript
|
|
417
|
-
client.user.synthesizeItem(
|
|
417
|
+
client.user.synthesizeItem(
|
|
418
|
+
item: SynthesizeItem,
|
|
419
|
+
onStreamingData?: SynthesizeOnStreamingData
|
|
420
|
+
): Promise<SynthesizeItemResponse>
|
|
418
421
|
```
|
|
419
422
|
|
|
420
423
|
##### Parameters
|
|
421
424
|
|
|
422
|
-
- `item` (required): A single synthesize item (same
|
|
425
|
+
- `item` (required): A single synthesize item (same shape as items in `synthesize`): `inputs`, `output` (schema as JSON string or Zod 4 schema, optional `staleAfter`), optional `configurationKeyName`
|
|
426
|
+
- `onStreamingData` (optional): Callback invoked with streaming data whenever a stream event has `complete: false` for this item. Type: `(data: unknown) => void`.
|
|
423
427
|
|
|
424
428
|
##### Returns
|
|
425
429
|
|
|
426
|
-
- `Promise<
|
|
427
|
-
- For `DAILY_SUMMARY`: `{ summary: string | null }`
|
|
428
|
-
- For `CUSTOM`: An object following your schema input, where `fieldNames` are keys
|
|
430
|
+
- `Promise<SynthesizeItemResponse>`: Resolves with the final data event for this item — `data` is the synthesized object (keys match your output schema) when present; `error` is set on failure
|
|
429
431
|
|
|
430
432
|
##### Behavior
|
|
431
433
|
|
|
432
|
-
- Items added within the batch timeout window (default: 250ms) are grouped
|
|
433
|
-
- Each item's promise resolves
|
|
434
|
-
-
|
|
435
|
-
-
|
|
436
|
-
- The batch timeout can be configured when creating the client via `synthesizeBatchTimeout`
|
|
434
|
+
- Items added within the batch timeout window (default: 250ms) are grouped and sent in one request
|
|
435
|
+
- Each item's promise resolves when its final data event arrives (by `index`, with `complete: true` or `error`)
|
|
436
|
+
- If provided, `onStreamingData` is called for each streaming data update (`complete: false`) for this item's index
|
|
437
|
+
- The batch timeout is configurable via `synthesizeBatchTimeout` when creating the client
|
|
437
438
|
|
|
438
439
|
##### Example
|
|
439
440
|
|
|
440
441
|
```typescript
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
442
|
+
const result1 = await client.user.synthesizeItem({
|
|
443
|
+
inputs: [{ type: 'externalId', value: 'article-123' }],
|
|
444
|
+
output: {
|
|
445
|
+
schema: JSON.stringify({
|
|
446
|
+
type: 'object',
|
|
447
|
+
properties: { title: { type: 'string' }, summary: { type: 'string' } },
|
|
448
|
+
}),
|
|
449
|
+
},
|
|
445
450
|
});
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
},
|
|
457
|
-
|
|
458
|
-
contentContext: {
|
|
459
|
-
contentId: 'article-123',
|
|
460
|
-
contentType: 'article',
|
|
461
|
-
expandOnContext: true,
|
|
451
|
+
console.log('Synthesized:', result1);
|
|
452
|
+
|
|
453
|
+
// Or pass a Zod 4 schema (converted to JSON schema string when sending)
|
|
454
|
+
// meta variables include:
|
|
455
|
+
// - description: formatting and purpose of the field
|
|
456
|
+
// - characterLimitHint: rough amount of max characters the field should have, works as a hint
|
|
457
|
+
import { z } from 'zod';
|
|
458
|
+
const result2 = await client.user.synthesizeItem({
|
|
459
|
+
inputs: [{ type: 'text', value: 'Summarize this' }],
|
|
460
|
+
output: {
|
|
461
|
+
schema: z.object({ headline: z.string().meta({ description: 'headline, uppercase', characterLimitHint: 100 }) }),
|
|
462
|
+
staleAfter: '30m',
|
|
462
463
|
},
|
|
463
464
|
});
|
|
464
|
-
// customData will be an object with keys matching your schema fieldNames
|
|
465
|
-
console.log('Custom data:', customData);
|
|
466
|
-
|
|
467
|
-
// Both items are sent together in a single batch request
|
|
468
|
-
// Each promise resolves immediately when its data event arrives
|
|
469
465
|
```
|
|
470
466
|
|
|
471
467
|
---
|
|
472
468
|
|
|
473
469
|
#### synthesize
|
|
474
470
|
|
|
475
|
-
Synthesize user
|
|
471
|
+
Synthesize content items personalized to the user (streaming SSE). Returns a stream of connection and data events. Data events may be sent multiple times per index as partial object updates; the final event for an index has `complete: true` and the validated object. Optionally pass `onStreamingData(index, data)` to receive streaming data per item index without consuming the stream.
|
|
476
472
|
|
|
477
473
|
```typescript
|
|
478
|
-
client.user.synthesize(
|
|
474
|
+
client.user.synthesize(
|
|
475
|
+
items: SynthesizeItems,
|
|
476
|
+
options?: { onStreamingData?: (index: number, data: unknown) => void }
|
|
477
|
+
): Promise<AsyncIterable<SynthesizeEvent>>
|
|
479
478
|
```
|
|
480
479
|
|
|
481
480
|
##### Parameters
|
|
482
481
|
|
|
483
|
-
- `items` (required): Array of items
|
|
484
|
-
- `{ type: "
|
|
485
|
-
- `{
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
- `fieldName` (required): Name of the field
|
|
490
|
-
- `fieldDescription` (required): A prompt describing the value of the field
|
|
491
|
-
- `fieldCharacterLimitHint` (optional): Optional hint for max number of characters that should be returned for this field. Not a guarantee.
|
|
492
|
-
|
|
493
|
-
##### ContentContext (required for CUSTOM items)
|
|
494
|
-
|
|
495
|
-
- `contentId` (optional): Your content ID
|
|
496
|
-
- `contentType` (optional): The type of content to synthesize (currently only `"article"`)
|
|
497
|
-
- `expandOnContext` (optional): If `true`, expands on the current context to provide more data to the synthesis. Determines if the synthesis should focus on the content provided, or if it should expand on it.
|
|
482
|
+
- `items` (required): Array of items. Each item has:
|
|
483
|
+
- `inputs` (optional): Context for synthesis — array of `{ type: "externalId" | "text" | "excludeExternalIds", value: string }` (article ID, freeform text, or comma-separated external IDs to exclude)
|
|
484
|
+
- `output`: `{ schema: string | ZodType, staleAfter?: string }` — output schema as a JSON string or Zod 4 schema (top-level type must be `"object"`); optional staleness (e.g. `"1h"`, `"30m"`, `"1d"`)
|
|
485
|
+
- `configurationKeyName` (optional): Key name for configuration
|
|
486
|
+
- `options` (optional): `{ onStreamingData?: (index: number, data: unknown) => void }` — if provided, `onStreamingData` is called for each data event with `complete: false`, with the item's index and streaming data
|
|
498
487
|
|
|
499
488
|
##### Returns
|
|
500
489
|
|
|
501
|
-
- `Promise<AsyncIterable<SynthesizeEvent>>`:
|
|
490
|
+
- `Promise<AsyncIterable<SynthesizeEvent>>`: Async iterable of events
|
|
502
491
|
|
|
503
492
|
##### SynthesizeEvent
|
|
504
493
|
|
|
505
|
-
Events in the stream can be:
|
|
506
|
-
|
|
507
494
|
- `{ type: "connected" }`: Connection established
|
|
508
|
-
- `{ type: "DAILY_SUMMARY", index: number, data: { summary: string | null } }`: Daily summary data
|
|
509
|
-
- `{ type: "CUSTOM", index: number, data: {...} }`: Custom data following your schema
|
|
510
495
|
- `{ type: "complete" }`: Stream complete
|
|
496
|
+
- `{ index: number, data?: unknown, complete: boolean, error?: string }`: Data event for that item. Multiple events may be sent per index as partial updates; the final event has `complete: true` and the validated object. When `complete` is false, `data` is streaming data (partial object). `error` is set on failure.
|
|
511
497
|
|
|
512
498
|
##### Example
|
|
513
499
|
|
|
514
500
|
```typescript
|
|
501
|
+
import { z } from 'zod';
|
|
502
|
+
|
|
515
503
|
const stream = await client.user.synthesize([
|
|
516
504
|
{
|
|
517
|
-
type: '
|
|
505
|
+
inputs: [{ type: 'externalId', value: 'article-123' }],
|
|
506
|
+
output: {
|
|
507
|
+
schema: JSON.stringify({
|
|
508
|
+
type: 'object',
|
|
509
|
+
properties: { title: { type: 'string' }, summary: { type: 'string' } },
|
|
510
|
+
}),
|
|
511
|
+
},
|
|
518
512
|
},
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
513
|
+
{
|
|
514
|
+
inputs: [{ type: 'text', value: 'Summarize recent tech news' }],
|
|
515
|
+
output: {
|
|
516
|
+
schema: z.object({ headline: z.string() }),
|
|
517
|
+
staleAfter: '1h',
|
|
518
|
+
},
|
|
519
|
+
},
|
|
520
|
+
// Richer Zod schema: array of objects with description and characterLimitHint
|
|
521
|
+
{
|
|
522
|
+
inputs: [{ type: 'text', value: 'Summarize key points by topic' }],
|
|
523
|
+
output: {
|
|
524
|
+
schema: z.object({
|
|
525
|
+
summaries: z.array(
|
|
526
|
+
z.object({
|
|
527
|
+
summary: z.string().meta({
|
|
528
|
+
description: 'a single sentence summary of a specific topic or facts',
|
|
529
|
+
characterLimitHint: 100,
|
|
530
|
+
}),
|
|
531
|
+
}),
|
|
532
|
+
),
|
|
533
|
+
}),
|
|
538
534
|
},
|
|
535
|
+
],
|
|
539
536
|
]);
|
|
540
537
|
|
|
541
538
|
for await (const event of stream) {
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
break;
|
|
549
|
-
case 'CUSTOM':
|
|
550
|
-
console.log('Custom data:', event.data);
|
|
551
|
-
break;
|
|
552
|
-
case 'complete':
|
|
553
|
-
console.log('Stream complete');
|
|
554
|
-
break;
|
|
539
|
+
if ('type' in event) {
|
|
540
|
+
if (event.type === 'connected') console.log('Stream connected');
|
|
541
|
+
else if (event.type === 'complete') console.log('Stream complete');
|
|
542
|
+
} else if ('index' in event) {
|
|
543
|
+
if (event.error) console.error(`Item ${event.index}:`, event.error);
|
|
544
|
+
else console.log(`Item ${event.index}:`, event.data);
|
|
555
545
|
}
|
|
556
546
|
}
|
|
557
547
|
```
|
|
@@ -682,42 +672,67 @@ type SignalResponse = {
|
|
|
682
672
|
|
|
683
673
|
#### SynthesizeRequest
|
|
684
674
|
|
|
675
|
+
Request body for POST `/v1/user/synthesize` (from OpenAPI). Each item has `inputs`, `output`, and optional `configurationKeyName`.
|
|
676
|
+
|
|
685
677
|
```typescript
|
|
686
678
|
type SynthesizeRequest = {
|
|
687
|
-
items: Array<
|
|
688
|
-
|
|
689
|
-
|
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
}>;
|
|
696
|
-
contentContext: {
|
|
697
|
-
contentId?: string;
|
|
698
|
-
contentType?: 'article';
|
|
699
|
-
expandOnContext?: boolean;
|
|
700
|
-
};
|
|
701
|
-
}
|
|
702
|
-
>;
|
|
679
|
+
items: Array<{
|
|
680
|
+
configurationKeyName?: string;
|
|
681
|
+
inputs?: Array<{ type: 'externalId' | 'text' | 'excludeExternalIds'; value: string }>;
|
|
682
|
+
output: {
|
|
683
|
+
schema: string; // JSON schema string; top-level type must be "object"
|
|
684
|
+
staleAfter?: string;
|
|
685
|
+
};
|
|
686
|
+
}>;
|
|
703
687
|
}
|
|
704
688
|
```
|
|
705
689
|
|
|
690
|
+
#### SynthesizeItem / SynthesizeItems
|
|
691
|
+
|
|
692
|
+
Same shape as the request items above, but `output.schema` may be a **string or a Zod 4 schema**; Zod schemas are converted to the expected JSON schema string when sending.
|
|
693
|
+
|
|
694
|
+
- `SynthesizeItem`: Single item (for `synthesizeItem`).
|
|
695
|
+
- `SynthesizeItems`: Array of items (for `synthesize`).
|
|
696
|
+
- `SynthesizeOutputSchema`: `string | ZodType` (exported for typing `output.schema`).
|
|
697
|
+
|
|
706
698
|
#### SynthesizeEvent
|
|
707
699
|
|
|
700
|
+
Stream events (SSE). Connection events use `type`; data events use `index`, optional `data`, required `complete` (true or false), and optional `error`. Multiple data events may be sent per index as partial object updates; the final event for an index has `complete: true` and the validated object.
|
|
701
|
+
|
|
708
702
|
```typescript
|
|
709
|
-
type SynthesizeEvent =
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
data?: unknown;
|
|
713
|
-
|
|
703
|
+
type SynthesizeEvent =
|
|
704
|
+
| { type: 'connected' }
|
|
705
|
+
| { type: 'complete' }
|
|
706
|
+
| { index: number; data?: unknown; complete: boolean; error?: string };
|
|
707
|
+
```
|
|
708
|
+
|
|
709
|
+
When `complete` is true, `data` is the full synthesized object (keys match your output schema). When `complete` is false, `data` is streaming data (partial update). `error` is set on failure.
|
|
710
|
+
|
|
711
|
+
#### SynthesizeItemResponse
|
|
712
|
+
|
|
713
|
+
Return type of `synthesizeItem`. Same shape as a data event payload (without `index`).
|
|
714
|
+
|
|
715
|
+
```typescript
|
|
716
|
+
type SynthesizeItemResponse = {
|
|
717
|
+
data?: unknown; // synthesized object when present
|
|
718
|
+
error?: string; // set on failure
|
|
719
|
+
};
|
|
720
|
+
```
|
|
721
|
+
|
|
722
|
+
#### SynthesizeOnStreamingData
|
|
723
|
+
|
|
724
|
+
Callback type for receiving streaming data on a single item. Used as the second parameter to `synthesizeItem`. Invoked whenever a stream data event has `complete: false` for that item's index.
|
|
725
|
+
|
|
726
|
+
```typescript
|
|
727
|
+
type SynthesizeOnStreamingData = (data: unknown) => void;
|
|
714
728
|
```
|
|
715
729
|
|
|
716
|
-
|
|
730
|
+
#### SynthesizeOptions
|
|
731
|
+
|
|
732
|
+
Options for `synthesize`. Used to receive streaming data per item index without consuming the stream.
|
|
733
|
+
|
|
717
734
|
```typescript
|
|
718
|
-
{
|
|
719
|
-
|
|
735
|
+
interface SynthesizeOptions {
|
|
736
|
+
onStreamingData?: (index: number, data: unknown) => void;
|
|
720
737
|
}
|
|
721
738
|
```
|
|
722
|
-
|
|
723
|
-
For `CUSTOM` events, `data` will be an object following your schema input, where `fieldNames` are keys.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basic-usage.d.ts","sourceRoot":"","sources":["../../src/examples/basic-usage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,iBAAe,YAAY,kBA4B1B;AAGD,iBAAe,gBAAgB,
|
|
1
|
+
{"version":3,"file":"basic-usage.d.ts","sourceRoot":"","sources":["../../src/examples/basic-usage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,iBAAe,YAAY,kBA4B1B;AAGD,iBAAe,gBAAgB,kBAwC9B;AAGD,iBAAe,uBAAuB,kBAiCrC;AAGD,iBAAe,aAAa,kBAqC3B;AAGD,iBAAe,oBAAoB,kBAiClC;AAED,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,aAAa,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -40,43 +40,39 @@ async function streamingExample() {
|
|
|
40
40
|
await client.user.authenticate("your-user's-auth-sso-token");
|
|
41
41
|
const stream = await client.user.synthesize([
|
|
42
42
|
{
|
|
43
|
-
type: '
|
|
43
|
+
inputs: [{ type: 'externalId', value: 'article-123' }],
|
|
44
|
+
output: {
|
|
45
|
+
schema: JSON.stringify({
|
|
46
|
+
type: 'object',
|
|
47
|
+
properties: { title: { type: 'string' }, summary: { type: 'string' } },
|
|
48
|
+
}),
|
|
49
|
+
},
|
|
44
50
|
},
|
|
45
51
|
{
|
|
46
|
-
type: '
|
|
47
|
-
|
|
48
|
-
{
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
{
|
|
54
|
-
fieldName: 'summary',
|
|
55
|
-
fieldDescription: 'A brief summary',
|
|
56
|
-
fieldCharacterLimitHint: 200,
|
|
57
|
-
},
|
|
58
|
-
],
|
|
59
|
-
contentContext: {
|
|
60
|
-
contentId: 'article-123',
|
|
61
|
-
contentType: 'article',
|
|
62
|
-
expandOnContext: true,
|
|
52
|
+
inputs: [{ type: 'text', value: 'Summarize recent tech news' }],
|
|
53
|
+
output: {
|
|
54
|
+
schema: JSON.stringify({
|
|
55
|
+
type: 'object',
|
|
56
|
+
properties: { headline: { type: 'string' } },
|
|
57
|
+
}),
|
|
58
|
+
staleAfter: '1h',
|
|
63
59
|
},
|
|
64
60
|
},
|
|
65
61
|
]);
|
|
66
62
|
for await (const event of stream) {
|
|
67
|
-
|
|
68
|
-
|
|
63
|
+
if ('type' in event) {
|
|
64
|
+
if (event.type === 'connected')
|
|
69
65
|
console.log('Stream connected');
|
|
70
|
-
|
|
71
|
-
case 'DAILY_SUMMARY':
|
|
72
|
-
console.log('Daily summary:', event.data);
|
|
73
|
-
break;
|
|
74
|
-
case 'CUSTOM':
|
|
75
|
-
console.log('Custom data:', event.data);
|
|
76
|
-
break;
|
|
77
|
-
case 'complete':
|
|
66
|
+
else if (event.type === 'complete')
|
|
78
67
|
console.log('Stream complete');
|
|
79
|
-
|
|
68
|
+
}
|
|
69
|
+
else if ('index' in event) {
|
|
70
|
+
if (event.error)
|
|
71
|
+
console.error(`Item ${event.index}:`, event.error);
|
|
72
|
+
else if (event.complete)
|
|
73
|
+
console.log(`Item ${event.index}:`, event.data);
|
|
74
|
+
else
|
|
75
|
+
console.log(`Item ${event.index} (streaming):`, event.data);
|
|
80
76
|
}
|
|
81
77
|
}
|
|
82
78
|
}
|
|
@@ -89,27 +85,25 @@ async function batchedSynthesisExample() {
|
|
|
89
85
|
// Authenticate first
|
|
90
86
|
await client.user.authenticate("your-user's-auth-sso-token");
|
|
91
87
|
// Items are automatically batched and sent together after the timeout
|
|
92
|
-
// Each promise resolves with the data
|
|
93
|
-
const
|
|
94
|
-
type: '
|
|
88
|
+
// Each promise resolves with the synthesized data for that item's index
|
|
89
|
+
const result1 = await client.user.synthesizeItem({
|
|
90
|
+
inputs: [{ type: 'externalId', value: 'article-123' }],
|
|
91
|
+
output: {
|
|
92
|
+
schema: JSON.stringify({
|
|
93
|
+
type: 'object',
|
|
94
|
+
properties: { title: { type: 'string' }, summary: { type: 'string' } },
|
|
95
|
+
}),
|
|
96
|
+
},
|
|
95
97
|
});
|
|
96
|
-
console.log('
|
|
97
|
-
const
|
|
98
|
-
type: '
|
|
99
|
-
|
|
100
|
-
{
|
|
101
|
-
|
|
102
|
-
fieldDescription: 'The article title',
|
|
103
|
-
fieldCharacterLimitHint: 100,
|
|
104
|
-
},
|
|
105
|
-
],
|
|
106
|
-
contentContext: {
|
|
107
|
-
contentId: 'article-123',
|
|
108
|
-
contentType: 'article',
|
|
109
|
-
expandOnContext: true,
|
|
98
|
+
console.log('Synthesized:', result1);
|
|
99
|
+
const result2 = await client.user.synthesizeItem({
|
|
100
|
+
inputs: [{ type: 'text', value: 'Summarize this' }],
|
|
101
|
+
output: {
|
|
102
|
+
schema: JSON.stringify({ type: 'object', properties: { headline: { type: 'string' } } }),
|
|
103
|
+
staleAfter: '30m',
|
|
110
104
|
},
|
|
111
105
|
});
|
|
112
|
-
console.log('
|
|
106
|
+
console.log('Synthesized:', result2);
|
|
113
107
|
// Both items are sent together in a single batch request
|
|
114
108
|
// Each promise resolves immediately when its data event arrives
|
|
115
109
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basic-usage.js","sourceRoot":"","sources":["../../src/examples/basic-usage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,6CAA6C;AAC7C,KAAK,UAAU,YAAY;IACzB,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC;QACnC,OAAO,EAAE,mDAAmD;KAC7D,CAAC,CAAC;IAEH,gFAAgF;IAChF,MAAM,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAC;IAE7D,sBAAsB;IACtB,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;QACxD,KAAK,EAAE,EAAE;KACV,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;IAEvD,yDAAyD;IACzD,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QAC5C,OAAO,EAAE;YACP;gBACE,MAAM,EAAE,6BAA6B;gBACrC,IAAI,EAAE,QAAQ;gBACd,cAAc,EAAE;oBACd,SAAS,EAAE,aAAa;oBACxB,WAAW,EAAE,SAAS;iBACvB;aACF;SACF;KACF,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;AACzD,CAAC;AAED,iCAAiC;AACjC,KAAK,UAAU,gBAAgB;IAC7B,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC;QACnC,OAAO,EAAE,mDAAmD;KAC7D,CAAC,CAAC;IAEH,qBAAqB;IACrB,MAAM,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAC;IAE7D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;QAC1C;YACE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"basic-usage.js","sourceRoot":"","sources":["../../src/examples/basic-usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -573,7 +573,7 @@ export interface paths {
|
|
|
573
573
|
* Synthesize User Content
|
|
574
574
|
* @description **POST** `/v1/user/synthesize`
|
|
575
575
|
*
|
|
576
|
-
* Synthesize content items personalized to the user.
|
|
576
|
+
* Synthesize content items personalized to the user.
|
|
577
577
|
*/
|
|
578
578
|
post: {
|
|
579
579
|
parameters: {
|
|
@@ -588,70 +588,58 @@ export interface paths {
|
|
|
588
588
|
requestBody: {
|
|
589
589
|
content: {
|
|
590
590
|
"application/json": {
|
|
591
|
-
/** @description Array of items to synthesize */
|
|
592
|
-
items:
|
|
593
|
-
/**
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
type: "DAILY_SUMMARY" | "CUSTOM";
|
|
598
|
-
} | {
|
|
599
|
-
/** @enum {unknown} */
|
|
600
|
-
type?: "DAILY_SUMMARY";
|
|
601
|
-
} | {
|
|
602
|
-
/** @enum {unknown} */
|
|
603
|
-
type?: "CUSTOM";
|
|
604
|
-
/** @description Schema describing the output format. */
|
|
605
|
-
schema: {
|
|
606
|
-
/** @description Name of the field */
|
|
607
|
-
fieldName: string;
|
|
608
|
-
/** @description A prompt describing the value of the field */
|
|
609
|
-
fieldDescription: string;
|
|
610
|
-
/** @description Optional hint for max number of characters that should be returned for this field. Not a guarantee. */
|
|
611
|
-
fieldCharacterLimitHint?: number;
|
|
612
|
-
}[];
|
|
613
|
-
/** @description Context data to provide to the prompt. */
|
|
614
|
-
contentContext: {
|
|
615
|
-
/** @description Your content id */
|
|
616
|
-
contentId?: string;
|
|
591
|
+
/** @description Array of items to synthesize. Each item has inputs and output; optional configurationKeyName to use a named config (omit for default). */
|
|
592
|
+
items: {
|
|
593
|
+
/** @description Optional configuration key name. Loads an existing synthesis config by this name; omit for default configuration. */
|
|
594
|
+
configurationKeyName?: string;
|
|
595
|
+
/** @description Inputs used as context for the synthesis: externalId (article ID), or text (freeform text). */
|
|
596
|
+
inputs?: {
|
|
617
597
|
/**
|
|
618
|
-
* @description
|
|
598
|
+
* @description Type of input: externalId (article) or text (freeform).
|
|
619
599
|
* @enum {string}
|
|
620
600
|
*/
|
|
621
|
-
|
|
622
|
-
/** @description
|
|
623
|
-
|
|
601
|
+
type: "externalId" | "text" | "excludeExternalIds";
|
|
602
|
+
/** @description External ID (e.g. article) for externalId, freeform text for text, or comma-separated list of external IDs to exclude */
|
|
603
|
+
value: string;
|
|
604
|
+
}[];
|
|
605
|
+
/** @description Output definition: schema and optional staleness. */
|
|
606
|
+
output: {
|
|
607
|
+
/** @description Output schema as a JSON string. Top-level type must be "object". Example: {"type":"object","properties":{"title":{"type":"string","description":"title"}}} */
|
|
608
|
+
schema: string;
|
|
609
|
+
/** @description Time after which the result is considered stale and will be regenerated again. Examples: "1h", "30m", "1d", "3600" (seconds). */
|
|
610
|
+
staleAfter?: string;
|
|
624
611
|
};
|
|
625
|
-
}
|
|
612
|
+
}[];
|
|
626
613
|
};
|
|
627
614
|
};
|
|
628
615
|
};
|
|
629
616
|
responses: {
|
|
630
617
|
/**
|
|
631
|
-
* @description Streaming response (Server-Sent Events). Each event is a JSON object sent as `data: {JSON}\n\n`.
|
|
618
|
+
* @description Streaming response (Server-Sent Events). Each event is a JSON object sent as `data: {JSON}\n\n`.
|
|
632
619
|
*
|
|
633
620
|
* **Connection Events:**
|
|
634
621
|
* ```json
|
|
635
622
|
* {"type":"connected" | "complete"}
|
|
636
623
|
* ```
|
|
637
624
|
*
|
|
638
|
-
* **Data Events:**
|
|
625
|
+
* **Data Events (success):**
|
|
639
626
|
* ```json
|
|
640
627
|
* {
|
|
641
|
-
* "type": "DAILY_SUMMARY" | "CUSTOM",
|
|
642
628
|
* "index": number,
|
|
643
|
-
* "data": {...}
|
|
629
|
+
* "data": {...},
|
|
630
|
+
* "complete": false | true
|
|
644
631
|
* }
|
|
645
632
|
* ```
|
|
633
|
+
* `data` is the synthesized object (keys match your output schema). `complete` is `false` for partial streaming updates and `true` for the final validated object for that index.
|
|
646
634
|
*
|
|
647
|
-
*
|
|
635
|
+
* **Data Events (error):**
|
|
648
636
|
* ```json
|
|
649
637
|
* {
|
|
650
|
-
* "
|
|
638
|
+
* "index": number,
|
|
639
|
+
* "error": "error message"
|
|
651
640
|
* }
|
|
652
641
|
* ```
|
|
653
|
-
*
|
|
654
|
-
* For `CUSTOM` type, `data` will be an object following your schema input, where `fieldNames` are keys.
|
|
642
|
+
* Sent when synthesis fails for that item (e.g. resolve failure, exception).
|
|
655
643
|
*/
|
|
656
644
|
200: {
|
|
657
645
|
headers: {
|
package/dist/index.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export type { RecommendationsRequest, RecommendationsResponse } from './user/rec
|
|
|
14
14
|
export type { ProfileResponse } from './user/profile.js';
|
|
15
15
|
export type { ReportRequest, ReportResponse } from './user/report.js';
|
|
16
16
|
export type { TokenRequest, TokenResponse } from './user/token.js';
|
|
17
|
-
export type { SynthesizeRequest } from './user/typeDefs.js';
|
|
18
|
-
export type { SynthesizeEvent } from './user/synthesize.js';
|
|
17
|
+
export type { BitBitPressSynthesizeRequest, RecommendationsRequestBody, SynthesizeInput, SynthesizeItem, SynthesizeItems, SynthesizeOutputSchema, SynthesizeRequest, } from './user/typeDefs.js';
|
|
18
|
+
export type { SynthesizeEvent, SynthesizeItemResponse, SynthesizeOptions } from './user/synthesize.js';
|
|
19
|
+
export type { SynthesizeOnStreamingData } from './user/synthesize-batch-manager.js';
|
|
19
20
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,yBAAyB,EACzB,WAAW,EACX,QAAQ,GACT,MAAM,cAAc,CAAC;AAGtB,mBAAmB,wBAAwB,CAAC;AAG5C,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC9E,YAAY,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACjG,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACtE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACnE,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,yBAAyB,EACzB,WAAW,EACX,QAAQ,GACT,MAAM,cAAc,CAAC;AAGtB,mBAAmB,wBAAwB,CAAC;AAG5C,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC9E,YAAY,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACjG,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACtE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACnE,YAAY,EACV,4BAA4B,EAC5B,0BAA0B,EAC1B,eAAe,EACf,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,eAAe,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACvG,YAAY,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC"}
|