mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-30 16:23:31 +00:00
feat(ollama): 支持 Cloud 官方用量自动刷新
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
|
||||
const { get, post, put, del } = vi.hoisted(() => ({
|
||||
get: vi.fn(),
|
||||
post: vi.fn(),
|
||||
put: vi.fn(),
|
||||
del: vi.fn()
|
||||
}))
|
||||
|
||||
vi.mock('@/api/client', () => ({
|
||||
apiClient: { get, post, put, delete: del }
|
||||
}))
|
||||
|
||||
import {
|
||||
deleteOllamaCloudUsageSession,
|
||||
getOllamaCloudUsage,
|
||||
getOllamaCloudUsageSettings,
|
||||
refreshOllamaCloudUsage,
|
||||
saveOllamaCloudUsageSession,
|
||||
setOllamaCloudUsageAutoRefresh,
|
||||
updateOllamaCloudUsageSettings
|
||||
} from '@/api/admin/accounts'
|
||||
|
||||
const state = {
|
||||
account_id: 7,
|
||||
eligible: true,
|
||||
configured: true,
|
||||
auto_refresh_enabled: false,
|
||||
encryption_key_configured: true
|
||||
}
|
||||
|
||||
describe('admin Ollama Cloud usage API', () => {
|
||||
beforeEach(() => {
|
||||
get.mockReset()
|
||||
post.mockReset()
|
||||
put.mockReset()
|
||||
del.mockReset()
|
||||
})
|
||||
|
||||
it('uses dedicated global settings endpoints', async () => {
|
||||
const settings = { enabled: false, interval_minutes: 60 }
|
||||
get.mockResolvedValueOnce({ data: settings })
|
||||
put.mockResolvedValueOnce({ data: settings })
|
||||
|
||||
await expect(getOllamaCloudUsageSettings()).resolves.toEqual(settings)
|
||||
await expect(updateOllamaCloudUsageSettings(settings)).resolves.toEqual(settings)
|
||||
expect(get).toHaveBeenCalledWith('/admin/accounts/ollama-cloud-usage/settings')
|
||||
expect(put).toHaveBeenCalledWith('/admin/accounts/ollama-cloud-usage/settings', settings)
|
||||
})
|
||||
|
||||
it('keeps session configuration write-only and separate from account updates', async () => {
|
||||
get.mockResolvedValueOnce({ data: state })
|
||||
put.mockResolvedValueOnce({ data: state }).mockResolvedValueOnce({ data: state })
|
||||
del.mockResolvedValueOnce({ data: { ...state, configured: false } })
|
||||
post.mockResolvedValueOnce({ data: state })
|
||||
|
||||
await expect(getOllamaCloudUsage(7)).resolves.toEqual(state)
|
||||
await expect(saveOllamaCloudUsageSession(7, 'wos-session=secret')).resolves.toEqual(state)
|
||||
await expect(setOllamaCloudUsageAutoRefresh(7, true)).resolves.toEqual(state)
|
||||
await expect(refreshOllamaCloudUsage(7)).resolves.toEqual(state)
|
||||
await expect(deleteOllamaCloudUsageSession(7)).resolves.toMatchObject({ configured: false })
|
||||
|
||||
expect(put).toHaveBeenNthCalledWith(1, '/admin/accounts/7/ollama-cloud-usage/session', { session: 'wos-session=secret' })
|
||||
expect(put).toHaveBeenNthCalledWith(2, '/admin/accounts/7/ollama-cloud-usage/auto-refresh', { enabled: true })
|
||||
expect(post).toHaveBeenCalledWith('/admin/accounts/7/ollama-cloud-usage/refresh')
|
||||
expect(del).toHaveBeenCalledWith('/admin/accounts/7/ollama-cloud-usage/session')
|
||||
})
|
||||
})
|
||||
@@ -22,7 +22,9 @@ import type {
|
||||
CheckMixedChannelRequest,
|
||||
CheckMixedChannelResponse,
|
||||
UpstreamBillingProbeResult,
|
||||
UpstreamBillingProbeSettings
|
||||
UpstreamBillingProbeSettings,
|
||||
OllamaCloudUsageSettings,
|
||||
OllamaCloudUsageState
|
||||
} from '@/types'
|
||||
|
||||
/**
|
||||
@@ -882,6 +884,50 @@ export async function probeUpstreamBillingBatch(accountIds: number[]): Promise<U
|
||||
return data.results
|
||||
}
|
||||
|
||||
export async function getOllamaCloudUsageSettings(): Promise<OllamaCloudUsageSettings> {
|
||||
const { data } = await apiClient.get<OllamaCloudUsageSettings>('/admin/accounts/ollama-cloud-usage/settings')
|
||||
return data
|
||||
}
|
||||
|
||||
export async function updateOllamaCloudUsageSettings(
|
||||
settings: OllamaCloudUsageSettings
|
||||
): Promise<OllamaCloudUsageSettings> {
|
||||
const { data } = await apiClient.put<OllamaCloudUsageSettings>(
|
||||
'/admin/accounts/ollama-cloud-usage/settings',
|
||||
settings
|
||||
)
|
||||
return data
|
||||
}
|
||||
|
||||
export async function getOllamaCloudUsage(id: number): Promise<OllamaCloudUsageState> {
|
||||
const { data } = await apiClient.get<OllamaCloudUsageState>(`/admin/accounts/${id}/ollama-cloud-usage`)
|
||||
return data
|
||||
}
|
||||
|
||||
export async function saveOllamaCloudUsageSession(id: number, session: string): Promise<OllamaCloudUsageState> {
|
||||
const { data } = await apiClient.put<OllamaCloudUsageState>(`/admin/accounts/${id}/ollama-cloud-usage/session`, {
|
||||
session
|
||||
})
|
||||
return data
|
||||
}
|
||||
|
||||
export async function deleteOllamaCloudUsageSession(id: number): Promise<OllamaCloudUsageState> {
|
||||
const { data } = await apiClient.delete<OllamaCloudUsageState>(`/admin/accounts/${id}/ollama-cloud-usage/session`)
|
||||
return data
|
||||
}
|
||||
|
||||
export async function setOllamaCloudUsageAutoRefresh(id: number, enabled: boolean): Promise<OllamaCloudUsageState> {
|
||||
const { data } = await apiClient.put<OllamaCloudUsageState>(`/admin/accounts/${id}/ollama-cloud-usage/auto-refresh`, {
|
||||
enabled
|
||||
})
|
||||
return data
|
||||
}
|
||||
|
||||
export async function refreshOllamaCloudUsage(id: number): Promise<OllamaCloudUsageState> {
|
||||
const { data } = await apiClient.post<OllamaCloudUsageState>(`/admin/accounts/${id}/ollama-cloud-usage/refresh`)
|
||||
return data
|
||||
}
|
||||
|
||||
export const accountsAPI = {
|
||||
list,
|
||||
listWithEtag,
|
||||
@@ -933,7 +979,14 @@ export const accountsAPI = {
|
||||
updateUpstreamBillingProbeSettings,
|
||||
setUpstreamBillingProbeEnabled,
|
||||
probeUpstreamBilling,
|
||||
probeUpstreamBillingBatch
|
||||
probeUpstreamBillingBatch,
|
||||
getOllamaCloudUsageSettings,
|
||||
updateOllamaCloudUsageSettings,
|
||||
getOllamaCloudUsage,
|
||||
saveOllamaCloudUsageSession,
|
||||
deleteOllamaCloudUsageSession,
|
||||
setOllamaCloudUsageAutoRefresh,
|
||||
refreshOllamaCloudUsage
|
||||
}
|
||||
|
||||
export default accountsAPI
|
||||
|
||||
Reference in New Issue
Block a user