Fas 1a punkt 3+4: worker-härdning (DLQ, larm, multi-instance), AAMOS training export

This commit is contained in:
Sven (AAMOS AI)
2026-08-05 23:32:18 +07:00
parent d1455fb581
commit b2b6601f54
15 changed files with 9355 additions and 32 deletions
+12
View File
@@ -237,6 +237,18 @@ export function mockOutputFor(taskType: AamosTaskType, input: unknown): unknown
case "MODERATE_RECIPE":
return { flags: [], recommendation: "approve", confidence: 0.9 };
case "EXPORT_TRAINING_SAMPLE": {
const samples =
typeof input === "object" && input !== null
? ((input as { samples?: unknown[] }).samples ?? [])
: [];
return {
batchId: `mock-batch-${Date.now()}`,
accepted: samples.length,
rejected: 0,
};
}
case "TRANSLATE_RECIPE": {
// Deterministisk pseudo-översättning: bevarar alla tal och stegstruktur,
// markerar texten med målspråket så flödet är testbart utan riktig AI.
+28
View File
@@ -24,6 +24,7 @@ export const AAMOS_TASK_TYPES = [
"GENERATE_WEEK_PLAN",
"MODERATE_RECIPE",
"TRANSLATE_RECIPE",
"EXPORT_TRAINING_SAMPLE",
] as const;
export type AamosTaskType = (typeof AAMOS_TASK_TYPES)[number];
@@ -412,6 +413,29 @@ export const translateRecipeOutput = z.object({
confidence,
});
// ---------------------------------------------------------------------------
// EXPORT_TRAINING_SAMPLE: anonymiserade korrigeringar för AAMOS training-pipeline
// Ingen PII, inga bild-URL:er, inga användar-ID:n.
// ---------------------------------------------------------------------------
export const exportTrainingSampleInput = z.object({
marketLocale: z.string().default("sv-SE"),
samples: z.array(
z.object({
taskType: z.string(),
aiOutput: z.record(z.string(), z.unknown()),
userCorrection: z.record(z.string(), z.unknown()),
modelVersion: z.string().nullable(),
promptVersion: z.string().nullable(),
}),
),
});
export const exportTrainingSampleOutput = z.object({
batchId: z.string(),
accepted: z.number().int().min(0),
rejected: z.number().int().min(0),
});
// ---------------------------------------------------------------------------
// Kontraktsregister
// ---------------------------------------------------------------------------
@@ -436,6 +460,10 @@ export const TASK_CONTRACTS = {
GENERATE_WEEK_PLAN: { input: generateWeekPlanInput, output: generateWeekPlanOutput },
MODERATE_RECIPE: { input: moderateRecipeInput, output: moderateRecipeOutput },
TRANSLATE_RECIPE: { input: translateRecipeInput, output: translateRecipeOutput },
EXPORT_TRAINING_SAMPLE: {
input: exportTrainingSampleInput,
output: exportTrainingSampleOutput,
},
} as const satisfies Record<AamosTaskType, { input: z.ZodType; output: z.ZodType }>;
export type TaskInput<T extends AamosTaskType> = z.infer<(typeof TASK_CONTRACTS)[T]["input"]>;