Spaces:
Build error
Build error
| import os | |
| import time | |
| import streamlit as st | |
| import together | |
| import requests | |
| # ✅ Load Together API key from environment variable | |
| os.getenv("TOGETHERAI_API_KEY") == "9c679ff9d00b1c3e633ef3bb0ec44a8002a2b74d2f535d709b1bd85d26a168ee" | |
| # ✅ Set API key for Together AI | |
| together.api_key = "9c679ff9d00b1c3e633ef3bb0ec44a8002a2b74d2f535d709b1bd85d26a168ee" | |
| # ✅ Function to load text from a URL | |
| def load_text(url): | |
| """Fetches text from a URL""" | |
| try: | |
| headers = {"User-Agent": os.getenv("USER_AGENT", "Mozilla/5.0")} | |
| response = requests.get(url, headers=headers) | |
| response.raise_for_status() | |
| return response.text[:20000] # Doubled input limit for more context | |
| except Exception as e: | |
| st.error(f"Error loading URL: {e}") | |
| return None | |
| # ✅ Function to summarize text with richer, more detailed output | |
| def summarize_text(text, max_retries=3, retry_delay=5): | |
| """Summarize text using Together AI API with retry logic for extensive output""" | |
| text = text[:20000] # Increased input limit to 20,000 characters (~5,000 tokens) | |
| # Enhanced prompt for a more detailed, comprehensive summary | |
| prompt = f""" | |
| You are an expert summarizer tasked with creating a highly detailed, comprehensive, and well-structured summary of the url provided. | |
| Provide a summary in 20-35 sentences that thoroughly captures the main points, key details, significant insights, and important examples or arguments presented in the text. | |
| Ensure the summary is informative, coherent, and rich in content, avoiding vague or overly simplistic statements. | |
| Include context where relevant and aim to give a complete picture of the text’s purpose and findings. | |
| TEXT: {text} | |
| SUMMARY: | |
| """ | |
| for attempt in range(max_retries): | |
| try: | |
| response = together.Complete.create( | |
| model="mistralai/Mixtral-8x7B-Instruct-v0.1", | |
| prompt=prompt, | |
| max_tokens=600, # Increased to 600 tokens (~450-600 words) for a longer, detailed summary | |
| temperature=0.3, # Kept low for focus and coherence | |
| ) | |
| # Debugging: Print full API response (optional, remove in production) | |
| print("Raw API Response:", response) | |
| # Extract summary from response | |
| if isinstance(response, dict) and "output" in response: | |
| summary = response["output"] | |
| return {"output_text": summary.strip()} | |
| elif isinstance(response, dict) and "choices" in response: | |
| summary = response["choices"][0]["text"] | |
| return {"output_text": summary.strip()} | |
| else: | |
| raise KeyError("Unexpected API response format.") | |
| except Exception as e: | |
| if "rate_limit_exceeded" in str(e) and attempt < max_retries - 1: | |
| st.warning(f"Attempt {attempt + 1}/{max_retries}: Rate limit exceeded. Retrying in {retry_delay} seconds...") | |
| time.sleep(retry_delay) | |
| else: | |
| st.error(f"❌ Error during summarization: {e}") | |
| return {"output_text": "Summarization failed. Try again later."} | |
| return {"output_text": "Summarization failed after multiple attempts."} |