refactor: update model initialization to use settings.model across services
This commit is contained in:
+85
-80
@@ -727,97 +727,101 @@ async def match_specific_receipts(request: MatchSpecificRequest, db: db_dependen
|
||||
)
|
||||
logger.info(f"Matching completed, got {len(matching_results)} results")
|
||||
|
||||
# Filter results by confidence threshold (10% minimum)
|
||||
CONFIDENCE_THRESHOLD = 0.10
|
||||
filtered_results = [r for r in matching_results if r.confidence_score >= CONFIDENCE_THRESHOLD]
|
||||
logger.info(f"After filtering by {CONFIDENCE_THRESHOLD*100}% threshold: {len(filtered_results)} matches remain")
|
||||
|
||||
# Convert matching results to response format
|
||||
match_responses = []
|
||||
for result in matching_results:
|
||||
for result in filtered_results:
|
||||
# Get final tax amount from LLM analysis if available, otherwise use receipt's stated tax
|
||||
if result.confidence_score > 0:
|
||||
final_tax = result.receipt.tax
|
||||
# if result.tax_analysis and "final_tax_amount" in result.tax_analysis:
|
||||
# final_tax = result.tax_analysis["final_tax_amount"]
|
||||
final_tax = result.receipt.tax
|
||||
# if result.tax_analysis and "final_tax_amount" in result.tax_analysis:
|
||||
# final_tax = result.tax_analysis["final_tax_amount"]
|
||||
|
||||
# Extract flag_for_review and auto_approve from tax_analysis if available
|
||||
flag_for_review = None
|
||||
auto_approve = None
|
||||
if result.tax_analysis:
|
||||
flag_for_review = result.tax_analysis.get("flag_for_review")
|
||||
auto_approve = result.tax_analysis.get("auto_approve")
|
||||
# Extract flag_for_review and auto_approve from tax_analysis if available
|
||||
flag_for_review = None
|
||||
auto_approve = None
|
||||
if result.tax_analysis:
|
||||
flag_for_review = result.tax_analysis.get("flag_for_review")
|
||||
auto_approve = result.tax_analysis.get("auto_approve")
|
||||
|
||||
match_response = MatchResponse(
|
||||
receipt_id=result.receipt.id,
|
||||
transaction_id=result.transaction.id
|
||||
if result.transaction
|
||||
else "no_match",
|
||||
confidence_score=result.confidence_score * 100,
|
||||
match_reason=result.match_reason,
|
||||
receipt_vendor=result.receipt.vendor,
|
||||
receipt_amount=result.receipt.amount,
|
||||
receipt_description=result.receipt.description,
|
||||
receipt_category=result.receipt.category,
|
||||
receipt_tax_amount=final_tax,
|
||||
transaction_vendor=result.transaction.vendor
|
||||
if result.transaction
|
||||
else "",
|
||||
transaction_amount=result.transaction.amount
|
||||
if result.transaction
|
||||
else 0.0,
|
||||
tax_analysis=result.tax_analysis,
|
||||
flag_for_review=flag_for_review,
|
||||
auto_approve=auto_approve,
|
||||
# Transaction metadata
|
||||
transaction_source=result.transaction.source
|
||||
if result.transaction
|
||||
else None,
|
||||
# QuickBooks CSV fields
|
||||
TxnId=result.transaction.TxnId if result.transaction else None,
|
||||
AccountType=result.transaction.AccountType
|
||||
if result.transaction
|
||||
else None,
|
||||
AccountNumber=result.transaction.AccountNumber
|
||||
if result.transaction
|
||||
else None,
|
||||
TransactionDate=result.transaction.TransactionDate
|
||||
if result.transaction
|
||||
else None,
|
||||
TransactionType=result.transaction.TransactionType
|
||||
if result.transaction
|
||||
else None,
|
||||
ChequeNumber=result.transaction.ChequeNumber
|
||||
if result.transaction
|
||||
else None,
|
||||
Description1=result.transaction.Description1
|
||||
if result.transaction
|
||||
else None,
|
||||
Description2=result.transaction.Description2
|
||||
if result.transaction
|
||||
else None,
|
||||
VendorId=result.transaction.VendorId
|
||||
if result.transaction
|
||||
else None,
|
||||
VendorName=result.transaction.VendorName
|
||||
if result.transaction
|
||||
else None,
|
||||
AccountId=result.transaction.AccountId
|
||||
if result.transaction
|
||||
else None,
|
||||
AccountName=result.transaction.AccountName
|
||||
if result.transaction
|
||||
else None,
|
||||
Source=result.transaction.source if result.transaction else None,
|
||||
)
|
||||
match_responses.append(match_response)
|
||||
match_response = MatchResponse(
|
||||
receipt_id=result.receipt.id,
|
||||
transaction_id=result.transaction.id
|
||||
if result.transaction
|
||||
else "no_match",
|
||||
confidence_score=result.confidence_score * 100,
|
||||
match_reason=result.match_reason,
|
||||
receipt_vendor=result.receipt.vendor,
|
||||
receipt_amount=result.receipt.amount,
|
||||
receipt_description=result.receipt.description,
|
||||
receipt_category=result.receipt.category,
|
||||
receipt_tax_amount=final_tax,
|
||||
transaction_vendor=result.transaction.vendor
|
||||
if result.transaction
|
||||
else "",
|
||||
transaction_amount=result.transaction.amount
|
||||
if result.transaction
|
||||
else 0.0,
|
||||
tax_analysis=result.tax_analysis,
|
||||
flag_for_review=flag_for_review,
|
||||
auto_approve=auto_approve,
|
||||
# Transaction metadata
|
||||
transaction_source=result.transaction.source
|
||||
if result.transaction
|
||||
else None,
|
||||
# QuickBooks CSV fields
|
||||
TxnId=result.transaction.TxnId if result.transaction else None,
|
||||
AccountType=result.transaction.AccountType
|
||||
if result.transaction
|
||||
else None,
|
||||
AccountNumber=result.transaction.AccountNumber
|
||||
if result.transaction
|
||||
else None,
|
||||
TransactionDate=result.transaction.TransactionDate
|
||||
if result.transaction
|
||||
else None,
|
||||
TransactionType=result.transaction.TransactionType
|
||||
if result.transaction
|
||||
else None,
|
||||
ChequeNumber=result.transaction.ChequeNumber
|
||||
if result.transaction
|
||||
else None,
|
||||
Description1=result.transaction.Description1
|
||||
if result.transaction
|
||||
else None,
|
||||
Description2=result.transaction.Description2
|
||||
if result.transaction
|
||||
else None,
|
||||
VendorId=result.transaction.VendorId
|
||||
if result.transaction
|
||||
else None,
|
||||
VendorName=result.transaction.VendorName
|
||||
if result.transaction
|
||||
else None,
|
||||
AccountId=result.transaction.AccountId
|
||||
if result.transaction
|
||||
else None,
|
||||
AccountName=result.transaction.AccountName
|
||||
if result.transaction
|
||||
else None,
|
||||
Source=result.transaction.source if result.transaction else None,
|
||||
)
|
||||
match_responses.append(match_response)
|
||||
|
||||
# Calculate statistics
|
||||
# Calculate statistics on filtered results
|
||||
high_confidence = len(
|
||||
[r for r in matching_results if r.confidence_score >= 0.8]
|
||||
[r for r in filtered_results if r.confidence_score >= 0.8]
|
||||
)
|
||||
low_confidence = len(
|
||||
[r for r in matching_results if r.confidence_score < 0.5]
|
||||
[r for r in filtered_results if r.confidence_score < 0.5]
|
||||
)
|
||||
avg_score = (
|
||||
sum(r.confidence_score for r in matching_results)
|
||||
/ len(matching_results)
|
||||
if matching_results
|
||||
sum(r.confidence_score for r in filtered_results)
|
||||
/ len(filtered_results)
|
||||
if filtered_results
|
||||
else 0
|
||||
)
|
||||
|
||||
@@ -829,6 +833,7 @@ async def match_specific_receipts(request: MatchSpecificRequest, db: db_dependen
|
||||
}
|
||||
|
||||
logger.info(f"Generated stats: {stats}")
|
||||
logger.info(f"Match responses: {match_responses}")
|
||||
logger.info(
|
||||
f"Match-specific completed successfully with {len(match_responses)} matches"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user