Spaces:
Sleeping
Sleeping
# Chains | |
from langchain_core.pydantic_v1 import BaseModel, Field | |
# To serve the app | |
from fastapi import FastAPI | |
from langchain_core.messages import BaseMessage | |
from langserve import add_routes, CustomUserType | |
import dotenv | |
dotenv.load_dotenv() | |
from ingredients import script_db, woo_db, full_chain, compound_chain, agent_executor | |
## Type specifications (with unusual class-scope fields) | |
class StrInput(BaseModel): | |
input: str | |
class Input(BaseModel): | |
input: str | |
chat_history: list[BaseMessage] = Field( | |
..., | |
extra = dict(widget = dict(type = 'chat', input = 'location')), | |
) | |
class Output(BaseModel): | |
output: str | |
## App definition | |
# NOTE: The chat playground type has a web page issue (flashes and becomes white, hence non-interactable; this was supposedly solved in an issue late last year) | |
app = FastAPI( | |
title = 'Star Wars Expert', | |
version = '1.0', | |
description = 'A Star Wars expert chatbot', | |
) | |
# Basic retriever versions | |
# add_routes(app, script_db.as_retriever()) | |
# add_routes(app, woo_db.as_retriever()) | |
# History-aware retriever version | |
# add_routes(app, full_chain.with_types(input_type = StrInput, output_type = Output), playground_type = 'default') | |
# Agent version | |
# add_routes(app, agent_executor, playground_type = 'chat') | |
# add_routes(app, agent_executor.with_types(input_type = StrInput, output_type = Output)) | |
# Non-agent chain-logic version | |
add_routes(app, compound_chain.with_types(input_type = StrInput)) | |
# add_routes(app, compound_chain.with_types(input_type = Input), playground_type = 'chat') | |
if __name__ == '__main__': | |
import uvicorn | |
uvicorn.run(app, host = 'localhost', port = 8000) | |