91 lines
4.3 KiB
Markdown
91 lines
4.3 KiB
Markdown
My Recommendation: Simplify to 3 Core Concepts
|
||
Based on analyzing your plans and the current system, here's the simplest path forward:
|
||
Current Pain Points (Summarized)
|
||
Area Problem
|
||
API Keys Scattered in GlobalIntegrationSettings with unused fields (anthropic, bria)
|
||
Models Duplicated in DB (AIModelConfig), constants.py, GlobalIntegrationSettings CHOICES, frontend
|
||
Credits Split between CreditCostConfig (token-based) and image models (per-image) - confusing
|
||
Frontend Hardcoded model lists, not dynamic
|
||
Proposed Simplified Architecture
|
||
Instead of 7-phase migration, do this:
|
||
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ SIMPLIFIED TARGET STATE │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
|
||
1. AIModelConfig (ENHANCED) - SINGLE SOURCE OF TRUTH
|
||
├── All models (text + image)
|
||
├── is_default flag (one per type)
|
||
├── tokens_per_credit (text models)
|
||
├── credits_per_image (image models)
|
||
├── quality_tier (basic/quality/premium for user display)
|
||
└── provider field links to API key source
|
||
|
||
2. IntegrationProvider (NEW) - API KEYS ONLY
|
||
├── openai → api_key
|
||
├── runware → api_key
|
||
└── (future: resend, stripe, etc.)
|
||
|
||
3. GlobalIntegrationSettings (SIMPLIFIED) - NON-MODEL SETTINGS ONLY
|
||
├── image_style: "photorealistic"
|
||
├── max_in_article_images: 4
|
||
└── temperature: 0.7
|
||
(NO model names, NO API keys, NO hardcoded choices)
|
||
User-Facing Simplification
|
||
For Images (what user sees):
|
||
|
||
Quality Selection:
|
||
○ Basic (1 credit/image) ← maps to runware:97@1
|
||
○ Quality (5 credits/image) ← maps to dall-e-3
|
||
○ Premium (15 credits/image) ← maps to google:4@2
|
||
|
||
Image Count: [1-8 dropdown]
|
||
User picks quality tier + count. Backend handles:
|
||
Model selection based on quality_tier
|
||
Credit calculation: credits_per_image × count
|
||
API routing to correct provider
|
||
For Text (hidden from user):
|
||
Admin controls default model in AIModelConfig.is_default
|
||
User has NO options - uses system default
|
||
Credits calculated: ceil(tokens / tokens_per_credit)
|
||
Simplest Migration Path
|
||
Phase 1: Add fields to AIModelConfig (no breaking changes)
|
||
|
||
# Add to existing AIModelConfig
|
||
credits_per_image = IntegerField(null=True) # For image models
|
||
tokens_per_credit = IntegerField(null=True) # For text models
|
||
quality_tier = CharField(choices=['basic','quality','premium'])
|
||
Phase 2: Create IntegrationProvider (move API keys)
|
||
|
||
# New simple model
|
||
class IntegrationProvider(Model):
|
||
provider_id = CharField(primary_key=True) # openai, runware
|
||
api_key = CharField()
|
||
is_active = BooleanField()
|
||
Phase 3: Create single API endpoint
|
||
|
||
GET /api/v1/system/ai-config/
|
||
Returns:
|
||
{
|
||
"image_qualities": [
|
||
{"tier": "basic", "credits_per_image": 1, "label": "Basic"},
|
||
{"tier": "quality", "credits_per_image": 5, "label": "Quality"},
|
||
{"tier": "premium", "credits_per_image": 15, "label": "Premium"}
|
||
],
|
||
"text_model": "gpt-5.1", // Admin-controlled, user can't change
|
||
"image_style": "photorealistic",
|
||
"max_images": 4
|
||
}
|
||
Phase 4: Update frontend - load from API, remove hardcodes Phase 5: Cleanup - remove legacy fields from GlobalIntegrationSettings
|
||
Key Simplifications
|
||
Before After
|
||
User picks model name User picks quality tier
|
||
Multiple credit calculation paths One path: AIModelConfig
|
||
API keys in GlobalIntegrationSettings API keys in IntegrationProvider
|
||
Hardcoded constants.py rates All from database
|
||
6+ admin pages to configure 2 pages: Models + Providers
|
||
Do you want me to:
|
||
Start implementing this simplified approach? - I can create the migration files and update the models
|
||
Create a more detailed breakdown of each phase with specific file changes?
|
||
Focus on a specific area first (e.g., just fix image credits, or just move API keys)?
|
||
The existing plans in your docs are comprehensive but may be over-engineered. The core problem is simpler: consolidate to AIModelConfig as single source of truth, give users quality tiers instead of model names, and move API keys to a dedicated model. |