import { getParsedFile, LlamaIndexClient } from 'src/common/llamaindex.wrapper';
// Custom tagged error for PDF parsing
export class DocumentParserError extends Data.TaggedError(
'DocumentParserError',
)<{
readonly message: string;
readonly cause?: unknown;
}> {}
export class DocumentParser extends Effect.Tag('DocumentParser')<
DocumentParser,
{
readonly getParsedFile: (payload: {
file: any;
filename: string;
}) => Effect.Effect<string, DocumentParserError>;
}
>() {
static LlamaIndex = Layer.effect(
this,
Effect.succeed({
getParsedFile: (payload: { file: Blob; filename: string }) =>
getParsedFile(payload).pipe(
Effect.provide(LlamaIndexClient.Default),
Effect.mapError(
(error) =>
new DocumentParserError({
message:
error instanceof Error
? error.message
: 'Unknown error occurred during document parsing',
cause: error,
}),
),
),
}),
);
static Mock = Layer.effect(
this,
Effect.succeed({
getParsedFile: (payload: { file: any; filename: string }) =>
Effect.succeed(`Mock parsed content for ${payload.filename}`),
}),
);
}
import { getParsedFile, LlamaIndexClient } from 'src/common/llamaindex.wrapper';
// Custom tagged error for PDF parsing
export class DocumentParserError extends Data.TaggedError(
'DocumentParserError',
)<{
readonly message: string;
readonly cause?: unknown;
}> {}
export class DocumentParser extends Effect.Tag('DocumentParser')<
DocumentParser,
{
readonly getParsedFile: (payload: {
file: any;
filename: string;
}) => Effect.Effect<string, DocumentParserError>;
}
>() {
static LlamaIndex = Layer.effect(
this,
Effect.succeed({
getParsedFile: (payload: { file: Blob; filename: string }) =>
getParsedFile(payload).pipe(
Effect.provide(LlamaIndexClient.Default),
Effect.mapError(
(error) =>
new DocumentParserError({
message:
error instanceof Error
? error.message
: 'Unknown error occurred during document parsing',
cause: error,
}),
),
),
}),
);
static Mock = Layer.effect(
this,
Effect.succeed({
getParsedFile: (payload: { file: any; filename: string }) =>
Effect.succeed(`Mock parsed content for ${payload.filename}`),
}),
);
}