@ -276,6 +276,52 @@
"# langchain.llm_cache = SQLAlchemyCache(engine)"
]
},
{
"cell_type": "markdown",
"source": [
"### Custom SQLAlchemy Schemas"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [
"# You can define your own declarative SQLAlchemyCache child class to customize the schema used for caching. For example, to support high-speed fulltext prompt indexing with Postgres, use:\n",
"\n",
"from sqlalchemy import Column, Integer, String, Computed, Index, Sequence\n",
"from sqlalchemy import create_engine\n",
"from sqlalchemy.ext.declarative import declarative_base\n",
"from sqlalchemy_utils import TSVectorType\n",
"from langchain.cache import SQLAlchemyCache\n",
"\n",
"Base = declarative_base()\n",
"\n",
"\n",
"class FulltextLLMCache(Base): # type: ignore\n",
" \"\"\"Postgres table for fulltext-indexed LLM Cache\"\"\"\n",
"\n",
" __tablename__ = \"llm_cache_fulltext\"\n",
" id = Column(Integer, Sequence('cache_id'), primary_key=True)\n",
" prompt = Column(String, nullable=False)\n",
" llm = Column(String, nullable=False)\n",
" idx = Column(Integer)\n",
" response = Column(String)\n",
" prompt_tsv = Column(TSVectorType(), Computed(\"to_tsvector('english', llm || ' ' || prompt)\", persisted=True))\n",
" __table_args__ = (\n",
" Index(\"idx_fulltext_prompt_tsv\", prompt_tsv, postgresql_using=\"gin\"),\n",
" )\n",
"\n",
"engine = create_engine(\"postgresql://postgres:postgres@localhost:5432/postgres\")\n",
"langchain.llm_cache = SQLAlchemyCache(engine, FulltextLLMCache)"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "markdown",
"id": "0c69d84d",