|
13 | 13 | from codegate.pipeline.extract_snippets.extract_snippets import extract_snippets
|
14 | 14 | from codegate.storage.storage_engine import StorageEngine
|
15 | 15 | from codegate.utils.package_extractor import PackageExtractor
|
16 |
| -from codegate.utils.utils import generate_vector_string |
| 16 | +from codegate.utils.utils import generate_vector_string, get_tool_name_from_messages |
17 | 17 |
|
18 | 18 | logger = structlog.get_logger("codegate")
|
19 | 19 |
|
@@ -63,7 +63,7 @@ async def process(
|
63 | 63 | last_message = self.get_last_user_message_block(request)
|
64 | 64 | if not last_message:
|
65 | 65 | return PipelineResult(request=request)
|
66 |
| - user_message, _ = last_message |
| 66 | + user_message, last_user_idx = last_message |
67 | 67 |
|
68 | 68 | # Create storage engine object
|
69 | 69 | storage_engine = StorageEngine()
|
@@ -124,33 +124,34 @@ async def process(
|
124 | 124 | context_str = self.generate_context_str(all_bad_packages, context)
|
125 | 125 | context.bad_packages_found = True
|
126 | 126 |
|
127 |
| - last_user_idx = self.get_last_user_message_idx(request) |
128 |
| - |
129 | 127 | # Make a copy of the request
|
130 | 128 | new_request = request.copy()
|
131 | 129 |
|
132 |
| - # Format: "Context: {context_str} \n Query: {last user message content}" |
133 |
| - message = new_request["messages"][last_user_idx] |
134 |
| - message_str = str(message["content"]) # type: ignore |
135 |
| - # Add the context to the last user message |
136 |
| - if message_str.strip().startswith("<task>"): |
137 |
| - # formatting of cline |
138 |
| - match = re.match(r"(<task>)(.*?)(</task>)(.*)", message_str, re.DOTALL) |
139 |
| - if match: |
140 |
| - task_start, task_content, task_end, rest_of_message = match.groups() |
141 |
| - |
142 |
| - # Embed the context into the task block |
143 |
| - updated_task_content = ( |
144 |
| - f"{task_start}Context: {context_str}\n" |
145 |
| - + f"Query: {task_content.strip()}</details>{task_end}" |
146 |
| - ) |
147 |
| - |
148 |
| - # Combine the updated task block with the rest of the message |
149 |
| - context_msg = updated_task_content + rest_of_message |
150 |
| - else: |
151 |
| - context_msg = f"Context: {context_str} \n\n Query: {message_str}" # type: ignore |
152 |
| - message["content"] = context_msg |
153 |
| - |
154 |
| - logger.debug("Final context message", context_message=context_msg) |
155 |
| - |
| 130 | + # perform replacement in all the messages starting from this index |
| 131 | + for i in range(last_user_idx, len(new_request["messages"])): |
| 132 | + message = new_request["messages"][i] |
| 133 | + message_str = str(message["content"]) # type: ignore |
| 134 | + context_msg = message_str |
| 135 | + # Add the context to the last user message |
| 136 | + base_tool = get_tool_name_from_messages(request) |
| 137 | + if base_tool in ["cline", "kodu"]: |
| 138 | + match = re.search(r"<task>\s*(.*?)\s*</task>(.*)", message_str, re.DOTALL) |
| 139 | + if match: |
| 140 | + task_content = match.group(1) # Content within <task>...</task> |
| 141 | + rest_of_message = match.group(2).strip() # Content after </task>, if any |
| 142 | + |
| 143 | + # Embed the context into the task block |
| 144 | + updated_task_content = ( |
| 145 | + f"<task>Context: {context_str}" |
| 146 | + + f"Query: {task_content.strip()}</task>" |
| 147 | + ) |
| 148 | + |
| 149 | + # Combine updated task content with the rest of the message |
| 150 | + context_msg = updated_task_content + rest_of_message |
| 151 | + |
| 152 | + else: |
| 153 | + context_msg = f"Context: {context_str} \n\n Query: {message_str}" # type: ignore |
| 154 | + |
| 155 | + new_request["messages"][i]["content"] = context_msg |
| 156 | + logger.debug("Final context message", context_message=context_msg) |
156 | 157 | return PipelineResult(request=new_request, context=context)
|
0 commit comments