from dotenv import load_dotenv, find_dotenv load_dotenv(find_dotenv()) import os import modules.logger_tool as logger log_name = 'api_modules_interactive_langgraph_query' log_dir = os.getenv("LOG_PATH", "/logs") # Default path as fallback logging = logger.get_logger( name=log_name, log_level=os.getenv("LOG_LEVEL", "DEBUG"), log_path=log_dir, log_file=log_name, runtime=True, log_format='default' ) import pytest import requests # Define the URL of your FastAPI server BASE_URL = "http://localhost:8000" ENDPOINT = f"{BASE_URL}/api/langchain/interactive_langgraph_query/query" def send_query(query): payload = {"query": query} headers = {"Content-Type": "application/json"} logging.info(f"Sending query to {ENDPOINT} with payload: {payload}") try: response = requests.post(ENDPOINT, json=payload, headers=headers) response.raise_for_status() result = response.json() logging.info(f"Received response from {ENDPOINT}: {result}") return result except requests.exceptions.RequestException as e: logging.error(f"Error sending query to {ENDPOINT}: {str(e)}") return {"error": str(e)} @pytest.mark.simple def test_simple_queries(): query = "Describe the relevance of Maidstone, England during the English Civil War." logging.info(f"Running simple query test with query: {query}") result = send_query(query) logging.info(f"Assertion 1: Checking for absence of error") assert "error" not in result, f"Error in response: {result.get('error')}" logging.info(f"Assertion 2: Checking for presence of response") assert "response" in result, "Response does not contain an answer" logging.info(f"Assertion 3: Checking for non-empty answer") assert len(result["response"]) > 0, "Answer is empty" logging.info(f"All assertions passed. Response: {result['response'][:100]}...") @pytest.mark.followup def test_followup_queries(): initial_query = "What is the latest local news from a particular town?" logging.info(f"Running followup query test with initial query: {initial_query}") result = send_query(initial_query) logging.info(f"Assertion 1: Checking for absence of error") assert "error" not in result, f"Error in response: {result.get('error')}" if result.get("needs_more_info", False): logging.info("Follow-up required. Sending follow-up query.") follow_up_query = f"{initial_query} The town is Maidstone." follow_up_result = send_query(follow_up_query) logging.info(f"Assertion 2: Checking for absence of error in follow-up") assert "error" not in follow_up_result, f"Error in follow-up response: {follow_up_result.get('error')}" logging.info(f"Assertion 3: Checking for presence of response in follow-up") assert "response" in follow_up_result, "Follow-up response does not contain an answer" logging.info(f"Assertion 4: Checking for non-empty answer in follow-up") assert len(follow_up_result["response"]) > 0, "Follow-up answer is empty" logging.info(f"All follow-up assertions passed. Response: {follow_up_result['response'][:100]}...") else: logging.info(f"Assertion 2: Checking for presence of response") assert "response" in result, "Response does not contain an answer" logging.info(f"Assertion 3: Checking for non-empty answer") assert len(result["response"]) > 0, "Answer is empty" logging.info(f"All assertions passed. Response: {result['response'][:100]}...")