This repository was archived by the owner on Jun 5, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 91
Expand file tree
/
Copy pathsystemmsg.py
More file actions
69 lines (52 loc) · 2.24 KB
/
systemmsg.py
File metadata and controls
69 lines (52 loc) · 2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import json
from typing import Optional
from litellm import ChatCompletionRequest, ChatCompletionSystemMessage
from codegate.pipeline.base import PipelineContext
def get_existing_system_message(request: ChatCompletionRequest) -> Optional[dict]:
"""
Retrieves the existing system message from the completion request.
Args:
request: The original completion request.
Returns:
The existing system message if found, otherwise None.
"""
for message in request.get("messages", []):
if message["role"] == "system":
return message
return None
def add_or_update_system_message(
request: ChatCompletionRequest,
system_message: ChatCompletionSystemMessage,
context: PipelineContext,
) -> ChatCompletionRequest:
"""
Adds or updates the system message in the completion request.
Args:
request: The original completion request.
system_message: The system message to add or update.
context: The pipeline context for adding alerts.
Returns:
The updated completion request.
"""
new_request = request.copy()
if "messages" not in new_request:
new_request["messages"] = []
request_system_message = get_existing_system_message(new_request)
if request_system_message is None:
# Add new system message
context.add_alert("add-system-message", trigger_string=json.dumps(system_message))
new_request["messages"].insert(0, system_message)
else:
# Handle both string and list content types (needed for Cline (sends list)
existing_content = request_system_message["content"]
new_content = system_message["content"]
# Convert list to string if necessary (needed for Cline (sends list)
if isinstance(existing_content, list):
existing_content = "\n".join(str(item) for item in existing_content)
if isinstance(new_content, list):
new_content = "\n".join(str(item) for item in new_content)
# Update existing system message
updated_content = existing_content + "\n\n" + new_content
context.add_alert("update-system-message", trigger_string=updated_content)
request_system_message["content"] = updated_content
return new_request