Spaces:
Running
Running
File size: 1,680 Bytes
6920340 | 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 | import grpc
from concurrent import futures
import logging as log
import os
import asyncio
import protos.agent_pb2 as agent_pb2
import protos.agent_pb2_grpc as agent_pb2_grpc
from review_orchestrator import CodeReviewOrchestrator
from load_dotenv import load_dotenv
load_dotenv()
# Configure logging
log.basicConfig(level=log.INFO, format="%(asctime)s [%(levelname)s] %(message)s")
class CodeReviewAgentServicer(agent_pb2_grpc.CodeReviewAgentServicer):
def __init__(self):
self.orchestrator = CodeReviewOrchestrator()
def ReviewPR(self, request, context):
repo_url = request.repo_url
async def ReviewPR(self, request, context):
log.info(f"Received review request for PR #{request.pr_number}")
try:
async for result in self.orchestrator.review_pr_stream(request.repo_url, request.pr_number):
yield agent_pb2.ReviewResponse(
status="Success",
review_comment=result["comment"],
file_path=result["file_path"]
)
except Exception as e:
log.error(f"Error during review: {e}")
yield agent_pb2.ReviewResponse(
status="Error",
review_comment=str(e),
file_path=""
)
async def serve():
server = grpc.aio.server()
agent_pb2_grpc.add_CodeReviewAgentServicer_to_server(CodeReviewAgentServicer(), server)
server.add_insecure_port('[::]:50051')
log.info("Starting Async gRPC server on port 50051...")
await server.start()
await server.wait_for_termination()
if __name__ == '__main__':
import asyncio
asyncio.run(serve())
|