@unified-llm/core
Version:
Unified LLM interface (in-memory).
99 lines • 6.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.messagesRelations = exports.llmClientsRelations = exports.threadParticipantsRelations = exports.threadsRelations = exports.messages = exports.llmClients = exports.threadParticipants = exports.threads = void 0;
const sqlite_core_1 = require("drizzle-orm/sqlite-core");
const drizzle_orm_1 = require("drizzle-orm");
// スレッドテーブル - 会話の永続化単位
exports.threads = (0, sqlite_core_1.sqliteTable)('threads', {
id: (0, sqlite_core_1.text)('id').primaryKey(),
title: (0, sqlite_core_1.text)('title'),
description: (0, sqlite_core_1.text)('description'),
createdAt: (0, sqlite_core_1.integer)('created_at', { mode: 'timestamp' }).notNull(),
updatedAt: (0, sqlite_core_1.integer)('updated_at', { mode: 'timestamp' }).notNull(),
createdBy: (0, sqlite_core_1.text)('created_by'), // 作成者(ユーザーID)
isActive: (0, sqlite_core_1.integer)('is_active', { mode: 'boolean' }).default(true),
tags: (0, sqlite_core_1.text)('tags', { mode: 'json' }), // スレッドのタグ
metadata: (0, sqlite_core_1.text)('metadata', { mode: 'json' }),
});
// スレッド参加者テーブル - どのアシスタントがいつスレッドに参加したか
exports.threadParticipants = (0, sqlite_core_1.sqliteTable)('thread_participants', {
id: (0, sqlite_core_1.text)('id').primaryKey(),
threadId: (0, sqlite_core_1.text)('thread_id').notNull().references(() => exports.threads.id, { onDelete: 'cascade' }),
clientId: (0, sqlite_core_1.text)('client_id').notNull().references(() => exports.llmClients.id, { onDelete: 'cascade' }),
joinedAt: (0, sqlite_core_1.integer)('joined_at', { mode: 'timestamp' }).notNull(),
leftAt: (0, sqlite_core_1.integer)('left_at', { mode: 'timestamp' }), // null = まだ参加中
role: (0, sqlite_core_1.text)('role').default('participant'), // 'moderator', 'participant', 'observer'
nickname: (0, sqlite_core_1.text)('nickname'), // スレッド内でのニックネーム
metadata: (0, sqlite_core_1.text)('metadata', { mode: 'json' }),
});
exports.llmClients = (0, sqlite_core_1.sqliteTable)('llm_clients', {
id: (0, sqlite_core_1.text)('id').primaryKey(),
name: (0, sqlite_core_1.text)('name').notNull(),
description: (0, sqlite_core_1.text)('description'),
provider: (0, sqlite_core_1.text)('provider').notNull(), // 'openai' | 'anthropic' | 'google' | 'deepseek' | 'azure'
model: (0, sqlite_core_1.text)('model'),
systemPrompt: (0, sqlite_core_1.text)('system_prompt'),
instructions: (0, sqlite_core_1.text)('instructions'), // カスタムインストラクション
apiKey: (0, sqlite_core_1.text)('api_key'), // 暗号化されたAPIキー(オプション)
generationConfig: (0, sqlite_core_1.text)('generation_config', { mode: 'json' }), // temperature, max_tokens, etc.
tools: (0, sqlite_core_1.text)('tools', { mode: 'json' }), // 利用可能な関数のリスト
argumentMap: (0, sqlite_core_1.text)('argument_map', { mode: 'json' }), // 固定引数の設定
tags: (0, sqlite_core_1.text)('tags', { mode: 'json' }), // タグでのカテゴリ分け
isActive: (0, sqlite_core_1.integer)('is_active', { mode: 'boolean' }).default(true),
createdAt: (0, sqlite_core_1.integer)('created_at', { mode: 'timestamp' }).notNull(),
updatedAt: (0, sqlite_core_1.integer)('updated_at', { mode: 'timestamp' }).notNull(),
metadata: (0, sqlite_core_1.text)('metadata', { mode: 'json' }),
});
exports.messages = (0, sqlite_core_1.sqliteTable)('messages', {
id: (0, sqlite_core_1.text)('id').primaryKey(),
// スレッドベースのメッセージ管理
threadId: (0, sqlite_core_1.text)('thread_id').references(() => exports.threads.id, { onDelete: 'cascade' }),
clientId: (0, sqlite_core_1.text)('client_id').references(() => exports.llmClients.id),
role: (0, sqlite_core_1.text)('role').notNull(), // 'user', 'assistant', 'system', 'tool'
content: (0, sqlite_core_1.text)('content', { mode: 'json' }).notNull(),
toolCalls: (0, sqlite_core_1.text)('tool_calls', { mode: 'json' }),
toolResults: (0, sqlite_core_1.text)('tool_results', { mode: 'json' }),
timestamp: (0, sqlite_core_1.integer)('timestamp', { mode: 'timestamp' }).notNull(),
sequence: (0, sqlite_core_1.integer)('sequence'), // スレッド内でのメッセージ順序
parentMessageId: (0, sqlite_core_1.text)('parent_message_id'), // 返信元メッセージ(自己参照は後で追加)
isEdited: (0, sqlite_core_1.integer)('is_edited', { mode: 'boolean' }).default(false),
editedAt: (0, sqlite_core_1.integer)('edited_at', { mode: 'timestamp' }),
tokens: (0, sqlite_core_1.integer)('tokens'),
cost: (0, sqlite_core_1.real)('cost'),
metadata: (0, sqlite_core_1.text)('metadata', { mode: 'json' }),
});
// Relations
exports.threadsRelations = (0, drizzle_orm_1.relations)(exports.threads, ({ many }) => ({
messages: many(exports.messages),
participants: many(exports.threadParticipants),
}));
exports.threadParticipantsRelations = (0, drizzle_orm_1.relations)(exports.threadParticipants, ({ one }) => ({
thread: one(exports.threads, {
fields: [exports.threadParticipants.threadId],
references: [exports.threads.id],
}),
client: one(exports.llmClients, {
fields: [exports.threadParticipants.clientId],
references: [exports.llmClients.id],
}),
}));
exports.llmClientsRelations = (0, drizzle_orm_1.relations)(exports.llmClients, ({ many }) => ({
messages: many(exports.messages),
threadParticipants: many(exports.threadParticipants),
}));
exports.messagesRelations = (0, drizzle_orm_1.relations)(exports.messages, ({ one, many }) => ({
thread: one(exports.threads, {
fields: [exports.messages.threadId],
references: [exports.threads.id],
}),
client: one(exports.llmClients, {
fields: [exports.messages.clientId],
references: [exports.llmClients.id],
}),
parentMessage: one(exports.messages, {
fields: [exports.messages.parentMessageId],
references: [exports.messages.id],
}),
replies: many(exports.messages),
}));
//# sourceMappingURL=schema.js.map