73 lines
2.6 KiB
TypeScript
73 lines
2.6 KiB
TypeScript
import type {
|
|
Conversation,
|
|
ConversationListResponse,
|
|
ConversationResponse,
|
|
MessageListResponse,
|
|
UpdateConversationRequest,
|
|
} from "../../shared/api";
|
|
|
|
import { handleResponse, handleVoidResponse } from "../utils/api";
|
|
import { createConsoleLogger } from "../utils/logger";
|
|
|
|
const logger = createConsoleLogger();
|
|
|
|
export async function createConversation(projectId: string, modelId?: string): Promise<Conversation> {
|
|
const response = await fetch(`/api/projects/${projectId}/conversations`, {
|
|
body: JSON.stringify({ modelId }),
|
|
headers: { "Content-Type": "application/json" },
|
|
method: "POST",
|
|
});
|
|
return handleResponse(response, (data) => (data as ConversationResponse).conversation);
|
|
}
|
|
|
|
export async function deleteConversation(projectId: string, conversationId: string): Promise<void> {
|
|
const response = await fetch(`/api/projects/${projectId}/conversations/${conversationId}`, { method: "DELETE" });
|
|
return handleVoidResponse(response);
|
|
}
|
|
|
|
export async function fetchConversation(projectId: string, conversationId: string): Promise<Conversation> {
|
|
try {
|
|
const response = await fetch(`/api/projects/${projectId}/conversations/${conversationId}`);
|
|
return handleResponse(response, (data) => (data as ConversationResponse).conversation);
|
|
} catch (err) {
|
|
logger.error("获取会话失败", {
|
|
conversationId,
|
|
error: err instanceof Error ? err.message : String(err),
|
|
projectId,
|
|
});
|
|
throw err;
|
|
}
|
|
}
|
|
|
|
export async function fetchConversations(projectId: string): Promise<ConversationListResponse> {
|
|
const response = await fetch(`/api/projects/${projectId}/conversations?pageSize=100`);
|
|
return handleResponse(response, (data) => data as ConversationListResponse);
|
|
}
|
|
|
|
export async function fetchMessages(projectId: string, conversationId: string): Promise<MessageListResponse> {
|
|
const response = await fetch(`/api/projects/${projectId}/conversations/${conversationId}/messages?pageSize=200`);
|
|
return handleResponse(response, (data) => data as MessageListResponse);
|
|
}
|
|
|
|
export async function updateConversation(
|
|
projectId: string,
|
|
conversationId: string,
|
|
data: UpdateConversationRequest,
|
|
): Promise<Conversation> {
|
|
try {
|
|
const response = await fetch(`/api/projects/${projectId}/conversations/${conversationId}`, {
|
|
body: JSON.stringify(data),
|
|
headers: { "Content-Type": "application/json" },
|
|
method: "PATCH",
|
|
});
|
|
return handleResponse(response, (data) => (data as ConversationResponse).conversation);
|
|
} catch (err) {
|
|
logger.error("更新会话失败", {
|
|
conversationId,
|
|
error: err instanceof Error ? err.message : String(err),
|
|
projectId,
|
|
});
|
|
throw err;
|
|
}
|
|
}
|