diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 57d308f..06577d4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,7 +24,7 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Set up Node - uses: actions/setup-node@v6 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: node-version: '20' @@ -46,7 +46,7 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Set up Node - uses: actions/setup-node@v6 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: node-version: '20' @@ -83,7 +83,7 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Set up Node - uses: actions/setup-node@v6 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: node-version: '20' diff --git a/.github/workflows/publish-npm.yml b/.github/workflows/publish-npm.yml index ffacf56..567dfb1 100644 --- a/.github/workflows/publish-npm.yml +++ b/.github/workflows/publish-npm.yml @@ -20,7 +20,7 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Set up Node - uses: actions/setup-node@v6 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: node-version: '20' diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 8316a6d..712789e 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.29.0" + ".": "0.29.1" } diff --git a/.stats.yml b/.stats.yml index 04be40b..18e9f23 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 10 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/perplexity-ai/perplexity-8deeee7ec30ff9d4ce52c48452d3660f806e614f14bb8f77209ff43ac449b60e.yml -openapi_spec_hash: 2334e8ee2ebe0d944472ad9385bb79e0 -config_hash: e09a1767e929614701fb498eaaac682d +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/perplexity-ai/perplexity-fcf27eaa172b35187bd87aa80b4d18e2b05c5a8544734d56bd4079064bec4bb4.yml +openapi_spec_hash: 35a516eefbd34cf6620a114bf28c27a5 +config_hash: 86d643a5df0d7478c095d3efa13438dd diff --git a/CHANGELOG.md b/CHANGELOG.md index 4fb2720..43f1303 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## 0.29.1 (2026-05-27) + +Full Changelog: [v0.29.0...v0.29.1](https://github.com/perplexityai/perplexity-node/compare/v0.29.0...v0.29.1) + +### Bug Fixes + +* **streaming:** yield named SSE events for responses.create + discriminate ResponseStreamEvent union ([db5ce72](https://github.com/perplexityai/perplexity-node/commit/db5ce72dabb755406bf3f8b21e7d9c85c257f1a2)) +* **typescript:** upgrade tsc-multi so that it works with Node 26 ([5c5edbe](https://github.com/perplexityai/perplexity-node/commit/5c5edbefd4a8bb3b855cf16b68ea257c477cfede)) + + +### Chores + +* **tests:** remove redundant File import ([b6474ba](https://github.com/perplexityai/perplexity-node/commit/b6474bae54ac5d5f404da8daaffa2c96c9d801bb)) + ## 0.29.0 (2026-05-13) Full Changelog: [v0.28.0...v0.29.0](https://github.com/perplexityai/perplexity-node/compare/v0.28.0...v0.29.0) diff --git a/package.json b/package.json index 747f586..4111570 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@perplexity-ai/perplexity_ai", - "version": "0.29.0", + "version": "0.29.1", "description": "The official TypeScript library for the Perplexity API", "author": "Perplexity ", "types": "dist/index.d.ts", @@ -43,7 +43,7 @@ "publint": "^0.2.12", "ts-jest": "^29.1.0", "ts-node": "^10.5.0", - "tsc-multi": "https://github.com/stainless-api/tsc-multi/releases/download/v1.1.9/tsc-multi.tgz", + "tsc-multi": "https://github.com/stainless-api/tsc-multi/releases/download/v1.1.11/tsc-multi.tgz", "tsconfig-paths": "^4.0.0", "tslib": "^2.8.1", "typescript": "5.8.3", diff --git a/src/core/streaming.ts b/src/core/streaming.ts index c7092c0..b46cc34 100644 --- a/src/core/streaming.ts +++ b/src/core/streaming.ts @@ -57,9 +57,7 @@ export class Stream implements AsyncIterable { if (sse.event === 'error') { throw new APIError(undefined, safeJSON(sse.data) ?? sse.data, undefined, response.headers); - } - - if (sse.event === null) { + } else { try { yield JSON.parse(sse.data) as Item; } catch (e) { diff --git a/src/resources/responses.ts b/src/resources/responses.ts index 0deca6b..c26b693 100644 --- a/src/resources/responses.ts +++ b/src/resources/responses.ts @@ -315,23 +315,9 @@ export namespace ResponseStreamChunk { sequence_number: number; /** - * SSE event type discriminator + * SSE event type discriminator (always "response.created") */ - type: - | 'response.created' - | 'response.in_progress' - | 'response.completed' - | 'response.failed' - | 'response.output_item.added' - | 'response.output_item.done' - | 'response.output_text.delta' - | 'response.output_text.done' - | 'response.reasoning.started' - | 'response.reasoning.search_queries' - | 'response.reasoning.search_results' - | 'response.reasoning.fetch_url_queries' - | 'response.reasoning.fetch_url_results' - | 'response.reasoning.stopped'; + type: 'response.created'; /** * Non-streaming response returned when stream is false @@ -379,23 +365,9 @@ export namespace ResponseStreamChunk { sequence_number: number; /** - * SSE event type discriminator + * SSE event type discriminator (always "response.in_progress") */ - type: - | 'response.created' - | 'response.in_progress' - | 'response.completed' - | 'response.failed' - | 'response.output_item.added' - | 'response.output_item.done' - | 'response.output_text.delta' - | 'response.output_text.done' - | 'response.reasoning.started' - | 'response.reasoning.search_queries' - | 'response.reasoning.search_results' - | 'response.reasoning.fetch_url_queries' - | 'response.reasoning.fetch_url_results' - | 'response.reasoning.stopped'; + type: 'response.in_progress'; /** * Non-streaming response returned when stream is false @@ -442,23 +414,9 @@ export namespace ResponseStreamChunk { sequence_number: number; /** - * SSE event type discriminator + * SSE event type discriminator (always "response.completed") */ - type: - | 'response.created' - | 'response.in_progress' - | 'response.completed' - | 'response.failed' - | 'response.output_item.added' - | 'response.output_item.done' - | 'response.output_text.delta' - | 'response.output_text.done' - | 'response.reasoning.started' - | 'response.reasoning.search_queries' - | 'response.reasoning.search_results' - | 'response.reasoning.fetch_url_queries' - | 'response.reasoning.fetch_url_results' - | 'response.reasoning.stopped'; + type: 'response.completed'; /** * Non-streaming response returned when stream is false @@ -508,23 +466,9 @@ export namespace ResponseStreamChunk { sequence_number: number; /** - * SSE event type discriminator + * SSE event type discriminator (always "response.failed") */ - type: - | 'response.created' - | 'response.in_progress' - | 'response.completed' - | 'response.failed' - | 'response.output_item.added' - | 'response.output_item.done' - | 'response.output_text.delta' - | 'response.output_text.done' - | 'response.reasoning.started' - | 'response.reasoning.search_queries' - | 'response.reasoning.search_results' - | 'response.reasoning.fetch_url_queries' - | 'response.reasoning.fetch_url_results' - | 'response.reasoning.stopped'; + type: 'response.failed'; } /** @@ -542,23 +486,9 @@ export namespace ResponseStreamChunk { sequence_number: number; /** - * SSE event type discriminator + * SSE event type discriminator (always "response.output_item.added") */ - type: - | 'response.created' - | 'response.in_progress' - | 'response.completed' - | 'response.failed' - | 'response.output_item.added' - | 'response.output_item.done' - | 'response.output_text.delta' - | 'response.output_text.done' - | 'response.reasoning.started' - | 'response.reasoning.search_queries' - | 'response.reasoning.search_results' - | 'response.reasoning.fetch_url_queries' - | 'response.reasoning.fetch_url_results' - | 'response.reasoning.stopped'; + type: 'response.output_item.added'; } /** @@ -576,23 +506,9 @@ export namespace ResponseStreamChunk { sequence_number: number; /** - * SSE event type discriminator + * SSE event type discriminator (always "response.output_item.done") */ - type: - | 'response.created' - | 'response.in_progress' - | 'response.completed' - | 'response.failed' - | 'response.output_item.added' - | 'response.output_item.done' - | 'response.output_text.delta' - | 'response.output_text.done' - | 'response.reasoning.started' - | 'response.reasoning.search_queries' - | 'response.reasoning.search_results' - | 'response.reasoning.fetch_url_queries' - | 'response.reasoning.fetch_url_results' - | 'response.reasoning.stopped'; + type: 'response.output_item.done'; } /** @@ -614,23 +530,9 @@ export namespace ResponseStreamChunk { sequence_number: number; /** - * SSE event type discriminator + * SSE event type discriminator (always "response.output_text.delta") */ - type: - | 'response.created' - | 'response.in_progress' - | 'response.completed' - | 'response.failed' - | 'response.output_item.added' - | 'response.output_item.done' - | 'response.output_text.delta' - | 'response.output_text.done' - | 'response.reasoning.started' - | 'response.reasoning.search_queries' - | 'response.reasoning.search_results' - | 'response.reasoning.fetch_url_queries' - | 'response.reasoning.fetch_url_results' - | 'response.reasoning.stopped'; + type: 'response.output_text.delta'; } /** @@ -652,23 +554,9 @@ export namespace ResponseStreamChunk { text: string; /** - * SSE event type discriminator + * SSE event type discriminator (always "response.output_text.done") */ - type: - | 'response.created' - | 'response.in_progress' - | 'response.completed' - | 'response.failed' - | 'response.output_item.added' - | 'response.output_item.done' - | 'response.output_text.delta' - | 'response.output_text.done' - | 'response.reasoning.started' - | 'response.reasoning.search_queries' - | 'response.reasoning.search_results' - | 'response.reasoning.fetch_url_queries' - | 'response.reasoning.fetch_url_results' - | 'response.reasoning.stopped'; + type: 'response.output_text.done'; } /** @@ -682,23 +570,9 @@ export namespace ResponseStreamChunk { sequence_number: number; /** - * SSE event type discriminator + * SSE event type discriminator (always "response.reasoning.started") */ - type: - | 'response.created' - | 'response.in_progress' - | 'response.completed' - | 'response.failed' - | 'response.output_item.added' - | 'response.output_item.done' - | 'response.output_text.delta' - | 'response.output_text.done' - | 'response.reasoning.started' - | 'response.reasoning.search_queries' - | 'response.reasoning.search_results' - | 'response.reasoning.fetch_url_queries' - | 'response.reasoning.fetch_url_results' - | 'response.reasoning.stopped'; + type: 'response.reasoning.started'; thought?: string; } @@ -716,23 +590,9 @@ export namespace ResponseStreamChunk { sequence_number: number; /** - * SSE event type discriminator + * SSE event type discriminator (always "response.reasoning.search_queries") */ - type: - | 'response.created' - | 'response.in_progress' - | 'response.completed' - | 'response.failed' - | 'response.output_item.added' - | 'response.output_item.done' - | 'response.output_text.delta' - | 'response.output_text.done' - | 'response.reasoning.started' - | 'response.reasoning.search_queries' - | 'response.reasoning.search_results' - | 'response.reasoning.fetch_url_queries' - | 'response.reasoning.fetch_url_results' - | 'response.reasoning.stopped'; + type: 'response.reasoning.search_queries'; thought?: string; } @@ -750,23 +610,9 @@ export namespace ResponseStreamChunk { sequence_number: number; /** - * SSE event type discriminator + * SSE event type discriminator (always "response.reasoning.search_results") */ - type: - | 'response.created' - | 'response.in_progress' - | 'response.completed' - | 'response.failed' - | 'response.output_item.added' - | 'response.output_item.done' - | 'response.output_text.delta' - | 'response.output_text.done' - | 'response.reasoning.started' - | 'response.reasoning.search_queries' - | 'response.reasoning.search_results' - | 'response.reasoning.fetch_url_queries' - | 'response.reasoning.fetch_url_results' - | 'response.reasoning.stopped'; + type: 'response.reasoning.search_results'; thought?: string; @@ -784,23 +630,9 @@ export namespace ResponseStreamChunk { sequence_number: number; /** - * SSE event type discriminator + * SSE event type discriminator (always "response.reasoning.fetch_url_queries") */ - type: - | 'response.created' - | 'response.in_progress' - | 'response.completed' - | 'response.failed' - | 'response.output_item.added' - | 'response.output_item.done' - | 'response.output_text.delta' - | 'response.output_text.done' - | 'response.reasoning.started' - | 'response.reasoning.search_queries' - | 'response.reasoning.search_results' - | 'response.reasoning.fetch_url_queries' - | 'response.reasoning.fetch_url_results' - | 'response.reasoning.stopped'; + type: 'response.reasoning.fetch_url_queries'; urls: Array; @@ -820,23 +652,9 @@ export namespace ResponseStreamChunk { sequence_number: number; /** - * SSE event type discriminator + * SSE event type discriminator (always "response.reasoning.fetch_url_results") */ - type: - | 'response.created' - | 'response.in_progress' - | 'response.completed' - | 'response.failed' - | 'response.output_item.added' - | 'response.output_item.done' - | 'response.output_text.delta' - | 'response.output_text.done' - | 'response.reasoning.started' - | 'response.reasoning.search_queries' - | 'response.reasoning.search_results' - | 'response.reasoning.fetch_url_queries' - | 'response.reasoning.fetch_url_results' - | 'response.reasoning.stopped'; + type: 'response.reasoning.fetch_url_results'; thought?: string; } @@ -874,23 +692,9 @@ export namespace ResponseStreamChunk { sequence_number: number; /** - * SSE event type discriminator + * SSE event type discriminator (always "response.reasoning.stopped") */ - type: - | 'response.created' - | 'response.in_progress' - | 'response.completed' - | 'response.failed' - | 'response.output_item.added' - | 'response.output_item.done' - | 'response.output_text.delta' - | 'response.output_text.done' - | 'response.reasoning.started' - | 'response.reasoning.search_queries' - | 'response.reasoning.search_results' - | 'response.reasoning.fetch_url_queries' - | 'response.reasoning.fetch_url_results' - | 'response.reasoning.stopped'; + type: 'response.reasoning.stopped'; thought?: string; } diff --git a/src/version.ts b/src/version.ts index bef2b64..b8b7a27 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1 +1 @@ -export const VERSION = '0.29.0'; // x-release-please-version +export const VERSION = '0.29.1'; // x-release-please-version diff --git a/tests/uploads.test.ts b/tests/uploads.test.ts index fb15eb2..3682411 100644 --- a/tests/uploads.test.ts +++ b/tests/uploads.test.ts @@ -1,7 +1,6 @@ import fs from 'fs'; import type { ResponseLike } from '@perplexity-ai/perplexity_ai/internal/to-file'; import { toFile } from '@perplexity-ai/perplexity_ai/core/uploads'; -import { File } from 'node:buffer'; class MyClass { name: string = 'foo'; diff --git a/yarn.lock b/yarn.lock index 18e7cbd..06fc108 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1215,9 +1215,9 @@ baseline-browser-mapping@^2.9.0: integrity sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg== brace-expansion@^2.0.2: - version "2.1.0" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.1.0.tgz#4f41a41190216ee36067ec381526fe9539c4f0ae" - integrity sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w== + version "2.1.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.1.1.tgz#c68b1c4111c76aae3a6fba55d496cee10c39dad8" + integrity sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA== dependencies: balanced-match "^1.0.0" @@ -3192,9 +3192,9 @@ ts-node@^10.5.0: v8-compile-cache-lib "^3.0.0" yn "3.1.1" -"tsc-multi@https://github.com/stainless-api/tsc-multi/releases/download/v1.1.9/tsc-multi.tgz": - version "1.1.9" - resolved "https://github.com/stainless-api/tsc-multi/releases/download/v1.1.9/tsc-multi.tgz#777f6f5d9e26bf0e94e5170990dd3a841d6707cd" +"tsc-multi@https://github.com/stainless-api/tsc-multi/releases/download/v1.1.11/tsc-multi.tgz": + version "1.1.11" + resolved "https://github.com/stainless-api/tsc-multi/releases/download/v1.1.11/tsc-multi.tgz#010247051be13b55abdc98f787c017285149f4f2" dependencies: debug "^4.3.7" fast-glob "^3.3.2"