From c853a916796b78fba13f4b5a949ace55ab5d80f2 Mon Sep 17 00:00:00 2001 From: Marcus Schiesser Date: Sun, 15 Sep 2024 21:17:45 +0700 Subject: [PATCH] added date to output folder --- .prettierignore | 2 + main.ts | 31 ++++--- .../Iphone calculator/gpt-4o-mini.html | 0 .../Iphone calculator/gpt-4o.html | 0 .../Iphone calculator/o1-mini.html | 0 .../Iphone calculator/o1-preview.html | 0 .../JavaScript Todo App/gpt-4o-mini.code | 0 .../JavaScript Todo App/gpt-4o.code | 0 .../JavaScript Todo App/o1-mini.code | 0 .../Python QA Database/gpt-4o-mini.code | 0 .../Python QA Database/gpt-4o.code | 0 .../Python QA Database/o1-mini.code | 0 .../Python QA Database/o1-preview.code | 0 .../JavaScript Todo App/gpt-4o-mini/.env | 1 + .../gpt-4o-mini/components/Header.js | 7 ++ .../gpt-4o-mini/components/Task.js | 15 ++++ .../gpt-4o-mini/components/TaskList.js | 11 +++ .../JavaScript Todo App/gpt-4o-mini/lib/db.js | 11 +++ .../gpt-4o-mini/package.json | 20 +++++ .../gpt-4o-mini/pages/api/tasks.js | 29 +++++++ .../gpt-4o-mini/pages/index.js | 63 ++++++++++++++ .../gpt-4o-mini/postcss.config.js | 6 ++ .../gpt-4o-mini/styles/globals.css | 3 + .../gpt-4o-mini/tailwind.config.js | 11 +++ .../gpt-4o-mini/utils/fetcher.js | 3 + .../JavaScript Todo App/gpt-4o/.env | 1 + .../gpt-4o/components/Task.js | 22 +++++ .../JavaScript Todo App/gpt-4o/package.json | 22 +++++ .../JavaScript Todo App/gpt-4o/pages/_app.js | 7 ++ .../gpt-4o/pages/api/tasks.js | 31 +++++++ .../JavaScript Todo App/gpt-4o/pages/index.js | 84 +++++++++++++++++++ .../gpt-4o/postcss.config.js | 6 ++ .../gpt-4o/prisma/schema.prisma | 14 ++++ .../gpt-4o/styles/globals.css | 3 + .../gpt-4o/tailwind.config.js | 11 +++ .../JavaScript Todo App/gpt-4o/utils/db.js | 14 ++++ .../o1-mini/components/AddTaskForm.js | 28 +++++++ .../o1-mini/components/TaskItem.js | 23 +++++ .../o1-mini/components/TaskList.js | 15 ++++ .../JavaScript Todo App/o1-mini/lib/db.js | 14 ++++ .../o1-mini/next.config.js | 6 ++ .../JavaScript Todo App/o1-mini/package.json | 26 ++++++ .../o1-mini/pages/api/tasks.js | 41 +++++++++ .../o1-mini/pages/index.js | 42 ++++++++++ .../o1-mini/postcss.config.js | 6 ++ .../o1-mini/prisma/schema.prisma | 15 ++++ .../o1-mini/styles/globals.css | 3 + .../o1-mini/tailwind.config.js | 11 +++ .../gpt-4o-mini/python_app/README.md | 23 +++++ .../gpt-4o-mini/python_app/app.py | 21 +++++ .../gpt-4o-mini/python_app/database.py | 29 +++++++ .../gpt-4o-mini/python_app/models.py | 2 + .../gpt-4o-mini/python_app/requirements.txt | 1 + .../Python QA Database/gpt-4o/error.log | 4 + .../Python QA Database/o1-mini/qa_app/app.py | 53 ++++++++++++ .../o1-mini/qa_app/data/qa.db | 1 + .../o1-mini/qa_app/database.py | 74 ++++++++++++++++ .../o1-mini/qa_app/requirements.txt | 2 + .../o1-mini/qa_app/utils.py | 22 +++++ .../Python QA Database/o1-preview/app.py | 60 +++++++++++++ .../Python QA Database/o1-preview/database.py | 50 +++++++++++ .../o1-preview/requirements.txt | 1 + packager.ts | 2 +- 63 files changed, 992 insertions(+), 11 deletions(-) create mode 100644 .prettierignore rename output/{ => 2024-09-14}/Iphone calculator/gpt-4o-mini.html (100%) rename output/{ => 2024-09-14}/Iphone calculator/gpt-4o.html (100%) rename output/{ => 2024-09-14}/Iphone calculator/o1-mini.html (100%) rename output/{ => 2024-09-14}/Iphone calculator/o1-preview.html (100%) rename output/{ => 2024-09-14}/JavaScript Todo App/gpt-4o-mini.code (100%) rename output/{ => 2024-09-14}/JavaScript Todo App/gpt-4o.code (100%) rename output/{ => 2024-09-14}/JavaScript Todo App/o1-mini.code (100%) rename output/{ => 2024-09-14}/Python QA Database/gpt-4o-mini.code (100%) rename output/{ => 2024-09-14}/Python QA Database/gpt-4o.code (100%) rename output/{ => 2024-09-14}/Python QA Database/o1-mini.code (100%) rename output/{ => 2024-09-14}/Python QA Database/o1-preview.code (100%) create mode 100644 output/2024-09-15/JavaScript Todo App/gpt-4o-mini/.env create mode 100644 output/2024-09-15/JavaScript Todo App/gpt-4o-mini/components/Header.js create mode 100644 output/2024-09-15/JavaScript Todo App/gpt-4o-mini/components/Task.js create mode 100644 output/2024-09-15/JavaScript Todo App/gpt-4o-mini/components/TaskList.js create mode 100644 output/2024-09-15/JavaScript Todo App/gpt-4o-mini/lib/db.js create mode 100644 output/2024-09-15/JavaScript Todo App/gpt-4o-mini/package.json create mode 100644 output/2024-09-15/JavaScript Todo App/gpt-4o-mini/pages/api/tasks.js create mode 100644 output/2024-09-15/JavaScript Todo App/gpt-4o-mini/pages/index.js create mode 100644 output/2024-09-15/JavaScript Todo App/gpt-4o-mini/postcss.config.js create mode 100644 output/2024-09-15/JavaScript Todo App/gpt-4o-mini/styles/globals.css create mode 100644 output/2024-09-15/JavaScript Todo App/gpt-4o-mini/tailwind.config.js create mode 100644 output/2024-09-15/JavaScript Todo App/gpt-4o-mini/utils/fetcher.js create mode 100644 output/2024-09-15/JavaScript Todo App/gpt-4o/.env create mode 100644 output/2024-09-15/JavaScript Todo App/gpt-4o/components/Task.js create mode 100644 output/2024-09-15/JavaScript Todo App/gpt-4o/package.json create mode 100644 output/2024-09-15/JavaScript Todo App/gpt-4o/pages/_app.js create mode 100644 output/2024-09-15/JavaScript Todo App/gpt-4o/pages/api/tasks.js create mode 100644 output/2024-09-15/JavaScript Todo App/gpt-4o/pages/index.js create mode 100644 output/2024-09-15/JavaScript Todo App/gpt-4o/postcss.config.js create mode 100644 output/2024-09-15/JavaScript Todo App/gpt-4o/prisma/schema.prisma create mode 100644 output/2024-09-15/JavaScript Todo App/gpt-4o/styles/globals.css create mode 100644 output/2024-09-15/JavaScript Todo App/gpt-4o/tailwind.config.js create mode 100644 output/2024-09-15/JavaScript Todo App/gpt-4o/utils/db.js create mode 100644 output/2024-09-15/JavaScript Todo App/o1-mini/components/AddTaskForm.js create mode 100644 output/2024-09-15/JavaScript Todo App/o1-mini/components/TaskItem.js create mode 100644 output/2024-09-15/JavaScript Todo App/o1-mini/components/TaskList.js create mode 100644 output/2024-09-15/JavaScript Todo App/o1-mini/lib/db.js create mode 100644 output/2024-09-15/JavaScript Todo App/o1-mini/next.config.js create mode 100644 output/2024-09-15/JavaScript Todo App/o1-mini/package.json create mode 100644 output/2024-09-15/JavaScript Todo App/o1-mini/pages/api/tasks.js create mode 100644 output/2024-09-15/JavaScript Todo App/o1-mini/pages/index.js create mode 100644 output/2024-09-15/JavaScript Todo App/o1-mini/postcss.config.js create mode 100644 output/2024-09-15/JavaScript Todo App/o1-mini/prisma/schema.prisma create mode 100644 output/2024-09-15/JavaScript Todo App/o1-mini/styles/globals.css create mode 100644 output/2024-09-15/JavaScript Todo App/o1-mini/tailwind.config.js create mode 100644 output/2024-09-15/Python QA Database/gpt-4o-mini/python_app/README.md create mode 100644 output/2024-09-15/Python QA Database/gpt-4o-mini/python_app/app.py create mode 100644 output/2024-09-15/Python QA Database/gpt-4o-mini/python_app/database.py create mode 100644 output/2024-09-15/Python QA Database/gpt-4o-mini/python_app/models.py create mode 100644 output/2024-09-15/Python QA Database/gpt-4o-mini/python_app/requirements.txt create mode 100644 output/2024-09-15/Python QA Database/gpt-4o/error.log create mode 100644 output/2024-09-15/Python QA Database/o1-mini/qa_app/app.py create mode 100644 output/2024-09-15/Python QA Database/o1-mini/qa_app/data/qa.db create mode 100644 output/2024-09-15/Python QA Database/o1-mini/qa_app/database.py create mode 100644 output/2024-09-15/Python QA Database/o1-mini/qa_app/requirements.txt create mode 100644 output/2024-09-15/Python QA Database/o1-mini/qa_app/utils.py create mode 100644 output/2024-09-15/Python QA Database/o1-preview/app.py create mode 100644 output/2024-09-15/Python QA Database/o1-preview/database.py create mode 100644 output/2024-09-15/Python QA Database/o1-preview/requirements.txt diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..17f51d5 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,2 @@ +# Ignore all files in the output folder +output/**/* diff --git a/main.ts b/main.ts index 93a8597..c90060c 100644 --- a/main.ts +++ b/main.ts @@ -31,21 +31,32 @@ async function outputResult( model: string, packageResult: PackageResult, ) { + // Generate timestamp + const timestamp = new Date().toISOString().slice(0, 10); + // Create output directory if it doesn't exist - const outputDir = path.join("output", name, model); + const outputDir = path.join("output", timestamp, name, model); await fs.mkdir(outputDir, { recursive: true }); - // Iterate over all files in the packageResult and store each file with their correct path - for (const file of packageResult.files) { - const filePath = path.join(outputDir, file.path); - const fileDir = path.dirname(filePath); + try { + // Iterate over all files in the packageResult and store each file with their correct path + for (const file of packageResult.files) { + const filePath = path.join(outputDir, file.path); + const fileDir = path.dirname(filePath); - // Create directory if it doesn't exist - await fs.mkdir(fileDir, { recursive: true }); + // Create directory if it doesn't exist + await fs.mkdir(fileDir, { recursive: true }); - // Write file content - await fs.writeFile(filePath, file.content); - console.log(`File written to: ${filePath}`); + // Write file content + await fs.writeFile(filePath, file.content); + console.log(`File written to: ${filePath}`); + } + } catch (error) { + console.error("Error in outputResult:", error); + const errorLogPath = path.join(outputDir, "error.log"); + const errorContent = `Error: ${error}\n\nPackageResult structure:\n${JSON.stringify(packageResult, null, 2)}`; + await fs.writeFile(errorLogPath, errorContent); + console.log(`Error details written to: ${errorLogPath}`); } } diff --git a/output/Iphone calculator/gpt-4o-mini.html b/output/2024-09-14/Iphone calculator/gpt-4o-mini.html similarity index 100% rename from output/Iphone calculator/gpt-4o-mini.html rename to output/2024-09-14/Iphone calculator/gpt-4o-mini.html diff --git a/output/Iphone calculator/gpt-4o.html b/output/2024-09-14/Iphone calculator/gpt-4o.html similarity index 100% rename from output/Iphone calculator/gpt-4o.html rename to output/2024-09-14/Iphone calculator/gpt-4o.html diff --git a/output/Iphone calculator/o1-mini.html b/output/2024-09-14/Iphone calculator/o1-mini.html similarity index 100% rename from output/Iphone calculator/o1-mini.html rename to output/2024-09-14/Iphone calculator/o1-mini.html diff --git a/output/Iphone calculator/o1-preview.html b/output/2024-09-14/Iphone calculator/o1-preview.html similarity index 100% rename from output/Iphone calculator/o1-preview.html rename to output/2024-09-14/Iphone calculator/o1-preview.html diff --git a/output/JavaScript Todo App/gpt-4o-mini.code b/output/2024-09-14/JavaScript Todo App/gpt-4o-mini.code similarity index 100% rename from output/JavaScript Todo App/gpt-4o-mini.code rename to output/2024-09-14/JavaScript Todo App/gpt-4o-mini.code diff --git a/output/JavaScript Todo App/gpt-4o.code b/output/2024-09-14/JavaScript Todo App/gpt-4o.code similarity index 100% rename from output/JavaScript Todo App/gpt-4o.code rename to output/2024-09-14/JavaScript Todo App/gpt-4o.code diff --git a/output/JavaScript Todo App/o1-mini.code b/output/2024-09-14/JavaScript Todo App/o1-mini.code similarity index 100% rename from output/JavaScript Todo App/o1-mini.code rename to output/2024-09-14/JavaScript Todo App/o1-mini.code diff --git a/output/Python QA Database/gpt-4o-mini.code b/output/2024-09-14/Python QA Database/gpt-4o-mini.code similarity index 100% rename from output/Python QA Database/gpt-4o-mini.code rename to output/2024-09-14/Python QA Database/gpt-4o-mini.code diff --git a/output/Python QA Database/gpt-4o.code b/output/2024-09-14/Python QA Database/gpt-4o.code similarity index 100% rename from output/Python QA Database/gpt-4o.code rename to output/2024-09-14/Python QA Database/gpt-4o.code diff --git a/output/Python QA Database/o1-mini.code b/output/2024-09-14/Python QA Database/o1-mini.code similarity index 100% rename from output/Python QA Database/o1-mini.code rename to output/2024-09-14/Python QA Database/o1-mini.code diff --git a/output/Python QA Database/o1-preview.code b/output/2024-09-14/Python QA Database/o1-preview.code similarity index 100% rename from output/Python QA Database/o1-preview.code rename to output/2024-09-14/Python QA Database/o1-preview.code diff --git a/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/.env b/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/.env new file mode 100644 index 0000000..6729f12 --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/.env @@ -0,0 +1 @@ +DATABASE_URL=postgres://username:password@localhost:5432/todo_db diff --git a/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/components/Header.js b/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/components/Header.js new file mode 100644 index 0000000..26c4584 --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/components/Header.js @@ -0,0 +1,7 @@ +export default function Header() { + return ( +
+

Todo App

+
+ ); +} diff --git a/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/components/Task.js b/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/components/Task.js new file mode 100644 index 0000000..e4388e6 --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/components/Task.js @@ -0,0 +1,15 @@ +export default function Task({ task, onDelete, onToggle }) { + return ( +
+ {task.task} +
+ + +
+
+ ); +} diff --git a/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/components/TaskList.js b/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/components/TaskList.js new file mode 100644 index 0000000..a582a56 --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/components/TaskList.js @@ -0,0 +1,11 @@ +import Task from './Task'; + +export default function TaskList({ tasks, onDelete, onToggle }) { + return ( +
+ {tasks.map((task) => ( + + ))} +
+ ); +} diff --git a/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/lib/db.js b/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/lib/db.js new file mode 100644 index 0000000..5de37d2 --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/lib/db.js @@ -0,0 +1,11 @@ +const { Pool } = require('pg'); + +const pool = new Pool({ + connectionString: process.env.DATABASE_URL, +}); + +const query = (text, params) => pool.query(text, params); + +module.exports = { + query, +}; diff --git a/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/package.json b/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/package.json new file mode 100644 index 0000000..fcae57f --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/package.json @@ -0,0 +1,20 @@ +{ + "name": "todo-app", + "version": "1.0.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start" + }, + "dependencies": { + "next": "latest", + "react": "latest", + "react-dom": "latest", + "pg": "^8.7.1", + "tailwindcss": "^3.0.0", + "postcss": "^8.0.0", + "autoprefixer": "^10.0.0", + "swr": "^1.0.0" + } +} diff --git a/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/pages/api/tasks.js b/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/pages/api/tasks.js new file mode 100644 index 0000000..3070c2e --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/pages/api/tasks.js @@ -0,0 +1,29 @@ +import db from '../../lib/db'; + +export default async function handler(req, res) { + if (req.method === 'GET') { + const { rows } = await db.query('SELECT * FROM tasks'); + return res.status(200).json(rows); + } + + if (req.method === 'POST') { + const { task } = req.body; + const { rows } = await db.query('INSERT INTO tasks (task, completed) VALUES ($1, $2) RETURNING *', [task, false]); + return res.status(201).json(rows[0]); + } + + if (req.method === 'DELETE') { + const { id } = req.body; + await db.query('DELETE FROM tasks WHERE id = $1', [id]); + return res.status(204).json({}); + } + + if (req.method === 'PUT') { + const { id, completed } = req.body; + await db.query('UPDATE tasks SET completed = $1 WHERE id = $2', [completed, id]); + return res.status(204).json({}); + } + + res.setHeader('Allow', ['GET', 'POST', 'DELETE', 'PUT']); + res.status(405).end(`Method ${req.method} Not Allowed`); +} diff --git a/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/pages/index.js b/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/pages/index.js new file mode 100644 index 0000000..016cf97 --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/pages/index.js @@ -0,0 +1,63 @@ +import { useEffect, useState } from 'react'; +import Header from '../components/Header'; +import TaskList from '../components/TaskList'; +import fetcher from '../utils/fetcher'; + +export default function Home() { + const [tasks, setTasks] = useState([]); + const [taskInput, setTaskInput] = useState(''); + + useEffect(() => { + const loadTasks = async () => { + const data = await fetcher('/api/tasks'); + setTasks(data); + }; + loadTasks(); + }, []); + + const addTask = async () => { + if (!taskInput) return; + const newTask = await fetcher('/api/tasks', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ task: taskInput }), + }); + setTasks([...tasks, newTask]); + setTaskInput(''); + }; + + const deleteTask = async (id) => { + await fetcher('/api/tasks', { + method: 'DELETE', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ id }), + }); + setTasks(tasks.filter((task) => task.id !== id)); + }; + + const toggleTask = async (id, completed) => { + await fetcher('/api/tasks', { + method: 'PUT', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ id, completed }), + }); + setTasks(tasks.map(task => (task.id === id ? { ...task, completed } : task))); + }; + + return ( +
+
+
+ setTaskInput(e.target.value)} + className="border p-2 w-full" + placeholder="Add a new task" + /> + +
+ +
+ ); +} diff --git a/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/postcss.config.js b/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/postcss.config.js new file mode 100644 index 0000000..33ad091 --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/styles/globals.css b/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/styles/globals.css new file mode 100644 index 0000000..b5c61c9 --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/styles/globals.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/tailwind.config.js b/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/tailwind.config.js new file mode 100644 index 0000000..db3cdc8 --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/tailwind.config.js @@ -0,0 +1,11 @@ +module.exports = { + purge: ['./pages/**/*.{js,ts,jsx,tsx}', './components/**/*.{js,ts,jsx,tsx}'], + darkMode: false, + theme: { + extend: {}, + }, + variants: { + extend: {}, + }, + plugins: [], +} diff --git a/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/utils/fetcher.js b/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/utils/fetcher.js new file mode 100644 index 0000000..4064667 --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/gpt-4o-mini/utils/fetcher.js @@ -0,0 +1,3 @@ +const fetcher = (url, options) => fetch(url, options).then((res) => res.json()); + +export default fetcher; diff --git a/output/2024-09-15/JavaScript Todo App/gpt-4o/.env b/output/2024-09-15/JavaScript Todo App/gpt-4o/.env new file mode 100644 index 0000000..e3f5df1 --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/gpt-4o/.env @@ -0,0 +1 @@ +DATABASE_URL="postgresql://:@localhost:5432/" diff --git a/output/2024-09-15/JavaScript Todo App/gpt-4o/components/Task.js b/output/2024-09-15/JavaScript Todo App/gpt-4o/components/Task.js new file mode 100644 index 0000000..39fb463 --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/gpt-4o/components/Task.js @@ -0,0 +1,22 @@ +import React from 'react'; + +const Task = ({ task, onDelete, onComplete }) => { + return ( +
+
{task.title}
+
+ + +
+
+ ); +}; + +export default Task; diff --git a/output/2024-09-15/JavaScript Todo App/gpt-4o/package.json b/output/2024-09-15/JavaScript Todo App/gpt-4o/package.json new file mode 100644 index 0000000..9fff712 --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/gpt-4o/package.json @@ -0,0 +1,22 @@ +{ + "name": "my-todo-app", + "version": "1.0.0", + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "prisma": "prisma" + }, + "dependencies": { + "@prisma/client": "^3.0.0", + "next": "latest", + "react": "latest", + "react-dom": "latest", + "tailwindcss": "^2.0.0" + }, + "devDependencies": { + "prisma": "^3.0.0", + "autoprefixer": "^10.0.0", + "postcss": "^8.0.0" + } +} diff --git a/output/2024-09-15/JavaScript Todo App/gpt-4o/pages/_app.js b/output/2024-09-15/JavaScript Todo App/gpt-4o/pages/_app.js new file mode 100644 index 0000000..244e40b --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/gpt-4o/pages/_app.js @@ -0,0 +1,7 @@ +import '../styles/globals.css'; + +function MyApp({ Component, pageProps }) { + return ; +} + +export default MyApp; diff --git a/output/2024-09-15/JavaScript Todo App/gpt-4o/pages/api/tasks.js b/output/2024-09-15/JavaScript Todo App/gpt-4o/pages/api/tasks.js new file mode 100644 index 0000000..5531c08 --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/gpt-4o/pages/api/tasks.js @@ -0,0 +1,31 @@ +import { PrismaClient } from '@prisma/client'; + +const prisma = new PrismaClient(); + +export default async function handler(req, res) { + if (req.method === 'GET') { + const tasks = await prisma.task.findMany(); + res.status(200).json(tasks); + } else if (req.method === 'POST') { + const { title } = req.body; + const task = await prisma.task.create({ + data: { title, completed: false }, + }); + res.status(201).json(task); + } else if (req.method === 'DELETE') { + const { id } = req.body; + await prisma.task.delete({ + where: { id }, + }); + res.status(204).end(); + } else if (req.method === 'PATCH') { + const { id, completed } = req.body; + const task = await prisma.task.update({ + where: { id }, + data: { completed }, + }); + res.status(200).json(task); + } else { + res.status(405).end(); + } +} diff --git a/output/2024-09-15/JavaScript Todo App/gpt-4o/pages/index.js b/output/2024-09-15/JavaScript Todo App/gpt-4o/pages/index.js new file mode 100644 index 0000000..b4f8c8c --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/gpt-4o/pages/index.js @@ -0,0 +1,84 @@ +import React, { useState, useEffect } from 'react'; +import Task from '../components/Task'; + +export default function Home() { + const [tasks, setTasks] = useState([]); + const [newTask, setNewTask] = useState(''); + + useEffect(() => { + fetchTasks(); + }, []); + + async function fetchTasks() { + const res = await fetch('/api/tasks'); + const data = await res.json(); + setTasks(data); + } + + async function addTask() { + const res = await fetch('/api/tasks', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ title: newTask }), + }); + const data = await res.json(); + setTasks((prev) => [...prev, data]); + setNewTask(''); + } + + async function deleteTask(id) { + await fetch('/api/tasks', { + method: 'DELETE', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ id }), + }); + setTasks((prev) => prev.filter((task) => task.id !== id)); + } + + async function completeTask(id) { + const task = tasks.find((task) => task.id === id); + await fetch('/api/tasks', { + method: 'PATCH', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ id, completed: !task.completed }), + }); + setTasks((prev) => + prev.map((task) => + task.id === id ? { ...task, completed: !task.completed } : task + ) + ); + } + + return ( +
+

Todo App

+
+ setNewTask(e.target.value)} + className="border p-2 mr-2" + /> + +
+
+ {tasks.map((task) => ( + + ))} +
+
+ ); +} diff --git a/output/2024-09-15/JavaScript Todo App/gpt-4o/postcss.config.js b/output/2024-09-15/JavaScript Todo App/gpt-4o/postcss.config.js new file mode 100644 index 0000000..12a703d --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/gpt-4o/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/output/2024-09-15/JavaScript Todo App/gpt-4o/prisma/schema.prisma b/output/2024-09-15/JavaScript Todo App/gpt-4o/prisma/schema.prisma new file mode 100644 index 0000000..7bea0b0 --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/gpt-4o/prisma/schema.prisma @@ -0,0 +1,14 @@ +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model Task { + id Int @id @default(autoincrement()) + title String + completed Boolean @default(false) +} diff --git a/output/2024-09-15/JavaScript Todo App/gpt-4o/styles/globals.css b/output/2024-09-15/JavaScript Todo App/gpt-4o/styles/globals.css new file mode 100644 index 0000000..b5c61c9 --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/gpt-4o/styles/globals.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/output/2024-09-15/JavaScript Todo App/gpt-4o/tailwind.config.js b/output/2024-09-15/JavaScript Todo App/gpt-4o/tailwind.config.js new file mode 100644 index 0000000..ea7fc2b --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/gpt-4o/tailwind.config.js @@ -0,0 +1,11 @@ +module.exports = { + purge: ['./pages/**/*.{js,ts,jsx,tsx}', './components/**/*.{js,ts,jsx,tsx}'], + darkMode: false, + theme: { + extend: {}, + }, + variants: { + extend: {}, + }, + plugins: [], +}; diff --git a/output/2024-09-15/JavaScript Todo App/gpt-4o/utils/db.js b/output/2024-09-15/JavaScript Todo App/gpt-4o/utils/db.js new file mode 100644 index 0000000..b3d5600 --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/gpt-4o/utils/db.js @@ -0,0 +1,14 @@ +import { PrismaClient } from '@prisma/client'; + +let prisma; + +if (process.env.NODE_ENV === 'production') { + prisma = new PrismaClient(); +} else { + if (!global.prisma) { + global.prisma = new PrismaClient(); + } + prisma = global.prisma; +} + +export default prisma; diff --git a/output/2024-09-15/JavaScript Todo App/o1-mini/components/AddTaskForm.js b/output/2024-09-15/JavaScript Todo App/o1-mini/components/AddTaskForm.js new file mode 100644 index 0000000..d134f2f --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/o1-mini/components/AddTaskForm.js @@ -0,0 +1,28 @@ +import { useState } from 'react' + +export default function AddTaskForm({ addTask }) { + const [title, setTitle] = useState('') + + const handleSubmit = (e) => { + e.preventDefault() + if (title.trim()) { + addTask(title) + setTitle('') + } + } + + return ( +
+ setTitle(e.target.value)} + /> + +
+ ) +} diff --git a/output/2024-09-15/JavaScript Todo App/o1-mini/components/TaskItem.js b/output/2024-09-15/JavaScript Todo App/o1-mini/components/TaskItem.js new file mode 100644 index 0000000..e1a3b81 --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/o1-mini/components/TaskItem.js @@ -0,0 +1,23 @@ +export default function TaskItem({ task, toggleTask, deleteTask }) { + return ( +
  • +
    + toggleTask(task.id, !task.completed)} + className="mr-2" + /> + + {task.title} + +
    + +
  • + ) +} diff --git a/output/2024-09-15/JavaScript Todo App/o1-mini/components/TaskList.js b/output/2024-09-15/JavaScript Todo App/o1-mini/components/TaskList.js new file mode 100644 index 0000000..4ca221c --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/o1-mini/components/TaskList.js @@ -0,0 +1,15 @@ +import TaskItem from './TaskItem' + +export default function TaskList({ tasks, toggleTask, deleteTask }) { + if (tasks.length === 0) { + return

    No tasks available.

    + } + + return ( +
      + {tasks.map(task => ( + + ))} +
    + ) +} diff --git a/output/2024-09-15/JavaScript Todo App/o1-mini/lib/db.js b/output/2024-09-15/JavaScript Todo App/o1-mini/lib/db.js new file mode 100644 index 0000000..aa94609 --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/o1-mini/lib/db.js @@ -0,0 +1,14 @@ +import { PrismaClient } from '@prisma/client' + +let prisma + +if (process.env.NODE_ENV === 'production') { + prisma = new PrismaClient() +} else { + if (!global.prisma) { + global.prisma = new PrismaClient() + } + prisma = global.prisma +} + +export default prisma diff --git a/output/2024-09-15/JavaScript Todo App/o1-mini/next.config.js b/output/2024-09-15/JavaScript Todo App/o1-mini/next.config.js new file mode 100644 index 0000000..a843cbe --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/o1-mini/next.config.js @@ -0,0 +1,6 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: true, +} + +module.exports = nextConfig diff --git a/output/2024-09-15/JavaScript Todo App/o1-mini/package.json b/output/2024-09-15/JavaScript Todo App/o1-mini/package.json new file mode 100644 index 0000000..60eb1e9 --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/o1-mini/package.json @@ -0,0 +1,26 @@ +{ + "name": "todo-app", + "version": "1.0.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "prisma": "prisma" + }, + "dependencies": { + "next": "latest", + "react": "latest", + "react-dom": "latest", + "tailwindcss": "^3.3.2", + "postcss": "^8.4.21", + "autoprefixer": "^10.4.14", + "prisma": "^4.13.0", + "@prisma/client": "^4.13.0", + "axios": "^1.4.0" + }, + "devDependencies": { + "eslint": "8.39.0", + "eslint-config-next": "13.4.19" + } +} diff --git a/output/2024-09-15/JavaScript Todo App/o1-mini/pages/api/tasks.js b/output/2024-09-15/JavaScript Todo App/o1-mini/pages/api/tasks.js new file mode 100644 index 0000000..ee6013e --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/o1-mini/pages/api/tasks.js @@ -0,0 +1,41 @@ +import prisma from '../../lib/db' + +export default async function handler(req, res) { + if (req.method === 'GET') { + const tasks = await prisma.task.findMany({ + orderBy: { createdAt: 'desc' }, + }) + res.status(200).json(tasks) + } else if (req.method === 'POST') { + const { title } = req.body + if (!title) { + return res.status(400).json({ error: 'Title is required' }) + } + const task = await prisma.task.create({ + data: { title }, + }) + res.status(201).json(task) + } else if (req.method === 'PUT') { + const { id, completed } = req.body + if (id === undefined || completed === undefined) { + return res.status(400).json({ error: 'ID and completed status are required' }) + } + const task = await prisma.task.update({ + where: { id: Number(id) }, + data: { completed: Boolean(completed) }, + }) + res.status(200).json(task) + } else if (req.method === 'DELETE') { + const { id } = req.body + if (id === undefined) { + return res.status(400).json({ error: 'ID is required' }) + } + await prisma.task.delete({ + where: { id: Number(id) }, + }) + res.status(204).end() + } else { + res.setHeader('Allow', ['GET', 'POST', 'PUT', 'DELETE']) + res.status(405).end(`Method ${req.method} Not Allowed`) + } +} diff --git a/output/2024-09-15/JavaScript Todo App/o1-mini/pages/index.js b/output/2024-09-15/JavaScript Todo App/o1-mini/pages/index.js new file mode 100644 index 0000000..073dcab --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/o1-mini/pages/index.js @@ -0,0 +1,42 @@ +import { useState, useEffect } from 'react' +import axios from 'axios' +import AddTaskForm from '../components/AddTaskForm' +import TaskList from '../components/TaskList' + +export default function Home() { + const [tasks, setTasks] = useState([]) + + const fetchTasks = async () => { + const res = await axios.get('/api/tasks') + setTasks(res.data) + } + + useEffect(() => { + fetchTasks() + }, []) + + const addTask = async (title) => { + const res = await axios.post('/api/tasks', { title }) + setTasks([res.data, ...tasks]) + } + + const toggleTask = async (id, completed) => { + const res = await axios.put('/api/tasks', { id, completed }) + setTasks(tasks.map(task => task.id === id ? res.data : task)) + } + + const deleteTask = async (id) => { + await axios.delete('/api/tasks', { data: { id } }) + setTasks(tasks.filter(task => task.id !== id)) + } + + return ( +
    +
    +

    Todo App

    + + +
    +
    + ) +} diff --git a/output/2024-09-15/JavaScript Todo App/o1-mini/postcss.config.js b/output/2024-09-15/JavaScript Todo App/o1-mini/postcss.config.js new file mode 100644 index 0000000..33ad091 --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/o1-mini/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/output/2024-09-15/JavaScript Todo App/o1-mini/prisma/schema.prisma b/output/2024-09-15/JavaScript Todo App/o1-mini/prisma/schema.prisma new file mode 100644 index 0000000..4a72b2f --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/o1-mini/prisma/schema.prisma @@ -0,0 +1,15 @@ +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model Task { + id Int @id @default(autoincrement()) + title String + completed Boolean @default(false) + createdAt DateTime @default(now()) +} diff --git a/output/2024-09-15/JavaScript Todo App/o1-mini/styles/globals.css b/output/2024-09-15/JavaScript Todo App/o1-mini/styles/globals.css new file mode 100644 index 0000000..b5c61c9 --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/o1-mini/styles/globals.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/output/2024-09-15/JavaScript Todo App/o1-mini/tailwind.config.js b/output/2024-09-15/JavaScript Todo App/o1-mini/tailwind.config.js new file mode 100644 index 0000000..2f8d3b4 --- /dev/null +++ b/output/2024-09-15/JavaScript Todo App/o1-mini/tailwind.config.js @@ -0,0 +1,11 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + "./pages/**/*.{js,ts,jsx,tsx}", + "./components/**/*.{js,ts,jsx,tsx}" + ], + theme: { + extend: {}, + }, + plugins: [], +} diff --git a/output/2024-09-15/Python QA Database/gpt-4o-mini/python_app/README.md b/output/2024-09-15/Python QA Database/gpt-4o-mini/python_app/README.md new file mode 100644 index 0000000..cedf310 --- /dev/null +++ b/output/2024-09-15/Python QA Database/gpt-4o-mini/python_app/README.md @@ -0,0 +1,23 @@ +# Question and Answer App + +This is a simple Python application that allows users to ask questions and retrieve answers from a database. + +## How to Use + +1. Clone the repository. +2. Install the necessary dependencies: + ``` + pip install -r requirements.txt + ``` +3. Run the application: + ``` + python app.py + ``` +4. Enter your questions, and if the application does not have an answer, you can provide one to be stored for future reference. + +## File Structure + +- `app.py`: Main application file. +- `database.py`: Handles database operations for question and answer storage. +- `models.py`: Placeholder for models (currently unused). +- `data/qa_database.json`: JSON file for storing question-answer pairs. diff --git a/output/2024-09-15/Python QA Database/gpt-4o-mini/python_app/app.py b/output/2024-09-15/Python QA Database/gpt-4o-mini/python_app/app.py new file mode 100644 index 0000000..1316dc7 --- /dev/null +++ b/output/2024-09-15/Python QA Database/gpt-4o-mini/python_app/app.py @@ -0,0 +1,21 @@ +import json +from database import Database + +def main(): + db = Database('data/qa_database.json') + + while True: + question = input("Please enter your question (or type 'exit' to quit): ") + if question.lower() == 'exit': + break + + answer = db.lookup_answer(question) + if answer: + print(f"Answer: {answer}") + else: + new_answer = input("I don't have an answer for that. Please provide an answer: ") + db.store_qa_pair(question, new_answer) + print("Thank you! Your question and answer have been saved.") + +if __name__ == "__main__": + main() diff --git a/output/2024-09-15/Python QA Database/gpt-4o-mini/python_app/database.py b/output/2024-09-15/Python QA Database/gpt-4o-mini/python_app/database.py new file mode 100644 index 0000000..e2e5485 --- /dev/null +++ b/output/2024-09-15/Python QA Database/gpt-4o-mini/python_app/database.py @@ -0,0 +1,29 @@ +import json +from difflib import get_close_matches + +class Database: + def __init__(self, filepath): + self.filepath = filepath + self.load_data() + + def load_data(self): + try: + with open(self.filepath, 'r') as file: + self.data = json.load(file) + except FileNotFoundError: + self.data = {} + + def save_data(self): + with open(self.filepath, 'w') as file: + json.dump(self.data, file, indent=4) + + def lookup_answer(self, question): + questions = list(self.data.keys()) + close_matches = get_close_matches(question, questions) + if close_matches: + return self.data[close_matches[0]] + return None + + def store_qa_pair(self, question, answer): + self.data[question] = answer + self.save_data() diff --git a/output/2024-09-15/Python QA Database/gpt-4o-mini/python_app/models.py b/output/2024-09-15/Python QA Database/gpt-4o-mini/python_app/models.py new file mode 100644 index 0000000..bda9c0c --- /dev/null +++ b/output/2024-09-15/Python QA Database/gpt-4o-mini/python_app/models.py @@ -0,0 +1,2 @@ +# Placeholder for future model definitions if needed. +# Currently, this file is kept for potential extension of the application. diff --git a/output/2024-09-15/Python QA Database/gpt-4o-mini/python_app/requirements.txt b/output/2024-09-15/Python QA Database/gpt-4o-mini/python_app/requirements.txt new file mode 100644 index 0000000..ae7ed8e --- /dev/null +++ b/output/2024-09-15/Python QA Database/gpt-4o-mini/python_app/requirements.txt @@ -0,0 +1 @@ +difflib diff --git a/output/2024-09-15/Python QA Database/gpt-4o/error.log b/output/2024-09-15/Python QA Database/gpt-4o/error.log new file mode 100644 index 0000000..832707c --- /dev/null +++ b/output/2024-09-15/Python QA Database/gpt-4o/error.log @@ -0,0 +1,4 @@ +Error: TypeError: packageResult.files is not iterable + +PackageResult structure: +"```python\n### Directory Structure\n```\nqna_app/\n├── app.py\n├── database.py\n├── requirements.txt\n└── templates/\n └── index.html\n```\n\n### `qna_app/app.py`\n```python\nfrom flask import Flask, request, render_template, redirect, url_for, flash\nfrom database import Database\nimport os\n\napp = Flask(__name__)\napp.secret_key = os.environ.get('SECRET_KEY', 'fallback_secret_key') # Use environment variable for secret key\ndb = Database()\n\n@app.route('/', methods=['GET', 'POST'])\ndef index():\n if request.method == 'POST':\n question = request.form.get('question')\n if not question:\n flash(\"Question cannot be empty\", \"error\")\n return redirect(url_for('index'))\n \n answer = db.get_answer(question)\n if answer:\n return render_template('index.html', question=question, answer=answer, provided=True)\n else:\n return render_template('index.html', question=question, provided=False)\n return render_template('index.html')\n\n@app.route('/add', methods=['POST'])\ndef add():\n question = request.form.get('question')\n answer = request.form.get('answer')\n if not question or not answer:\n flash(\"Question and answer cannot be empty\", \"error\")\n return redirect(url_for('index'))\n\n if db.add_question_answer(question, answer):\n flash(\"Question and answer added successfully\", \"success\")\n else:\n flash(\"Failed to add question and answer\", \"error\")\n return redirect(url_for('index'))\n\nif __name__ == '__main__':\n app.run(debug=True)\n```\n\n### `qna_app/database.py`\n```python\nimport sqlite3\nfrom difflib import get_close_matches\nimport logging\n\nDATABASE = 'qna.db'\nCREATE_TABLE_QUERY = '''\n CREATE TABLE IF NOT EXISTS qna (\n id INTEGER PRIMARY KEY,\n question TEXT NOT NULL UNIQUE,\n answer TEXT NOT NULL\n )\n'''\nGET_QUESTIONS_QUERY = \"SELECT question FROM qna\"\nGET_ANSWER_QUERY = \"SELECT answer FROM qna WHERE question = ?\"\nINSERT_QA_QUERY = \"INSERT INTO qna (question, answer) VALUES (?, ?)\"\n\nclass Database:\n def __init__(self):\n self.create_table()\n\n def connect(self):\n connection = sqlite3.connect(DATABASE)\n connection.row_factory = sqlite3.Row\n return connection\n\n def create_table(self):\n with self.connect() as conn:\n conn.execute(CREATE_TABLE_QUERY)\n \n def get_answer(self, question):\n try:\n with self.connect() as conn:\n cur = conn.execute(GET_QUESTIONS_QUERY)\n questions = [row['question'] for row in cur.fetchall()]\n match = get_close_matches(question, questions, n=1, cutoff=0.6)\n if match:\n cur = conn.execute(GET_ANSWER_QUERY, (match[0],))\n answer = cur.fetchone()\n return answer['answer'] if answer else None\n except sqlite3.Error as e:\n logging.error(f\"Database error: {e}\")\n return None\n\n def add_question_answer(self, question, answer):\n try:\n with self.connect() as conn:\n conn.execute(INSERT_QA_QUERY, (question, answer))\n return True\n except sqlite3.IntegrityError:\n logging.warning(\"Duplicate question error.\")\n return False\n except sqlite3.Error as e:\n logging.error(f\"Database error: {e}\")\n return False\n```\n\n### `qna_app/requirements.txt`\n```\nFlask>=2.0.1\n```\n\n### `qna_app/templates/index.html`\n```html\n\n\n\n \n Q&A App\n \n\n\n

    Q&A App

    \n {% with messages = get_flashed_messages(with_categories=true) %}\n {% if messages %}\n {% for category, message in messages %}\n
    {{ message }}
    \n {% endfor %}\n {% endif %}\n {% endwith %}\n
    \n \n \n \n
    \n {% if provided is not none %}\n
    \n {% if provided %}\n

    Answer: {{ answer }}

    \n {% else %}\n
    \n \n \n \n \n
    \n {% endif %}\n
    \n {% endif %}\n\n\n```" \ No newline at end of file diff --git a/output/2024-09-15/Python QA Database/o1-mini/qa_app/app.py b/output/2024-09-15/Python QA Database/o1-mini/qa_app/app.py new file mode 100644 index 0000000..2363669 --- /dev/null +++ b/output/2024-09-15/Python QA Database/o1-mini/qa_app/app.py @@ -0,0 +1,53 @@ +import os +import sys +from database import Database + +def main(): + db_path = os.path.join(os.path.dirname(__file__), 'data', 'qa.db') + try: + db = Database(db_path) + except Exception as e: + print(f"Failed to connect to the database: {e}") + sys.exit(1) + + print("Welcome to the QA App. Type 'exit' to quit.") + + while True: + try: + question = input("\nEnter your question: ").strip() + if question.lower() == 'exit': + print("Goodbye!") + break + if not question: + print("Please enter a valid question.") + continue + + answer = db.get_answer(question) + if answer: + print(f"Answer: {answer}") + else: + # Check for similar questions + similar_question = db.find_similar_question(question) + if similar_question: + print(f"Did you mean: '{similar_question}'?") + user_choice = input("Press 'y' to use the suggested question or 'n' to provide a new answer: ").strip().lower() + if user_choice == 'y': + answer = db.get_answer(similar_question) + print(f"Answer: {answer}") + continue + + user_answer = input("I don't have an answer for that. Please provide the answer: ").strip() + if user_answer: + try: + db.add_qa_pair(question, user_answer) + print("Your answer has been saved. Thank you!") + except Exception as e: + print(f"Failed to save the answer: {e}") + except KeyboardInterrupt: + print("\nGoodbye!") + break + except Exception as e: + print(f"An unexpected error occurred: {e}") + +if __name__ == "__main__": + main() diff --git a/output/2024-09-15/Python QA Database/o1-mini/qa_app/data/qa.db b/output/2024-09-15/Python QA Database/o1-mini/qa_app/data/qa.db new file mode 100644 index 0000000..6f14ffe --- /dev/null +++ b/output/2024-09-15/Python QA Database/o1-mini/qa_app/data/qa.db @@ -0,0 +1 @@ +*This is the SQLite database file. It will be created automatically when you run `app.py` if it does not exist.* \ No newline at end of file diff --git a/output/2024-09-15/Python QA Database/o1-mini/qa_app/database.py b/output/2024-09-15/Python QA Database/o1-mini/qa_app/database.py new file mode 100644 index 0000000..400a0f5 --- /dev/null +++ b/output/2024-09-15/Python QA Database/o1-mini/qa_app/database.py @@ -0,0 +1,74 @@ +import os +import sqlite3 +from utils import get_close_match + +class Database: + def __init__(self, db_path): + self.db_path = db_path + self.conn = self.connect() + self.create_table() + + def connect(self): + try: + conn = sqlite3.connect(self.db_path) + return conn + except sqlite3.Error as e: + raise Exception(f"SQLite connection error: {e}") + + def create_table(self): + try: + cursor = self.conn.cursor() + cursor.execute(''' + CREATE TABLE IF NOT EXISTS qa ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + question TEXT UNIQUE COLLATE NOCASE, + answer TEXT + ) + ''') + self.conn.commit() + except sqlite3.Error as e: + raise Exception(f"Failed to create table: {e}") + + def get_all_questions(self): + try: + cursor = self.conn.cursor() + cursor.execute("SELECT question, answer FROM qa") + return cursor.fetchall() + except sqlite3.Error as e: + raise Exception(f"Failed to fetch questions: {e}") + + def get_answer(self, user_question, threshold=0.7): + try: + questions = [q for q, _ in self.get_all_questions()] + close_question = get_close_match(user_question, questions, threshold) + if close_question: + cursor = self.conn.cursor() + cursor.execute("SELECT answer FROM qa WHERE question = ?", (close_question,)) + result = cursor.fetchone() + if result: + return result[0] + return None + except Exception as e: + raise Exception(f"Error retrieving answer: {e}") + + def find_similar_question(self, user_question, threshold=0.7): + try: + questions = [q for q, _ in self.get_all_questions()] + return get_close_match(user_question, questions, threshold) + except Exception as e: + print(f"Error finding similar question: {e}") + return None + + def add_qa_pair(self, question, answer): + try: + cursor = self.conn.cursor() + cursor.execute("INSERT INTO qa (question, answer) VALUES (?, ?)", (question, answer)) + self.conn.commit() + except sqlite3.IntegrityError: + raise Exception("This question already exists in the database.") + except sqlite3.Error as e: + raise Exception(f"Failed to add QA pair: {e}") + + def __del__(self): + if self.conn: + self.conn.close() diff --git a/output/2024-09-15/Python QA Database/o1-mini/qa_app/requirements.txt b/output/2024-09-15/Python QA Database/o1-mini/qa_app/requirements.txt new file mode 100644 index 0000000..1711626 --- /dev/null +++ b/output/2024-09-15/Python QA Database/o1-mini/qa_app/requirements.txt @@ -0,0 +1,2 @@ +# Python version required +python_version >=3.7 diff --git a/output/2024-09-15/Python QA Database/o1-mini/qa_app/utils.py b/output/2024-09-15/Python QA Database/o1-mini/qa_app/utils.py new file mode 100644 index 0000000..ce64c3b --- /dev/null +++ b/output/2024-09-15/Python QA Database/o1-mini/qa_app/utils.py @@ -0,0 +1,22 @@ +from difflib import SequenceMatcher + +def similarity(a, b): + """ + Calculate the similarity ratio between two strings. + """ + return SequenceMatcher(None, a, b).ratio() + +def get_close_match(user_question, questions, threshold=0.7): + """ + Find the closest matching question from a list of questions based on similarity threshold. + """ + best_match = None + highest_sim = 0 + for q in questions: + sim = similarity(user_question.lower(), q.lower()) + if sim > highest_sim: + highest_sim = sim + best_match = q + if highest_sim >= threshold: + return best_match + return None diff --git a/output/2024-09-15/Python QA Database/o1-preview/app.py b/output/2024-09-15/Python QA Database/o1-preview/app.py new file mode 100644 index 0000000..445a28b --- /dev/null +++ b/output/2024-09-15/Python QA Database/o1-preview/app.py @@ -0,0 +1,60 @@ +import sys +from database import Database +from difflib import get_close_matches + +def main(): + """Main function to run the question-answer application.""" + try: + with Database('questions.db') as db: + while True: + try: + question = input("Please enter your question (or type 'exit' to quit): ").strip() + if question.lower() == 'exit': + print("Goodbye!") + break + if not question: + print("Question cannot be empty.") + continue + + questions = db.get_all_questions() + matches = get_close_matches(question, questions, n=5, cutoff=0.5) + + if matches: + print("Did you mean:") + for idx, match in enumerate(matches, 1): + print(f"{idx}. {match}") + choice = input("Please enter the number of the closest match or 0 if none: ").strip() + if choice.isdigit(): + choice_num = int(choice) + if 1 <= choice_num <= len(matches): + selected_question = matches[choice_num - 1] + answer = db.get_answer(selected_question) + print(f"Answer: {answer}") + elif choice_num == 0: + print("Sorry, I don't know the answer to that question.") + new_answer = input("Please provide the answer so I can learn: ").strip() + if not new_answer: + print("Answer cannot be empty.") + continue + db.add_question_answer(question, new_answer) + print("Thank you! I've learned something new.") + else: + print("Invalid selection.") + else: + print("Invalid input. Please enter a number.") + else: + print("Sorry, I don't know the answer to that question.") + new_answer = input("Please provide the answer so I can learn: ").strip() + if not new_answer: + print("Answer cannot be empty.") + continue + db.add_question_answer(question, new_answer) + print("Thank you! I've learned something new.") + except KeyboardInterrupt: + print("\nGoodbye!") + break + except Exception as e: + print(f"An unexpected error occurred: {e}") + +if __name__ == '__main__': + main() diff --git a/output/2024-09-15/Python QA Database/o1-preview/database.py b/output/2024-09-15/Python QA Database/o1-preview/database.py new file mode 100644 index 0000000..75bbdbd --- /dev/null +++ b/output/2024-09-15/Python QA Database/o1-preview/database.py @@ -0,0 +1,50 @@ +import sqlite3 + +class Database: + """A class to handle database operations for question-answer pairs.""" + + def __init__(self, db_name): + """Initialize the database connection and create the table if it doesn't exist.""" + self.conn = sqlite3.connect(db_name) + self.create_table() + + def __enter__(self): + """Enter the runtime context related to this object.""" + return self + + def __exit__(self, exc_type, exc_value, traceback): + """Exit the runtime context and close the database connection.""" + self.close() + + def create_table(self): + """Create the qa_pairs table if it does not already exist.""" + query = '''CREATE TABLE IF NOT EXISTS qa_pairs ( + question TEXT PRIMARY KEY, + answer TEXT NOT NULL + );''' + self.conn.execute(query) + self.conn.commit() + + def get_all_questions(self): + """Retrieve all questions from the database.""" + cursor = self.conn.cursor() + cursor.execute("SELECT question FROM qa_pairs") + results = cursor.fetchall() + return [row[0] for row in results] + + def get_answer(self, question): + """Retrieve the answer for the given question.""" + cursor = self.conn.cursor() + cursor.execute("SELECT answer FROM qa_pairs WHERE question = ?", (question,)) + result = cursor.fetchone() + return result[0] if result else None + + def add_question_answer(self, question, answer): + """Add a new question and answer pair to the database.""" + cursor = self.conn.cursor() + cursor.execute("INSERT OR REPLACE INTO qa_pairs (question, answer) VALUES (?, ?)", (question, answer)) + self.conn.commit() + + def close(self): + """Close the database connection.""" + self.conn.close() diff --git a/output/2024-09-15/Python QA Database/o1-preview/requirements.txt b/output/2024-09-15/Python QA Database/o1-preview/requirements.txt new file mode 100644 index 0000000..670a928 --- /dev/null +++ b/output/2024-09-15/Python QA Database/o1-preview/requirements.txt @@ -0,0 +1 @@ +# No external packages required. Uses only Python standard library. diff --git a/packager.ts b/packager.ts index 2ecca23..efa290c 100644 --- a/packager.ts +++ b/packager.ts @@ -23,7 +23,7 @@ export const packager = async (context: Context, ev: PackageEvent) => { // use own llm for extracting the files const llm = new OpenAI({ - model: "gpt-4o-mini", + model: "gpt-4o", additionalChatOptions: { response_format: { type: "json_object" } }, });