feat: improve Hermes provider support

This commit is contained in:
Simos Mikelatos
2026-06-30 20:59:40 +00:00
parent f188648a2a
commit 5c14e08493
13 changed files with 212 additions and 78 deletions

View File

@@ -174,7 +174,6 @@ export function useChatComposerState({
codexModel,
geminiModel,
opencodeModel,
hermesModel,
isLoading,
canAbortSession,
tokenBudget,
@@ -339,7 +338,7 @@ export function useChatComposerState({
: provider === 'opencode'
? opencodeModel
: provider === 'hermes'
? (hermesModel === '__hermes_configured_model__' ? undefined : hermesModel)
? undefined
: claudeModel,
tokenUsage: tokenBudget,
};
@@ -395,7 +394,6 @@ export function useChatComposerState({
cursorModel,
geminiModel,
opencodeModel,
hermesModel,
handleBuiltInCommand,
handleCustomCommand,
input,
@@ -737,7 +735,7 @@ export function useChatComposerState({
: provider === 'opencode'
? opencodeModel
: provider === 'hermes'
? (hermesModel === '__hermes_configured_model__' ? undefined : hermesModel)
? undefined
: claudeModel;
// One message shape for every provider. The backend resolves the
@@ -783,7 +781,6 @@ export function useChatComposerState({
executeCommand,
geminiModel,
opencodeModel,
hermesModel,
isLoading,
onSessionProcessing,
onSessionEstablished,

View File

@@ -417,6 +417,15 @@ export function useChatProviderState({ selectedSession, selectedProject }: UseCh
model: string,
sessionId?: string | null,
) => {
if (targetProvider === 'hermes') {
setStoredProviderModel(targetProvider, model);
return {
scope: 'default' as const,
changed: false,
model,
};
}
const normalizedSessionId = typeof sessionId === 'string' ? sessionId.trim() : '';
if (!normalizedSessionId) {
setStoredProviderModel(targetProvider, model);

View File

@@ -289,15 +289,11 @@ export default function ProviderSelectionEmptyState({
>
<div className="min-w-0 flex-1">
<div className="truncate">{model.label}</div>
{/*
// * Temporarly commented out because the description of models from claude
// * was a bit inconsistent. Will return it back when it becomes more consistent.
*/}
{/* {model.description && (
{model.description && (
<div className="truncate text-xs text-muted-foreground">
{model.description}
</div>
)} */}
)}
</div>
{isSelected && (
<Check className="ml-auto h-4 w-4 shrink-0 text-primary" />
@@ -332,7 +328,7 @@ export default function ProviderSelectionEmptyState({
defaultValue: "Ready with OpenCode {{model}}",
}),
hermes: t("providerSelection.readyPrompt.hermes", {
model: hermesModel,
model: provider === "hermes" ? currentModelLabel : hermesModel,
defaultValue: "Ready with Hermes {{model}}",
}),
}[provider]