From 1a96b06df296c391b523bb0ed689de1518313815 Mon Sep 17 00:00:00 2001 From: Wanda Carlson <87515018+wanda-carlson@users.noreply.github.com> Date: Fri, 19 Jul 2024 03:17:07 -0700 Subject: [PATCH 1/4] and yet another draft PR --- src/henry.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/henry.py b/src/henry.py index 56c08751..86f5eefe 100644 --- a/src/henry.py +++ b/src/henry.py @@ -7,3 +7,4 @@ creating a new draft PR yet another draft PR and another draft PR +and yet another draft PR From cf725d5dbebf657640d51f62a23f91243296ee75 Mon Sep 17 00:00:00 2001 From: Wanda Carlson <87515018+wanda-carlson@users.noreply.github.com> Date: Thu, 24 Apr 2025 16:12:42 -0700 Subject: [PATCH 2/4] Add files via upload --- server.js | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 server.js diff --git a/server.js b/server.js new file mode 100644 index 00000000..f78964f5 --- /dev/null +++ b/server.js @@ -0,0 +1,54 @@ +require('dotenv').config() +const express = require('express') +const cors = require('cors') +const OpenAI = require('openai') + +const app = express() +const port = process.env.PORT || 3000 + +// Initialize OpenAI client +const openai = new OpenAI({ + apiKey: process.env.OPENAI_API_KEY +}) + +// Middleware +app.use(cors()) +app.use(express.json()) +app.use(express.static('public')) + +// Generate article endpoint +app.post('/api/generate-article', async (req, res) => { + try { + const { topic } = req.body + + if (!topic) { + return res.status(400).json({ error: 'Topic is required' }) + } + + const completion = await openai.chat.completions.create({ + model: "gpt-3.5-turbo", + messages: [ + { + role: "system", + content: "You are a helpful assistant that generates short, informative articles." + }, + { + role: "user", + content: `Write a short, informative article about ${topic}. The article should be between 200-300 words.` + } + ], + temperature: 0.7, + max_tokens: 500 + }) + + const article = completion.choices[0].message.content + res.json({ article }) + } catch (error) { + console.error('Error:', error) + res.status(500).json({ error: 'Failed to generate article' }) + } +}) + +app.listen(port, () => { + console.log(`Server running on port ${port}`) +}) \ No newline at end of file From ebbc10b8dacf83cc1b5a70745fd5e12e233eea60 Mon Sep 17 00:00:00 2001 From: Wanda Carlson <87515018+wanda-carlson@users.noreply.github.com> Date: Thu, 24 Apr 2025 16:13:13 -0700 Subject: [PATCH 3/4] Rename server.js to wanda/server.js --- server.js => wanda/server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename server.js => wanda/server.js (99%) diff --git a/server.js b/wanda/server.js similarity index 99% rename from server.js rename to wanda/server.js index f78964f5..91b5c880 100644 --- a/server.js +++ b/wanda/server.js @@ -51,4 +51,4 @@ app.post('/api/generate-article', async (req, res) => { app.listen(port, () => { console.log(`Server running on port ${port}`) -}) \ No newline at end of file +}) From bb3098c357a60b63e10ecf059a431fd7490be37e Mon Sep 17 00:00:00 2001 From: Wanda Carlson <87515018+wanda-carlson@users.noreply.github.com> Date: Thu, 24 Apr 2025 16:20:42 -0700 Subject: [PATCH 4/4] Create providers.py --- src/llm/providers.py | 60 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/llm/providers.py diff --git a/src/llm/providers.py b/src/llm/providers.py new file mode 100644 index 00000000..fbe23a3f --- /dev/null +++ b/src/llm/providers.py @@ -0,0 +1,60 @@ +require('dotenv').config() +const express = require('express') +const cors = require('cors') +const path = require('path') +const providers = require('./src/llm/providers') + +const app = express() +const port = process.env.PORT || 3000 + +// Middleware +app.use(cors()) +app.use(express.json()) +app.use(express.static('public')) + +// Get available providers and models +app.get('/api/providers', (req, res) => { + const providerInfo = Object.entries(providers).map(([id, provider]) => ({ + id, + name: provider.name, + models: provider.models + })) + res.json(providerInfo) +}) + +// Generate article endpoint +app.post('/api/generate-article', async (req, res) => { + try { + const { topic, provider: providerId, model } = req.body + + if (!topic) { + return res.status(400).json({ error: 'Topic is required' }) + } + + if (!providerId || !providers[providerId]) { + return res.status(400).json({ error: 'Invalid provider' }) + } + + if (!model || !providers[providerId].models.includes(model)) { + return res.status(400).json({ error: 'Invalid model for provider' }) + } + + const provider = providers[providerId] + const prompt = `Write a short, informative article about ${topic}. The article should be between 200-300 words.` + + try { + const article = await provider.generate(provider.client, model, prompt) + res.json({ article, provider: provider.name, model }) + } catch (error) { + console.error(`Error with ${provider.name}:`, error) + res.status(500).json({ error: `Failed to generate article using ${provider.name}` }) + } + } catch (error) { + console.error('Error:', error) + res.status(500).json({ error: 'Failed to process request' }) + } +}) + +app.listen(port, () => { + console.log(`Server running on port ${port}`) +})