Source code for mlflow.genai.optimize.optimizers.utils.dspy_optimizer_utils
from typing import TYPE_CHECKING, Any
from mlflow.utils.annotations import experimental
if TYPE_CHECKING:
import dspy
[docs]@experimental(version="3.3.0")
def format_dspy_prompt(
program: "dspy.Predict",
convert_to_single_text: bool,
) -> dict[str, Any] | str:
import dspy
signature = program.signature
messages = dspy.settings.adapter.format(
signature=signature,
demos=program.demos,
inputs={key: "{{" + key + "}}" for key in signature.input_fields.keys()},
)
if convert_to_single_text:
messages = "\n\n".join(
[
f"<{message['role']}>\n{message['content']}\n</{message['role']}>"
for message in messages
]
)
return messages