Skip to content

Commit c5b8627

Browse files
authored
Phase 3 (#3)
* Phase 3 * feat(audio): Enhance audio device management and selection - Implemented functionality to list available speaker and microphone devices. - Updated audio capture to allow selection of specific speaker and microphone devices. - Added UI components for selecting audio devices in the ActiveMeeting page. - Refactored audio capture commands to support new device listing methods. - Improved error handling and logging for audio device operations. - Deprecated the previous method for listing audio devices in favor of more specific methods. * feat(transcription): Implement lazy loading of transcripts in MeetingHistory * fix(tests): Skip device listing test if PulseAudio is unavailable in CI * fix(audio): Skip Property Store access in test environments to avoid access violations * feat: Add Groq LLM service adapter and integrate with existing LLM command structure - Implement GroqService for interacting with Groq's API, including model fetching and text generation. - Update LLM service module to include Groq as a provider. - Enhance OpenAIService for better model context window estimation. - Create Tauri commands for managing LLM services, including fetching models and generating insights. - Introduce prompt templates for various insight types to standardize prompt generation. - Add frontend API bindings for generating insights and managing prompts. * fix(transcription): Remove unnecessary result assignment in startTranscription function * feat(mocks): Add delete_transcripts and delete_insights methods to MockStorage
1 parent c8b49be commit c5b8627

39 files changed

Lines changed: 5505 additions & 110 deletions

.claude/settings.local.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
"allow": [
44
"Bash(cargo build:*)",
55
"Bash(npm run build)",
6-
"Bash(cargo check:*)"
6+
"Bash(cargo check:*)",
7+
"Bash(npm run check:*)"
78
],
89
"deny": [],
910
"ask": []

apps/desktop/src-tauri/Cargo.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,13 @@ env_logger = "0.11"
4848
windows = { version = "0.58", features = [
4949
"Win32_Foundation",
5050
"Win32_System_Com",
51+
"Win32_System_Com_StructuredStorage",
52+
"Win32_System_Ole",
5153
"Win32_Media_Audio",
5254
"Win32_Media_KernelStreaming",
55+
"Win32_UI_Shell_PropertiesSystem",
56+
"Win32_Devices",
57+
"Win32_Devices_FunctionDiscovery",
5358
] }
5459

5560
[target.'cfg(target_os = "linux")'.dependencies]
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
-- Prompt templates table for customizable LLM prompts
2+
CREATE TABLE IF NOT EXISTS prompt_templates (
3+
id INTEGER PRIMARY KEY AUTOINCREMENT,
4+
insight_type TEXT NOT NULL CHECK(insight_type IN ('summary', 'action_item', 'key_point', 'decision')),
5+
name TEXT NOT NULL,
6+
prompt_text TEXT NOT NULL,
7+
is_default BOOLEAN NOT NULL DEFAULT 0,
8+
is_active BOOLEAN NOT NULL DEFAULT 0,
9+
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
10+
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
11+
UNIQUE(insight_type, name)
12+
);
13+
14+
CREATE INDEX idx_prompt_templates_type ON prompt_templates(insight_type);
15+
CREATE INDEX idx_prompt_templates_active ON prompt_templates(is_active);
16+
17+
-- Insert default templates for each insight type
18+
INSERT INTO prompt_templates (insight_type, name, prompt_text, is_default, is_active) VALUES
19+
('summary', 'Default Summary', 'You are an expert meeting summarizer. Analyze the following meeting transcript and create a concise summary.
20+
21+
Meeting Transcript:
22+
{transcript}
23+
24+
{context}
25+
26+
Create a clear, concise summary in 3-5 bullet points covering:
27+
- Main topics discussed
28+
- Key decisions or conclusions
29+
- Important highlights
30+
31+
Format your response as a bulleted list with each point starting with "- ".', 1, 1),
32+
33+
('action_item', 'Default Action Items', 'You are an expert at extracting action items from meetings. Analyze the following meeting transcript and identify all actionable tasks.
34+
35+
Meeting Transcript:
36+
{transcript}
37+
38+
{context}
39+
40+
Extract all action items, decisions requiring follow-up, and tasks mentioned. For each action item, provide:
41+
- The specific task or action
42+
- Who is responsible (if mentioned)
43+
- Any deadlines or timeframes (if mentioned)
44+
45+
Format each action item on a separate line starting with "- ". Be specific and actionable.', 1, 1),
46+
47+
('key_point', 'Default Key Points', 'You are an expert at identifying key discussion points from meetings. Analyze the following meeting transcript and extract the most important points.
48+
49+
Meeting Transcript:
50+
{transcript}
51+
52+
{context}
53+
54+
Identify 3-7 key points, insights, or important statements from the meeting. Focus on:
55+
- Critical information shared
56+
- Important questions raised
57+
- Significant agreements or disagreements
58+
- Notable insights or revelations
59+
60+
Format your response as a bulleted list with each point starting with "- ".', 1, 1),
61+
62+
('decision', 'Default Decisions', 'You are an expert at identifying decisions made in meetings. Analyze the following meeting transcript and extract all decisions.
63+
64+
Meeting Transcript:
65+
{transcript}
66+
67+
{context}
68+
69+
Identify all explicit or implicit decisions made during the meeting. For each decision, provide:
70+
- What was decided
71+
- The rationale or context (if provided)
72+
- Who made or approved the decision (if mentioned)
73+
74+
Format each decision on a separate line starting with "- ". Focus on concrete decisions, not just discussions.', 1, 1);
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
-- Model configuration overrides table
2+
-- Allows users to customize model-specific settings like context window
3+
CREATE TABLE IF NOT EXISTS model_overrides (
4+
id INTEGER PRIMARY KEY AUTOINCREMENT,
5+
provider TEXT NOT NULL, -- 'openai', 'anthropic', 'google', 'groq'
6+
model_id TEXT NOT NULL, -- Model identifier (e.g., 'gpt-4', 'claude-3-opus-20240229')
7+
context_window INTEGER, -- User-configured context window (overrides default)
8+
notes TEXT, -- User notes about this model
9+
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
10+
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
11+
UNIQUE(provider, model_id)
12+
);
13+
14+
CREATE INDEX idx_model_overrides_provider ON model_overrides(provider);
15+
CREATE INDEX idx_model_overrides_model ON model_overrides(model_id);
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
-- Add speaker_label to transcripts table for diarization support
2+
-- This allows storing speaker identification directly on transcript segments
3+
ALTER TABLE transcripts ADD COLUMN speaker_label TEXT;
4+
5+
CREATE INDEX IF NOT EXISTS idx_transcripts_speaker_label ON transcripts(speaker_label);

0 commit comments

Comments
 (0)