packages/python-packages/apiview-copilot/scripts/remote_review.py (40 lines of code) (raw):

import asyncio import os from pprint import pprint import sys import aiohttp from typing import Optional BASE_API_ENDPOINT = "https://apiview-gpt.azurewebsites.net" async def generate_remote_review(*, target: str, base: Optional[str], language: str) -> str: """ Sends the query to the API endpoint with the language as a path parameter and awaits the response. """ api_endpoint = f"{BASE_API_ENDPOINT}/{language}" # Increase timeout to 5 minutes timeout = aiohttp.ClientTimeout(total=300) # 5 minutes async with aiohttp.ClientSession(timeout=timeout) as session: try: print(f"Sending request to {api_endpoint}...") async with session.post(api_endpoint, json={"target": target, "base": base}) as response: if response.status == 200: print("Request successful, waiting for response...") # Already parsed as JSON by response.json() return await response.json() else: error_text = await response.text() return f"Error: Received status code {response.status} from API. Details: {error_text}" except asyncio.TimeoutError: return "Error: Request timed out. The review is taking longer than expected." except aiohttp.ClientError as e: return f"Error: Failed to connect to API. Details: {e}" def _read_input(input_value: str) -> str: """ Reads input from a file if the input_value is a valid file path, otherwise treats it as a string query. """ if os.path.isfile(input_value): with open(input_value, "r", encoding="utf-8") as file: return file.read() return input_value async def main(): if len(sys.argv) < 3: print("Usage: python query_app.py <file_or_query> <language>") sys.exit(1) input_value = sys.argv[1] language = sys.argv[2] query = _read_input(input_value) response = await generate_remote_review(query, language) pprint(response) if __name__ == "__main__": asyncio.run(main())