summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-06-25 11:02:09 -0400
committerDax Raad <[email protected]>2025-06-25 11:02:09 -0400
commit77ae3fb9b94e93fb1d96cb7b6f9e8976349027e7 (patch)
tree99a4c1ed2ca88bb2879117bbd87bc8d20e18498e
parent4e7f6c47fd54056546a3edf50045f76297f1846b (diff)
downloadopencode-77ae3fb9b94e93fb1d96cb7b6f9e8976349027e7.tar.gz
opencode-77ae3fb9b94e93fb1d96cb7b6f9e8976349027e7.zip
add output length errors
-rw-r--r--packages/opencode/src/session/index.ts18
-rw-r--r--packages/opencode/src/session/message.ts6
2 files changed, 24 insertions, 0 deletions
diff --git a/packages/opencode/src/session/index.ts b/packages/opencode/src/session/index.ts
index 554b5d1a9..21fb23699 100644
--- a/packages/opencode/src/session/index.ts
+++ b/packages/opencode/src/session/index.ts
@@ -657,6 +657,21 @@ export namespace Session {
}
break
+ case "finish":
+ log.info("message finish", {
+ reason: value.finishReason,
+ })
+ const assistant = next.metadata!.assistant!
+ const usage = getUsage(
+ model.info,
+ value.usage,
+ value.providerMetadata,
+ )
+ assistant.cost = usage.cost
+ await updateMessage(next)
+ if (value.finishReason === "length")
+ throw new Message.OutputLengthError({})
+ break
default:
l.info("unhandled", {
type: value.type,
@@ -670,6 +685,9 @@ export namespace Session {
error: e,
})
switch (true) {
+ case Message.OutputLengthError.isInstance(e):
+ next.metadata.error = e
+ break
case LoadAPIKeyError.isInstance(e):
next.metadata.error = new Provider.AuthError(
{
diff --git a/packages/opencode/src/session/message.ts b/packages/opencode/src/session/message.ts
index 5d727cf57..258857cda 100644
--- a/packages/opencode/src/session/message.ts
+++ b/packages/opencode/src/session/message.ts
@@ -4,6 +4,11 @@ import { Provider } from "../provider/provider"
import { NamedError } from "../util/error"
export namespace Message {
+ export const OutputLengthError = NamedError.create(
+ "SessionOutputLengthError",
+ z.object({}),
+ )
+
export const ToolCall = z
.object({
state: z.literal("call"),
@@ -145,6 +150,7 @@ export namespace Message {
.discriminatedUnion("name", [
Provider.AuthError.Schema,
NamedError.Unknown.Schema,
+ OutputLengthError.Schema,
])
.optional(),
sessionID: z.string(),