typebulb 0.51.3 → 0.52.0
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 +4 -4
- package/SKILL.md +6 -6
- package/dist/agents/claude/client.js +4 -3
- package/dist/agents/codex/client.js +4 -3
- package/dist/agents/pi/client.js +4 -3
- package/dist/ai/index.d.ts +1 -1
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +1 -1
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/protocol.d.ts +24 -0
- package/dist/ai/protocol.d.ts.map +1 -1
- package/dist/ai/protocol.js +15 -0
- package/dist/ai/protocol.js.map +1 -1
- package/dist/ai/providers/anthropic.d.ts +4 -0
- package/dist/ai/providers/anthropic.d.ts.map +1 -1
- package/dist/ai/providers/anthropic.js +32 -1
- package/dist/ai/providers/anthropic.js.map +1 -1
- package/dist/ai/providers/chatCompletions.d.ts +13 -0
- package/dist/ai/providers/chatCompletions.d.ts.map +1 -1
- package/dist/ai/providers/chatCompletions.js +19 -11
- package/dist/ai/providers/chatCompletions.js.map +1 -1
- package/dist/ai/providers/gemini.d.ts +10 -0
- package/dist/ai/providers/gemini.d.ts.map +1 -1
- package/dist/ai/providers/gemini.js +21 -2
- package/dist/ai/providers/gemini.js.map +1 -1
- package/dist/ai/providers/ollama.d.ts +3 -0
- package/dist/ai/providers/ollama.d.ts.map +1 -1
- package/dist/ai/providers/ollama.js +5 -1
- package/dist/ai/providers/ollama.js.map +1 -1
- package/dist/ai/providers/openAI.d.ts +12 -0
- package/dist/ai/providers/openAI.d.ts.map +1 -1
- package/dist/ai/providers/openAI.js +18 -1
- package/dist/ai/providers/openAI.js.map +1 -1
- package/dist/ai/providers/openRouter.d.ts +3 -0
- package/dist/ai/providers/openRouter.d.ts.map +1 -1
- package/dist/ai/providers/openRouter.js +5 -0
- package/dist/ai/providers/openRouter.js.map +1 -1
- package/dist/ai/sseParser.d.ts +13 -1
- package/dist/ai/sseParser.d.ts.map +1 -1
- package/dist/ai/sseParser.js +26 -5
- package/dist/ai/sseParser.js.map +1 -1
- package/dist/dts/tbTypings.d.ts.map +1 -1
- package/dist/dts/tbTypings.js +15 -4
- package/dist/dts/tbTypings.js.map +1 -1
- package/dist/index.js +241 -229
- package/dist/render.js +4 -3
- package/dist/servers.js +103 -102
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -20,6 +20,9 @@ export type OllamaRequestPayload = {
|
|
|
20
20
|
model: string;
|
|
21
21
|
messages: ChatMessageDto[];
|
|
22
22
|
stream: boolean;
|
|
23
|
+
stream_options?: {
|
|
24
|
+
include_usage: boolean;
|
|
25
|
+
};
|
|
23
26
|
};
|
|
24
27
|
export declare class OllamaProvider extends ChatCompletionsProvider {
|
|
25
28
|
protected readonly providerName = "Ollama";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../../ai/src/providers/ollama.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAE9D,+CAA+C;AAC/C,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,cAAc,EAAE,CAAA;IAC1B,MAAM,EAAE,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../../ai/src/providers/ollama.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAE9D,+CAA+C;AAC/C,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,cAAc,EAAE,CAAA;IAC1B,MAAM,EAAE,OAAO,CAAA;IACf,cAAc,CAAC,EAAE;QAAE,aAAa,EAAE,OAAO,CAAA;KAAE,CAAA;CAC5C,CAAA;AAED,qBAAa,cAAe,SAAQ,uBAAuB;IACzD,SAAS,CAAC,QAAQ,CAAC,YAAY,YAAW;IAQ1C,QAAQ,CAAC,cAAc,4BAA2B;IAClD,QAAQ,CAAC,IAAI,uBAAsB;IAMnC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAcpD,YAAY,CACV,QAAQ,EAAE,cAAc,EAAE,EAC1B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,OAAO,GACd,oBAAoB;CAKxB"}
|
|
@@ -28,8 +28,12 @@ export class OllamaProvider extends ChatCompletionsProvider {
|
|
|
28
28
|
// Web search and the reasoning-effort knob have no equivalent on the OpenAI-compat endpoint,
|
|
29
29
|
// so the payload stays minimal. Ollama-specific options (num_ctx, think, …) are intentionally
|
|
30
30
|
// out of scope for tb.ai — use a server.ts export for those (runtime-specs/TB-Server-Streaming.md).
|
|
31
|
+
// `stream_options.include_usage` is standard Chat Completions (Ollama, vLLM and LM Studio all
|
|
32
|
+
// honor it); an endpoint that ignores it simply reports no usage.
|
|
31
33
|
buildPayload(messages, model, _opts, stream) {
|
|
32
|
-
return
|
|
34
|
+
return stream
|
|
35
|
+
? { model, messages, stream, stream_options: { include_usage: true } }
|
|
36
|
+
: { model, messages, stream };
|
|
33
37
|
}
|
|
34
38
|
}
|
|
35
39
|
//# sourceMappingURL=ollama.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../../ai/src/providers/ollama.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../../ai/src/providers/ollama.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAU9D,MAAM,OAAO,cAAe,SAAQ,uBAAuB;IAA3D;;QACqB,iBAAY,GAAG,QAAQ,CAAA;QAC1C,gGAAgG;QAChG,gGAAgG;QAChG,iGAAiG;QACjG,gGAAgG;QAChG,4GAA4G;QAC5G,kGAAkG;QAClG,6DAA6D;QACpD,mBAAc,GAAG,wBAAwB,CAAA;QACzC,SAAI,GAAG,mBAAmB,CAAA;IA8BrC,CAAC;IA5BC,oEAAoE;IAEpE,gGAAgG;IAChG,2FAA2F;IAC3F,YAAY,CAAC,MAAc;QACzB,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;YAClC,QAAQ,EAAE,kBAAkB;SAC7B,CAAA;QACD,IAAI,MAAM;YAAE,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,EAAE,CAAA;QACzD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,6FAA6F;IAC7F,8FAA8F;IAC9F,oGAAoG;IACpG,8FAA8F;IAC9F,kEAAkE;IAClE,YAAY,CACV,QAA0B,EAC1B,KAAa,EACb,KAAsB,EACtB,MAAe;QAEf,OAAO,MAAM;YACX,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE;YACtE,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;IACjC,CAAC;CACF"}
|
|
@@ -37,10 +37,21 @@ export interface OpenAIResponseReasoningItem {
|
|
|
37
37
|
summary: Array<OpenAIResponseReasoningSummary>;
|
|
38
38
|
}
|
|
39
39
|
export type OpenAIResponseOutputItem = OpenAIResponseOutputMessage | OpenAIResponseReasoningItem;
|
|
40
|
+
export interface OpenAIUsageDto {
|
|
41
|
+
input_tokens?: number;
|
|
42
|
+
output_tokens?: number;
|
|
43
|
+
input_tokens_details?: {
|
|
44
|
+
cached_tokens?: number;
|
|
45
|
+
};
|
|
46
|
+
output_tokens_details?: {
|
|
47
|
+
reasoning_tokens?: number;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
40
50
|
export interface OpenAIResponsesApiResponseDto extends ProviderResponseDto {
|
|
41
51
|
object: 'response';
|
|
42
52
|
output_text: string;
|
|
43
53
|
output: Array<OpenAIResponseOutputItem>;
|
|
54
|
+
usage?: OpenAIUsageDto;
|
|
44
55
|
}
|
|
45
56
|
interface OpenAIResponseEventBase {
|
|
46
57
|
sequence_number: number;
|
|
@@ -89,6 +100,7 @@ export declare class OpenAIProvider extends AIProvider {
|
|
|
89
100
|
buildPayload(messages: ChatMessageDto[], model: string, opts: ChatRequestOpts, stream: boolean): OpenAIResponsesApiRequestDto;
|
|
90
101
|
parseNonStreamingResponse(json: ProviderResponseDto): ChatResponseDto;
|
|
91
102
|
protected parseProviderStreamChunk(json: ProviderStreamEventDto): ChatStreamPieceDto | null;
|
|
103
|
+
private mapUsage;
|
|
92
104
|
private convertMessagesToInput;
|
|
93
105
|
private isResponsesApiEvent;
|
|
94
106
|
private isResponsesApiResponse;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openAI.d.ts","sourceRoot":"","sources":["../../../ai/src/providers/openAI.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EACV,cAAc,EAEd,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"openAI.d.ts","sourceRoot":"","sources":["../../../ai/src/providers/openAI.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EACV,cAAc,EAEd,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,sBAAsB,EAEvB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,UAAU,EAAuB,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAUxF,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;AAChF,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAA;AAGpE,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,YAAY,CAAA;CACnB;AAED,MAAM,MAAM,UAAU,GAAG,mBAAmB,CAAA;AAG5C,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IAGb,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,SAAS,CAAC,EAAE;QACV,MAAM,EAAE,qBAAqB,CAAA;QAC7B,OAAO,CAAC,EAAE,sBAAsB,CAAA;KACjC,CAAA;IACD,KAAK,CAAC,EAAE,UAAU,EAAE,CAAA;IACpB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAGD,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,aAAa,CAAA;CACpB;AAED,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,cAAc,CAAA;CACrB;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,EAAE,KAAK,CAAC,wBAAwB,CAAC,CAAA;CACzC;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,WAAW,CAAA;IACjB,OAAO,EAAE,KAAK,CAAC,8BAA8B,CAAC,CAAA;CAC/C;AAED,MAAM,MAAM,wBAAwB,GAAG,2BAA2B,GAAG,2BAA2B,CAAA;AAIhG,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,oBAAoB,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACjD,qBAAqB,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACtD;AAGD,MAAM,WAAW,6BAA8B,SAAQ,mBAAmB;IACxE,MAAM,EAAE,UAAU,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,KAAK,CAAC,wBAAwB,CAAC,CAAA;IACvC,KAAK,CAAC,EAAE,cAAc,CAAA;CACvB;AAID,UAAU,uBAAuB;IAC/B,eAAe,EAAE,MAAM,CAAA;CACxB;AAGD,UAAU,0BAA0B;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,UAAU,6BAA8B,SAAQ,0BAA0B;IACxE,aAAa,EAAE,MAAM,CAAA;CACtB;AAKD,MAAM,MAAM,kCAAkC,GAAG,uBAAuB,GAAG,6BAA6B,GAAG;IACzG,IAAI,EAAE,4BAA4B,CAAA;IAClC,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,4CAA4C,GAAG,uBAAuB,GAAG,0BAA0B,GAAG;IAChH,IAAI,EAAE,uCAAuC,CAAA;IAC7C,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,4BAA4B,GAAG,uBAAuB,GAAG;IACnE,IAAI,EAAE,oBAAoB,CAAA;IAC1B,QAAQ,EAAE,6BAA6B,CAAA;CACxC,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG,uBAAuB,GAAG;IAC/D,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;QACnB,OAAO,EAAE,MAAM,CAAA;QACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KACrB,CAAA;CACF,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG,uBAAuB,GAAG;IAChE,IAAI,EAAE,iBAAiB,CAAA;CACxB,CAAA;AAGD,MAAM,MAAM,yBAAyB,GACjC,kCAAkC,GAClC,4CAA4C,GAC5C,4BAA4B,GAC5B,wBAAwB,GACxB,yBAAyB,GACzB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAIpB,qBAAa,cAAe,SAAQ,UAAU;IAC5C,SAAS,CAAC,QAAQ,CAAC,YAAY,YAAW;IAC1C,QAAQ,CAAC,cAAc,4BAA2B;IAClD,QAAQ,CAAC,IAAI,mBAAkB;IAE/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAMzB;IAID,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQpD,YAAY,CACV,QAAQ,EAAE,cAAc,EAAE,EAC1B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,eAAe,EACrB,MAAM,EAAE,OAAO,GACd,4BAA4B;IA4B/B,yBAAyB,CAAC,IAAI,EAAE,mBAAmB,GAAG,eAAe;IA0BrE,SAAS,CAAC,wBAAwB,CAAC,IAAI,EAAE,sBAAsB,GAAG,kBAAkB,GAAG,IAAI;IAgC3F,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,sBAAsB;CAI/B"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { finalizeUsage } from '../protocol.js';
|
|
1
2
|
import { AIProvider, ProviderStreamError } from '../aiProvider.js';
|
|
2
3
|
// ── Provider implementation ──────────────────────────────────────────
|
|
3
4
|
export class OpenAIProvider extends AIProvider {
|
|
@@ -64,7 +65,7 @@ export class OpenAIProvider extends AIProvider {
|
|
|
64
65
|
}
|
|
65
66
|
}
|
|
66
67
|
}
|
|
67
|
-
return { text, reasoning };
|
|
68
|
+
return { text, reasoning, usage: this.mapUsage(json.usage) };
|
|
68
69
|
}
|
|
69
70
|
parseProviderStreamChunk(json) {
|
|
70
71
|
if (!this.isResponsesApiEvent(json))
|
|
@@ -81,11 +82,27 @@ export class OpenAIProvider extends AIProvider {
|
|
|
81
82
|
return { text: json.delta };
|
|
82
83
|
case 'response.reasoning_summary_text.delta':
|
|
83
84
|
return { reasoning: json.delta };
|
|
85
|
+
// The final event carries the complete response, usage included — the one place the
|
|
86
|
+
// Responses API reports token counts on a stream.
|
|
87
|
+
case 'response.completed': {
|
|
88
|
+
const usage = this.mapUsage(json.response?.usage);
|
|
89
|
+
return usage ? { usage } : null;
|
|
90
|
+
}
|
|
84
91
|
default:
|
|
85
92
|
return null;
|
|
86
93
|
}
|
|
87
94
|
}
|
|
88
95
|
// ── Private helpers ──────────────────────────────────────────────
|
|
96
|
+
mapUsage(u) {
|
|
97
|
+
if (!u)
|
|
98
|
+
return undefined;
|
|
99
|
+
return finalizeUsage({
|
|
100
|
+
input: u.input_tokens,
|
|
101
|
+
output: u.output_tokens,
|
|
102
|
+
reasoning: u.output_tokens_details?.reasoning_tokens,
|
|
103
|
+
cacheRead: u.input_tokens_details?.cached_tokens,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
89
106
|
convertMessagesToInput(messages) {
|
|
90
107
|
return messages.map(m => {
|
|
91
108
|
if (m.role === 'system')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openAI.js","sourceRoot":"","sources":["../../../ai/src/providers/openAI.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"openAI.js","sourceRoot":"","sources":["../../../ai/src/providers/openAI.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openRouter.d.ts","sourceRoot":"","sources":["../../../ai/src/providers/openRouter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,gBAAgB,CAAA;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAE9D,mCAAmC;AACnC,UAAU,mBAAmB;IAC3B,EAAE,EAAE,KAAK,CAAA;IACT,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,iCAAiC;AACjC,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,cAAc,EAAE,CAAA;IAC1B,MAAM,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;IACpE,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAA;CAChC,CAAA;AAED,qBAAa,kBAAmB,SAAQ,uBAAuB;IAC7D,SAAS,CAAC,QAAQ,CAAC,YAAY,gBAAe;IAO9C,QAAQ,CAAC,cAAc,2BAA0B;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAA6B;IAQlD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAMzB;IAID,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAkBrE,YAAY,CACV,QAAQ,EAAE,cAAc,EAAE,EAC1B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,eAAe,EACrB,MAAM,EAAE,OAAO,GACd,wBAAwB;
|
|
1
|
+
{"version":3,"file":"openRouter.d.ts","sourceRoot":"","sources":["../../../ai/src/providers/openRouter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,gBAAgB,CAAA;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAE9D,mCAAmC;AACnC,UAAU,mBAAmB;IAC3B,EAAE,EAAE,KAAK,CAAA;IACT,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,iCAAiC;AACjC,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,cAAc,EAAE,CAAA;IAC1B,MAAM,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE;QAAE,aAAa,EAAE,OAAO,CAAA;KAAE,CAAA;IAC3C,SAAS,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;IACpE,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAA;CAChC,CAAA;AAED,qBAAa,kBAAmB,SAAQ,uBAAuB;IAC7D,SAAS,CAAC,QAAQ,CAAC,YAAY,gBAAe;IAO9C,QAAQ,CAAC,cAAc,2BAA0B;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAA6B;IAQlD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAMzB;IAID,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAkBrE,YAAY,CACV,QAAQ,EAAE,cAAc,EAAE,EAC1B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,eAAe,EACrB,MAAM,EAAE,OAAO,GACd,wBAAwB;CAoC5B"}
|
|
@@ -47,6 +47,11 @@ export class OpenRouterProvider extends ChatCompletionsProvider {
|
|
|
47
47
|
messages,
|
|
48
48
|
stream
|
|
49
49
|
};
|
|
50
|
+
// Chat Completions streams report no usage unless asked — the final extra chunk (empty
|
|
51
|
+
// `choices`, `usage` set) only arrives with this opt-in. The other providers volunteer usage.
|
|
52
|
+
if (stream) {
|
|
53
|
+
payload.stream_options = { include_usage: true };
|
|
54
|
+
}
|
|
50
55
|
// Off by default: a bare `web` plugin auto-selects the model's NATIVE search, which bills the
|
|
51
56
|
// vendor's search fee *and* the retrieved results as input tokens. Measured 2026-08 over one
|
|
52
57
|
// question, search off→on: luna $0.0003→$0.0171 (70→17k input tokens), sonnet-5 $0.0015→$0.0400,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openRouter.js","sourceRoot":"","sources":["../../../ai/src/providers/openRouter.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"openRouter.js","sourceRoot":"","sources":["../../../ai/src/providers/openRouter.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAmB9D,MAAM,OAAO,kBAAmB,SAAQ,uBAAuB;IAA/D;;QACqB,iBAAY,GAAG,YAAY,CAAA;QAC9C,6FAA6F;QAC7F,iGAAiG;QACjG,gGAAgG;QAChG,gGAAgG;QAChG,iGAAiG;QACjG,uGAAuG;QAC9F,mBAAc,GAAG,uBAAuB,CAAA;QACxC,SAAI,GAAW,0BAA0B,CAAA;QAElD,qGAAqG;QACrG,iGAAiG;QACjG,oGAAoG;QACpG,kGAAkG;QAClG,kGAAkG;QAClG,uCAAuC;QACtB,cAAS,GAAsE;YAC9F,CAAC,EAAE,MAAM;YACT,CAAC,EAAE,KAAK;YACR,CAAC,EAAE,QAAQ;YACX,CAAC,EAAE,MAAM;YACT,CAAC,EAAE,OAAO;SACX,CAAA;IA+DH,CAAC;IA7DC,oEAAoE;IAEpE,YAAY,CAAC,MAAc,EAAE,MAAe;QAC1C,MAAM,OAAO,GAA2B;YACtC,eAAe,EAAE,UAAU,MAAM,EAAE;YACnC,WAAW,EAAE,MAAM;YACnB,cAAc,EAAE,kBAAkB;YAClC,QAAQ,EAAE,kBAAkB;YAC5B,SAAS,EAAE,UAAU;SACtB,CAAA;QAED,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,cAAc,CAAC,GAAG,MAAM,CAAA;YAChC,OAAO,CAAC,SAAS,CAAC,GAAG,MAAM,CAAA;YAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAA;QAC5B,CAAC;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,YAAY,CACV,QAA0B,EAC1B,KAAa,EACb,IAAqB,EACrB,MAAe;QAEf,MAAM,OAAO,GAA6B;YACxC,KAAK;YACL,QAAQ;YACR,MAAM;SACP,CAAA;QAED,uFAAuF;QACvF,8FAA8F;QAC9F,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,cAAc,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,CAAA;QAClD,CAAC;QAED,8FAA8F;QAC9F,6FAA6F;QAC7F,iGAAiG;QACjG,4FAA4F;QAC5F,gGAAgG;QAChG,+EAA+E;QAC/E,IAAI,IAAI,EAAE,SAAS,KAAK,IAAI,EAAE,CAAC;YAC7B,OAAO,CAAC,OAAO,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;QACnC,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,CAAA;QAC3B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,CAAC,SAAS,GAAG;gBAClB,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;aAC/B,CAAA;QACH,CAAC;QAED,IAAI,IAAI,EAAE,eAAe,KAAK,SAAS,EAAE,CAAC;YACxC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAA;QAC3C,CAAC;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;CACF"}
|
package/dist/ai/sseParser.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Generic utilities for parsing Server-Sent Events (SSE) streams.
|
|
3
3
|
* Shared between client, CLI, and any other consumer of provider SSE streams.
|
|
4
4
|
*/
|
|
5
|
-
import type { ProviderProtocol, AiChunk } from './protocol.js';
|
|
5
|
+
import type { ProviderProtocol, AiChunk, AiUsage } from './protocol.js';
|
|
6
6
|
/**
|
|
7
7
|
* Parses an SSE block (text between \n\n delimiters) into a data payload.
|
|
8
8
|
* Handles multiple data: lines and the [DONE] sentinel.
|
|
@@ -36,12 +36,24 @@ export declare function consumeSseStreamGen<T = any>(reader: ReadableStreamDefau
|
|
|
36
36
|
* @returns Accumulated text content (reasoning tokens discarded)
|
|
37
37
|
*/
|
|
38
38
|
export declare function consumeStreamText(response: Response, protocol?: ProviderProtocol): Promise<string>;
|
|
39
|
+
/**
|
|
40
|
+
* Consume a provider SSE stream into the one-shot `tb.ai()` result: accumulated text plus the
|
|
41
|
+
* provider-reported token usage (absent when the provider reported none). Reasoning text is
|
|
42
|
+
* still discarded — reasoning reaches callers only via `tb.ai.stream()`.
|
|
43
|
+
*/
|
|
44
|
+
export declare function consumeStreamResult(response: Response, protocol?: ProviderProtocol): Promise<{
|
|
45
|
+
text: string;
|
|
46
|
+
usage?: AiUsage;
|
|
47
|
+
}>;
|
|
39
48
|
/**
|
|
40
49
|
* Adapt a provider's SSE Response into a pull stream of public {@link AiChunk}s — the shared
|
|
41
50
|
* SSE→AiChunk conversion behind `tb.ai.stream()`, used by both the CLI bridge and the web sandbox
|
|
42
51
|
* bridge (each then wraps it in its own transport: NDJSON over HTTP / postMessage frames). Pure and
|
|
43
52
|
* browser-safe: only a `Response` reader plus the already-shared parsing. Each internal
|
|
44
53
|
* `{ text?, reasoning? }` piece becomes one or two discriminated chunks (reasoning before text).
|
|
54
|
+
* Usage is accumulated across pieces (providers report it in fragments — Anthropic input at
|
|
55
|
+
* message_start, cumulative output per message_delta) and emitted as ONE final `usage` chunk
|
|
56
|
+
* after the provider stream ends, when any event reported counts.
|
|
45
57
|
* A provider error event throws `ProviderStreamError` out of `parseStreamChunk`, which the caller's
|
|
46
58
|
* transport turns into a terminal error so the client iterator rejects.
|
|
47
59
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sseParser.d.ts","sourceRoot":"","sources":["../../ai/src/sseParser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAsB,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"sseParser.d.ts","sourceRoot":"","sources":["../../ai/src/sseParser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAsB,MAAM,eAAe,CAAA;AAa3F;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,IAAI,CAmBvE;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,GAAG,GAAG,EAC5C,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,EAC/C,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,EAC3B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,eAAe,EAAE,OAAO,CAAA;CAAE,CAAC,CAQvC;AAED;;;;;GAKG;AACH,wBAAuB,mBAAmB,CAAC,CAAC,GAAG,GAAG,EAChD,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,EAC/C,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,MAAM,IAAI,GACnB,cAAc,CAAC,CAAC,CAAC,CAgDnB;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAW5C;AAED;;;;;;;;;;;GAWG;AACH,wBAAuB,cAAc,CACnC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,cAAc,CAAC,OAAO,CAAC,CAiBzB"}
|
package/dist/ai/sseParser.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Generic utilities for parsing Server-Sent Events (SSE) streams.
|
|
3
3
|
* Shared between client, CLI, and any other consumer of provider SSE streams.
|
|
4
4
|
*/
|
|
5
|
+
import { finalizeUsage, mergeUsage } from './protocol.js';
|
|
5
6
|
import { getProvider } from './aiProviders.js';
|
|
6
7
|
/** Find next SSE block separator (\n\n or \r\n\r\n), returning position and length */
|
|
7
8
|
function findSeparator(buffer) {
|
|
@@ -126,16 +127,27 @@ export async function* consumeSseStreamGen(reader, signal, onBytes) {
|
|
|
126
127
|
* @returns Accumulated text content (reasoning tokens discarded)
|
|
127
128
|
*/
|
|
128
129
|
export async function consumeStreamText(response, protocol) {
|
|
130
|
+
return (await consumeStreamResult(response, protocol)).text;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Consume a provider SSE stream into the one-shot `tb.ai()` result: accumulated text plus the
|
|
134
|
+
* provider-reported token usage (absent when the provider reported none). Reasoning text is
|
|
135
|
+
* still discarded — reasoning reaches callers only via `tb.ai.stream()`.
|
|
136
|
+
*/
|
|
137
|
+
export async function consumeStreamResult(response, protocol) {
|
|
129
138
|
if (!response.body)
|
|
130
139
|
throw new Error('Response body is missing');
|
|
131
|
-
// The
|
|
132
|
-
// resolution, SSE framing, and error-event handling all live there, single-sourced.
|
|
133
|
-
let
|
|
140
|
+
// The buffered projection of streamAiChunks: accumulate `text` deltas, keep the final usage
|
|
141
|
+
// chunk. Protocol resolution, SSE framing, and error-event handling all live there, single-sourced.
|
|
142
|
+
let text = '';
|
|
143
|
+
let usage;
|
|
134
144
|
for await (const chunk of streamAiChunks(response, protocol)) {
|
|
135
145
|
if (chunk.kind === 'text')
|
|
136
|
-
|
|
146
|
+
text += chunk.text;
|
|
147
|
+
else if (chunk.kind === 'usage')
|
|
148
|
+
usage = chunk.usage;
|
|
137
149
|
}
|
|
138
|
-
return
|
|
150
|
+
return { text, usage };
|
|
139
151
|
}
|
|
140
152
|
/**
|
|
141
153
|
* Adapt a provider's SSE Response into a pull stream of public {@link AiChunk}s — the shared
|
|
@@ -143,6 +155,9 @@ export async function consumeStreamText(response, protocol) {
|
|
|
143
155
|
* bridge (each then wraps it in its own transport: NDJSON over HTTP / postMessage frames). Pure and
|
|
144
156
|
* browser-safe: only a `Response` reader plus the already-shared parsing. Each internal
|
|
145
157
|
* `{ text?, reasoning? }` piece becomes one or two discriminated chunks (reasoning before text).
|
|
158
|
+
* Usage is accumulated across pieces (providers report it in fragments — Anthropic input at
|
|
159
|
+
* message_start, cumulative output per message_delta) and emitted as ONE final `usage` chunk
|
|
160
|
+
* after the provider stream ends, when any event reported counts.
|
|
146
161
|
* A provider error event throws `ProviderStreamError` out of `parseStreamChunk`, which the caller's
|
|
147
162
|
* transport turns into a terminal error so the client iterator rejects.
|
|
148
163
|
*/
|
|
@@ -155,12 +170,18 @@ export async function* streamAiChunks(response, protocol) {
|
|
|
155
170
|
if (!response.body)
|
|
156
171
|
return;
|
|
157
172
|
const reader = response.body.getReader();
|
|
173
|
+
let usage;
|
|
158
174
|
for await (const json of consumeSseStreamGen(reader)) {
|
|
159
175
|
const piece = spec.parseStreamChunk(json);
|
|
160
176
|
if (piece?.reasoning)
|
|
161
177
|
yield { kind: 'reasoning', text: piece.reasoning };
|
|
162
178
|
if (piece?.text)
|
|
163
179
|
yield { kind: 'text', text: piece.text };
|
|
180
|
+
if (piece?.usage)
|
|
181
|
+
usage = mergeUsage(usage, piece.usage);
|
|
164
182
|
}
|
|
183
|
+
const settled = finalizeUsage(usage);
|
|
184
|
+
if (settled)
|
|
185
|
+
yield { kind: 'usage', usage: settled };
|
|
165
186
|
}
|
|
166
187
|
//# sourceMappingURL=sseParser.js.map
|
package/dist/ai/sseParser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sseParser.js","sourceRoot":"","sources":["../../ai/src/sseParser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,sFAAsF;AACtF,SAAS,aAAa,CAAC,MAAc;IACnC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACvC,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IACjC,IAAI,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;QAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;IACzE,IAAI,EAAE,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;IACzC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAU,KAAa;IAClD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAClC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAA;IAE1D,IAAI,CAAC,SAAS,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IAElC,MAAM,UAAU,GAAG,SAAS;SACzB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;SACpC,IAAI,CAAC,IAAI,CAAC;SACV,IAAI,EAAE,CAAA;IAET,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAA;IAC5B,IAAI,UAAU,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAA;IAE1C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAM,CAAA;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAA+C,EAC/C,OAA2B,EAC3B,MAAoB;IAEpB,sFAAsF;IACtF,6DAA6D;IAC7D,IAAI,eAAe,GAAG,KAAK,CAAA;IAC3B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,mBAAmB,CAAI,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,eAAe,GAAG,IAAI,CAAA,CAAC,CAAC,CAAC,EAAE,CAAC;QACnG,OAAO,CAAC,KAAK,CAAC,CAAA;IAChB,CAAC;IACD,OAAO,EAAE,eAAe,EAAE,CAAA;AAC5B,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,mBAAmB,CACxC,MAA+C,EAC/C,MAAoB,EACpB,OAAoB;IAEpB,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;IACjC,IAAI,MAAM,GAAG,EAAE,CAAA;IAEf,0FAA0F;IAC1F,IAAI,OAAiC,CAAA;IACrC,MAAM,YAAY,GAA0B,MAAM;QAChD,CAAC,CAAC,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YAC/B,IAAI,MAAM,CAAC,OAAO;gBAAE,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAA;YAChD,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAA;YAC5C,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3D,CAAC,CAAC;QACJ,CAAC,CAAC,IAAI,CAAA;IACR,0FAA0F;IAC1F,wFAAwF;IACxF,yFAAyF;IACzF,qFAAqF;IACrF,YAAY,EAAE,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IAE7B,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,YAAY;gBAClC,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,YAAY,CAAC,CAAC;gBACnD,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;YACvB,IAAI,IAAI,EAAE,CAAC;gBACT,uCAAuC;gBACvC,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;oBAClB,MAAM,MAAM,GAAG,aAAa,CAAI,MAAM,CAAC,CAAA;oBACvC,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,MAAM;wBAAE,MAAM,MAAM,CAAA;gBACxD,CAAC;gBACD,OAAM;YACR,CAAC;YACD,OAAO,EAAE,EAAE,CAAA;YACX,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;YACjD,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;YACrD,OAAO,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;gBAClB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;gBAClC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,CAAA;gBACnC,MAAM,MAAM,GAAG,aAAa,CAAI,KAAK,CAAC,CAAA;gBACtC,IAAI,MAAM,KAAK,MAAM;oBAAE,OAAM;gBAC7B,IAAI,MAAM,KAAK,IAAI;oBAAE,MAAM,MAAM,CAChC;gBAAA,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;YACtD,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,IAAI,OAAO;YAAE,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC1D,IAAI,CAAC;YAAC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAA;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAkB,EAClB,QAA2B;IAE3B,IAAI,CAAC,QAAQ,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;IAC/D,4FAA4F;IAC5F,
|
|
1
|
+
{"version":3,"file":"sseParser.js","sourceRoot":"","sources":["../../ai/src/sseParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tbTypings.d.ts","sourceRoot":"","sources":["../../dts/src/tbTypings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"tbTypings.d.ts","sourceRoot":"","sources":["../../dts/src/tbTypings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAoRH,kEAAkE;AAClE,eAAO,MAAM,eAAe,QAO3B,CAAA;AASD;;;wDAGwD;AACxD,eAAO,MAAM,eAAe,QAO3B,CAAA"}
|
package/dist/dts/tbTypings.js
CHANGED
|
@@ -46,10 +46,17 @@ const aiOptions = `options: {
|
|
|
46
46
|
}`;
|
|
47
47
|
/** A streamed delta from \`tb.ai.stream()\` — a discriminated union, exactly one kind per chunk. */
|
|
48
48
|
const aiChunkType = `
|
|
49
|
+
/** Provider-reported token counts for one call — real usage from the API, never an estimate.
|
|
50
|
+
* \`output\` is total billed output (reasoning included); \`reasoning\` is the itemized subset where
|
|
51
|
+
* the provider splits it (OpenAI, Gemini, OpenRouter — Anthropic doesn't); \`cacheRead\` is the
|
|
52
|
+
* cached subset of \`input\`. */
|
|
53
|
+
type AiUsage = { input: number; output: number; reasoning?: number; cacheRead?: number };
|
|
54
|
+
|
|
49
55
|
/** A single streamed delta from \`tb.ai.stream()\`. Discriminated by \`kind\`. */
|
|
50
56
|
type AiChunk =
|
|
51
57
|
| { kind: "text"; text: string }
|
|
52
|
-
| { kind: "reasoning"; text: string }
|
|
58
|
+
| { kind: "reasoning"; text: string }
|
|
59
|
+
| { kind: "usage"; usage: AiUsage };
|
|
53
60
|
`;
|
|
54
61
|
/** What \`tb.aiAccess()\` answers. Named so bulbs can hold it in state without respelling the union. */
|
|
55
62
|
const aiAccessType = `
|
|
@@ -61,14 +68,18 @@ const ai = `
|
|
|
61
68
|
* General-purpose AI call. \`tb.ai(opts)\` resolves with the full text; \`tb.ai.stream(opts)\`
|
|
62
69
|
* returns an async iterable of {@link AiChunk} deltas you consume with \`for await\`.
|
|
63
70
|
*
|
|
64
|
-
* @returns Promise resolving to { text
|
|
71
|
+
* @returns Promise resolving to { text, usage? } — \`usage\` is the provider-reported token
|
|
72
|
+
* counts ({@link AiUsage}), absent when the provider reported none
|
|
65
73
|
* @throws On rate limit, network error, or provider error
|
|
66
74
|
*/
|
|
67
75
|
ai: {
|
|
68
|
-
(${aiOptions}): Promise<{ text: string }>;
|
|
76
|
+
(${aiOptions}): Promise<{ text: string; usage?: AiUsage }>;
|
|
69
77
|
/**
|
|
70
78
|
* Streaming counterpart of \`tb.ai()\`. Yields \`{ kind: "text" | "reasoning", text }\` deltas
|
|
71
|
-
* as they arrive
|
|
79
|
+
* as they arrive, then one final \`{ kind: "usage", usage }\` chunk with the call's token
|
|
80
|
+
* counts (when the provider reported them); break the loop (or abort \`signal\`) to cancel
|
|
81
|
+
* and stop the upstream. Match \`kind\` positively — a bare \`else\` branch that assumes
|
|
82
|
+
* "not reasoning means text" will misread the usage chunk.
|
|
72
83
|
*
|
|
73
84
|
* \`kind: "reasoning"\` deltas only arrive when you pass \`effort: 1-4\` AND use a
|
|
74
85
|
* thinking-capable model; otherwise the stream is \`text\`-only.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tbTypings.js","sourceRoot":"","sources":["../../dts/src/tbTypings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,MAAM,WAAW,GAAG;;;;;;;;;;;uCAWmB,CAAA;AAEvC,MAAM,OAAO,GAAG;;;;;;;;;yCASyB,CAAA;AAEzC,2DAA2D;AAC3D,MAAM,SAAS,GAAG;;;;;;;;;;;IAWd,CAAA;AAEJ,oGAAoG;AACpG,MAAM,WAAW,GAAG
|
|
1
|
+
{"version":3,"file":"tbTypings.js","sourceRoot":"","sources":["../../dts/src/tbTypings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,MAAM,WAAW,GAAG;;;;;;;;;;;uCAWmB,CAAA;AAEvC,MAAM,OAAO,GAAG;;;;;;;;;yCASyB,CAAA;AAEzC,2DAA2D;AAC3D,MAAM,SAAS,GAAG;;;;;;;;;;;IAWd,CAAA;AAEJ,oGAAoG;AACpG,MAAM,WAAW,GAAG;;;;;;;;;;;;CAYnB,CAAA;AAED,wGAAwG;AACxG,MAAM,YAAY,GAAG;;;CAGpB,CAAA;AAED,MAAM,EAAE,GAAG;;;;;;;;;;OAUJ,SAAS;;;;;;;;;;;;;;;;;aAiBH,SAAS;KACjB,CAAA;AAEL,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCA8BkB,CAAA;AAEjC,MAAM,KAAK,GAAG;;;;;;;;;;;;uCAYyB,CAAA;AAEvC,MAAM,IAAI,GAAG;;;;;;;;;;UAUH,SAAS,GAAG,CAAA;AAEtB,MAAM,EAAE,GAAG;;;;;;;;;;;;;;;;;KAiBN,CAAA;AAEL,MAAM,GAAG,GAAG;;;;;;;;;wBASY,CAAA;AAExB,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BAmDA,CAAA;AAE1B,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;6DAiB2C,CAAA;AAE7D,MAAM,GAAG,GAAG;;;;;;;;;6BASiB,CAAA;AAE7B,MAAM,iBAAiB,GAAG;;;;;;;;;;iFAUuD,CAAA;AAEjF,kEAAkE;AAClE,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,WAAW,GAAG,YAAY;;;;;qBAKvC,WAAW,GAAG,iBAAiB,GAAG,OAAO,GAAG,GAAG,GAAG,iBAAiB,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI;;CAE3I,CAAA;AAED,MAAM,SAAS,GAAG;;;;;6BAKW,CAAA;AAE7B;;;wDAGwD;AACxD,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,WAAW,GAAG,YAAY;;;;;qBAKvC,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,MAAM,GAAG,IAAI;;CAE7D,CAAA"}
|