File size: 5,682 Bytes
4ac703a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
import openai
import gradio as gr
import random
import time
import json

def get_completion(prompt, model="gpt-3.5-turbo"):
    messages = [{"role": "user", "content": prompt}]
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=0, # this is the degree of randomness of the model's output
    )
    return response.choices[0].message["content"]

def get_completion_from_messages(messages, model="gpt-3.5-turbo", temperature=0):
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=temperature, # this is the degree of randomness of the model's output
    )
#     print(str(response.choices[0].message))
    return response.choices[0].message["content"]

def collect_messages(prompt, context):
    context.append({'role':'user', 'content':f"{prompt}"})
    response = get_completion_from_messages(context) 
    context.append({'role':'assistant', 'content':f"{response}"})
    return response, context

DIVAR_CONTEXT = """
فرض کن ربات دستیار فروش  برای اپلیکیشن دیوار هستی که کاربر را کمک کنی. در هر مرحله باید از کاربر سوالاتی بپرسی که نیاز کاربر مشخص شود و در نهایت محصول نهایی را پیشنهاد دهی. در هر مرحله باید از کاربر سوالی بپرسی و فقط آخر مکالمه یک کالای مشخص را پیشنهاد دهی.
اپلیکیشن و سایت دیوار، بستری برای انتشار رایگان انواع آگهی و نیازمندی خرید و فروش کالاهای نو و دست‌دوم است. 
شما می توانید از اپلیکیشن دیوار برای دریافت و ارائه خدمات و همچنین، خرید و فروش کالا در دسته‌بندی‌‌های مختلف زیر استفاده کنید:
املاک: خرید و فروش خانه، آپارتمان، ویلا و مغازه
وسایل نقلیه : خرید و فروش خودروی سواری، کلاسیک و سنگین و آگهی‌های خودروهای اجاره‌ای
لوازم الکترونیکی : خرید و فروش موبایل و تبلت، لپ‌تاپ و رایانه، کنسول بازی، لوازم صوتی و تصویری و ...
وسایل منزل : خرید و فروش وسایل خانه، لوازم آشپزخانه، ابزار و وسایل ساختمان و ...
خدمات : انواع خدمات پذیرایی و مراسم، نظافت، سرگرمی، رایانه‌ای، مالی و حسابداری و ...
وسایل شخصی : خرید و فروش کیف، کفش، لباس، آرایشی و بهداشتی، لباس بچه، لوازم التحریر و ...
سرگرمی و فراغت : خرید و فروش بلیط و تور، کتاب و مجله، کلکسیون، آلات موسیقی، لوازم ورزشی و ...
اجتماعی : رویداد، رویدادهای داوطلبانه، گم‌شده‌ها و ...
برای کسب‌وکار : خرید و فروش تجهیزات و ماشین‌آلات، عمده‌فروشی و ...
استخدام و کاریابی : اداری و مدیریتی، سرایداری، عمران و ساختمانی، رایانه و فناوری اطلاعات، مالی و حسابداری و ...
در هر جا که ربات نیاز به سرچ در دیوار داشتی می توانی فقط یک جیسون تولید کنی به شکل زیر تا نتیجه را از طرف سیستم بگیری و سپس جواب کاربر را بدهی.
{"query": "...", "price_range": [min, max]}
شما باید کوتاه و بسیار دوستانه پاسخ دهید.
"""

base_context = [ {'role':'system', 'content': DIVAR_CONTEXT} ]  # accumulate messages
save = ""
context = base_context.copy()

def respond(message, chat_history, api_key):
    global context, save
    try:
        openai.api_key = api_key
        save = api_key
        bot_message, context = collect_messages(message, context)
        chat_history.append((message, bot_message))
        
        messages = context.copy()
        messages.append(
            {'role':'system', 'content':'create a json based on the previous conversation (Make sure to only output the json and nothing more). The fields should be 1) search_query (make it a list of possible queries which can find the best items for the user in Divar website) 2) price_range with min and max number In Tomans 3) possible_filters (keys must be in english)' },    
        )  
        response = get_completion_from_messages(messages, temperature=0)
        # save = response
        query = json.loads(response)["search_query"][0]
        h = f"<iframe src='https://www.google.com/search?igu=1&q=site:divar.ir+{query}' width='100%' height='400' title='description'></iframe>"
    except Exception as e:
        h, response = "WRONG API KEY", str(e)
    return "", chat_history, h, response

def clear_fn():
    context = base_context.copy()

with gr.Blocks() as demo:
    with gr.Row():
        with gr.Column(scale=1):
            html = gr.HTML("Results Will be shown here!")
            htmlj = gr.HTML("Results Will be shown here!")
        with gr.Column(scale=1):
            api_key_box = gr.Textbox(label="OpenAI API Key", info="OpenAI API Key", lines=1, value="")
            chatbot = gr.Chatbot()
            msg = gr.Textbox()
            clear = gr.Button("Clear")
            msg.submit(respond, [msg, chatbot, api_key_box], [msg, chatbot, html, htmlj])
            clear.click(clear_fn, None, chatbot, queue=False)

demo.launch()