| import streamlit as st |
| import requests |
| import json |
| import time |
| import os |
| api_url = os.getenv("API_URL") |
| auth_token = os.getenv("AUTH_TOKEN") |
|
|
|
|
| |
| st.set_page_config( |
| page_title="Product Hunt Thread Summarizer", |
| layout="wide", |
| initial_sidebar_state="collapsed" |
| ) |
|
|
| |
| st.markdown( |
| """ |
| <style> |
| /* Main header with Product Hunt icon */ |
| #main-header { |
| display: flex; |
| align-items: center; |
| margin-bottom: 10px; |
| } |
| #main-header img { |
| width: 50px; |
| height: 50px; |
| margin-right: 15px; |
| border-radius: 4px; |
| } |
| #main-header h1 { |
| font-size: 32px; |
| margin: 0; |
| color: #333; |
| } |
| /* Inferless banner without border */ |
| #inferless-banner { |
| display: flex; |
| align-items: center; |
| background-color: #ffffff; |
| padding: 10px 15px; |
| margin-bottom: 20px; |
| border-radius: 8px; |
| } |
| #inferless-banner img { |
| width: 40px; |
| height: 40px; |
| margin-right: 10px; |
| border-radius: 4px; |
| } |
| #inferless-banner .inferless-text { |
| font-size: 18px; |
| font-weight: 600; |
| color: #333; |
| } |
| </style> |
| """, |
| unsafe_allow_html=True |
| ) |
|
|
| |
| st.markdown( |
| """ |
| <div id="main-header"> |
| <img src="https://i.tracxn.com/logo/company/588f54924f2a60b6aae128ac436d95a4?format=webp&height=120&width=120" alt="Product Hunt Logo"> |
| <h1>Product Hunt Thread Summarizer</h1> |
| </div> |
| """, |
| unsafe_allow_html=True |
| ) |
|
|
| |
| st.markdown( |
| """ |
| <div id="inferless-banner"> |
| <img src="https://i.tracxn.com/logo/company/1678863153264_9e6a9a4d-b955-42b3-895e-b94ade13c997.jpeg?format=webp&height=120&width=120" alt="Inferless Logo"> |
| <div class="inferless-text">Powered by Inferless</div> |
| </div> |
| """, |
| unsafe_allow_html=True |
| ) |
|
|
| |
| thread_url = st.text_input( |
| label="Enter URL", |
| placeholder="https://www.producthunt.com/p/graphite/you-re-doing-code-reviews-wrong-ama-w-ceo-of-graphite", |
| help="Paste the URL you want to summarize" |
| ) |
|
|
| |
| if st.button("Summarize"): |
| if thread_url.strip(): |
| with st.spinner("Analyzing thread..."): |
| |
| headers = { |
| 'Content-Type': 'application/json', |
| 'Authorization': f'Bearer {auth_token}' |
| } |
|
|
| payload = { |
| "inputs": [ |
| { |
| "name": "url", |
| "shape": [1], |
| "data": [thread_url], |
| "datatype": "BYTES" |
| }, |
| { |
| "name": "temperature", |
| "optional": True, |
| "shape": [1], |
| "data": [0.15], |
| "datatype": "FP64" |
| }, |
| { |
| "name": "top_p", |
| "optional": True, |
| "shape": [1], |
| "data": [1], |
| "datatype": "FP64" |
| }, |
| { |
| "name": "repetition_penalty", |
| "optional": True, |
| "shape": [1], |
| "data": [1], |
| "datatype": "FP64" |
| }, |
| { |
| "name": "top_k", |
| "optional": True, |
| "shape": [1], |
| "data": [-1], |
| "datatype": "INT32" |
| }, |
| { |
| "name": "max_tokens", |
| "optional": True, |
| "shape": [1], |
| "data": [1024], |
| "datatype": "INT32" |
| }, |
| { |
| "name": "seed", |
| "optional": True, |
| "shape": [1], |
| "data": [4424234], |
| "datatype": "INT32" |
| } |
| ] |
| } |
|
|
| |
| |
| |
| try: |
| |
| response = requests.post(api_url, headers=headers, json=payload,timeout=300) |
| response.raise_for_status() |
|
|
| |
| data = response.json() |
| summary_text = data["outputs"][0]["data"][0] |
|
|
| |
| st.markdown("### Summary") |
| st.write(summary_text) |
|
|
| except requests.exceptions.RequestException as e: |
| st.error(f"Error calling the model API: {e}") |
| else: |
| st.error("Please enter a valid URL.") |