|
|
import requests |
|
|
import json |
|
|
import re |
|
|
from fastapi import HTTPException |
|
|
|
|
|
from app import process_chunks, analysis_system_message, compute_input_size |
|
|
|
|
|
url = "https://odai0-silmaq5.hf.space" |
|
|
|
|
|
|
|
|
|
|
|
def test_prompt_endpoint(): |
|
|
data = {"prompt": "say hi back"} |
|
|
response = requests.post(f"{url}/prompt", json=data) |
|
|
|
|
|
if response.status_code == 200: |
|
|
try: |
|
|
result = response.json() |
|
|
print("Valid JSON Response:", json.dumps(result, indent=2)) |
|
|
except json.JSONDecodeError: |
|
|
print("Not valid JSON:", response.text) |
|
|
raise AssertionError("Invalid JSON response") |
|
|
|
|
|
output = result["output"] |
|
|
assert isinstance(output, dict), "Output is not a dictionary" |
|
|
assert "signal" in output, "Missing 'signal' key" |
|
|
assert "message" in output, "Missing 'message' key" |
|
|
assert output["signal"] in ["m0", "a0", "e0"], "Invalid 'signal' value" |
|
|
assert re.search(r"\bhi\b", output["message"], re.IGNORECASE), "Model didn't say hi" |
|
|
|
|
|
else: |
|
|
print(f"Request failed with status code: {response.status_code}") |
|
|
raise HTTPException(status_code=response.status_code, detail="Request to /prompt failed") |
|
|
|
|
|
|
|
|
dataArr = [ |
|
|
{"prompt": "analyze this site"}, |
|
|
|
|
|
{"prompt": "summarize the content"}, |
|
|
] |
|
|
|
|
|
for data in dataArr: |
|
|
response = requests.post(f"{url}/prompt", json=data) |
|
|
|
|
|
if response.status_code == 200: |
|
|
try: |
|
|
result = response.json() |
|
|
print("Valid JSON Response:", json.dumps(result, indent=2)) |
|
|
except json.JSONDecodeError: |
|
|
print("Not valid JSON:", response.text) |
|
|
raise AssertionError("Invalid JSON response") |
|
|
|
|
|
output = result["output"] |
|
|
assert isinstance(output, dict), "Output is not a dictionary" |
|
|
assert "signal" in output, "Missing 'signal' key" |
|
|
assert "message" in output, "Missing 'message' key" |
|
|
assert output["signal"] == "a1", "Invalid 'signal' value, expected 'a1'" |
|
|
|
|
|
else: |
|
|
print(f"Request failed with status code: {response.status_code}") |
|
|
raise HTTPException(status_code=response.status_code, detail="Request to /prompt failed") |
|
|
|
|
|
print("Prompt endpoint test passed.") |
|
|
|
|
|
|
|
|
|
|
|
def test_analyze_endpoint(): |
|
|
chunk_str = json.dumps({ |
|
|
"tag": "nav", |
|
|
"id": "", |
|
|
"elements": [ |
|
|
{ |
|
|
"tag": "ul", |
|
|
"id": "", |
|
|
"elements": [ |
|
|
{"tag": "li", "id": "", "elements": [{"tag": "a", "id": "", "elements": [{"tag": "i", "id": "", "elements": []}, {"id": "", "tag": "#text", "text": "Category"}]}]}, |
|
|
{"tag": "li", "id": "", "elements": [{"tag": "a", "id": "", "elements": [{"tag": "i", "id": "", "elements": []}, {"id": "", "tag": "#text", "text": "Articles"}]}]}, |
|
|
{"tag": "li", "id": "", "elements": [{"tag": "a", "id": "", "elements": [{"tag": "i", "id": "", "elements": []}, {"id": "", "tag": "#text", "text": "Contact"}]}]}, |
|
|
{"tag": "li", "id": "", "elements": [{"tag": "a", "id": "", "elements": [{"tag": "i", "id": "", "elements": []}, {"id": "", "tag": "#text", "text": "About"}]}]}, |
|
|
], |
|
|
} |
|
|
], |
|
|
}) |
|
|
|
|
|
data = {"data": [chunk_str]} |
|
|
response = requests.post(f"{url}/analyze", json=data) |
|
|
|
|
|
if response.status_code == 200: |
|
|
try: |
|
|
result = response.json() |
|
|
print("Valid JSON Response:", json.dumps(result, indent=2)) |
|
|
except json.JSONDecodeError: |
|
|
print("Not valid JSON:", response.text) |
|
|
raise AssertionError("Invalid JSON response") |
|
|
|
|
|
output = result["output"] |
|
|
assert isinstance(output, dict), "Output is not a dictionary" |
|
|
assert "signal" in output, "Missing 'signal' key" |
|
|
assert "summary" in output, "Missing 'summary' key" |
|
|
|
|
|
|
|
|
assert output["signal"] in ["a1", "a0", "e0", "e1"], "Invalid 'signal' value" |
|
|
else: |
|
|
print(f"Request failed with status code: {response.status_code}") |
|
|
raise HTTPException(status_code=response.status_code, detail="Request to /analyze failed") |
|
|
|
|
|
print("Analyze endpoint test passed.") |
|
|
|
|
|
def test_process_chunks(): |
|
|
chunk_str = json.dumps({ |
|
|
"tag": "nav", |
|
|
"id": "", |
|
|
"elements": [ |
|
|
{ |
|
|
"tag": "ul", |
|
|
"id": "", |
|
|
"elements": [ |
|
|
{"tag": "li", "id": "", "elements": [{"tag": "a", "id": "", "elements": [{"tag": "i", "id": "", "elements": []}, {"id": "", "tag": "#text", "text": "Category"}]}]}, |
|
|
{"tag": "li", "id": "", "elements": [{"tag": "a", "id": "", "elements": [{"tag": "i", "id": "", "elements": []}, {"id": "", "tag": "#text", "text": "Articles"}]}]}, |
|
|
{"tag": "li", "id": "", "elements": [{"tag": "a", "id": "", "elements": [{"tag": "i", "id": "", "elements": []}, {"id": "", "tag": "#text", "text": "Contact"}]}]}, |
|
|
{"tag": "li", "id": "", "elements": [{"tag": "a", "id": "", "elements": [{"tag": "i", "id": "", "elements": []}, {"id": "", "tag": "#text", "text": "About"}]}]}, |
|
|
], |
|
|
} |
|
|
], |
|
|
}) |
|
|
|
|
|
chunks = [chunk_str] |
|
|
msg = analysis_system_message |
|
|
processed = process_chunks(chunks, msg, limit=512) |
|
|
|
|
|
for chunk in processed: |
|
|
assert isinstance(chunk, str), f"chunk is not a string {chunk}" |
|
|
assert isinstance(json.loads(chunk), dict), "chunk is not valid JSON" |
|
|
assert compute_input_size(json.dumps(chunk), msg) <= 512, "chunk exceeds size limit" |
|
|
|
|
|
print("process_chunks function test passed.") |
|
|
|