From ef727adf69cc4befa08e490dab0238e349eeffa2 Mon Sep 17 00:00:00 2001 From: Gopalrajdev Date: Thu, 22 Jan 2026 13:13:06 -0800 Subject: [PATCH] Add CodeTranslation blueprint --- CodeTranslation/.env.example | 22 ++ CodeTranslation/.gitignore | 60 ++++ CodeTranslation/README.md | 294 ++++++++++++++++++ CodeTranslation/TROUBLESHOOTING.md | 128 ++++++++ CodeTranslation/api/.dockerignore | 29 ++ CodeTranslation/api/Dockerfile | 18 ++ CodeTranslation/api/config.py | 44 +++ CodeTranslation/api/models.py | 68 ++++ CodeTranslation/api/requirements.txt | 9 + CodeTranslation/api/server.py | 233 ++++++++++++++ CodeTranslation/api/services/__init__.py | 13 + CodeTranslation/api/services/api_client.py | 150 +++++++++ CodeTranslation/api/services/pdf_service.py | 128 ++++++++ CodeTranslation/docker-compose.yaml | 48 +++ CodeTranslation/images/ui.png | Bin 0 -> 186602 bytes CodeTranslation/ui/.dockerignore | 12 + CodeTranslation/ui/Dockerfile | 29 ++ CodeTranslation/ui/index.html | 13 + CodeTranslation/ui/nginx.conf | 23 ++ CodeTranslation/ui/package.json | 31 ++ CodeTranslation/ui/postcss.config.js | 6 + CodeTranslation/ui/src/App.jsx | 76 +++++ .../ui/src/components/CodeTranslator.jsx | 212 +++++++++++++ CodeTranslation/ui/src/components/Header.jsx | 28 ++ .../ui/src/components/PDFUploader.jsx | 139 +++++++++ .../ui/src/components/StatusBar.jsx | 51 +++ CodeTranslation/ui/src/index.css | 16 + CodeTranslation/ui/src/main.jsx | 10 + CodeTranslation/ui/tailwind.config.js | 11 + CodeTranslation/ui/vite.config.js | 17 + 30 files changed, 1918 insertions(+) create mode 100644 CodeTranslation/.env.example create mode 100644 CodeTranslation/.gitignore create mode 100644 CodeTranslation/README.md create mode 100644 CodeTranslation/TROUBLESHOOTING.md create mode 100644 CodeTranslation/api/.dockerignore create mode 100644 CodeTranslation/api/Dockerfile create mode 100644 CodeTranslation/api/config.py create mode 100644 CodeTranslation/api/models.py create mode 100644 CodeTranslation/api/requirements.txt create mode 100644 CodeTranslation/api/server.py create mode 100644 CodeTranslation/api/services/__init__.py create mode 100644 CodeTranslation/api/services/api_client.py create mode 100644 CodeTranslation/api/services/pdf_service.py create mode 100644 CodeTranslation/docker-compose.yaml create mode 100644 CodeTranslation/images/ui.png create mode 100644 CodeTranslation/ui/.dockerignore create mode 100644 CodeTranslation/ui/Dockerfile create mode 100644 CodeTranslation/ui/index.html create mode 100644 CodeTranslation/ui/nginx.conf create mode 100644 CodeTranslation/ui/package.json create mode 100644 CodeTranslation/ui/postcss.config.js create mode 100644 CodeTranslation/ui/src/App.jsx create mode 100644 CodeTranslation/ui/src/components/CodeTranslator.jsx create mode 100644 CodeTranslation/ui/src/components/Header.jsx create mode 100644 CodeTranslation/ui/src/components/PDFUploader.jsx create mode 100644 CodeTranslation/ui/src/components/StatusBar.jsx create mode 100644 CodeTranslation/ui/src/index.css create mode 100644 CodeTranslation/ui/src/main.jsx create mode 100644 CodeTranslation/ui/tailwind.config.js create mode 100644 CodeTranslation/ui/vite.config.js diff --git a/CodeTranslation/.env.example b/CodeTranslation/.env.example new file mode 100644 index 0000000000..048c7a2a47 --- /dev/null +++ b/CodeTranslation/.env.example @@ -0,0 +1,22 @@ +# Backend API Configuration +BACKEND_PORT=5001 + +# Keycloak Authentication +BASE_URL=https://your-enterprise-api.com +KEYCLOAK_CLIENT_ID=api +KEYCLOAK_CLIENT_SECRET=your-client-secret + +# Model Configuration - CodeLlama-34b-instruct +INFERENCE_MODEL_ENDPOINT=CodeLlama-34b-Instruct-hf +INFERENCE_MODEL_NAME=codellama/CodeLlama-34b-Instruct-hf + +# LLM Settings +LLM_TEMPERATURE=0.2 +LLM_MAX_TOKENS=4096 + +# Code Translation Settings +MAX_CODE_LENGTH=10000 +MAX_FILE_SIZE=10485760 + +# CORS Configuration +CORS_ALLOW_ORIGINS=["http://localhost:5173", "http://localhost:3000"] diff --git a/CodeTranslation/.gitignore b/CodeTranslation/.gitignore new file mode 100644 index 0000000000..7499b4114d --- /dev/null +++ b/CodeTranslation/.gitignore @@ -0,0 +1,60 @@ +# Environment variables +.env +.env.local +.env.production +.env.*.local + +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST +venv/ +env/ +ENV/ +.venv + +# Node +node_modules/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* +.npm +.yarn +package-lock.json + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ +.DS_Store + +# Build outputs +dist/ +*.log + +# Temporary files +*.tmp +tmp/ +temp/ diff --git a/CodeTranslation/README.md b/CodeTranslation/README.md new file mode 100644 index 0000000000..a6105a6920 --- /dev/null +++ b/CodeTranslation/README.md @@ -0,0 +1,294 @@ +## Code Translation + +A full-stack code translation application that converts code between programming languages using AI. +The system integrates a FastAPI backend powered by CodeLlama-34b-instruct, alongside a modern React + Vite + Tailwind CSS frontend for an intuitive translation experience. + +## Table of Contents + +- [Project Overview](#project-overview) +- [Features](#features) +- [Architecture](#architecture) +- [Prerequisites](#prerequisites) +- [Quick Start Deployment](#quick-start-deployment) +- [User Interface](#user-interface) +- [Troubleshooting](#troubleshooting) + +--- + +## Project Overview + +The **Code Translation** application demonstrates how large language models can be used to translate code between different programming languages. It accepts source code in one language, processes it through CodeLlama-34b-instruct, and returns translated code in the target language. This project integrates seamlessly with cloud-hosted APIs or local model endpoints, offering flexibility for research, enterprise, or educational use. + +--- + +## Features + +**Backend** + +- Code translation between 6 languages (Java, C, C++, Python, Rust, Go) +- PDF code extraction with pattern recognition +- CodeLlama-34b-instruct for accurate translations +- Enterprise inference endpoints +- Keycloak authentication for secure API access +- Comprehensive error handling and logging +- File validation and size limits +- CORS enabled for web integration +- Health check endpoints +- Modular architecture (config + models + services) + +**Frontend** + +- Side-by-side code comparison interface +- Language selection dropdowns (6 languages) +- PDF file upload with drag-and-drop support +- Real-time character counter with limits +- Modern, responsive design with Tailwind CSS +- Built with Vite for fast development +- Live status updates +- Copy to clipboard functionality +- Mobile-friendly + +--- + +## Architecture + +Below is the architecture as it consists of a server that waits for code input or PDF uploads. Once code is provided, the server calls the CodeLlama model to translate the code to the target language. + +```mermaid + graph TB + subgraph "User Interface" + A[React Frontend
Port 3000] + A1[Code Input] + A2[PDF Upload] + A3[Language Selection] + end + + subgraph "FastAPI Backend" + B[API Server
Port 5001] + C[PDF Service] + D[API Client] + end + + subgraph "External Services" + E[Keycloak Auth] + F[CodeLlama-34b Model] + end + + A1 --> B + A2 --> B + A3 --> B + B --> C + C -->|Extracted Code| B + B --> D + D -->|Get Token| E + E -->|Access Token| D + D -->|Translate Code + Token| F + F -->|Translated Code| D + D --> B + B --> A + + style A fill:#e1f5ff + style B fill:#fff4e1 + style F fill:#e1ffe1 +``` + +This application is built with enterprise inference capabilities using Keycloak for authentication and CodeLlama-34b-instruct for code translation. + +**Service Components:** + +1. **React Web UI (Port 3000)** - Provides side-by-side code comparison interface with language selection, PDF upload, and real-time translation results + +2. **FastAPI Backend (Port 5001)** - Handles code validation, PDF extraction, Keycloak authentication, and orchestrates code translation through CodeLlama model + +**Typical Flow:** + +1. User enters code or uploads a PDF through the web UI. +2. The backend validates the input and extracts code if needed. +3. The backend authenticates with Keycloak and calls CodeLlama model. +4. The model translates the code to the target language. +5. The translated code is returned and displayed to the user. +6. User can copy the translated code with one click. + +--- + +## Prerequisites + +### System Requirements + +Before you begin, ensure you have the following installed: + +- **Docker and Docker Compose** +- **Enterprise inference endpoint access** (Keycloak authentication) + +### Verify Docker Installation + +```bash +# Check Docker version +docker --version + +# Check Docker Compose version +docker compose version + +# Verify Docker is running +docker ps +``` +--- + +## Quick Start Deployment + +### Clone the Repository + +```bash +git clone https://github.com/opea-project/GenAIExamples.git +cd GenAIExamples/CodeTranslation +``` + +### Set up the Environment + +This application requires an `.env` file in the root directory for proper configuration. Create it with the commands below: + +```bash +# Create the .env file +cat > .env << EOF +# Backend API Configuration +BACKEND_PORT=5001 + +# Required - Enterprise/Keycloak Configuration +BASE_URL=https://api.example.com +KEYCLOAK_CLIENT_ID=api +KEYCLOAK_CLIENT_SECRET=your_client_secret + +# Required - Model Configuration +INFERENCE_MODEL_ENDPOINT=CodeLlama-34b-Instruct-hf +INFERENCE_MODEL_NAME=codellama/CodeLlama-34b-Instruct-hf + +# LLM Settings +LLM_TEMPERATURE=0.2 +LLM_MAX_TOKENS=4096 + +# Code Translation Settings +MAX_CODE_LENGTH=10000 +MAX_FILE_SIZE=10485760 + +# CORS Configuration +CORS_ALLOW_ORIGINS=["http://localhost:5173", "http://localhost:3000"] +EOF +``` + +Or manually create `.env` with: + +```bash +# Backend API Configuration +BACKEND_PORT=5001 + +# Required - Enterprise/Keycloak Configuration +BASE_URL=https://api.example.com +KEYCLOAK_CLIENT_ID=api +KEYCLOAK_CLIENT_SECRET=your_client_secret + +# Required - Model Configuration +INFERENCE_MODEL_ENDPOINT=CodeLlama-34b-Instruct-hf +INFERENCE_MODEL_NAME=codellama/CodeLlama-34b-Instruct-hf + +# LLM Settings +LLM_TEMPERATURE=0.2 +LLM_MAX_TOKENS=4096 + +# Code Translation Settings +MAX_CODE_LENGTH=10000 +MAX_FILE_SIZE=10485760 + +# CORS Configuration +CORS_ALLOW_ORIGINS=["http://localhost:5173", "http://localhost:3000"] +``` + +**Note**: The docker-compose.yaml file automatically loads environment variables from `.env` for the backend service. + +### Running the Application + +Start both API and UI services together with Docker Compose: + +```bash +# From the CodeTranslation directory +docker compose up --build + +# Or run in detached mode (background) +docker compose up -d --build +``` + +The API will be available at: `http://localhost:5001` +The UI will be available at: `http://localhost:3000` + +**View logs**: + +```bash +# All services +docker compose logs -f + +# Backend only +docker compose logs -f backend + +# Frontend only +docker compose logs -f frontend +``` + +**Verify the services are running**: + +```bash +# Check API health +curl http://localhost:5001/health + +# Check if containers are running +docker compose ps +``` + +## User Interface + +**Using the Application** + +Make sure you are at the localhost:3000 url + +You will be directed to the main page which has each feature + +![User Interface](images/ui.png) + +The interface provides: + +Translate code: + +- Select source language from dropdown (Java, C, C++, Python, Rust, Go) +- Select target language from dropdown +- Enter or paste your code in the left textarea +- Click "Translate Code" button +- View translated code in the right textarea +- Click "Copy" to copy the result + +Upload a PDF: + +- Scroll to the "Alternative: Upload PDF" section +- Drag and drop a PDF file, or +- Click "browse" to select a file +- Wait for code extraction to complete +- Extracted code appears in the source code box + +**UI Configuration** + +When running with Docker Compose, the UI automatically connects to the backend API. The frontend is available at `http://localhost:3000` and the API at `http://localhost:5001`. + + +For production deployments, you may want to configure a reverse proxy or update the API URL in the frontend configuration. + +### Stopping the Application + + +```bash +docker compose down +``` + +--- + +## Troubleshooting + +For comprehensive troubleshooting guidance, common issues, and solutions, refer to: + +[Troubleshooting Guide - TROUBLESHOOTING.md](./TROUBLESHOOTING.md) diff --git a/CodeTranslation/TROUBLESHOOTING.md b/CodeTranslation/TROUBLESHOOTING.md new file mode 100644 index 0000000000..7f80ab539c --- /dev/null +++ b/CodeTranslation/TROUBLESHOOTING.md @@ -0,0 +1,128 @@ +# Troubleshooting Guide + +This document contains all common issues encountered during development and their solutions. + +## Table of Contents + +- [API Common Issues](#api-common-issues) +- [UI Common Issues](#ui-common-issues) + +### API Common Issues + +#### "API client not initialized. Check Keycloak configuration." + +**Solution**: + +1. Create a `.env` file in the root directory +2. Add your Keycloak credentials: + ``` + BASE_URL=https://api.example.com + KEYCLOAK_CLIENT_ID=api + KEYCLOAK_CLIENT_SECRET=your_client_secret + ``` +3. Restart the server + +#### "Code too long. Maximum length is 10000 characters" + +**Solution**: + +- The limit exists due to model context window constraints +- Break your code into smaller modules +- Translate one class or function at a time +- Or adjust `MAX_CODE_LENGTH` in `.env` if needed + +#### "Source language not supported" + +**Solution**: + +- Only 6 languages are supported: Java, C, C++, Python, Rust, Go +- Check the `/languages` endpoint for the current list +- Ensure language names are lowercase (e.g., "python" not "Python") + +#### Import errors + +**Solution**: + +1. Ensure all dependencies are installed: `pip install -r requirements.txt` +2. Verify you're using Python 3.10 or higher: `python --version` +3. Activate your virtual environment if using one + +#### Server won't start + +**Solution**: + +1. Check if port 5001 is already in use: `lsof -i :5001` (Unix) or `netstat -ano | findstr :5001` (Windows) +2. Use a different port by updating `BACKEND_PORT` in `.env` +3. Check the logs for specific error messages + +#### PDF upload fails + +**Solution**: + +1. Verify the file is a valid PDF +2. Check file size (must be under 10MB by default) +3. Ensure the PDF contains extractable text (not just images) +4. Check server logs for detailed error messages + +#### Translation returns empty result + +**Solution**: + +1. Verify Keycloak authentication is working (check `/health` endpoint) +2. Check if the model endpoint is accessible +3. Try with simpler code first +4. Check server logs for API errors + +#### "No module named 'pypdf'" + +**Solution**: + +```bash +pip install pypdf +``` + +## UI Common Issues + +### API Connection Issues + +**Problem**: "Failed to translate" or "Failed to upload PDF" + +**Solution**: + +1. Ensure the API server is running on `http://localhost:5001` +2. Check browser console for detailed errors +3. Verify CORS is enabled in the API +4. Test API directly: `curl http://localhost:5001/health` + +### Build Issues + +**Problem**: Build fails with dependency errors + +**Solution**: + +```bash +# Clear node_modules and reinstall +rm -rf node_modules package-lock.json +npm install +``` + +### Styling Issues + +**Problem**: Styles not applying + +**Solution**: + +```bash +# Rebuild Tailwind CSS +npm run dev +``` + +### Character Counter Not Updating + +**Problem**: Character counter shows 0 / 10,000 even with code + +**Solution**: + +1. Clear browser cache +2. Hard refresh (Ctrl+Shift+R or Cmd+Shift+R) +3. Restart the dev server diff --git a/CodeTranslation/api/.dockerignore b/CodeTranslation/api/.dockerignore new file mode 100644 index 0000000000..bd6b932c3e --- /dev/null +++ b/CodeTranslation/api/.dockerignore @@ -0,0 +1,29 @@ +__pycache__ +*.pyc +*.pyo +*.pyd +.Python +env/ +venv/ +.venv/ +pip-log.txt +pip-delete-this-directory.txt +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.log +.git +.gitignore +.mypy_cache +.pytest_cache +.hypothesis +*.swp +*.swo +*~ +.DS_Store +.env +.env.local diff --git a/CodeTranslation/api/Dockerfile b/CodeTranslation/api/Dockerfile new file mode 100644 index 0000000000..c5028908c5 --- /dev/null +++ b/CodeTranslation/api/Dockerfile @@ -0,0 +1,18 @@ +FROM python:3.11-slim + +WORKDIR /app + +# Copy requirements first for better caching +COPY requirements.txt . + +# Install dependencies +RUN pip install --no-cache-dir -r requirements.txt + +# Copy application code +COPY . . + +# Expose port +EXPOSE 5001 + +# Run the application +CMD ["uvicorn", "server:app", "--host", "0.0.0.0", "--port", "5001"] diff --git a/CodeTranslation/api/config.py b/CodeTranslation/api/config.py new file mode 100644 index 0000000000..e4e7fc57e2 --- /dev/null +++ b/CodeTranslation/api/config.py @@ -0,0 +1,44 @@ +""" +Configuration settings for Code Translation API +""" + +import os +from dotenv import load_dotenv + +# Load environment variables from .env file +load_dotenv() + +# Custom API Configuration for Keycloak +BASE_URL = os.getenv("BASE_URL", "https://api.example.com") +KEYCLOAK_REALM = os.getenv("KEYCLOAK_REALM", "master") +KEYCLOAK_CLIENT_ID = os.getenv("KEYCLOAK_CLIENT_ID", "api") +KEYCLOAK_CLIENT_SECRET = os.getenv("KEYCLOAK_CLIENT_SECRET") + +# Model Configuration for CodeLlama-34b-instruct +INFERENCE_MODEL_ENDPOINT = os.getenv("INFERENCE_MODEL_ENDPOINT", "CodeLlama-34b-Instruct") +INFERENCE_MODEL_NAME = os.getenv("INFERENCE_MODEL_NAME", "codellama/CodeLlama-34b-Instruct-hf") + +# Validate required configuration +if not KEYCLOAK_CLIENT_SECRET: + raise ValueError("KEYCLOAK_CLIENT_SECRET must be set in environment variables") + +# Application Settings +APP_TITLE = "Code Translation API" +APP_DESCRIPTION = "AI-powered code translation service using CodeLlama-34b-instruct" +APP_VERSION = "1.0.0" + +# File Upload Settings +MAX_FILE_SIZE = 10 * 1024 * 1024 # 10MB +ALLOWED_EXTENSIONS = {".pdf"} + +# Code Translation Settings +SUPPORTED_LANGUAGES = ["java", "c", "cpp", "python", "rust", "go"] +MAX_CODE_LENGTH = 10000 # characters +LLM_TEMPERATURE = 0.2 # Lower temperature for more deterministic code generation +LLM_MAX_TOKENS = 4096 + +# CORS Settings +CORS_ALLOW_ORIGINS = ["*"] # Update with specific origins in production +CORS_ALLOW_CREDENTIALS = True +CORS_ALLOW_METHODS = ["*"] +CORS_ALLOW_HEADERS = ["*"] diff --git a/CodeTranslation/api/models.py b/CodeTranslation/api/models.py new file mode 100644 index 0000000000..fd5386b52d --- /dev/null +++ b/CodeTranslation/api/models.py @@ -0,0 +1,68 @@ +""" +Pydantic models for request/response validation +""" + +from pydantic import BaseModel, Field +from typing import Optional + + +class TranslateRequest(BaseModel): + """Request model for code translation""" + source_code: str = Field(..., min_length=1, description="Source code to translate") + source_language: str = Field(..., description="Source programming language") + target_language: str = Field(..., description="Target programming language") + + class Config: + json_schema_extra = { + "example": { + "source_code": "def hello():\n print('Hello World')", + "source_language": "python", + "target_language": "java" + } + } + + +class TranslateResponse(BaseModel): + """Response model for code translation""" + translated_code: str = Field(..., description="Translated code") + source_language: str = Field(..., description="Source language") + target_language: str = Field(..., description="Target language") + original_code: str = Field(..., description="Original source code") + + class Config: + json_schema_extra = { + "example": { + "translated_code": "public class Main {\n public static void main(String[] args) {\n System.out.println(\"Hello World\");\n }\n}", + "source_language": "python", + "target_language": "java", + "original_code": "def hello():\n print('Hello World')" + } + } + + +class UploadPdfResponse(BaseModel): + """Response model for PDF upload""" + message: str = Field(..., description="Success message") + extracted_code: str = Field(..., description="Extracted code from PDF") + status: str = Field(..., description="Operation status") + + class Config: + json_schema_extra = { + "example": { + "message": "Successfully extracted code from 'code.pdf'", + "extracted_code": "def hello():\n print('Hello World')", + "status": "success" + } + } + + +class HealthResponse(BaseModel): + """Response model for health check""" + status: str = Field(..., description="Health status") + model_configured: bool = Field(..., description="Whether model is configured") + keycloak_authenticated: bool = Field(..., description="Whether Keycloak auth is successful") + + +class SupportedLanguagesResponse(BaseModel): + """Response model for supported languages""" + languages: list[str] = Field(..., description="List of supported programming languages") diff --git a/CodeTranslation/api/requirements.txt b/CodeTranslation/api/requirements.txt new file mode 100644 index 0000000000..b4622e7c38 --- /dev/null +++ b/CodeTranslation/api/requirements.txt @@ -0,0 +1,9 @@ +fastapi==0.115.5 +uvicorn==0.32.1 +pydantic==2.10.3 +pydantic-settings==2.6.1 +python-multipart==0.0.17 +requests==2.32.3 +httpx==0.28.1 +openai==1.57.2 +pypdf==6.1.1 diff --git a/CodeTranslation/api/server.py b/CodeTranslation/api/server.py new file mode 100644 index 0000000000..f8347fde8a --- /dev/null +++ b/CodeTranslation/api/server.py @@ -0,0 +1,233 @@ +""" +FastAPI server with routes for Code Translation API +""" + +import os +import tempfile +import logging +from contextlib import asynccontextmanager +from fastapi import FastAPI, File, UploadFile, HTTPException, status +from fastapi.middleware.cors import CORSMiddleware + +import config +from models import ( + TranslateRequest, TranslateResponse, UploadPdfResponse, + HealthResponse, SupportedLanguagesResponse +) +from services import ( + get_api_client, extract_code_from_pdf, validate_pdf_file +) + +# Configure logging +logging.basicConfig( + level=logging.INFO, + format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' +) +logger = logging.getLogger(__name__) + + +@asynccontextmanager +async def lifespan(app: FastAPI): + """Lifespan context manager for FastAPI app""" + # Startup + try: + api_client = get_api_client() + app.state.api_client = api_client + logger.info("✓ API client initialized with Keycloak authentication") + except Exception as e: + logger.error(f"Failed to initialize API client: {str(e)}") + app.state.api_client = None + + yield + + # Shutdown + logger.info("Shutting down Code Translation API") + + +# Initialize FastAPI app +app = FastAPI( + title=config.APP_TITLE, + description=config.APP_DESCRIPTION, + version=config.APP_VERSION, + lifespan=lifespan +) + +# Add CORS middleware +app.add_middleware( + CORSMiddleware, + allow_origins=config.CORS_ALLOW_ORIGINS, + allow_credentials=config.CORS_ALLOW_CREDENTIALS, + allow_methods=config.CORS_ALLOW_METHODS, + allow_headers=config.CORS_ALLOW_HEADERS, +) + + +# ==================== Routes ==================== + +@app.get("/") +def root(): + """Root endpoint""" + return { + "message": "Code Translation API is running", + "version": config.APP_VERSION, + "status": "healthy", + "api_client_authenticated": app.state.api_client is not None + } + + +@app.get("/health", response_model=HealthResponse) +def health_check(): + """Detailed health check""" + return HealthResponse( + status="healthy", + model_configured=bool(config.INFERENCE_MODEL_NAME), + keycloak_authenticated=app.state.api_client is not None and app.state.api_client.is_authenticated() + ) + + +@app.get("/languages", response_model=SupportedLanguagesResponse) +def get_supported_languages(): + """Get list of supported programming languages""" + return SupportedLanguagesResponse( + languages=config.SUPPORTED_LANGUAGES + ) + + +@app.post("/translate", response_model=TranslateResponse) +def translate_code_endpoint(request: TranslateRequest): + """ + Translate code from one language to another + + - **source_code**: Code to translate + - **source_language**: Source programming language (java, c, cpp, python, rust, go) + - **target_language**: Target programming language (java, c, cpp, python, rust, go) + """ + if not app.state.api_client: + raise HTTPException( + status_code=status.HTTP_503_SERVICE_UNAVAILABLE, + detail="API client not initialized. Check Keycloak configuration." + ) + + # Validate languages + if request.source_language.lower() not in config.SUPPORTED_LANGUAGES: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=f"Source language '{request.source_language}' not supported. Supported: {', '.join(config.SUPPORTED_LANGUAGES)}" + ) + + if request.target_language.lower() not in config.SUPPORTED_LANGUAGES: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=f"Target language '{request.target_language}' not supported. Supported: {', '.join(config.SUPPORTED_LANGUAGES)}" + ) + + # Check code length + if len(request.source_code) > config.MAX_CODE_LENGTH: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=f"Code too long. Maximum length is {config.MAX_CODE_LENGTH} characters" + ) + + try: + logger.info(f"Translating code from {request.source_language} to {request.target_language}") + + # Translate code using API client + translated_code = app.state.api_client.translate_code( + source_code=request.source_code, + source_lang=request.source_language, + target_lang=request.target_language + ) + + if not translated_code: + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail="Translation failed. No output received from model." + ) + + logger.info(f"✓ Successfully translated code") + + return TranslateResponse( + translated_code=translated_code, + source_language=request.source_language, + target_language=request.target_language, + original_code=request.source_code + ) + + except HTTPException: + raise + except Exception as e: + logger.error(f"Error translating code: {str(e)}", exc_info=True) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error translating code: {str(e)}" + ) + + +@app.post("/upload-pdf", response_model=UploadPdfResponse) +async def upload_pdf(file: UploadFile = File(...)): + """ + Upload a PDF file and extract code from it + + - **file**: PDF file containing code (max 10MB) + """ + tmp_path = None + try: + # Read file content + content = await file.read() + file_size = len(content) + + # Validate file + validate_pdf_file(file.filename, file_size, config.MAX_FILE_SIZE) + + logger.info(f"Processing PDF: {file.filename} ({file_size / 1024:.2f} KB)") + + # Save to temporary file + with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as tmp: + tmp.write(content) + tmp_path = tmp.name + logger.info(f"Saved to temporary path: {tmp_path}") + + # Extract code from PDF + extracted_code = extract_code_from_pdf(tmp_path) + + if not extracted_code.strip(): + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail="No code content could be extracted from the PDF" + ) + + logger.info(f"✓ Successfully extracted code from PDF: {file.filename}") + + return UploadPdfResponse( + message=f"Successfully extracted code from '{file.filename}'", + extracted_code=extracted_code, + status="success" + ) + + except HTTPException: + raise + except ValueError as e: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=str(e) + ) + except Exception as e: + logger.error(f"Error processing PDF: {str(e)}", exc_info=True) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error processing PDF: {str(e)}" + ) + finally: + # Clean up temporary file + if tmp_path and os.path.exists(tmp_path): + try: + os.remove(tmp_path) + logger.info(f"Cleaned up temporary file: {tmp_path}") + except Exception as e: + logger.warning(f"Could not remove temporary file: {str(e)}") + + +# Entry point for running with uvicorn +if __name__ == "__main__": + import uvicorn + uvicorn.run(app, host="0.0.0.0", port=5001) diff --git a/CodeTranslation/api/services/__init__.py b/CodeTranslation/api/services/__init__.py new file mode 100644 index 0000000000..223ab23723 --- /dev/null +++ b/CodeTranslation/api/services/__init__.py @@ -0,0 +1,13 @@ +""" +Services module exports +""" + +from .api_client import get_api_client, APIClient +from .pdf_service import extract_code_from_pdf, validate_pdf_file + +__all__ = [ + 'get_api_client', + 'APIClient', + 'extract_code_from_pdf', + 'validate_pdf_file' +] diff --git a/CodeTranslation/api/services/api_client.py b/CodeTranslation/api/services/api_client.py new file mode 100644 index 0000000000..ee41827973 --- /dev/null +++ b/CodeTranslation/api/services/api_client.py @@ -0,0 +1,150 @@ +""" +API Client for Keycloak authentication and API calls +""" + +import logging +import requests +import httpx +from typing import Optional +import config + +logger = logging.getLogger(__name__) + + +class APIClient: + """ + Client for handling Keycloak authentication and API calls + """ + + def __init__(self): + self.base_url = config.BASE_URL + self.token = None + self.http_client = None + self._authenticate() + + def _authenticate(self) -> None: + """ + Authenticate and obtain access token from Keycloak + """ + token_url = f"{self.base_url}/token" + payload = { + "grant_type": "client_credentials", + "client_id": config.KEYCLOAK_CLIENT_ID, + "client_secret": config.KEYCLOAK_CLIENT_SECRET, + } + + try: + response = requests.post(token_url, data=payload, verify=False) + + if response.status_code == 200: + self.token = response.json().get("access_token") + logger.info(f"✓ Access token obtained: {self.token[:20]}..." if self.token else "Failed to get token") + + # Create httpx client with SSL verification disabled + self.http_client = httpx.Client(verify=False) + + else: + logger.error(f"Error obtaining token: {response.status_code} - {response.text}") + raise Exception(f"Authentication failed: {response.status_code}") + + except Exception as e: + logger.error(f"Error during authentication: {str(e)}") + raise + + def get_inference_client(self): + """ + Get OpenAI-style client for code generation inference + Uses CodeLlama-34b-instruct endpoint + """ + from openai import OpenAI + + return OpenAI( + api_key=self.token, + base_url=f"{self.base_url}/{config.INFERENCE_MODEL_ENDPOINT}/v1", + http_client=self.http_client + ) + + def translate_code(self, source_code: str, source_lang: str, target_lang: str) -> str: + """ + Translate code from one language to another using CodeLlama-34b-instruct + + Args: + source_code: Code to translate + source_lang: Source programming language + target_lang: Target programming language + + Returns: + Translated code + """ + try: + client = self.get_inference_client() + + # Create prompt for code translation + prompt = f"""Translate the following {source_lang} code to {target_lang}. +Only output the translated code without any explanations or markdown formatting. + +{source_lang} code: +``` +{source_code} +``` + +{target_lang} code: +```""" + + logger.info(f"Translating code from {source_lang} to {target_lang}") + + # Use completions endpoint for CodeLlama + response = client.completions.create( + model=config.INFERENCE_MODEL_NAME, + prompt=prompt, + max_tokens=config.LLM_MAX_TOKENS, + temperature=config.LLM_TEMPERATURE, + stop=["```"] # Stop at closing code block + ) + + # Handle response structure + if hasattr(response, 'choices') and len(response.choices) > 0: + choice = response.choices[0] + if hasattr(choice, 'text'): + translated_code = choice.text.strip() + logger.info(f"Successfully translated code ({len(translated_code)} characters)") + return translated_code + else: + logger.error(f"Unexpected response structure: {type(choice)}, {choice}") + return "" + else: + logger.error(f"Unexpected response: {type(response)}, {response}") + return "" + except Exception as e: + logger.error(f"Error translating code: {str(e)}", exc_info=True) + raise + + def is_authenticated(self) -> bool: + """ + Check if client is authenticated + """ + return self.token is not None + + def __del__(self): + """ + Cleanup: close httpx client + """ + if self.http_client: + self.http_client.close() + + +# Global API client instance +_api_client: Optional[APIClient] = None + + +def get_api_client() -> APIClient: + """ + Get or create the global API client instance + + Returns: + APIClient instance + """ + global _api_client + if _api_client is None: + _api_client = APIClient() + return _api_client diff --git a/CodeTranslation/api/services/pdf_service.py b/CodeTranslation/api/services/pdf_service.py new file mode 100644 index 0000000000..abf857e9f5 --- /dev/null +++ b/CodeTranslation/api/services/pdf_service.py @@ -0,0 +1,128 @@ +""" +PDF Code Extraction Service +Extracts code snippets from PDF documents +""" + +import logging +import re +from pathlib import Path +from typing import List +from pypdf import PdfReader + +logger = logging.getLogger(__name__) + + +def extract_code_from_pdf(pdf_path: str) -> str: + """ + Extract code content from a PDF file + + Args: + pdf_path: Path to the PDF file + + Returns: + Extracted code as string + + Raises: + Exception if PDF cannot be processed + """ + try: + logger.info(f"Extracting code from PDF: {pdf_path}") + + with open(pdf_path, 'rb') as file: + pdf_reader = PdfReader(file) + num_pages = len(pdf_reader.pages) + + logger.info(f"PDF has {num_pages} pages") + + # Extract text from all pages + all_text = "" + for page_num in range(num_pages): + page = pdf_reader.pages[page_num] + text = page.extract_text() + all_text += text + "\n" + + logger.info(f"Extracted {len(all_text)} characters from PDF") + + # Try to identify and extract code blocks + # Look for common code patterns + code_content = extract_code_patterns(all_text) + + if not code_content.strip(): + # If no code patterns found, return all text + code_content = all_text + + logger.info(f"Extracted code content: {len(code_content)} characters") + + return code_content.strip() + + except Exception as e: + logger.error(f"Error extracting code from PDF: {str(e)}", exc_info=True) + raise Exception(f"Failed to extract code from PDF: {str(e)}") + + +def extract_code_patterns(text: str) -> str: + """ + Extract code patterns from text + + Args: + text: Text content to search + + Returns: + Extracted code snippets + """ + # Look for code between common delimiters + code_blocks = [] + + # Pattern 1: Code between ``` markers + markdown_code = re.findall(r'```[\w]*\n(.*?)\n```', text, re.DOTALL) + code_blocks.extend(markdown_code) + + # Pattern 2: Indented code blocks (4+ spaces) + indented_code = re.findall(r'(?:^ .+$)+', text, re.MULTILINE) + code_blocks.extend(indented_code) + + # Pattern 3: Code with common keywords (class, def, function, etc.) + keyword_patterns = [ + r'(?:public|private|protected)?\s*class\s+\w+.*?\{.*?\}', # Java/C++ classes + r'def\s+\w+\(.*?\):.*?(?=\n(?!\s))', # Python functions + r'function\s+\w+\(.*?\)\s*\{.*?\}', # JavaScript functions + r'fn\s+\w+\(.*?\)\s*\{.*?\}', # Rust functions + r'func\s+\w+\(.*?\)\s*\{.*?\}', # Go functions + ] + + for pattern in keyword_patterns: + matches = re.findall(pattern, text, re.DOTALL | re.MULTILINE) + code_blocks.extend(matches) + + if code_blocks: + return '\n\n'.join(code_blocks) + + # If no patterns match, return original text + return text + + +def validate_pdf_file(filename: str, file_size: int, max_size: int) -> None: + """ + Validate uploaded PDF file + + Args: + filename: Name of the file + file_size: Size of the file in bytes + max_size: Maximum allowed file size in bytes + + Raises: + ValueError if validation fails + """ + # Check file extension + if not filename.lower().endswith('.pdf'): + raise ValueError("Only PDF files are allowed") + + # Check file size + if file_size > max_size: + max_size_mb = max_size / (1024 * 1024) + raise ValueError(f"File too large. Maximum size is {max_size_mb}MB") + + if file_size == 0: + raise ValueError("Empty file uploaded") + + logger.info(f"PDF file validation passed: {filename} ({file_size / 1024:.2f} KB)") \ No newline at end of file diff --git a/CodeTranslation/docker-compose.yaml b/CodeTranslation/docker-compose.yaml new file mode 100644 index 0000000000..b2c08940aa --- /dev/null +++ b/CodeTranslation/docker-compose.yaml @@ -0,0 +1,48 @@ +version: '3.8' + +services: + backend: + build: + context: ./api + dockerfile: Dockerfile + container_name: code-trans-backend + ports: + - "5001:5001" + env_file: + - .env + environment: + - BASE_URL=${BASE_URL} + - KEYCLOAK_CLIENT_ID=${KEYCLOAK_CLIENT_ID} + - KEYCLOAK_CLIENT_SECRET=${KEYCLOAK_CLIENT_SECRET} + - INFERENCE_MODEL_ENDPOINT=${INFERENCE_MODEL_ENDPOINT} + - INFERENCE_MODEL_NAME=${INFERENCE_MODEL_NAME} + - LLM_TEMPERATURE=${LLM_TEMPERATURE:-0.2} + - LLM_MAX_TOKENS=${LLM_MAX_TOKENS:-4096} + - MAX_CODE_LENGTH=${MAX_CODE_LENGTH:-10000} + - MAX_FILE_SIZE=${MAX_FILE_SIZE:-10485760} + networks: + - code-trans-network + restart: unless-stopped + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:5001/health"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s + + frontend: + build: + context: ./ui + dockerfile: Dockerfile + container_name: code-trans-frontend + ports: + - "3000:80" + depends_on: + - backend + networks: + - code-trans-network + restart: unless-stopped + +networks: + code-trans-network: + driver: bridge diff --git a/CodeTranslation/images/ui.png b/CodeTranslation/images/ui.png new file mode 100644 index 0000000000000000000000000000000000000000..ab4ed77e9ef3f68a8f1ca6c2d54a367afe130241 GIT binary patch literal 186602 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%0ADMF%PGYg-9-g2LPV?tx;G^~68m=WD`*sgA> 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 + + + + + + Code Translation - AI-Powered Code Converter + + +
+ + + diff --git a/CodeTranslation/ui/nginx.conf b/CodeTranslation/ui/nginx.conf new file mode 100644 index 0000000000..8b576ede27 --- /dev/null +++ b/CodeTranslation/ui/nginx.conf @@ -0,0 +1,23 @@ +server { + listen 80; + server_name localhost; + root /usr/share/nginx/html; + index index.html; + + location / { + try_files $uri $uri/ /index.html; + } + + location /api/ { + rewrite ^/api/(.*)$ /$1 break; + proxy_pass http://backend:5001; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection 'upgrade'; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} diff --git a/CodeTranslation/ui/package.json b/CodeTranslation/ui/package.json new file mode 100644 index 0000000000..310f586320 --- /dev/null +++ b/CodeTranslation/ui/package.json @@ -0,0 +1,31 @@ +{ + "name": "code-trans-ui", + "version": "1.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview", + "lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0" + }, + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0", + "axios": "^1.6.0", + "lucide-react": "^0.294.0" + }, + "devDependencies": { + "@types/react": "^18.2.43", + "@types/react-dom": "^18.2.17", + "@vitejs/plugin-react": "^4.2.1", + "autoprefixer": "^10.4.16", + "eslint": "^8.55.0", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.5", + "postcss": "^8.4.32", + "tailwindcss": "^3.3.6", + "vite": "^5.0.8" + } +} diff --git a/CodeTranslation/ui/postcss.config.js b/CodeTranslation/ui/postcss.config.js new file mode 100644 index 0000000000..2e7af2b7f1 --- /dev/null +++ b/CodeTranslation/ui/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/CodeTranslation/ui/src/App.jsx b/CodeTranslation/ui/src/App.jsx new file mode 100644 index 0000000000..185fdf9fbc --- /dev/null +++ b/CodeTranslation/ui/src/App.jsx @@ -0,0 +1,76 @@ +import { useState } from 'react' +import CodeTranslator from './components/CodeTranslator' +import PDFUploader from './components/PDFUploader' +import Header from './components/Header' +import StatusBar from './components/StatusBar' + +function App() { + const [translationStatus, setTranslationStatus] = useState('idle') // idle, translating, success, error + const [sourceLanguage, setSourceLanguage] = useState('python') + const [targetLanguage, setTargetLanguage] = useState('java') + const [pdfExtractedCode, setPdfExtractedCode] = useState('') + const [isUploading, setIsUploading] = useState(false) + + const handleTranslationStart = () => { + setTranslationStatus('translating') + } + + const handleTranslationSuccess = () => { + setTranslationStatus('success') + setTimeout(() => setTranslationStatus('idle'), 3000) + } + + const handleTranslationError = () => { + setTranslationStatus('error') + setTimeout(() => setTranslationStatus('idle'), 3000) + } + + const handlePDFUploadSuccess = (extractedCode) => { + setPdfExtractedCode(extractedCode) + setIsUploading(false) + } + + const handlePDFUploadStart = () => { + setIsUploading(true) + } + + return ( +
+
+ +
+ {/* Status Bar */} + + + {/* Main Code Translator - Side by Side */} +
+ +
+ + {/* PDF Uploader at Bottom */} +
+ +
+
+
+ ) +} + +export default App diff --git a/CodeTranslation/ui/src/components/CodeTranslator.jsx b/CodeTranslation/ui/src/components/CodeTranslator.jsx new file mode 100644 index 0000000000..b646d6f734 --- /dev/null +++ b/CodeTranslation/ui/src/components/CodeTranslator.jsx @@ -0,0 +1,212 @@ +import { useState, useEffect } from 'react' +import { ArrowRight, Code, Copy, Check } from 'lucide-react' +import axios from 'axios' + +const LANGUAGES = ['java', 'c', 'cpp', 'python', 'rust', 'go'] + +const LANGUAGE_LABELS = { + 'java': 'JAVA', + 'c': 'C', + 'cpp': 'C++', + 'python': 'PYTHON', + 'rust': 'RUST', + 'go': 'GO' +} + +const API_URL = import.meta.env.VITE_API_URL || '/api' + +export default function CodeTranslator({ + onTranslationStart, + onTranslationSuccess, + onTranslationError, + pdfExtractedCode, + sourceLanguage, + targetLanguage, + onSourceLanguageChange, + onTargetLanguageChange +}) { + const [sourceCode, setSourceCode] = useState('') + const [translatedCode, setTranslatedCode] = useState('') + const [isTranslating, setIsTranslating] = useState(false) + const [copied, setCopied] = useState(false) + + // When PDF code is extracted, set it as source code + useEffect(() => { + if (pdfExtractedCode) { + setSourceCode(pdfExtractedCode) + } + }, [pdfExtractedCode]) + + const handleTranslate = async () => { + if (!sourceCode.trim()) { + alert('Please enter code to translate') + return + } + + if (sourceLanguage === targetLanguage) { + alert('Source and target languages must be different') + return + } + + setIsTranslating(true) + onTranslationStart() + + try { + const response = await axios.post(`${API_URL}/translate`, { + source_code: sourceCode, + source_language: sourceLanguage, + target_language: targetLanguage + }) + + setTranslatedCode(response.data.translated_code) + onTranslationSuccess() + } catch (error) { + console.error('Translation error:', error) + onTranslationError() + alert(error.response?.data?.detail || 'Translation failed') + } finally { + setIsTranslating(false) + } + } + + const handleCopy = () => { + navigator.clipboard.writeText(translatedCode) + setCopied(true) + setTimeout(() => setCopied(false), 2000) + } + + return ( +
+
+ +

Code Translator

+
+ + {/* Language Selection */} +
+
+ + +
+ +
+ +
+ +
+ + +
+
+ + {/* Side by Side Code Boxes */} +
+ {/* Source Code Input */} +
+
+ + 10000 ? 'text-red-600 font-semibold' : 'text-gray-500'}`}> + {sourceCode.length.toLocaleString()} / 10,000 characters + +
+