| from dataclasses import dataclass |
|
|
| from llama_cpp import Llama |
| from llama_cpp import ChatCompletionRequestMessage as Message |
| from llama_cpp import ChatCompletionRequestSystemMessage as SystemMessage |
| from llama_cpp import ChatCompletionRequestAssistantMessage as AssistantMessage |
| from llama_cpp import ChatCompletionRequestUserMessage as UserMessage |
|
|
|
|
| @dataclass |
| class MessageRole: |
| ASSISTANT: str = "assistant" |
| SYSTEM: str = "system" |
| USER: str = "user" |
| EXIT: str = "exit" |
|
|
|
|
| class ConversationHandler: |
| def __init__(self, model: Llama, message_role: MessageRole) -> None: |
| self.model: Llama = model |
| self.message_role = message_role |
| self.messages: list[Message] = [ |
| SystemMessage( |
| role=self.message_role.SYSTEM, |
| content='You are a helpful developer assistant, answer all the questions correctly and concisely.' |
| ), |
| AssistantMessage(role=self.message_role.ASSISTANT, content='Hello, do you have any question?'), |
| ] |
|
|
| def send_message(self, content: str): |
| new_message = UserMessage(role=self.message_role.USER, content=content) |
| self.messages.append(new_message) |
|
|
| def generate_reply(self) -> str: |
| response = self.model.create_chat_completion( |
| messages=self.messages, |
| temperature=0.7, |
| top_p=0.9, |
| top_k=20, |
| max_tokens=128 |
| ) |
|
|
| response_content = response['choices'][0]['message'] |
| self.messages.append(AssistantMessage(role=self.message_role.ASSISTANT, content=response_content)) |
|
|
| return response_content |
|
|