diff --git a/pkg/api/large_language_models.go b/pkg/api/large_language_models.go index 0d1a2cab..742b96a0 100644 --- a/pkg/api/large_language_models.go +++ b/pkg/api/large_language_models.go @@ -5,6 +5,7 @@ import ( "encoding/json" "io" "strings" + "time" "github.com/mayswind/ezbookkeeping/pkg/core" "github.com/mayswind/ezbookkeeping/pkg/errs" @@ -52,6 +53,7 @@ func (a *LargeLanguageModelsApi) RecognizeReceiptImageHandler(c *core.WebContext return nil, errs.ErrClientTimezoneOffsetInvalid } + timezone := time.FixedZone("Client Timezone", int(utcOffset)*60) uid := c.GetCurrentUid() user, err := a.users.GetUserById(c, uid) @@ -192,6 +194,7 @@ func (a *LargeLanguageModelsApi) RecognizeReceiptImageHandler(c *core.WebContext } systemPromptParams := map[string]any{ + "CurrentDateTime": utils.FormatUnixTimeToLongDateTime(time.Now().Unix(), timezone), "AllExpenseCategoryNames": strings.Join(expenseCategoryNames, "\n"), "AllIncomeCategoryNames": strings.Join(incomeCategoryNames, "\n"), "AllTransferCategoryNames": strings.Join(transferCategoryNames, "\n"), @@ -281,7 +284,8 @@ func (a *LargeLanguageModelsApi) parseRecognizedReceiptImageResponse(c *core.Web } if len(recognizedResult.Time) > 0 { - timestamp, err := utils.ParseFromLongDateTime(recognizedResult.Time, utcOffset) + longDateTime := a.getLongDateTime(recognizedResult.Time) + timestamp, err := utils.ParseFromLongDateTime(longDateTime, utcOffset) if err != nil { log.Warnf(c, "[large_language_models.parseRecognizedReceiptImageResponse] recoginzed time \"%s\" is invalid", recognizedResult.Time) @@ -349,3 +353,19 @@ func (a *LargeLanguageModelsApi) parseRecognizedReceiptImageResponse(c *core.Web return recognizedReceiptImageResponse, nil } + +func (a *LargeLanguageModelsApi) getLongDateTime(dateTime string) string { + if utils.IsValidLongDateTimeFormat(dateTime) { + return dateTime + } + + if utils.IsValidLongDateTimeWithoutSecondFormat(dateTime) { + return dateTime + ":00" + } + + if utils.IsValidLongDateFormat(dateTime) { + return dateTime + " 00:00:00" + } + + return dateTime +} diff --git a/templates/prompt/receipt_image_recognition.tmpl b/templates/prompt/receipt_image_recognition.tmpl index 1b6804e3..ed00502d 100644 --- a/templates/prompt/receipt_image_recognition.tmpl +++ b/templates/prompt/receipt_image_recognition.tmpl @@ -27,6 +27,7 @@ Your task is to extract structured transaction data from images provided by the 3. If the image contains multiple items, please combine them into a single transaction. 4. If the image contains no transaction information, simply return an empty JSON object. 5. Always return valid JSON. +6. The current time is {{.CurrentDateTime}}. ## Options ### Expense categories: