46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
import { create } from 'zustand';
|
|
import { api } from '../../services/api';
|
|
|
|
interface ChatRequestData {
|
|
data: string;
|
|
responseFormat?: 'text' | 'json';
|
|
model?: string;
|
|
}
|
|
|
|
type ChatStore = {
|
|
sendChatRequest: (endpoint: string, data: ChatRequestData) => Promise<any>;
|
|
};
|
|
|
|
export const useChatStore = create<ChatStore>(() => ({
|
|
sendChatRequest: async (endpoint, requestData) => {
|
|
try {
|
|
if (
|
|
!requestData.data ||
|
|
typeof requestData.data !== 'string' ||
|
|
requestData.data.trim() === ''
|
|
) {
|
|
throw new Error("Invalid input: 'data' must be a non-empty string.");
|
|
}
|
|
|
|
const formattedRequest = {
|
|
data: requestData.data,
|
|
model: requestData.model || 'gpt-4-mini',
|
|
response_format: requestData.responseFormat === 'json' ? { type: 'json_object' } : undefined
|
|
};
|
|
|
|
console.log('Sending formatted request:', formattedRequest);
|
|
const response = await api('post', endpoint, formattedRequest, undefined, 'json', 60, true);
|
|
console.log('Got API response:', response);
|
|
|
|
if (!response || !response.data) {
|
|
throw new Error('Invalid response from server');
|
|
}
|
|
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error(`Failed to send chat request to ${endpoint}:`, error);
|
|
throw error;
|
|
}
|
|
},
|
|
}));
|