alkaike / utils.py
gouravchahar's picture
required files
c6a6d99 verified
import requests
import os
from dotenv import load_dotenv
import time
load_dotenv()
API_KEY=os.getenv("API_KEY")
def get_sentiment(text):
API_URL = "https://api-inference.huggingface.co/models/distilbert-base-uncased-finetuned-sst-2-english"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
data = {"inputs": text}
response = requests.post(API_URL, headers=HEADERS, json=data)
try:
result = response.json()
if isinstance(result, list) and len(result) > 0 and isinstance(result[0], list):
best_label = max(result[0], key=lambda x: x["score"]) # Extract highest score
return best_label["label"]
else:
return "Error: Unexpected response format"
except requests.exceptions.JSONDecodeError:
return "Error: Empty or invalid JSON response"
def summarize_text(text, max_length=150, min_length=50):
API_URL = "https://api-inference.huggingface.co/models/facebook/bart-large-cnn"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
data = {
"inputs": text,
"parameters": {"max_length": max_length, "min_length": min_length, "do_sample": False}
}
response = requests.post(API_URL, headers=HEADERS, json=data)
try:
result = response.json()
if isinstance(result, list) and "summary_text" in result[0]:
return result[0]["summary_text"] # Extract summary text
else:
return "Error: Unexpected response format"
except requests.exceptions.JSONDecodeError:
return "Error: Empty or invalid JSON response"
def extract_keywords(text, top_n=5):
API_URL = "https://api-inference.huggingface.co/models/ml6team/keyphrase-extraction-kbir-inspec"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
data = {"inputs": text}
response = requests.post(API_URL, headers=HEADERS, json=data)
try:
result = response.json()
if isinstance(result, list) and len(result) > 0:
keywords = [item["word"] for item in result[:top_n]]
return keywords
else:
return "Error: Unexpected response format"
except requests.exceptions.JSONDecodeError:
return "Error: Empty or invalid JSON response"
def text_to_speech(text):
API_URL = 'https://api-inference.huggingface.co/models/facebook/mms-tts-hin'
headers = {'Authorization': f'Bearer {API_KEY}'}
payload = {'inputs': text}
response = requests.post(API_URL, headers=headers, json=payload)
if response.status_code == 200:
with open('output.wav', 'wb') as f:
f.write(response.content)
print('Audio content written to output.wav')
else:
print(f'Error: {response.status_code}, {response.text}')
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
MODELS = {
"comparison": "https://api-inference.huggingface.co/models/sentence-transformers/all-MiniLM-L6-v2",
"sentiment": "https://api-inference.huggingface.co/models/distilbert-base-uncased-finetuned-sst-2-english"
}
def request_huggingface(api_url, payload, retries=3, delay=2):
for attempt in range(retries):
try:
response = requests.post(api_url, headers=HEADERS, json=payload)
if response.status_code == 200:
return response.json()
elif response.status_code in [429, 503]: # Rate limited or service unavailable
print(f"Rate limited. Retrying in {delay} seconds...")
time.sleep(delay)
else:
print(f"Error {response.status_code}: {response.text}")
return None
except requests.exceptions.RequestException as e:
print(f"Request failed: {e}")
print("Failed to get a valid response after retries.")
return None
def comparison_impact(text1, text2):
# Comparison Analysis
comparison_payload = {"inputs": {"source_sentence": text1, "sentences": [text2]}}
comparison_result = request_huggingface(MODELS["comparison"], comparison_payload)
# Sentiment Analysis for Impact
sentiment1 = request_huggingface(MODELS["sentiment"], {"inputs": text1})
sentiment2 = request_huggingface(MODELS["sentiment"], {"inputs": text2})
if sentiment1 and sentiment2:
sentiment1_label = max(sentiment1[0], key=lambda x: x["score"])["label"]
sentiment2_label = max(sentiment2[0], key=lambda x: x["score"])["label"]
impact_analysis = f"Sentiment Shift: '{sentiment1_label}' → '{sentiment2_label}'"
else:
impact_analysis = "Error in sentiment analysis."
return {
"Comparison Result": comparison_result,
"Impact Analysis": impact_analysis
}