2023-11-23 16:17:56 +00:00
|
|
|
// import fetch from 'node-fetch'; // Import for webscraping (fetchContentFromURL(url) function
|
2023-11-23 16:12:28 +00:00
|
|
|
// const OpenAI = require('openai'); // Import for performGPTAnalysis(content) function
|
2023-11-23 14:43:12 +00:00
|
|
|
|
|
|
|
// Function to fetch content from URL using a web scraping service
|
2023-11-22 11:41:01 +00:00
|
|
|
async function fetchContentFromURL(url) {
|
2023-11-23 16:16:07 +00:00
|
|
|
// try {
|
|
|
|
// // Make an HTTP GET request to the provided URL
|
|
|
|
// const response = await fetch(url);
|
|
|
|
// // Check if the response status is OK (status code 200)
|
|
|
|
// if (!response.ok) {
|
|
|
|
// throw new Error(`Failed to fetch URL: ${response.statusText}`);
|
|
|
|
// }
|
|
|
|
// // Read the response body as text (HTML content)
|
|
|
|
// const content = await response.text();
|
|
|
|
// // Return the extracted content
|
|
|
|
// return content;
|
|
|
|
// } catch (error) {
|
|
|
|
// throw new Error(`Error fetching URL: ${error.message}`);
|
|
|
|
// }
|
|
|
|
|
|
|
|
return "Hello maria";
|
|
|
|
|
2023-11-22 12:33:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Placeholder function to simplify the content for GPT analysis
|
|
|
|
function simplifyContent(content) {
|
2023-11-22 11:41:01 +00:00
|
|
|
// Implement logic to simplify the content for GPT analysis
|
|
|
|
// Remove unnecessary elements, clean HTML tags, format content, etc.
|
|
|
|
// Placeholder code
|
|
|
|
const simplifiedContent = "Simplified content suitable for GPT analysis";
|
|
|
|
return simplifiedContent;
|
2023-11-22 12:33:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Placeholder function to perform GPT analysis for media type and topics using Mistral-7b via OpenRouter
|
|
|
|
async function performGPTAnalysis(content) {
|
2023-11-22 11:41:01 +00:00
|
|
|
// Implement logic to send content to Mistral-7b via OpenRouter for GPT analysis
|
|
|
|
// Send content and receive GPT analysis response
|
2023-11-23 14:43:12 +00:00
|
|
|
|
|
|
|
|
|
|
|
// Default code from OpenRouter documentation for the Mistral-7b model
|
|
|
|
// Retrieved from https://openrouter.ai/models/mistralai/mistral-7b-instruct?tab=api
|
|
|
|
// Using OpenAI's client API makes this easily replaceable with other models (ex. GPT-4)
|
|
|
|
```
|
|
|
|
const openai = new OpenAI({
|
|
|
|
baseURL: "https://openrouter.ai/api/v1",
|
|
|
|
apiKey: $OPENROUTER_API_KEY,
|
|
|
|
defaultHeaders: {
|
|
|
|
"HTTP-Referer": $YOUR_SITE_URL, // Optional, for including your app on openrouter.ai rankings.
|
|
|
|
"X-Title": $YOUR_SITE_NAME, // Optional. Shows in rankings on openrouter.ai.
|
|
|
|
},
|
|
|
|
// dangerouslyAllowBrowser: true,
|
|
|
|
})
|
|
|
|
async function main() {
|
|
|
|
const completion = await openai.chat.completions.create({
|
|
|
|
model: "mistralai/mistral-7b-instruct",
|
|
|
|
messages: [
|
|
|
|
{ role: "user", content: "Say this is a test" }
|
|
|
|
],
|
|
|
|
})
|
|
|
|
console.log(completion.choices[0].message)
|
|
|
|
}
|
|
|
|
main()
|
|
|
|
```
|
|
|
|
|
2023-11-22 11:41:01 +00:00
|
|
|
// Placeholder code
|
|
|
|
const inferredMediaType = "article";
|
|
|
|
const extractedTopics = ["topic1", "topic2"];
|
|
|
|
return { inferredMediaType, extractedTopics };
|
2023-11-22 12:33:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Placeholder function to map inferred values to predefined formats and topics
|
|
|
|
function mapInferredValues(mediaType, topics) {
|
2023-11-22 11:41:01 +00:00
|
|
|
// Implement logic to map inferred media type and topics to predefined formats and topics
|
|
|
|
// Match inferred values with predefined taxonomy
|
|
|
|
// Placeholder code
|
|
|
|
const predefinedMediaType = "Article";
|
|
|
|
const predefinedTopics = ["Topic 1", "Topic 2"];
|
|
|
|
return { predefinedMediaType, predefinedTopics };
|
2023-11-22 12:33:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Placeholder function to format the response
|
|
|
|
function formatResponse(predefinedMediaType, predefinedTopics) {
|
2023-11-22 11:41:01 +00:00
|
|
|
// Implement logic to format the extracted metadata into the desired response structure
|
|
|
|
// Construct the response object
|
|
|
|
// Placeholder code
|
|
|
|
const response = {
|
2023-11-22 20:44:21 +00:00
|
|
|
format: predefinedMediaType,
|
2023-11-23 15:42:06 +00:00
|
|
|
topics: predefinedTopics,
|
2023-11-22 12:33:41 +00:00
|
|
|
// Other metadata fields if needed
|
2023-11-22 11:41:01 +00:00
|
|
|
};
|
|
|
|
return response;
|
2023-11-22 12:33:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
export async function handler(event) {
|
2023-11-22 11:41:01 +00:00
|
|
|
try {
|
2023-11-22 12:33:41 +00:00
|
|
|
// Extract URL and API Key from the request body
|
|
|
|
const { url, apiKey } = JSON.parse(event.body);
|
|
|
|
|
|
|
|
// Validate if URL and API Key are present
|
|
|
|
if (!url || !apiKey) {
|
|
|
|
return {
|
|
|
|
statusCode: 400,
|
|
|
|
body: JSON.stringify({ error: 'URL and API Key are required' }),
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
// Step 1: Fetch content from the URL using a web scraping service
|
|
|
|
const fetchedContent = await fetchContentFromURL(url);
|
|
|
|
|
|
|
|
// Step 2: Simplify the fetched content for GPT analysis
|
|
|
|
const simplifiedContent = simplifyContent(fetchedContent);
|
|
|
|
|
|
|
|
// Step 3: Perform GPT analysis for media type and topics
|
|
|
|
const { inferredMediaType, extractedTopics } = await performGPTAnalysis(simplifiedContent);
|
|
|
|
|
|
|
|
// Step 4: Map inferred values to predefined formats and topics
|
|
|
|
const { predefinedMediaType, predefinedTopics } = mapInferredValues(inferredMediaType, extractedTopics);
|
|
|
|
|
|
|
|
// Step 5: Format the response
|
|
|
|
const formattedResponse = formatResponse(predefinedMediaType, predefinedTopics);
|
|
|
|
|
|
|
|
// Return the formatted response
|
|
|
|
return {
|
|
|
|
statusCode: 200,
|
2023-11-23 16:23:35 +00:00
|
|
|
body: JSON.stringify(formattedResponse),
|
2023-11-22 12:33:41 +00:00
|
|
|
};
|
2023-11-22 11:41:01 +00:00
|
|
|
} catch (error) {
|
2023-11-22 12:33:41 +00:00
|
|
|
return {
|
|
|
|
statusCode: 500,
|
|
|
|
body: JSON.stringify({ error: 'Something went wrong' }),
|
|
|
|
};
|
2023-11-22 11:41:01 +00:00
|
|
|
}
|
2023-11-22 12:33:41 +00:00
|
|
|
}
|