TruthLens-Backend / services /verification /source_validator.py
Gargi Monga
Fix backend imports
c2f3fc9
Raw
History Blame Contribute Delete
2 kB
import sys
from pathlib import Path
PROJECT_ROOT = Path(__file__).resolve().parents[3]
sys.path.insert(0, str(PROJECT_ROOT))
import json
import requests
from bs4 import BeautifulSoup
from ai.sarvam_client import generate_response, extract_json
def get_page_details(url: str):
"""
Fetch webpage details.
"""
try:
response = requests.get(url, timeout=10)
soup = BeautifulSoup(response.text, "html.parser")
title = soup.title.string.strip() if soup.title else "Unknown"
domain = requests.utils.urlparse(url).netloc
return {
"title": title,
"domain": domain,
"status": response.status_code
}
except Exception:
return {
"title": "Unknown",
"domain": "",
"status": 0
}
def create_source_prompt(source):
prompt = f"""
You are an expert source credibility analyst.
Analyze the following website.
Title:
{source["title"]}
Domain:
{source["domain"]}
Status Code:
{source["status"]}
Return ONLY valid JSON.
{{
"credibility_score":85,
"reliability":"High",
"reason":"Short explanation."
}}
"""
return prompt
def get_source_analysis(url):
source = get_page_details(url)
prompt = create_source_prompt(source)
return generate_response(prompt)
def parse_model_response(response):
if response is None:
return {
"credibility_score": 0,
"reliability": "Unknown",
"reason": "No response received from Sarvam AI."
}
parsed = extract_json(response)
if parsed is None:
return {
"credibility_score": 0,
"reliability": "Unknown",
"reason": "Unable to analyze source."
}
return parsed
def validate_source(url):
raw = get_source_analysis(url)
return parse_model_response(raw)
if __name__ == "__main__":
sample = "https://www.bbc.com"
print(validate_source(sample))