diff --git a/src/chain/chat-with-x.ts b/src/chain/chat-with-x.ts
new file mode 100644
index 0000000..7c378a2
--- /dev/null
+++ b/src/chain/chat-with-x.ts
@@ -0,0 +1,154 @@
+import { BaseLanguageModel } from "@langchain/core/language_models/base"
+import { Document } from "@langchain/core/documents"
+import {
+ ChatPromptTemplate,
+ MessagesPlaceholder,
+ PromptTemplate
+} from "@langchain/core/prompts"
+import { AIMessage, BaseMessage, HumanMessage } from "@langchain/core/messages"
+import { StringOutputParser } from "@langchain/core/output_parsers"
+import {
+ Runnable,
+ RunnableBranch,
+ RunnableLambda,
+ RunnableMap,
+ RunnableSequence
+} from "@langchain/core/runnables"
+type RetrievalChainInput = {
+ chat_history: string
+ question: string
+}
+
+const formatChatHistoryAsString = (history: BaseMessage[]) => {
+ return history
+ .map((message) => `${message._getType()}: ${message.content}`)
+ .join("\n")
+}
+
+export const formatDocs = (docs: Document[]) => {
+ return docs
+ .map((doc, i) => `