codegen / controllers /generate_controller.py
AP\VivekIsh
codegen: Stage the code
6fadbbc
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))