File size: 2,536 Bytes
5eeee0e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import os
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from groq import Groq
from dotenv import load_dotenv

# Load environment variables from a .env file
load_dotenv()  # reads .env in project root by default

API_KEY = os.getenv("GROQ_API_KEY")
if not API_KEY:
    raise RuntimeError("Please set GROQ_API_KEY in your .env file")

# Initialize Groq client once
client = Groq(api_key=API_KEY)

def translate_text(
    text: str,
    target_language: str,
    model: str = "llama-3.3-70b-versatile",
    temperature: float = 0.7,
    stream: bool = False
) -> str:
    """
    Sends a translation prompt to the LLM and returns the translated text.
    """
    messages = [
        {"role": "system", "content": "You are a helpful, accurate translator."},
        {
            "role": "user",
            "content": (
                f"Translate the following text into {target_language}:\n\n"
                f"{text}"
            )
        }
    ]

    completion = client.chat.completions.create(
        model=model,
        messages=messages,
        temperature=temperature,
        max_completion_tokens=1024,
        top_p=1,
        stream=stream,
        stop=None,
    )

    if not stream:
        return completion.choices[0].message.content.strip()
    else:
        result = []
        for chunk in completion:
            delta = chunk.choices[0].delta.content
            if delta:
                result.append(delta)
        return "".join(result).strip()

# FastAPI setup
app = FastAPI(title="Groq Translator API")

class TranslateRequest(BaseModel):
    text: str
    target_language: str
    stream: bool = False

class TranslateResponse(BaseModel):
    translation: str

@app.post("/translate", response_model=TranslateResponse)
async def translate_endpoint(req: TranslateRequest):
    """
    POST /translate
    {
      "text": "Hello, world!",
      "target_language": "French",
      "stream": false
    }
    =>
    {
      "translation": "Bonjour, le monde !"
    }
    """
    try:
        translated = translate_text(
            text=req.text,
            target_language=req.target_language,
            stream=req.stream
        )
        return TranslateResponse(translation=translated)
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

# To run:
# 1. pip install fastapi uvicorn groq python-dotenv
# 2. create a .env file in the project root with:
#      GROQ_API_KEY=your_real_api_key_here
# 3. uvicorn main:app --reload --port 8000