47 lines
1.2 KiB
TypeScript
47 lines
1.2 KiB
TypeScript
import { Database, eq } from "@opencode-ai/console-core/drizzle/index.js"
|
|
import { ModelStickyProviderTable } from "@opencode-ai/console-core/schema/ip.sql.js"
|
|
|
|
export function createStickyTracker(
|
|
modelId: string,
|
|
stickyProvider: "strict" | "prefer" | undefined,
|
|
stickyId: string,
|
|
) {
|
|
if (!stickyProvider) return
|
|
if (!stickyId) return
|
|
const id = `${modelId}/${stickyId}`
|
|
let _providerId: string | undefined
|
|
|
|
return {
|
|
get: async () => {
|
|
const data = await Database.use((tx) =>
|
|
tx
|
|
.select({
|
|
providerId: ModelStickyProviderTable.providerId,
|
|
})
|
|
.from(ModelStickyProviderTable)
|
|
.where(eq(ModelStickyProviderTable.id, id))
|
|
.limit(1),
|
|
)
|
|
_providerId = data[0]?.providerId
|
|
return _providerId
|
|
},
|
|
set: async (providerId: string) => {
|
|
if (_providerId === providerId) return
|
|
|
|
await Database.use((tx) =>
|
|
tx
|
|
.insert(ModelStickyProviderTable)
|
|
.values({
|
|
id,
|
|
providerId,
|
|
})
|
|
.onDuplicateKeyUpdate({
|
|
set: {
|
|
providerId,
|
|
},
|
|
}),
|
|
)
|
|
},
|
|
}
|
|
}
|