mirror of
https://github.com/earendil-works/pi.git
synced 2026-06-18 15:54:04 +08:00
fix(coding-agent): refresh active model after provider updates closes #2291
This commit is contained in:
@@ -2057,6 +2057,20 @@ export class AgentSession {
|
||||
: undefined;
|
||||
}
|
||||
|
||||
private _refreshCurrentModelFromRegistry(): void {
|
||||
const currentModel = this.model;
|
||||
if (!currentModel) {
|
||||
return;
|
||||
}
|
||||
|
||||
const refreshedModel = this._modelRegistry.find(currentModel.provider, currentModel.id);
|
||||
if (!refreshedModel || refreshedModel === currentModel) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.agent.setModel(refreshedModel);
|
||||
}
|
||||
|
||||
private _bindExtensionCore(runner: ExtensionRunner): void {
|
||||
const normalizeLocation = (source: string): SlashCommandLocation | undefined => {
|
||||
if (source === "user" || source === "project" || source === "path") {
|
||||
@@ -2165,6 +2179,16 @@ export class AgentSession {
|
||||
},
|
||||
getSystemPrompt: () => this.systemPrompt,
|
||||
},
|
||||
{
|
||||
registerProvider: (name, config) => {
|
||||
this._modelRegistry.registerProvider(name, config);
|
||||
this._refreshCurrentModelFromRegistry();
|
||||
},
|
||||
unregisterProvider: (name) => {
|
||||
this._modelRegistry.unregisterProvider(name);
|
||||
this._refreshCurrentModelFromRegistry();
|
||||
},
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -34,6 +34,7 @@ import type {
|
||||
InputEventResult,
|
||||
InputSource,
|
||||
MessageRenderer,
|
||||
ProviderConfig,
|
||||
RegisteredCommand,
|
||||
RegisteredTool,
|
||||
ResourcesDiscoverEvent,
|
||||
@@ -235,7 +236,14 @@ export class ExtensionRunner {
|
||||
this.modelRegistry = modelRegistry;
|
||||
}
|
||||
|
||||
bindCore(actions: ExtensionActions, contextActions: ExtensionContextActions): void {
|
||||
bindCore(
|
||||
actions: ExtensionActions,
|
||||
contextActions: ExtensionContextActions,
|
||||
providerActions?: {
|
||||
registerProvider?: (name: string, config: ProviderConfig) => void;
|
||||
unregisterProvider?: (name: string) => void;
|
||||
},
|
||||
): void {
|
||||
// Copy actions into the shared runtime (all extension APIs reference this)
|
||||
this.runtime.sendMessage = actions.sendMessage;
|
||||
this.runtime.sendUserMessage = actions.sendUserMessage;
|
||||
@@ -264,14 +272,30 @@ export class ExtensionRunner {
|
||||
|
||||
// Flush provider registrations queued during extension loading
|
||||
for (const { name, config } of this.runtime.pendingProviderRegistrations) {
|
||||
this.modelRegistry.registerProvider(name, config);
|
||||
if (providerActions?.registerProvider) {
|
||||
providerActions.registerProvider(name, config);
|
||||
} else {
|
||||
this.modelRegistry.registerProvider(name, config);
|
||||
}
|
||||
}
|
||||
this.runtime.pendingProviderRegistrations = [];
|
||||
|
||||
// From this point on, provider registration/unregistration takes effect immediately
|
||||
// without requiring a /reload.
|
||||
this.runtime.registerProvider = (name, config) => this.modelRegistry.registerProvider(name, config);
|
||||
this.runtime.unregisterProvider = (name) => this.modelRegistry.unregisterProvider(name);
|
||||
this.runtime.registerProvider = (name, config) => {
|
||||
if (providerActions?.registerProvider) {
|
||||
providerActions.registerProvider(name, config);
|
||||
return;
|
||||
}
|
||||
this.modelRegistry.registerProvider(name, config);
|
||||
};
|
||||
this.runtime.unregisterProvider = (name) => {
|
||||
if (providerActions?.unregisterProvider) {
|
||||
providerActions.unregisterProvider(name);
|
||||
return;
|
||||
}
|
||||
this.modelRegistry.unregisterProvider(name);
|
||||
};
|
||||
}
|
||||
|
||||
bindCommandContext(actions?: ExtensionCommandContextActions): void {
|
||||
|
||||
Reference in New Issue
Block a user