@intelligentelectron/pdf-analyzer 0.1.6 → 1.0.0
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 +4 -9
- package/dist/cli/commands.d.ts +9 -1
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +96 -25
- package/dist/cli/commands.js.map +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -4
- package/dist/index.js.map +1 -1
- package/dist/keychain.d.ts +34 -0
- package/dist/keychain.d.ts.map +1 -0
- package/dist/keychain.js +208 -0
- package/dist/keychain.js.map +1 -0
- 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/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 -35
- 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 -302
- 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 +12 -4
package/dist/service.js
CHANGED
|
@@ -1,178 +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
|
-
|
|
7
|
-
* Load environment variables from .env file in current working directory.
|
|
8
|
-
* Only sets variables that are not already defined in process.env.
|
|
9
|
-
*/
|
|
10
|
-
function loadEnvFile() {
|
|
11
|
-
const envPath = path.join(process.cwd(), ".env");
|
|
12
|
-
if (!fs.existsSync(envPath))
|
|
13
|
-
return;
|
|
14
|
-
const content = fs.readFileSync(envPath, "utf-8");
|
|
15
|
-
for (const line of content.split("\n")) {
|
|
16
|
-
const trimmed = line.trim();
|
|
17
|
-
if (!trimmed || trimmed.startsWith("#"))
|
|
18
|
-
continue;
|
|
19
|
-
const eqIndex = trimmed.indexOf("=");
|
|
20
|
-
if (eqIndex === -1)
|
|
21
|
-
continue;
|
|
22
|
-
const key = trimmed.slice(0, eqIndex).trim();
|
|
23
|
-
const value = trimmed
|
|
24
|
-
.slice(eqIndex + 1)
|
|
25
|
-
.trim()
|
|
26
|
-
.replace(/^["']|["']$/g, "");
|
|
27
|
-
if (!process.env[key]) {
|
|
28
|
-
process.env[key] = value;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
const GEMINI_MODEL = "gemini-3.1-pro-preview";
|
|
4
|
+
import { isGeminiFileUri, isUrl, fetchPdfFromUrl, readPdfBytes } from "./pdf-utils.js";
|
|
33
5
|
const SYSTEM_INSTRUCTION = `You are a document analysis assistant. Analyze PDF documents and answer questions based on their content.
|
|
34
6
|
For each question, provide a clear, detailed answer based on the content of the PDF.
|
|
35
7
|
If the answer cannot be determined from the PDF, say so explicitly.
|
|
36
8
|
Always respond with accurate information from the document.`;
|
|
37
|
-
/** Gemini File API URI prefix */
|
|
38
|
-
const GEMINI_FILE_URI_PREFIX = "https://generativelanguage.googleapis.com/";
|
|
39
|
-
/**
|
|
40
|
-
* Creates and returns a configured GoogleGenAI client.
|
|
41
|
-
* Loads GEMINI_API_KEY from .env file if not already set in environment.
|
|
42
|
-
*/
|
|
43
|
-
export function createGeminiClient() {
|
|
44
|
-
loadEnvFile();
|
|
45
|
-
const apiKey = process.env.GEMINI_API_KEY;
|
|
46
|
-
if (!apiKey) {
|
|
47
|
-
throw new Error("GEMINI_API_KEY not set. Get your key from https://aistudio.google.com/apikey");
|
|
48
|
-
}
|
|
49
|
-
return new GoogleGenAI({ apiKey });
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Check if a string is a Gemini File API URI.
|
|
53
|
-
*/
|
|
54
|
-
export function isGeminiFileUri(source) {
|
|
55
|
-
return source.startsWith(GEMINI_FILE_URI_PREFIX);
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Check if a string is a URL (excluding Gemini File API URIs).
|
|
59
|
-
*/
|
|
60
|
-
export function isUrl(source) {
|
|
61
|
-
if (isGeminiFileUri(source)) {
|
|
62
|
-
return false;
|
|
63
|
-
}
|
|
64
|
-
try {
|
|
65
|
-
const url = new URL(source);
|
|
66
|
-
return url.protocol === "http:" || url.protocol === "https:";
|
|
67
|
-
}
|
|
68
|
-
catch {
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Validates a local PDF file path.
|
|
74
|
-
* Throws descriptive errors for common issues.
|
|
75
|
-
*/
|
|
76
|
-
export function validateLocalPath(pdfPath) {
|
|
77
|
-
const trimmedPath = pdfPath.trim();
|
|
78
|
-
if (!path.isAbsolute(trimmedPath)) {
|
|
79
|
-
throw new Error(`PDF path must be absolute: ${trimmedPath}`);
|
|
80
|
-
}
|
|
81
|
-
if (!fs.existsSync(trimmedPath)) {
|
|
82
|
-
throw new Error(`PDF file not found: ${trimmedPath}`);
|
|
83
|
-
}
|
|
84
|
-
const stats = fs.statSync(trimmedPath);
|
|
85
|
-
if (stats.isDirectory()) {
|
|
86
|
-
throw new Error(`Path is a directory, not a file: ${trimmedPath}`);
|
|
87
|
-
}
|
|
88
|
-
if (!trimmedPath.toLowerCase().endsWith(".pdf")) {
|
|
89
|
-
throw new Error(`File is not a PDF: ${trimmedPath}`);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
/** Timeout for fetching PDFs from URLs (60 seconds) */
|
|
93
|
-
const FETCH_TIMEOUT_MS = 60_000;
|
|
94
|
-
/**
|
|
95
|
-
* Fetch PDF content from a URL with timeout.
|
|
96
|
-
*/
|
|
97
|
-
async function fetchPdfFromUrl(url) {
|
|
98
|
-
const controller = new AbortController();
|
|
99
|
-
const timeoutId = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
|
|
100
|
-
let response;
|
|
101
|
-
try {
|
|
102
|
-
response = await fetch(url, { signal: controller.signal });
|
|
103
|
-
}
|
|
104
|
-
catch (error) {
|
|
105
|
-
if (error instanceof Error && error.name === "AbortError") {
|
|
106
|
-
throw new Error(`Request timed out after ${FETCH_TIMEOUT_MS / 1000}s`);
|
|
107
|
-
}
|
|
108
|
-
const message = error instanceof Error ? error.message : "Unknown error";
|
|
109
|
-
throw new Error(`Failed to fetch URL: ${message}`);
|
|
110
|
-
}
|
|
111
|
-
finally {
|
|
112
|
-
clearTimeout(timeoutId);
|
|
113
|
-
}
|
|
114
|
-
if (!response.ok) {
|
|
115
|
-
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
116
|
-
}
|
|
117
|
-
const contentType = response.headers.get("content-type");
|
|
118
|
-
if (contentType &&
|
|
119
|
-
!contentType.includes("application/pdf") &&
|
|
120
|
-
!contentType.includes("octet-stream")) {
|
|
121
|
-
throw new Error(`URL does not point to a PDF file. Content-Type: ${contentType}`);
|
|
122
|
-
}
|
|
123
|
-
const arrayBuffer = await response.arrayBuffer();
|
|
124
|
-
return Buffer.from(arrayBuffer);
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Wait for a file to finish processing.
|
|
128
|
-
* Polls the file state until it's no longer PROCESSING.
|
|
129
|
-
*/
|
|
130
|
-
async function waitForFileReady(client, fileName, maxAttempts = 10) {
|
|
131
|
-
for (let i = 0; i < maxAttempts; i++) {
|
|
132
|
-
const fileInfo = await client.files.get({ name: fileName });
|
|
133
|
-
if (fileInfo.state === "FAILED") {
|
|
134
|
-
throw new Error(`File processing failed: ${fileInfo.name}`);
|
|
135
|
-
}
|
|
136
|
-
if (fileInfo.state !== "PROCESSING") {
|
|
137
|
-
return; // File is ready (ACTIVE state)
|
|
138
|
-
}
|
|
139
|
-
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
140
|
-
}
|
|
141
|
-
throw new Error("File processing timed out");
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Upload a PDF to the Gemini File API, or return the URI if already a Gemini file.
|
|
145
|
-
* Accepts local paths, web URLs, or Gemini File API URIs.
|
|
146
|
-
* Returns the Gemini URI for use in subsequent calls.
|
|
147
|
-
*/
|
|
148
|
-
async function uploadPdf(client, source) {
|
|
149
|
-
// If already a Gemini file URI, return as-is (no upload needed)
|
|
150
|
-
if (isGeminiFileUri(source)) {
|
|
151
|
-
return source;
|
|
152
|
-
}
|
|
153
|
-
// Upload the file
|
|
154
|
-
let file;
|
|
155
|
-
if (isUrl(source)) {
|
|
156
|
-
const pdfBuffer = await fetchPdfFromUrl(source);
|
|
157
|
-
file = await client.files.upload({
|
|
158
|
-
file: new Blob([pdfBuffer], { type: "application/pdf" }),
|
|
159
|
-
config: { mimeType: "application/pdf" },
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
else {
|
|
163
|
-
validateLocalPath(source);
|
|
164
|
-
file = await client.files.upload({
|
|
165
|
-
file: source,
|
|
166
|
-
config: { mimeType: "application/pdf" },
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
if (!file.name || !file.uri) {
|
|
170
|
-
throw new Error("File upload failed: missing name or URI");
|
|
171
|
-
}
|
|
172
|
-
// Wait for file to be ready
|
|
173
|
-
await waitForFileReady(client, file.name);
|
|
174
|
-
return file.uri;
|
|
175
|
-
}
|
|
176
9
|
/**
|
|
177
10
|
* Build the user prompt with queries.
|
|
178
11
|
*/
|
|
@@ -180,7 +13,7 @@ function buildUserPrompt(queries) {
|
|
|
180
13
|
const queriesText = queries.map((q, i) => `${i + 1}. ${q}`).join("\n");
|
|
181
14
|
return `Please analyze the attached PDF and answer these questions:\n\n${queriesText}`;
|
|
182
15
|
}
|
|
183
|
-
/** Maximum chunk size for File API upload: 50MB
|
|
16
|
+
/** Maximum chunk size for File API upload: 50MB x 0.85 safety margin. */
|
|
184
17
|
const MAX_UPLOAD_BYTES = 50 * 1024 * 1024 * 0.85;
|
|
185
18
|
/**
|
|
186
19
|
* Ensure every query has an answer, filling gaps if the model missed some.
|
|
@@ -200,59 +33,46 @@ function ensureAllQueriesAnswered(queries, parsed) {
|
|
|
200
33
|
}
|
|
201
34
|
/**
|
|
202
35
|
* Direct single-file analysis path.
|
|
203
|
-
*
|
|
36
|
+
* Prepares the PDF via the provider and sends it to the LLM in one call.
|
|
204
37
|
*/
|
|
205
|
-
async function analyzePdfDirect(
|
|
206
|
-
const
|
|
207
|
-
const
|
|
208
|
-
|
|
209
|
-
|
|
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: [
|
|
210
47
|
{
|
|
211
48
|
role: "user",
|
|
212
|
-
|
|
213
|
-
{ fileData: { fileUri, mimeType: "application/pdf" } },
|
|
214
|
-
{ text: buildUserPrompt(queries) },
|
|
215
|
-
],
|
|
49
|
+
content: [...prepared.fileParts, { type: "text", text: buildUserPrompt(queries) }],
|
|
216
50
|
},
|
|
217
51
|
],
|
|
218
|
-
config: {
|
|
219
|
-
systemInstruction: SYSTEM_INSTRUCTION,
|
|
220
|
-
responseMimeType: "application/json",
|
|
221
|
-
responseSchema: GeminiResponseSchema,
|
|
222
|
-
thinkingConfig: { thinkingLevel: ThinkingLevel.HIGH },
|
|
223
|
-
},
|
|
224
52
|
});
|
|
225
|
-
const responseText =
|
|
53
|
+
const responseText = text ?? "{}";
|
|
226
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";
|
|
227
62
|
return {
|
|
228
|
-
|
|
229
|
-
|
|
63
|
+
model: modelId,
|
|
64
|
+
pdf_source: pdfSourceValue,
|
|
65
|
+
cached_uris: prepared.cachedUri ? [prepared.cachedUri] : [],
|
|
230
66
|
responses: ensureAllQueriesAnswered(queries, parsed.responses),
|
|
231
67
|
};
|
|
232
68
|
}
|
|
233
|
-
/**
|
|
234
|
-
* Upload raw PDF bytes to the Gemini File API.
|
|
235
|
-
* Returns the Gemini URI for use in Gemini calls.
|
|
236
|
-
*/
|
|
237
|
-
async function uploadChunkBytes(client, chunkBytes) {
|
|
238
|
-
const file = await client.files.upload({
|
|
239
|
-
file: new Blob([chunkBytes], { type: "application/pdf" }),
|
|
240
|
-
config: { mimeType: "application/pdf" },
|
|
241
|
-
});
|
|
242
|
-
if (!file.name || !file.uri) {
|
|
243
|
-
throw new Error("Chunk upload failed: missing name or URI");
|
|
244
|
-
}
|
|
245
|
-
await waitForFileReady(client, file.name);
|
|
246
|
-
return file.uri;
|
|
247
|
-
}
|
|
248
69
|
/**
|
|
249
70
|
* Build system instruction for a chunk at a given position.
|
|
250
|
-
* When `chunk` metadata is provided, page range info is included in the position line.
|
|
251
71
|
*/
|
|
252
72
|
function buildChunkedSystemInstruction(chunkIndex, totalChunks, previousFindings, chunk) {
|
|
253
73
|
let position = `Processing chunk ${chunkIndex + 1} of ${totalChunks}`;
|
|
254
74
|
if (chunk) {
|
|
255
|
-
const pageRange = `pages ${chunk.startPage + 1}
|
|
75
|
+
const pageRange = `pages ${chunk.startPage + 1}\u2013${chunk.startPage + chunk.pageCount}`;
|
|
256
76
|
position += ` (${pageRange} of ${chunk.totalPages} total)`;
|
|
257
77
|
}
|
|
258
78
|
position += ".";
|
|
@@ -267,7 +87,7 @@ In addition to answering the queries, produce a "findings_summary" field that tr
|
|
|
267
87
|
- What remains unanswered`;
|
|
268
88
|
if (chunkIndex === 0) {
|
|
269
89
|
return `${base}
|
|
270
|
-
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}`;
|
|
271
91
|
}
|
|
272
92
|
const previousContext = `
|
|
273
93
|
Here are the findings from the previous chunks:
|
|
@@ -283,119 +103,98 @@ Provide final, comprehensive answers incorporating all findings across the entir
|
|
|
283
103
|
}
|
|
284
104
|
return `${base}${previousContext}${findingsInstruction}`;
|
|
285
105
|
}
|
|
286
|
-
/**
|
|
287
|
-
* Check if an error is a Gemini token limit error (input too large).
|
|
288
|
-
*/
|
|
289
|
-
function isTokenLimitError(error) {
|
|
290
|
-
if (!(error instanceof ApiError))
|
|
291
|
-
return false;
|
|
292
|
-
if (error.status !== 400)
|
|
293
|
-
return false;
|
|
294
|
-
return error.message.includes("input token count exceeds");
|
|
295
|
-
}
|
|
296
106
|
/**
|
|
297
107
|
* Process a work queue of PdfChunks, splitting on token limit errors.
|
|
298
|
-
*
|
|
299
|
-
* Algorithm:
|
|
300
|
-
* 1. Shift a chunk from the queue
|
|
301
|
-
* 2. Upload it and call Gemini
|
|
302
|
-
* 3. On success: accumulate findings, collect cached_uri
|
|
303
|
-
* 4. On token limit error: split the chunk in half, unshift both back
|
|
304
|
-
* 5. Repeat until queue is empty
|
|
305
108
|
*/
|
|
306
|
-
async function processChunkQueue(
|
|
109
|
+
async function processChunkQueue(provider, apiKey, modelId, queue, queries, pdfSource) {
|
|
307
110
|
let previousFindings = null;
|
|
308
|
-
const
|
|
111
|
+
const cachedUris = [];
|
|
309
112
|
let processedCount = 0;
|
|
310
|
-
// We don't know total chunks upfront (splitting changes it),
|
|
311
|
-
// so we track completed chunks and estimate total as completed + remaining.
|
|
312
113
|
while (queue.length > 0) {
|
|
313
114
|
const chunk = queue.shift();
|
|
314
115
|
const totalChunks = processedCount + 1 + queue.length;
|
|
315
|
-
// Pre-split chunks that exceed
|
|
116
|
+
// Pre-split chunks that exceed upload limit
|
|
316
117
|
if (chunk.bytes.byteLength > MAX_UPLOAD_BYTES) {
|
|
317
118
|
const [firstHalf, secondHalf] = await splitPdfInHalf(chunk);
|
|
318
119
|
queue.unshift(firstHalf, secondHalf);
|
|
319
120
|
continue;
|
|
320
121
|
}
|
|
321
|
-
const
|
|
122
|
+
const prepared = await provider.preparePdf({ kind: "bytes", bytes: chunk.bytes }, apiKey);
|
|
322
123
|
const systemInstruction = buildChunkedSystemInstruction(processedCount, totalChunks, previousFindings, chunk);
|
|
323
124
|
try {
|
|
324
|
-
const
|
|
325
|
-
|
|
326
|
-
|
|
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: [
|
|
327
132
|
{
|
|
328
133
|
role: "user",
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
{ text: buildUserPrompt(queries) },
|
|
134
|
+
content: [
|
|
135
|
+
...prepared.fileParts,
|
|
136
|
+
{ type: "text", text: buildUserPrompt(queries) },
|
|
332
137
|
],
|
|
333
138
|
},
|
|
334
139
|
],
|
|
335
|
-
config: {
|
|
336
|
-
systemInstruction,
|
|
337
|
-
responseMimeType: "application/json",
|
|
338
|
-
responseSchema: ChunkedGeminiResponseSchema,
|
|
339
|
-
thinkingConfig: { thinkingLevel: ThinkingLevel.HIGH },
|
|
340
|
-
},
|
|
341
140
|
});
|
|
342
|
-
const responseText =
|
|
141
|
+
const responseText = text ?? "{}";
|
|
343
142
|
const parsed = JSON.parse(responseText);
|
|
344
143
|
previousFindings = parsed.findings_summary;
|
|
345
|
-
|
|
144
|
+
if (prepared.cachedUri) {
|
|
145
|
+
cachedUris.push(prepared.cachedUri);
|
|
146
|
+
}
|
|
346
147
|
processedCount++;
|
|
347
|
-
// On the last chunk, return the final responses
|
|
348
148
|
if (queue.length === 0) {
|
|
349
149
|
return {
|
|
150
|
+
model: modelId,
|
|
350
151
|
pdf_source: pdfSource,
|
|
351
|
-
cached_uris:
|
|
152
|
+
cached_uris: cachedUris,
|
|
352
153
|
responses: ensureAllQueriesAnswered(queries, parsed.responses),
|
|
353
154
|
};
|
|
354
155
|
}
|
|
355
156
|
}
|
|
356
157
|
catch (error) {
|
|
357
|
-
if (!isTokenLimitError(error))
|
|
158
|
+
if (!provider.isTokenLimitError(error))
|
|
358
159
|
throw error;
|
|
359
|
-
// Token limit hit
|
|
160
|
+
// Token limit hit, split this chunk and retry
|
|
360
161
|
const [firstHalf, secondHalf] = await splitPdfInHalf(chunk);
|
|
361
162
|
queue.unshift(firstHalf, secondHalf);
|
|
362
163
|
}
|
|
363
164
|
}
|
|
364
|
-
// Unreachable — loop returns on last successful chunk
|
|
365
165
|
throw new Error("No chunks to process");
|
|
366
166
|
}
|
|
367
167
|
/**
|
|
368
168
|
* Process an array of cached Gemini file URIs with rolling findings.
|
|
369
|
-
* Used for re-analysis of a previously chunked PDF.
|
|
169
|
+
* Used for re-analysis of a previously chunked PDF (Google provider only).
|
|
370
170
|
*/
|
|
371
|
-
async function processCachedUris(
|
|
171
|
+
async function processCachedUris(provider, apiKey, modelId, fileUris, queries) {
|
|
372
172
|
let previousFindings = null;
|
|
373
173
|
for (let i = 0; i < fileUris.length; i++) {
|
|
374
|
-
const
|
|
174
|
+
const prepared = await provider.preparePdf({ kind: "cachedUri", uri: fileUris[i] }, apiKey);
|
|
375
175
|
const systemInstruction = buildChunkedSystemInstruction(i, fileUris.length, previousFindings);
|
|
376
|
-
const
|
|
377
|
-
|
|
378
|
-
|
|
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: [
|
|
379
183
|
{
|
|
380
184
|
role: "user",
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
{ text: buildUserPrompt(queries) },
|
|
185
|
+
content: [
|
|
186
|
+
...prepared.fileParts,
|
|
187
|
+
{ type: "text", text: buildUserPrompt(queries) },
|
|
384
188
|
],
|
|
385
189
|
},
|
|
386
190
|
],
|
|
387
|
-
config: {
|
|
388
|
-
systemInstruction,
|
|
389
|
-
responseMimeType: "application/json",
|
|
390
|
-
responseSchema: ChunkedGeminiResponseSchema,
|
|
391
|
-
thinkingConfig: { thinkingLevel: ThinkingLevel.HIGH },
|
|
392
|
-
},
|
|
393
191
|
});
|
|
394
|
-
const responseText =
|
|
192
|
+
const responseText = text ?? "{}";
|
|
395
193
|
const parsed = JSON.parse(responseText);
|
|
396
194
|
previousFindings = parsed.findings_summary;
|
|
397
195
|
if (i === fileUris.length - 1) {
|
|
398
196
|
return {
|
|
197
|
+
model: modelId,
|
|
399
198
|
pdf_source: fileUris,
|
|
400
199
|
cached_uris: fileUris,
|
|
401
200
|
responses: ensureAllQueriesAnswered(queries, parsed.responses),
|
|
@@ -405,60 +204,58 @@ async function processCachedUris(client, fileUris, queries) {
|
|
|
405
204
|
throw new Error("No URIs to process");
|
|
406
205
|
}
|
|
407
206
|
/**
|
|
408
|
-
*
|
|
207
|
+
* Classify the pdf_source input into a PdfSource discriminated union.
|
|
409
208
|
*/
|
|
410
|
-
|
|
209
|
+
function classifySource(source) {
|
|
210
|
+
if (isGeminiFileUri(source)) {
|
|
211
|
+
return { kind: "cachedUri", uri: source };
|
|
212
|
+
}
|
|
411
213
|
if (isUrl(source)) {
|
|
412
|
-
return
|
|
214
|
+
return { kind: "url", url: source };
|
|
413
215
|
}
|
|
414
|
-
|
|
415
|
-
return fs.readFileSync(source.trim());
|
|
216
|
+
return { kind: "path", path: source };
|
|
416
217
|
}
|
|
417
218
|
/**
|
|
418
|
-
* Analyzes a PDF document using
|
|
219
|
+
* Analyzes a PDF document using the configured provider.
|
|
419
220
|
*
|
|
420
221
|
* Routing:
|
|
421
|
-
* - string[]
|
|
422
|
-
* - Gemini URI string
|
|
423
|
-
* - 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
|
|
424
225
|
*/
|
|
425
|
-
export async function analyzePdf(
|
|
226
|
+
export async function analyzePdf(provider, apiKey, modelId, input) {
|
|
426
227
|
const { pdf_source, queries } = input;
|
|
427
|
-
// Array of cached Gemini file URIs
|
|
228
|
+
// Array of cached Gemini file URIs, re-analysis path (Google only)
|
|
428
229
|
if (Array.isArray(pdf_source)) {
|
|
429
|
-
|
|
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);
|
|
430
234
|
}
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
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);
|
|
434
242
|
}
|
|
435
|
-
// Path or URL
|
|
243
|
+
// Path or URL, try the full PDF first via the direct path
|
|
436
244
|
try {
|
|
437
|
-
return await analyzePdfDirect(
|
|
245
|
+
return await analyzePdfDirect(provider, apiKey, modelId, source, queries);
|
|
438
246
|
}
|
|
439
247
|
catch (error) {
|
|
440
|
-
if (!isTokenLimitError(error))
|
|
248
|
+
if (!provider.isTokenLimitError(error))
|
|
441
249
|
throw error;
|
|
442
250
|
}
|
|
443
|
-
// Token limit exceeded
|
|
444
|
-
|
|
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);
|
|
445
256
|
const initialChunk = await pdfBytesToChunk(new Uint8Array(pdfBytes));
|
|
446
|
-
return processChunkQueue(
|
|
447
|
-
}
|
|
448
|
-
/**
|
|
449
|
-
* Check if an error is an ApiError and return typed error info.
|
|
450
|
-
*/
|
|
451
|
-
export function isApiError(error) {
|
|
452
|
-
return error instanceof ApiError;
|
|
453
|
-
}
|
|
454
|
-
/**
|
|
455
|
-
* Get error message from ApiError, preserving the actual API response.
|
|
456
|
-
*/
|
|
457
|
-
export function getApiErrorMessage(error) {
|
|
458
|
-
return {
|
|
459
|
-
message: `Gemini API error (HTTP ${error.status})`,
|
|
460
|
-
details: error.message,
|
|
461
|
-
};
|
|
257
|
+
return processChunkQueue(provider, apiKey, modelId, [initialChunk], queries, pdf_source);
|
|
462
258
|
}
|
|
463
259
|
export { AnalyzePdfInputSchema } from "./types.js";
|
|
260
|
+
export { isGeminiFileUri, isUrl, validateLocalPath } from "./pdf-utils.js";
|
|
464
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":"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"}
|
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"}
|