financial-rag-bot / app /entity_resolver.py
Saadiktk's picture
Initial Hugging Face Space deployment
1ae6115
Raw
History Blame Contribute Delete
1.88 kB
import psycopg2
from app.config import DB_CONFIG
def get_connection():
return psycopg2.connect(**DB_CONFIG)
def resolve_form(user_input: str):
"""
Takes a raw string and returns the closest matching form/document from forms_directory.
Returns None if PostgreSQL is offline or no match is found.
"""
try:
conn = get_connection()
cursor = conn.cursor()
try:
cursor.execute(
"SELECT form_name, category, source_url FROM forms_directory WHERE form_name ILIKE %s LIMIT 1;",
(f"%{user_input}%",),
)
result = cursor.fetchone()
if result:
return {
"form_name": result[0],
"category": result[1],
"source_url": result[2],
"match_type": "exact_contains",
}
cursor.execute(
"""SELECT form_name, category, source_url, similarity(form_name, %s) AS sim
FROM forms_directory
WHERE form_name % %s
ORDER BY sim DESC
LIMIT 1;""",
(user_input, user_input),
)
result = cursor.fetchone()
if result:
return {
"form_name": result[0],
"category": result[1],
"source_url": result[2],
"match_type": "fuzzy_name",
"similarity": result[3],
}
return None
finally:
cursor.close()
conn.close()
except Exception:
return None
if __name__ == "__main__":
test_queries = ["early_repayment", "financial_hardship"]
for q in test_queries:
result = resolve_form(q)
print(f"Query: '{q}' -> {result}")