LinkedInPostGenerator / llm_groq.py
Alpha108's picture
Update llm_groq.py
d5d0f39 verified
import os
from typing import List, Dict
try:
from groq import Groq
except ImportError:
Groq = None
DEFAULT_MODEL = "llama-3.3-70b-versatile"
def get_client() -> "Groq":
api_key = os.getenv("GROQ_API_KEY")
if not api_key:
raise RuntimeError("Missing GROQ_API_KEY. Set it in Space → Settings → Variables & Secrets.")
if Groq is None:
raise RuntimeError("Package 'groq' not installed. Add 'groq' to requirements.txt.")
return Groq(api_key=api_key)
def chat_once(messages: List[Dict[str, str]],
model: str = DEFAULT_MODEL,
temperature: float = 0.6,
top_p: float = 0.9,
max_tokens: int = 600) -> str:
client = get_client()
resp = client.chat.completions.create(
model=model,
messages=messages,
temperature=temperature,
top_p=top_p,
max_tokens=max_tokens,
)
return resp.choices[0].message.content.strip()
def generate_post(prompt: str,
model: str,
temperature: float,
top_p: float,
max_tokens: int) -> str:
messages = [
{"role": "system", "content": "You craft concise, original, high-signal LinkedIn posts. Respond with plain text only."},
{"role": "user", "content": prompt},
]
return chat_once(messages, model, temperature, top_p, max_tokens)
def transform_post(instruction: str,
post_text: str,
model: str,
temperature: float,
top_p: float,
max_tokens: int) -> str:
messages = [
{"role": "system", "content": "You are a precise LinkedIn editor. Respond with plain text only."},
{"role": "user", "content": f"Instruction:\n{instruction}\n\nPost:\n{post_text}"}
]
return chat_once(messages, model, temperature, top_p, max_tokens)
def generate_hooks(topic: str,
audience: str,
tone: str,
count: int,
model: str,
temperature: float,
top_p: float,
max_tokens: int) -> str:
messages = [
{"role": "system", "content": "You generate punchy first lines for viral LinkedIn posts."},
{"role": "user", "content": f"Create {count} distinct, curiosity-driving first lines for a post.\nTopic: {topic}\nAudience: {audience}\nTone: {tone}\nRules: 1 line each, no labels, no emojis."}
]
return chat_once(messages, model, temperature, top_p, max_tokens)