Spaces:
Sleeping
Sleeping
from gtts import gTTS | |
import shutil | |
from selenium import webdriver | |
from selenium.webdriver.common.by import By | |
from selenium.webdriver.common.keys import Keys | |
from selenium.webdriver.support.ui import WebDriverWait | |
from selenium.webdriver.support import expected_conditions as EC | |
import json | |
from youtube_transcript_api import YouTubeTranscriptApi | |
from youtube_transcript_api.formatters import JSONFormatter | |
from urllib.parse import urlparse, parse_qs | |
from pypdf import PdfReader | |
from ai71 import AI71 | |
import os | |
AI71_API_KEY = "api71-api-652e5c6c-8edf-41d0-9c34-28522b07bef9" | |
def extract_text_from_pdf_s(pdf_path): | |
text = "" | |
reader = PdfReader(pdf_path) | |
for page in reader.pages: | |
text += page.extract_text() + "\n" | |
generate_speech_from_pdf(text[:len(text) // 2]) | |
return text | |
def generate_response_from_pdf(query, pdf_text): | |
response = '' | |
for chunk in AI71(AI71_API_KEY).chat.completions.create( | |
model="tiiuae/falcon-180b-chat", | |
messages=[ | |
{"role": "system", "content": "You are a pdf questioning assistant."}, | |
{"role": "user", | |
"content": f'''Answer the querry based on the given content.Content:{pdf_text},query:{query}'''}, | |
], | |
stream=True, | |
): | |
if chunk.choices[0].delta.content: | |
response += chunk.choices[0].delta.content | |
return response.replace("###", '') | |
def generate_quiz(subject, topic, count, difficult): | |
quiz_output = "" | |
for chunk in AI71(AI71_API_KEY).chat.completions.create( | |
model="tiiuae/falcon-180b-chat", | |
messages=[ | |
{"role": "system", "content": "You are a teaching assistant."}, | |
{"role": "user", | |
"content": f'''Generate {count} multiple-choice questions in the subject of {subject} for the topic {topic} for students at a {difficult} level. Ensure the questions are well-diversified and cover various aspects of the topic. Format the questions as follows: | |
Question: [Question text] [specific concept in a question] | |
<<o>> [Option1] | |
<<o>> [Option2] | |
<<o>> [Option3] | |
<<o>> [Option4], | |
Answer: [Option number]'''}, | |
], | |
stream=True, | |
): | |
if chunk.choices[0].delta.content: | |
quiz_output += chunk.choices[0].delta.content | |
print("Quiz generated") | |
return quiz_output | |
def generate_ai_response(query): | |
ai_response = '' | |
for chunk in AI71(AI71_API_KEY).chat.completions.create( | |
model="tiiuae/falcon-180b-chat", | |
messages=[ | |
{"role": "system", "content": "You are a teaching assistant."}, | |
{"role": "user", "content": f'Assist the user clearly for his questions: {query}.'}, | |
], | |
stream=True, | |
): | |
if chunk.choices[0].delta.content: | |
ai_response += chunk.choices[0].delta.content | |
return ai_response.replace('###', '') | |
def generate_project_idea(subject, topic, overview): | |
string = '' | |
for chunk in AI71(AI71_API_KEY).chat.completions.create( | |
model="tiiuae/falcon-180b-chat", | |
messages=[ | |
{"role": "system", "content": "You are a project building assistant."}, | |
{"role": "user", | |
"content": f'''Give the different project ideas to build project in {subject} specifically in {topic} for school students. {overview}.'''}, | |
], | |
stream=True, | |
): | |
if chunk.choices[0].delta.content: | |
string += chunk.choices[0].delta.content | |
return string | |
def generate_project_idea_questions(project_idea, query): | |
project_idea_answer = '' | |
for chunk in AI71(AI71_API_KEY).chat.completions.create( | |
model="tiiuae/falcon-180b-chat", | |
messages=[ | |
{"role": "system", "content": "You are a project building assistant."}, | |
{"role": "user", | |
"content": f'''Assist me clearly for the following question for the given idea. Idea: {project_idea}. Question: {query}'''}, | |
], | |
stream=True, | |
): | |
if chunk.choices[0].delta.content: | |
project_idea_answer += chunk.choices[0].delta.content | |
return project_idea_answer | |
def generate_step_by_step_explanation(query): | |
explanation = '' | |
for chunk in AI71(AI71_API_KEY).chat.completions.create( | |
model="tiiuae/falcon-180b-chat", | |
messages=[ | |
{"role": "system", "content": "You are the best teaching assistant."}, | |
{"role": "user", | |
"content": f'''Provide me the clear step by step explanation answer for the following question. Question: {query}'''}, | |
], | |
stream=True, | |
): | |
if chunk.choices[0].delta.content: | |
explanation += chunk.choices[0].delta.content | |
return explanation.replace('###', '') | |
def study_plan(subjects, hours, arealag, goal): | |
plan = '' | |
for chunk in AI71(AI71_API_KEY).chat.completions.create( | |
model="tiiuae/falcon-180b-chat", | |
messages=[ | |
{"role": "system", "content": "You are the best teaching assistant."}, | |
{"role": "user", | |
"content": f'''Provide me the clear personalised study plan for the subjects {subjects} i lag in areas like {arealag}, im available for {hours} hours per day and my study goal is to {goal}.Provide me like a timetable like day1,day2 for 5 days with concepts,also suggest some books'''}, | |
], | |
stream=True, | |
): | |
if chunk.choices[0].delta.content: | |
plan += chunk.choices[0].delta.content | |
return plan.replace('\n', '<br>') | |
class ConversationBufferMemory: | |
def __init__(self, memory_key="chat_history"): | |
self.memory_key = memory_key | |
self.buffer = [] | |
def add_to_memory(self, interaction): | |
self.buffer.append(interaction) | |
def get_memory(self): | |
return "\n".join([f"Human: {entry['user']}\nAssistant: {entry['assistant']}" for entry in self.buffer]) | |
def spk_msg(user_input, memory): | |
chat_history = memory.get_memory() | |
msg = '' | |
# Construct the message for the API request | |
messages = [ | |
{"role": "system", | |
"content": "You are a nice speaker having a conversation with a human.You ask the question the user choose the topic and let user answer.Provide the response only within 2 sentence"}, | |
{"role": "user", | |
"content": f"Previous conversation:\n{chat_history}\n\nNew human question: {user_input}\nResponse:"} | |
] | |
try: | |
for chunk in AI71(AI71_API_KEY).chat.completions.create( | |
model="tiiuae/falcon-180b-chat", | |
messages=messages, | |
stream=True, | |
): | |
if chunk.choices[0].delta.content: | |
msg += chunk.choices[0].delta.content | |
except Exception as e: | |
print(f"An error occurred: {e}") | |
return msg | |
def get_first_youtube_video_link(query): | |
url = f'https://www.youtube.com/results?search_query={query}' | |
# Navigate to the URL | |
driver.get(url) | |
# Find the first video link | |
try: | |
# Find the first video element | |
first_video_element = driver.find_element(By.XPATH, '//a[@id="video-title"]') | |
video_link = first_video_element.get_attribute('href') | |
print(video_link) | |
finally: | |
# Close the WebDriver | |
driver.quit() | |
def content_translate(text): | |
translated_content = '' | |
for chunk in AI71(AI71_API_KEY).chat.completions.create( | |
model="tiiuae/falcon-180b-chat", | |
messages=[ | |
{"role": "system", "content": "You are the best teaching assistant."}, | |
{"role": "user", "content": f'''Translate the text to hindi. Text: {text}'''}, | |
], | |
stream=True, | |
): | |
if chunk.choices[0].delta.content: | |
translated_content += chunk.choices[0].delta.content | |
return translated_content | |
def get_video_id(url): | |
""" | |
Extract the video ID from a YouTube URL. | |
""" | |
parsed_url = urlparse(url) | |
if parsed_url.hostname == 'www.youtube.com' or parsed_url.hostname == 'youtube.com': | |
video_id = parse_qs(parsed_url.query).get('v') | |
if video_id: | |
return video_id[0] | |
elif parsed_url.hostname == 'youtu.be': | |
return parsed_url.path[1:] | |
return None | |
def extract_captions(video_url): | |
""" | |
Extract captions from a YouTube video URL. | |
""" | |
video_id = get_video_id(video_url) | |
if not video_id: | |
print("Invalid YouTube URL.") | |
return | |
try: | |
transcript = YouTubeTranscriptApi.get_transcript(video_id) | |
formatter = JSONFormatter() | |
formatted_transcript = formatter.format_transcript(transcript) | |
# Save captions to a file | |
with open(f'youtube_captions.json', 'w') as file: | |
file.write(formatted_transcript) | |
print("Captions have been extracted and saved as JSON.") | |
except Exception as e: | |
print(f"An error occurred: {e}") | |
def extract_text_from_json(filename): | |
# Open and read the JSON file | |
with open(filename, 'r') as file: | |
data = json.load(file) | |
# Extract and print the text fields | |
texts = [entry['text'] for entry in data] | |
return texts | |
def get_simplified_explanation(text): | |
prompt = ( | |
f"The following is a transcript of a video: \n\n{text}\n\n" | |
"Please provide a simplified explanation of the video for easy understanding." | |
) | |
response = "" | |
for chunk in AI71(AI71_API_KEY).chat.completions.create( | |
model="tiiuae/falcon-180b-chat", | |
messages=[ | |
{"role": "system", "content": "You are a helpful assistant."}, | |
{"role": "user", "content": prompt}, | |
], | |
stream=True, | |
): | |
if chunk.choices[0].delta.content: | |
response += chunk.choices[0].delta.content | |
return response | |
def summarise_text(url): | |
extract_captions(url) | |
texts = extract_text_from_json(r'youtube_captions.json') | |
os.remove('youtube_captions.json') | |
first_half = (get_simplified_explanation(texts[:len(texts) // 2])) | |
second_half = (get_simplified_explanation(texts[len(texts) // 2:])) | |
return (first_half + second_half) | |
def generate_speech_from_pdf(content): | |
directory = 'speech' | |
keep_file = 'nil.txt' | |
# Check if the directory exists | |
if os.path.isdir(directory): | |
for filename in os.listdir(directory): | |
file_path = os.path.join(directory, filename) | |
# Check if the current file is not the one to keep and is a file | |
if filename != keep_file and os.path.isfile(file_path): | |
try: | |
os.remove(file_path) # Delete the file | |
print(f"Deleted {file_path}") | |
except Exception as e: | |
print(f"Error deleting {file_path}: {e}") | |
else: | |
print(f"Directory {directory} does not exist.") | |
speech = '' | |
for chunk in AI71(AI71_API_KEY).chat.completions.create( | |
model="tiiuae/falcon-180b-chat", | |
messages=[ | |
{"role": "system", "content": "You are a summarising assistant."}, | |
{"role": "user", | |
"content": f'''Summarise the given content for each chapter for 1 sentence.Content={content}'''}, | |
], | |
stream=True, | |
): | |
if chunk.choices[0].delta.content: | |
speech += chunk.choices[0].delta.content | |
speech = speech[:-6].replace("###", '') | |
chapters = speech.split('\n\n') | |
pdf_audio(chapters[:4]) | |
return | |
def pdf_audio(chapters): | |
for i in range(len(chapters)): | |
tts = gTTS(text=chapters[i], lang='en', slow=False) | |
tts.save(f'speech/chapter {i + 1}.mp3') | |
return | |
def content_translate(text): | |
translated_content = '' | |
for chunk in AI71(AI71_API_KEY).chat.completions.create( | |
model="tiiuae/falcon-180b-chat", | |
messages=[ | |
{"role": "system", "content": "You are the best teaching assistant."}, | |
{"role": "user", "content": f'''Translate the text to hindi. Text: {text}'''}, | |
], | |
stream=True, | |
): | |
if chunk.choices[0].delta.content: | |
translated_content += chunk.choices[0].delta.content | |
return translated_content |