|
import streamlit as st |
|
import requests |
|
import logging |
|
|
|
|
|
logging.basicConfig(level=logging.INFO) |
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
st.set_page_config( |
|
page_title="", |
|
page_icon="", |
|
layout="centered" |
|
) |
|
|
|
|
|
if "messages" not in st.session_state: |
|
st.session_state.messages = [] |
|
|
|
|
|
with st.sidebar: |
|
|
|
|
|
|
|
|
|
model_options = [ |
|
"deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B", |
|
"deepseek-ai/DeepSeek-R1", |
|
|
|
|
|
|
|
] |
|
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 |
|
) |
|
|
|
|
|
def query(payload, api_url): |
|
|
|
logger.info(f"Sending request to {api_url} with payload: {payload}") |
|
response = requests.post(api_url, json=payload) |
|
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 |
|
|
|
|
|
st.title("deepseek-build...") |
|
st.caption("") |
|
|
|
|
|
for message in st.session_state.messages: |
|
with st.chat_message(message["role"]): |
|
st.markdown(message["content"]) |
|
|
|
|
|
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..."): |
|
|
|
|
|
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 |
|
} |
|
} |
|
|
|
|
|
api_url = f"https://api-inference.huggingface.co/models/{selected_model}" |
|
logger.info(f"Selected model: {selected_model}, API URL: {api_url}") |
|
|
|
|
|
output = query(payload, api_url) |
|
|
|
|
|
if output is not None and isinstance(output, list) and len(output) > 0: |
|
if 'generated_text' in output[0]: |
|
|
|
assistant_response = output[0]['generated_text'].strip() |
|
|
|
|
|
responses = assistant_response.split("\n</think>\n") |
|
unique_response = responses[0].strip() |
|
|
|
logger.info(f"Generated response: {unique_response}") |
|
|
|
|
|
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)}") |
|
|