This commit is contained in:
Dax Raad
2025-06-09 14:01:11 -04:00
parent fa3253d1b6
commit 021fd3fcb5
8 changed files with 734 additions and 198 deletions

View File

@@ -6,6 +6,7 @@ import { Log } from "../util/log"
import {
convertToModelMessages,
generateText,
LoadAPIKeyError,
stepCountIs,
streamText,
tool,
@@ -28,6 +29,7 @@ import { Provider } from "../provider/provider"
import { SessionContext } from "./context"
import { ListTool } from "../tool/ls"
import { MCP } from "../mcp"
import { NamedError } from "../util/error"
export namespace Session {
const log = Log.create({ service: "session" })
@@ -59,6 +61,12 @@ export namespace Session {
info: Info,
}),
),
Error: Bus.event(
"session.error",
z.object({
error: Message.Info.shape.metadata.shape.error,
}),
),
}
const state = App.state("session", () => {
@@ -296,11 +304,13 @@ export namespace Session {
},
]),
model: model.language,
}).then((result) => {
return Session.update(input.sessionID, (draft) => {
draft.title = result.text
})
})
.then((result) => {
return Session.update(input.sessionID, (draft) => {
draft.title = result.text
})
})
.catch(() => {})
await updateMessage(system)
}
const msg: Message.Info = {
@@ -506,11 +516,27 @@ export namespace Session {
assistant.cost = usage.cost
await updateMessage(next)
},
onError(input) {
log.error("error", input)
if (input.error instanceof Error) {
next.metadata.error = input.error.toString()
onError(err) {
log.error("error", err)
switch (true) {
case LoadAPIKeyError.isInstance(err.error):
next.metadata.error = new Provider.AuthError(
{
providerID: input.providerID,
message: err.error.message,
},
{ cause: err.error },
).toObject()
break
case err.error instanceof Error:
next.metadata.error = new NamedError.Unknown(
{ message: err.error.toString() },
{ cause: err.error },
).toObject()
}
Bus.publish(Event.Error, {
error: next.metadata.error,
})
},
async prepareStep(step) {
next.parts.push({
@@ -532,7 +558,7 @@ export namespace Session {
})
await result.consumeStream({
onError: (err) => {
log.error("error", {
log.error("stream error", {
err,
})
},

View File

@@ -1,5 +1,7 @@
import z from "zod"
import { Bus } from "../bus"
import { Provider } from "../provider/provider"
import { NamedError } from "../util/error"
export namespace Message {
export const ToolCall = z
@@ -138,7 +140,10 @@ export namespace Message {
created: z.number(),
completed: z.number().optional(),
}),
error: z.string().optional(),
error: z.discriminatedUnion("name", [
Provider.AuthError.Schema,
NamedError.Unknown.Schema,
]),
sessionID: z.string(),
tool: z.record(z.string(), z.any()),
assistant: z