Memory: adopt shared backend policy
This commit is contained in:
parent
72839309ec
commit
6a9dd8765d
@ -33,7 +33,7 @@ vi.mock("../memory/backend-config.js", () => ({
|
||||
resolveMemoryBackendConfig,
|
||||
}));
|
||||
|
||||
vi.mock("../extension-host/runtime-backend-catalog.js", () => ({
|
||||
vi.mock("../extension-host/embedding-runtime-policy.js", () => ({
|
||||
listExtensionHostEmbeddingRemoteRuntimeBackendIds,
|
||||
}));
|
||||
|
||||
|
||||
@ -4,8 +4,8 @@ import { resolveMemorySearchConfig } from "../agents/memory-search.js";
|
||||
import { resolveApiKeyForProvider } from "../agents/model-auth.js";
|
||||
import { formatCliCommand } from "../cli/command-format.js";
|
||||
import type { OpenClawConfig } from "../config/config.js";
|
||||
import { listExtensionHostEmbeddingRemoteRuntimeBackendIds } from "../extension-host/embedding-runtime-policy.js";
|
||||
import { DEFAULT_LOCAL_EMBEDDING_MODEL } from "../extension-host/embedding-runtime.js";
|
||||
import { listExtensionHostEmbeddingRemoteRuntimeBackendIds } from "../extension-host/runtime-backend-catalog.js";
|
||||
import { resolveMemoryBackendConfig } from "../memory/backend-config.js";
|
||||
import { hasConfiguredMemorySecretInput } from "../memory/secret-input.js";
|
||||
import { note } from "../terminal/note.js";
|
||||
|
||||
@ -1,10 +1,20 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import {
|
||||
listExtensionHostEmbeddingRemoteRuntimeBackendIds,
|
||||
resolveExtensionHostEmbeddingFallbackModel,
|
||||
resolveExtensionHostEmbeddingFallbackPolicy,
|
||||
} from "./embedding-runtime-policy.js";
|
||||
|
||||
describe("embedding-runtime-policy", () => {
|
||||
it("uses the shared runtime-backend policy for remote auto-provider order", () => {
|
||||
expect(listExtensionHostEmbeddingRemoteRuntimeBackendIds()).toEqual([
|
||||
"openai",
|
||||
"gemini",
|
||||
"voyage",
|
||||
"mistral",
|
||||
]);
|
||||
});
|
||||
|
||||
it("returns null when fallback is disabled or would repeat the requested provider", () => {
|
||||
expect(
|
||||
resolveExtensionHostEmbeddingFallbackPolicy({
|
||||
|
||||
@ -4,6 +4,16 @@ import type {
|
||||
EmbeddingProviderId,
|
||||
EmbeddingProviderRequest,
|
||||
} from "./embedding-runtime-types.js";
|
||||
import { listExtensionHostEmbeddingRuntimeBackendCatalogEntries } from "./runtime-backend-catalog.js";
|
||||
import { resolveExtensionHostRuntimeBackendIdsByPolicy } from "./runtime-backend-policy.js";
|
||||
|
||||
export function listExtensionHostEmbeddingRemoteRuntimeBackendIds(): readonly EmbeddingProviderId[] {
|
||||
return resolveExtensionHostRuntimeBackendIdsByPolicy({
|
||||
entries: listExtensionHostEmbeddingRuntimeBackendCatalogEntries(),
|
||||
subsystemId: "embedding",
|
||||
include: (entry) => entry.backendId !== "local" && entry.metadata?.autoSelectable === true,
|
||||
}).map((backendId) => backendId as EmbeddingProviderId);
|
||||
}
|
||||
|
||||
export function resolveExtensionHostEmbeddingFallbackPolicy(params: {
|
||||
requestedProvider: EmbeddingProviderRequest | EmbeddingProviderId;
|
||||
|
||||
@ -6,7 +6,10 @@ const listExtensionHostEmbeddingRemoteRuntimeBackendIds = vi.hoisted(() =>
|
||||
const createGeminiEmbeddingProvider = vi.hoisted(() => vi.fn());
|
||||
const createOpenAiEmbeddingProvider = vi.hoisted(() => vi.fn());
|
||||
|
||||
vi.mock("./runtime-backend-catalog.js", () => ({
|
||||
vi.mock("./embedding-runtime-policy.js", async () => ({
|
||||
...(await vi.importActual<typeof import("./embedding-runtime-policy.js")>(
|
||||
"./embedding-runtime-policy.js",
|
||||
)),
|
||||
listExtensionHostEmbeddingRemoteRuntimeBackendIds,
|
||||
}));
|
||||
|
||||
|
||||
@ -26,14 +26,16 @@ import {
|
||||
import { importNodeLlamaCpp } from "../memory/node-llama.js";
|
||||
import { resolveUserPath } from "../utils.js";
|
||||
import { DEFAULT_EXTENSION_HOST_LOCAL_EMBEDDING_MODEL } from "./embedding-runtime-backends.js";
|
||||
import { resolveExtensionHostEmbeddingFallbackPolicy } from "./embedding-runtime-policy.js";
|
||||
import {
|
||||
listExtensionHostEmbeddingRemoteRuntimeBackendIds,
|
||||
resolveExtensionHostEmbeddingFallbackPolicy,
|
||||
} from "./embedding-runtime-policy.js";
|
||||
import type {
|
||||
EmbeddingProvider,
|
||||
EmbeddingProviderId,
|
||||
EmbeddingProviderOptions,
|
||||
EmbeddingProviderResult,
|
||||
} from "./embedding-runtime-types.js";
|
||||
import { listExtensionHostEmbeddingRemoteRuntimeBackendIds } from "./runtime-backend-catalog.js";
|
||||
|
||||
export type {
|
||||
GeminiEmbeddingClient,
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
import { beforeEach, describe, expect, it, vi } from "vitest";
|
||||
import { listExtensionHostEmbeddingRemoteRuntimeBackendIds } from "./embedding-runtime-policy.js";
|
||||
|
||||
vi.mock("./embedding-runtime-backends.js", () => ({
|
||||
EXTENSION_HOST_EMBEDDING_RUNTIME_BACKEND_IDS: [
|
||||
@ -154,7 +155,7 @@ describe("runtime-backend-catalog", () => {
|
||||
subsystemId: "tts",
|
||||
backendId: "edge",
|
||||
});
|
||||
expect(catalog.listExtensionHostEmbeddingRemoteRuntimeBackendIds()).toEqual([
|
||||
expect(listExtensionHostEmbeddingRemoteRuntimeBackendIds()).toEqual([
|
||||
"openai",
|
||||
"gemini",
|
||||
"voyage",
|
||||
|
||||
@ -5,7 +5,6 @@ import {
|
||||
EXTENSION_HOST_EMBEDDING_RUNTIME_BACKEND_IDS,
|
||||
isExtensionHostEmbeddingRuntimeBackendAutoSelectable,
|
||||
} from "./embedding-runtime-backends.js";
|
||||
import type { EmbeddingProviderId } from "./embedding-runtime-types.js";
|
||||
import {
|
||||
buildExtensionHostMediaRuntimeSelectorKeys,
|
||||
listExtensionHostMediaAutoRuntimeBackendSeedIds,
|
||||
@ -83,14 +82,6 @@ export function listExtensionHostEmbeddingRuntimeBackendCatalogEntries(): readon
|
||||
}));
|
||||
}
|
||||
|
||||
export function listExtensionHostEmbeddingRemoteRuntimeBackendIds(): readonly EmbeddingProviderId[] {
|
||||
return listExtensionHostRuntimeBackendIdsByArbitration({
|
||||
entries: listExtensionHostEmbeddingRuntimeBackendCatalogEntries(),
|
||||
subsystemId: "embedding",
|
||||
include: (entry) => entry.backendId !== "local" && entry.metadata?.autoSelectable === true,
|
||||
}).map((entry) => entry as EmbeddingProviderId);
|
||||
}
|
||||
|
||||
export function listExtensionHostMediaRuntimeBackendCatalogEntries(): readonly ExtensionHostRuntimeBackendCatalogEntry[] {
|
||||
const entries: ExtensionHostRuntimeBackendCatalogEntry[] = [];
|
||||
for (const capability of ["audio", "image", "video"] as const) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user