File size: 2,045 Bytes
fe9a0c4 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
import "https://deno.land/x/[email protected]/mod.ts";
import { serve } from "https://deno.land/[email protected]/http/server.ts";
import { Mistral } from 'npm:@mistralai/mistralai';
const corsHeaders = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': 'authorization, x-client-info, apikey, content-type',
};
serve(async (req) => {
if (req.method === 'OPTIONS') {
return new Response(null, { headers: corsHeaders });
}
try {
const { theme, usedWords = [] } = await req.json();
console.log('Generating word for theme:', theme, 'excluding:', usedWords);
const client = new Mistral({
apiKey: Deno.env.get('MISTRAL_API_KEY'),
});
const response = await client.chat.complete({
model: "mistral-large-latest",
messages: [
{
role: "system",
content: `You are helping generate words for a word-guessing game. Generate a single word related to the theme "${theme}".
The word should be:
- A single word (no spaces or hyphens)
- Common enough that people would know it
- Specific enough to be interesting
- Related to the theme "${theme}"
- Between 4 and 12 letters
- A noun
- NOT be any of these previously used words: ${usedWords.join(', ')}
Respond with just the word in UPPERCASE, nothing else.`
}
],
maxTokens: 10,
temperature: 0.9
});
const word = response.choices[0].message.content.trim();
console.log('Generated word:', word);
return new Response(
JSON.stringify({ word }),
{
headers: {
...corsHeaders,
'Content-Type': 'application/json'
}
}
);
} catch (error) {
console.error('Error generating themed word:', error);
return new Response(
JSON.stringify({ error: error.message }),
{
status: 500,
headers: {
...corsHeaders,
'Content-Type': 'application/json'
}
}
);
}
}); |