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}")