Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4,726 changes: 4,554 additions & 172 deletions package-lock.json

Large diffs are not rendered by default.

16 changes: 13 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,29 @@
"dev": "next dev",
"build": "next build",
"start": "next start",
"start:server": "tinylicious",
"lint": "next lint"
},
"dependencies": {
"@emotion/react": "^11.13.0",
"@emotion/styled": "^11.13.0",
"@fluidframework/tinylicious-client": "^2.1.0",
"@iconify/react": "^5.0.1",
"@mui/material": "^5.16.4",
"fluid-framework": "^2.1.0",
"mui": "^0.0.1",
"next": "14.2.5",
"react": "^18",
"react-dom": "^18",
"next": "14.2.5"
"typechat": "^0.1.0"
},
"devDependencies": {
"typescript": "^5",
"@types/node": "^20",
"@types/react": "^18",
"@types/react-dom": "^18",
"eslint": "^8",
"eslint-config-next": "14.2.5"
"eslint-config-next": "14.2.5",
"tinylicious": "^5.0.0",
"typescript": "^5"
}
}
37 changes: 37 additions & 0 deletions src/app/api/generate-hireable-party-member-updates/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { createJsonTranslator, createOpenAILanguageModel } from "typechat";
import path from "path";
import fs from "fs";
import { NextRequest, NextResponse } from "next/server";
import { createTypeScriptJsonValidator } from "typechat/ts";
import { HireablePartyMembers } from "@/schema";

interface GeneratePartyMembersRequest {
dungeonDescription: string;
totalBudget: number;
currentPartyMembers: HireablePartyMembers[]
}

export async function POST(req: NextRequest) {

if (!req.body) {
return new NextResponse("BAD RESPONSE", { status: 400 })
}

const requestData = await req.json() as GeneratePartyMembersRequest;
console.log('received requestData', requestData)

const model = createOpenAILanguageModel('REPLACE THIS!!!', 'gpt-4o');
const schema = fs.readFileSync(path.join(__dirname, "../../../../../src/schema.ts"), "utf8");
const validator = createTypeScriptJsonValidator<HireablePartyMembers>(schema, "HireablePartyMembers");
const translator = createJsonTranslator(model, validator);
const prompt = `You are a DnD dungeon master. The games dungeon has the following description "${requestData.dungeonDescription}". Additionally, there is gold that the players can spend to purchase adventurers for their journey.
The players have a total of ${requestData.totalBudget} gold.
The game currently has the following list of hireable adventurers: \n\n ${JSON.stringify(requestData.currentPartyMembers)}. \n\n
Your job is to provide updates this list of hireable adventurers to make the game more engaging and strategic. You can delete adventurers, add new ones or modify existing ones. .
Consider making the choice of characters to select challenging and varied given the available budget and dungeon description. If existing adventurers have poor descriptions that don't add any value to the game you should be considering either removing or updating them.`

console.log('sending prompt: ', prompt);
const response = await translator.translate(prompt);

return new NextResponse(JSON.stringify(response), { status: 200 })
}
30 changes: 30 additions & 0 deletions src/app/api/generate-party-members/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { createJsonTranslator, createOpenAILanguageModel } from "typechat";
import path from "path";
import fs from "fs";
import { NextRequest, NextResponse } from "next/server";
import { createTypeScriptJsonValidator } from "typechat/ts";
import { HireablePartyMembers } from "@/schema";

interface GeneratePartyMembersRequest {
dungeonDescription: string;
totalBudget: number;
}

export async function POST(req: NextRequest) {

if (!req.body) {
return new NextResponse("BAD RESPONSE", { status: 400 })
}

const requestData = await req.json() as GeneratePartyMembersRequest;
console.log('received requestData', requestData)

const model = createOpenAILanguageModel('REPLACE ME', 'gpt-4o');
const schema = fs.readFileSync(path.join(__dirname, "../../../../../src/schema.ts"), "utf8");
const validator = createTypeScriptJsonValidator<HireablePartyMembers>(schema, "HireablePartyMembers");
const translator = createJsonTranslator(model, validator);
const response = await translator.translate(`You are a DnD dungeon master. The games dungeon has the following description "${requestData.dungeonDescription}". Additionally, there is gold that the players can spend to purchase adventurers for their journey.
The players have a total of ${requestData.totalBudget} gold. Your job is to create a number of hireable adventurers that need to be strategically purchased given the dungeon description and total budget. Consider making the choice of characters to select challenging given the available budget and dungeon.`);

return new NextResponse(JSON.stringify(response), { status: 200 })
}
25 changes: 25 additions & 0 deletions src/app/api/llmTest/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { createJsonTranslator, createOpenAILanguageModel } from "typechat";
import path from "path";
import fs from "fs";
import { NextRequest, NextResponse } from "next/server";
import { createTypeScriptJsonValidator } from "typechat/ts";
import { DungeonDescription } from "@/schema";

export async function POST(req: NextRequest) {

if (!req.body) {
return new NextResponse("BAD RESPONSE", { status: 400 })
}

const requestData = await req.json();
console.log('received requestData', requestData)

const model = createOpenAILanguageModel('REPLACE ME', 'gpt-4o');
const schema = fs.readFileSync(path.join(__dirname, "../../../../../src/schema.ts"), "utf8");
const validator = createTypeScriptJsonValidator<DungeonDescription>(schema, "DungeonDescription");
const translator = createJsonTranslator(model, validator);

const response = await translator.translate(`You are a DnD dungeon master. I have the following description for a dungeon "${requestData.dungeonDescription}". Suggest a modified version of the dungeon description, making it the dungeon more complex, fixing grammatical issues or even simplifying it, or do nothing. Provide some justification`);

return new NextResponse(JSON.stringify(response), { status: 200 })
}
107 changes: 0 additions & 107 deletions src/app/globals.css

This file was deleted.

12 changes: 10 additions & 2 deletions src/app/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Box } from "@mui/material";
import type { Metadata } from "next";
import { Inter } from "next/font/google";
import "./globals.css";

const inter = Inter({ subsets: ["latin"] });

Expand All @@ -16,7 +16,15 @@ export default function RootLayout({
}>) {
return (
<html lang="en">
<body className={inter.className}>{children}</body>
<body className={inter.className}>
<Box sx={{
backgroundColor: "#faf7f1",
minWidth: '100vw',
minHeight: '100vh',
}}>
{children}
</Box>
</body>
</html>
);
}
Loading