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)}")