File size: 3,297 Bytes
e84a884
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
from logging import getLogger, DEBUG, StreamHandler
from dotenv import load_dotenv
import os
import requests
import json
import pandas as pd

import gradio as gr
import openai

load_dotenv()

logger = getLogger()
logger.setLevel(DEBUG)
handler = StreamHandler()
handler.setLevel(DEBUG)
logger.addHandler(handler)

dify_api_key = os.environ["DIFY_API_KEY"]

def voice_to_text(voice_file):
    # 処理記述

    return "仮の返答"

def make_minutes(voice_to_text_output):
    # 処理記述

    return "仮の返答"

# def get_QA():
    
#     url = 'https://api.dify.ai/v1/workflows/run'
#     headers = {
#         'Authorization': 'Bearer {dify_api_key}',
#         'Content-Type': 'application/json'
#     }
#     data = {
#         "inputs": {
#             {
#                 "campany_web_url": "https://www.meiji.co.jp/",
#                 "question_num": 2,
#                 "sys.files": [],
#                 "sys.user_id": "90f2bdbf-5004-49a5-bbec-158429971705"
#             }
#         },
#         "response_mode": "streaming",
#         "user": "abc-123"
#     }

#     response = requests.post(url, headers=headers, json=data)

#     # レスポンスの確認
#     print(response.status_code)
#     print(response.text)

#     return response.data.outputs

def get_QA_table(url, number):

    url = 'https://api.dify.ai/v1/workflows/run'
    headers = {
        'Authorization': f'Bearer {dify_api_key}',
        'Content-Type': 'application/json'
    }
    data = {
        "inputs": {
              "campany_web_url": url,
              "question_num": number,
        },
        "response_mode": "blocking",
        "user": "abc-123"
    }

    response = requests.post(url, headers=headers, data=json.dumps(data))

    # res.textがJSON形式の文字列であることを仮定
    try:
        res_dict = json.loads(response.text)  # JSON文字列を辞書に変換
        logger.info(f"response dict:{res_dict}")
        res_output = res_dict["data"]["outputs"]["result"]
    except json.JSONDecodeError as e:
        print(f"JSONDecodeError: {e}")

    q_list = res_output["q_list"]
    a_list = res_output["a_list"]


    # 仮にデータを作成(ここではURLや数字に基づいて動的にデータを生成できる)
    # データフレームを作成
    df = pd.DataFrame({
        'Question': q_list,
        'Answer': a_list
    })
    
    # 表をHTMLに変換して返す
    return df.to_html()

# Gradioのインターフェースを定義
with gr.Blocks() as demo:
    gr.Markdown("営業想定質問&回答生成ツール")

    # URL入力ボックス
    url_input = gr.Textbox(label="営業先URLを入力", placeholder="https://example.com")
    
    # 数字入力ボックス
    number_input = gr.Number(label="質問数を入力", value=1)
    
    # 実行ボタン
    submit_button = gr.Button("実行")
    
    # 表の出力エリア
    table_output = gr.HTML()

    # 実行ボタンが押されたときのアクションを定義
    submit_button.click(
        fn=get_QA_table,          # 実行される関数
        inputs=[url_input, number_input],  # 関数の入力
        outputs=table_output        # 関数の出力
    )


if __name__ == "__main__":
    demo.launch(show_api=False, server_name="0.0.0.0")