Files
igny8/your-analysis.md
IGNY8 VPS (Salman) b2922ebec5 refactor-4th-jan-plan
2026-01-04 00:39:44 +00:00

218 lines
8.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 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