diff --git a/README.md b/README.md index 2e47196..f128d98 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,6 @@ const stream = client.stream({ query: 'MacBook Neo', filter: 'frandroid.com', markdown: true, - style: 'editorial', language: 'fr', }); @@ -113,7 +112,6 @@ Returns a `StreamHandle`: | `sources` | `{ sources: AnswerV2Source[] }` | | `assistant` | `{ delta: string }` | | `citation` | `{ reference_ids: number[] }` | -| `usages` | `{ usages: AnswerV2UsageEntry[] }` | | `related` | `{ related_queries: string[] }` | | `done` | `{ finish_reason: string }` | diff --git a/examples/basic-create.ts b/examples/basic-create.ts index 7e5858f..84de12b 100644 --- a/examples/basic-create.ts +++ b/examples/basic-create.ts @@ -18,7 +18,6 @@ try { filter: 'frandroid.com', markdown: true, related_queries: true, - style: 'editorial', language: 'fr', }); @@ -40,7 +39,6 @@ try { console.log(` [${u.step}] in: ${u.input_tokens}, out: ${u.output_tokens}`); } } - console.log(`\ngeneration_ms: ${result.generation_ms}`); } catch (err) { if (err instanceof AnswerApiError) { console.error(`API error ${err.status}:`, err.body); diff --git a/examples/stream-events.ts b/examples/stream-events.ts index 33b1252..ac57327 100644 --- a/examples/stream-events.ts +++ b/examples/stream-events.ts @@ -17,7 +17,6 @@ const stream = client.stream({ filter: 'frandroid.com', markdown: true, related_queries: true, - style: 'editorial', language: 'fr', }); @@ -40,11 +39,6 @@ try { case 'related': console.error('\n[related]', event.related_queries.join(' | ')); break; - case 'usages': - for (const u of event.usages) { - console.error(`\n[usage] ${u.step} — in: ${u.input_tokens}, out: ${u.output_tokens}`); - } - break; case 'done': console.error(`\n[done] finish_reason: ${event.finish_reason}`); break; diff --git a/src/index.spec.ts b/src/index.spec.ts index ff4823b..a41ceed 100644 --- a/src/index.spec.ts +++ b/src/index.spec.ts @@ -49,18 +49,16 @@ const MOCK_RESULT: AnswerV2Result = { request_id: 'req_42', answer: 'Paris is the capital of France.', citations: [{ position: 0, source_id: 'src_1' }], - finish_reason: 'stop', related_queries: ['What is the population of Paris?'], sources: [{ id: 'src_1', url: 'https://example.com', title: 'Example' }], usages: [{ step: 'answer', input_tokens: 10, output_tokens: 20 }], - generation_ms: 350, }; const STREAM_CHUNKS = [ sseChunk('sources', [{ id: 'src_1', url: 'https://example.com', title: 'Example' }]), sseChunk('assistant', 'Paris'), sseChunk('citation', { reference_ids: [1] }), - sseChunk('usages', [{ step: 'answer', input_tokens: 10, output_tokens: 20 }]), + sseChunk('related', { related_queries: ['What is the population of Paris?'] }), sseChunk('done', { finish_reason: 'stop' }), ]; @@ -176,7 +174,10 @@ describe('AnswerClient.stream()', () => { expect(events[0]).toMatchObject({ type: 'sources' }); expect(events[1]).toEqual({ type: 'assistant', delta: 'Paris' }); expect(events[2]).toEqual({ type: 'citation', reference_ids: [1] }); - expect(events[3]).toMatchObject({ type: 'usages' }); + expect(events[3]).toEqual({ + type: 'related', + related_queries: ['What is the population of Paris?'], + }); expect(events[4]).toEqual({ type: 'done', finish_reason: 'stop' }); }); @@ -199,7 +200,7 @@ describe('AnswerClient.stream()', () => { } expect(callbackEvents).toEqual(forAwaitEvents); - expect(callbackEvents).toEqual(['sources', 'assistant', 'citation', 'usages', 'done']); + expect(callbackEvents).toEqual(['sources', 'assistant', 'citation', 'related', 'done']); }); it('onEvent() unsubscribe prevents further callbacks', async () => { diff --git a/src/sse.ts b/src/sse.ts index 080b6dc..e7b8fbb 100644 --- a/src/sse.ts +++ b/src/sse.ts @@ -1,4 +1,4 @@ -import type { AnswerV2Event, AnswerV2Source, AnswerV2UsageEntry } from './types.js'; +import type { AnswerV2Event, AnswerV2Source } from './types.js'; import { AnswerNetworkError } from './errors.js'; // ─── SSE block parser ───────────────────────────────────────────────────────── @@ -38,8 +38,6 @@ export function mapSseEvent(name: string, data: unknown): AnswerV2Event | null { type: 'citation', reference_ids: (data as { reference_ids: number[] }).reference_ids, }; - case 'usages': - return { type: 'usages', usages: data as AnswerV2UsageEntry[] }; case 'related': return { type: 'related', diff --git a/src/types.ts b/src/types.ts index 9039395..9686f1c 100644 --- a/src/types.ts +++ b/src/types.ts @@ -3,23 +3,21 @@ export type AnswerV2Input = { /** User question (required). */ query: string; - /** Domain filter for search — e.g. `'www.example.com'`. */ + /** Canonical domain filter for search, without www or URL scheme — e.g. `'example.com'`. */ filter?: string; /** Conversation history (max 20 messages). */ history?: Array<{ role: 'user' | 'assistant'; content: string }>; /** Response length. Default: `'short'`. */ mode?: 'short' | 'long'; - /** Answer style. Default: `'editorial'`. Currently only `'editorial'` is supported. */ - style?: 'editorial'; - /** Answer language. MVP: French only. Default: `'fr'`. */ - language?: 'fr'; + /** Answer language. Default: `'fr'`. */ + language?: 'fr' | 'en'; /** Whether the response uses Markdown formatting. Default: `false`. */ markdown?: boolean; /** Whether to generate related follow-up questions. Default: `false`. */ related_queries?: boolean; /** Whether to rewrite the query before search. Default: `true`. */ query_rewrite?: boolean; - /** Caller-supplied sources — bypasses Bloom search when provided. Max 20. */ + /** Caller-supplied sources — bypasses Bloom search when provided. Max 10. */ sources?: Array<{ url?: string; content?: string; title?: string }>; /** How to handle caller-supplied sources. Default: `'search'`. */ sources_mode?: 'search' | 'context'; @@ -48,11 +46,9 @@ export type AnswerV2Result = { request_id: string; answer: string; citations: AnswerV2Citation[]; - finish_reason: string; related_queries: string[]; sources: AnswerV2Source[]; usages: AnswerV2UsageEntry[]; - generation_ms: number; }; // ─── Stream events ──────────────────────────────────────────────────────────── @@ -61,7 +57,6 @@ export type AnswerV2Event = | { type: 'sources'; sources: AnswerV2Source[] } | { type: 'assistant'; delta: string } | { type: 'citation'; reference_ids: number[] } - | { type: 'usages'; usages: AnswerV2UsageEntry[] } | { type: 'related'; related_queries: string[] } | { type: 'done'; finish_reason: string };