File size: 4,559 Bytes
14415d3
 
 
3010e69
 
14415d3
3010e69
14415d3
 
 
 
 
3010e69
 
 
14415d3
 
 
 
3010e69
cef0a6e
14415d3
 
3010e69
cef0a6e
14415d3
 
3010e69
cef0a6e
14415d3
 
 
3010e69
14415d3
 
3010e69
ac15cea
3010e69
 
ac15cea
 
3010e69
 
 
 
ac15cea
14415d3
 
 
 
 
 
3010e69
14415d3
0f971cd
14415d3
 
 
3010e69
 
14415d3
 
 
 
3010e69
 
1d0c268
d249eac
 
 
14415d3
 
 
 
0f971cd
 
 
1c2e9be
3010e69
14415d3
 
 
 
 
 
1d0c268
14415d3
 
 
ac15cea
14415d3
3010e69
 
 
ac15cea
3010e69
 
 
1d4d8a6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
from huggingface_hub import InferenceClient
import os
import sys
import pickle

st.title("CODEFUSSION ☄")

base_url = "https://api-inference.huggingface.co/models/"
API_KEY = os.environ.get('HUGGINGFACE_API_KEY')

model_links = {
    "LegacyLift🚀": base_url + "mistralai/Mistral-7B-Instruct-v0.2",
    "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)** that's able to have question and answer interactions.\n \n\nThis model is best for minimal problem-solving, content writing, and daily tips.\n""",
        'logo': './11.jpg'
    },
    "ModernMigrate⭐": {
        'description': """The ModernMigrate model is a **Large Language Model (LLM)** that's able to have question and answer interactions.\n \n\nThis model excels in coding, logical reasoning, and high-speed inference. \n""",
        'logo': './2.jpg'
    },
    "RetroRecode🔄": {
        'description': """The RetroRecode model is a **Large Language Model (LLM)** that's able to have question and answer interactions.\n \n\nThis model is best suited for critical development, practical knowledge, and serverless inference.\n""",
        'logo': './3.jpg'
    },
}

def format_promt(message, conversation_history, custom_instructions=None):
    prompt = ""
    if custom_instructions:
        prompt += f"\[INST\] {custom_instructions} \[/INST\]"
    
    # Add conversation history to the prompt
    prompt += "\[CONV_HISTORY\]\n"
    for role, content in conversation_history:
        prompt += f"{role.upper()}: {content}\n"
    prompt += "\[/CONV_HISTORY\]"
    
    # Add the current message
    prompt += f"\[INST\] {message} \[/INST\]"
    
    return prompt

def reset_conversation():
    '''
    Resets Conversation
    '''
    st.session_state.conversation = []
    st.session_state.messages = []
    st.experimental_rerun()  # Add this line to rerun the app after reset

models = [key for key in model_links.keys()]
selected_model = st.sidebar.selectbox("Select Model", models)
temp_values = st.sidebar.slider('Select a temperature value', 0.0, 1.0, (0.5))
st.sidebar.button('Reset Chat', on_click=reset_conversation)  # Reset button

st.sidebar.write(f"You're now chatting with **{selected_model}**")
st.sidebar.markdown(model_info[selected_model]['description'])
st.sidebar.image(model_info[selected_model]['logo'])

st.sidebar.markdown("\*Generating the code might go slow if you are using low power resources \*")

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

# Load the conversation history from the file
if "messages" not in st.session_state:
    st.session_state.messages = load_conversation_history()

repo_id = model_links[selected_model]
st.subheader(f'{selected_model}')

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 = "Act like a Human in conversation"
    with st.chat_message("user"):
        st.markdown(prompt)
    
    st.session_state.messages.append({"role": "user", "content": prompt})
    conversation_history = [(message["role"], message["content"]) for message in st.session_state.messages]
    
    formated_text = format_promt(prompt, conversation_history, custom_instruction)
    
    with st.chat_message("assistant"):
        client = InferenceClient(
            model=model_links[selected_model], )
        max_new_tokens = 2048  # Adjust this value as needed
        try:
            output = client.text_generation(
                formated_text,
                temperature=temp_values,
                max_new_tokens=max_new_tokens,
                stream=True
            )
            response = st.write_stream(output)
        except ValueError as e:
            if "Input validation error" in str(e):
                st.error("Error: The input prompt is too long. Please try a shorter prompt.")
            else:
                st.error(f"An error occurred: {e}")
        else:
            st.session_state.messages.append({"role": "assistant", "content": response})
            save_conversation_history(st.session_state.messages)