| import asyncio |
| from fastapi_router_controller import Controller |
| from fastapi import APIRouter, Depends, HTTPException |
| from services.ibm_model.ibm_extract_code_block import IbmExtractCodeblock |
| from services.ibm_model.ibm_text_generator import IbmTextGenerator |
| from services.model_generator import ModelGenerator |
|
|
| from utils.logger import Logger |
|
|
| logger = Logger.get_logger(__name__) |
|
|
| router = APIRouter(prefix='/v1') |
| controller = Controller(router, openapi_tag={ |
| 'name': 'Generate the Code Snippets', |
| }) |
|
|
| model = ModelGenerator() |
|
|
|
|
| @controller.use() |
| @controller.resource() |
| class GenerateController(): |
| def __init__( |
| self, |
| service: ModelGenerator = Depends()) -> None: |
| self.model_generator = service |
|
|
| @controller.route.get( |
| '/generate', |
| tags=['generate-code'], |
| summary='Generates the code for the given input') |
| async def generate_code(self, input: str): |
| try: |
| if not input: |
| logger.error('Input is required.') |
| raise HTTPException( |
| status_code=500, detail='Input is required.') |
|
|
| ibm_generate_text_visitor = IbmTextGenerator() |
| generated_text = await self.model_generator.acceptTextGenerator(ibm_generate_text_visitor, input) |
|
|
| ibm_extract_code_block_visitor = IbmExtractCodeblock() |
| code_block = self.model_generator.acceptExtractCodeBlock( |
| ibm_extract_code_block_visitor, generated_text) |
|
|
| logger.info('Output: {}'.format(generated_text)) |
|
|
| return {"data": code_block} |
| except asyncio.CancelledError: |
| logger.error( |
| 'Canceling network request due to disconnect in client.') |
| except Exception as error: |
| logger.error('Error {}'.format(error)) |
|
|