| | from src.sdlc.states.states import CoderState |
| | from src.sdlc.prompts.prompts import CODE_REVIEW_INSTRNS |
| | from src.sdlc.schema.codefiletypes import CodeFileTypes |
| | from src.sdlc import logger |
| | import time |
| | import groq |
| |
|
| | class CodeReviewerNode: |
| | """ |
| | Node logic implementation. |
| | """ |
| | def __init__(self,model): |
| | self.llm = model |
| |
|
| | def process(self, state: CoderState): |
| | """ |
| | Processes the input state and reviews the code based on the design documents. |
| | Sends the files in batches of 3 for token limit management. |
| | """ |
| | generated_code = state.get("generated_code", {}) |
| | design_summary = state["design_summary"] |
| |
|
| | |
| | files_list = list(generated_code.items()) |
| |
|
| | batch_size = 3 |
| | num_batches = min((len(files_list) + batch_size - 1) // batch_size, 4) |
| |
|
| | all_reviews = [] |
| |
|
| | for i in range(num_batches): |
| | batch = dict(files_list[i * batch_size : (i + 1) * batch_size]) |
| | try: |
| | response = self.llm.invoke(CODE_REVIEW_INSTRNS.format( |
| | design_documents=design_summary, |
| | generated_code=batch |
| | )) |
| |
|
| | logger.info(f"In code reviewer node. Batch {i+1} Response: {response.content}") |
| | all_reviews.append(response.content) |
| | except groq.RateLimitError as e: |
| | wait_time = 70 |
| | logger.info(f"Rate limit reached. Waiting for {wait_time} seconds...") |
| | time.sleep(wait_time) |
| | response = self.llm.invoke(CODE_REVIEW_INSTRNS.format( |
| | design_documents=design_summary, |
| | generated_code=batch |
| | )) |
| | logger.info(f"Batch {i+1} Review after wait: ", response.content) |
| | all_reviews.append(response.content) |
| |
|
| | |
| | combined_review = "\n\n".join(all_reviews) |
| |
|
| | return {"generated_code_review": combined_review} |
| |
|
| | |
| |
|