{{ getViewName() }}
{{ isAdmin ? t('unlimited_quota') : formatQuota(userInfo.quota) }}
{{ t('available_quota') }}
{{ formatQuota(userInfo.used_quota) }}
{{ t('used_quota') }}
{{ tokens.length }}
{{ t('api_tokens') }}
{{ getRoleName(userInfo.role) }}
{{ t('current_role') }}
{{ t('api_usage_guide') }}

{{ t('api_usage_guide_desc') }}

curl -X POST https://your-domain.com/v1/chat/completions \
  -H "Authorization: Bearer {{ userToken }}" \
  -H "Content-Type: application/json" \
  -d '{"model": "deepseek-chat", "messages": [{"role": "user", "content": "Hello"}]}'
{{ userToken }}
{{ t('quick_actions') }}
{{ t('redeem_code') }}
{{ redeemMsg.text }}
{{ t('recent_logs') }}
{{ t('time') }}{{ t('model') }}{{ t('quota_used') }}{{ t('elapsed') }}
{{ formatTime(log.created_at) }} {{ log.model_name }} {{ log.quota }} {{ log.elapsed_time }}ms
{{ t('no_logs') }}
{{ t('token_management') }}

{{ t('create_token') }}

{{ tokenError }}
{{ t('name') }} {{ t('key') }} {{ t('channel_group') }} {{ t('remain_quota') }} {{ t('status') }} {{ t('created_at') }} {{ t('action') }}
{{ token.name }} {{ token.key }} {{ token.channel_group || '-' }} {{ token.unlimited_quota ? t('unlimited') : formatQuota(token.remain_quota) }} {{ token.status === 1 ? t('enabled') : t('disabled') }} {{ formatTime(token.created_time) }}
{{ t('online_shop') }}

{{ t('visit_shop') }} /shop

{{ t('api_doc_title') }}

πŸ“‘ {{ t('api_endpoint') }}

Base URL: http://your-domain:3000/v1

πŸ”‘ {{ t('auth_method') }}

{{ t('auth_desc') }} Authorization: Bearer YOUR_API_TOKEN

{{ t('token_location') }}

πŸ—‚ {{ t('chat_completions') }}

{{ t('chat_desc') }}

Python - OpenAI SDK

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_TOKEN",
    base_url="http://your-domain:3000/v1"
)

response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[
        {"role": "system", "content": "You are a helpful assistant"},
        {"role": "user", "content": "Hello"}
    ],
    max_tokens=500,
    temperature=0.7
)

print(response.choices[0].message.content)

Python - Anthropic SDK

from anthropic import Anthropic

client = Anthropic(
    api_key="YOUR_API_TOKEN",
    base_url="http://your-domain:3000/v1"
)

response = client.messages.create(
    model="claude-3-5-sonnet-latest",
    max_tokens=500,
    messages=[
        {"role": "user", "content": "Hello"}
    ]
)

print(response.content[0].text)

cURL

curl -X POST http://your-domain:3000/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-chat",
    "messages": [
      {"role": "user", "content": "Hello"}
    ],
    "max_tokens": 500,
    "temperature": 0.7
  }'

πŸ”„ {{ t('stream_response') }}

{{ t('stream_desc') }}

Python - OpenAI SDK

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_TOKEN",
    base_url="http://your-domain:3000/v1"
)

stream = client.chat.completions.create(
    model="deepseek-chat",
    messages=[{"role": "user", "content": "Write a poem"}],
    stream=True
)

for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")

cURL

curl -X POST http://your-domain:3000/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-chat",
    "messages": [{"role": "user", "content": "Write a poem"}],
    "stream": true
  }'

πŸ“Š {{ t('available_models') }}

{{ t('available_models_desc') }}

cURL

curl -X GET http://your-domain:3000/v1/models \
  -H "Authorization: Bearer YOUR_API_TOKEN"

πŸ’° {{ t('quota_info') }}

  • {{ t('quota_desc_1') }}
  • {{ t('quota_desc_2') }}
  • {{ t('quota_desc_3') }}
  • {{ t('quota_desc_4') }}
{{ t('channel_management') }}

{{ t('add_channel') }}

{{ channelError }}
ID {{ t('name') }} {{ t('group') }} {{ t('weight') }} {{ t('type') }} {{ t('status') }} {{ t('base_url') }} {{ t('models') }} {{ t('action') }}
{{ channel.id }} {{ channel.name }} {{ channel.group }} {{ channel.weight }} {{ getChannelTypeName(channel.type) }} {{ channel.status === 1 ? t('enabled') : t('disabled') }} {{ channel.base_url }} {{ channel.models }}
{{ channelError }}
{{ t('channel_group_management') }}

{{ t('group_desc') }}

{{ t('add_group') }}

{{ groupError }}

{{ t('rename_group') }}

{{ groupError }}

{{ t('delete_group') }}

{{ t('confirm_delete_group') }} "{{ deleteGroupName }}" ?

{{ groupError }}
{{ t('group_name') }}{{ t('total_channels') }}{{ t('enabled') }}{{ t('disabled') }}{{ t('action') }}
{{ group.name }} {{ group.total }} {{ group.enabled }} {{ group.disabled }}

{{ t('channels_in_group') }} "{{ selectedGroup }}"

ID{{ t('name') }}{{ t('weight') }}{{ t('status') }}{{ t('models') }}
{{ ch.id }} {{ ch.name }} {{ ch.weight }} {{ ch.status === 1 ? t('enabled') : t('disabled') }} {{ ch.models }}
{{ t('user_management') }}

{{ t('add_user') }}

{{ userError }}
ID {{ t('username') }} {{ t('display_name') }} {{ t('role') }} {{ t('group') }} {{ t('status') }} {{ t('quota') }} {{ t('action') }}
{{ user.id }} {{ user.username }} {{ user.display_name }} {{ getRoleName(user.role) }} {{ user.group || 'default' }} {{ user.status === 1 ? t('normal') : t('disabled') }} {{ formatQuota(user.quota) }}

{{ t('reset_password_for') }}: {{ resetPwUser?.username }}

{{ resetPwError }}
{{ userError }}
{{ t('redemption_management') }}

{{ t('generate_code') }}

{{ redemptionError }}
ID{{ t('name') }}{{ t('key') }}{{ t('quota') }}{{ t('status') }}{{ t('created_at') }}
{{ redemption.id }} {{ redemption.name }} {{ redemption.key }} {{ formatQuota(redemption.quota) }} {{ redemption.status === 1 ? t('available') : (redemption.status === 3 ? t('used') : t('disabled')) }} {{ formatTime(redemption.created_time) }}
{{ t('package_management') }}

{{ t('create_package') }}

{{ packageError }}
ID {{ t('name') }} {{ t('type') }} {{ t('quota') }} {{ t('price') }} {{ t('status') }} {{ t('sort_order') }} {{ t('action') }}
{{ pkg.id }} {{ pkg.name }} {{ pkg.package_type }} {{ formatQuota(pkg.quota) }} {{ pkg.prices }} {{ pkg.status === 1 ? t('enabled') : t('disabled') }} {{ pkg.sort_order }}
{{ packageError }}
{{ t('order_management') }}
{{ orderStats.total || 0 }}
{{ t('total_orders') }}
{{ orderStats.pending || 0 }}
{{ t('pending') }}
{{ orderStats.paid || 0 }}
{{ t('paid') }}
ID{{ t('order_no') }}{{ t('user_id') }}{{ t('package_id') }}{{ t('payment_method') }}{{ t('amount') }}{{ t('status') }}{{ t('created_at') }}
{{ order.id }} {{ order.order_no }} {{ order.user_id }} {{ order.package_id }} {{ order.payment_provider }} {{ order.amount }} {{ order.currency }} {{ order.status }} {{ formatTime(order.created_time) }}
{{ t('usage_logs') }}
ID{{ t('time') }}{{ t('user') }}{{ t('model') }}{{ t('quota_used') }}{{ t('token_name') }}{{ t('elapsed') }}
{{ log.id }} {{ formatTime(log.created_at) }} {{ log.username }} {{ log.model_name }} {{ log.quota }} {{ log.token_name }} {{ log.elapsed_time }}ms
{{ t('page') }} {{ logsPage + 1 }}
{{ t('powered_by') }} llmapi
{{ t('author') }}:xiefujin | {{ t('email') }}:490021684@qq.com | GitHub:github.com/kandada/llmapi
{{ t('disclaimer') }}