import json import gradio as gr from dotenv import load_dotenv from llm_api.exceptions import RefusalError # from llm_api.langchain_api import extract_info, follow_structure from llm_api.native_api import extract_info, follow_structure from openai import BadRequestError load_dotenv('.env', override=True) def extract_free_fn(gallery, provider, schema): img_paths = [item[0] for item in gallery] # write schema to file before calling extract_free_properties try: if schema is not None and isinstance(schema, str) and 'import' not in schema.replace("'import'", '').replace("'important'", ''): with open('schema_free.py', 'r') as f: default_schema = f.read() import_part = default_schema.split('#####')[0] print('Executing freestyle schema...') full_schema = import_part + schema with open('read_schema_free.py', 'w') as f: f.write(full_schema) exec(import_part + schema, globals()) print('Executed freestyle schema') else: print('SCHEMA ELSE') raise Exception('Invalid schema') except Exception as e: print(e) return 'Invalid schema! Please check the schema or Reload this page to restore default settings', {}, [] try: free_attributes = extract_info(img_paths, provider, Garment) free_attributes = free_attributes.model_dump_json() except RefusalError as e: return e.message, {}, [] except BadRequestError as e: return e.message, {}, [] return f'OK - provider: {provider}', free_attributes, [1] * 100 def follow_schema_fn(free_attributes, provider, probs, schema): try: if schema is not None and isinstance(schema, str) and 'import' not in schema.replace("'import'", '').replace("'important'", ''): with open('schema_structured.py', 'r') as f: default_schema = f.read() import_part = default_schema.split('#####')[0] print('executing structured schema\n') full_schema = import_part + schema with open('read_schema_structured.py', 'w') as f: f.write(full_schema) exec(full_schema, globals()) print('executed structured schema') else: print('SCHEMA ELSE') raise Exception('Invalid schema') except: return 'Invalid schema! Please check the schema or Reload this page to restore default settings', {} try: schema_attributes = follow_structure(free_attributes, provider, Garment) schema_attributes = schema_attributes.model_dump_json() except RefusalError as e: return e.message, {} except BadRequestError as e: return e.message, {} return f'OK - provider: {provider}', schema_attributes with gr.Blocks(title='Internal Demo for Attribution') as demo: with gr.Row(): with gr.Column(scale=12): gr.Markdown('''
Internal Demo for Attribution
''') with gr.Row(): with gr.Column(scale=4): # gr.Markdown('''
Upload images of a garment and click Extract Freestyle
''') gallery = gr.Gallery(label='Images', type='filepath') probs_text = gr.Textbox(label='Probabilities', placeholder='Probabilities', visible=False) provider = gr.Dropdown(label='Provider', choices=['openai', 'anthropic'], value='openai') button_extract = gr.Button(value='Extract Freestyle') with gr.Column(scale=4): # gr.Markdown('''
Click Follow Schema to convert the freestyle output to predefined schema
''') status_free_text = gr.Textbox(label='Request Status', placeholder='') free_attributes = gr.JSON(label='Freestyle Attribute') button_follow = gr.Button(value='Follow Schema') with gr.Column(scale=4): status_structured_text = gr.Textbox(label='Request Status', placeholder='') schema_attributes = gr.JSON(label='Schema Attributes') with gr.Row(): # free_schema = gr.Dataframe(row_count=(4, 'dynamic'), label='Freestyle Schema', col_count=(4, 'dynamic'), interactive=True) # schema = gr.Dataframe(row_count=(4, 'dynamic'), label='Schema', col_count=(4, 'dynamic'), interactive=True) with open('schema_free.py', 'r') as f: schema_free_text = f.read() schema_free_text = schema_free_text.split('#####')[1] with open('schema_structured.py', 'r') as f: schema_structured_text = f.read() schema_structured_text = schema_structured_text.split('#####')[1] free_schema = gr.TextArea(label='Freestyle Schema', placeholder='Freestyle Schema', visible=True, value=schema_free_text, interactive=True) structured_schema = gr.TextArea(label='Structured Schema', placeholder='Schema', visible=True, value=schema_structured_text, interactive=True) button_extract.click(extract_free_fn, [gallery, provider, free_schema], [status_free_text, free_attributes, probs_text]) button_follow.click(follow_schema_fn, [free_attributes, provider, probs_text, structured_schema], [status_structured_text, schema_attributes]) # demo.launch(server_name="0.0.0.0", server_port=7688, share=False, ssl_verify=True, ssl_certfile=None, ssl_keyfile=None, auth=None) # demo.launch(server_name="0.0.0.0", server_port=7860, share=False, ssl_verify=False, ssl_certfile="server.crt", ssl_keyfile="server.key", auth=None) demo.launch(server_name="0.0.0.0", server_port=7861)