File size: 2,663 Bytes
8366c08
 
 
 
 
 
 
 
42873cc
 
8366c08
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from llama_index.llms.openai import OpenAI
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.core import Settings
import os
import json
import streamlit as st
import requests

openai_api_key = os.getenv('openai_api')
openai_api_key = openai_api_key
Settings.llm = OpenAI(model="gpt-3.5-turbo", temperature=0.4)
Settings.embed_model = OpenAIEmbedding(model="text-embedding-ada-002")

from opensearchpy import OpenSearch, RequestsHttpConnection

auth = ('admin','klbvrR4AlGNMaQ')

host = '10.11.10.111'
port = 32000

client = OpenSearch(
    hosts = [{'host': host, 'port': port}],
    http_auth = auth,
    use_ssl = True,
    verify_certs = False
)

def generate_opensearch_query(user_input):
    prompt = f"""
    You are an assistant trained to translate natural language requests into OpenSearch queries. Based on the user's request, generate an OpenSearch JSON query.

    Examples:
    User Input: "Get all documents where the status is active."
    Response:
    {{
      "query": {{
        "match": {{
          "status": "active"
        }}
      }}
    }}

    User Input: "Find records with priority high created in the last 7 days."
    Response:
    {{
      "query": {{
        "bool": {{
          "must": [
            {{ "match": {{ "priority": "high" }} }},
            {{ "range": {{ "created_at": {{ "gte": "now-7d/d", "lte": "now" }} }} }}
          ]
        }}
      }}
    }}

    User Input: "Show documents where age is over 30 and sort by created date."
    Response:
    {{
      "query": {{
        "range": {{
          "age": {{ "gt": 30 }}
        }}
      }},
      "sort": [
        {{ "created_date": {{ "order": "asc" }} }}
      ]
    }}

    User Input: "{user_input}"
    Response:
    """

    llm_response = Settings.llm.complete(prompt)
    return llm_response

def implement_query(generated_query):
    query = json.loads(generated_query.text)
    response = client.search(body=query)
    return response


st.title("OpenSearch Query Generator")
st.subheader("Enter your natural language query:")

user_input = st.text_area("Enter a Prompt:", height=150)

if st.button("Generate OpenSearch Query"):
    if user_input.strip():
        generated_query = generate_opensearch_query(user_input)

        st.subheader("Generated OpenSearch Query:")
        st.json(json.loads(generated_query.text))

        try:
            response = implement_query(generated_query)
            st.subheader("OpenSearch Response:")
            st.json(response)
        except Exception as e:
            st.error(f"Error executing OpenSearch query: {e}")
    else:
        st.warning("Please enter a valid query.")