#!/usr/bin/env python # encoding: utf-8 import gradio as gr from PIL import Image import requests import base64 from io import BytesIO import traceback import os def upload_img(image,_chatbot,_app_session): image = Image.fromarray(image) _app_session['sts']=None _app_session['ctx']='' _app_session['img']=image _chatbot.append(('图片解析成功,可以和我对话了', '')) return _chatbot,_app_session def respond( _question, _chat_bot,_app_cfg): try: img = _app_cfg['img'] buffered = BytesIO() img.save(buffered, format="JPEG") img_str = base64.b64encode(buffered.getvalue()).decode('utf-8') url = os.environ['SERVICE_URL'] resp = requests.post(url, headers={ "X-Model-Best-Model": "viscpm-chat-balance", "X-Model-Best-Trace-ID": "test-trace", }, json={ "image": img_str, "question": _question, }) resp = resp.json() # _answer = resp['data']['response'] print('get response', resp) _answer = resp['response'] print(f'question: {_question}, answer: {_answer}') except Exception as e: print(traceback.format_exc()) if resp is not None: print(resp.content) _answer = "请求失败" _chat_bot.append((_question, _answer)) _context = _app_cfg['ctx'] + '\n' + _question + '\n' + _answer + '\n' sts = None _app_cfg['ctx'] = _context _app_cfg['sts'] = sts return '', _chat_bot, _app_cfg with gr.Blocks() as demo: app_session = gr.State({'sts':None,'ctx':None,'img':None}) bt_pic = gr.Image(label="先上传一张图片") chat_bot = gr.Chatbot(label="聊天对话") txt_message = gr.Textbox(label="输入文字") txt_message.submit(respond, [ txt_message, chat_bot,app_session], [txt_message,chat_bot,app_session]) bt_pic.upload(lambda: None, None, chat_bot, queue=False).then(upload_img, inputs=[bt_pic,chat_bot,app_session], outputs=[chat_bot,app_session]) demo.queue(concurrency_count=1, max_size=20).launch(share=False, debug=True)