feat: add support for Claude LLM integration across multiple modules

- Introduced `useClaude` option in `AnalysisPipelineOptions` to toggle Claude LLM usage.
- Updated `processProductChunk` and `analyzeProducts` functions to accept and handle `useClaude` parameter.
- Modified argument parsing in various scripts (`bestsellers-by-category`, `mid-range-sellers-by-category`, `top-monthly-sold-by-category`, etc.) to include `--claude` flag.
- Enhanced `analyzeProductsInternal` to differentiate between LLM providers and handle requests to Claude API.
- Added error handling for Claude API responses and ensured proper configuration for using Claude.
- Updated documentation and usage messages to reflect the new `--claude` flag.
This commit is contained in:
Victor Noguera
2026-05-21 19:57:46 -04:00
parent 0f256be2be
commit 95cebaa27c
12 changed files with 423 additions and 144 deletions

View File

@@ -42,9 +42,11 @@ function parseArgs(): {
inputFile: string;
outputFile?: string;
sellability: SellabilityFilter;
useClaude: boolean;
} {
const args = process.argv.slice(2);
const outputFile = readFlagValue(args, "--out", "--output");
const useClaude = args.includes("--claude");
const inputFile = readInputFileArg(
args,
"--out",
@@ -55,12 +57,12 @@ function parseArgs(): {
if (!inputFile) {
console.error(
"Usage: bun run src/index.ts <input.csv|xlsx> [--out results.xlsx|--output results.xlsx] [--sellability available|all]",
"Usage: bun run src/index.ts <input.csv|xlsx> [--out results.xlsx|--output results.xlsx] [--sellability available|all] [--claude]",
);
process.exit(1);
}
return { inputFile, outputFile, sellability };
return { inputFile, outputFile, sellability, useClaude };
}
function readFlagValue(args: string[], ...flags: string[]): string | undefined {
@@ -109,9 +111,10 @@ function resolveBaseOutputPath(inputFile: string, outputFile?: string): string {
}
async function main() {
const { inputFile, outputFile, sellability } = parseArgs();
const { inputFile, outputFile, sellability, useClaude } = parseArgs();
console.log(`Sellability filter: ${sellability}`);
console.log(`LLM provider: ${useClaude ? "claude" : "local"}`);
console.log("Connecting to Redis...");
await connectCache();
@@ -144,7 +147,10 @@ async function main() {
console.log(
`\n=== Input chunk ${chunkIndex + 1}/${productChunks.length} (${chunk.length} products) ===`,
);
const chunkResults = await processProductChunk(chunk, { sellability });
const chunkResults = await processProductChunk(chunk, {
sellability,
useClaude,
});
allResults.push(...chunkResults);
}