UNPKG

@unified-llm/core

Version:

Unified LLM interface (in-memory).

99 lines 6.29 kB
"use strict"; 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