|
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 |
|
|