app-cmkofd-64 / utils.py
AiCoderv2's picture
Deploy Gradio app with multiple files
6574073 verified
import re
from typing import Dict, List, Any, Optional
import json
def format_code_response(response: str) -> str:
"""
Format and enhance code responses with proper syntax highlighting and structure.
Args:
response (str): Raw model response
Returns:
str: Formatted response with enhanced code blocks
"""
if not response:
return "I'm sorry, I couldn't generate a response. Could you please rephrase your question?"
# Detect and format code blocks
formatted_response = response
# Enhance existing code blocks
code_block_pattern = r'```(\w+)?\n(.*?)```'
def replace_code_block(match):
language = match.group(1) or "text"
code_content = match.group(2).strip()
# Clean up the code content
code_content = clean_code_content(code_content, language)
return f'```{language}\n{code_content}\n```'
# Apply code block formatting
formatted_response = re.sub(code_block_pattern, replace_code_block, response, flags=re.DOTALL)
# Add helpful tips for coding responses
if any(keyword in response.lower() for keyword in ['def ', 'function', 'class ', 'import ', 'from ']):
# This appears to be a code response, add a helpful note
formatted_response += "\n\n💡 **Tip:** You can copy this code directly and use it in your project. Don't forget to install any required dependencies!"
# Add execution hints for certain languages
if 'python' in formatted_response.lower() and 'pip install' not in formatted_response.lower():
if any(module in formatted_response.lower() for module in ['requests', 'numpy', 'pandas', 'tensorflow', 'pytorch']):
formatted_response += "\n\n⚠️ **Note:** Some packages may need to be installed first. Check the imports and install any missing dependencies."
return formatted_response
def clean_code_content(code: str, language: str) -> str:
"""
Clean and optimize code content for better readability.
Args:
code (str): Raw code content
language (str): Programming language
Returns:
str: Cleaned code content
"""
# Remove excessive whitespace
lines = code.split('\n')
cleaned_lines = []
prev_empty = False
for line in lines:
# Skip completely empty lines at the start
if not line.strip() and not cleaned_lines:
continue
# Normalize indentation
cleaned_line = line.rstrip()
cleaned_lines.append(cleaned_line)
prev_empty = not line.strip()
# Limit excessive empty lines
result_lines = []
empty_count = 0
for line in cleaned_lines:
if not line.strip():
empty_count += 1
if empty_count <= 2: # Max 2 consecutive empty lines
result_lines.append(line)
else:
empty_count = 0
result_lines.append(line)
return '\n'.join(result_lines)
def parse_model_output(output: str) -> Dict[str, Any]:
"""
Parse and extract structured information from model output.
Args:
output (str): Raw model output
Returns:
Dict[str, Any]: Structured information about the response
"""
result = {
"raw_output": output,
"has_code": False,
"code_language": None,
"code_blocks": [],
"suggestions": [],
"explanations": []
}
# Extract code blocks
code_pattern = r'```(\w+)?\n(.*?)```'
code_matches = re.findall(code_pattern, output, re.DOTALL)
if code_matches:
result["has_code"] = True
for lang, code in code_matches:
result["code_blocks"].append({
"language": lang or "text",
"content": code.strip()
})
if not result["code_language"]:
result["code_language"] = lang
# Extract explanations (lines that don't contain code)
lines = output.split('\n')
for line in lines:
line = line.strip()
if line and not line.startswith('```') and not any(keyword in line.lower() for keyword in ['def ', 'class ', 'import ', 'from ', '{', '}', '(', ')', ';', 'console.log', 'print(']):
if len(line) > 20: # Only substantial lines
result["explanations"].append(line)
return result
def format_error_message(error: Exception, user_message: str = "") -> str:
"""
Format error messages in a user-friendly way.
Args:
error (Exception): The caught exception
user_message (str): The original user message
Returns:
str: Formatted error message
"""
error_type = type(error).__name__
error_msg = str(error)
# Common error patterns and helpful responses
if "CUDA" in error_msg and "out of memory" in error_msg.lower():
helpful_msg = "I'm experiencing memory limitations. Please try a shorter message or simpler request."
elif "timeout" in error_msg.lower():
helpful_msg = "The request is taking too long. Please try with a shorter prompt."
elif "connection" in error_msg.lower() or "network" in error_msg.lower():
helpful_msg = "I'm having trouble connecting to the model. Please check your connection and try again."
else:
helpful_msg = "I'm encountering a technical issue. Please try rephrasing your question or try again later."
return f"❌ {helpful_msg}\n\n**Technical details:** {error_type}: {error_msg}"
def extract_coding_concepts(text: str) -> List[str]:
"""
Extract programming concepts and keywords from text.
Args:
text (str): Input text
Returns:
List[str]: List of detected programming concepts
"""
programming_concepts = [
'algorithm', 'data structure', 'complexity', 'recursion', 'iteration',
'object-oriented', 'functional programming', 'design pattern', 'api',
'database', 'sql', 'nosql', 'testing', 'debugging', 'optimization',
'performance', 'security', 'authentication', 'authorization',
'microservices', 'serverless', 'docker', 'kubernetes', 'devops',
'machine learning', 'data science', 'web scraping', 'automation'
]
text_lower = text.lower()
detected_concepts = []
for concept in programming_concepts:
if concept in text_lower:
detected_concepts.append(concept)
return detected_concepts
def create_example_prompts() -> Dict[str, List[str]]:
"""Create example prompts organized by category."""
return {
"Beginner": [
"Write a Python function to calculate factorial",
"Create a simple HTML page with a login form",
"Explain what variables are in programming"
],
"Intermediate": [
"Write a binary search algorithm in JavaScript",
"Create a REST API endpoint in Flask",
"Explain the difference between arrays and linked lists"
],
"Advanced": [
"Implement a concurrent web scraper in Python",
"Design a database schema for an e-commerce system",
"Optimize this SQL query for better performance"
],
"Debugging": [
"Debug this Python code: [code]",
"Why is my JavaScript function returning undefined?",
"Help me fix this SQL syntax error"
],
"Code Review": [
"Review this function for best practices",
"How can I make this code more efficient?",
"What security issues do you see in this code?"
]
}
def validate_code_syntax(code: str, language: str) -> Dict[str, Any]:
"""
Basic syntax validation for generated code.
Args:
code (str): Code to validate
language (str): Programming language
Returns:
Dict[str, Any]: Validation results
"""
validation_result = {
"is_valid": True,
"issues": [],
"suggestions": []
}
# Basic validation rules
if language == "python":
# Check for basic Python syntax issues
if code.count('(') != code.count(')'):
validation_result["issues"].append("Unbalanced parentheses")
validation_result["is_valid"] = False
if code.count('{') != code.count('}'):
validation_result["issues"].append("Unbalanced braces")
validation_result["is_valid"] = False
# Common suggestions
if 'def ' in code and ':' not in code:
validation_result["suggestions"].append("Function definitions should end with a colon")
if 'import ' in code and '\n' not in code:
validation_result["suggestions"].append("Consider organizing imports at the top of the file")
elif language in ["javascript", "typescript"]:
# Check for common JS syntax issues
if code.count('{') != code.count('}'):
validation_result["issues"].append("Unbalanced curly braces")
validation_result["is_valid"] = False
if code.count('(') != code.count(')'):
validation_result["issues"].append("Unbalanced parentheses")
validation_result["is_valid"] = False
return validation_result