{ "MeetingAssistant": { "Hotkey": { "Toggle": "Ctrl+Alt+M" }, "Vault": { "BaseFolder": "%USERPROFILE%\\OpenCloud\\Persönlich\\Vault\\Exxeta", "TranscriptsFolder": "Meetings\\Transcripts", "MeetingNotesFolder": "Meetings\\Notes", "AssistantContextFolder": "Meetings\\Assistant Context", "SummariesFolder": "Meetings\\Summaries", "ProjectsFolder": "Projects", "DictationWordsPath": "C:\\Users\\masc3\\OpenCloud\\Persönlich\\Vault\\Exxeta\\Meetings\\Dictionary.md" }, "Recording": { "TranscriptionProvider": "azure-speech", "SampleRate": 16000, "Channels": 1, "StopProcessingTimeout": "00:10:00", "MetadataLookupTimeout": "00:00:10", "BackgroundMetadataLookupTimeout": "00:01:00", "OpenMeetingNoteDelay": "00:00:01", "TemporaryRecordingsFolder": "%LOCALAPPDATA%\\MeetingAssistant\\Recordings" }, "FunAsr": { "Endpoint": "ws://127.0.0.1:10095", "Mode": "2pass", "ChunkSize": [ 5, 10, 5 ], "ChunkInterval": 10, "EncoderChunkLookBack": 4, "DecoderChunkLookBack": 1, "Itn": true, "EmitOnlinePartials": false, "WavName": "meeting", "FinalResultTimeout": "00:00:10", "Backend": { "Enabled": true, "DockerCommand": "docker", "Image": "registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-online-cpu-0.1.13", "ContainerName": "meeting-assistant-funasr", "ModelsFolder": "%LOCALAPPDATA%\\MeetingAssistant\\FunASR\\models", "ContainerPort": 10095, "Privileged": true, "CommandTimeout": "00:15:00", "StartupTimeout": "00:10:00", "StopOnDispose": true, "ServerCommand": "cd /workspace/FunASR/runtime && bash run_server_2pass.sh --download-model-dir /workspace/models --vad-dir damo/speech_fsmn_vad_zh-cn-16k-common-onnx --model-dir damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-onnx --online-model-dir damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online-onnx --punc-dir damo/punc_ct-transformer_zh-cn-common-vad_realtime-vocab272727-onnx --itn-dir thuduj12/fst_itn_zh --certfile 0 --hotword /workspace/models/hotwords.txt && tail -f /dev/null" }, "Diarization": { "Enabled": true, "AsrModel": "paraformer-zh", "VadModel": "fsmn-vad", "PunctuationModel": "ct-punc", "SpeakerModel": "cam++", "BatchSizeSeconds": 300, "BatchSizeThresholdSeconds": 60, "CommandTimeout": "00:30:00" } }, "WhisperLocal": { "ModelPath": "models\\ggml-base.bin", "Language": "auto", "WindowSeconds": 15, "Diarization": { "Enabled": true, "DockerCommand": "docker", "BaseImage": "python:3.11-slim", "Image": "meeting-assistant-pyannote:local", "BuildImage": true, "ModelsFolder": "%LOCALAPPDATA%\\MeetingAssistant\\Pyannote\\models", "Model": "pyannote/speaker-diarization-3.1", "AnnotationSource": "SpeakerDiarization", "AlignmentMode": "PyannoteTurns", "TokenEnv": "HF_TOKEN", "CommandTimeout": "00:30:00" } }, "AzureSpeech": { "Endpoint": "wss://germanywestcentral.stt.speech.microsoft.com/speech/universal/v2", "Region": "germanywestcentral", "Language": "de-DE", "AutoDetectLanguages": [ "de-DE" ], "LanguageIdMode": "Continuous", "KeyEnv": "AZURE_SPEECH_KEY", "RecognitionStopTimeout": "00:00:10", "DiarizeIntermediateResults": true, "PhraseListWeight": 1.5 }, "SpeakerIdentification": { "Enabled": true, "DatabasePath": "%LOCALAPPDATA%\\MeetingAssistant\\SpeakerIdentity\\speaker-identities.db", "InitialDelay": "00:02:00", "Interval": "00:02:00", "MatchBatchSize": 6, "MaxMatchCandidates": 100, "MatchIdentityActiveAge": "365.00:00:00", "MaxSnippetsPerSpeaker": 3, "SilenceBetweenSnippetsSeconds": 1, "LiveSampleBufferDuration": "00:10:00", "MergeRecentIdentityAge": "14.00:00:00" }, "Agent": { "Endpoint": "https://litellm.schweigert.cloud", "KeyEnv": "LITELLM_API_KEY", "Model": "copilot-gpt-5.5", "EnableThinking": true, "ReasoningEffort": "Medium", "ReconnectionAttempts": 2, "ReconnectionDelay": "00:00:02", "ContextWindowTokens": 128000, "MaxOutputTokens": 8192, "EnableCompaction": true, "CompactionRemainingRatio": 0.1, "ResponsesCompactPath": "responses/compact", "InitialPrompt": "You are the Meeting Assistant summary agent.\n\nUse the provided tools to read the meeting transcript, assistant context, user notes, glossary, and project files.\nAll read tools can return the whole file or a clamped inclusive line range when from and to are supplied; use ranges for large inputs before asking for more lines.\nThen write the finished meeting summary as markdown by calling write_summary. If the meeting note has no title, provide a concise title parameter to write_summary.\nUse read_meetingnote to inspect frontmatter such as title, attendees, projects, start_time, and end_time.\nUse read_context and write_context as your own meeting notebook. Its frontmatter may include agenda from the calendar appointment. Record useful internal notes, missing context, requests for future tools, suggested improvements, and relevant context discovered from other sources. Keep user-facing summary content in the summary note.\nUse add_dictation_word when project context, user notes, or transcript evidence show that a domain term, acronym, name, or unusual word is likely to be repeatedly mistranscribed. Add only the canonical spelling, one term at a time.\nAfter writing the summary, update existing project files when the meeting produced durable project knowledge, decisions, next steps, or context.\nUse list_projects first to see which projects are bound to this meeting. Use search and read_projectfile before changing existing project files.\nThe summary note should contain concise sections for summary, decisions, open questions, and next steps.\nKeep the output grounded in the source material and explicitly say when a section has no known items." }, "Api": { "PublicBaseUrl": "http://localhost:5090" } }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*" }