Introduce `App` with provider manager, unbounded message channel, and active generation tracking. Add `AppMessage` enum covering UI events, generation lifecycle (start, chunk, complete, error), model refresh, and provider status updates. Implement `start_generation` to spawn asynchronous generation tasks, stream results, handle errors, and abort any previous generation. Expose the new module via `pub mod app` in the crate root.
42 lines
1.2 KiB
Rust
42 lines
1.2 KiB
Rust
use crossterm::event::KeyEvent;
|
|
use owlen_core::provider::{GenerateChunk, GenerateRequest, ProviderStatus};
|
|
use uuid::Uuid;
|
|
|
|
/// Messages exchanged between the UI event loop and background workers.
|
|
#[derive(Debug)]
|
|
pub enum AppMessage {
|
|
/// User input event bubbled up from the terminal layer.
|
|
KeyPress(KeyEvent),
|
|
/// Terminal resize notification.
|
|
Resize { width: u16, height: u16 },
|
|
/// Periodic tick used to drive animations.
|
|
Tick,
|
|
/// Initiate a new text generation request.
|
|
GenerateStart {
|
|
request_id: Uuid,
|
|
provider_id: String,
|
|
request: GenerateRequest,
|
|
},
|
|
/// Streamed response chunk from the active generation task.
|
|
GenerateChunk {
|
|
request_id: Uuid,
|
|
chunk: GenerateChunk,
|
|
},
|
|
/// Generation finished successfully.
|
|
GenerateComplete { request_id: Uuid },
|
|
/// Generation failed or was aborted.
|
|
GenerateError {
|
|
request_id: Option<Uuid>,
|
|
message: String,
|
|
},
|
|
/// Trigger a background refresh of available models.
|
|
ModelsRefresh,
|
|
/// New model list data is ready.
|
|
ModelsUpdated,
|
|
/// Provider health status update.
|
|
ProviderStatus {
|
|
provider_id: String,
|
|
status: ProviderStatus,
|
|
},
|
|
}
|