CODEFUSSION / app.py
sainathBelagavi's picture
Update app.py
29300ad verified
import streamlit as st
from huggingface_hub import InferenceClient
import os
import pickle
st.title("Transcription Summarization")
# Base URL and API Key
API_KEY = os.environ.get('HUGGINGFACE_API_KEY')
BASE_URL = "https://api-inference.huggingface.co/models/"
model_links = {
"LegacyLift🚀": BASE_URL + "Qwen/QwQ-32B-Preview",
"ModernMigrate⭐": BASE_URL + "mistralai/Mixtral-8x7B-Instruct-v0.1",
"RetroRecode🔄": BASE_URL + "microsoft/Phi-3-mini-4k-instruct"
}
model_info = {
"LegacyLift🚀": {
'description': "The LegacyLift model is a **Large Language Model (LLM)** for problem-solving, content writing, and daily tips.",
'logo': './11.jpg'
},
"ModernMigrate⭐": {
'description': "The ModernMigrate model excels in coding, logical reasoning, and high-speed inference.",
'logo': './2.jpg'
},
"RetroRecode🔄": {
'description': "The RetroRecode is ideal for critical development, practical knowledge, and serverless inference.",
'logo': './3.jpg'
},
}
# Function Definitions
def format_prompt(message, conversation_history, custom_instructions=None):
"""Formats the input prompt."""
prompt = f"\[INST\] {custom_instructions} \[/INST\]\n\[CONV_HISTORY\]\n"
for role, content in conversation_history:
prompt += f"{role.upper()}: {content}\n"
prompt += f"\[/CONV_HISTORY\]\n\[INST\] {message} \[/INST\]\n\[RESPONSE\]\n"
return prompt
def reset_conversation():
"""Resets the conversation."""
st.session_state.conversation = []
st.session_state.messages = []
st.session_state.chat_state = "reset"
def load_conversation_history():
"""Loads conversation history from a file."""
history_file = "conversation_history.pickle"
return pickle.load(open(history_file, "rb")) if os.path.exists(history_file) else []
def save_conversation_history(conversation_history):
"""Saves conversation history to a file."""
with open("conversation_history.pickle", "wb") as f:
pickle.dump(conversation_history, f)
# Sidebar UI
models = list(model_links.keys())
selected_model = st.sidebar.selectbox("Select Model", models)
temp_values = st.sidebar.slider('Select Temperature', 0.0, 1.0, 0.5)
st.sidebar.button('Reset Chat', on_click=reset_conversation)
st.sidebar.write(f"Chatting with **{selected_model}**")
st.sidebar.markdown(model_info[selected_model]['description'])
st.sidebar.image(model_info[selected_model]['logo'])
# Load session state
if "prev_option" not in st.session_state:
st.session_state.prev_option = selected_model
if st.session_state.prev_option != selected_model:
st.session_state.messages = []
st.session_state.prev_option = selected_model
if "chat_state" not in st.session_state:
st.session_state.chat_state = "normal"
# Load conversation history
if "messages" not in st.session_state:
st.session_state.messages = load_conversation_history()
# Main Chat
repo_id = model_links[selected_model]
st.subheader(f"{selected_model}")
if st.session_state.chat_state == "normal":
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])
if prompt := st.chat_input(f"Hi I'm {selected_model}, How can I help you today?"):
custom_instruction = (
"Analyze this transcript with precision. Remove commas in claim numbers, preserve exact numbers and "
"dates (dd/mm/yy). Extract claim numbers as single entities."
"""1. Only include information explicitly stated
2. Mark unclear information as "UNCLEAR"
3. Preserve exact numbers, dates (in dd/mm/yy format), and claims
4. Focus on factual content
IMPORTANT REQUIREMENTS:
- Format all dates as dd/mm/yy
- Extract and list all claim numbers mentioned
- Maintain exact numbers and statistics as stated
- Do not make assumptions about unclear information
Please analyze the following transcript and structure your response as follows:
PARTICIPANTS:
- List all participants and their roles (if mentioned)
CONTEXT:
- Meeting purpose
- Duration (if mentioned)
- Meeting date/time
KEY POINTS:
- Main topics discussed
- Decisions made
- Important numbers/metrics mentioned
- Claims discussed
ACTION ITEMS:
- Specific tasks assigned
- Who is responsible
- Deadlines (in dd/mm/yy format)
FOLLOW UP:
- Scheduled next meetings
- Pending items
- Required approvals or confirmations"""
)
conversation_history = [(msg["role"], msg["content"]) for msg in st.session_state.messages]
formatted_text = format_prompt(prompt, conversation_history, custom_instruction)
with st.chat_message("user"):
st.markdown(prompt)
st.session_state.messages.append({"role": "user", "content": prompt})
with st.chat_message("assistant"):
try:
client = InferenceClient(model=repo_id)
response = client.text_generation(
formatted_text,
temperature=temp_values,
max_new_tokens=1024,
stream=True
)
response_text = ''.join(response) # Collect and concatenate the response
response_text = response_text.replace(",", "") # Remove commas in claim numbers
st.markdown(response_text)
st.session_state.messages.append({"role": "assistant", "content": response_text})
save_conversation_history(st.session_state.messages)
except Exception as e:
st.error(f"An error occurred: {e}")
elif st.session_state.chat_state == "reset":
st.session_state.chat_state = "normal"
st.experimental_rerun()