fix: align runtime startup and model events
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { mkdir } from "node:fs/promises";
|
||||
import { join, resolve } from "node:path";
|
||||
import { pathToFileURL } from "node:url";
|
||||
import { dirname, join, resolve } from "node:path";
|
||||
import { fileURLToPath, pathToFileURL } from "node:url";
|
||||
import {
|
||||
FileAttachmentStore,
|
||||
HarnessSession,
|
||||
@@ -22,7 +22,7 @@ import { loadServerConfig } from "./config.js";
|
||||
|
||||
export async function buildDefaultApp(environment: NodeJS.ProcessEnv = process.env) {
|
||||
const config = loadServerConfig(environment);
|
||||
const projectRoot = process.cwd();
|
||||
const projectRoot = resolve(dirname(fileURLToPath(import.meta.url)), "../../..");
|
||||
const sessionsRoot = resolve(projectRoot, config.sessionsRoot);
|
||||
const agentDir = resolve(projectRoot, config.agentDir);
|
||||
await mkdir(sessionsRoot, { recursive: true, mode: 0o700 });
|
||||
|
||||
@@ -21,9 +21,32 @@ export function registerModelRoutes(app: FastifyInstance, dependencies: AppDepen
|
||||
if (session.isBusy === true) {
|
||||
throw new HarnessError("SESSION_BUSY", "Model configuration cannot change during a run");
|
||||
}
|
||||
const input = ModelConnectionInputSchema.parse(request.body);
|
||||
await dependencies.modelStore.configure(sessionId, input);
|
||||
return { modelConfig: dependencies.modelStore.getRedacted(sessionId), requestId: request.id };
|
||||
try {
|
||||
const input = ModelConnectionInputSchema.parse(request.body);
|
||||
await dependencies.modelStore.configure(sessionId, input);
|
||||
const modelConfig = dependencies.modelStore.getRedacted(sessionId);
|
||||
if (modelConfig !== undefined) {
|
||||
dependencies.eventStore?.append(sessionId, {
|
||||
type: "model.configured",
|
||||
payload: {
|
||||
providerId: modelConfig.providerId,
|
||||
modelId: modelConfig.modelId,
|
||||
supportsImages: modelConfig.supportsImages,
|
||||
source: modelConfig.source,
|
||||
},
|
||||
});
|
||||
}
|
||||
return { modelConfig, requestId: request.id };
|
||||
} catch (error) {
|
||||
dependencies.eventStore?.append(sessionId, {
|
||||
type: "model.validation_failed",
|
||||
payload: {
|
||||
code: error instanceof HarnessError ? error.code : "MODEL_VALIDATION_FAILED",
|
||||
message: "Model configuration validation failed",
|
||||
},
|
||||
});
|
||||
throw error;
|
||||
}
|
||||
});
|
||||
|
||||
app.delete("/api/sessions/:sessionId/model-config/credentials", (request) => {
|
||||
@@ -37,9 +60,17 @@ export function registerModelRoutes(app: FastifyInstance, dependencies: AppDepen
|
||||
const { sessionId } = Params.parse(request.params);
|
||||
requireSession(dependencies, sessionId);
|
||||
const resolved = dependencies.modelStore.resolveConnection(sessionId);
|
||||
const result = dependencies.testModelConnection === undefined
|
||||
? { status: "deferred" as const, message: "Saved; validation will occur on first run." }
|
||||
: await dependencies.testModelConnection(resolved, AbortSignal.timeout(5_000));
|
||||
return { ...result, requestId: request.id };
|
||||
try {
|
||||
const result = dependencies.testModelConnection === undefined
|
||||
? { status: "deferred" as const, message: "Saved; validation will occur on first run." }
|
||||
: await dependencies.testModelConnection(resolved, AbortSignal.timeout(5_000));
|
||||
return { ...result, requestId: request.id };
|
||||
} catch {
|
||||
dependencies.eventStore?.append(sessionId, {
|
||||
type: "model.validation_failed",
|
||||
payload: { code: "MODEL_CONNECTION_FAILED", message: "Model connection validation failed" },
|
||||
});
|
||||
throw new HarnessError("MODEL_CONNECTION_FAILED", "Model connection validation failed");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user