Chat prompt
ChatPrompt
¶
Bases: Prompt
Source code in agentuniverse/prompt/chat_prompt.py
Python
class ChatPrompt(Prompt):
messages: List[Message] = []
def as_langchain(self) -> ChatPromptTemplate:
return ChatPromptTemplate.from_messages(Message.as_langchain_list(self.messages))
def build_prompt(self, agent_prompt_model: AgentPromptModel, prompt_assemble_order: list[str]) -> 'ChatPrompt':
"""Build the prompt class.
Args:
agent_prompt_model (AgentPromptModel): The user agent prompt model.
prompt_assemble_order (list[str]): The prompt assemble ordered list.
Returns:
ChatPrompt: The chat prompt object.
"""
self.messages = generate_chat_template(agent_prompt_model, prompt_assemble_order)
self.input_variables = self.extract_placeholders()
return self
def extract_placeholders(self) -> List[str]:
"""Extract the placeholders from the messages.
Returns:
List[str]: The placeholders list.
"""
result = []
placeholder_pattern = re.compile(r'\{(.*?)}')
for message in self.messages:
matches = placeholder_pattern.findall(message.content)
result.extend(matches)
return result
def generate_image_prompt(self, image_urls: list[str]) -> None:
""" Generate the prompt with image urls.
Args:
image_urls (list[str]): The image urls.
"""
if image_urls:
for image_url in image_urls:
parsed_url = urlparse(image_url)
# Check if the URL is a valid HTTP or HTTPS URL.
if parsed_url.scheme in ["http", "https"]:
content = [{"type": "image_url", "image_url": {"url": image_url}}]
self.messages.append(Message(type=ChatMessageEnum.HUMAN.value, content=content))
# Check if the URL is a local file.
elif parsed_url.scheme == "file" or not parsed_url.scheme:
if parsed_url.path.lower().endswith(image_extensions):
with open(parsed_url.path, "rb") as image_file:
base64_image = base64.b64encode(image_file.read()).decode(
"utf-8",
)
extension = parsed_url.path.lower().split(".")[-1]
mime_type = f"image/{extension}"
content = [
{"type": "image_url", "image_url": {"url": f"data:{mime_type};base64,{base64_image}"}}]
self.messages.append(Message(type=ChatMessageEnum.HUMAN.value, content=content))
build_prompt(agent_prompt_model, prompt_assemble_order)
¶
Build the prompt class.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
agent_prompt_model |
AgentPromptModel
|
The user agent prompt model. |
required |
prompt_assemble_order |
list[str]
|
The prompt assemble ordered list. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
ChatPrompt |
ChatPrompt
|
The chat prompt object. |
Source code in agentuniverse/prompt/chat_prompt.py
Python
def build_prompt(self, agent_prompt_model: AgentPromptModel, prompt_assemble_order: list[str]) -> 'ChatPrompt':
"""Build the prompt class.
Args:
agent_prompt_model (AgentPromptModel): The user agent prompt model.
prompt_assemble_order (list[str]): The prompt assemble ordered list.
Returns:
ChatPrompt: The chat prompt object.
"""
self.messages = generate_chat_template(agent_prompt_model, prompt_assemble_order)
self.input_variables = self.extract_placeholders()
return self
extract_placeholders()
¶
Extract the placeholders from the messages.
Returns:
| Type | Description |
|---|---|
List[str]
|
List[str]: The placeholders list. |
Source code in agentuniverse/prompt/chat_prompt.py
Python
def extract_placeholders(self) -> List[str]:
"""Extract the placeholders from the messages.
Returns:
List[str]: The placeholders list.
"""
result = []
placeholder_pattern = re.compile(r'\{(.*?)}')
for message in self.messages:
matches = placeholder_pattern.findall(message.content)
result.extend(matches)
return result
generate_image_prompt(image_urls)
¶
Generate the prompt with image urls.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
image_urls |
list[str]
|
The image urls. |
required |
Source code in agentuniverse/prompt/chat_prompt.py
Python
def generate_image_prompt(self, image_urls: list[str]) -> None:
""" Generate the prompt with image urls.
Args:
image_urls (list[str]): The image urls.
"""
if image_urls:
for image_url in image_urls:
parsed_url = urlparse(image_url)
# Check if the URL is a valid HTTP or HTTPS URL.
if parsed_url.scheme in ["http", "https"]:
content = [{"type": "image_url", "image_url": {"url": image_url}}]
self.messages.append(Message(type=ChatMessageEnum.HUMAN.value, content=content))
# Check if the URL is a local file.
elif parsed_url.scheme == "file" or not parsed_url.scheme:
if parsed_url.path.lower().endswith(image_extensions):
with open(parsed_url.path, "rb") as image_file:
base64_image = base64.b64encode(image_file.read()).decode(
"utf-8",
)
extension = parsed_url.path.lower().split(".")[-1]
mime_type = f"image/{extension}"
content = [
{"type": "image_url", "image_url": {"url": f"data:{mime_type};base64,{base64_image}"}}]
self.messages.append(Message(type=ChatMessageEnum.HUMAN.value, content=content))