+
+ {moreThanOneRow && (
+
+ )}
+
+ {moreThanOneCell && (
+
+ )}
+
+ {moreThanOneRow && (
+
+ )}
+
+ {moreThanOneCell && (
+
+ )}
+ {map.map((row, rowIdx) => (
+
+ {row.map((cell, cellIdx) => (
+
+ ))}
+
+ ))}
+
+ );
+}
diff --git a/convex/maps.ts b/convex/maps.ts
index fe411ed..51f3b5b 100644
--- a/convex/maps.ts
+++ b/convex/maps.ts
@@ -88,6 +88,22 @@ export const seedMaps = internalMutation({
},
});
+export const testMap = action({
+ args: {
+ modelId: v.string(),
+ map: v.array(v.array(v.string())),
+ },
+ handler: async (ctx, args) => {
+ const flags = await ctx.runQuery(api.flags.getFlags);
+
+ if (!flags.showTestPage) {
+ throw new Error("Test page is not enabled");
+ }
+
+ return await runModel(args.modelId, args.map);
+ },
+});
+
export const getMaps = query({
args: {
isReviewed: v.optional(v.boolean()),
diff --git a/models/index.ts b/models/index.ts
index 6ee3d47..bfa64d3 100644
--- a/models/index.ts
+++ b/models/index.ts
@@ -87,31 +87,43 @@ export async function runModel(
}> {
let result;
- switch (modelId) {
- case "gemini-1.5-pro": {
- result = await gemini15pro(prompt, map);
- break;
- }
- case "gpt-4o": {
- result = await gpt4o(prompt, map);
- break;
- }
- case "claude-3.5-sonnet": {
- result = await claude35sonnet(prompt, map);
- break;
- }
- case "perplexity-llama-3.1": {
- result = await perplexityModel(prompt, map);
- break;
- }
- default: {
- throw new Error(`Tried running unknown model '${modelId}'`);
+ try {
+ switch (modelId) {
+ case "gemini-1.5-pro": {
+ result = await gemini15pro(prompt, map);
+ break;
+ }
+ case "gpt-4o": {
+ result = await gpt4o(prompt, map);
+ break;
+ }
+ case "claude-3.5-sonnet": {
+ result = await claude35sonnet(prompt, map);
+ break;
+ }
+ case "perplexity-llama-3.1": {
+ result = await perplexityModel(prompt, map);
+ break;
+ }
+ default: {
+ throw new Error(`Tried running unknown model '${modelId}'`);
+ }
}
+ } catch (error) {
+ return {
+ reasoning: "Internal error",
+ error:
+ error instanceof Error
+ ? error.message
+ : typeof error === "string"
+ ? error
+ : "Unknown error",
+ };
}
const originalMap = JSON.parse(JSON.stringify(map));
-
const [playerRow, playerCol] = result.playerCoordinates;
+
if (originalMap[playerRow][playerCol] !== " ") {
return {
reasoning: result.reasoning,
diff --git a/simulators/zombie-survival/ZombieSurvival.ts b/simulators/zombie-survival/ZombieSurvival.ts
index 11ab446..df4a1d2 100644
--- a/simulators/zombie-survival/ZombieSurvival.ts
+++ b/simulators/zombie-survival/ZombieSurvival.ts
@@ -28,6 +28,10 @@ export class ZombieSurvival {
return !game.getPlayer().dead();
}
+ public static mapHasZombies(map: string[][]): boolean {
+ return map.some((row) => row.includes("Z"));
+ }
+
public constructor(config: string[][]) {
if (config.length === 0 || config[0].length === 0) {
throw new Error("Config is empty");