Spaces:
Runtime error
Runtime error
| from typing import List, Dict, Optional | |
| from langchain_ollama import ChatOllama | |
| from langchain_core.messages import HumanMessage, AIMessage | |
| from langchain_core.prompts import ChatPromptTemplate | |
| class LLMChat: | |
| def __init__(self, model_name: str = "llama3.2", temperature: float = 0): | |
| """ | |
| Initialize LLMChat with LangChain ChatOllama | |
| Args: | |
| model_name (str): Name of the model to use | |
| temperature (float): Temperature parameter for response generation | |
| """ | |
| self.model_name = model_name | |
| self.llm = ChatOllama( | |
| model=model_name, | |
| temperature=temperature | |
| ) | |
| self.history: List[Dict[str, str]] = [] | |
| def chat_once(self, message: str): | |
| """ | |
| Single chat interaction without maintaining history | |
| Args: | |
| message (str): User input message | |
| Returns: | |
| str: Model's response | |
| """ | |
| try: | |
| # Create a simple prompt template for single messages | |
| prompt = ChatPromptTemplate.from_messages([ | |
| ("human", "{input}") | |
| ]) | |
| # Create and invoke the chain | |
| chain = prompt | self.llm | |
| response = chain.invoke({"input": message}) | |
| return response.content | |
| except Exception as e: | |
| print(f"Error in chat: {e}") | |
| return "" | |
| def chat_with_history(self, message: str): | |
| """ | |
| Chat interaction maintaining conversation history | |
| Args: | |
| message (str): User input message | |
| Returns: | |
| str: Model's response | |
| """ | |
| try: | |
| # Add user message to history | |
| self.history.append({'role': 'human', 'content': message}) | |
| # Convert history to LangChain message format | |
| messages = [ | |
| HumanMessage(content=msg['content']) if msg['role'] == 'human' | |
| else AIMessage(content=msg['content']) | |
| for msg in self.history | |
| ] | |
| # Get response using chat method | |
| response = self.llm.invoke(messages) | |
| assistant_message = response.content | |
| # Add assistant response to history | |
| self.history.append({'role': 'assistant', 'content': assistant_message}) | |
| return assistant_message | |
| except Exception as e: | |
| print(f"Error in chat with history: {e}") | |
| return "" | |
| def chat_with_template(self, template_messages: List[Dict[str, str]], | |
| input_variables: Dict[str, str]): | |
| """ | |
| Chat using a custom template | |
| Args: | |
| template_messages (List[Dict[str, str]]): List of template messages | |
| input_variables (Dict[str, str]): Variables to fill in the template | |
| Returns: | |
| str: Model's response | |
| """ | |
| try: | |
| # Create prompt template from messages | |
| prompt = ChatPromptTemplate.from_messages([ | |
| (msg['role'], msg['content']) | |
| for msg in template_messages | |
| ]) | |
| # Create and invoke the chain | |
| chain = prompt | self.llm | |
| response = chain.invoke(input_variables) | |
| return response.content | |
| except Exception as e: | |
| print(f"Error in template chat: {e}") | |
| return "" | |
| def clear_history(self): | |
| """Clear the conversation history""" | |
| self.history = [] | |
| def get_history(self) -> List[Dict[str, str]]: | |
| """Return the current conversation history""" | |
| return self.history | |
| if __name__ == "__main__": | |
| # Initialize the chat | |
| chat = LLMChat(model_name="llama3.1", temperature=0) | |
| # Example of using a template for translation | |
| template_messages = [ | |
| { | |
| "role": "system", | |
| "content": "You are a helpful assistant that translates {input_language} to {output_language}." | |
| }, | |
| { | |
| "role": "human", | |
| "content": "{input}" | |
| } | |
| ] | |
| input_vars = { | |
| "input_language": "English", | |
| "output_language": "German", | |
| "input": "I love programming." | |
| } | |
| response = chat.chat_with_template(template_messages, input_vars) | |
| # Simple chat without history | |
| response = chat.chat_once("Hello!") | |
| # Chat with history | |
| response = chat.chat_with_history("How are you?") |