import { IGenAI } from '../adapter/IGenAI.js';
import { Url } from '../domain/Url.js';
import { ModelName } from '../domain/ModelName.js';
import { Page } from '../domain/Page.js';
import { ExtractContentResult } from '../domain/ExtractContentResult.js';
export class ExtractContentUseCase {
constructor(private readonly genAI: IGenAI) {}
async execute(
urls: Url[],
query?: string,
model?: ModelName,
maxCharsPerPage: number = 8000
): Promise<ExtractContentResult> {
const modelName = model || ModelName.create();
const response = await this.genAI.generateUrlContextJson({
urls: urls.map(url => url.toString()),
query,
model: modelName.toString(),
maxCharsPerPage
});
const pages = response.pages.map(pageData =>
Page.create(
Url.create(pageData.url),
pageData.title,
pageData.text,
pageData.images,
maxCharsPerPage
)
);
return ExtractContentResult.create(
pages,
response.answer,
response.url_context_metadata
);
}
}