refactor: update model initialization to use settings.model across services

This commit is contained in:
2025-11-11 12:02:08 +00:00
parent 2b83ffe00c
commit 8d745c1f8e
5 changed files with 168 additions and 118 deletions
+85 -80
View File
@@ -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"
)