Dax Raad 8 месяцев назад
Родитель
Сommit
77ae3fb9b9
2 измененных файлов с 24 добавлено и 0 удалено
  1. 18 0
      packages/opencode/src/session/index.ts
  2. 6 0
      packages/opencode/src/session/message.ts

+ 18 - 0
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(
             {

+ 6 - 0
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(),