AI Suite Overview
Przegląd całego AI Suite: architektura Unified AI, kluczowe funkcje i modele kanoniczne.
Na tej stronie
Overview
Dział zatytułowany „Overview”AI Suite to zintegrowany system AI w Vista, oparty na architekturze Unified AI. Wszystkie wywołania AI przechodzą przez backend Tauri (unified_ai_* commands).
Architecture
Dział zatytułowany „Architecture”flowchart TB subgraph Frontend["Frontend Components"] Chat[AI Chat Panel] SOAP[SOAP Generator] Tasks[Task Suggestions] PDF[PDF Analyzer] Assistants[AI Specialists] end
subgraph Hooks["React Hooks"] useChat[useChatHistory] useSOAP[useSOAPGeneration] useTasks[useAiTaskSuggestions] useNotes[useNotesAgent] end
subgraph UnifiedAI["Unified AI Client"] Client[UnifiedAIClient.ts] end
subgraph Backend["Tauri Backend"] Commands[unified_ai_*<br/>commands] Providers[AI Providers<br/>OpenAI, Anthropic] end
Frontend --> Hooks Hooks --> Client Client --> Commands Commands --> ProvidersCore Features
Dział zatytułowany „Core Features”| Feature | Description | Command |
|---|---|---|
| SOAP Generation | Auto-generowanie notatek SOAP | unified_ai_generate_soap |
| AI Chat | Interaktywny chat z AI | unified_ai_chat / _stream |
| Task Suggestions | Sugestie zadań po wizycie | unified_ai_generate_tasks |
| PDF Analysis | Analiza dokumentów | unified_ai_analyze_document |
| AI Assistants | Specjaliści AI | Chat z kontekstem |
Unified AI Client
Dział zatytułowany „Unified AI Client”Plik: src/services/ai/UnifiedAIClient.ts
// Main entry point for all AI operationsconst UnifiedAIClient = { // Chat chat(message, options), chatStream(message, options, onToken, onComplete, onError), chatBackground(message, options), cancelStream(requestId),
// SOAP generateSOAP(visitContext, templateType, userId),
// Documents analyzeDocument(content, type, prompt),
// Audio transcribe(audioBlob, options), synthesize(text, options),
// Health healthCheck(canonicalModel), getModelMapping(canonicalModel), testProviders(apiKeyOverride),};Canonical Models
Dział zatytułowany „Canonical Models”AI Suite używa abstrakcji “canonical models” do mapowania na konkretne modele:
| Canonical | Use Case | Example Provider |
|---|---|---|
chat | General chat | Libraxis AI, openAI |
ai-suggestions | Task/SOAP suggestions | Libraxis AI |
vision | Image analysis | Vision LLM |
transcription | Audio STT | Whisper |
tts | Text-to-speech | TTS Provider |
// Get actual model for canonical nameconst model = await UnifiedAIClient.getModelMapping('chat');// → { provider: 'libraxis', model: 'chat' }Context Building
Dział zatytułowany „Context Building”AI potrzebuje kontekstu do generowania odpowiedzi:
Patient Context
Dział zatytułowany „Patient Context”interface AINotesPatientData { name: string; species: string; breed: string; age: number; weight: number; owner: string; medicalHistory?: string[]; allergies?: string[];}Visit Context
Dział zatytułowany „Visit Context”interface AINotesVisitData { visitType: string; reasonForVisit: string; transcript: string; vetName: string; previousVisits?: VisitSummary[];}Session Integration
Dział zatytułowany „Session Integration”Wszystkie AI calls wymagają aktywnej sesji:
// invokeWithSession wraps all AI callsinvokeWithSession('unified_ai_chat', { message, options, session_id, // Auto-injected});Error Handling
Dział zatytułowany „Error Handling”try { const response = await UnifiedAIClient.chat(message);} catch (error) { if (error instanceof AIProviderError) { // Provider-specific error (rate limit, invalid key) } else if (error instanceof SessionNotReadyError) { // Session expired } else { // Generic error }}Streaming
Dział zatytułowany „Streaming”Chat obsługuje streaming dla lepszego UX:
UnifiedAIClient.chatStream( message, options, (token) => { // Append token to response appendToResponse(token); }, (response) => { // Complete response setFinalResponse(response); }, (error) => { // Handle error showError(error); });Context Vault
Dział zatytułowany „Context Vault”AI Suite ma “pamięć” - Context Vault:
// Save context snippetsawait contextVaultApi.upsert([{ namespace: 'visit', visit_id: visitId, label: 'patient_history', snippet: patientHistory,}]);
// Query similar contextconst similar = await contextVaultApi.query({ namespace: 'visit', query: currentSymptoms, limit: 5,});Feature Flags
Dział zatytułowany „Feature Flags”AI features mogą być włączane/wyłączane:
| Feature | Setting | Default |
|---|---|---|
| SOAP Auto-generate | ai_soap_enabled | true |
| Task Suggestions | ai_tasks_enabled | true |
| Chat History | ai_chat_history | true |
| TTS | tts_enabled | false |
Detailed Architecture
Dział zatytułowany „Detailed Architecture”AI Suite to 149 plików i 22,600 LOC - największy moduł w Vista.
graph TB subgraph Frontend["AI Suite Frontend (149 files, 22.6k LOC)"] subgraph Engine["Engine Layer"] AIChatContext[AIChatContext] AIChatProvider[AIChatProvider] AssistantHostManager[AssistantHostManager] end
subgraph Hosts["Host Components"] FloatingHost[AIFloatingHost<br/>Orb + Panel] SystemHost[AISystemHost<br/>Full-page] SpecialistHost[AISpecialistHost<br/>Visit context] end
subgraph Hooks["Core Hooks"] useStreamingManager[useStreamingManager<br/>977 LOC] useUnifiedAI[useUnifiedAI<br/>439 LOC] useChatHistory[useChatHistory<br/>318 LOC] useChatSending[useChatSending<br/>380 LOC] end
subgraph UI["UI Components"] InputArea[InputArea<br/>655 LOC] ChatCanvas[AIChatCanvas<br/>1,078 LOC] FloatingOrb[AIFloatingOrb<br/>570 LOC] MessageList[FloatingMessageList] end
subgraph Agents["AI Agents"] NotesAgent[Notes Agent] SuggestionsAgent[Suggestions Agent] VoiceAgent[Voice Agent] end end
subgraph Backend["Rust Backend (40 commands)"] UnifiedAI[unified_ai module] SOAP[soap_generation.rs<br/>24,961 LOC] ChatB[chat/service.rs] VectorMemory[vector_memory/] Diagnostics[diagnostics.rs<br/>28,669 LOC] end
Engine --> Hosts Hooks --> Engine UI --> Hooks Agents --> Hooks Hooks --> UnifiedAIAI Rust Commands (40 total)
Dział zatytułowany „AI Rust Commands (40 total)”| Category | Commands |
|---|---|
| Chat | unified_ai_chat, unified_ai_chat_stream, unified_ai_poll_response |
| SOAP | start_soap_generation, get_soap_generation_status, unified_ai_generate_soap |
| Suggestions | unified_ai_generate_suggestions, unified_ai_generate_tasks, unified_ai_generate_differential |
| Memory | get_vista_memory, save_vista_memory, ai_context_vault_* |
| Sessions | ai_chat_session_save, ai_chat_sessions_list, ai_chat_session_load |
| Diagnostics | diagnostics_ai_config, diagnostics_ai_curl, unified_ai_health_check |
Key Components LOC
Dział zatytułowany „Key Components LOC”| Component | LOC | Odpowiedzialność |
|---|---|---|
| useStreamingManager | 977 | Token streaming, event handling |
| AIChatCanvas | 1,078 | Message rendering, scroll |
| InputArea | 655 | Message input, attachments |
| AIFloatingOrb | 570 | Floating AI button |
| useUnifiedAI | 439 | Main AI hook |
| useChatSending | 380 | Message sending logic |
| useChatHistory | 318 | Chat history management |
Host Types
Dział zatytułowany „Host Types”| Host | Użycie | Kontekst |
|---|---|---|
| AIFloatingHost | Orb + sliding panel | Global, always available |
| AISystemHost | Full-page AI view | Standalone page |
| AISpecialistHost | Specialist mode | Visit context, patient data |
Related
Dział zatytułowany „Related”- AI Commands - Full API reference
- SOAP Generation - SOAP details
- AI Chat - Chat interface
- Backend: Unified AI - Backend implementation