@opencode-ai/ai 0.0.0-next-17028 → 0.0.0-next-17030
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/dist/protocols/openai-chat.js +15 -12
- package/package.json +3 -3
|
@@ -272,12 +272,13 @@ const lowerAssistantMessage = Effect.fn("OpenAIChat.lowerAssistantMessage")(func
|
|
|
272
272
|
return text;
|
|
273
273
|
})();
|
|
274
274
|
const cached = message.content.findLast((part) => "cache" in part && part.cache !== undefined);
|
|
275
|
+
const cacheControl = options.cacheControl?.(cached && "cache" in cached ? cached.cache : undefined);
|
|
275
276
|
const result = {
|
|
276
277
|
role: "assistant",
|
|
277
|
-
content: content.length
|
|
278
|
-
|
|
279
|
-
reasoning_details: details,
|
|
280
|
-
|
|
278
|
+
content: content.length > 0 ? content.map((part) => part.text).join("") : toolCalls.length > 0 ? null : "",
|
|
279
|
+
...(toolCalls.length > 0 ? { tool_calls: toolCalls } : {}),
|
|
280
|
+
...(details !== undefined ? { reasoning_details: details } : {}),
|
|
281
|
+
...(cacheControl !== undefined ? { cache_control: cacheControl } : {}),
|
|
281
282
|
};
|
|
282
283
|
if (field === undefined || reasoningText === undefined)
|
|
283
284
|
return result;
|
|
@@ -574,14 +575,14 @@ const step = (state, event) => Effect.gen(function* () {
|
|
|
574
575
|
return yield* ProviderShared.eventError(ADAPTER, "OpenAI Chat received content after the finish reason");
|
|
575
576
|
return [{ ...state, usage }, events];
|
|
576
577
|
}
|
|
577
|
-
const reasoningField = state.reasoningField ??
|
|
578
|
+
const reasoningField = state.reasoningField ?? reasoning?.field;
|
|
578
579
|
const detailDelta = Array.isArray(delta?.reasoning_details) ? delta.reasoning_details : undefined;
|
|
579
580
|
if (detailDelta !== undefined)
|
|
580
581
|
appendReasoningDetails(state.reasoningDetails, detailDelta);
|
|
581
582
|
const reasoningDetailsObserved = state.reasoningDetailsObserved || detailDelta !== undefined;
|
|
582
583
|
const deltaMetadata = reasoningMetadata(reasoningField);
|
|
583
584
|
const text = detailDelta?.length ? (detailText(detailDelta) ?? reasoning?.text) : reasoning?.text;
|
|
584
|
-
if (
|
|
585
|
+
if (text !== undefined)
|
|
585
586
|
lifecycle = Lifecycle.reasoningDelta(lifecycle, events, "reasoning-0", text, deltaMetadata);
|
|
586
587
|
else if (reasoningDetailsObserved &&
|
|
587
588
|
!lifecycle.reasoning.has("reasoning-0") &&
|
|
@@ -652,22 +653,24 @@ const step = (state, event) => Effect.gen(function* () {
|
|
|
652
653
|
});
|
|
653
654
|
const finishEvents = (state) => {
|
|
654
655
|
const events = [];
|
|
655
|
-
const
|
|
656
|
+
const toolCallEvents = state.finishReason === undefined && Object.keys(state.tools).length > 0
|
|
657
|
+
? Effect.runSync(ToolStream.finishAll(ADAPTER, state.tools)).events
|
|
658
|
+
: state.toolCallEvents;
|
|
659
|
+
const hasToolCalls = toolCallEvents.length > 0;
|
|
656
660
|
const reason = state.finishReason
|
|
657
661
|
? {
|
|
658
662
|
...state.finishReason,
|
|
659
663
|
normalized: state.finishReason.normalized === "stop" && hasToolCalls ? "tool-calls" : state.finishReason.normalized,
|
|
660
664
|
}
|
|
661
|
-
:
|
|
665
|
+
: { normalized: hasToolCalls ? "tool-calls" : "unknown" };
|
|
662
666
|
const metadata = reasoningMetadata(state.reasoningField, state.reasoningDetailsObserved ? state.reasoningDetails : undefined);
|
|
663
667
|
const started = state.reasoningDetailsObserved && !state.reasoningEmitted
|
|
664
668
|
? Lifecycle.reasoningStart(state.lifecycle, events, "reasoning-0", reasoningMetadata(state.reasoningField))
|
|
665
669
|
: state.lifecycle;
|
|
666
670
|
const ended = Lifecycle.reasoningEnd(started, events, "reasoning-0", metadata);
|
|
667
|
-
const lifecycle =
|
|
668
|
-
events.push(...
|
|
669
|
-
|
|
670
|
-
Lifecycle.finish(lifecycle, events, { reason, usage: state.usage });
|
|
671
|
+
const lifecycle = toolCallEvents.length ? Lifecycle.stepStart(ended, events) : ended;
|
|
672
|
+
events.push(...toolCallEvents);
|
|
673
|
+
Lifecycle.finish(lifecycle, events, { reason, usage: state.usage });
|
|
671
674
|
return events;
|
|
672
675
|
};
|
|
673
676
|
// =============================================================================
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
|
-
"version": "0.0.0-next-
|
|
3
|
+
"version": "0.0.0-next-17030",
|
|
4
4
|
"name": "@opencode-ai/ai",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@clack/prompts": "1.0.0-alpha.1",
|
|
32
32
|
"@effect/platform-node": "4.0.0-beta.101",
|
|
33
|
-
"@opencode-ai/http-recorder": "0.0.0-next-
|
|
33
|
+
"@opencode-ai/http-recorder": "0.0.0-next-17030",
|
|
34
34
|
"@tsconfig/bun": "1.0.9",
|
|
35
35
|
"@types/bun": "1.3.13",
|
|
36
36
|
"@typescript/native-preview": "7.0.0-dev.20251207.1",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"@smithy/eventstream-codec": "4.2.14",
|
|
41
41
|
"@smithy/util-utf8": "4.2.2",
|
|
42
|
-
"@opencode-ai/schema": "0.0.0-next-
|
|
42
|
+
"@opencode-ai/schema": "0.0.0-next-17030",
|
|
43
43
|
"aws4fetch": "1.0.20",
|
|
44
44
|
"effect": "4.0.0-beta.101",
|
|
45
45
|
"google-auth-library": "10.5.0"
|