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 |