Repository: gradio-app/gradio

Issue:
Interpretations don't work on latest main branch 
### Describe the bug

I can't run the default interpretation for a simple app with a single numeric input and label output on the latest commit to main. 

### Reproduction

```python
import gradio as gr


def is_greater_than_50(num: int) -> bool:
    return num > 50


iface = gr.Interface(fn=is_greater_than_50, inputs="number",
                     outputs="label", interpretation="default")
iface.launch()
```

After hitting `Interpret`, server will throw the following exception and not render an interpretation

```
AttributeError: 'Interpretation' object has no attribute 'postprocess'
```

### Screenshot

![interpretation_bug](https://user-images.githubusercontent.com/41651716/165832607-b2b2625c-a388-44f2-b9e2-08675c308ab5.gif)


### Logs

```shell
(gradio-dev) freddy@DESKTOP-V50OCDE:~/sources/gradio-scripts$ python hello_world.py
Running on local URL:  http://127.0.0.1:7861/

To create a public link, set `share=True` in `launch()`.
Traceback (most recent call last):
  File "/home/freddy/sources/gradio/gradio/routes.py", line 247, in predict
    output = await run_in_threadpool(
  File "/home/freddy/miniconda3/envs/gradio-dev/lib/python3.9/site-packages/starlette/concurrency.py", line 39, in run_in_threadpool
    return await anyio.to_thread.run_sync(func, *args)
  File "/home/freddy/miniconda3/envs/gradio-dev/lib/python3.9/site-packages/anyio/to_thread.py", line 28, in run_sync
    return await get_asynclib().run_sync_in_worker_thread(func, *args, cancellable=cancellable,
  File "/home/freddy/miniconda3/envs/gradio-dev/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 818, in run_sync_in_worker_thread
    return await future
  File "/home/freddy/miniconda3/envs/gradio-dev/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 754, in run
    result = context.run(func, *args)
  File "/home/freddy/sources/gradio/gradio/blocks.py", line 315, in process_api
    block.postprocess(predictions[i])
AttributeError: 'Interpretation' object has no attribute 'postprocess'
```
```


### System Info

```shell
On commit `6d0a6ccb83608e255e1b0ee83b2aa27d96b4c774`, on WSL
```


### Severity

critical


Discussion:
Hi, I am facing the same problem. The interpret button does not work for this demo https://huggingface.co/course/chapter9/6?fw=pt. 

Is there any update on this? Thanks. 

Resolving patch:
diff --git a/gradio/components.py b/gradio/components.py
--- a/gradio/components.py
+++ b/gradio/components.py
@@ -3913,6 +3913,9 @@ def update(
     def style(self):
         return self
 
+    def postprocess(self, y):
+        return y
+
 
 class StatusTracker(Component):
     """


Test patch:
diff --git a/test/test_external.py b/test/test_external.py
--- a/test/test_external.py
+++ b/test/test_external.py
@@ -173,7 +173,7 @@ def test_english_to_spanish(self):
     def test_sentiment_model(self):
         io = gr.Interface.load("models/distilbert-base-uncased-finetuned-sst-2-english")
         try:
-            output = io("I am happy, I love you.")
+            output = io("I am happy, I love you")
             self.assertGreater(output["POSITIVE"], 0.5)
         except TooManyRequestsError:
             pass
diff --git a/test/test_interfaces.py b/test/test_interfaces.py
--- a/test/test_interfaces.py
+++ b/test/test_interfaces.py
@@ -7,6 +7,7 @@
 import mlflow
 import requests
 import wandb
+from fastapi.testclient import TestClient
 
 from gradio.blocks import Blocks
 from gradio.interface import Interface, TabbedInterface, close_all, os
@@ -219,5 +220,39 @@ def test_deprecation_notice(self):
             _ = Interface(lambda x: x, "textbox", "textbox", verbose=True)
 
 
+class TestInterfaceInterpretation(unittest.TestCase):
+    def test_interpretation_from_interface(self):
+        def quadratic(num1: float, num2: float) -> float:
+            return 3 * num1**2 + num2
+
+        iface = Interface(
+            fn=quadratic,
+            inputs=["number", "number"],
+            outputs="number",
+            interpretation="default",
+        )
+
+        app, _, _ = iface.launch(prevent_thread_lock=True)
+        client = TestClient(app)
+
+        btn = next(
+            c["id"]
+            for c in iface.config["components"]
+            if c["props"].get("value") == "Interpret"
+        )
+        fn_index = next(
+            i
+            for i, d in enumerate(iface.config["dependencies"])
+            if d["targets"] == [btn]
+        )
+
+        response = client.post(
+            "/api/predict/", json={"fn_index": fn_index, "data": [10, 50, 350]}
+        )
+        self.assertTrue(response.json()["data"][0]["interpretation"] is not None)
+        iface.close()
+        close_all()
+
+
 if __name__ == "__main__":
     unittest.main()