File size: 4,498 Bytes
53ebdb4 55d7a69 53ebdb4 c58522e 53ebdb4 6717f78 91b84ec 53ebdb4 8aca25e 53ebdb4 c58522e 53ebdb4 c58522e 53ebdb4 5fab7fe ebfe731 53ebdb4 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
import streamlit as st
import requests
import logging
# Configure logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# Page configuration
st.set_page_config(
page_title="",
page_icon="",
layout="centered"
)
# Initialize session state for chat history
if "messages" not in st.session_state:
st.session_state.messages = []
# Sidebar configuration
with st.sidebar:
#st.header("Model Configuration")
#st.markdown("[Get HuggingFace Token](https://huggingface.co./settings/tokens)")
# Dropdown to select model
model_options = [
"deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B",
"deepseek-ai/DeepSeek-R1",
#"deepseek-ai/DeepSeek-R1-Distill-Qwen-14B",
#"migueldeguzmandev/paperclippetertodd3",
#"migueldeguzmandev/RLLMv3.2-10",
]
selected_model = st.selectbox("Select Model", model_options, index=0)
system_message = st.text_area(
"System Message",
value="",
height=100
)
max_tokens = st.slider(
"Max Tokens",
10, 4000, 100
)
temperature = st.slider(
"Temperature",
0.1, 4.0, 0.3
)
top_p = st.slider(
"Top-p",
0.1, 1.0, 0.6
)
# Function to query the Hugging Face API
def query(payload, api_url):
#headers = {"Authorization": f"Bearer {st.secrets['HF_TOKEN']}"}
logger.info(f"Sending request to {api_url} with payload: {payload}")
response = requests.post(api_url, json=payload) #headers=headers,
logger.info(f"Received response: {response.status_code}, {response.text}")
try:
return response.json()
except requests.exceptions.JSONDecodeError:
logger.error(f"Failed to decode JSON response: {response.text}")
return None
# Chat interface
st.title("deepseek-build...")
st.caption("")
# Display chat history
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])
# Handle input
if prompt := st.chat_input("Type your message..."):
st.session_state.messages.append({"role": "user", "content": prompt})
with st.chat_message("user"):
st.markdown(prompt)
try:
with st.spinner("Generating response..."):
# Prepare the payload for the API
# Combine system message and user input into a single prompt
full_prompt = f"{system_message}\n\nUser: {prompt}\nAssistant:"
payload = {
"inputs": full_prompt,
"parameters": {
"max_new_tokens": max_tokens,
"temperature": temperature,
"top_p": top_p,
"return_full_text": False
}
}
# Dynamically construct the API URL based on the selected model
api_url = f"https://api-inference.huggingface.co/models/{selected_model}"
logger.info(f"Selected model: {selected_model}, API URL: {api_url}")
# Query the Hugging Face API using the selected model
output = query(payload, api_url)
# Handle API response
if output is not None and isinstance(output, list) and len(output) > 0:
if 'generated_text' in output[0]:
# Extract the assistant's response
assistant_response = output[0]['generated_text'].strip()
# Check for and remove duplicate responses
responses = assistant_response.split("\n</think>\n")
unique_response = responses[0].strip()
logger.info(f"Generated response: {unique_response}")
# Append response to chat only once
with st.chat_message("assistant"):
st.markdown(unique_response)
st.session_state.messages.append({"role": "assistant", "content": unique_response})
else:
logger.error(f"Unexpected API response structure: {output}")
st.error("Error: Unexpected response from the model. Please try again.")
else:
logger.error(f"Empty or invalid API response: {output}")
st.error("Error: Unable to generate a response. Please check the model and try again.")
except Exception as e:
logger.error(f"Application Error: {str(e)}", exc_info=True)
st.error(f"Application Error: {str(e)}")
|