| import os |
| import csv |
| import time |
| import gradio as gr |
| from fastapi import FastAPI |
| from fastapi_utils.tasks import repeat_every |
|
|
|
|
| class Timer(object): |
| def __enter__(self): |
| self.start = time.perf_counter() |
| return self |
| def __exit__(self, typ, value, traceback): |
| self.elapsed = time.perf_counter() - self.start |
|
|
|
|
| file_changed = False |
| HF_TOKEN = os.getenv('HF_TOKEN') |
| root_dataset_path = "datasets" |
| huggingface_dataset_path = "Vsevolod/text2rec-users-feedback" |
| feedback_dataset = gr.HuggingFaceDatasetSaver(HF_TOKEN, huggingface_dataset_path) |
| local_dataset_path = f"{root_dataset_path}/{huggingface_dataset_path}" |
| data_path = f"{local_dataset_path}/data.csv" |
| print(os.getcwd()) |
| print(local_dataset_path) |
|
|
|
|
| def foo(x): |
| global file_changed |
| now = time.time() |
| with open(data_path, mode="a", newline="", encoding="utf-8") as file: |
| writer = csv.writer(file) |
| writer.writerow(("Фильмы про путешествия во времени","Грань будущего","Релевантно", "mNpuTAujx-j1E6mm4PVOMQ", now, 228)) |
| file_changed = True |
| return x |
|
|
|
|
| def create_interface(): |
| with gr.Blocks() as demo: |
| query = gr.Textbox(label="Запрос") |
| search_btn = gr.Button(label="Поиск") |
| output = gr.Textbox(label="Ответ") |
| search_btn.click(foo, inputs=query, outputs=output) |
| feedback_dataset.setup([], root_dataset_path) |
| return demo |
|
|
|
|
| def get_line_count(data_path): |
| with open(data_path, "r", encoding="utf-8") as csvfile: |
| line_count = len([None for row in csv.reader(csvfile)]) - 1 |
| return line_count |
|
|
|
|
| demo = create_interface() |
| app = FastAPI(docs_url=None, redoc_url=None) |
|
|
|
|
| @app.on_event("startup") |
| @repeat_every(seconds=20) |
| def repeat(): |
| global file_changed |
| if not file_changed: |
| return |
| print("Updating remote repo") |
| with Timer() as timer: |
| feedback_dataset.repo.git_pull(lfs=True) |
| line_count = get_line_count(data_path) |
| feedback_dataset.repo.push_to_hub(commit_message="Flagged sample #{}".format(line_count)) |
| print(f"Elapsed: {timer.elapsed:.3f}") |
| file_changed = False |
|
|
| app.mount("/", demo.app) |
|
|
|
|
| |
| |
| |
| |
| |
| |
|
|