diff options
| author | Dax Raad <[email protected]> | 2025-06-25 11:02:09 -0400 |
|---|---|---|
| committer | Dax Raad <[email protected]> | 2025-06-25 11:02:09 -0400 |
| commit | 77ae3fb9b94e93fb1d96cb7b6f9e8976349027e7 (patch) | |
| tree | 99a4c1ed2ca88bb2879117bbd87bc8d20e18498e | |
| parent | 4e7f6c47fd54056546a3edf50045f76297f1846b (diff) | |
| download | opencode-77ae3fb9b94e93fb1d96cb7b6f9e8976349027e7.tar.gz opencode-77ae3fb9b94e93fb1d96cb7b6f9e8976349027e7.zip | |
add output length errors
| -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(), |
