Skip to content

Commit abe6793

Browse files
authored
pass structured error (#12)
1 parent bd47e6a commit abe6793

File tree

4 files changed

+72
-20
lines changed

4 files changed

+72
-20
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
node_modules
2-
dist
2+
dist
3+
.npmrc

src/query/agent.ts

Lines changed: 32 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,19 @@
11
import { WeaviateClient } from "weaviate-client";
2-
import { QueryAgentResponse, ProgressMessage, StreamedTokens } from "./response/response.js";
3-
import { mapResponse, mapProgressMessageFromSSE, mapStreamedTokensFromSSE, mapResponseFromSSE } from "./response/response-mapping.js";
2+
import {
3+
QueryAgentResponse,
4+
ProgressMessage,
5+
StreamedTokens,
6+
} from "./response/response.js";
7+
import {
8+
mapResponse,
9+
mapProgressMessageFromSSE,
10+
mapStreamedTokensFromSSE,
11+
mapResponseFromSSE,
12+
} from "./response/response-mapping.js";
413
import { mapApiResponse } from "./response/api-response-mapping.js";
514
import { fetchServerSentEvents } from "./response/server-sent-events.js";
615
import { mapCollections, QueryAgentCollectionConfig } from "./collection.js";
16+
import { handleError } from "./response/error.js";
717

818
/**
919
* An agent for executing agentic queries against Weaviate.
@@ -74,7 +84,7 @@ export class QueryAgent {
7484
});
7585

7686
if (!response.ok) {
77-
throw Error(`Query agent failed. ${await response.text()}`);
87+
await handleError(response);
7888
}
7989

8090
return mapResponse(await response.json());
@@ -100,22 +110,25 @@ export class QueryAgent {
100110
const { host, bearerToken, headers } =
101111
await this.client.getConnectionDetails();
102112

103-
const sseStream = fetchServerSentEvents(`${this.agentsHost}/agent/stream_query`, {
104-
method: "POST",
105-
headers: {
106-
"Content-Type": "application/json",
107-
Authorization: bearerToken!,
108-
"X-Weaviate-Cluster-Url": host,
109-
},
110-
body: JSON.stringify({
111-
headers,
112-
query,
113-
collections: mapCollections(targetCollections),
114-
system_prompt: this.systemPrompt,
115-
previous_response: context ? mapApiResponse(context) : undefined,
116-
include_progress: includeProgress ?? true,
117-
}),
118-
});
113+
const sseStream = fetchServerSentEvents(
114+
`${this.agentsHost}/agent/stream_query`,
115+
{
116+
method: "POST",
117+
headers: {
118+
"Content-Type": "application/json",
119+
Authorization: bearerToken!,
120+
"X-Weaviate-Cluster-Url": host,
121+
},
122+
body: JSON.stringify({
123+
headers,
124+
query,
125+
collections: mapCollections(targetCollections),
126+
system_prompt: this.systemPrompt,
127+
previous_response: context ? mapApiResponse(context) : undefined,
128+
include_progress: includeProgress ?? true,
129+
}),
130+
}
131+
);
119132

120133
for await (const event of sseStream) {
121134
let output: ProgressMessage | StreamedTokens | QueryAgentResponse;

src/query/response/error.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
export const handleError = async (response: Response) => {
2+
const responseText = await response.text();
3+
const json = getJson(responseText);
4+
5+
if (json?.error) {
6+
const error = json.error as ErrorResponse;
7+
throw new QueryAgentError(error.message, error.code, error.details);
8+
}
9+
10+
throw new Error(`Query agent failed. ${responseText}`);
11+
};
12+
13+
const getJson = (responseText: string): Record<string, unknown> | null => {
14+
try {
15+
return JSON.parse(responseText);
16+
} catch {
17+
return null;
18+
}
19+
};
20+
21+
export class QueryAgentError extends Error {
22+
constructor(
23+
message: string,
24+
public code: string,
25+
public details?: Record<string, unknown>
26+
) {
27+
super(message);
28+
this.code = code;
29+
this.details = details;
30+
}
31+
}
32+
33+
type ErrorResponse = {
34+
message: string;
35+
code: string;
36+
details?: Record<string, unknown>;
37+
};

src/query/response/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
export * from "./response.js";
2+
export { QueryAgentError } from "./error.js";

0 commit comments

Comments
 (0)