Basic email generation
from runcrate import Runcrate
client = Runcrate(api_key="rc_live_YOUR_API_KEY")
response = client.models.chat_completion(
model="deepseek-ai/DeepSeek-V3",
messages=[
{"role": "system", "content": "Write professional emails from bullet points. Output only the email."},
{"role": "user", "content": "Write a formal email:\n- Thanks for Tuesday meeting\n- Interested in partnership proposal\n- Need to review pricing with finance\n- Schedule follow-up next week?\n- Recipient: Sarah Chen, VP Partnerships, Acme Corp"}
],
)
print(response.choices[0].message.content)
Tone control
from runcrate import Runcrate
client = Runcrate(api_key="rc_live_YOUR_API_KEY")
tones = {
"formal": "Formal business emails. Professional language, proper salutations.",
"friendly": "Warm, friendly emails. Conversational but professional.",
"direct": "Concise, direct emails. No filler.",
"apologetic": "Sincere apology emails. Acknowledge issue, take responsibility.",
}
response = client.models.chat_completion(
model="deepseek-ai/DeepSeek-V3",
messages=[
{"role": "system", "content": tones["direct"] + " Output only the email."},
{"role": "user", "content": "Write an email:\n- Deadline moving Friday → next Wednesday\n- Waiting on vendor API credentials\n- No impact on launch date\n- Team should continue other tasks"}
],
)
print(response.choices[0].message.content)
Multi-language
points = "- Confirming signed contract\n- Onboarding begins Monday\n- Send requirements by Friday"
for lang in ["English", "Japanese", "German", "Spanish"]:
response = client.models.chat_completion(
model="deepseek-ai/DeepSeek-V3",
messages=[
{"role": "system", "content": f"Write professional emails in {lang}. Output only the email."},
{"role": "user", "content": f"Formal email from these points:\n{points}"}
],
)
print(f"\n--- {lang} ---\n{response.choices[0].message.content}")
Next.js API route
// app/api/write-email/route.ts
import { runcrate } from '@runcrate/ai';
import { generateText } from 'ai';
const TONES: Record<string, string> = {
formal: 'Formal business emails.', friendly: 'Warm, friendly emails.', direct: 'Concise. No filler.',
};
export async function POST(req: Request) {
const { bulletPoints, tone = 'formal', language = 'English' } = await req.json();
const { text } = await generateText({
model: runcrate('deepseek-ai/DeepSeek-V3'),
messages: [
{ role: 'system', content: `${TONES[tone] || TONES.formal} Write in ${language}. Output only the email.` },
{ role: 'user', content: `Write an email:\n${bulletPoints}` },
],
});
return Response.json({ email: text });
}
Tips
- Bullet points over paragraphs. Clear bullets give better results than prose input.
- One tone per system prompt. Change the system prompt to switch tones.
- CJK languages. Consider Qwen3 models for more natural CJK output.