feat: Upgrade database schema and migrate web search metadata
- Add database version 5 with schema updates - Create `upgradeToV5` function to migrate Tavily web search metadata to new format - Update types to support new web search metadata structure - Minor code cleanup and formatting improvements
This commit is contained in:
parent
e5664048d9
commit
a4b5ef9bde
@ -1,6 +1,8 @@
|
||||
import { FileType, KnowledgeItem, Topic, TranslateHistory } from '@renderer/types'
|
||||
import { Dexie, type EntityTable } from 'dexie'
|
||||
|
||||
import { upgradeToV5 } from './upgrades'
|
||||
|
||||
// Database declaration (move this to its own module also)
|
||||
export const db = new Dexie('CherryStudio') as Dexie & {
|
||||
files: EntityTable<FileType, 'id'>
|
||||
@ -35,4 +37,14 @@ db.version(4).stores({
|
||||
translate_history: '&id, sourceText, targetText, sourceLanguage, targetLanguage, createdAt'
|
||||
})
|
||||
|
||||
db.version(5)
|
||||
.stores({
|
||||
files: 'id, name, origin_name, path, size, ext, type, created_at, count',
|
||||
topics: '&id, messages',
|
||||
settings: '&id, value',
|
||||
knowledge_notes: '&id, baseId, type, content, created_at, updated_at',
|
||||
translate_history: '&id, sourceText, targetText, sourceLanguage, targetLanguage, createdAt'
|
||||
})
|
||||
.upgrade((tx) => upgradeToV5(tx))
|
||||
|
||||
export default db
|
||||
|
||||
30
src/renderer/src/databases/upgrades.ts
Normal file
30
src/renderer/src/databases/upgrades.ts
Normal file
@ -0,0 +1,30 @@
|
||||
import { Transaction } from 'dexie'
|
||||
|
||||
export async function upgradeToV5(tx: Transaction): Promise<void> {
|
||||
const topics = await tx.table('topics').toArray()
|
||||
|
||||
for (const topic of topics) {
|
||||
let hasChanges = false
|
||||
|
||||
for (const message of topic.messages) {
|
||||
if (message?.metadata?.tavily) {
|
||||
hasChanges = true
|
||||
const tavily = message.metadata.tavily
|
||||
delete message.metadata.tavily
|
||||
message.metadata.webSearch = {
|
||||
query: tavily.query,
|
||||
results:
|
||||
tavily.results?.map((i) => ({
|
||||
title: i.title,
|
||||
url: i.url,
|
||||
content: i.content
|
||||
})) || []
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (hasChanges) {
|
||||
await tx.table('topics').put(topic)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -415,6 +415,7 @@ export default class OpenAIProvider extends BaseProvider {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const stream = await this.sdk.chat.completions
|
||||
// @ts-ignore key is not typed
|
||||
.create(
|
||||
|
||||
@ -34,7 +34,7 @@ const persistedReducer = persistReducer(
|
||||
{
|
||||
key: 'cherry-studio',
|
||||
storage,
|
||||
version: 76,
|
||||
version: 77,
|
||||
blacklist: ['runtime'],
|
||||
migrate
|
||||
},
|
||||
|
||||
@ -1230,6 +1230,7 @@ const migrateConfig = {
|
||||
delete p.enabled
|
||||
})
|
||||
}
|
||||
|
||||
return state
|
||||
}
|
||||
}
|
||||
|
||||
@ -299,6 +299,7 @@ export type WebSearchResponse = {
|
||||
query?: string
|
||||
results: WebSearchResult[]
|
||||
}
|
||||
|
||||
export type WebSearchResult = {
|
||||
title: string
|
||||
content: string
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user