Spaces:
Sleeping
Sleeping
# agent4.py | |
import requests | |
import os | |
api_key = os.getenv("API-KEY") | |
import re | |
def check_paper_relevance_and_keywords(title, search_string): | |
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"} | |
# Adjust the prompt to ask for relevance and keywords | |
prompt = (f"Determine if the paper titled '{title}' is relevant to the topic '{search_string}'. " | |
"and in return just informed paper is relevant or paper is not relevant, to the point.") | |
data = { | |
"model": "gpt-3.5-turbo", | |
"messages": [ | |
{"role": "system", "content": "You are a knowledgeable assistant."}, | |
{"role": "user", "content": prompt} | |
] | |
} | |
response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=data) | |
if response.status_code == 200: | |
result = response.json() | |
response_text = result['choices'][0]['message']['content'].strip().lower() | |
print(response_text) | |
# Check for explicit confirmation of relevance | |
if "not relevant" in response_text: | |
return False | |
else: | |
# Assuming the model lists keywords after confirming relevance | |
# Extracting keywords from the response assuming they are listed after "key words:" phrase | |
return True | |
else: | |
print(f"Error: {response.status_code}, Detail: {response.text}") | |
return (False, []) | |
def filter_papers_with_gpt_turbo(search_string, papers): | |
filtered_papers = [] | |
for paper in papers: | |
title = paper['title'] | |
if check_paper_relevance_and_keywords(title, search_string): | |
filtered_papers.append(paper) | |
return filtered_papers | |
def is_response_relevant(response): | |
# Define a pattern that matches sentences indicating irrelevance | |
irrelevance_pattern = re.compile(r"does not appear to be directly relevant", re.IGNORECASE) | |
# Define a pattern that matches sentences indicating relevance | |
relevance_pattern = re.compile(r"topics related", re.IGNORECASE) | |
# Check for irrelevance | |
if irrelevance_pattern.search(response): | |
return False # Irrelevant based on the matched pattern | |
# Check for relevance | |
if relevance_pattern.search(response): | |
return True # Relevant based on the matched pattern | |
# If neither pattern is matched, you might decide based on other criteria or default assumption | |
return None # Or False/True based on your default assumption | |
def generate_response_gpt4_turbo(question, papers_info): | |
messages = [{ | |
"role": "system", | |
"content": "You are a knowledgeable assistant who can answer research questions based on provided papers information." | |
}] | |
papers_context = "\n".join([f"- Title: '{paper['title']}', Author: {paper['creator']}, Year: {paper['year']}'." for paper in papers_info]) | |
messages.append({ | |
"role": "system", | |
"content": f"Research Question: {question}\n\nPapers Information:\n{papers_context}" | |
}) | |
messages.append({ | |
"role": "user", | |
"content": "Based on the provided papers information, please answer the research question and cite relevant references for cross-verification." | |
}) | |
headers = { | |
"Authorization": f"Bearer {api_key}", | |
"Content-Type": "application/json", | |
} | |
data = { | |
"model": "gpt-4-turbo-preview", | |
"messages": messages, | |
"temperature": 0.7, | |
"max_tokens": 256 | |
} | |
response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=data, timeout=800) | |
if response.status_code == 200: | |
result = response.json() | |
latest_response = result['choices'][0]['message']['content'] | |
return latest_response | |
else: | |
print(f"Error: {response.status_code}") | |
print(response.text) | |
return "An error occurred while generating the response." |