| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- import { useCallback } from 'react';
- import {
- SseMessageSchema,
- SseDetectedDiffSchema,
- SseFinalizedSchema,
- type SseMessage,
- type SseDetectedDiff,
- type SseFinalized,
- } from '~/features/openai/interfaces/editor-assistant/sse-schemas';
- import { handleIfSuccessfullyParsed } from '~/features/openai/utils/handle-if-successfully-parsed';
- interface PostMessage {
- (threadId: string, userMessage: string, markdown: string): Promise<Response>;
- }
- interface ProcessMessage {
- (data: unknown, handler: {
- onMessage: (data: SseMessage) => void;
- onDetectedDiff: (data: SseDetectedDiff) => void;
- onFinalized: (data: SseFinalized) => void;
- }): void;
- }
- export const useEditorAssistant = (): { postMessage: PostMessage, processMessage: ProcessMessage } => {
- const postMessage: PostMessage = useCallback(async(threadId, userMessage, markdown) => {
- const response = await fetch('/_api/v3/openai/edit', {
- method: 'POST',
- headers: { 'Content-Type': 'application/json' },
- body: JSON.stringify({
- threadId,
- userMessage,
- markdown,
- }),
- });
- return response;
- }, []);
- const processMessage: ProcessMessage = useCallback((data, handler) => {
- handleIfSuccessfullyParsed(data, SseMessageSchema, (data: SseMessage) => {
- handler.onMessage(data);
- });
- handleIfSuccessfullyParsed(data, SseDetectedDiffSchema, (data: SseDetectedDiff) => {
- handler.onDetectedDiff(data);
- });
- handleIfSuccessfullyParsed(data, SseFinalizedSchema, (data: SseFinalized) => {
- handler.onFinalized(data);
- });
- }, []);
- return {
- postMessage,
- processMessage,
- };
- };
|