80 行
1.8 KiB
TypeScript
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({}),
|
|
});
|
|
}
|