Przejdź do głównej zawartości

AI Commands

Unified AI to centralna warstwa AI w Viście. Wszystkie wywołania AI przechodzą przez backend Tauri (unified_ai_* commands).

Client: src/services/ai/UnifiedAIClient.ts Types: src/types/api/ai.ts

flowchart TB
subgraph "Frontend"
AISuite[AI Suite Panel]
Chat[Chat Component]
SOAP[SOAP Generator]
Tasks[Task Suggestions]
end
subgraph "UnifiedAIClient"
chat[chat / chatStream]
transcribe[transcribe]
synthesize[synthesize]
generateSOAP[generateSOAP]
analyzeDoc[analyzeDocument]
end
subgraph "Backend"
unified_ai_chat
unified_ai_chat_stream
unified_ai_transcribe
unified_ai_synthesize
unified_ai_generate_soap
unified_ai_analyze_document
end
AISuite --> chat
Chat --> chat
SOAP --> generateSOAP
Tasks --> chat
chat --> unified_ai_chat
chat --> unified_ai_chat_stream

Główne API chatu w AI Suite.

UnifiedAIClient.chat(message: string, options?: ChatOptions): Promise<ChatResponse>
// Implementation
invokeWithSession('unified_ai_chat', buildChatPayload(...))
// → normalizeChatResponse(result)

Streaming odpowiedzi z tokenami.

UnifiedAIClient.chatStream(
message: string,
options: ChatOptions,
onToken: (token: string) => void,
onComplete: (response: ChatResponse) => void,
onError: (error: Error) => void
)
// Events
'ai-stream-token:<requestId>' → onToken
'ai-stream-complete:<requestId>' → onComplete
'ai-stream-error:<requestId>' → onError
// Fire-and-forget
invokeWithSession('unified_ai_chat_stream', buildChatPayload(..., { request_id }))

Chat w tle, bez pełnego UI.

UnifiedAIClient.chatBackground(message: string, options?: ChatOptions)
// → invokeWithSession('unified_ai_chat_background', payload)

Przerwanie streamingu.

UnifiedAIClient.cancelStream(requestId: string)
// → safeInvoke('unified_ai_cancel_stream', { requestId })
// Poll dłużej trwających odpowiedzi
UnifiedAIClient.pollResponse(responseId, { canonicalModel })
// → 'unified_ai_poll_response'
// Lista eventów odpowiedzi
UnifiedAIClient.listResponseEvents(responseId, { canonicalModel, starting_after })
// → 'unified_ai_list_response_events'

UnifiedAIClient.transcribe(audioBlob: Blob, options?: TranscribeOptions): Promise<TranscriptionResponse>
// Flow
Blob → Array<number>invokeWithSession('unified_ai_transcribe', {
audioData,
language,
format
})
// → normalizeTranscriptionResponse(result)

Text-to-Speech.

UnifiedAIClient.synthesize(text: string, options?: TTSOptions): Promise<Blob>
// Flow
invokeWithSession('unified_ai_synthesize', {
text,
voice,
language
})
// → number[] (audioData) → Blob('audio/mp3')

Generowanie notatek SOAP.

UnifiedAIClient.generateSOAP(
visitContext: VisitContext,
templateType?: string,
userId?: string
): Promise<SOAPResponse>
// Wymaga user_id
safeInvoke('unified_ai_generate_soap', {
visit_context,
template_type,
user_id
})

Analiza obrazów/PDF/tekstu.

UnifiedAIClient.analyzeDocument(
documentContent: string | ArrayBuffer,
documentType: 'image' | 'pdf' | 'text',
analysisPrompt: string
): Promise<AnalysisResponse>
// → invokeWithSession('unified_ai_analyze_document', { ... })

Service: src/services/aiTaskSuggestionsService.ts

CommandDescription
unified_ai_generate_tasksGeneruje sugestie zadań
unified_ai_list_task_suggestionsLista sugestii dla wizyty
unified_ai_accept_task_suggestionsAkceptacja sugestii
unified_ai_dismiss_task_suggestionsOdrzucenie sugestii
// Get suggestions via chat
UnifiedAIClient.getSuggestions(visitContext, suggestionType?)
// → chat(..., { canonicalModel: 'ai-suggestions' })

UnifiedAIClient.healthCheck(canonicalModel?: string): Promise<HealthStatus>
// → invokeWithSession('unified_ai_health_check', { canonical_model })

Mapowanie nazw kanonicznych na modele.

UnifiedAIClient.getModelMapping(canonicalModel: string): Promise<ModelMapping>
// → safeInvoke('unified_ai_get_model_mapping', { canonical_model })
// Canonical models
'chat' → konkretny model chatu
'ai-suggestions' → model dla sugestii
'vision' → model dla obrazów
UnifiedAIClient.testProviders(apiKeyOverride?: string): Promise<ProviderStatus[]>
// → invokeWithSession('unified_ai_test_providers', { api_key_override })
CommandService
unified_ai_connectivity_probeaiDiagnosticsService
unified_ai_mark_full_successbackgroundJobs
unified_ai_generate_suggestionserrorHandlingService
unified_ai_generate_differentialdifferentialService

Hook: src/features/ai-suite/hooks/useChatHistory.ts

loadDraft(): Promise<ChatMessage[]>
// → safeInvoke('ai_chat_draft_load', { context_key: storageKey })
persistDraft(messages: ChatMessage[]): Promise<void>
// Respects storage policy
if (!storagePolicy.shouldSaveChatHistory()) {
messages = []; // Send empty if history disabled
}
// → safeInvoke('ai_chat_draft_save', { context_key, messages })

API: src/types/api/ai.tschatSessionsApi

Trwały zapis historii rozmowy.

chatSessionsApi.save({
visitId?: string,
messages: ChatMessage[]
})
// → safeInvoke('ai_chat_session_save', {
// visit_id,
// messages: [{ role, content, timestamp }]
// })
chatSessionsApi.list({
limit?: number, // default 20
offset?: number, // default 0
visitId?: string
})
// → safeInvoke('ai_chat_sessions_list', { limit, offset, visit_id })

Pamięć kontekstowa AI - przechowywanie snippetów do promptów.

API: src/types/api/ai.tscontextVaultApi

contextVaultApi.upsert(entries: ContextEntry[])
interface ContextEntry {
namespace: string;
visit_id?: string;
label: string;
snippet: string;
metadata?: Record<string, any>;
}
// → safeInvoke('ai_context_vault_upsert', { entries })

Wyszukiwanie podobnych fragmentów (embedding lub tekst).

contextVaultApi.query({
namespace: string,
query?: string,
query_embedding?: number[],
limit?: number
})
// → safeInvoke('ai_context_vault_query', params)
contextVaultApi.clear(namespace?: string)
// → safeInvoke('ai_context_vault_clear', { namespace })

Efekt “glass” dla odłączonego okna asystenta.

useAssistantDetachedWindow.ts
if (isTauriEnv) {
safeInvoke('vista_apply_glass', { label: DETACHED_WINDOW_LABEL });
}

CategoryCommands
Chatunified_ai_chat, unified_ai_chat_stream, unified_ai_chat_background, unified_ai_cancel_stream
Pollingunified_ai_poll_response, unified_ai_list_response_events
Audiounified_ai_transcribe, unified_ai_synthesize
Documentsunified_ai_generate_soap, unified_ai_analyze_document
Tasksunified_ai_generate_tasks, unified_ai_list_task_suggestions, unified_ai_accept_task_suggestions, unified_ai_dismiss_task_suggestions
Healthunified_ai_health_check, unified_ai_get_model_mapping, unified_ai_test_providers
Draftsai_chat_draft_load, ai_chat_draft_save
Sessionsai_chat_session_save, ai_chat_sessions_list
Vaultai_context_vault_upsert, ai_context_vault_query, ai_context_vault_clear