mirror of
https://github.com/kennethnym/aris.git
synced 2026-06-15 20:11:18 +01:00
52 lines
1.0 KiB
TypeScript
52 lines
1.0 KiB
TypeScript
export interface QueryAgentAsk {
|
|
userId: string
|
|
message: string
|
|
}
|
|
|
|
export type QueryAgentEvent =
|
|
| { type: "text_delta"; text: string }
|
|
| { type: "tool_start"; toolName: string }
|
|
| { type: "tool_end"; toolName: string; ok: boolean }
|
|
| { type: "done" }
|
|
| { type: "error"; message: string }
|
|
|
|
export interface QueryAgent {
|
|
ask(input: QueryAgentAsk): AsyncIterable<QueryAgentEvent>
|
|
disposeUser(userId: string): void
|
|
dispose(): void
|
|
}
|
|
|
|
export interface QueryAgentResponse {
|
|
message: string
|
|
}
|
|
|
|
export class QueryAgentError extends Error {
|
|
constructor(message: string) {
|
|
super(message)
|
|
this.name = "QueryAgentError"
|
|
}
|
|
}
|
|
|
|
export async function collectQueryAgentResponse(
|
|
agent: QueryAgent,
|
|
input: QueryAgentAsk,
|
|
): Promise<QueryAgentResponse> {
|
|
let message = ""
|
|
|
|
for await (const event of agent.ask(input)) {
|
|
switch (event.type) {
|
|
case "text_delta":
|
|
message += event.text
|
|
break
|
|
case "error":
|
|
throw new QueryAgentError(event.message)
|
|
case "tool_start":
|
|
case "tool_end":
|
|
case "done":
|
|
break
|
|
}
|
|
}
|
|
|
|
return { message }
|
|
}
|