hoomanjs 1.26.2 → 1.27.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 +25 -1
- package/dist/core/config.d.ts +1 -0
- package/dist/core/config.js +1 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/models/bitfrost/bitfrost-base-url.d.ts +6 -0
- package/dist/core/models/bitfrost/bitfrost-base-url.js +27 -0
- package/dist/core/models/bitfrost/bitfrost-base-url.js.map +1 -0
- package/dist/core/models/bitfrost/index.d.ts +11 -0
- package/dist/core/models/bitfrost/index.js +29 -0
- package/dist/core/models/bitfrost/index.js.map +1 -0
- package/dist/core/models/bitfrost/strands-bitfrost.d.ts +14 -0
- package/dist/core/models/bitfrost/strands-bitfrost.js +168 -0
- package/dist/core/models/bitfrost/strands-bitfrost.js.map +1 -0
- package/dist/core/models/index.js +1 -0
- package/dist/core/models/index.js.map +1 -1
- package/dist/core/models/openai/index.js +2 -26
- package/dist/core/models/openai/index.js.map +1 -1
- package/dist/core/models/openai/kimi-reasoning-wire.d.ts +40 -0
- package/dist/core/models/openai/kimi-reasoning-wire.js +109 -0
- package/dist/core/models/openai/kimi-reasoning-wire.js.map +1 -0
- package/dist/core/models/openai/openai-stream-shims.d.ts +7 -1
- package/dist/core/models/openai/openai-stream-shims.js +29 -0
- package/dist/core/models/openai/openai-stream-shims.js.map +1 -1
- package/dist/core/models/tensorzero/index.d.ts +3 -0
- package/dist/core/models/tensorzero/index.js +3 -0
- package/dist/core/models/tensorzero/index.js.map +1 -1
- package/dist/core/models/tensorzero/openai-chat-request-shims.d.ts +2 -15
- package/dist/core/models/tensorzero/openai-chat-request-shims.js +3 -69
- package/dist/core/models/tensorzero/openai-chat-request-shims.js.map +1 -1
- package/dist/core/skills/built-in/hooman-config/SKILL.md +4 -2
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -414,10 +414,29 @@ Example:
|
|
|
414
414
|
|
|
415
415
|
OpenAI-compatible gateways that put token `usage` on the last streamed chunk together with `choices` are handled via a small stream shim so usage still surfaces in the UI.
|
|
416
416
|
|
|
417
|
+
### Bitfrost
|
|
418
|
+
|
|
419
|
+
Use **`bitfrost`** (not `openai`) when routing through a Bitfrost OpenAI-compatible gateway to **Moonshot / Kimi**. Set `clientConfig.baseURL` to the gateway **origin only** (e.g. `http://localhost:8080`); `/openai/v1` is appended automatically. Same `params` shape as **OpenAI**, implemented with **StrandsBitfrostModel**: `delta.reasoning` streaming, synthetic `delta.role` when missing, `reasoning_content` replay for tool turns, and final-chunk usage handling.
|
|
420
|
+
|
|
421
|
+
```json
|
|
422
|
+
{
|
|
423
|
+
"provider": "bitfrost",
|
|
424
|
+
"model": "Moonshot/kimi-k2.6",
|
|
425
|
+
"params": {
|
|
426
|
+
"apiKey": "dummy-key",
|
|
427
|
+
"clientConfig": {
|
|
428
|
+
"baseURL": "http://localhost:8080"
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
```
|
|
433
|
+
|
|
417
434
|
### TensorZero
|
|
418
435
|
|
|
419
436
|
Use for a [TensorZero](https://tensorzero.com) gateway’s **OpenAI-compatible** HTTP API (for example `/openai/v1`). Same general `params` shape as **OpenAI** (`apiKey`, `clientConfig.baseURL`, etc.), but implemented with **StrandsTensorZeroModel** so gateway-specific streaming works end-to-end: reasoning carried in `tensorzero_extra_content` shows as thinking in the chat UI, and usage metadata is normalized.
|
|
420
437
|
|
|
438
|
+
Gateway features such as **tag-scoped rate limits** use TensorZero tags on each request. Set them in config under the nested `params` object (Strands forwards that object onto the Chat Completions body), for example `tensorzero::tags.user_id`.
|
|
439
|
+
|
|
421
440
|
```json
|
|
422
441
|
{
|
|
423
442
|
"provider": "tensorzero",
|
|
@@ -426,12 +445,17 @@ Use for a [TensorZero](https://tensorzero.com) gateway’s **OpenAI-compatible**
|
|
|
426
445
|
"apiKey": "your-tensorzero-or-gateway-key",
|
|
427
446
|
"clientConfig": {
|
|
428
447
|
"baseURL": "http://localhost:3000/openai/v1"
|
|
448
|
+
},
|
|
449
|
+
"params": {
|
|
450
|
+
"tensorzero::tags": {
|
|
451
|
+
"user_id": "your-stable-user-or-tenant-id"
|
|
452
|
+
}
|
|
429
453
|
}
|
|
430
454
|
}
|
|
431
455
|
}
|
|
432
456
|
```
|
|
433
457
|
|
|
434
|
-
Use `tensorzero` when the backend is TensorZero; use `openai` for the official OpenAI API or generic Chat Completions proxies that do not need
|
|
458
|
+
Use `tensorzero` when the backend is TensorZero; use `bitfrost` for Bitfrost → Kimi; use `openai` for the official OpenAI API or generic Chat Completions proxies that do not need those gateway-specific stream shapes.
|
|
435
459
|
|
|
436
460
|
### Anthropic
|
|
437
461
|
|
package/dist/core/config.d.ts
CHANGED
package/dist/core/config.js
CHANGED
package/dist/core/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bitfrost serves the OpenAI-compatible API under `/openai/v1/...`. The OpenAI client expects
|
|
3
|
+
* `baseURL` to include the `/v1` prefix. Users may set only the gateway origin (e.g.
|
|
4
|
+
* `http://localhost:8080`); we append `/openai/v1` in that case.
|
|
5
|
+
*/
|
|
6
|
+
export declare function normalizeBitfrostClientBaseURL(raw: string): string;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bitfrost serves the OpenAI-compatible API under `/openai/v1/...`. The OpenAI client expects
|
|
3
|
+
* `baseURL` to include the `/v1` prefix. Users may set only the gateway origin (e.g.
|
|
4
|
+
* `http://localhost:8080`); we append `/openai/v1` in that case.
|
|
5
|
+
*/
|
|
6
|
+
export function normalizeBitfrostClientBaseURL(raw) {
|
|
7
|
+
const trimmed = raw.trim().replace(/\/+$/, "");
|
|
8
|
+
let url;
|
|
9
|
+
try {
|
|
10
|
+
url = new URL(trimmed);
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return raw;
|
|
14
|
+
}
|
|
15
|
+
const path = url.pathname.replace(/\/+$/, "") || "/";
|
|
16
|
+
if (path === "/") {
|
|
17
|
+
return `${url.origin}/openai/v1`;
|
|
18
|
+
}
|
|
19
|
+
if (path.endsWith("/openai/v1")) {
|
|
20
|
+
return `${url.origin}${path}`;
|
|
21
|
+
}
|
|
22
|
+
if (path === "/openai" || path.endsWith("/openai")) {
|
|
23
|
+
return `${url.origin}${path}/v1`;
|
|
24
|
+
}
|
|
25
|
+
return trimmed;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=bitfrost-base-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bitfrost-base-url.js","sourceRoot":"","sources":["../../../../src/core/models/bitfrost/bitfrost-base-url.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAAC,GAAW;IACxD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;IACrD,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;QACjB,OAAO,GAAG,GAAG,CAAC,MAAM,YAAY,CAAC;IACnC,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,OAAO,GAAG,GAAG,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;IAChC,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACnD,OAAO,GAAG,GAAG,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC;IACnC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { OpenAIModelOptions } from "@strands-agents/sdk/models/openai";
|
|
2
|
+
import { StrandsBitfrostModel } from "./strands-bitfrost.js";
|
|
3
|
+
export { StrandsBitfrostModel } from "./strands-bitfrost.js";
|
|
4
|
+
export { normalizeBitfrostClientBaseURL } from "./bitfrost-base-url.js";
|
|
5
|
+
export type BitfrostModelConfig = Omit<OpenAIModelOptions, "api" | "modelId">;
|
|
6
|
+
/**
|
|
7
|
+
* Strands {@link Model} for a Bitfrost OpenAI-compatible HTTP API.
|
|
8
|
+
* Set `clientConfig.baseURL` to the gateway origin only (e.g. `http://localhost:8080`); `/openai/v1`
|
|
9
|
+
* is appended automatically. Same `params` shape as **OpenAI** otherwise.
|
|
10
|
+
*/
|
|
11
|
+
export declare function create(model: string, params: Record<string, unknown>): StrandsBitfrostModel;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { normalizeBitfrostClientBaseURL } from "./bitfrost-base-url.js";
|
|
2
|
+
import { patchOpenAIClientChatCompletionsForUsage } from "../openai/openai-stream-shims.js";
|
|
3
|
+
import { StrandsBitfrostModel } from "./strands-bitfrost.js";
|
|
4
|
+
export { StrandsBitfrostModel } from "./strands-bitfrost.js";
|
|
5
|
+
export { normalizeBitfrostClientBaseURL } from "./bitfrost-base-url.js";
|
|
6
|
+
/**
|
|
7
|
+
* Strands {@link Model} for a Bitfrost OpenAI-compatible HTTP API.
|
|
8
|
+
* Set `clientConfig.baseURL` to the gateway origin only (e.g. `http://localhost:8080`); `/openai/v1`
|
|
9
|
+
* is appended automatically. Same `params` shape as **OpenAI** otherwise.
|
|
10
|
+
*/
|
|
11
|
+
export function create(model, params) {
|
|
12
|
+
const merged = { ...params };
|
|
13
|
+
const cc = merged.clientConfig;
|
|
14
|
+
if (cc && typeof cc.baseURL === "string" && cc.baseURL.length > 0) {
|
|
15
|
+
merged.clientConfig = {
|
|
16
|
+
...cc,
|
|
17
|
+
baseURL: normalizeBitfrostClientBaseURL(cc.baseURL),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
const modelInstance = new StrandsBitfrostModel({
|
|
21
|
+
api: "chat",
|
|
22
|
+
modelId: model,
|
|
23
|
+
...merged,
|
|
24
|
+
});
|
|
25
|
+
const client = modelInstance._client;
|
|
26
|
+
patchOpenAIClientChatCompletionsForUsage(client);
|
|
27
|
+
return modelInstance;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/models/bitfrost/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,wCAAwC,EAAE,MAAM,kCAAkC,CAAC;AAC5F,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAIxE;;;;GAIG;AACH,MAAM,UAAU,MAAM,CACpB,KAAa,EACb,MAA+B;IAE/B,MAAM,MAAM,GAAG,EAAE,GAAI,MAA8B,EAAE,CAAC;IACtD,MAAM,EAAE,GAAG,MAAM,CAAC,YAAgD,CAAC;IACnE,IAAI,EAAE,IAAI,OAAO,EAAE,CAAC,OAAO,KAAK,QAAQ,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClE,MAAM,CAAC,YAAY,GAAG;YACpB,GAAG,EAAE;YACL,OAAO,EAAE,8BAA8B,CAAC,EAAE,CAAC,OAAO,CAAC;SACpD,CAAC;IACJ,CAAC;IACD,MAAM,aAAa,GAAG,IAAI,oBAAoB,CAAC;QAC7C,GAAG,EAAE,MAAM;QACX,OAAO,EAAE,KAAK;QACd,GAAG,MAAM;KACV,CAAC,CAAC;IACH,MAAM,MAAM,GAAI,aAAgD,CAAC,OAAO,CAAC;IACzE,wCAAwC,CAAC,MAAM,CAAC,CAAC;IACjD,OAAO,aAAa,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Message } from "@strands-agents/sdk";
|
|
2
|
+
import type { StreamOptions } from "@strands-agents/sdk";
|
|
3
|
+
import type { ModelStreamEvent } from "@strands-agents/sdk";
|
|
4
|
+
import { OpenAIModel } from "@strands-agents/sdk/models/openai";
|
|
5
|
+
import type { OpenAIModelOptions } from "@strands-agents/sdk/models/openai";
|
|
6
|
+
/**
|
|
7
|
+
* {@link OpenAIModel} tuned for Bitfrost (and similar gateways) fronting Moonshot/Kimi OpenAI
|
|
8
|
+
* routes: `delta.reasoning`, missing initial `delta.role`, `reasoning_content` replay for tool
|
|
9
|
+
* turns, and usage on the final streamed chunk.
|
|
10
|
+
*/
|
|
11
|
+
export declare class StrandsBitfrostModel extends OpenAIModel {
|
|
12
|
+
constructor(options: OpenAIModelOptions);
|
|
13
|
+
stream(messages: Message[], options?: StreamOptions): AsyncIterable<ModelStreamEvent>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { dirname, join } from "node:path";
|
|
2
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
3
|
+
import { OpenAIModel } from "@strands-agents/sdk/models/openai";
|
|
4
|
+
import { applyKimiReasoningContentToChatRequest, collectReasoningTextPerWireAssistant, stripAssistantReasoningBlocks, } from "../openai/kimi-reasoning-wire.js";
|
|
5
|
+
import { splitUsageOntoEmptyChoicesChunk } from "../openai/openai-stream-shims.js";
|
|
6
|
+
/** Strands 1.x chat adapter lives next to `models/openai` and is not a package export. */
|
|
7
|
+
function openAiChatAdapterUrl() {
|
|
8
|
+
return pathToFileURL(join(dirname(fileURLToPath(import.meta.resolve("@strands-agents/sdk/models/openai"))), "chat-adapter.js")).href;
|
|
9
|
+
}
|
|
10
|
+
let chatAdapterPromise = null;
|
|
11
|
+
function loadOpenAiChatAdapter() {
|
|
12
|
+
chatAdapterPromise ??= import(openAiChatAdapterUrl());
|
|
13
|
+
return chatAdapterPromise;
|
|
14
|
+
}
|
|
15
|
+
/** Bitfrost/Moonshot streams may omit `delta.role`; Strands requires it for a valid turn. */
|
|
16
|
+
function ensureAssistantRoleOnFirstDelta(chunk, injected) {
|
|
17
|
+
if (injected.value || !chunk.choices?.length) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const delta = chunk.choices[0]?.delta;
|
|
21
|
+
if (!delta || typeof delta !== "object") {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (delta.role != null && delta.role !== "") {
|
|
25
|
+
injected.value = true;
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const meaningful = Object.keys(delta).some((k) => {
|
|
29
|
+
const v = delta[k];
|
|
30
|
+
if (v == null) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
if (k === "content" || k === "reasoning") {
|
|
34
|
+
return typeof v === "string" && v.length > 0;
|
|
35
|
+
}
|
|
36
|
+
if (k === "tool_calls") {
|
|
37
|
+
return Array.isArray(v) && v.length > 0;
|
|
38
|
+
}
|
|
39
|
+
if (k === "reasoning_details") {
|
|
40
|
+
return Array.isArray(v) && v.length > 0;
|
|
41
|
+
}
|
|
42
|
+
return true;
|
|
43
|
+
});
|
|
44
|
+
if (!meaningful) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
delta.role = "assistant";
|
|
48
|
+
injected.value = true;
|
|
49
|
+
}
|
|
50
|
+
function closeOpenReasoningBeforeWireEvents(delta, streamState) {
|
|
51
|
+
if (!delta || !streamState.reasoningContentBlockStarted) {
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
54
|
+
const toolCalls = delta.tool_calls;
|
|
55
|
+
if (Array.isArray(toolCalls) && toolCalls.length > 0) {
|
|
56
|
+
streamState.reasoningContentBlockStarted = false;
|
|
57
|
+
return [{ type: "modelContentBlockStopEvent" }];
|
|
58
|
+
}
|
|
59
|
+
const content = delta.content;
|
|
60
|
+
if (typeof content === "string" && content.length > 0) {
|
|
61
|
+
streamState.reasoningContentBlockStarted = false;
|
|
62
|
+
return [{ type: "modelContentBlockStopEvent" }];
|
|
63
|
+
}
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
function openReasoningDeltaEvents(delta, streamState) {
|
|
67
|
+
const out = [];
|
|
68
|
+
if (!delta) {
|
|
69
|
+
return out;
|
|
70
|
+
}
|
|
71
|
+
const reasoning = delta.reasoning;
|
|
72
|
+
if (typeof reasoning !== "string" || reasoning.length === 0) {
|
|
73
|
+
return out;
|
|
74
|
+
}
|
|
75
|
+
if (!streamState.reasoningContentBlockStarted) {
|
|
76
|
+
out.push({ type: "modelContentBlockStartEvent" });
|
|
77
|
+
streamState.reasoningContentBlockStarted = true;
|
|
78
|
+
}
|
|
79
|
+
out.push({
|
|
80
|
+
type: "modelContentBlockDeltaEvent",
|
|
81
|
+
delta: { type: "reasoningContentDelta", text: reasoning },
|
|
82
|
+
});
|
|
83
|
+
return out;
|
|
84
|
+
}
|
|
85
|
+
function injectReasoningStopBeforeMessageStop(events, streamState) {
|
|
86
|
+
const out = [];
|
|
87
|
+
for (const e of events) {
|
|
88
|
+
if (e.type === "modelMessageStopEvent" &&
|
|
89
|
+
streamState.reasoningContentBlockStarted) {
|
|
90
|
+
out.push({ type: "modelContentBlockStopEvent" });
|
|
91
|
+
streamState.reasoningContentBlockStarted = false;
|
|
92
|
+
}
|
|
93
|
+
out.push(e);
|
|
94
|
+
}
|
|
95
|
+
return out;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* {@link OpenAIModel} tuned for Bitfrost (and similar gateways) fronting Moonshot/Kimi OpenAI
|
|
99
|
+
* routes: `delta.reasoning`, missing initial `delta.role`, `reasoning_content` replay for tool
|
|
100
|
+
* turns, and usage on the final streamed chunk.
|
|
101
|
+
*/
|
|
102
|
+
export class StrandsBitfrostModel extends OpenAIModel {
|
|
103
|
+
constructor(options) {
|
|
104
|
+
if (options.api !== "chat") {
|
|
105
|
+
throw new Error(`Bitfrost provider requires api: 'chat' (got '${String(options.api)}')`);
|
|
106
|
+
}
|
|
107
|
+
super(options);
|
|
108
|
+
}
|
|
109
|
+
async *stream(messages, options) {
|
|
110
|
+
if (!messages || messages.length === 0) {
|
|
111
|
+
throw new Error("At least one message is required");
|
|
112
|
+
}
|
|
113
|
+
const { formatChatRequest, mapChatChunkToEvents } = await loadOpenAiChatAdapter();
|
|
114
|
+
const client = this._client;
|
|
115
|
+
const rewrap = this._rewrapError;
|
|
116
|
+
try {
|
|
117
|
+
const reasoningPerWireAssistant = collectReasoningTextPerWireAssistant(messages);
|
|
118
|
+
const messagesForRequest = stripAssistantReasoningBlocks(messages);
|
|
119
|
+
const request = formatChatRequest(this.getConfig(), messagesForRequest, options);
|
|
120
|
+
applyKimiReasoningContentToChatRequest(request, reasoningPerWireAssistant, { toolPlaceholderWhenMissingReasoning: true });
|
|
121
|
+
const raw = await client.chat.completions.create(request);
|
|
122
|
+
const stream = splitUsageOntoEmptyChoicesChunk(raw);
|
|
123
|
+
const streamState = {
|
|
124
|
+
messageStarted: false,
|
|
125
|
+
textContentBlockStarted: false,
|
|
126
|
+
reasoningContentBlockStarted: false,
|
|
127
|
+
};
|
|
128
|
+
const activeToolCalls = new Map();
|
|
129
|
+
const roleInjected = { value: false };
|
|
130
|
+
let bufferedUsage = null;
|
|
131
|
+
for await (const chunk of stream) {
|
|
132
|
+
if (!chunk.choices || chunk.choices.length === 0) {
|
|
133
|
+
if (chunk.usage) {
|
|
134
|
+
bufferedUsage = {
|
|
135
|
+
type: "modelMetadataEvent",
|
|
136
|
+
usage: {
|
|
137
|
+
inputTokens: chunk.usage.prompt_tokens ?? 0,
|
|
138
|
+
outputTokens: chunk.usage.completion_tokens ?? 0,
|
|
139
|
+
totalTokens: chunk.usage.total_tokens ?? 0,
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
ensureAssistantRoleOnFirstDelta(chunk, roleInjected);
|
|
146
|
+
const delta = chunk.choices[0]?.delta;
|
|
147
|
+
const closeReasoning = closeOpenReasoningBeforeWireEvents(delta, streamState);
|
|
148
|
+
const base = mapChatChunkToEvents(chunk, streamState, activeToolCalls);
|
|
149
|
+
const openReasoning = openReasoningDeltaEvents(delta, streamState);
|
|
150
|
+
const events = injectReasoningStopBeforeMessageStop([...closeReasoning, ...base, ...openReasoning], streamState);
|
|
151
|
+
for (const event of events) {
|
|
152
|
+
if (event.type === "modelMessageStopEvent" && bufferedUsage) {
|
|
153
|
+
yield bufferedUsage;
|
|
154
|
+
bufferedUsage = null;
|
|
155
|
+
}
|
|
156
|
+
yield event;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
if (bufferedUsage) {
|
|
160
|
+
yield bufferedUsage;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
throw rewrap.call(this, error);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=strands-bitfrost.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strands-bitfrost.js","sourceRoot":"","sources":["../../../../src/core/models/bitfrost/strands-bitfrost.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export const modelProviders = {
|
|
2
2
|
anthropic: () => import("./anthropic.js"),
|
|
3
3
|
bedrock: () => import("./bedrock.js"),
|
|
4
|
+
bitfrost: () => import("./bitfrost/index.js"),
|
|
4
5
|
google: () => import("./google.js"),
|
|
5
6
|
groq: () => import("./groq.js"),
|
|
6
7
|
moonshot: () => import("./moonshot.js"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/models/index.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,cAAc,GAAiD;IAC1E,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC;IACzC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC;IACrC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC;IACnC,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;IAC/B,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC;IACvC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC;IACzC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC;IACzC,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC;IACjD,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC;CAC9B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/models/index.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,cAAc,GAAiD;IAC1E,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC;IACzC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC;IACrC,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC;IAC7C,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC;IACnC,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;IAC/B,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC;IACvC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC;IACzC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC;IACzC,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC;IACjD,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC;CAC9B,CAAC"}
|
|
@@ -1,29 +1,5 @@
|
|
|
1
1
|
import { OpenAIModel } from "@strands-agents/sdk/models/openai";
|
|
2
|
-
import {
|
|
3
|
-
const STREAM_PATCH_KEY = Symbol.for("hooman.openaiChatCompletionsUsageStreamPatch");
|
|
4
|
-
function patchChatCompletionsStream(client) {
|
|
5
|
-
const marked = client;
|
|
6
|
-
if (marked[STREAM_PATCH_KEY]) {
|
|
7
|
-
return;
|
|
8
|
-
}
|
|
9
|
-
marked[STREAM_PATCH_KEY] = true;
|
|
10
|
-
const completions = client.chat.completions;
|
|
11
|
-
const originalCreate = completions.create.bind(completions);
|
|
12
|
-
completions.create = (async (body, options) => {
|
|
13
|
-
const result = await originalCreate(body, options);
|
|
14
|
-
if (body &&
|
|
15
|
-
typeof body === "object" &&
|
|
16
|
-
"stream" in body &&
|
|
17
|
-
body.stream === true) {
|
|
18
|
-
const asStream = result;
|
|
19
|
-
if (asStream != null &&
|
|
20
|
-
typeof asStream[Symbol.asyncIterator] === "function") {
|
|
21
|
-
return splitUsageOntoEmptyChoicesChunk(asStream);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
return result;
|
|
25
|
-
});
|
|
26
|
-
}
|
|
2
|
+
import { patchOpenAIClientChatCompletionsForUsage } from "./openai-stream-shims.js";
|
|
27
3
|
export function create(model, params) {
|
|
28
4
|
const openaiModel = new OpenAIModel({
|
|
29
5
|
api: "chat",
|
|
@@ -31,7 +7,7 @@ export function create(model, params) {
|
|
|
31
7
|
...params,
|
|
32
8
|
});
|
|
33
9
|
const client = openaiModel._client;
|
|
34
|
-
|
|
10
|
+
patchOpenAIClientChatCompletionsForUsage(client);
|
|
35
11
|
return openaiModel;
|
|
36
12
|
}
|
|
37
13
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/models/openai/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAGhE,OAAO,EAAE
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/models/openai/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAGhE,OAAO,EAAE,wCAAwC,EAAE,MAAM,0BAA0B,CAAC;AAKpF,MAAM,UAAU,MAAM,CACpB,KAAa,EACb,MAA+B;IAE/B,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC;QAClC,GAAG,EAAE,MAAM;QACX,OAAO,EAAE,KAAK;QACd,GAAI,MAA4B;KACjC,CAAC,CAAC;IACH,MAAM,MAAM,GAAI,WAA8C,CAAC,OAAO,CAAC;IACvE,wCAAwC,CAAC,MAAM,CAAC,CAAC;IACjD,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { Message } from "@strands-agents/sdk";
|
|
2
|
+
import type OpenAI from "openai";
|
|
3
|
+
/**
|
|
4
|
+
* Kimi + tool calls with thinking on still needs a non-empty thought when we have no session
|
|
5
|
+
* replay text; direct OpenAI wire uses `reasoning_content`, TensorZero uses thought blocks.
|
|
6
|
+
*/
|
|
7
|
+
export declare const MOONSHOT_REASONING_PLACEHOLDER = " ";
|
|
8
|
+
/**
|
|
9
|
+
* Strands’ adapter merges `reasoningBlock` into `content`; strip those blocks before
|
|
10
|
+
* `formatChatRequest`, then replay via {@link collectReasoningTextPerWireAssistant} and
|
|
11
|
+
* {@link applyKimiReasoningContentToChatRequest} or TensorZero’s `tensorzero_extra_content`.
|
|
12
|
+
*/
|
|
13
|
+
export declare function stripAssistantReasoningBlocks(messages: Message[]): Message[];
|
|
14
|
+
/**
|
|
15
|
+
* One entry per Strands assistant turn that survives Strands’ OpenAI formatter (non-empty
|
|
16
|
+
* visible text and/or at least one tool use). Order matches `assistant` rows in
|
|
17
|
+
* `formatChatMessages` output.
|
|
18
|
+
*
|
|
19
|
+
* **Carry-over:** Strands may emit a reasoning-only assistant `Message` (no text, no tools).
|
|
20
|
+
* That row is dropped on the wire after stripping reasoning; pending text is merged into the
|
|
21
|
+
* next wire assistant’s replay slot.
|
|
22
|
+
*/
|
|
23
|
+
export declare function collectReasoningTextPerWireAssistant(messages: Message[]): string[];
|
|
24
|
+
export type KimiReasoningWireApplyOptions = {
|
|
25
|
+
/**
|
|
26
|
+
* Moonshot/Kimi with thinking: tool-only assistant rows still need a non-empty
|
|
27
|
+
* `reasoning_content`. Leave `false` for official OpenAI (default) so requests are unchanged.
|
|
28
|
+
*/
|
|
29
|
+
toolPlaceholderWhenMissingReasoning?: boolean;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Direct Moonshot / Kimi OpenAI API (e.g. via Bitfrost): when thinking is on, assistant rows
|
|
33
|
+
* with `tool_calls` must include non-empty `reasoning_content`. Strands stores thinking in
|
|
34
|
+
* `reasoningBlock`; strip those before `formatChatRequest`, collect via
|
|
35
|
+
* {@link collectReasoningTextPerWireAssistant}, then call this.
|
|
36
|
+
*
|
|
37
|
+
* For **api.openai.com**, omit this call or pass default options: no replay and no placeholder
|
|
38
|
+
* means the request body is not mutated.
|
|
39
|
+
*/
|
|
40
|
+
export declare function applyKimiReasoningContentToChatRequest(request: OpenAI.Chat.ChatCompletionCreateParamsStreaming, reasoningPerWireAssistant: readonly string[], options?: KimiReasoningWireApplyOptions): void;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kimi + tool calls with thinking on still needs a non-empty thought when we have no session
|
|
3
|
+
* replay text; direct OpenAI wire uses `reasoning_content`, TensorZero uses thought blocks.
|
|
4
|
+
*/
|
|
5
|
+
export const MOONSHOT_REASONING_PLACEHOLDER = " ";
|
|
6
|
+
/**
|
|
7
|
+
* Strands’ adapter merges `reasoningBlock` into `content`; strip those blocks before
|
|
8
|
+
* `formatChatRequest`, then replay via {@link collectReasoningTextPerWireAssistant} and
|
|
9
|
+
* {@link applyKimiReasoningContentToChatRequest} or TensorZero’s `tensorzero_extra_content`.
|
|
10
|
+
*/
|
|
11
|
+
export function stripAssistantReasoningBlocks(messages) {
|
|
12
|
+
return messages.map((msg) => {
|
|
13
|
+
if (msg.role !== "assistant") {
|
|
14
|
+
return msg;
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
...msg,
|
|
18
|
+
content: msg.content.filter((b) => b.type !== "reasoningBlock"),
|
|
19
|
+
};
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* One entry per Strands assistant turn that survives Strands’ OpenAI formatter (non-empty
|
|
24
|
+
* visible text and/or at least one tool use). Order matches `assistant` rows in
|
|
25
|
+
* `formatChatMessages` output.
|
|
26
|
+
*
|
|
27
|
+
* **Carry-over:** Strands may emit a reasoning-only assistant `Message` (no text, no tools).
|
|
28
|
+
* That row is dropped on the wire after stripping reasoning; pending text is merged into the
|
|
29
|
+
* next wire assistant’s replay slot.
|
|
30
|
+
*/
|
|
31
|
+
export function collectReasoningTextPerWireAssistant(messages) {
|
|
32
|
+
const out = [];
|
|
33
|
+
const pendingReasoning = [];
|
|
34
|
+
for (const msg of messages) {
|
|
35
|
+
if (msg.role !== "assistant") {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
const reasoningParts = [];
|
|
39
|
+
const textParts = [];
|
|
40
|
+
let toolUseCount = 0;
|
|
41
|
+
for (const block of msg.content) {
|
|
42
|
+
if (block.type === "reasoningBlock") {
|
|
43
|
+
if (block.text) {
|
|
44
|
+
reasoningParts.push(block.text);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
else if (block.type === "textBlock") {
|
|
48
|
+
textParts.push(block.text);
|
|
49
|
+
}
|
|
50
|
+
else if (block.type === "toolUseBlock") {
|
|
51
|
+
toolUseCount += 1;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const reasoningJoined = reasoningParts.join("\n");
|
|
55
|
+
const textContent = textParts.join("").trim();
|
|
56
|
+
const producesWireAssistant = textContent.length > 0 || toolUseCount > 0;
|
|
57
|
+
if (!producesWireAssistant) {
|
|
58
|
+
if (reasoningJoined.length > 0) {
|
|
59
|
+
pendingReasoning.push(reasoningJoined);
|
|
60
|
+
}
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
const combined = [...pendingReasoning, reasoningJoined]
|
|
64
|
+
.filter((s) => s.length > 0)
|
|
65
|
+
.join("\n");
|
|
66
|
+
pendingReasoning.length = 0;
|
|
67
|
+
out.push(combined);
|
|
68
|
+
}
|
|
69
|
+
return out;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Direct Moonshot / Kimi OpenAI API (e.g. via Bitfrost): when thinking is on, assistant rows
|
|
73
|
+
* with `tool_calls` must include non-empty `reasoning_content`. Strands stores thinking in
|
|
74
|
+
* `reasoningBlock`; strip those before `formatChatRequest`, collect via
|
|
75
|
+
* {@link collectReasoningTextPerWireAssistant}, then call this.
|
|
76
|
+
*
|
|
77
|
+
* For **api.openai.com**, omit this call or pass default options: no replay and no placeholder
|
|
78
|
+
* means the request body is not mutated.
|
|
79
|
+
*/
|
|
80
|
+
export function applyKimiReasoningContentToChatRequest(request, reasoningPerWireAssistant, options) {
|
|
81
|
+
const placeholderTools = options?.toolPlaceholderWhenMissingReasoning === true;
|
|
82
|
+
const anyReplay = reasoningPerWireAssistant.some((s) => s.trim().length > 0);
|
|
83
|
+
if (!anyReplay && !placeholderTools) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
let assistantOrdinal = 0;
|
|
87
|
+
for (const msg of request.messages) {
|
|
88
|
+
if (msg.role !== "assistant") {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
const extended = msg;
|
|
92
|
+
const existing = extended.reasoning_content;
|
|
93
|
+
if (typeof existing === "string" && existing.length > 0) {
|
|
94
|
+
assistantOrdinal += 1;
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
const raw = reasoningPerWireAssistant[assistantOrdinal] ?? "";
|
|
98
|
+
assistantOrdinal += 1;
|
|
99
|
+
const hasReplay = raw.trim().length > 0;
|
|
100
|
+
const hasTools = !!extended.tool_calls && extended.tool_calls.length > 0;
|
|
101
|
+
if (hasReplay) {
|
|
102
|
+
extended.reasoning_content = raw;
|
|
103
|
+
}
|
|
104
|
+
else if (hasTools && placeholderTools) {
|
|
105
|
+
extended.reasoning_content = MOONSHOT_REASONING_PLACEHOLDER;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=kimi-reasoning-wire.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kimi-reasoning-wire.js","sourceRoot":"","sources":["../../../../src/core/models/openai/kimi-reasoning-wire.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import OpenAI from "openai";
|
|
2
|
+
/**
|
|
3
|
+
* Wrap `client.chat.completions.create` so streaming responses split usage onto an empty
|
|
4
|
+
* `choices` chunk when needed (see {@link splitUsageOntoEmptyChoicesChunk}). Idempotent per
|
|
5
|
+
* client instance.
|
|
6
|
+
*/
|
|
7
|
+
export declare function patchOpenAIClientChatCompletionsForUsage(client: OpenAI): void;
|
|
2
8
|
/**
|
|
3
9
|
* Some OpenAI-compatible gateways (e.g. TensorZero) attach `usage` to the final chunk that
|
|
4
10
|
* still has non-empty `choices`. Strands' chat mapper only reads `usage` when `choices` is
|
|
@@ -1,3 +1,32 @@
|
|
|
1
|
+
const CHAT_STREAM_USAGE_PATCH_KEY = Symbol.for("hooman.openaiChatCompletionsUsageStreamPatch");
|
|
2
|
+
/**
|
|
3
|
+
* Wrap `client.chat.completions.create` so streaming responses split usage onto an empty
|
|
4
|
+
* `choices` chunk when needed (see {@link splitUsageOntoEmptyChoicesChunk}). Idempotent per
|
|
5
|
+
* client instance.
|
|
6
|
+
*/
|
|
7
|
+
export function patchOpenAIClientChatCompletionsForUsage(client) {
|
|
8
|
+
const marked = client;
|
|
9
|
+
if (marked[CHAT_STREAM_USAGE_PATCH_KEY]) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
marked[CHAT_STREAM_USAGE_PATCH_KEY] = true;
|
|
13
|
+
const completions = client.chat.completions;
|
|
14
|
+
const originalCreate = completions.create.bind(completions);
|
|
15
|
+
completions.create = (async (body, options) => {
|
|
16
|
+
const result = await originalCreate(body, options);
|
|
17
|
+
if (body &&
|
|
18
|
+
typeof body === "object" &&
|
|
19
|
+
"stream" in body &&
|
|
20
|
+
body.stream === true) {
|
|
21
|
+
const asStream = result;
|
|
22
|
+
if (asStream != null &&
|
|
23
|
+
typeof asStream[Symbol.asyncIterator] === "function") {
|
|
24
|
+
return splitUsageOntoEmptyChoicesChunk(asStream);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return result;
|
|
28
|
+
});
|
|
29
|
+
}
|
|
1
30
|
/**
|
|
2
31
|
* Some OpenAI-compatible gateways (e.g. TensorZero) attach `usage` to the final chunk that
|
|
3
32
|
* still has non-empty `choices`. Strands' chat mapper only reads `usage` when `choices` is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-stream-shims.js","sourceRoot":"","sources":["../../../../src/core/models/openai/openai-stream-shims.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,+BAA+B,CACpD,MAAkE;IAElE,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3C,MAAM,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YAChC,MAAM,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"openai-stream-shims.js","sourceRoot":"","sources":["../../../../src/core/models/openai/openai-stream-shims.ts"],"names":[],"mappings":"AAEA,MAAM,2BAA2B,GAAG,MAAM,CAAC,GAAG,CAC5C,8CAA8C,CAC/C,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,wCAAwC,CAAC,MAAc;IACrE,MAAM,MAAM,GAAG,MAEd,CAAC;IACF,IAAI,MAAM,CAAC,2BAA2B,CAAC,EAAE,CAAC;QACxC,OAAO;IACT,CAAC;IACD,MAAM,CAAC,2BAA2B,CAAC,GAAG,IAAI,CAAC;IAE3C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;IAC5C,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5D,WAAW,CAAC,MAAM,GAAG,CAAC,KAAK,EACzB,IAA0C,EAC1C,OAA8C,EAC9C,EAAE;QACF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACnD,IACE,IAAI;YACJ,OAAO,IAAI,KAAK,QAAQ;YACxB,QAAQ,IAAI,IAAI;YAChB,IAAI,CAAC,MAAM,KAAK,IAAI,EACpB,CAAC;YACD,MAAM,QAAQ,GAAG,MAAiB,CAAC;YACnC,IACE,QAAQ,IAAI,IAAI;gBAChB,OACE,QACD,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,UAAU,EACtC,CAAC;gBACD,OAAO,+BAA+B,CACpC,QAAsE,CACvE,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAyC,CAAC;AAC7C,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,+BAA+B,CACpD,MAAkE;IAElE,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3C,MAAM,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YAChC,MAAM,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -5,5 +5,8 @@ export type TensorZeroModelConfig = Omit<OpenAIModelOptions, "api" | "modelId">;
|
|
|
5
5
|
/**
|
|
6
6
|
* Strands {@link Model} for a TensorZero gateway’s OpenAI-compatible HTTP API (`/openai/v1`).
|
|
7
7
|
* Handles gateway-specific streaming: token usage on the last chunk and `tensorzero_extra_content` thoughts.
|
|
8
|
+
*
|
|
9
|
+
* Set TensorZero tags (e.g. `user_id` for gateway rate limits) in config under `llm.params.params`:
|
|
10
|
+
* `"params": { "tensorzero::tags": { "user_id": "…" } }` alongside `apiKey` / `clientConfig`.
|
|
8
11
|
*/
|
|
9
12
|
export declare function create(model: string, params: Record<string, unknown>): StrandsTensorZeroModel;
|
|
@@ -3,6 +3,9 @@ export { StrandsTensorZeroModel } from "./strands-tensorzero.js";
|
|
|
3
3
|
/**
|
|
4
4
|
* Strands {@link Model} for a TensorZero gateway’s OpenAI-compatible HTTP API (`/openai/v1`).
|
|
5
5
|
* Handles gateway-specific streaming: token usage on the last chunk and `tensorzero_extra_content` thoughts.
|
|
6
|
+
*
|
|
7
|
+
* Set TensorZero tags (e.g. `user_id` for gateway rate limits) in config under `llm.params.params`:
|
|
8
|
+
* `"params": { "tensorzero::tags": { "user_id": "…" } }` alongside `apiKey` / `clientConfig`.
|
|
6
9
|
*/
|
|
7
10
|
export function create(model, params) {
|
|
8
11
|
return new StrandsTensorZeroModel({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/models/tensorzero/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAIjE
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/models/tensorzero/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAIjE;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CACpB,KAAa,EACb,MAA+B;IAE/B,OAAO,IAAI,sBAAsB,CAAC;QAChC,GAAG,EAAE,MAAM;QACX,OAAO,EAAE,KAAK;QACd,GAAI,MAAgC;KACrC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { Message } from "@strands-agents/sdk";
|
|
2
1
|
import type OpenAI from "openai";
|
|
3
2
|
/**
|
|
4
3
|
* TensorZero’s OpenAI-compat assistant struct has `content`, `tool_calls`, and
|
|
@@ -6,21 +5,9 @@ import type OpenAI from "openai";
|
|
|
6
5
|
* never reaches Moonshot. Replay chain-of-thought as `tensorzero_extra_content` entries with
|
|
7
6
|
* `type: "thought"` (see TensorZero `openai_messages_to_input` / `ExtraContentBlock::Thought`).
|
|
8
7
|
*
|
|
9
|
-
* Strands
|
|
10
|
-
* `formatChatRequest`, collect their text per wire assistant row, then attach thoughts here.
|
|
8
|
+
* Shared Strands → wire helpers: `openai/kimi-reasoning-wire.ts`.
|
|
11
9
|
*/
|
|
12
|
-
|
|
13
|
-
export declare function stripAssistantReasoningBlocks(messages: Message[]): Message[];
|
|
14
|
-
/**
|
|
15
|
-
* One entry per Strands assistant turn that survives Strands’ OpenAI formatter (non-empty
|
|
16
|
-
* visible text and/or at least one tool use). Order matches `assistant` rows in
|
|
17
|
-
* `formatChatMessages` output.
|
|
18
|
-
*
|
|
19
|
-
* **Carry-over:** Strands may emit a reasoning-only assistant `Message` (no text, no tools).
|
|
20
|
-
* That row is dropped on the wire after stripping reasoning; pending text is merged into the
|
|
21
|
-
* next wire assistant’s replay slot.
|
|
22
|
-
*/
|
|
23
|
-
export declare function collectReasoningTextPerWireAssistant(messages: Message[]): string[];
|
|
10
|
+
export { collectReasoningTextPerWireAssistant, stripAssistantReasoningBlocks, } from "../openai/kimi-reasoning-wire.js";
|
|
24
11
|
/**
|
|
25
12
|
* TensorZero OpenAI-compat thought block (serde `ExtraContentBlock::Thought` with flattened
|
|
26
13
|
* `Thought` fields).
|
|
@@ -1,79 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
* Kimi + tool calls with thinking on still needs a non-empty thought when we have no session
|
|
3
|
-
* replay text; TensorZero carries that as {@link TensorZeroExtraThoughtBlock}, not Moonshot’s
|
|
4
|
-
* raw `reasoning_content` field.
|
|
5
|
-
*/
|
|
6
|
-
const MOONSHOT_REASONING_PLACEHOLDER = " ";
|
|
1
|
+
import { MOONSHOT_REASONING_PLACEHOLDER } from "../openai/kimi-reasoning-wire.js";
|
|
7
2
|
/**
|
|
8
3
|
* TensorZero’s OpenAI-compat assistant struct has `content`, `tool_calls`, and
|
|
9
4
|
* `tensorzero_extra_content` — it does **not** deserialize `reasoning_content`, so that field
|
|
10
5
|
* never reaches Moonshot. Replay chain-of-thought as `tensorzero_extra_content` entries with
|
|
11
6
|
* `type: "thought"` (see TensorZero `openai_messages_to_input` / `ExtraContentBlock::Thought`).
|
|
12
7
|
*
|
|
13
|
-
* Strands
|
|
14
|
-
* `formatChatRequest`, collect their text per wire assistant row, then attach thoughts here.
|
|
15
|
-
*/
|
|
16
|
-
/** Shallow copy: assistant `content` without `reasoningBlock` (other roles unchanged). */
|
|
17
|
-
export function stripAssistantReasoningBlocks(messages) {
|
|
18
|
-
return messages.map((msg) => {
|
|
19
|
-
if (msg.role !== "assistant") {
|
|
20
|
-
return msg;
|
|
21
|
-
}
|
|
22
|
-
return {
|
|
23
|
-
...msg,
|
|
24
|
-
content: msg.content.filter((b) => b.type !== "reasoningBlock"),
|
|
25
|
-
};
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* One entry per Strands assistant turn that survives Strands’ OpenAI formatter (non-empty
|
|
30
|
-
* visible text and/or at least one tool use). Order matches `assistant` rows in
|
|
31
|
-
* `formatChatMessages` output.
|
|
32
|
-
*
|
|
33
|
-
* **Carry-over:** Strands may emit a reasoning-only assistant `Message` (no text, no tools).
|
|
34
|
-
* That row is dropped on the wire after stripping reasoning; pending text is merged into the
|
|
35
|
-
* next wire assistant’s replay slot.
|
|
8
|
+
* Shared Strands → wire helpers: `openai/kimi-reasoning-wire.ts`.
|
|
36
9
|
*/
|
|
37
|
-
export
|
|
38
|
-
const out = [];
|
|
39
|
-
const pendingReasoning = [];
|
|
40
|
-
for (const msg of messages) {
|
|
41
|
-
if (msg.role !== "assistant") {
|
|
42
|
-
continue;
|
|
43
|
-
}
|
|
44
|
-
const reasoningParts = [];
|
|
45
|
-
const textParts = [];
|
|
46
|
-
let toolUseCount = 0;
|
|
47
|
-
for (const block of msg.content) {
|
|
48
|
-
if (block.type === "reasoningBlock") {
|
|
49
|
-
if (block.text) {
|
|
50
|
-
reasoningParts.push(block.text);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
else if (block.type === "textBlock") {
|
|
54
|
-
textParts.push(block.text);
|
|
55
|
-
}
|
|
56
|
-
else if (block.type === "toolUseBlock") {
|
|
57
|
-
toolUseCount += 1;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
const reasoningJoined = reasoningParts.join("\n");
|
|
61
|
-
const textContent = textParts.join("").trim();
|
|
62
|
-
const producesWireAssistant = textContent.length > 0 || toolUseCount > 0;
|
|
63
|
-
if (!producesWireAssistant) {
|
|
64
|
-
if (reasoningJoined.length > 0) {
|
|
65
|
-
pendingReasoning.push(reasoningJoined);
|
|
66
|
-
}
|
|
67
|
-
continue;
|
|
68
|
-
}
|
|
69
|
-
const combined = [...pendingReasoning, reasoningJoined]
|
|
70
|
-
.filter((s) => s.length > 0)
|
|
71
|
-
.join("\n");
|
|
72
|
-
pendingReasoning.length = 0;
|
|
73
|
-
out.push(combined);
|
|
74
|
-
}
|
|
75
|
-
return out;
|
|
76
|
-
}
|
|
10
|
+
export { collectReasoningTextPerWireAssistant, stripAssistantReasoningBlocks, } from "../openai/kimi-reasoning-wire.js";
|
|
77
11
|
/**
|
|
78
12
|
* Replay session reasoning through TensorZero so Moonshot receives `Thought` content, not
|
|
79
13
|
* dropped `reasoning_content`. Skips rows that already set `tensorzero_extra_content`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-chat-request-shims.js","sourceRoot":"","sources":["../../../../src/core/models/tensorzero/openai-chat-request-shims.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"openai-chat-request-shims.js","sourceRoot":"","sources":["../../../../src/core/models/tensorzero/openai-chat-request-shims.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAElF;;;;;;;GAOG;AAEH,OAAO,EACL,oCAAoC,EACpC,6BAA6B,GAC9B,MAAM,kCAAkC,CAAC;AAiB1C;;;GAGG;AACH,MAAM,UAAU,qCAAqC,CACnD,OAAwD,EACxD,yBAA4C;IAE5C,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnC,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC7B,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,GAAoB,CAAC;QACtC,IACE,QAAQ,CAAC,wBAAwB;YACjC,QAAQ,CAAC,wBAAwB,CAAC,MAAM,GAAG,CAAC,EAC5C,CAAC;YACD,gBAAgB,IAAI,CAAC,CAAC;YACtB,SAAS;QACX,CAAC;QAED,MAAM,GAAG,GAAG,yBAAyB,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;QAC9D,gBAAgB,IAAI,CAAC,CAAC;QAEtB,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QAEzE,IAAI,WAAW,GAAkB,IAAI,CAAC;QACtC,IAAI,SAAS,EAAE,CAAC;YACd,WAAW,GAAG,GAAG,CAAC;QACpB,CAAC;aAAM,IAAI,QAAQ,EAAE,CAAC;YACpB,WAAW,GAAG,8BAA8B,CAAC;QAC/C,CAAC;QAED,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,QAAQ,CAAC,wBAAwB,GAAG;gBAClC,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE;aACxD,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -132,6 +132,7 @@ Runtime APIs may still expose a single active profile as `llm` (derived from the
|
|
|
132
132
|
```json
|
|
133
133
|
[
|
|
134
134
|
"anthropic",
|
|
135
|
+
"bitfrost",
|
|
135
136
|
"google",
|
|
136
137
|
"groq",
|
|
137
138
|
"moonshot",
|
|
@@ -172,8 +173,9 @@ Provider notes (these refer to fields inside `options.params` unless noted):
|
|
|
172
173
|
- `groq`: `params.apiKey`, `baseURL`, and `headers` configure the provider. Other keys are forwarded as Vercel model config.
|
|
173
174
|
- `moonshot`: `params.apiKey`, `baseURL`, `headers`, and `fetch` configure the provider. Other keys are forwarded as Vercel model config.
|
|
174
175
|
- `xai`: `params.apiKey`, `baseURL`, and `headers` configure the provider. Other keys are forwarded as Vercel model config.
|
|
175
|
-
- `openai`: Strands **OpenAIModel** (Chat Completions). `params.apiKey` (or env `OPENAI_API_KEY`), optional `clientConfig` (e.g. `baseURL` for an OpenAI-compatible HTTP API). `model` becomes `modelId`.
|
|
176
|
-
- `
|
|
176
|
+
- `openai`: Strands **OpenAIModel** (Chat Completions). `params.apiKey` (or env `OPENAI_API_KEY`), optional `clientConfig` (e.g. `baseURL` for an OpenAI-compatible HTTP API). `model` becomes `modelId`. A small client patch splits final-chunk `usage` when it arrives with non-empty `choices` so Strands can record token usage.
|
|
177
|
+
- `bitfrost`: Same Chat Completions `params` shape as `openai`, but **`StrandsBitfrostModel`** — use for a Bitfrost gateway fronting Moonshot/Kimi. Set `clientConfig.baseURL` to the gateway origin (e.g. `http://localhost:8080`); `/openai/v1` is appended automatically. Handles `delta.reasoning`, missing initial `delta.role`, Moonshot `reasoning_content` on tool turns, and final-chunk usage.
|
|
178
|
+
- `tensorzero`: Same Chat Completions shape as `openai`, but **`StrandsTensorZeroModel`** — use for a [TensorZero](https://tensorzero.com) gateway’s OpenAI-compatible route (e.g. `clientConfig.baseURL` like `http://localhost:3000/openai/v1`). Maps gateway `tensorzero_extra_content` thoughts to Strands reasoning deltas and normalizes final-chunk usage. `model` is typically `tensorzero::function_name::<name>` (or other TensorZero model id strings the gateway accepts). For gateway tag-based rate limits, set `params.params["tensorzero::tags"]` (e.g. `user_id`) in the model entry in config.
|
|
177
179
|
- `ollama`: `params.host`, `keepAlive`, `options`, and `think` configure the Ollama wrapper. `think` may be `true`, `false`, `"high"`, `"medium"`, or `"low"`.
|
|
178
180
|
- `bedrock`: `params.region`, `clientConfig`, and optional `apiKey` configure Bedrock access. Put AWS credentials under `params.clientConfig.credentials` with `accessKeyId`, `secretAccessKey`, and optional `sessionToken`; put an AWS CLI/shared-config profile name in `params.clientConfig.profile`. If credentials and profile are omitted, Bedrock uses the AWS SDK default credential chain, including environment variables and AWS CLI/shared credentials. Other keys are forwarded as Bedrock model options, such as `temperature`, `maxTokens`, `stream`, and `cacheConfig`.
|
|
179
181
|
|
package/dist/index.d.ts
CHANGED
|
@@ -34,9 +34,11 @@ export { create as createGroqModelProvider } from "./core/models/groq.js";
|
|
|
34
34
|
export { create as createMoonshotModelProvider } from "./core/models/moonshot.js";
|
|
35
35
|
export { create as createOllamaModelProvider } from "./core/models/ollama/index.js";
|
|
36
36
|
export { create as createOpenAIModelProvider, type OpenAIModelParams, } from "./core/models/openai/index.js";
|
|
37
|
+
export { create as createBitfrostModelProvider } from "./core/models/bitfrost/index.js";
|
|
37
38
|
export { create as createTensorZeroModelProvider } from "./core/models/tensorzero/index.js";
|
|
38
39
|
export { create as createXaiModelProvider } from "./core/models/xai.js";
|
|
39
40
|
export { StrandsOllamaModel, type OllamaModelConfig, } from "./core/models/ollama/strands-ollama.js";
|
|
41
|
+
export { StrandsBitfrostModel, type BitfrostModelConfig, } from "./core/models/bitfrost/index.js";
|
|
40
42
|
export { StrandsTensorZeroModel, type TensorZeroModelConfig, } from "./core/models/tensorzero/index.js";
|
|
41
43
|
export { LongTermMemoryStore, createLongTermMemoryStore, createLongTermMemoryTools, createShortTermMemory, } from "./core/memory/index.js";
|
|
42
44
|
export type { ArchiveMemoryInput, LongTermMemoryOptions, LongTermMemoryScope, MemorySource, SearchMemoryInput, SearchMemoryResult, StoreMemoryInput, StoreMemoryResult, UpdateMemoryInput, } from "./core/memory/index.js";
|
package/dist/index.js
CHANGED
|
@@ -26,9 +26,11 @@ export { create as createGroqModelProvider } from "./core/models/groq.js";
|
|
|
26
26
|
export { create as createMoonshotModelProvider } from "./core/models/moonshot.js";
|
|
27
27
|
export { create as createOllamaModelProvider } from "./core/models/ollama/index.js";
|
|
28
28
|
export { create as createOpenAIModelProvider, } from "./core/models/openai/index.js";
|
|
29
|
+
export { create as createBitfrostModelProvider } from "./core/models/bitfrost/index.js";
|
|
29
30
|
export { create as createTensorZeroModelProvider } from "./core/models/tensorzero/index.js";
|
|
30
31
|
export { create as createXaiModelProvider } from "./core/models/xai.js";
|
|
31
32
|
export { StrandsOllamaModel, } from "./core/models/ollama/strands-ollama.js";
|
|
33
|
+
export { StrandsBitfrostModel, } from "./core/models/bitfrost/index.js";
|
|
32
34
|
export { StrandsTensorZeroModel, } from "./core/models/tensorzero/index.js";
|
|
33
35
|
export { LongTermMemoryStore, createLongTermMemoryStore, createLongTermMemoryTools, createShortTermMemory, } from "./core/memory/index.js";
|
|
34
36
|
export { LazySessionManager } from "./core/memory/stm/lazy-session-manager.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|