timtjoe commited on
Commit
c0ab4e3
·
verified ·
1 Parent(s): aa88314

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +77 -0
app.py ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from datasets import load_dataset, Dataset
3
+ from huggingface_hub import hf_hub_download
4
+ import os
5
+
6
+ # Define the dataset name and a split to load
7
+ DATASET_NAME = "wikides" # The actual dataset is likely "wikides" or a related variant.
8
+ # We'll use a local file for demonstration since the "wikides" dataset isn't directly loadable with load_dataset()
9
+ # For a real application, you'd use a known, public Hugging Face dataset.
10
+ # The user might need to upload a wikides file.
11
+ # Let's assume a dummy local file for the sake of the API demonstration.
12
+ # In a real-world scenario, you would use `load_dataset("wikides", split="train")`
13
+ # However, the search results indicate that the dataset is not a simple direct load.
14
+ # So we'll use a simplified example to demonstrate the API functionality.
15
+ # Assuming a local dummy CSV file named 'wikides_data.csv' exists.
16
+ # We'll create a dummy file for the demonstration.
17
+
18
+ # Create a dummy CSV file for demonstration purposes
19
+ if not os.path.exists("wikides_data.csv"):
20
+ with open("wikides_data.csv", "w") as f:
21
+ f.write("id,title,text\n")
22
+ for i in range(100):
23
+ f.write(f"{i},Title {i},This is the text for article {i} from WikiDES.\n")
24
+
25
+ # Load the dataset from the local file
26
+ # In a real scenario you would have the actual dataset files.
27
+ try:
28
+ dataset = load_dataset("csv", data_files="wikides_data.csv", split="train")
29
+ except Exception as e:
30
+ raise RuntimeError(f"Failed to load dataset: {e}")
31
+
32
+ # Function to fetch data with a limit
33
+ def get_data_with_limit(limit: int = 50):
34
+ """
35
+ Fetches data from the dataset with a specified limit.
36
+ The limit defaults to 50 if not provided or if it's invalid.
37
+ """
38
+ if not isinstance(limit, int) or limit < 1:
39
+ limit = 50
40
+
41
+ # Ensure the limit doesn't exceed the dataset size
42
+ num_rows = len(dataset)
43
+ if limit > num_rows:
44
+ limit = num_rows
45
+
46
+ try:
47
+ # Slice the dataset to get the required number of rows
48
+ return dataset.select(range(limit)).to_dict()
49
+ except Exception as e:
50
+ # Return a structured error response
51
+ return {"error": "Internal Server Error", "message": str(e)}
52
+
53
+ # Create the Gradio interface
54
+ # We use `gr.Interface` to define the API endpoint.
55
+ # The `inputs` and `outputs` define the schema.
56
+ # We set `api_name="data"` to expose the function at the `/data` endpoint.
57
+ demo = gr.Interface(
58
+ fn=get_data_with_limit,
59
+ inputs=[
60
+ gr.Number(label="limit", value=50, minimum=1)
61
+ ],
62
+ outputs=[
63
+ gr.JSON(label="Data")
64
+ ],
65
+ title="WikiDES Data API",
66
+ description="A simple API to access data from the WikiDES dataset with a configurable limit. The default limit is 50.",
67
+ examples=[
68
+ [10],
69
+ [25],
70
+ [100]
71
+ ],
72
+ allow_flagging="never",
73
+ api_name="data"
74
+ )
75
+
76
+ # Launch the Gradio app
77
+ demo.launch()