IntegrationsLangChain

LangChain

LangChain tools for Hotdata — give your chains and agents SQL execution and managed database access.

Install

pip install hotdata-langchain

Authentication

Set HOTDATA_API_KEY in your environment. Optionally set HOTDATA_WORKSPACE to pin a specific workspace.

Quickstart

from hotdata_framework import from_env
from hotdata_langchain import make_hotdata_tools
from langchain.agents import create_agent

client = from_env()
tools = make_hotdata_tools(client)

agent = create_agent(
    model="openai:gpt-4o",
    tools=tools,
    system_prompt="You are a data analyst.",
)
result = agent.invoke(
    {"messages": [{"role": "user", "content": "How many orders are in the database?"}]}
)
print(result["messages"][-1].content)

Tools

make_hotdata_tools returns four StructuredTool objects ready to pass to any LangChain agent:

ToolDescription
hotdata_execute_sqlRun SQL and return JSON rows
hotdata_list_managed_databasesList Hotdata-managed databases
hotdata_create_managed_databaseCreate a database and declare tables
hotdata_load_managed_tableLoad a local parquet file into a table
tools = make_hotdata_tools(
    client,
    max_rows=50,   # rows returned to the agent per query (default 100)
    database=None, # pin to a specific database id (optional)
)

Run SQL directly

from hotdata_langchain import execute_sql_json, result_rows_for_llm

# Returns a JSON string — useful for custom tool wrappers
json_str = execute_sql_json(client, "SELECT * FROM orders LIMIT 5")

# Returns list[dict] from a QueryResult, trimmed to max_rows
result = client.execute_sql("SELECT * FROM orders LIMIT 100")
rows = result_rows_for_llm(result, max_rows=20)

Managed databases

from hotdata_langchain.databases import (
    create_managed_database,
    list_managed_databases_json,
    load_managed_table,
)

# Create a database and declare tables
db = create_managed_database(
    client,
    name="sales",
    schema="public",
    tables=["orders", "customers"],
)

# Load a local parquet file into a declared table
loaded = load_managed_table(
    client,
    database=db.id,
    table="orders",
    file="orders.parquet",
)
print(f"Loaded {loaded.row_count} rows → {loaded.full_name}")

See also