Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from hf_retrieval import * | |
| import requests | |
| def ask_llama_about_chunks(question): | |
| top_chunks = retrieval(question) | |
| merged_chunks = merge_chunks(top_chunks) | |
| context_text = "\n\n".join( | |
| f"[{i + 1}] [{chunk['video_id']}] [{chunk['start_time']}] - [{chunk['end_time']}]: {chunk['subtitle']}" for i, chunk in enumerate(merged_chunks) | |
| ) | |
| prompt = f"""You are an assistant helping users understand video content. | |
| Here are relevant pieces of text from a video, each labeled [1] through [10]. | |
| QUESTION: "{question}" | |
| Based only on the context, which segment of text best answers the users question or comment. Prioritize longer responses. Return ONLY the number of the most relevant chunk (e.g., '1'). | |
| Do NOT return any explanation. | |
| CONTEXT: | |
| {context_text} | |
| ANSWER:""" | |
| response = requests.post( | |
| "https://api-inference.huggingface.co/models/meta-llama/Llama-3-8b-chat-hf", | |
| headers={"Authorization": f"Bearer {os.environ['HF_API_TOKEN']}"}, | |
| json={"inputs": prompt} | |
| ) | |
| data = response.json() | |
| answer = data.get("generated_text", "").strip() | |
| try: | |
| best_chunk_index = int(answer) - 1 | |
| best_chunk = merged_chunks[best_chunk_index] | |
| except: | |
| best_chunk = merged_chunks[0] | |
| video_clip_path = get_video_segment(best_chunk['video_id'], best_chunk["start_time"], best_chunk["end_time"]) | |
| return best_chunk['subtitle'], gr.Video(video_clip_path) | |
| iface = gr.Interface( | |
| fn=ask_llama_about_chunks, | |
| inputs=[ | |
| gr.Textbox(label="Add your question here:") | |
| ], | |
| outputs=[ | |
| gr.Textbox(label="Best Matching Transcript"), | |
| gr.Video(label="Relevant Clip") | |
| ], | |
| title = "Chat With Your Video Library", | |
| description = "Ask questions about machine learning and the most relevant video segment and captions will be returned.", | |
| ) | |
| if __name__ == "__main__": | |
| iface.launch() |