文件
hyb-oa/client/src/api/ai.ts
T

80 行
1.8 KiB
TypeScript

import { apiRequestData } from "./http";
export type AiStatusResponse = {
enabled: boolean;
envEnabled: boolean;
featureFlag: {
key: string;
effectiveEnabled: boolean;
effectiveReason: string;
};
provider: {
type: string;
model: string | null;
};
permissions: {
canAccess: boolean;
};
};
export type AiRiskHint = {
level: "low" | "medium" | "high";
code: string;
title: string;
detail: string;
};
export type AiNextAction = {
code: string;
label: string;
reason: string;
};
export type AiSuggestionResponse = {
targetType: "reimbursement" | "purchase_request" | "asset_card";
targetId: string;
summary: string;
riskHints: AiRiskHint[];
nextActions: AiNextAction[];
sourceSnapshot: Record<string, unknown>;
providerMeta: {
provider: "mock" | "http" | string;
model: string | null;
promptHash: string;
tokenUsage: {
promptTokens: number | null;
completionTokens: number | null;
totalTokens: number | null;
};
};
generatedAt: string;
};
export async function fetchAiStatus() {
return apiRequestData<AiStatusResponse>("/api/ai/status");
}
export async function fetchReimbursementSuggestion(reimbursementId: string) {
return apiRequestData<AiSuggestionResponse>(`/api/ai/suggestions/reimbursements/${reimbursementId}`, {
method: "POST",
body: JSON.stringify({}),
});
}
export async function fetchPurchaseSuggestion(purchaseRequestId: string) {
return apiRequestData<AiSuggestionResponse>(
`/api/ai/suggestions/purchase-requests/${purchaseRequestId}`,
{
method: "POST",
body: JSON.stringify({}),
},
);
}
export async function fetchAssetSuggestion(assetId: string) {
return apiRequestData<AiSuggestionResponse>(`/api/ai/suggestions/assets/${assetId}`, {
method: "POST",
body: JSON.stringify({}),
});
}