{"id":55185,"date":"2026-04-10T13:19:55","date_gmt":"2026-04-10T20:19:55","guid":{"rendered":"https:\/\/griddb.net\/?p=55185"},"modified":"2026-04-10T13:19:55","modified_gmt":"2026-04-10T20:19:55","slug":"stock-market-chatbot-application-using-langgraph-and-griddb","status":"publish","type":"post","link":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/stock-market-chatbot-application-using-langgraph-and-griddb\/","title":{"rendered":"Stock Market Chatbot Application Using LangGraph and GridDB"},"content":{"rendered":"<p>\nWith the advent of Large Language Models (LLMs), chatbot applications have become increasingly common, enabling more natural and intelligent interactions with data.\n<\/p>\n<p>\nIn this article, you will see how to build a stock market chatbot using <a href=\"https:\/\/www.langchain.com\/langgraph\">LangGraph<\/a>, <a href=\"https:\/\/openai.com\/index\/openai-api\/\">OpenAI API<\/a>, and <a href=\"https:\/\/www.global.toshiba\/ww\/products-solutions\/ai-iot\/griddb\/product\/griddb-cloud.html?\">GridDB cloud<\/a>.\n<\/p>\n<p>\nWe will retrieve historical Apple stock price data from Yahoo Finance using the yfinance library, insert it into a GridDB container, and then query it using a chatbot built with LangGraph that utilizes the OpenAI GPT -4 model.\n<\/p>\n<p>\nGridDB is a high-performance time-series database designed for massive real-time workloads. Its support for structured containers, built-in compression, and lightning-fast reads and writes makes it ideal for storing and querying time series data such as stock market prices.\n<\/p>\n<h2 id=\"installing-and-importing-required-libraries\">Installing and Importing Required Libraries<\/h2>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">!pip install -q yfinance\r\n<p>\r\n!pip install langchain\r\n!pip install langchain-core\r\n!pip install langchain-community\r\n!pip install langgraph\r\n!pip install langchain_huggingface\r\n!pip install tabulate\r\n!pip uninstall -y pydantic\r\n!pip install --no-cache-dir \"pydantic>=2.11,&lt;3\"<\/code><\/pre>\n<\/p>\n<\/div>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">import yfinance as yf\r\n<p>\r\nimport pandas as pd\r\nimport json\r\nimport datetime as dt\r\nimport base64\r\nimport requests\r\nimport numpy as np\r\n<\/p>\r\n\r\n<p>\r\nfrom langchain_core.prompts import ChatPromptTemplate\r\nfrom langchain_openai import ChatOpenAI\r\nfrom langchain_core.output_parsers import StrOutputParser\r\nfrom langgraph.graph import START, END, StateGraph\r\nfrom langchain_core.messages import HumanMessage\r\nfrom langgraph.checkpoint.memory import MemorySaver\r\nfrom langchain_experimental.agents import create_pandas_dataframe_agent\r\nfrom langchain_openai import OpenAI\r\nfrom langchain.agents.agent_types import AgentType\r\nfrom typing_extensions import List, TypedDict\r\nfrom pydantic import BaseModel, Field\r\nfrom IPython.display import Image, display<\/code><\/pre>\n<\/p>\n<\/div>\n<h2 id=\"inserting-and-retrieving-stock-market-data-from-griddb\">Inserting and Retrieving Stock Market Data From GridDB<\/h2>\n<p>\nWe will first import data from Yahoo Finance into a Python application. Next, we will insert this data into a GridDB container and will retrieve it.\n<\/p>\n<h3 id=\"importing-data-from-yahoo-finance\">Importing Data from Yahoo Finance<\/h3>\n<p>\nThe <code>yfinance<\/code> Python library allows you to import data from Yahoo Finance. You need to pass the ticker name, as well as the start and end dates, for the data you want to download.\n<\/p>\n<p>\nThe following script downloads the Apple stock price data for the year 2024.\n<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">import yfinance as yf\r\n<p>\r\nimport pandas as pd\r\n<\/p>\r\n\r\n<p>\r\nticker      = \"AAPL\"\r\nstart_date  = \"2024-01-01\"\r\nend_date    = \"2024-12-31\"\r\n<\/p>\r\n\r\n<p>\r\ndataset = yf.download(ticker, start=start_date, end=end_date, auto_adjust=False)\r\n<\/p>\r\n<h1 id=\"\">\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<\/h1>\r\n<h1 id=\"1-flatten-keep-the-level-that-holds-close-high\">1. FLATTEN: keep the level that holds 'Close', 'High', \u2026<\/h1>\r\n<h1 id=\"\">\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<\/h1>\r\n<p>\r\nif isinstance(dataset.columns, pd.MultiIndex):\r\n<\/p>\r\n<h1 id=\"find-the-level-index-where-close-lives\">find the level index where 'Close' lives<\/h1>\r\n<p>\r\n    for lvl in range(dataset.columns.nlevels):\r\n        level_vals = dataset.columns.get_level_values(lvl)\r\n        if 'Close' in level_vals:\r\n            dataset.columns = level_vals        # keep that level\r\n            break\r\nelse:\r\n<\/p>\r\n<h1 id=\"already-flat-nothing-to-do\">already flat \u2013 nothing to do<\/h1>\r\n<p>\r\n    pass\r\n<\/p>\r\n<h1 id=\"\">\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<\/h1>\r\n<h1 id=\"2-select-ohlcv-move-index-to-date\">2. Select OHLCV, move index to 'Date'<\/h1>\r\n<h1 id=\"\">\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<\/h1>\r\n<p>\r\ndataset = dataset[['Close', 'High', 'Low', 'Open', 'Volume']]\r\ndataset = dataset.reset_index().rename(columns={'index': 'Date'})\r\ndataset['Date'] = pd.to_datetime(dataset['Date'])\r\n<\/p>\r\n<h1 id=\"optional-reorder-columns\">optional: reorder columns<\/h1>\r\n<p>\r\ndataset = dataset[['Date', 'Close', 'High', 'Low', 'Open', 'Volume']]\r\ndataset.columns.name = None   \r\n<\/p>\r\n\r\n<p>\r\ndataset.head()<\/code><\/pre>\n<\/p>\n<\/div>\n<p><strong>Output:<\/strong><\/p>\n<p><a href=\"\/wp-content\/uploads\/2026\/04\/img1-yahoo-finance-dataset-header.png\"><img fetchpriority=\"high\" decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/04\/img1-yahoo-finance-dataset-header.png\" alt=\"\" width=\"596\" height=\"234\" class=\"aligncenter size-full wp-image-55188\" srcset=\"\/wp-content\/uploads\/2026\/04\/img1-yahoo-finance-dataset-header.png 596w, \/wp-content\/uploads\/2026\/04\/img1-yahoo-finance-dataset-header-300x118.png 300w\" sizes=\"(max-width: 596px) 100vw, 596px\" \/><\/a><\/p>\n<p>\nThe above output indicates that the dataset comprises the daily closing, opening, high, low, and volume prices for Apple stock.\n<\/p>\n<p>\nIn the section, you will see how to insert this data into a GridDB cloud container.\n<\/p>\n<h3 id=\"establishing-a-connection-with-griddb-cloud\">Establishing a Connection with GridDB Cloud<\/h3>\n<p>\nAfter you <a href=\"https:\/\/www.global.toshiba\/ww\/products-solutions\/ai-iot\/griddb\/product\/griddb-cloud.html\">create your GridDB cloud account<\/a> and complete <a href=\"https:\/\/griddb.net\/en\/blog\/griddb-cloud-quick-start-guide\/\">configuration settings<\/a>, you can run the following script to see if you can access your database within a Python application.\n<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">username = \"your_user_name\"\r\n<p>\r\npassword = \"your_password\"\r\nbase_url = \"your_griddb_host_url\"\r\n<\/p>\r\n\r\n<p>\r\nurl = f\"{base_url}\/checkConnection\"\r\n<\/p>\r\n\r\n<p>\r\ncredentials = f\"{username}:{password}\"\r\nencoded_credentials = base64.b64encode(credentials.encode()).decode()\r\n<\/p>\r\n\r\n<p>\r\nheaders = {\r\n    'Content-Type': 'application\/json',  # Added this header to specify JSON content\r\n    'Authorization': f'Basic {encoded_credentials}',\r\n    'User-Agent': 'PostmanRuntime\/7.29.0'\r\n}\r\n<\/p>\r\n\r\n<p>\r\nresponse = requests.get(url, headers=headers)\r\n<\/p>\r\n\r\n<p>\r\nprint(response.status_code)\r\nprint(response.text)<\/code><\/pre>\n<\/p>\n<\/div>\n<p><strong>Output<\/strong>:<\/p>\n<p>\n    200\n<\/p>\n<p>\nThe above output indicates that you have successfully connected with your GridDB cloud host.\n<\/p>\n<h3 id=\"creating-a-container-for-inserting-stock-market-data-in-griddb-cloud\">Creating a Container for Inserting Stock Market Data in GridDB Cloud<\/h3>\n<p>\nNext, we will insert the Yahoo Finance into GridDB. To do so, we will add another column, <code>SerialNo<\/code> which contains unique keys for each data row, as GridDB expects a unique key column in the dataset. Next, we will map Pandas dataframe column types to <a href=\"https:\/\/docs.griddb.net\/architecture\/data-model.html\">Gridb data types<\/a>.\n<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">dataset.insert(0, \"SerialNo\", dataset.index + 1)\r\n<p>\r\ndataset['Date'] = pd.to_datetime(dataset['Date']).dt.strftime('%Y-%m-%d')  # \"2024-01-02\"\r\ndataset.columns.name = None   \r\n<\/p>\r\n<h1 id=\"mapping-pandas-dtypes-to-griddb-types\">Mapping pandas dtypes to GridDB types<\/h1>\r\n<p>\r\ntype_mapping = {\r\n    \"int64\":          \"LONG\",\r\n    \"float64\":        \"DOUBLE\",\r\n    \"bool\":           \"BOOL\",\r\n    'datetime64': \"TIMESTAMP\",\r\n    \"object\":         \"STRING\",\r\n    \"category\":       \"STRING\",\r\n}\r\n<\/p>\r\n<h1 id=\"generate-the-columns-part-of-the-payload-dynamically\">Generate the columns part of the payload dynamically<\/h1>\r\n<p>\r\ncolumns = []\r\nfor col, dtype in dataset.dtypes.items():\r\n    griddb_type = type_mapping.get(str(dtype), \"STRING\")  # Default to STRING if unknown\r\n    columns.append({\r\n        \"name\": col,\r\n        \"type\": griddb_type\r\n    })\r\n<\/p>\r\n\r\n<p>\r\ncolumns<\/code><\/pre>\n<\/p>\n<\/div>\n<p><strong>Output:<\/strong><\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">[{'name': 'SerialNo', 'type': 'LONG'},\r\n<p>\r\n {'name': 'Date', 'type': 'STRING'},\r\n {'name': 'Close', 'type': 'DOUBLE'},\r\n {'name': 'High', 'type': 'DOUBLE'},\r\n {'name': 'Low', 'type': 'DOUBLE'},\r\n {'name': 'Open', 'type': 'DOUBLE'},\r\n {'name': 'Volume', 'type': 'LONG'}]<\/code><\/pre>\n<\/p>\n<\/div>\n<p>\nThe above output displays the dataset column names and their corresponding GridDB-compliant data types.\n<\/p>\n<p>\nThe next step is to create a GridDB container. To do so, you need to pass the container name, container type, and a list of column names and their data types.\n<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">url = f\"{base_url}\/containers\"\r\n<p>\r\ncontainer_name = \"stock_db\"\r\n<\/p>\r\n<h1 id=\"create-the-payload-for-the-post-request\">Create the payload for the POST request<\/h1>\r\n<p>\r\npayload = json.dumps({\r\n    \"container_name\": container_name,\r\n    \"container_type\": \"COLLECTION\",\r\n    \"rowkey\": True,  # Assuming the first column as rowkey\r\n    \"columns\": columns\r\n})\r\n<\/p>\r\n<h1 id=\"make-the-post-request-to-create-the-container\">Make the POST request to create the container<\/h1>\r\n<p>\r\nresponse = requests.post(url, headers=headers, data=payload)\r\n<\/p>\r\n<h1 id=\"print-the-response\">Print the response<\/h1>\r\n<p>\r\nprint(f\"Status Code: {response.status_code}\")<\/code><\/pre>\n<\/p>\n<\/div>\n<h3 id=\"adding-stock-data-to-gridbdb-cloud-container\">Adding Stock Data to GridbDB Cloud Container<\/h3>\n<p>\nOnce you have created a container, you must convert the data from your Pandas dataframe into the JSON format and call a <code>put<\/code> request to insert data into GridDB.\n<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">url = f\"{base_url}\/containers\/{container_name}\/rows\"\r\n<h1 id=\"convert-dataset-to-list-of-lists-row-wise-with-proper-formatting\">Convert dataset to list of lists (row-wise) with proper formatting<\/h1>\r\n\r\n<p>\r\ndef format_row(row):\r\n    formatted = []\r\n    for item in row:\r\n        if pd.isna(item):\r\n            formatted.append(None)  # Convert NaN to None\r\n        elif isinstance(item, bool):\r\n            formatted.append(str(item).lower())  # Convert True\/False to true\/false\r\n        elif isinstance(item, (int, float)):\r\n            formatted.append(item)  # Keep integers and floats as they are\r\n        else:\r\n            formatted.append(str(item))  # Convert other types to string\r\n    return formatted\r\n<\/p>\r\n<h1 id=\"prepare-rows-with-correct-formatting\">Prepare rows with correct formatting<\/h1>\r\n<p>\r\nrows = [format_row(row) for row in dataset.values.tolist()]\r\n<\/p>\r\n<h1 id=\"create-payload-as-a-json-string\">Create payload as a JSON string<\/h1>\r\n<p>\r\npayload = json.dumps(rows)\r\n<\/p>\r\n<h1 id=\"make-the-put-request-to-add-the-rows-to-the-container\">Make the PUT request to add the rows to the container<\/h1>\r\n<p>\r\nresponse = requests.put(url, headers=headers, data=payload)\r\n<\/p>\r\n<h1 id=\"print-the-response\">Print the response<\/h1>\r\n<p>\r\nprint(f\"Status Code: {response.status_code}\")\r\nprint(f\"Response Text: {response.text}\")<\/code><\/pre>\n<\/p>\n<\/div>\n<p><strong>Output:<\/strong><\/p>\n<p>\n    Status Code: 200<br \/>\n    Response Text: {&#8220;count&#8221;:251}\n<\/p>\n<p>\nIf you see the above response, you have successfully inserted the data.\n<\/p>\n<h3 id=\"retrieving-data-from-griddb\">Retrieving Data from GridDB<\/h3>\n<p>\nAfter inserting the data, you can perform a variety of operations on the dataset.\n<\/p>\n<p>\nLet&#8217;s see how to import data from a GridDB container into a Pandas dataframe.\n<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">container_name = \"stock_db\"\r\n\r\n<p>\r\nurl = f\"{base_url}\/containers\/{container_name}\/rows\"\r\n<\/p>\r\n<h1 id=\"define-the-payload-for-the-query\">Define the payload for the query<\/h1>\r\n<p>\r\npayload = json.dumps({\r\n    \"offset\": 0,           # Start from the first row\r\n    \"limit\": 10000,         # Limit the number of rows returned\r\n    \"condition\": \"\",       # No filtering condition (you can customize it)\r\n    \"sort\": \"\"             # No sorting (you can customize it)\r\n})\r\n<\/p>\r\n<h1 id=\"make-the-post-request-to-read-data-from-the-container\">Make the POST request to read data from the container<\/h1>\r\n<p>\r\nresponse = requests.post(url, headers=headers, data=payload)\r\n<\/p>\r\n<h1 id=\"check-response-status-and-print-output\">Check response status and print output<\/h1>\r\n<p>\r\nprint(f\"Status Code: {response.status_code}\")\r\nif response.status_code == 200:\r\n    try:\r\n        data = response.json()\r\n        print(\"Data retrieved successfully!\")\r\n<\/p>\r\n<h1 id=\"convert-the-response-to-a-dataframe\">Convert the response to a DataFrame<\/h1>\r\n<p>\r\n        rows = data.get(\"rows\", [])\r\n        stock_dataset = pd.DataFrame(rows, columns=[col for col in dataset.columns])\r\n<\/p>\r\n\r\n<p>\r\n    except json.JSONDecodeError:\r\n        print(\"Error: Failed to decode JSON response.\")\r\nelse:\r\n    print(f\"Error: Failed to query data from the container. Response: {response.text}\")\r\n<\/p>\r\n\r\n<p>\r\nprint(stock_dataset.shape)\r\nstock_dataset.head()<\/code><\/pre>\n<\/p>\n<\/div>\n<p><strong>Output:<\/strong><\/p>\n<p><a href=\"\/wp-content\/uploads\/2026\/04\/img2-data-retrieved-from-griddb.png\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/04\/img2-data-retrieved-from-griddb.png\" alt=\"\" width=\"680\" height=\"265\" class=\"aligncenter size-full wp-image-55189\" srcset=\"\/wp-content\/uploads\/2026\/04\/img2-data-retrieved-from-griddb.png 680w, \/wp-content\/uploads\/2026\/04\/img2-data-retrieved-from-griddb-300x117.png 300w, \/wp-content\/uploads\/2026\/04\/img2-data-retrieved-from-griddb-600x234.png 600w\" sizes=\"(max-width: 680px) 100vw, 680px\" \/><\/a><\/p>\n<p>\nThe above output shows the data retrieved from the GridDB container. We store the data in a Pandas dataframe. You can store the data in any other format if you want.\n<\/p>\n<p>\nOnce you have the data, you can create a variety of AI and data science applications.\n<\/p>\n<h2 id=\"creating-a-stock-market-chatbot-using-griddb-data\">Creating a Stock Market Chatbot Using GridDB Data<\/h2>\n<p>\nIn this next section, you will see how to create a simple chatbot in <a href=\"https:\/\/www.langchain.com\/langgraph\">LangGraph framework<\/a>, which calls the <a href=\"https:\/\/openai.com\/index\/openai-api\/\">OpenAI API<\/a> to answer your questions about the Apple stock price you just retrieved from the GridDB.\n<\/p>\n<h3 id=\"creating-a-graph-in-langgraph\">Creating a Graph in LangGraph<\/h3>\n<p>\nTo create a Graph in LangGraph, you need to define its state. A graph&#8217;s state contains attributes that are shared between multiple graph nodes. Since we only need to store questions and answers, we create the following graph state.\n<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">class State(TypedDict):\r\n<p>\r\n    question: str\r\n    answer: str\r\n<\/p>\r\n<\/code><\/pre>\n<\/div>\n<p>\nWe will use the <a href=\"https:\/\/python.langchain.com\/api_reference\/experimental\/agents\/langchain_experimental.agents.agent_toolkits.pandas.base.create_pandas_dataframe_agent.html\"><code>create_pandas_dataframe_agent<\/code><\/a> from LangChain to answer our questions since we retrieved data from Gridb into a Pandas dataframe.\n<\/p>\n<p>\nWe will create the agent object and will call it inside the <code>run_llm()<\/code> function we define. We will use this function in our LangGraph node.\n<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">api_key = \"YOUR_OPENAI_API_KEY\"\r\n<p>\r\nllm = ChatOpenAI(model = 'gpt-4o',\r\n                api_key = api_key)\r\n<\/p>\r\n\r\n<p>\r\nagent = create_pandas_dataframe_agent(llm,\r\n                                      stock_dataset,\r\n                                      verbose=True,\r\n                                      agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION,\r\n                                      allow_dangerous_code=True)\r\n<\/p>\r\n\r\n<p>\r\ndef run_llm(state: State):\r\n    question = state['question']\r\n    response = agent.invoke(question)\r\n    return {'answer': response['output']}<\/code><\/pre>\n<\/p>\n<\/div>\n<p>\nFinally, we define the graph for our chatbot. The graph consists of only one node, <code>ask_question<\/code>, which calls the <code>run_llm()<\/code> function. Inside the function, we call the <code>create_pandas_dataframe_agent()<\/code>, which answers questions about the dataset.\n<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">graph_builder=StateGraph(State)\r\n<p>\r\ngraph_builder.add_node(\"ask_question\", run_llm)\r\ngraph_builder.add_edge(START,\"ask_question\")\r\ngraph_builder.add_edge(\"ask_question\",END)\r\ngraph = graph_builder.compile()\r\n<\/p>\r\n\r\n<p>\r\ndisplay(Image(graph.get_graph().draw_mermaid_png()))<\/code><\/pre>\n<\/p>\n<\/div>\n<p><strong>Output:<\/strong><br \/>\n<a href=\"\/wp-content\/uploads\/2026\/04\/img3-chatbot-graph.png\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/04\/img3-chatbot-graph.png\" alt=\"\" width=\"140\" height=\"234\" class=\"aligncenter size-full wp-image-55190\" \/><\/a><\/p>\n<p>\nThe above output shows the flow of our graph.\n<\/p>\n<h3 id=\"asking-questions\">Asking Questions<\/h3>\n<p>\nLet&#8217;s test our chatbot by asking some questions. We will first ask our chatbot about the month that had the highest average opening price\u2014also, the month where people made the most profit in day trading.\n<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">question = [HumanMessage(content=\"Which month had the highest average opening stock price? And what is the month where people made most profit in day trading?\")]\r\n<p>\r\nresult = graph.invoke({\"question\": question})\r\nprint(result['answer'])<\/code><\/pre>\n<\/p>\n<\/div>\n<p><strong>Output:<\/strong><\/p>\n<p><a href=\"\/wp-content\/uploads\/2026\/04\/img4-chatbot-response1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/04\/img4-chatbot-response1.png\" alt=\"\" width=\"1796\" height=\"646\" class=\"aligncenter size-full wp-image-55191\" srcset=\"\/wp-content\/uploads\/2026\/04\/img4-chatbot-response1.png 1796w, \/wp-content\/uploads\/2026\/04\/img4-chatbot-response1-300x108.png 300w, \/wp-content\/uploads\/2026\/04\/img4-chatbot-response1-1024x368.png 1024w, \/wp-content\/uploads\/2026\/04\/img4-chatbot-response1-768x276.png 768w, \/wp-content\/uploads\/2026\/04\/img4-chatbot-response1-1536x552.png 1536w, \/wp-content\/uploads\/2026\/04\/img4-chatbot-response1-600x216.png 600w\" sizes=\"(max-width: 1796px) 100vw, 1796px\" \/><\/a><\/p>\n<p>\nThe output above shows the chatbot&#8217;s response. That is correct; I verified it manually using a Python script.\n<\/p>\n<p>\nLet&#8217;s ask it to be more creative and see if it finds any interesting patterns in the dataset.\n<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">question = [HumanMessage(content=\"Do you find any interesting patterns in the dataset?\")]\r\n<p>\r\nresult = graph.invoke({\"question\": question})\r\nprint(result['answer'])<\/code><\/pre>\n<\/p>\n<\/div>\n<p><strong>Output:<\/strong><\/p>\n<p><a href=\"\/wp-content\/uploads\/2026\/04\/img5-chatbot-response2a.png\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/04\/img5-chatbot-response2a.png\" alt=\"\" width=\"1582\" height=\"761\" class=\"aligncenter size-full wp-image-55192\" srcset=\"\/wp-content\/uploads\/2026\/04\/img5-chatbot-response2a.png 1582w, \/wp-content\/uploads\/2026\/04\/img5-chatbot-response2a-300x144.png 300w, \/wp-content\/uploads\/2026\/04\/img5-chatbot-response2a-1024x493.png 1024w, \/wp-content\/uploads\/2026\/04\/img5-chatbot-response2a-768x369.png 768w, \/wp-content\/uploads\/2026\/04\/img5-chatbot-response2a-1536x739.png 1536w, \/wp-content\/uploads\/2026\/04\/img5-chatbot-response2a-600x289.png 600w\" sizes=\"(max-width: 1582px) 100vw, 1582px\" \/><\/a><\/p>\n<p>\nThe above output shows the first part of the reply. You can see that the chatbot is intelligent enough to draw a plot for the closing prices to identify interesting patterns.\n<\/p>\n<p>\nThe following output shows some interesting observations from the dataset.\n<\/p>\n<p><strong>Output:<\/strong><\/p>\n<p><a href=\"\/wp-content\/uploads\/2026\/04\/img5-chatbot-response2b.png\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/04\/img5-chatbot-response2b.png\" alt=\"\" width=\"1821\" height=\"791\" class=\"aligncenter size-full wp-image-55193\" srcset=\"\/wp-content\/uploads\/2026\/04\/img5-chatbot-response2b.png 1821w, \/wp-content\/uploads\/2026\/04\/img5-chatbot-response2b-300x130.png 300w, \/wp-content\/uploads\/2026\/04\/img5-chatbot-response2b-1024x445.png 1024w, \/wp-content\/uploads\/2026\/04\/img5-chatbot-response2b-768x334.png 768w, \/wp-content\/uploads\/2026\/04\/img5-chatbot-response2b-1536x667.png 1536w, \/wp-content\/uploads\/2026\/04\/img5-chatbot-response2b-600x261.png 600w\" sizes=\"(max-width: 1821px) 100vw, 1821px\" \/><\/a><\/p>\n<p>\nThe article demonstrates how to create an OpenAI API-based chatbot that answers questions related to data retrieved from GridDB.\n<\/p>\n<p>\nIf you have any questions or need help with GridDB cloud, you can leave your query on Stack Overflow using the <code>griddb<\/code> tag. Our team will be happy to answer it.\n<\/p>\n<p>\nFor the complete code of this article, visit my <a href=\"https:\/\/github.com\/usmanmalik57\/GridDB-Blogs\/tree\/main\/Stock%20Market%20Chatbot%20Application%20Using%20LangGraph%20and%20GridDB\">GridDB Blogs GitHub repository<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>With the advent of Large Language Models (LLMs), chatbot applications have become increasingly common, enabling more natural and intelligent interactions with data. In this article, you will see how to build a stock market chatbot using LangGraph, OpenAI API, and GridDB cloud. We will retrieve historical Apple stock price data from Yahoo Finance using the [&hellip;]<\/p>\n","protected":false},"author":41,"featured_media":55194,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[121],"tags":[],"class_list":["post-55185","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Stock Market Chatbot Application Using LangGraph and GridDB | GridDB: Open Source Time Series Database for IoT<\/title>\n<meta name=\"description\" content=\"With the advent of Large Language Models (LLMs), chatbot applications have become increasingly common, enabling more natural and intelligent interactions\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/griddb.net\/en\/blog\/stock-market-chatbot-application-using-langgraph-and-griddb\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Stock Market Chatbot Application Using LangGraph and GridDB | GridDB: Open Source Time Series Database for IoT\" \/>\n<meta property=\"og:description\" content=\"With the advent of Large Language Models (LLMs), chatbot applications have become increasingly common, enabling more natural and intelligent interactions\" \/>\n<meta property=\"og:url\" content=\"https:\/\/griddb.net\/en\/blog\/stock-market-chatbot-application-using-langgraph-and-griddb\/\" \/>\n<meta property=\"og:site_name\" content=\"GridDB: Open Source Time Series Database for IoT\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/griddbcommunity\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-10T20:19:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/wp-content\/uploads\/2019\/04\/503.gif\" \/>\n\t<meta property=\"og:image:width\" content=\"450\" \/>\n\t<meta property=\"og:image:height\" content=\"400\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/gif\" \/>\n<meta name=\"author\" content=\"griddb-admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@GridDBCommunity\" \/>\n<meta name=\"twitter:site\" content=\"@GridDBCommunity\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"griddb-admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/griddb.net\/en\/blog\/stock-market-chatbot-application-using-langgraph-and-griddb\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/griddb.net\/en\/blog\/stock-market-chatbot-application-using-langgraph-and-griddb\/\"},\"author\":{\"name\":\"griddb-admin\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/4fe914ca9576878e82f5e8dd3ba52233\"},\"headline\":\"Stock Market Chatbot Application Using LangGraph and GridDB\",\"datePublished\":\"2026-04-10T20:19:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/griddb.net\/en\/blog\/stock-market-chatbot-application-using-langgraph-and-griddb\/\"},\"wordCount\":897,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/griddb.net\/en\/blog\/stock-market-chatbot-application-using-langgraph-and-griddb\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2026\/04\/stock-market-chatbot-langgraph-griddb-featured.svg\",\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/griddb.net\/en\/blog\/stock-market-chatbot-application-using-langgraph-and-griddb\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/griddb.net\/en\/blog\/stock-market-chatbot-application-using-langgraph-and-griddb\/\",\"url\":\"https:\/\/griddb.net\/en\/blog\/stock-market-chatbot-application-using-langgraph-and-griddb\/\",\"name\":\"Stock Market Chatbot Application Using LangGraph and GridDB | GridDB: Open Source Time Series Database for IoT\",\"isPartOf\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/griddb.net\/en\/blog\/stock-market-chatbot-application-using-langgraph-and-griddb\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/griddb.net\/en\/blog\/stock-market-chatbot-application-using-langgraph-and-griddb\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2026\/04\/stock-market-chatbot-langgraph-griddb-featured.svg\",\"datePublished\":\"2026-04-10T20:19:55+00:00\",\"description\":\"With the advent of Large Language Models (LLMs), chatbot applications have become increasingly common, enabling more natural and intelligent interactions\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/griddb.net\/en\/blog\/stock-market-chatbot-application-using-langgraph-and-griddb\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/griddb.net\/en\/blog\/stock-market-chatbot-application-using-langgraph-and-griddb\/#primaryimage\",\"url\":\"\/wp-content\/uploads\/2026\/04\/stock-market-chatbot-langgraph-griddb-featured.svg\",\"contentUrl\":\"\/wp-content\/uploads\/2026\/04\/stock-market-chatbot-langgraph-griddb-featured.svg\",\"width\":1200,\"height\":630},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#website\",\"url\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/\",\"name\":\"GridDB: Open Source Time Series Database for IoT\",\"description\":\"GridDB is an open source time-series database with the performance of NoSQL and convenience of SQL\",\"publisher\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization\",\"name\":\"Fixstars\",\"url\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png\",\"contentUrl\":\"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png\",\"width\":200,\"height\":83,\"caption\":\"Fixstars\"},\"image\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/griddbcommunity\/\",\"https:\/\/x.com\/GridDBCommunity\",\"https:\/\/www.linkedin.com\/company\/griddb-by-toshiba\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/4fe914ca9576878e82f5e8dd3ba52233\",\"name\":\"griddb-admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5bceca1cafc06886a7ba873e2f0a28011a1176c4dea59709f735b63ae30d0342?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5bceca1cafc06886a7ba873e2f0a28011a1176c4dea59709f735b63ae30d0342?s=96&d=mm&r=g\",\"caption\":\"griddb-admin\"},\"url\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/author\/griddb-admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Stock Market Chatbot Application Using LangGraph and GridDB | GridDB: Open Source Time Series Database for IoT","description":"With the advent of Large Language Models (LLMs), chatbot applications have become increasingly common, enabling more natural and intelligent interactions","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/griddb.net\/en\/blog\/stock-market-chatbot-application-using-langgraph-and-griddb\/","og_locale":"en_US","og_type":"article","og_title":"Stock Market Chatbot Application Using LangGraph and GridDB | GridDB: Open Source Time Series Database for IoT","og_description":"With the advent of Large Language Models (LLMs), chatbot applications have become increasingly common, enabling more natural and intelligent interactions","og_url":"https:\/\/griddb.net\/en\/blog\/stock-market-chatbot-application-using-langgraph-and-griddb\/","og_site_name":"GridDB: Open Source Time Series Database for IoT","article_publisher":"https:\/\/www.facebook.com\/griddbcommunity\/","article_published_time":"2026-04-10T20:19:55+00:00","og_image":[{"width":450,"height":400,"url":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/wp-content\/uploads\/2019\/04\/503.gif","type":"image\/gif"}],"author":"griddb-admin","twitter_card":"summary_large_image","twitter_creator":"@GridDBCommunity","twitter_site":"@GridDBCommunity","twitter_misc":{"Written by":"griddb-admin","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/griddb.net\/en\/blog\/stock-market-chatbot-application-using-langgraph-and-griddb\/#article","isPartOf":{"@id":"https:\/\/griddb.net\/en\/blog\/stock-market-chatbot-application-using-langgraph-and-griddb\/"},"author":{"name":"griddb-admin","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/4fe914ca9576878e82f5e8dd3ba52233"},"headline":"Stock Market Chatbot Application Using LangGraph and GridDB","datePublished":"2026-04-10T20:19:55+00:00","mainEntityOfPage":{"@id":"https:\/\/griddb.net\/en\/blog\/stock-market-chatbot-application-using-langgraph-and-griddb\/"},"wordCount":897,"commentCount":0,"publisher":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization"},"image":{"@id":"https:\/\/griddb.net\/en\/blog\/stock-market-chatbot-application-using-langgraph-and-griddb\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2026\/04\/stock-market-chatbot-langgraph-griddb-featured.svg","articleSection":["Blog"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/griddb.net\/en\/blog\/stock-market-chatbot-application-using-langgraph-and-griddb\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/griddb.net\/en\/blog\/stock-market-chatbot-application-using-langgraph-and-griddb\/","url":"https:\/\/griddb.net\/en\/blog\/stock-market-chatbot-application-using-langgraph-and-griddb\/","name":"Stock Market Chatbot Application Using LangGraph and GridDB | GridDB: Open Source Time Series Database for IoT","isPartOf":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/griddb.net\/en\/blog\/stock-market-chatbot-application-using-langgraph-and-griddb\/#primaryimage"},"image":{"@id":"https:\/\/griddb.net\/en\/blog\/stock-market-chatbot-application-using-langgraph-and-griddb\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2026\/04\/stock-market-chatbot-langgraph-griddb-featured.svg","datePublished":"2026-04-10T20:19:55+00:00","description":"With the advent of Large Language Models (LLMs), chatbot applications have become increasingly common, enabling more natural and intelligent interactions","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/griddb.net\/en\/blog\/stock-market-chatbot-application-using-langgraph-and-griddb\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/griddb.net\/en\/blog\/stock-market-chatbot-application-using-langgraph-and-griddb\/#primaryimage","url":"\/wp-content\/uploads\/2026\/04\/stock-market-chatbot-langgraph-griddb-featured.svg","contentUrl":"\/wp-content\/uploads\/2026\/04\/stock-market-chatbot-langgraph-griddb-featured.svg","width":1200,"height":630},{"@type":"WebSite","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#website","url":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/","name":"GridDB: Open Source Time Series Database for IoT","description":"GridDB is an open source time-series database with the performance of NoSQL and convenience of SQL","publisher":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization","name":"Fixstars","url":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/logo\/image\/","url":"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png","contentUrl":"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png","width":200,"height":83,"caption":"Fixstars"},"image":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/griddbcommunity\/","https:\/\/x.com\/GridDBCommunity","https:\/\/www.linkedin.com\/company\/griddb-by-toshiba"]},{"@type":"Person","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/4fe914ca9576878e82f5e8dd3ba52233","name":"griddb-admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/5bceca1cafc06886a7ba873e2f0a28011a1176c4dea59709f735b63ae30d0342?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5bceca1cafc06886a7ba873e2f0a28011a1176c4dea59709f735b63ae30d0342?s=96&d=mm&r=g","caption":"griddb-admin"},"url":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/author\/griddb-admin\/"}]}},"_links":{"self":[{"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/wp-json\/wp\/v2\/posts\/55185","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/wp-json\/wp\/v2\/comments?post=55185"}],"version-history":[{"count":3,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/wp-json\/wp\/v2\/posts\/55185\/revisions"}],"predecessor-version":[{"id":55195,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/wp-json\/wp\/v2\/posts\/55185\/revisions\/55195"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/wp-json\/wp\/v2\/media\/55194"}],"wp:attachment":[{"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/wp-json\/wp\/v2\/media?parent=55185"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/wp-json\/wp\/v2\/categories?post=55185"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/wp-json\/wp\/v2\/tags?post=55185"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}