|
|
@@ -65,11 +65,14 @@ export const createLLMEventPublisher = (events: EventV2.Interface, input: Input)
|
|
|
>()
|
|
|
const timestamp = DateTime.now
|
|
|
let assistantMessageID: SessionMessage.ID | undefined
|
|
|
+ let assistantActive = false
|
|
|
+ let assistantFailed = false
|
|
|
let providerFailed = false
|
|
|
|
|
|
const startAssistant = Effect.fnUntraced(function* () {
|
|
|
if (assistantMessageID !== undefined) return assistantMessageID
|
|
|
assistantMessageID = SessionMessage.ID.create()
|
|
|
+ assistantActive = true
|
|
|
yield* events.publish(SessionEvent.Step.Started, {
|
|
|
...input,
|
|
|
assistantMessageID,
|
|
|
@@ -190,6 +193,20 @@ export const createLLMEventPublisher = (events: EventV2.Interface, input: Input)
|
|
|
yield* flushFragments()
|
|
|
})
|
|
|
|
|
|
+ const failAssistant = Effect.fnUntraced(function* (message: string) {
|
|
|
+ if (assistantFailed) return
|
|
|
+ yield* flush()
|
|
|
+ const assistantMessageID = yield* startAssistant()
|
|
|
+ assistantActive = false
|
|
|
+ assistantFailed = true
|
|
|
+ yield* events.publish(SessionEvent.Step.Failed, {
|
|
|
+ sessionID: input.sessionID,
|
|
|
+ timestamp: yield* timestamp,
|
|
|
+ assistantMessageID,
|
|
|
+ error: { type: "unknown", message },
|
|
|
+ })
|
|
|
+ })
|
|
|
+
|
|
|
const failUnsettledTools = Effect.fn("SessionRunner.failUnsettledTools")(function* (
|
|
|
message: string,
|
|
|
hostedOnly = false,
|
|
|
@@ -375,6 +392,7 @@ export const createLLMEventPublisher = (events: EventV2.Interface, input: Input)
|
|
|
}
|
|
|
case "step-finish":
|
|
|
yield* flush()
|
|
|
+ assistantActive = false
|
|
|
yield* events.publish(SessionEvent.Step.Ended, {
|
|
|
sessionID: input.sessionID,
|
|
|
timestamp: yield* timestamp,
|
|
|
@@ -388,13 +406,7 @@ export const createLLMEventPublisher = (events: EventV2.Interface, input: Input)
|
|
|
return
|
|
|
case "provider-error":
|
|
|
providerFailed = true
|
|
|
- yield* flush()
|
|
|
- yield* events.publish(SessionEvent.Step.Failed, {
|
|
|
- sessionID: input.sessionID,
|
|
|
- timestamp: yield* timestamp,
|
|
|
- assistantMessageID: yield* startAssistant(),
|
|
|
- error: { type: "unknown", message: event.message },
|
|
|
- })
|
|
|
+ yield* failAssistant(event.message)
|
|
|
return
|
|
|
}
|
|
|
})
|
|
|
@@ -402,10 +414,11 @@ export const createLLMEventPublisher = (events: EventV2.Interface, input: Input)
|
|
|
return {
|
|
|
publish,
|
|
|
flush,
|
|
|
+ failAssistant,
|
|
|
failUnsettledTools,
|
|
|
+ hasActiveAssistant: () => assistantActive,
|
|
|
hasAssistantStarted: () => assistantMessageID !== undefined,
|
|
|
hasProviderError: () => providerFailed,
|
|
|
- startAssistant,
|
|
|
assistantMessageID: assistantMessageIDForTool,
|
|
|
}
|
|
|
}
|