import gradio as gr from openai import OpenAI import os import logging import time logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) css = ''' .gradio-container{max-width: 1000px !important} h1{text-align:center} footer { visibility: hidden } ''' ACCESS_TOKEN = os.getenv("HF_TOKEN") start_time = time.time() logger.info("Loading Client....") client = OpenAI( base_url="https://api-inference.huggingface.co/v1/", api_key=ACCESS_TOKEN, ) end_time = time.time() logger.info(f"Client Loaded. Time taken : {end_time - start_time} seconds.") #interact with API def respond( message, history, temperature, max_tokens, ): SYS_PROMPT = """ Extract all relevant keywords and add quantities from the following text and format the result in nested JSON, ignoring personal details and focusing only on the area and furniture items as shown in the example. Each item should have a count, which will be set to 1 for simplicity. The response should be in JSON format only, without any additional comments. Good JSON example:{ "Lobby Area/Entrance": { "Vinyl wall covering": 1, "Decorative hardwired lighting": 1 }, "Lobby": { "Carpet, carpet pad, and base": 1, "Window treatments": 1, "Artwork and decorative accessories": 1, "Portable lighting": 1, "Upholstered furniture and decorative pillows": 1, "Millwork": 1 } } Make sure to fetch details from the provided text and ignore unnecessary information. The response should be in JSON format only, without any additional comments. Task: Convert the provided extracted text into the JSON format described above. Provided Text: PROPERTY IMPROVEMENT PLAN PREPARED FOR: Springfield, IL To be relicensed as Hilton Garden Inn ... Patios/The Terrace - Install patio decorative lighting. Install patio furniture. (lounge chairs, chaise, dining tables/chairs) ... Lobby Area - Replace carpet, carpet pad, and base. Replace window treatments. Replace artwork and decorative accessories. Replace portable lighting. (floor lamps, table lamps) Replace upholstered furniture and decorative pillows. Replace millwork. Replace the television(s). ... Registration Area - Replace vinyl wall covering. Replace hard surface floor covering. Replace artwork. Install new signature graphics on the back wall. ... Expected Output (JSON format): { "Patios/The Terrace": { "Patio decorative lighting": 1, "Lounge chairs": 1, "Chaise": 1, "Dining tables": 1, "Dining chairs": 1, "Patio furniture": 1 }, "Lobby Area": { "Carpet, carpet pad, and base": 1, "Window treatments": 1, "Artwork and decorative accessories": 1, "Portable lighting (floor lamps, table lamps)": 1, "Upholstered furniture and decorative pillows": 1, "Millwork": 1, "Television(s)": 1 }, "Registration Area": { "Vinyl wall covering": 1, "Hard surface floor covering": 1, "Artwork (new signature graphics on the back wall)": 1 } } """ messages = [{"role": "system", "content": SYS_PROMPT}] if len(history) == 0: pass else: history.pop() for val in history: if val[0]: messages.append({"role": "user", "content": val[0]}) if val[1]: messages.append({"role": "assistant", "content": val[1]}) messages.append({"role": "user", "content": message}) response = "" start_time = time.time() logger.info("Generating Response....") for message in client.chat.completions.create( model="meta-llama/Meta-Llama-3.1-8B-Instruct", max_tokens=max_tokens, stream=True, temperature=temperature, messages=messages, ): token = message.choices[0].delta.content response += token yield response end_time = time.time() logger.info(f"Response Generated. Time taken : {end_time - start_time} seconds.") DESCRIPTION = '''

ContenteaseAI custom trained model

''' LICENSE = """

--- For more information, visit our [website](https://contentease.ai). """ PLACEHOLDER = """

ContenteaseAI Custom AI trained model

Enter the text extracted from the PDF:

""" css = """ h1 { text-align: center; display: block; } """ chatbot = gr.Chatbot(height=450, placeholder=PLACEHOLDER, label='Gradio ChatInterface') with gr.Blocks(fill_height=True, css=css) as demo: gr.Markdown(DESCRIPTION) gr.ChatInterface( fn=respond, chatbot=chatbot, fill_height=True, additional_inputs_accordion=gr.Accordion(label="⚙️ Parameters", open=False, render=False), additional_inputs=[ gr.Slider(minimum=0, maximum=1, step=0.1, value=0.9, label="Temperature", render=False), gr.Slider(minimum=128, maximum=2000, step=1, value=2000, label="Max new tokens", render=False), ] ) gr.Markdown(LICENSE) if __name__ == "__main__": try: demo.launch(show_error=True, debug = True) except Exception as e: logger.error(f"Error launching Gradio demo: {e}")