|
import re |
|
import math |
|
|
|
from datetime import datetime |
|
from typing import Optional |
|
|
|
|
|
def prompt_template( |
|
template: str, user_name: str = None, user_location: str = None |
|
) -> str: |
|
|
|
current_date = datetime.now() |
|
|
|
|
|
formatted_date = current_date.strftime("%Y-%m-%d") |
|
formatted_time = current_date.strftime("%I:%M:%S %p") |
|
|
|
template = template.replace("{{CURRENT_DATE}}", formatted_date) |
|
template = template.replace("{{CURRENT_TIME}}", formatted_time) |
|
template = template.replace( |
|
"{{CURRENT_DATETIME}}", f"{formatted_date} {formatted_time}" |
|
) |
|
|
|
if user_name: |
|
|
|
template = template.replace("{{USER_NAME}}", user_name) |
|
else: |
|
|
|
template = template.replace("{{USER_NAME}}", "Unknown") |
|
|
|
if user_location: |
|
|
|
template = template.replace("{{USER_LOCATION}}", user_location) |
|
else: |
|
|
|
template = template.replace("{{USER_LOCATION}}", "Unknown") |
|
|
|
return template |
|
|
|
|
|
def title_generation_template( |
|
template: str, prompt: str, user: Optional[dict] = None |
|
) -> str: |
|
def replacement_function(match): |
|
full_match = match.group(0) |
|
start_length = match.group(1) |
|
end_length = match.group(2) |
|
middle_length = match.group(3) |
|
|
|
if full_match == "{{prompt}}": |
|
return prompt |
|
elif start_length is not None: |
|
return prompt[: int(start_length)] |
|
elif end_length is not None: |
|
return prompt[-int(end_length) :] |
|
elif middle_length is not None: |
|
middle_length = int(middle_length) |
|
if len(prompt) <= middle_length: |
|
return prompt |
|
start = prompt[: math.ceil(middle_length / 2)] |
|
end = prompt[-math.floor(middle_length / 2) :] |
|
return f"{start}...{end}" |
|
return "" |
|
|
|
template = re.sub( |
|
r"{{prompt}}|{{prompt:start:(\d+)}}|{{prompt:end:(\d+)}}|{{prompt:middletruncate:(\d+)}}", |
|
replacement_function, |
|
template, |
|
) |
|
|
|
template = prompt_template( |
|
template, |
|
**( |
|
{"user_name": user.get("name"), "user_location": user.get("location")} |
|
if user |
|
else {} |
|
), |
|
) |
|
|
|
return template |
|
|
|
|
|
def search_query_generation_template( |
|
template: str, prompt: str, user: Optional[dict] = None |
|
) -> str: |
|
|
|
def replacement_function(match): |
|
full_match = match.group(0) |
|
start_length = match.group(1) |
|
end_length = match.group(2) |
|
middle_length = match.group(3) |
|
|
|
if full_match == "{{prompt}}": |
|
return prompt |
|
elif start_length is not None: |
|
return prompt[: int(start_length)] |
|
elif end_length is not None: |
|
return prompt[-int(end_length) :] |
|
elif middle_length is not None: |
|
middle_length = int(middle_length) |
|
if len(prompt) <= middle_length: |
|
return prompt |
|
start = prompt[: math.ceil(middle_length / 2)] |
|
end = prompt[-math.floor(middle_length / 2) :] |
|
return f"{start}...{end}" |
|
return "" |
|
|
|
template = re.sub( |
|
r"{{prompt}}|{{prompt:start:(\d+)}}|{{prompt:end:(\d+)}}|{{prompt:middletruncate:(\d+)}}", |
|
replacement_function, |
|
template, |
|
) |
|
|
|
template = prompt_template( |
|
template, |
|
**( |
|
{"user_name": user.get("name"), "user_location": user.get("location")} |
|
if user |
|
else {} |
|
), |
|
) |
|
return template |
|
|
|
|
|
def tools_function_calling_generation_template(template: str, tools_specs: str) -> str: |
|
template = template.replace("{{TOOLS}}", tools_specs) |
|
return template |
|
|