aimevzulari's picture
Upload 19 files
bed5cc5 verified
"""
Cursor Rules Generator - API Routes
This module implements the API routes for the Cursor Rules Generator.
"""
from flask import Flask, request, jsonify
from flask_cors import CORS
import os
import json
from ..config.settings import Settings
from ..llm.factory import LLMAdapterFactory
from ..engine.rule_generator import RuleGenerator
# Create Flask app
app = Flask(__name__)
# Configure CORS
CORS(app, resources={r"/api/*": {"origins": Settings.CORS_ORIGINS}})
# Initialize components
rule_generator = RuleGenerator()
factory = LLMAdapterFactory()
@app.route('/api/providers', methods=['GET'])
def get_providers():
"""Get a list of supported LLM providers.
Returns:
JSON: A list of provider information
"""
providers = factory.get_supported_providers()
# Format the response
result = []
for provider_id, provider_name in providers.items():
result.append({
'id': provider_id,
'name': provider_name
})
return jsonify(result)
@app.route('/api/rule-types', methods=['GET'])
def get_rule_types():
"""Get a list of supported rule types.
Returns:
JSON: A list of rule type information
"""
rule_types = rule_generator.get_rule_types()
return jsonify(rule_types)
@app.route('/api/validate-api-key', methods=['POST'])
def validate_api_key():
"""Validate an API key for a specific provider.
Request JSON:
provider: The LLM provider
api_key: The API key to validate
Returns:
JSON: Validation result
"""
data = request.json
if not data or 'provider' not in data or 'api_key' not in data:
return jsonify({
'valid': False,
'message': 'Missing required parameters'
}), 400
provider = data['provider']
api_key = data['api_key']
try:
# Create and initialize the adapter
adapter = factory.create_adapter(provider)
# Validate the API key
valid = adapter.validate_api_key(api_key)
if valid:
return jsonify({
'valid': True,
'message': 'API key is valid'
})
else:
return jsonify({
'valid': False,
'message': 'Invalid API key'
})
except Exception as e:
return jsonify({
'valid': False,
'message': str(e)
}), 500
@app.route('/api/models', methods=['POST'])
def get_models():
"""Get a list of available models for a specific provider.
Request JSON:
provider: The LLM provider
api_key: The API key for the provider
Returns:
JSON: A list of model information
"""
data = request.json
if not data or 'provider' not in data or 'api_key' not in data:
return jsonify({
'error': 'Missing required parameters'
}), 400
provider = data['provider']
api_key = data['api_key']
try:
# Create and initialize the adapter
adapter = factory.create_adapter(provider)
adapter.initialize(api_key)
# Get available models
models = adapter.get_available_models()
return jsonify(models)
except Exception as e:
return jsonify({
'error': str(e)
}), 500
@app.route('/api/generate-rule', methods=['POST'])
def generate_rule():
"""Generate a Cursor Rule.
Request JSON:
provider: The LLM provider
api_key: The API key for the provider
model: The model ID to use
rule_type: The type of rule to generate
description: A short description of the rule's purpose
content: The main content of the rule
parameters: Additional parameters for rule generation
Returns:
JSON: The generated rule
"""
data = request.json
# Validate required parameters
required_params = ['provider', 'api_key', 'model', 'rule_type', 'description', 'content']
for param in required_params:
if param not in data:
return jsonify({
'error': f'Missing required parameter: {param}'
}), 400
# Extract parameters
provider = data['provider']
api_key = data['api_key']
model = data['model']
rule_type = data['rule_type']
description = data['description']
content = data['content']
parameters = data.get('parameters', {})
# Validate rule type
if not rule_generator.validate_rule_type(rule_type):
return jsonify({
'error': f'Invalid rule type: {rule_type}'
}), 400
try:
# Generate the rule
rule = rule_generator.create_rule(
provider=provider,
model=model,
rule_type=rule_type,
description=description,
content=content,
api_key=api_key,
parameters=parameters
)
return jsonify({
'rule': rule
})
except Exception as e:
return jsonify({
'error': str(e)
}), 500
def create_app():
"""Create and configure the Flask application.
Returns:
Flask: The configured Flask application
"""
return app
if __name__ == '__main__':
# Run the app
app.run(
host=Settings.API_HOST,
port=Settings.API_PORT,
debug=Settings.DEBUG
)