Convert developer messages to user in Perplexity adapter
Perplexity doesn't support the "developer" role. Developer messages are now converted to "user" before other transformations are applied.
This commit is contained in:
@@ -109,6 +109,12 @@ class PerplexityLLMAdapter(OpenAILLMAdapter):
|
||||
|
||||
messages = copy.deepcopy(messages)
|
||||
|
||||
# Step 0: Convert "developer" messages to "user".
|
||||
# Perplexity doesn't support the "developer" role.
|
||||
for msg in messages:
|
||||
if msg.get("role") == "developer":
|
||||
msg["role"] = "user"
|
||||
|
||||
# Step 1: Convert non-initial system messages to "user".
|
||||
# Perplexity allows system messages at the start, but rejects them
|
||||
# after any non-system message.
|
||||
|
||||
@@ -1585,6 +1585,41 @@ class TestPerplexityGetLLMInvocationParams(unittest.TestCase):
|
||||
self.assertEqual(params["messages"][2]["content"], "Sunny, 72F")
|
||||
self.assertEqual(params["messages"][3]["role"], "user")
|
||||
|
||||
def test_developer_message_converted_to_user(self):
|
||||
"""Developer messages are converted to user role."""
|
||||
messages: list[LLMStandardMessage] = [
|
||||
{"role": "developer", "content": "Extra context."},
|
||||
{"role": "assistant", "content": "Hi"},
|
||||
{"role": "user", "content": "Hello"},
|
||||
]
|
||||
|
||||
context = LLMContext(messages=messages)
|
||||
params = self.adapter.get_llm_invocation_params(context)
|
||||
|
||||
self.assertEqual(params["messages"][0]["role"], "user")
|
||||
self.assertEqual(params["messages"][0]["content"], "Extra context.")
|
||||
|
||||
def test_developer_message_merged_with_adjacent_user(self):
|
||||
"""Developer→user conversion merges with adjacent user messages."""
|
||||
messages: list[LLMStandardMessage] = [
|
||||
{"role": "developer", "content": "Be concise."},
|
||||
{"role": "user", "content": "Hello"},
|
||||
{"role": "assistant", "content": "Hi"},
|
||||
{"role": "user", "content": "Bye"},
|
||||
]
|
||||
|
||||
context = LLMContext(messages=messages)
|
||||
params = self.adapter.get_llm_invocation_params(context)
|
||||
|
||||
# developer→user merged with following user
|
||||
self.assertEqual(len(params["messages"]), 3)
|
||||
merged = params["messages"][0]
|
||||
self.assertEqual(merged["role"], "user")
|
||||
self.assertIsInstance(merged["content"], list)
|
||||
self.assertEqual(len(merged["content"]), 2)
|
||||
self.assertEqual(merged["content"][0]["text"], "Be concise.")
|
||||
self.assertEqual(merged["content"][1]["text"], "Hello")
|
||||
|
||||
def test_empty_messages(self):
|
||||
"""Test that empty messages list returns empty."""
|
||||
context = LLMContext(messages=[])
|
||||
|
||||
Reference in New Issue
Block a user