| | import gradio as gr |
| | import pdfplumber |
| | from groq import Groq |
| | import os |
| | import json |
| |
|
| | def file_to_string(file): |
| | if file.name.endswith(".pdf"): |
| | text = '' |
| | with pdfplumber.open(file.name) as pdf: |
| | for page in pdf.pages: |
| | text += page.extract_text() |
| | return text |
| | elif file.name.endswith(".txt"): |
| | return file.read().decode('utf-8') |
| | else: |
| | return "Unsupported file format." |
| |
|
| | def generate_summary(file, prompt, model, output_format, temperature, top_p): |
| | if not prompt: |
| | return "Please provide a prompt." |
| |
|
| | file_text = file_to_string(file) if file else "" |
| | |
| | |
| | if "{PDF_TEXT}" in prompt and file_text: |
| | full_prompt = prompt.replace("{PDF_TEXT}", file_text) |
| | else: |
| | full_prompt = f"{prompt}\n{file_text}" if file_text else prompt |
| |
|
| | try: |
| | client = Groq(api_key=os.environ["GROQ_API_KEY"]) |
| | completion = client.chat.completions.create( |
| | model=model, |
| | messages=[ |
| | { |
| | "role": "user", |
| | "content": full_prompt |
| | } |
| | ], |
| | temperature=temperature, |
| | max_tokens=8000, |
| | top_p=top_p, |
| | response_format={"type": "json_object"} if output_format == "JSON" else None, |
| | stop=None, |
| | ) |
| |
|
| | output_text = completion.choices[0].message.content |
| |
|
| | if output_format == "JSON": |
| | try: |
| | parsed_json = json.loads(output_text) |
| | output_text = json.dumps(parsed_json, indent=2) |
| | except json.JSONDecodeError: |
| | output_text = "Error: The model did not return valid JSON." |
| |
|
| | except Exception as e: |
| | output_text = f"An error occurred: {str(e)}" |
| |
|
| | return output_text |
| |
|
| | def clear_output(): |
| | return None, "", "", "Plain Text", 0, 0.9 |
| |
|
| | with gr.Blocks() as iface: |
| | gr.Markdown("LLAMA 70B Groq API") |
| | |
| | with gr.Row(): |
| | file_input = gr.File(label="Upload File (Optional)") |
| | prompt_input = gr.Textbox(label="Prompt", placeholder="Enter your prompt here... Use {PDF_TEXT} to insert PDF content at a specific location.", lines=3) |
| | |
| | with gr.Row(): |
| | model_dropdown = gr.Dropdown(label="Choose Model", choices=["llama-3.1-8b-instant", "llama-3.1-70b-versatile"], value="llama-3.1-70b-versatile") |
| | output_format = gr.Radio(["Plain Text", "JSON"], label="Output Format", value="Plain Text") |
| | |
| | with gr.Row(): |
| | temperature_slider = gr.Slider(minimum=0, maximum=2, value=0, step=0.1, label="Temperature") |
| | top_p_slider = gr.Slider(minimum=0, maximum=1, value=0.9, step=0.05, label="Top-p") |
| |
|
| | with gr.Row(): |
| | clear_button = gr.Button("Clear", size="small") |
| | submit_button = gr.Button("Generate Output") |
| |
|
| | output = gr.Textbox(label="Output", lines=10, placeholder="Output will appear here...") |
| |
|
| | submit_button.click( |
| | fn=generate_summary, |
| | inputs=[file_input, prompt_input, model_dropdown, output_format, temperature_slider, top_p_slider], |
| | outputs=[output] |
| | ) |
| |
|
| | clear_button.click( |
| | fn=clear_output, |
| | inputs=[], |
| | outputs=[file_input, prompt_input, output, output_format, temperature_slider, top_p_slider] |
| | ) |
| |
|
| | iface.launch() |