File size: 4,622 Bytes
39dff4c
 
 
99914ec
4a0366f
c352f02
a147fbd
8d84915
ed0aa7b
24ed9e0
c6ddc86
3661992
4854a72
 
 
 
176b9ce
 
 
 
 
 
 
 
4854a72
 
 
176b9ce
d354d71
 
176b9ce
 
 
 
 
 
 
 
 
 
 
4d079d2
176b9ce
 
 
4854a72
176b9ce
 
 
 
 
 
 
 
 
 
 
 
d354d71
176b9ce
 
4854a72
 
 
 
bb31795
 
176b9ce
4854a72
 
176b9ce
4854a72
176b9ce
4854a72
6b796ae
3516f35
 
6b796ae
3516f35
6b796ae
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3516f35
 
 
 
 
ea7a2b9
8d84915
 
b4ae1f8
 
8d84915
 
 
 
593b7a9
b4ae1f8
593b7a9
 
 
8d84915
b4ae1f8
8d84915
 
 
b4ae1f8
ca860d3
39dff4c
fd6e173
82f20ec
7afe812
9ed9d81
af86876
cf7f506
bb31795
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import gradio as gr
import requests
import json
from decouple import Config

config = Config('.env')


def query_vectara(question):
    user_message = question

    # Read authentication parameters from the .env file
    CUSTOMER_ID = config('CUSTOMER_ID')
    CORPUS_ID = config('CORPUS_ID')
    API_KEY = config('API_KEY')

    # Define the headers
    api_key_header = {
        "customer-id": CUSTOMER_ID,
        "x-api-key": API_KEY
    }

    # Define the request body in the structure provided in the example
    request_body = {
        "query": [
            {
                "query": user_message,
                "queryContext": "",
                "start": 1,
                "numResults": 10,
                "contextConfig": {
                    "charsBefore": 0,
                    "charsAfter": 0,
                    "sentencesBefore": 2,
                    "sentencesAfter": 2,
                    "startTag": "%START_SNIPPET%",
                    "endTag": "%END_SNIPPET%",
                },
                "rerankingConfig": {
                    "rerankerId": 272725718,
                    "mmrConfig": {
                        "diversityBias": 0.27
                    }
                },
                "corpusKey": [
                    {
                        "customerId": CUSTOMER_ID,
                        "corpusId": CORPUS_ID,
                        "semantics": 0,
                        "metadataFilter": "",
                        "lexicalInterpolationConfig": {
                            "lambda": 0
                        },
                        "dim": []
                    }
                ],
                "summary": [
                    {
                        "maxSummarizedResults": 5,
                        "responseLang": "eng",
                        "summarizerPromptName": "vectara-summary-ext-v1.2.0"
                    }
                ]
            }
        ]
    }

    # Make the API request using Gradio
    response = requests.post(
        "https://api.vectara.io/v1/query",
        json=request_body,  # Use json to automatically serialize the request body
        verify=True,
        headers=api_key_header
    )
  
    if response.status_code == 200:  
        query_data = response.json()  
        print(query_data)  
        if query_data:  
            sources_info = []  
              
            # Iterate over all response sets  
            for response_set in query_data.get('responseSet', []):  
                # Extract sources  
                for source in response_set.get('response', []):  
                    source_metadata = source.get('metadata', [])  
                    source_info = {}  
  
                    for metadata in source_metadata:  
                        metadata_name = metadata.get('name', '')  
                        metadata_value = metadata.get('value', '')  
  
                        if metadata_name == 'title':  
                            source_info['title'] = metadata_value  
                        elif metadata_name == 'author':  
                            source_info['author'] = metadata_value  
                        elif metadata_name == 'pageNumber':  
                            source_info['page number'] = metadata_value  
  
                    if source_info:  
                        sources_info.append(source_info)  
              
            return f"Sources:\n{json.dumps(sources_info, indent=2)}"  
        else:  
            return "No data found in the response."  
    else:  
        return f"Error: {response.status_code}"  


def convert_to_markdown(vectara_response):
    if vectara_response:
        response_set = vectara_response.get('responseSet', [{}])[0]
        summary = response_set.get('summary', [{}])[0]
        summary_text = summary.get('text', 'No summary available')
        sources = response_set.get('response', [])[:5]
        sources_text = [source.get('text', '') for source in sources]

        # Format the summary as Markdown
        markdown_summary = f'**Summary:** {summary_text}\n\n'

        # Format the sources as a numbered list
        markdown_sources = "\n".join([f"{i+1}. {source}" for i, source in enumerate(sources_text)])

        return f"{markdown_summary}**Sources:**\n{markdown_sources}"
    else:
        return "No data found in the response."


iface = gr.Interface(
    fn=query_vectara,
    inputs=[gr.Textbox(label="Input Text")],
    outputs=[gr.Markdown(label="Output Text")],
    title="Vectara Chatbot",
    description="Ask me anything using the Vectara API!"
)

iface.launch()