refactor-4th-jan-plan

This commit is contained in:
IGNY8 VPS (Salman)
2026-01-04 00:39:44 +00:00
parent c4de8994dd
commit b2922ebec5
5 changed files with 2027 additions and 0 deletions

218
your-analysis.md Normal file
View File

@@ -0,0 +1,218 @@
## IGNY8 AI & Configuration Settings Report
---
### 1. AI Mode Configuration
**Architecture**: Two-tier database-driven model configuration system
#### AIModelConfig Model (Primary)
Stores all AI model configurations in database, replacing legacy hardcoded constants.
**Model Types**:
- Text Generation
- Image Generation
- Embedding
**Supported Providers**:
- OpenAI
- Anthropic
- Runware
- Google
**Key Configuration Fields**:
| Category | Fields |
|----------|--------|
| **Identity** | `model_id`, `display_name`, `model_type`, `provider` |
| **Text Pricing** | `input_token_rate`, `output_token_rate` (per 1M tokens in USD) |
| **Text Limits** | `max_input_tokens`, `max_output_tokens` |
| **Image Pricing** | `cost_per_image` (fixed USD per image) |
| **Image Config** | `available_sizes` (JSON array of valid dimensions) |
| **Capabilities** | `supports_json_mode`, `supports_vision`, `supports_tools` |
| **Status** | `is_active`, `is_default`, `sort_order` |
| **Metadata** | `notes`, `release_date`, `deprecation_date` |
**Seeded Models**:
- **OpenAI Text**: gpt-4.1 (default), gpt-4o-mini, gpt-4o, gpt-5.1, gpt-5.2
- **Anthropic Text**: claude-3-5-sonnet, claude-3-opus, claude-3-haiku variants
- **OpenAI Image**: dall-e-3 (default), dall-e-2, gpt-image-1, gpt-image-1-mini
- **Runware/Bria**: runware:100@1, bria-2.3, bria-2.3-fast, bria-2.2
---
### 2. Global Integration Settings
**Model**: `GlobalIntegrationSettings` (Singleton - always pk=1)
Stores **platform-wide** API keys and default settings used by ALL accounts.
| Provider | API Key Field | Default Model | Parameters |
|----------|---------------|---------------|------------|
| **OpenAI** | `openai_api_key` | gpt-4o-mini | temperature: 0.7, max_tokens: 8192 |
| **Anthropic** | `anthropic_api_key` | claude-3-5-sonnet-20241022 | temperature: 0.7, max_tokens: 8192 |
| **DALL-E** | `dalle_api_key` | dall-e-3 | size: 1024x1024 |
| **Runware** | `runware_api_key` | runware:97@1 | — |
| **Bria** | `bria_api_key` | bria-2.3 | — |
**Default Provider Settings**:
- `default_text_provider`: 'openai' or 'anthropic'
- `default_image_service`: 'openai' or 'runware'
**Universal Image Settings**:
- `image_quality`: standard/hd
- `image_style`: photorealistic, illustration, etc.
- `max_in_article_images`: Default 2
- `desktop_image_size`: Default 1024x1024
**Critical Security Rule**: API keys exist ONLY in GlobalIntegrationSettings - never stored at account/user level.
---
### 3. Frontend Configuration Settings Panel
**Structure**: Three main setting hierarchies
#### Account Section (`/account/*`)
| Page | Tabs | Purpose |
|------|------|---------|
| Account Settings | Account, Profile, Team | User account management |
| Content Settings | Content, Publishing, Images | Content creation workflow |
| Plans & Billing | Plan, Upgrade, Invoices | Subscription management |
| Usage Analytics | Overview, Credits, Activity | Usage tracking |
#### Settings Section (`/settings/*`)
| Page | Purpose |
|------|---------|
| General | Table settings, app preferences |
| System | Global platform settings |
| AI Settings | AI model configuration |
| Integration | API integrations (Admin only) |
| Publishing | Publishing destinations & rules |
#### Site-Level Settings (`/sites/:id/settings`)
**Tabs**: general, content-generation, image-settings, integrations, publishing, content-types
**State Management**: Zustand store with persistence middleware (`useSettingsStore`)
**Available Settings Keys**:
- `table_settings`: records_per_page, default_sort, sort_direction
- `user_preferences`: theme, language, notifications
- `ai_settings`: model overrides, temperature, max_tokens
- `planner_automation`: automation rules
- `writer_automation`: content generation rules
---
### 4. User-Specific Record Creation (Save Mechanism)
**Three-Tier Hierarchy**:
```
Global (Platform) → Account (Tenant) → User (Personal)
```
#### Models Involved
| Model | Scope | Unique Key |
|-------|-------|------------|
| `GlobalIntegrationSettings` | Platform-wide | Singleton (pk=1) |
| `AccountSettings` | Per-tenant | account + key |
| `IntegrationSettings` | Per-tenant overrides | account + integration_type |
| `UserSettings` | Per-user preferences | user + account + key |
#### Save Flow When User Changes Config
1. **Frontend** calls POST/PUT to `/api/v1/system/settings/user/`
2. **Backend** ViewSet extracts user and account from authenticated request
3. **Check existing**: Query for existing setting with same user + account + key
4. **Create or Update**:
- If not exists → `serializer.save(user=user, account=account)` creates new record
- If exists → Updates the `value` JSON field
5. **Validation**: Schema validation runs against `SETTINGS_SCHEMAS` before save
6. **Response** returns the saved setting object
#### Integration Override Pattern
For AI/integration settings specifically:
1. User changes model/temperature (NOT API keys)
2. System strips any API key fields from request (security)
3. `IntegrationSettings.objects.get_or_create(account=account, integration_type=type)`
4. Only allowed override fields saved in `config` JSON field
5. On read, system merges: Global defaults → Account overrides
---
### 5. Unused/Deprecated Fields
| Field/Item | Location | Status |
|------------|----------|--------|
| `reference_id` | CreditTransaction model | **DEPRECATED** - Use `payment` FK instead |
| `mobile_image_size` | GlobalIntegrationSettings | **REMOVED** - No longer needed |
| `max_items` parameter | validators.py | **Deprecated** - No longer enforced |
| `get_model()` method | AICore class | **DEPRECATED** - Raises ValueError, model must be passed directly |
| `run_request()` method | AICore class | **DEPRECATED** - Redirects to `run_ai_request()` |
| `persist_task_metadata_to_content()` | MetadataMappingService | **DEPRECATED** - Content model no longer has task field |
| `DeploymentService` | publishing/services/ | **DEPRECATED** - Legacy SiteBlueprint service |
| SiteBlueprint model references | Multiple files | **REMOVED** - SiteBuilder deprecated |
---
### 6. Image Generation: Internal Cost vs Customer Credit Allocation
#### Internal Cost (What Platform Pays to Providers)
| Model | Provider | Cost Per Image (USD) |
|-------|----------|---------------------|
| dall-e-3 | OpenAI | $0.040 |
| dall-e-2 | OpenAI | $0.020 |
| gpt-image-1 | OpenAI | $0.042 |
| gpt-image-1-mini | OpenAI | $0.011 |
| runware:100@1 | Runware | ~$0.008-0.009 |
| bria-2.3 | Bria | ~$0.015 |
**Storage**: AIModelConfig.`cost_per_image` field + legacy `IMAGE_MODEL_RATES` constants
#### Customer Credit Cost (What Customer Pays)
| Operation | Credits Charged | Price per Credit | Min Charge |
|-----------|-----------------|------------------|------------|
| Image Generation | 5 credits | $0.02 | $0.10 |
| Image Prompt Extraction | 2 credits | $0.01 | $0.02 |
**Configuration Model**: `CreditCostConfig`
- `tokens_per_credit`: 50 (image gen uses fewer tokens per credit = higher cost)
- `min_credits`: 5
- `price_per_credit_usd`: $0.02
#### Margin Calculation
| Metric | DALL-E 3 Example |
|--------|------------------|
| Provider Cost | $0.040 |
| Customer Charge | $0.10 (5 credits × $0.02) |
| **Margin** | $0.06 (60% of customer charge) |
| **Markup** | ~150% |
**Flow**:
1. **Before AI call**: Calculate required credits based on image count
2. **Check balance**: Verify account has sufficient credits
3. **Deduct credits**: Remove from balance, log transaction
4. **Execute**: Make AI provider API call
5. **Track**: `CreditUsageLog` stores both `credits_used` (customer) and `cost_usd` (actual)
**Revenue Analytics** queries `CreditUsageLog` to calculate:
- Total revenue = Σ(credits_used × credit_price)
- Total cost = Σ(cost_usd from provider)
- Margin = Revenue - Cost
---
### Summary
The IGNY8 platform implements a sophisticated multi-tier configuration system:
- **AI configuration** is database-driven with fallback to legacy constants
- **Global settings** hold platform API keys; accounts only override model/parameters
- **User settings** create per-user records keyed by user + account + key combination
- **Credit system** charges customers a markup (~150%) over actual provider costs
- **Several fields are deprecated** including `mobile_image_size`, `reference_id`, and the `get_model()` method