| import os |
| import json |
| import requests |
| import gradio as gr |
|
|
| |
| |
| |
|
|
| GROQ_API_KEY = os.environ.get("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") |
| GROQ_URL = "https://api.groq.com/openai/v1/chat/completions" |
|
|
| MODEL = "llama3-70b-8192" |
|
|
| |
| |
| |
|
|
| def generate_proposal(job_description, skills, experience_level, tone): |
|
|
| if not GROQ_API_KEY: |
| return "Error: GROQ_API_KEY not found in environment variables." |
|
|
| prompt = f""" |
| You are a top 1% freelancer who writes high-converting proposals. |
| |
| Your task: |
| Generate a professional, persuasive, personalized freelance proposal. |
| |
| Job Description: |
| {job_description} |
| |
| Freelancer Skills: |
| {skills} |
| |
| Experience Level: |
| {experience_level} |
| |
| Tone: |
| {tone} |
| |
| Return ONLY valid JSON in this format: |
| |
| {{ |
| "hook": "", |
| "proposal_body": "", |
| "pricing_suggestion": "", |
| "follow_up_message": "" |
| }} |
| """ |
|
|
| headers = { |
| "Authorization": f"Bearer {GROQ_API_KEY}", |
| "Content-Type": "application/json" |
| } |
|
|
| payload = { |
| "model": MODEL, |
| "messages": [ |
| {"role": "system", "content": "You write winning freelance proposals."}, |
| {"role": "user", "content": prompt} |
| ], |
| "temperature": 0.7 |
| } |
|
|
| try: |
| response = requests.post(GROQ_URL, headers=headers, json=payload) |
| result = response.json() |
|
|
| content = result["choices"][0]["message"]["content"] |
|
|
| |
| if content.startswith("```"): |
| content = content.split("```")[1] |
|
|
| data = json.loads(content) |
|
|
| final_output = f""" |
| π₯ HOOK: |
| {data['hook']} |
| |
| π PROPOSAL: |
| {data['proposal_body']} |
| |
| π° PRICING SUGGESTION: |
| {data['pricing_suggestion']} |
| |
| π© FOLLOW-UP MESSAGE: |
| {data['follow_up_message']} |
| """ |
|
|
| return final_output |
|
|
| except Exception as e: |
| return f"Error generating proposal: {str(e)}" |
|
|
|
|
| |
| |
| |
|
|
| with gr.Blocks(title="AI Proposal Generator for Freelancers") as app: |
|
|
| gr.Markdown("## π AI Proposal Generator") |
| gr.Markdown("Generate high-converting freelance proposals instantly.") |
|
|
| job_description = gr.Textbox(label="Job Description", lines=8) |
| skills = gr.Textbox(label="Your Skills", lines=5) |
|
|
| experience_level = gr.Dropdown( |
| ["Beginner", "Intermediate", "Expert"], |
| label="Experience Level", |
| value="Intermediate" |
| ) |
|
|
| tone = gr.Dropdown( |
| ["Professional", "Confident", "Friendly", "Persuasive"], |
| label="Tone", |
| value="Professional" |
| ) |
|
|
| generate_btn = gr.Button("Generate Proposal") |
|
|
| output = gr.Textbox(label="Generated Proposal", lines=20) |
|
|
| generate_btn.click( |
| generate_proposal, |
| inputs=[job_description, skills, experience_level, tone], |
| outputs=output |
| ) |
|
|
| app.launch() |