hjawwad456's picture
make styles important
0f03dc6
import json
import os
import requests
def get_transcript_for_url(url: str) -> dict:
"""
This function fetches the transcript data for a signed URL.
If the URL results in a direct download, it processes the downloaded content.
:param url: Signed URL for the JSON file
:return: Parsed JSON data as a dictionary
"""
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}
try:
response = requests.get(url, headers=headers)
response.raise_for_status()
if "application/json" in response.headers.get("Content-Type", ""):
return response.json() # Parse and return JSON directly
# If not JSON, assume it's a file download (e.g., content-disposition header)
content_disposition = response.headers.get("Content-Disposition", "")
if "attachment" in content_disposition:
# Process the content as JSON
return json.loads(response.content)
return json.loads(response.content)
except requests.exceptions.HTTPError as http_err:
print(f"HTTP error occurred: {http_err}")
except requests.exceptions.RequestException as req_err:
print(f"Request error occurred: {req_err}")
except json.JSONDecodeError as json_err:
print(f"JSON decoding error: {json_err}")
return {}
def setup_openai_key() -> None:
"""Set up OpenAI API key from file."""
try:
with open("api.key", "r") as f:
os.environ["OPENAI_API_KEY"] = f.read().strip()
except FileNotFoundError:
print("Using ENV variable")
openai_tools = [
{
"type": "function",
"function": {
"name": "correct_speaker_name_with_url",
"description": "If a User provides a link to Agenda file, call the correct_speaker_name_with_url function to correct the speaker names based on the url, i.e if a user says 'Here is the Luma link for the event' and provides a link to the event, the function will correct the speaker names based on the event.",
"parameters": {
"type": "object",
"properties": {
"url": {"type": "string", "description": "The url to the agenda."}
},
"required": ["url"],
"additionalProperties": False,
},
},
},
{
"type": "function",
"function": {
"name": "correct_call_type",
"description": "If the user tells you the correct call type, you have to apologize and call this function with correct call type.",
"parameters": {
"type": "object",
"properties": {
"call_type": {
"type": "string",
"description": "The correct call type. If street interview, call type is 'si'.",
}
},
"required": ["call_type"],
"additionalProperties": False,
},
},
},
{
"type": "function",
"function": {
"name": "get_image",
"description": "If the user asks you to show crops, you need to call this function",
"parameters": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": False,
},
},
},
]
css = """
.gradio-container {
padding-top: 0px !important;
padding-left: 0px !important;
padding-right: 0px !important;
padding: 0px !important;
margin: 0px !important;
}
#component-0 {
gap: 0px !important;
}
.icon-button-wrapper button[title="Clear"] {
display: none !important;
}
.image-preview .icon-button-wrapper {
display: block !important;
}
.image-preview .icon-button-wrapper button[title="Clear"] {
display: block !important;
}
.download-link {
display: none !important;
}
footer {
display: none !important;
}
#chatbot_box{
flex-grow: 1 !important;
border-width: 0px !important;
}
#link-frame {
position: absolute !important;
width: 1px !important;
height: 1px !important;
right: -100px !important;
bottom: -100px !important;
display: none !important;
}
.html-container {
display: none !important;
}
a {
text-decoration: none !important;
}
#topic {
color: #999 !important;
}
.bubble-wrap {
padding-top: 0px !important;
}
.message-content {
border: 0px !important;
margin: 5px !important;
}
.message-row {
border-style: none !important;
margin: 0px !important;
width: 100% !important;
max-width: 100% !important;
}
.flex-wrap {
border-style: none !important;
}
.panel-full-width {
border-style: none !important;
border-width: 0px !important;
}
ol {
list-style-position: outside;
margin-left: 20px;
}
body.waiting * {
cursor: progress;
}
"""
head = f"""
<script defer src="https://www.gstatic.com/firebasejs/11.1.0/firebase-firestore.js"></script>
<script type="module">
// Import the functions you need from the SDKs you need
import {{ initializeApp }} from "https://www.gstatic.com/firebasejs/11.1.0/firebase-app.js";
import {{ getDatabase, ref, set }} from "https://www.gstatic.com/firebasejs/11.1.0/firebase-database.js";
// TODO: Add SDKs for Firebase products that you want to use
// https://firebase.google.com/docs/web/setup#available-libraries
console.log("Initializing Firebase");
// Your web app's Firebase configuration
// For Firebase JS SDK v7.20.0 and later, measurementId is optional
const firebaseConfig = {{
apiKey: "{os.getenv('FIREBASE_API_KEY')}",
authDomain: "{os.getenv('FIREBASE_AUTH_DOMAIN')}",
databaseURL: "{os.getenv('FIREBASE_DATABASE_URL')}",
projectId: "{os.getenv('FIREBASE_PROJECT_ID')}",
storageBucket: "{os.getenv('FIREBASE_STORAGE_BUCKET')}",
messagingSenderId: "{os.getenv('FIREBASE_MESSAGING_SENDER_ID')}",
appId: "{os.getenv('FIREBASE_APP_ID')}",
measurementId: "{os.getenv('FIREBASE_MEASUREMENT_ID')}"
}};
// Initialize Firebase
const app = initializeApp(firebaseConfig);
const realtimeDB = getDatabase(app);
const rollAccount = "{os.getenv('ROLL_ACCOUNT')}";
const COLLECTIONS = {{
COLLAB_EDIT_LINK: "collab_link_handler",
}};
// Event listener for click
document.addEventListener('click', function (event) {{
var link = event.target.closest('a');
event.preventDefault();
if (link && link.href) {{
// Parse the URL to extract 'st' and 'et'
const url = new URL(link.href);
const startTime = url.searchParams.get('st');
const endTime = url.searchParams.get('et');
const userId = url.searchParams.get('uid') || "";
if (startTime || endTime) {{
let components = url.pathname.split("/");
let callId = components[2];
let recordingSessionId = components[3];
let data = {{
startTime: parseInt(startTime, 10),
endTime: parseInt(endTime, 10),
}};
console.log("Data to save:", data);
// Firebase reference
let reference = ref(
realtimeDB,
`${{rollAccount}}/${{COLLECTIONS.COLLAB_EDIT_LINK}}/${{userId}}/${{callId}}/${{recordingSessionId}}`
);
set(reference, data)
.then(() => {{
console.log("Data saved successfully:", data);
}})
.catch((error) => {{
console.error("Error saving data:", error);
}});
}}
}}
}});
</script>
"""