refactor-4th-jan-plan
This commit is contained in:
165
new-updated.md
Normal file
165
new-updated.md
Normal file
@@ -0,0 +1,165 @@
|
||||
## 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 ✅
|
||||
|
||||
|
||||
**Supported Providers**:
|
||||
- OpenAI ✅
|
||||
- Runware ✅
|
||||
|
||||
**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) |
|
||||
| **Status** | `is_active`, `is_default`, `sort_order` |
|
||||
| **Metadata** | `notes`, `release_date`, `deprecation_date` |
|
||||
|
||||
**Seeded Models**:
|
||||
- **OpenAI Text**: gpt-4o-mini, gpt-4o, gpt-5.1(default)
|
||||
- **OpenAI Image**: dall-e-3 (default)
|
||||
- **Runware**: runware:97@1, google:4@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-5.1 | temperature: 0.7, max_tokens: 8192 |
|
||||
| **DALL-E** | `dalle_api_key` | dall-e-3 | size: 1024x1024 |
|
||||
| **Runware** | `runware_api_key` | runware:97@1 & google:4@2 | — |
|
||||
|
||||
|
||||
**Default Provider Settings**:
|
||||
- `default_text_provider`: 'openai'
|
||||
- `default_image_service`: 'openai'
|
||||
|
||||
**Universal Image Settings**:
|
||||
- `image_quality`: standard/hd
|
||||
- `image_style`: photorealistic, illustration, etc.
|
||||
- `max_in_article_images`: Default 2
|
||||
|
||||
|
||||
**Critical Security Rule**: API keys exist ONLY in GlobalIntegrationSettings - never stored at account/user level.
|
||||
|
||||
---
|
||||
|
||||
|
||||
### 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
|
||||
|
||||
---
|
||||
|
||||
### 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.05 |
|
||||
| runware:97@1 | Runware - Hi Dream Full | ~$0.013 |
|
||||
| google:4@2 | Runware - Google Nano Banaan | ~$0.15 |
|
||||
|
||||
**Storage**: AIModelConfig.`cost_per_image` field + legacy `IMAGE_MODEL_RATES` constants
|
||||
|
||||
!!! This need to be fixed rates tobe laoded and used form configured AI Models !! not from hard coded location
|
||||
|
||||
#### 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 |
|
||||
|
||||
!!!morre robust image gneartion csoting and pricing mecahnishm required, withotu long chains or workarounds!!!
|
||||
|
||||
**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
|
||||
Reference in New Issue
Block a user