import os import gradio as gr import pandas as pd import ast from sklearn.metrics.pairwise import cosine_similarity import numpy as np from openai import OpenAI, ChatCompletion # Получаем значения OPEN_API_KEY, login, и password OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY") login = os.environ.get("login") password = os.environ.get("password") # Инициализируем OpenAI API клиент client = OpenAI(api_key=OPENAI_API_KEY) # Загружаем данные embeddings data = pd.read_csv("embeddings.csv") data["embedding"] = data["embedding"].apply(ast.literal_eval) # Элементы Gradio интерфейса model_dropdown = gr.Dropdown(choices=["gpt-3.5-turbo", "gpt-4-1106-preview"], label="Select Model") temperature_slider = gr.Slider(minimum=0, maximum=1.0, value=0, label="Temperature") top_p_slider = gr.Slider(minimum=0.01, maximum=1.0, value=1, label="Top P") textbox_input = gr.Textbox(label="Enter text here") # Функция поиска отзывов def search_reviews(df_original, product_description, without_newlines=False, n=1): df = df_original.copy() if without_newlines: product_description = product_description.replace("\n", " ") embedding = ( client.embeddings.create( input=[product_description], model="text-embedding-ada-002" ) .data[0] .embedding ) df["similarities"] = df["embedding"].apply( lambda x: cosine_similarity( np.array(x).reshape(1, -1), np.array(embedding).reshape(1, -1) )[0][0] ) res = df.sort_values("similarities", ascending=False).head(n) return res.reset_index(drop=True) # Функция генерации ответа def generate_response(text, model, temperature, top_p): reference = search_reviews(data, text, without_newlines=True)["Content"][0] completion = client.chat.completions.create( model=model, temperature=temperature, top_p=top_p, messages=[ { "role": "system", "content": f"Generate high-quality rewritten articles, ensuring logical composition, avoiding over-exaggeration, and refraining from any imaginative elements. Use the provided sample text as a reference for the desired writing style:{reference}", }, {"role": "user", "content": f"{text}"}, ], ) result = completion.choices[0].message.content return result # Создаём интерфейс Gradio iface = gr.Interface( fn=generate_response, inputs=[textbox_input, model_dropdown, temperature_slider, top_p_slider], outputs='text' ) # Запускаем интерфейс Gradio iface.launch(auth=(login, password))