Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
A
aisbf
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexlab
aisbf
Commits
e48a89f5
Commit
e48a89f5
authored
Apr 17, 2026
by
Your Name
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
docs: add subscription pricing feature documentation
parent
ae1fb479
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
196 additions
and
0 deletions
+196
-0
SUBSCRIPTION_PRICING_FEATURE.md
SUBSCRIPTION_PRICING_FEATURE.md
+196
-0
No files found.
SUBSCRIPTION_PRICING_FEATURE.md
0 → 100644
View file @
e48a89f5
# Subscription-Based Provider and Custom Pricing Feature
## Overview
Added support for subscription-based providers and custom per-provider pricing configuration. This allows admins and users to:
1.
Mark providers as subscription-based (free, $0 cost)
2.
Configure custom pricing per million tokens for each provider
3.
Track usage for all providers while calculating costs appropriately
---
## Changes Made
### 1. Provider Model (`aisbf/models.py`)
Added three new fields to the
`Provider`
model:
```
python
class
Provider
(
BaseModel
):
# ... existing fields ...
# Pricing configuration
is_subscription
:
bool
=
False
# If True, pricing is 0 (subscription-based provider)
price_per_million_prompt
:
Optional
[
float
]
=
None
# Price per million prompt tokens (USD)
price_per_million_completion
:
Optional
[
float
]
=
None
# Price per million completion tokens (USD)
```
### 2. Analytics Module (`aisbf/analytics.py`)
Added
`_get_provider_pricing()`
method that:
-
Checks if provider is subscription-based → returns
`{'prompt': 0.0, 'completion': 0.0}`
-
Checks for custom pricing configuration → returns configured prices
-
Falls back to default pricing if not configured
Updated
`estimate_cost()`
to use
`_get_provider_pricing()`
instead of hardcoded defaults.
### 3. Provider Configuration UI (`templates/dashboard/providers.html`)
Added pricing configuration section with:
-
**Subscription checkbox**
: Mark provider as subscription-based (free)
-
**Prompt token pricing**
: Custom price per million prompt tokens
-
**Completion token pricing**
: Custom price per million completion tokens
-
**Dynamic UI**
: Pricing fields hidden when subscription is checked
-
**Helper text**
: Examples and guidance for pricing values
---
## How It Works
### Subscription-Based Providers
When
`is_subscription`
is checked:
1.
Cost calculations return $0
2.
Usage is still tracked in analytics
3.
Token counts are recorded normally
4.
Pricing fields are hidden in UI
### Custom Pricing
When custom pricing is configured:
1.
Analytics uses configured prices instead of defaults
2.
Both prompt and completion prices can be set independently
3.
Leave empty to use default pricing
### Pricing Priority
1.
**Subscription status**
(highest) - If
`is_subscription = true`
, cost is $0
2.
**Custom pricing**
- If configured, uses
`price_per_million_prompt`
and
`price_per_million_completion`
3.
**Default pricing**
(lowest) - Falls back to hardcoded defaults in
`Analytics.DEFAULT_PRICING`
---
## Configuration Storage
Provider configurations are stored as JSON in the
`user_providers`
table:
```
json
{
"id"
:
"my-provider"
,
"name"
:
"My Provider"
,
"type"
:
"openai"
,
"endpoint"
:
"https://api.example.com/v1"
,
"api_key_required"
:
true
,
"is_subscription"
:
false
,
"price_per_million_prompt"
:
10.0
,
"price_per_million_completion"
:
30.0
}
```
---
## Usage Examples
### Example 1: Subscription Provider (Kiro)
```
Provider: kiro-cli2
Type: kiro
Subscription: ✓ Checked
Prompt Pricing: (hidden)
Completion Pricing: (hidden)
Result: All usage tracked, cost = $0
```
### Example 2: Custom Pricing (OpenAI)
```
Provider: openai-custom
Type: openai
Subscription: ☐ Unchecked
Prompt Pricing: $5.00
Completion Pricing: $15.00
Result: Uses $5/M prompt, $15/M completion
```
### Example 3: Default Pricing (Anthropic)
```
Provider: anthropic
Type: anthropic
Subscription: ☐ Unchecked
Prompt Pricing: (empty)
Completion Pricing: (empty)
Result: Uses default $15/M prompt, $75/M completion
```
---
## Default Pricing
Current defaults in
`Analytics.DEFAULT_PRICING`
:
| Provider | Prompt ($/M) | Completion ($/M) |
|----------|--------------|------------------|
| anthropic | $15.00 | $75.00 |
| openai | $10.00 | $30.00 |
| google | $1.25 | $5.00 |
| kiro | $0.50 | $1.50 |
| openrouter | $5.00 | $15.00 |
---
## Benefits
1.
**Accurate Cost Tracking**
: Subscription providers don't inflate cost estimates
2.
**Flexibility**
: Each provider can have custom pricing
3.
**Usage Tracking**
: All usage is tracked regardless of cost
4.
**User Control**
: Admins and users can configure pricing per provider
5.
**Backward Compatible**
: Existing providers use default pricing
---
## Testing
To test the feature:
1.
**Configure a subscription provider**
:
-
Go to Dashboard → Providers
-
Edit a provider
-
Check "Subscription-Based Provider (Free)"
-
Save configuration
2.
**Configure custom pricing**
:
-
Go to Dashboard → Providers
-
Edit a provider
-
Uncheck subscription
-
Enter custom prompt/completion prices
-
Save configuration
3.
**Verify analytics**
:
-
Make requests through the provider
-
Check Dashboard → Analytics
-
Verify costs are calculated correctly
---
## Future Enhancements
Possible improvements:
-
Per-model pricing (different models have different costs)
-
Time-based pricing (different costs at different times)
-
Volume discounts (lower costs for high usage)
-
Currency conversion (support multiple currencies)
---
## Commit
```
ae1fb47 feat: add subscription-based provider and custom pricing configuration
```
All changes are production-ready and backward compatible.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment