diff options
| author | Dax Raad <[email protected]> | 2025-06-25 11:02:09 -0400 |
|---|---|---|
| committer | Jay V <[email protected]> | 2025-06-26 17:21:53 -0400 |
| commit | dcd3131f58004304a4c14f9c0367d9905b351ef4 (patch) | |
| tree | 94e49bbc1a2fb040e809ea37fc46f838ef443895 /packages | |
| parent | 3d02e071611ca79b2d86bf4122de261dc68e74ae (diff) | |
| download | opencode-dcd3131f58004304a4c14f9c0367d9905b351ef4.tar.gz opencode-dcd3131f58004304a4c14f9c0367d9905b351ef4.zip | |
add output length errors
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/opencode/src/session/index.ts | 18 | ||||
| -rw-r--r-- | packages/opencode/src/session/message.ts | 6 |
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(), |
