@intelligentelectron/pdf-analyzer 0.2.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -6
- package/dist/cli/commands.d.ts +6 -2
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +83 -100
- package/dist/cli/commands.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -3
- package/dist/index.js.map +1 -1
- package/dist/keychain.d.ts +21 -7
- package/dist/keychain.d.ts.map +1 -1
- package/dist/keychain.js +79 -38
- package/dist/keychain.js.map +1 -1
- package/dist/pdf-utils.d.ts +28 -0
- package/dist/pdf-utils.d.ts.map +1 -0
- package/dist/pdf-utils.js +93 -0
- package/dist/pdf-utils.js.map +1 -0
- package/dist/providers/anthropic.d.ts +9 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +69 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/google.d.ts +13 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +120 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/index.d.ts +9 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +8 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai.d.ts +9 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +70 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/registry.d.ts +23 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +44 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/types.d.ts +70 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/server.d.ts +2 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +27 -31
- package/dist/server.js.map +1 -1
- package/dist/service.d.ts +7 -35
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +99 -274
- package/dist/service.js.map +1 -1
- package/dist/types.d.ts +20 -12
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +15 -45
- package/dist/types.js.map +1 -1
- package/package.json +16 -4
package/dist/service.js
CHANGED
|
@@ -1,153 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import * as path from "node:path";
|
|
4
|
-
import { ChunkedGeminiResponseSchema, GeminiResponseSchema } from "./types.js";
|
|
1
|
+
import { generateText, Output } from "ai";
|
|
2
|
+
import { ResponseSchema, ChunkedResponseSchema } from "./types.js";
|
|
5
3
|
import { pdfBytesToChunk, splitPdfInHalf } from "./chunker.js";
|
|
6
|
-
import {
|
|
7
|
-
const GEMINI_MODEL = "gemini-3.1-pro-preview";
|
|
4
|
+
import { isGeminiFileUri, isUrl, fetchPdfFromUrl, readPdfBytes } from "./pdf-utils.js";
|
|
8
5
|
const SYSTEM_INSTRUCTION = `You are a document analysis assistant. Analyze PDF documents and answer questions based on their content.
|
|
9
6
|
For each question, provide a clear, detailed answer based on the content of the PDF.
|
|
10
7
|
If the answer cannot be determined from the PDF, say so explicitly.
|
|
11
8
|
Always respond with accurate information from the document.`;
|
|
12
|
-
/** Gemini File API URI prefix */
|
|
13
|
-
const GEMINI_FILE_URI_PREFIX = "https://generativelanguage.googleapis.com/";
|
|
14
|
-
/**
|
|
15
|
-
* Creates and returns a configured GoogleGenAI client.
|
|
16
|
-
* Reads GEMINI_API_KEY from the OS credential store.
|
|
17
|
-
*/
|
|
18
|
-
export function createGeminiClient() {
|
|
19
|
-
const apiKey = getStoredApiKey();
|
|
20
|
-
if (!apiKey) {
|
|
21
|
-
throw new Error("GEMINI_API_KEY not found. Run `pdf-analyzer --set-key` to store your key. " +
|
|
22
|
-
"Get your key from https://aistudio.google.com/apikey");
|
|
23
|
-
}
|
|
24
|
-
return new GoogleGenAI({ apiKey });
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Check if a string is a Gemini File API URI.
|
|
28
|
-
*/
|
|
29
|
-
export function isGeminiFileUri(source) {
|
|
30
|
-
return source.startsWith(GEMINI_FILE_URI_PREFIX);
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Check if a string is a URL (excluding Gemini File API URIs).
|
|
34
|
-
*/
|
|
35
|
-
export function isUrl(source) {
|
|
36
|
-
if (isGeminiFileUri(source)) {
|
|
37
|
-
return false;
|
|
38
|
-
}
|
|
39
|
-
try {
|
|
40
|
-
const url = new URL(source);
|
|
41
|
-
return url.protocol === "http:" || url.protocol === "https:";
|
|
42
|
-
}
|
|
43
|
-
catch {
|
|
44
|
-
return false;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Validates a local PDF file path.
|
|
49
|
-
* Throws descriptive errors for common issues.
|
|
50
|
-
*/
|
|
51
|
-
export function validateLocalPath(pdfPath) {
|
|
52
|
-
const trimmedPath = pdfPath.trim();
|
|
53
|
-
if (!path.isAbsolute(trimmedPath)) {
|
|
54
|
-
throw new Error(`PDF path must be absolute: ${trimmedPath}`);
|
|
55
|
-
}
|
|
56
|
-
if (!fs.existsSync(trimmedPath)) {
|
|
57
|
-
throw new Error(`PDF file not found: ${trimmedPath}`);
|
|
58
|
-
}
|
|
59
|
-
const stats = fs.statSync(trimmedPath);
|
|
60
|
-
if (stats.isDirectory()) {
|
|
61
|
-
throw new Error(`Path is a directory, not a file: ${trimmedPath}`);
|
|
62
|
-
}
|
|
63
|
-
if (!trimmedPath.toLowerCase().endsWith(".pdf")) {
|
|
64
|
-
throw new Error(`File is not a PDF: ${trimmedPath}`);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
/** Timeout for fetching PDFs from URLs (60 seconds) */
|
|
68
|
-
const FETCH_TIMEOUT_MS = 60_000;
|
|
69
|
-
/**
|
|
70
|
-
* Fetch PDF content from a URL with timeout.
|
|
71
|
-
*/
|
|
72
|
-
async function fetchPdfFromUrl(url) {
|
|
73
|
-
const controller = new AbortController();
|
|
74
|
-
const timeoutId = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
|
|
75
|
-
let response;
|
|
76
|
-
try {
|
|
77
|
-
response = await fetch(url, { signal: controller.signal });
|
|
78
|
-
}
|
|
79
|
-
catch (error) {
|
|
80
|
-
if (error instanceof Error && error.name === "AbortError") {
|
|
81
|
-
throw new Error(`Request timed out after ${FETCH_TIMEOUT_MS / 1000}s`);
|
|
82
|
-
}
|
|
83
|
-
const message = error instanceof Error ? error.message : "Unknown error";
|
|
84
|
-
throw new Error(`Failed to fetch URL: ${message}`);
|
|
85
|
-
}
|
|
86
|
-
finally {
|
|
87
|
-
clearTimeout(timeoutId);
|
|
88
|
-
}
|
|
89
|
-
if (!response.ok) {
|
|
90
|
-
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
91
|
-
}
|
|
92
|
-
const contentType = response.headers.get("content-type");
|
|
93
|
-
if (contentType &&
|
|
94
|
-
!contentType.includes("application/pdf") &&
|
|
95
|
-
!contentType.includes("octet-stream")) {
|
|
96
|
-
throw new Error(`URL does not point to a PDF file. Content-Type: ${contentType}`);
|
|
97
|
-
}
|
|
98
|
-
const arrayBuffer = await response.arrayBuffer();
|
|
99
|
-
return Buffer.from(arrayBuffer);
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Wait for a file to finish processing.
|
|
103
|
-
* Polls the file state until it's no longer PROCESSING.
|
|
104
|
-
*/
|
|
105
|
-
async function waitForFileReady(client, fileName, maxAttempts = 10) {
|
|
106
|
-
for (let i = 0; i < maxAttempts; i++) {
|
|
107
|
-
const fileInfo = await client.files.get({ name: fileName });
|
|
108
|
-
if (fileInfo.state === "FAILED") {
|
|
109
|
-
throw new Error(`File processing failed: ${fileInfo.name}`);
|
|
110
|
-
}
|
|
111
|
-
if (fileInfo.state !== "PROCESSING") {
|
|
112
|
-
return; // File is ready (ACTIVE state)
|
|
113
|
-
}
|
|
114
|
-
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
115
|
-
}
|
|
116
|
-
throw new Error("File processing timed out");
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Upload a PDF to the Gemini File API, or return the URI if already a Gemini file.
|
|
120
|
-
* Accepts local paths, web URLs, or Gemini File API URIs.
|
|
121
|
-
* Returns the Gemini URI for use in subsequent calls.
|
|
122
|
-
*/
|
|
123
|
-
async function uploadPdf(client, source) {
|
|
124
|
-
// If already a Gemini file URI, return as-is (no upload needed)
|
|
125
|
-
if (isGeminiFileUri(source)) {
|
|
126
|
-
return source;
|
|
127
|
-
}
|
|
128
|
-
// Upload the file
|
|
129
|
-
let file;
|
|
130
|
-
if (isUrl(source)) {
|
|
131
|
-
const pdfBuffer = await fetchPdfFromUrl(source);
|
|
132
|
-
file = await client.files.upload({
|
|
133
|
-
file: new Blob([pdfBuffer], { type: "application/pdf" }),
|
|
134
|
-
config: { mimeType: "application/pdf" },
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
validateLocalPath(source);
|
|
139
|
-
file = await client.files.upload({
|
|
140
|
-
file: source,
|
|
141
|
-
config: { mimeType: "application/pdf" },
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
if (!file.name || !file.uri) {
|
|
145
|
-
throw new Error("File upload failed: missing name or URI");
|
|
146
|
-
}
|
|
147
|
-
// Wait for file to be ready
|
|
148
|
-
await waitForFileReady(client, file.name);
|
|
149
|
-
return file.uri;
|
|
150
|
-
}
|
|
151
9
|
/**
|
|
152
10
|
* Build the user prompt with queries.
|
|
153
11
|
*/
|
|
@@ -155,7 +13,7 @@ function buildUserPrompt(queries) {
|
|
|
155
13
|
const queriesText = queries.map((q, i) => `${i + 1}. ${q}`).join("\n");
|
|
156
14
|
return `Please analyze the attached PDF and answer these questions:\n\n${queriesText}`;
|
|
157
15
|
}
|
|
158
|
-
/** Maximum chunk size for File API upload: 50MB
|
|
16
|
+
/** Maximum chunk size for File API upload: 50MB x 0.85 safety margin. */
|
|
159
17
|
const MAX_UPLOAD_BYTES = 50 * 1024 * 1024 * 0.85;
|
|
160
18
|
/**
|
|
161
19
|
* Ensure every query has an answer, filling gaps if the model missed some.
|
|
@@ -175,58 +33,46 @@ function ensureAllQueriesAnswered(queries, parsed) {
|
|
|
175
33
|
}
|
|
176
34
|
/**
|
|
177
35
|
* Direct single-file analysis path.
|
|
178
|
-
*
|
|
36
|
+
* Prepares the PDF via the provider and sends it to the LLM in one call.
|
|
179
37
|
*/
|
|
180
|
-
async function analyzePdfDirect(
|
|
181
|
-
const
|
|
182
|
-
const
|
|
183
|
-
|
|
184
|
-
|
|
38
|
+
async function analyzePdfDirect(provider, apiKey, modelId, source, queries) {
|
|
39
|
+
const prepared = await provider.preparePdf(source, apiKey);
|
|
40
|
+
const model = provider.createModel(apiKey, modelId);
|
|
41
|
+
const { text } = await generateText({
|
|
42
|
+
model,
|
|
43
|
+
system: SYSTEM_INSTRUCTION,
|
|
44
|
+
output: Output.object({ schema: ResponseSchema }),
|
|
45
|
+
providerOptions: provider.providerOptions,
|
|
46
|
+
messages: [
|
|
185
47
|
{
|
|
186
48
|
role: "user",
|
|
187
|
-
|
|
188
|
-
{ fileData: { fileUri, mimeType: "application/pdf" } },
|
|
189
|
-
{ text: buildUserPrompt(queries) },
|
|
190
|
-
],
|
|
49
|
+
content: [...prepared.fileParts, { type: "text", text: buildUserPrompt(queries) }],
|
|
191
50
|
},
|
|
192
51
|
],
|
|
193
|
-
config: {
|
|
194
|
-
systemInstruction: SYSTEM_INSTRUCTION,
|
|
195
|
-
responseMimeType: "application/json",
|
|
196
|
-
responseSchema: GeminiResponseSchema,
|
|
197
|
-
},
|
|
198
52
|
});
|
|
199
|
-
const responseText =
|
|
53
|
+
const responseText = text ?? "{}";
|
|
200
54
|
const parsed = JSON.parse(responseText);
|
|
55
|
+
const pdfSourceValue = source.kind === "cachedUri"
|
|
56
|
+
? source.uri
|
|
57
|
+
: source.kind === "path"
|
|
58
|
+
? source.path
|
|
59
|
+
: source.kind === "url"
|
|
60
|
+
? source.url
|
|
61
|
+
: "bytes";
|
|
201
62
|
return {
|
|
202
|
-
|
|
203
|
-
|
|
63
|
+
model: modelId,
|
|
64
|
+
pdf_source: pdfSourceValue,
|
|
65
|
+
cached_uris: prepared.cachedUri ? [prepared.cachedUri] : [],
|
|
204
66
|
responses: ensureAllQueriesAnswered(queries, parsed.responses),
|
|
205
67
|
};
|
|
206
68
|
}
|
|
207
|
-
/**
|
|
208
|
-
* Upload raw PDF bytes to the Gemini File API.
|
|
209
|
-
* Returns the Gemini URI for use in Gemini calls.
|
|
210
|
-
*/
|
|
211
|
-
async function uploadChunkBytes(client, chunkBytes) {
|
|
212
|
-
const file = await client.files.upload({
|
|
213
|
-
file: new Blob([chunkBytes], { type: "application/pdf" }),
|
|
214
|
-
config: { mimeType: "application/pdf" },
|
|
215
|
-
});
|
|
216
|
-
if (!file.name || !file.uri) {
|
|
217
|
-
throw new Error("Chunk upload failed: missing name or URI");
|
|
218
|
-
}
|
|
219
|
-
await waitForFileReady(client, file.name);
|
|
220
|
-
return file.uri;
|
|
221
|
-
}
|
|
222
69
|
/**
|
|
223
70
|
* Build system instruction for a chunk at a given position.
|
|
224
|
-
* When `chunk` metadata is provided, page range info is included in the position line.
|
|
225
71
|
*/
|
|
226
72
|
function buildChunkedSystemInstruction(chunkIndex, totalChunks, previousFindings, chunk) {
|
|
227
73
|
let position = `Processing chunk ${chunkIndex + 1} of ${totalChunks}`;
|
|
228
74
|
if (chunk) {
|
|
229
|
-
const pageRange = `pages ${chunk.startPage + 1}
|
|
75
|
+
const pageRange = `pages ${chunk.startPage + 1}\u2013${chunk.startPage + chunk.pageCount}`;
|
|
230
76
|
position += ` (${pageRange} of ${chunk.totalPages} total)`;
|
|
231
77
|
}
|
|
232
78
|
position += ".";
|
|
@@ -241,7 +87,7 @@ In addition to answering the queries, produce a "findings_summary" field that tr
|
|
|
241
87
|
- What remains unanswered`;
|
|
242
88
|
if (chunkIndex === 0) {
|
|
243
89
|
return `${base}
|
|
244
|
-
This is the first chunk. Some answers may be incomplete
|
|
90
|
+
This is the first chunk. Some answers may be incomplete \u2014 that's expected.${findingsInstruction}`;
|
|
245
91
|
}
|
|
246
92
|
const previousContext = `
|
|
247
93
|
Here are the findings from the previous chunks:
|
|
@@ -257,117 +103,98 @@ Provide final, comprehensive answers incorporating all findings across the entir
|
|
|
257
103
|
}
|
|
258
104
|
return `${base}${previousContext}${findingsInstruction}`;
|
|
259
105
|
}
|
|
260
|
-
/**
|
|
261
|
-
* Check if an error is a Gemini token limit error (input too large).
|
|
262
|
-
*/
|
|
263
|
-
function isTokenLimitError(error) {
|
|
264
|
-
if (!(error instanceof ApiError))
|
|
265
|
-
return false;
|
|
266
|
-
if (error.status !== 400)
|
|
267
|
-
return false;
|
|
268
|
-
return error.message.includes("input token count exceeds");
|
|
269
|
-
}
|
|
270
106
|
/**
|
|
271
107
|
* Process a work queue of PdfChunks, splitting on token limit errors.
|
|
272
|
-
*
|
|
273
|
-
* Algorithm:
|
|
274
|
-
* 1. Shift a chunk from the queue
|
|
275
|
-
* 2. Upload it and call Gemini
|
|
276
|
-
* 3. On success: accumulate findings, collect cached_uri
|
|
277
|
-
* 4. On token limit error: split the chunk in half, unshift both back
|
|
278
|
-
* 5. Repeat until queue is empty
|
|
279
108
|
*/
|
|
280
|
-
async function processChunkQueue(
|
|
109
|
+
async function processChunkQueue(provider, apiKey, modelId, queue, queries, pdfSource) {
|
|
281
110
|
let previousFindings = null;
|
|
282
|
-
const
|
|
111
|
+
const cachedUris = [];
|
|
283
112
|
let processedCount = 0;
|
|
284
|
-
// We don't know total chunks upfront (splitting changes it),
|
|
285
|
-
// so we track completed chunks and estimate total as completed + remaining.
|
|
286
113
|
while (queue.length > 0) {
|
|
287
114
|
const chunk = queue.shift();
|
|
288
115
|
const totalChunks = processedCount + 1 + queue.length;
|
|
289
|
-
// Pre-split chunks that exceed
|
|
116
|
+
// Pre-split chunks that exceed upload limit
|
|
290
117
|
if (chunk.bytes.byteLength > MAX_UPLOAD_BYTES) {
|
|
291
118
|
const [firstHalf, secondHalf] = await splitPdfInHalf(chunk);
|
|
292
119
|
queue.unshift(firstHalf, secondHalf);
|
|
293
120
|
continue;
|
|
294
121
|
}
|
|
295
|
-
const
|
|
122
|
+
const prepared = await provider.preparePdf({ kind: "bytes", bytes: chunk.bytes }, apiKey);
|
|
296
123
|
const systemInstruction = buildChunkedSystemInstruction(processedCount, totalChunks, previousFindings, chunk);
|
|
297
124
|
try {
|
|
298
|
-
const
|
|
299
|
-
|
|
300
|
-
|
|
125
|
+
const model = provider.createModel(apiKey, modelId);
|
|
126
|
+
const { text } = await generateText({
|
|
127
|
+
model,
|
|
128
|
+
system: systemInstruction,
|
|
129
|
+
output: Output.object({ schema: ChunkedResponseSchema }),
|
|
130
|
+
providerOptions: provider.providerOptions,
|
|
131
|
+
messages: [
|
|
301
132
|
{
|
|
302
133
|
role: "user",
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
{ text: buildUserPrompt(queries) },
|
|
134
|
+
content: [
|
|
135
|
+
...prepared.fileParts,
|
|
136
|
+
{ type: "text", text: buildUserPrompt(queries) },
|
|
306
137
|
],
|
|
307
138
|
},
|
|
308
139
|
],
|
|
309
|
-
config: {
|
|
310
|
-
systemInstruction,
|
|
311
|
-
responseMimeType: "application/json",
|
|
312
|
-
responseSchema: ChunkedGeminiResponseSchema,
|
|
313
|
-
},
|
|
314
140
|
});
|
|
315
|
-
const responseText =
|
|
141
|
+
const responseText = text ?? "{}";
|
|
316
142
|
const parsed = JSON.parse(responseText);
|
|
317
143
|
previousFindings = parsed.findings_summary;
|
|
318
|
-
|
|
144
|
+
if (prepared.cachedUri) {
|
|
145
|
+
cachedUris.push(prepared.cachedUri);
|
|
146
|
+
}
|
|
319
147
|
processedCount++;
|
|
320
|
-
// On the last chunk, return the final responses
|
|
321
148
|
if (queue.length === 0) {
|
|
322
149
|
return {
|
|
150
|
+
model: modelId,
|
|
323
151
|
pdf_source: pdfSource,
|
|
324
|
-
cached_uris:
|
|
152
|
+
cached_uris: cachedUris,
|
|
325
153
|
responses: ensureAllQueriesAnswered(queries, parsed.responses),
|
|
326
154
|
};
|
|
327
155
|
}
|
|
328
156
|
}
|
|
329
157
|
catch (error) {
|
|
330
|
-
if (!isTokenLimitError(error))
|
|
158
|
+
if (!provider.isTokenLimitError(error))
|
|
331
159
|
throw error;
|
|
332
|
-
// Token limit hit
|
|
160
|
+
// Token limit hit, split this chunk and retry
|
|
333
161
|
const [firstHalf, secondHalf] = await splitPdfInHalf(chunk);
|
|
334
162
|
queue.unshift(firstHalf, secondHalf);
|
|
335
163
|
}
|
|
336
164
|
}
|
|
337
|
-
// Unreachable — loop returns on last successful chunk
|
|
338
165
|
throw new Error("No chunks to process");
|
|
339
166
|
}
|
|
340
167
|
/**
|
|
341
168
|
* Process an array of cached Gemini file URIs with rolling findings.
|
|
342
|
-
* Used for re-analysis of a previously chunked PDF.
|
|
169
|
+
* Used for re-analysis of a previously chunked PDF (Google provider only).
|
|
343
170
|
*/
|
|
344
|
-
async function processCachedUris(
|
|
171
|
+
async function processCachedUris(provider, apiKey, modelId, fileUris, queries) {
|
|
345
172
|
let previousFindings = null;
|
|
346
173
|
for (let i = 0; i < fileUris.length; i++) {
|
|
347
|
-
const
|
|
174
|
+
const prepared = await provider.preparePdf({ kind: "cachedUri", uri: fileUris[i] }, apiKey);
|
|
348
175
|
const systemInstruction = buildChunkedSystemInstruction(i, fileUris.length, previousFindings);
|
|
349
|
-
const
|
|
350
|
-
|
|
351
|
-
|
|
176
|
+
const model = provider.createModel(apiKey, modelId);
|
|
177
|
+
const { text } = await generateText({
|
|
178
|
+
model,
|
|
179
|
+
system: systemInstruction,
|
|
180
|
+
output: Output.object({ schema: ChunkedResponseSchema }),
|
|
181
|
+
providerOptions: provider.providerOptions,
|
|
182
|
+
messages: [
|
|
352
183
|
{
|
|
353
184
|
role: "user",
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
{ text: buildUserPrompt(queries) },
|
|
185
|
+
content: [
|
|
186
|
+
...prepared.fileParts,
|
|
187
|
+
{ type: "text", text: buildUserPrompt(queries) },
|
|
357
188
|
],
|
|
358
189
|
},
|
|
359
190
|
],
|
|
360
|
-
config: {
|
|
361
|
-
systemInstruction,
|
|
362
|
-
responseMimeType: "application/json",
|
|
363
|
-
responseSchema: ChunkedGeminiResponseSchema,
|
|
364
|
-
},
|
|
365
191
|
});
|
|
366
|
-
const responseText =
|
|
192
|
+
const responseText = text ?? "{}";
|
|
367
193
|
const parsed = JSON.parse(responseText);
|
|
368
194
|
previousFindings = parsed.findings_summary;
|
|
369
195
|
if (i === fileUris.length - 1) {
|
|
370
196
|
return {
|
|
197
|
+
model: modelId,
|
|
371
198
|
pdf_source: fileUris,
|
|
372
199
|
cached_uris: fileUris,
|
|
373
200
|
responses: ensureAllQueriesAnswered(queries, parsed.responses),
|
|
@@ -377,60 +204,58 @@ async function processCachedUris(client, fileUris, queries) {
|
|
|
377
204
|
throw new Error("No URIs to process");
|
|
378
205
|
}
|
|
379
206
|
/**
|
|
380
|
-
*
|
|
207
|
+
* Classify the pdf_source input into a PdfSource discriminated union.
|
|
381
208
|
*/
|
|
382
|
-
|
|
209
|
+
function classifySource(source) {
|
|
210
|
+
if (isGeminiFileUri(source)) {
|
|
211
|
+
return { kind: "cachedUri", uri: source };
|
|
212
|
+
}
|
|
383
213
|
if (isUrl(source)) {
|
|
384
|
-
return
|
|
214
|
+
return { kind: "url", url: source };
|
|
385
215
|
}
|
|
386
|
-
|
|
387
|
-
return fs.readFileSync(source.trim());
|
|
216
|
+
return { kind: "path", path: source };
|
|
388
217
|
}
|
|
389
218
|
/**
|
|
390
|
-
* Analyzes a PDF document using
|
|
219
|
+
* Analyzes a PDF document using the configured provider.
|
|
391
220
|
*
|
|
392
221
|
* Routing:
|
|
393
|
-
* - string[]
|
|
394
|
-
* - Gemini URI string
|
|
395
|
-
* - path/URL
|
|
222
|
+
* - string[] -> cached chunk URIs, sequential processing with rolling findings (Google only)
|
|
223
|
+
* - Gemini URI string -> direct single-file analysis via cached URI (Google only)
|
|
224
|
+
* - path/URL -> prepare via provider, try full PDF first, split on token limit error
|
|
396
225
|
*/
|
|
397
|
-
export async function analyzePdf(
|
|
226
|
+
export async function analyzePdf(provider, apiKey, modelId, input) {
|
|
398
227
|
const { pdf_source, queries } = input;
|
|
399
|
-
// Array of cached Gemini file URIs
|
|
228
|
+
// Array of cached Gemini file URIs, re-analysis path (Google only)
|
|
400
229
|
if (Array.isArray(pdf_source)) {
|
|
401
|
-
|
|
230
|
+
if (provider.id !== "google") {
|
|
231
|
+
throw new Error("Cached URIs are only supported with the Google provider.");
|
|
232
|
+
}
|
|
233
|
+
return processCachedUris(provider, apiKey, modelId, pdf_source, queries);
|
|
402
234
|
}
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
235
|
+
const source = classifySource(pdf_source);
|
|
236
|
+
// Cached URI, direct path (Google only)
|
|
237
|
+
if (source.kind === "cachedUri") {
|
|
238
|
+
if (provider.id !== "google") {
|
|
239
|
+
throw new Error("Cached URIs are only supported with the Google provider.");
|
|
240
|
+
}
|
|
241
|
+
return analyzePdfDirect(provider, apiKey, modelId, source, queries);
|
|
406
242
|
}
|
|
407
|
-
// Path or URL
|
|
243
|
+
// Path or URL, try the full PDF first via the direct path
|
|
408
244
|
try {
|
|
409
|
-
return await analyzePdfDirect(
|
|
245
|
+
return await analyzePdfDirect(provider, apiKey, modelId, source, queries);
|
|
410
246
|
}
|
|
411
247
|
catch (error) {
|
|
412
|
-
if (!isTokenLimitError(error))
|
|
248
|
+
if (!provider.isTokenLimitError(error))
|
|
413
249
|
throw error;
|
|
414
250
|
}
|
|
415
|
-
// Token limit exceeded
|
|
416
|
-
|
|
251
|
+
// Token limit exceeded, read bytes, split into chunks, and process via work queue
|
|
252
|
+
// At this point source is "path" or "url" (cachedUri was handled above)
|
|
253
|
+
const pdfBytes = source.kind === "url"
|
|
254
|
+
? await fetchPdfFromUrl(source.url)
|
|
255
|
+
: readPdfBytes(source.path);
|
|
417
256
|
const initialChunk = await pdfBytesToChunk(new Uint8Array(pdfBytes));
|
|
418
|
-
return processChunkQueue(
|
|
419
|
-
}
|
|
420
|
-
/**
|
|
421
|
-
* Check if an error is an ApiError and return typed error info.
|
|
422
|
-
*/
|
|
423
|
-
export function isApiError(error) {
|
|
424
|
-
return error instanceof ApiError;
|
|
425
|
-
}
|
|
426
|
-
/**
|
|
427
|
-
* Get error message from ApiError, preserving the actual API response.
|
|
428
|
-
*/
|
|
429
|
-
export function getApiErrorMessage(error) {
|
|
430
|
-
return {
|
|
431
|
-
message: `Gemini API error (HTTP ${error.status})`,
|
|
432
|
-
details: error.message,
|
|
433
|
-
};
|
|
257
|
+
return processChunkQueue(provider, apiKey, modelId, [initialChunk], queries, pdf_source);
|
|
434
258
|
}
|
|
435
259
|
export { AnalyzePdfInputSchema } from "./types.js";
|
|
260
|
+
export { isGeminiFileUri, isUrl, validateLocalPath } from "./pdf-utils.js";
|
|
436
261
|
//# sourceMappingURL=service.js.map
|
package/dist/service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAO1C,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG/D,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEvF,MAAM,kBAAkB,GAAG;;;4DAGiC,CAAC;AAE7D;;GAEG;AACH,SAAS,eAAe,CAAC,OAAiB;IACxC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvE,OAAO,kEAAkE,WAAW,EAAE,CAAC;AACzF,CAAC;AAED,yEAAyE;AACzE,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjD;;GAEG;AACH,SAAS,wBAAwB,CAAC,OAAiB,EAAE,MAAuB;IAC1E,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACpE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,cAAc,CAAC;QACxB,CAAC;QACD,OAAO;YACL,KAAK;YACL,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,iCAAiC;SACpE,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,gBAAgB,CAC7B,QAAwB,EACxB,MAAc,EACd,OAAe,EACf,MAAiB,EACjB,OAAiB;IAEjB,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE3D,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,CAAC;QAClC,KAAK;QACL,MAAM,EAAE,kBAAkB;QAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QACjD,eAAe,EAAE,QAAQ,CAAC,eAAe;QACzC,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;aAC5F;SACF;KACF,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,IAAI,IAAI,IAAI,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAmC,CAAC;IAE1E,MAAM,cAAc,GAClB,MAAM,CAAC,IAAI,KAAK,WAAW;QACzB,CAAC,CAAC,MAAM,CAAC,GAAG;QACZ,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM;YACtB,CAAC,CAAC,MAAM,CAAC,IAAI;YACb,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK;gBACrB,CAAC,CAAC,MAAM,CAAC,GAAG;gBACZ,CAAC,CAAC,OAAO,CAAC;IAElB,OAAO;QACL,KAAK,EAAE,OAAO;QACd,UAAU,EAAE,cAAc;QAC1B,WAAW,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;QAC3D,SAAS,EAAE,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC;KAC/D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,6BAA6B,CACpC,UAAkB,EAClB,WAAmB,EACnB,gBAA+B,EAC/B,KAAgB;IAEhB,IAAI,QAAQ,GAAG,oBAAoB,UAAU,GAAG,CAAC,OAAO,WAAW,EAAE,CAAC;IACtE,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,SAAS,GAAG,SAAS,KAAK,CAAC,SAAS,GAAG,CAAC,SAAS,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAC3F,QAAQ,IAAI,KAAK,SAAS,OAAO,KAAK,CAAC,UAAU,SAAS,CAAC;IAC7D,CAAC;IACD,QAAQ,IAAI,GAAG,CAAC;IAEhB,MAAM,IAAI,GAAG,wFAAwF,WAAW;EAChH,QAAQ;;mEAEyD,CAAC;IAElE,MAAM,mBAAmB,GAAG;;;;0BAIJ,CAAC;IAEzB,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,GAAG,IAAI;iFAC+D,mBAAmB,EAAE,CAAC;IACrG,CAAC;IAED,MAAM,eAAe,GAAG;;;EAGxB,gBAAgB;;;iGAG+E,CAAC;IAEhG,IAAI,UAAU,KAAK,WAAW,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,GAAG,IAAI;0BACQ,eAAe;6FACoD,mBAAmB,EAAE,CAAC;IACjH,CAAC;IAED,OAAO,GAAG,IAAI,GAAG,eAAe,GAAG,mBAAmB,EAAE,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAC9B,QAAwB,EACxB,MAAc,EACd,OAAe,EACf,KAAiB,EACjB,OAAiB,EACjB,SAA4B;IAE5B,IAAI,gBAAgB,GAAkB,IAAI,CAAC;IAC3C,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;QAC7B,MAAM,WAAW,GAAG,cAAc,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QAEtD,4CAA4C;QAC5C,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,gBAAgB,EAAE,CAAC;YAC9C,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;YAC5D,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YACrC,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;QAE1F,MAAM,iBAAiB,GAAG,6BAA6B,CACrD,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,KAAK,CACN,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACpD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,CAAC;gBAClC,KAAK;gBACL,MAAM,EAAE,iBAAiB;gBACzB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;gBACxD,eAAe,EAAE,QAAQ,CAAC,eAAe;gBACzC,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE;4BACP,GAAG,QAAQ,CAAC,SAAS;4BACrB,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE;yBAC1D;qBACF;iBACF;aACF,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,IAAI,IAAI,IAAI,CAAC;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAyB,CAAC;YAChE,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;YAC3C,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACvB,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACtC,CAAC;YACD,cAAc,EAAE,CAAC;YAEjB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO;oBACL,KAAK,EAAE,OAAO;oBACd,UAAU,EAAE,SAAS;oBACrB,WAAW,EAAE,UAAU;oBACvB,SAAS,EAAE,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC;iBAC/D,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC;gBAAE,MAAM,KAAK,CAAC;YAEpD,8CAA8C;YAC9C,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;YAC5D,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,iBAAiB,CAC9B,QAAwB,EACxB,MAAc,EACd,OAAe,EACf,QAAkB,EAClB,OAAiB;IAEjB,IAAI,gBAAgB,GAAkB,IAAI,CAAC;IAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC5F,MAAM,iBAAiB,GAAG,6BAA6B,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAE9F,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,CAAC;YAClC,KAAK;YACL,MAAM,EAAE,iBAAiB;YACzB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;YACxD,eAAe,EAAE,QAAQ,CAAC,eAAe;YACzC,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,GAAG,QAAQ,CAAC,SAAS;wBACrB,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE;qBAC1D;iBACF;aACF;SACF,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,IAAI,IAAI,IAAI,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAyB,CAAC;QAChE,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAE3C,IAAI,CAAC,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO;gBACL,KAAK,EAAE,OAAO;gBACd,UAAU,EAAE,QAAQ;gBACpB,WAAW,EAAE,QAAQ;gBACrB,SAAS,EAAE,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC;aAC/D,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,MAAc;IACpC,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IAC5C,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAClB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IACtC,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACxC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,QAAwB,EACxB,MAAc,EACd,OAAe,EACf,KAAsB;IAEtB,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAEtC,mEAAmE;IACnE,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,IAAI,QAAQ,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAE1C,wCAAwC;IACxC,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAChC,IAAI,QAAQ,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC;IAED,0DAA0D;IAC1D,IAAI,CAAC;QACH,OAAO,MAAM,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC;YAAE,MAAM,KAAK,CAAC;IACtD,CAAC;IAED,kFAAkF;IAClF,wEAAwE;IACxE,MAAM,QAAQ,GACZ,MAAM,CAAC,IAAI,KAAK,KAAK;QACnB,CAAC,CAAC,MAAM,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC;QACnC,CAAC,CAAC,YAAY,CAAE,MAAyC,CAAC,IAAI,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrE,OAAO,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAC3F,CAAC;AAID,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { type Schema } from "@google/genai";
|
|
3
2
|
/** Schema for the analyze_pdf tool input */
|
|
4
3
|
export declare const AnalyzePdfInputSchema: z.ZodObject<{
|
|
5
4
|
pdf_source: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
|
|
@@ -14,25 +13,34 @@ export interface QueryResponse {
|
|
|
14
13
|
}
|
|
15
14
|
/** Response from the analyze_pdf tool */
|
|
16
15
|
export interface AnalyzePdfResponse {
|
|
16
|
+
model: string;
|
|
17
17
|
pdf_source: string | string[];
|
|
18
18
|
cached_uris: string[];
|
|
19
19
|
responses: QueryResponse[];
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
22
|
+
* Zod schema for structured LLM output (single PDF).
|
|
23
|
+
* Used with AI SDK's Output.object().
|
|
24
24
|
*/
|
|
25
|
-
export declare const
|
|
25
|
+
export declare const ResponseSchema: z.ZodObject<{
|
|
26
|
+
responses: z.ZodArray<z.ZodObject<{
|
|
27
|
+
query: z.ZodString;
|
|
28
|
+
answer: z.ZodString;
|
|
29
|
+
}, z.core.$strip>>;
|
|
30
|
+
}, z.core.$strip>;
|
|
26
31
|
/**
|
|
27
|
-
*
|
|
28
|
-
* Extends the base schema with
|
|
32
|
+
* Zod schema for structured LLM output (chunked PDF).
|
|
33
|
+
* Extends the base schema with rolling findings.
|
|
29
34
|
*/
|
|
30
|
-
export declare const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
export declare const ChunkedResponseSchema: z.ZodObject<{
|
|
36
|
+
responses: z.ZodArray<z.ZodObject<{
|
|
37
|
+
query: z.ZodString;
|
|
38
|
+
answer: z.ZodString;
|
|
39
|
+
}, z.core.$strip>>;
|
|
40
|
+
findings_summary: z.ZodString;
|
|
41
|
+
}, z.core.$strip>;
|
|
42
|
+
/** Inferred type for chunked response */
|
|
43
|
+
export type ChunkedQueryResponse = z.infer<typeof ChunkedResponseSchema>;
|
|
36
44
|
/** Error response from the tool */
|
|
37
45
|
export interface ToolError {
|
|
38
46
|
error: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,4CAA4C;AAC5C,eAAO,MAAM,qBAAqB;;;iBAOhC,CAAC;AAEH,0CAA0C;AAC1C,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,kCAAkC;AAClC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,yCAAyC;AACzC,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;;iBAOzB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,qBAAqB;;;;;;iBAMhC,CAAC;AAEH,yCAAyC;AACzC,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEzE,mCAAmC;AACnC,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,uCAAuC;AACvC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB,EAAE,MAAM,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,iCAAiC;AACjC,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,gEAAgE;AAChE,MAAM,MAAM,QAAQ,GAAG,cAAc,GAAG,YAAY,GAAG,aAAa,GAAG,WAAW,GAAG,aAAa,CAAC"}
|