TypeSript ನಲ್ಲಿ AI ವಿಡಿಯೋ ಜಾಬ್ ಕ್ಯೂ (Job Queue) ಅನ್ನು ನಿರ್ಮಿಸುವುದು
AI ವಿಡಿಯೋ ಜನರೇಷನ್ (generation) ಎಂಬುದು ಸಾಮಾನ್ಯ HTTP ರಿಕ್ವೆಸ್ಟ್ ಅಲ್ಲ. ಬಳಕೆದಾರರು ಒಂದು ಪ್ರಾಂಪ್ಟ್ (prompt) ಮತ್ತು ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಕಳುಹಿಸುತ್ತಾರೆ. ಅದರ ಫಲಿತಾಂಶ ಬರಲು ನಿಮಿಷಗಳ ಕಾಲ ಬೇಕಾಗುತ್ತದೆ.
ನಿಮ್ಮ ಬ್ಯಾಕೆಂಡ್ (backend) ಈ ಕೆಳಗಿನ ಹಲವಾರು ಹಂತಗಳನ್ನು ನಿರ್ವಹಿಸಬೇಕು:
- ಇನ್ಪುಟ್ ಅನ್ನು ವ್ಯಾಲಿಡೇಟ್ (validate) ಮಾಡುವುದು.
- ಜಾಬ್ ರೆಕಾರ್ಡ್ ಅನ್ನು ರಚಿಸುವುದು.
- ಪ್ರೊವೈಡರ್ಗೆ (provider) ಜಾಬ್ ಅನ್ನು ಸಬ್ಮಿಟ್ ಮಾಡುವುದು.
- ಫಲಿತಾಂಶಗಳಿಗಾಗಿ ಪೋಲ್ (poll) ಮಾಡುವುದು.
- ವೈಫಲ್ಯಗಳನ್ನು ನಿರ್ವಹಿಸುವುದು.
- ಬಳಕೆದಾರರಿಗೆ ಸ್ಟೇಟಸ್ (status) ತೋರಿಸುವುದು.
ನೀವು ಕ್ಯೂ (queue) ಮತ್ತು ಅಡಾಪ್ಟರ್ ಲೇಯರ್ (adapter layer) ಅನ್ನು ಬಳಸಬೇಕು. ಇದು ಪ್ರೊವೈಡರ್-ನಿರ್ದಿಷ್ಟ ಕೋಡ್ ನಿಮ್ಮ ಇಡೀ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಹಾಳು ಮಾಡದಂತೆ ತಡೆಯುತ್ತದೆ.
ನಿಮ್ಮ ಪ್ರಾಡಕ್ಟ್ ಕಾಂಟ್ರಾಕ್ಟ್ ಆಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸಲು ಒಂದು ಕೋರ್ ಜಾಬ್ ಟೈಪ್ ಅನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಿ.
type JobStatus = "queued" | "validating" | "running" | "delayed" | "succeeded" | "failed";
type VideoJob = {
id: string;
userId: string;
model: string;
prompt: string;
aspectRatio: "16:9" | "9:16" | "1:1";
durationSeconds: number;
status: JobStatus;
providerTaskId?: string;
outputUrl?: string;
errorCode?: VideoJobErrorCode;
};
ನಿಮ್ಮ ಪ್ರೊವೈಡರ್ಗಳಿಗಾಗಿ ಇಂಟರ್ಫೇಸ್ (interface) ಬಳಸಿ. ಇದು ನಿಮ್ಮ ವರ್ಕರ್ ಲಾಜಿಕ್ ಅನ್ನು ಸ್ವಚ್ಛವಾಗಿಡುತ್ತದೆ.
interface VideoProvider {
submit(job: VideoJob): Promise<{ providerTaskId: string }>;
poll(providerTaskId: string): Promise<
| { status: "running" }
| { status: "succeeded"; outputUrl: string }
| { status: "failed"; error: unknown }
>;
normalizeError(error: unknown): VideoJobErrorCode;
}
ನಿಮ್ಮ ವರ್ಕ್ಫ್ಲೋಗಾಗಿ (workflow) ಈ ಕೆಳಗಿನ ಬೆಸ್ಟ್ ಪ್ರ್ಯಾಕ್ಟಿಸಸ್ಗಳನ್ನು (best practices) ಅನುಸರಿಸಿ:
ಮೊದಲು ಕಡಿಮೆ ವೆಚ್ಚದ ಪರಿசோதனೆಗಳನ್ನು ಮಾಡಿ. ದುಬಾರಿ APIಗಳನ್ನು ಕರೆಯುವ ಮೊದಲು ಪ್ರಾಂಪ್ಟ್ಗಳು ಮತ್ತು ಅವಧಿಗಳನ್ನು (durations) ವ್ಯಾಲಿಡೇಟ್ ಮಾಡಿ.
ಪೋಲಿಂಗ್ ಸ್ಟ್ರಾಟಜಿ (polling strategy) ಬಳಸಿ. ಹೆಚ್ಚುತ್ತಿರುವ ವಿಳಂಬದೊಂದಿಗೆ (delays) ಒಂದು ಲೂಪ್ ಅನ್ನು ಅಳವಡಿಸಿ.
ವಿಳಂಬಗಳನ್ನು ನಿರ್ವಹಿಸಿ. ಒಂದು ಜಾಬ್ ತೆಗೆದುಕೊಳ್ಳಲು ತುಂಬಾ ಸಮಯ ತಗೆದುಕೊಂಡರೆ, ಅದನ್ನು "delayed" ಸ್ಟೇಟಸ್ಗೆ ಬದಲಾಯಿಸಿ. ವಿಳಂಬವಾದ ಜಾಬ್ಗಳನ್ನು ನಂತರ ಪರಿಶೀಲಿಸಲು ಪ್ರತ್ಯೇಕ ವರ್ಕರ್ ಬಳಸಿ.
ಎರ್ರರ್ಗಳನ್ನು ನಾರ್ಮಲೈಸ್ (Normalize) ಮಾಡಿ. ಪ್ರೊವೈಡರ್ನ ರ (raw) ಎರ್ರರ್ಗಳನ್ನು ಎಂದಿಗೂ ನಿಮ್ಮ ಬಳಕೆದಾರರಿಗೆ ತೋರಿಸಬೇಡಿ. ತಾಂತ್ರಿಕ ದೋಷಗಳನ್ನು ಮನುಷ್ಯರಿಗೆ ಅರ್ಥವಾಗುವ ಸಂದೇಶಗಳಿಗೆ ಮ್ಯಾಪ್ ಮಾಡಿ.
ಉದಾಹರಣೆಯ ಬಳಕೆದಾರ ಸಂದೇಶಗಳು:
- "queued": ನಿಮ್ಮ ವಿಡಿಯೋ ಪ್ರಾರಂಭವಾಗಲು ಕಾಯುತ್ತಿದೆ.
- "running": ನಿಮ್ಮ ವಿಡಿಯೋ ಜನರೇಟ್ ಆಗುತ್ತಿದೆ.
- "delayed": ಇದು ಎಂದಿಗಿಂತ ಹೆಚ್ಚು ಸಮಯ ತೆಗೆದುಕೊಳ್ಳುತ್ತಿದೆ.
- "moderation_rejected": ಈ ವಿನಂತಿಯನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ.
AI ವಿಡಿಯೋವನ್ನು ಒಂದು ಜಾಬ್ ಸಿಸ್ಟಮ್ ಆಗಿ ಪರಿಗಣಿಸಿ. ಸ್ಥಿರವಾದ ಕ್ಯೂ ಮತ್ತು ಸ್ಪಷ್ಟವಾದ ಎರ್ರರ್ ಟ್ಯಾಕ್ಸಾನಮಿ (error taxonomy) ನಿಮ್ಮ ಪ್ರಾಡಕ್ಟ್ ಅನ್ನು ನಿರ್ವಹಿಸಲು ಮತ್ತು ಸ್ಕೇಲ್ (scale) ಮಾಡಲು ಸುಲಭವಾಗಿಸುತ್ತದೆ.
ಮೂಲ (Source): https://dev.to/miao_cunhui_587ccddb6acc1/building-an-ai-video-job-queue-in-typescript-1349