Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder | |
| from langchain_core.messages import trim_messages | |
| from langgraph.graph import START, MessagesState, StateGraph | |
| from langgraph.checkpoint.memory import MemorySaver | |
| from langchain_core.messages import HumanMessage, AIMessage, SystemMessage | |
| from langchain_huggingface import ChatHuggingFace, HuggingFaceEndpoint | |
| llm = HuggingFaceEndpoint( | |
| repo_id="meta-llama/Llama-3.2-3B-Instruct", | |
| max_new_tokens=512, | |
| temperature=0.7, | |
| ) | |
| model = ChatHuggingFace(llm=llm) | |
| # Define message trimmer | |
| trimmer = trim_messages( | |
| max_tokens=8192, | |
| strategy="last", | |
| token_counter=model, | |
| include_system=True, | |
| allow_partial=False, | |
| start_on="human", | |
| ) | |
| # Define the workflow | |
| workflow = StateGraph(state_schema=MessagesState) | |
| app = workflow.compile(checkpointer=MemorySaver()) | |
| config = {"configurable": {"thread_id": "abc123"}} | |
| # Function to handle chat interaction | |
| def chat_fn(system_prompt, user_input, history): | |
| if history is None: | |
| history = [] | |
| # Append user input | |
| history.append((user_input, "")) | |
| # Build messages for the model | |
| messages = [SystemMessage(system_prompt)] | |
| for user_msg, assistant_msg in history[:-1]: | |
| messages.append(HumanMessage(user_msg)) | |
| messages.append(AIMessage(assistant_msg)) | |
| messages.append(HumanMessage(user_input)) | |
| # Trim messages | |
| trimmed_messages = trimmer.invoke(messages) | |
| # Create prompt template with current system prompt | |
| prompt_template = ChatPromptTemplate.from_messages( | |
| [ | |
| ("system", system_prompt), | |
| MessagesPlaceholder(variable_name="messages"), | |
| ] | |
| ) | |
| # Prepare the prompt | |
| prompt = prompt_template.invoke(trimmed_messages) | |
| # Call the model | |
| response = model.invoke(prompt) | |
| # Get assistant's reply | |
| print(response) | |
| # assistant_reply = response["messages"][-1].content | |
| assistant_reply = response.content | |
| # Update history with assistant's reply | |
| history[-1] = (user_input, assistant_reply) | |
| return history, history | |
| # Build Gradio interface | |
| with gr.Blocks() as demo: | |
| system_prompt = gr.Textbox( | |
| value="You talk like a pirate. Answer all questions to the best of your ability.", | |
| label="System Prompt", | |
| lines=2, | |
| ) | |
| chatbot = gr.Chatbot() | |
| state = gr.State() | |
| with gr.Row(): | |
| user_input = gr.Textbox( | |
| show_label=False, | |
| placeholder="Enter your message", | |
| container=False, # Moved 'container' parameter here | |
| ) | |
| send_button = gr.Button("Send") | |
| # Define interaction | |
| def user_message(_): | |
| return "", "" | |
| send_button.click( | |
| fn=chat_fn, | |
| inputs=[system_prompt, user_input, state], | |
| outputs=[chatbot, state], | |
| ) | |
| user_input.submit( | |
| fn=chat_fn, | |
| inputs=[system_prompt, user_input, state], | |
| outputs=[chatbot, state], | |
| ) | |
| if __name__ == '__main__': | |
| demo.launch(share=True, ssr_mode=False) | |