mirror of
https://github.com/marcogll/TaxHacker_s23.git
synced 2026-01-13 13:25:18 +00:00
58 lines
1.4 KiB
TypeScript
58 lines
1.4 KiB
TypeScript
"use server"
|
|
|
|
import { ActionState } from "@/lib/actions"
|
|
import { updateFile } from "@/models/files"
|
|
import { getLLMSettings, getSettings } from "@/models/settings"
|
|
import { AnalyzeAttachment } from "./attachments"
|
|
import { requestLLM } from "./providers/llmProvider"
|
|
|
|
export type AnalysisResult = {
|
|
output: Record<string, string>
|
|
tokensUsed: number
|
|
}
|
|
|
|
export async function analyzeTransaction(
|
|
prompt: string,
|
|
schema: Record<string, unknown>,
|
|
attachments: AnalyzeAttachment[],
|
|
fileId: string,
|
|
userId: string
|
|
): Promise<ActionState<AnalysisResult>> {
|
|
const settings = await getSettings(userId)
|
|
const llmSettings = getLLMSettings(settings)
|
|
|
|
try {
|
|
const response = await requestLLM(llmSettings, {
|
|
prompt,
|
|
schema,
|
|
attachments,
|
|
})
|
|
|
|
if (response.error) {
|
|
throw new Error(response.error)
|
|
}
|
|
|
|
const result = response.output
|
|
const tokensUsed = response.tokensUsed || 0
|
|
|
|
console.log("LLM response:", result)
|
|
console.log("LLM tokens used:", tokensUsed)
|
|
|
|
await updateFile(fileId, userId, { cachedParseResult: result })
|
|
|
|
return {
|
|
success: true,
|
|
data: {
|
|
output: result,
|
|
tokensUsed: tokensUsed,
|
|
},
|
|
}
|
|
} catch (error) {
|
|
console.error("AI Analysis error:", error)
|
|
return {
|
|
success: false,
|
|
error: error instanceof Error ? error.message : "Failed to analyze invoice",
|
|
}
|
|
}
|
|
}
|