File size: 2,580 Bytes
33a8f0a
d5d0f39
33a8f0a
 
 
 
 
 
 
 
 
 
 
d5d0f39
33a8f0a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 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)