Skip to content

Commit d2a3d6f

Browse files
committed
seems working
1 parent 1a35632 commit d2a3d6f

File tree

19 files changed

+295
-435
lines changed

19 files changed

+295
-435
lines changed

Cargo.lock

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/desktop/src/components/settings/components/ai/stt-view-local.tsx

Lines changed: 39 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,10 @@ export function STTViewLocal({
112112
{amAvailable && (
113113
<ProModelsManagement
114114
on={!!servers.data?.external}
115+
selectedSTTModel={selectedSTTModel}
116+
setSelectedSTTModel={setSelectedSTTModel}
117+
downloadingModels={downloadingModels}
118+
handleModelDownload={handleModelDownload}
115119
/>
116120
)}
117121
</div>
@@ -142,7 +146,7 @@ function BasicModelsManagement({
142146
<div className="flex flex-col mb-3">
143147
<div className={cn(["text-sm font-semibold text-gray-700 flex items-center gap-2"])}>
144148
<h3>Basic Models</h3>
145-
<span className={cn(["w-2 h-2 rounded-full", on ? "bg-blue-300 animate-pulse" : "bg-red-300"])} />
149+
<span className={cn(["w-2 h-2 rounded-full", on ? "bg-blue-300 animate-pulse" : "bg-gray-100"])} />
146150
</div>
147151
<p className="text-xs text-gray-500">Default inference mode powered by Whisper.cpp.</p>
148152
</div>
@@ -164,14 +168,36 @@ function BasicModelsManagement({
164168
);
165169
}
166170

167-
function ProModelsManagement({ on }: { on: boolean }) {
171+
function ProModelsManagement(
172+
{ on, selectedSTTModel, setSelectedSTTModel, downloadingModels, handleModelDownload }: {
173+
on: boolean;
174+
selectedSTTModel: string;
175+
setSelectedSTTModel: (model: string) => void;
176+
downloadingModels: Set<string>;
177+
handleModelDownload: (model: string) => void;
178+
},
179+
) {
180+
const handleShowFileLocation = async () => {
181+
localSttCommands.modelsDir().then((path) => openPath(path));
182+
};
183+
168184
const proModels = useQuery({
169185
queryKey: ["pro-models"],
170186
queryFn: async () => {
171-
const models = await localSttCommands.listSupportedModels();
172-
return models.filter((model) =>
173-
model.key === "am-whisper-small-en" || model.key === "am-whisper-large-v3" || model.key === "am-parakeet-v2"
187+
const models = await localSttCommands.listSupportedModels().then((models) =>
188+
models.filter((model) => model.key === "am-whisper-large-v3" || model.key === "am-parakeet-v2")
174189
);
190+
const downloaded = await Promise.all(
191+
models.map(({ key }) => localSttCommands.isModelDownloaded(key)),
192+
);
193+
194+
return models.map((model, index) => ({
195+
name: model.display_name,
196+
key: model.key,
197+
downloaded: downloaded[index],
198+
size: `${(model.size_bytes / 1024 / 1024).toFixed(0)} MB`,
199+
fileName: "",
200+
}));
175201
},
176202
});
177203

@@ -181,7 +207,7 @@ function ProModelsManagement({ on }: { on: boolean }) {
181207
<div className="flex flex-col mb-3">
182208
<div className="text-sm font-semibold text-gray-700 flex items-center gap-2">
183209
<h3>Pro Models</h3>
184-
<span className={cn(["w-2 h-2 rounded-full", on ? "bg-blue-300 animate-pulse" : "bg-red-300"])} />
210+
<span className={cn(["w-2 h-2 rounded-full", on ? "bg-blue-300 animate-pulse" : "bg-gray-100"])} />
185211
</div>
186212
<p className="text-xs text-gray-500">
187213
Latency and resource optimized. Only for pro plan users.
@@ -192,19 +218,13 @@ function ProModelsManagement({ on }: { on: boolean }) {
192218
{proModels.data?.map((model) => (
193219
<ModelEntry
194220
key={model.key}
195-
disabled={true}
196-
model={{
197-
name: model.display_name,
198-
key: model.key,
199-
downloaded: false,
200-
size: `${(model.size_bytes / 1024 / 1024).toFixed(0)} MB`,
201-
fileName: "",
202-
}}
203-
selectedSTTModel={""}
204-
setSelectedSTTModel={() => {}}
205-
downloadingModels={new Set()}
206-
handleModelDownload={() => {}}
207-
handleShowFileLocation={() => {}}
221+
disabled={false}
222+
model={model}
223+
selectedSTTModel={selectedSTTModel}
224+
setSelectedSTTModel={setSelectedSTTModel}
225+
downloadingModels={downloadingModels}
226+
handleModelDownload={handleModelDownload}
227+
handleShowFileLocation={handleShowFileLocation}
208228
/>
209229
))}
210230
</div>

crates/am/Cargo.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,20 @@ version = "0.1.0"
44
edition = "2021"
55

66
[dev-dependencies]
7+
hf-hub = "0.4.3"
78
tokio = { workspace = true, features = ["rt", "macros"] }
89

910
[dependencies]
1011
hypr-download-interface = { workspace = true }
12+
hypr-file = { workspace = true }
1113

12-
hf-hub = "0.4.3"
1314
reqwest = { workspace = true, features = ["json"] }
15+
tracing = { workspace = true }
1416

1517
dirs = { workspace = true }
1618
serde = { workspace = true, features = ["derive"] }
1719
serde_json = { workspace = true }
1820
specta = { workspace = true, features = ["derive"] }
1921
strum = { workspace = true, features = ["derive"] }
22+
tar = "0.4.44"
2023
thiserror = { workspace = true }

crates/am/src/client.rs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,15 +100,25 @@ impl InitRequest {
100100
Self {
101101
api_key: api_key.into(),
102102
model: None,
103-
download_base: None,
104103
model_repo: None,
105104
model_folder: None,
106105
}
107106
}
108107

109-
pub fn with_model(mut self, model: crate::AmModel) -> Self {
110-
self.model = Some(model.model_key().to_string());
108+
pub fn with_model(
109+
mut self,
110+
model: crate::AmModel,
111+
base_dir: impl AsRef<std::path::Path>,
112+
) -> Self {
113+
self.model = Some(model.model_dir().to_string());
111114
self.model_repo = Some(model.repo_name().to_string());
115+
self.model_folder = Some(
116+
base_dir
117+
.as_ref()
118+
.join(model.model_dir())
119+
.to_string_lossy()
120+
.to_string(),
121+
);
112122
self
113123
}
114124
}

crates/am/src/error.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ pub enum Error {
66
#[error(transparent)]
77
Request(#[from] reqwest::Error),
88

9+
#[error(transparent)]
10+
HyprFile(#[from] hypr_file::Error),
11+
912
#[error("Could not find home directory")]
1013
NoHomeDir,
1114

@@ -17,4 +20,7 @@ pub enum Error {
1720

1821
#[error("Unexpected response from server")]
1922
UnexpectedResponse,
23+
24+
#[error("Checksum mismatch")]
25+
ChecksumMismatch,
2026
}

0 commit comments

Comments
 (0)