631 lines
85 KiB
Plaintext
631 lines
85 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 18,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from unstructured.partition.pdf import partition_pdf\n",
|
|
"\n",
|
|
"output_path = \"/home/sepehr/dev/rag/document/\"\n",
|
|
"file_path = \"/home/sepehr/dev/rag/document/NIPS-2017-attention-is-all-you-need-Paper.pdf\"\n",
|
|
"\n",
|
|
"# Reference: https://docs.unstructured.io/open-source/core-functionality/chunking\n",
|
|
"chunks = partition_pdf(\n",
|
|
" filename=file_path,\n",
|
|
" infer_table_structure=True, # extract tables\n",
|
|
" strategy=\"hi_res\", # mandatory to infer tables\n",
|
|
"\n",
|
|
" extract_image_block_types=[\"Image\"], # Add 'Table' to list to extract image of tables\n",
|
|
" # image_output_dir_path=output_path, # if None, images and tables will saved in base64\n",
|
|
"\n",
|
|
" extract_image_block_to_payload=True, # if true, will extract base64 for API usage\n",
|
|
"\n",
|
|
" chunking_strategy=\"by_title\", # or 'basic'\n",
|
|
" max_characters=10000, # defaults to 500\n",
|
|
" combine_text_under_n_chars=2000, # defaults to 0\n",
|
|
" new_after_n_chars=6000,\n",
|
|
"\n",
|
|
" # extract_images_in_pdf=True, # deprecated\n",
|
|
")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 19,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"{\"<class 'unstructured.documents.elements.CompositeElement'>\"}"
|
|
]
|
|
},
|
|
"execution_count": 19,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"set([str(type(el)) for el in chunks])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 21,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"{'type': 'Image',\n",
|
|
" 'element_id': '7035e471-b3af-4b84-9cf3-23a1a493dbe2',\n",
|
|
" 'text': '',\n",
|
|
" 'metadata': {'coordinates': {'points': ((486.0, 261.1805555555558),\n",
|
|
" (486.0, 614.7805555555556),\n",
|
|
" (664.0, 614.7805555555556),\n",
|
|
" (664.0, 261.1805555555558)),\n",
|
|
" 'system': 'PixelSpace',\n",
|
|
" 'layout_width': 1700,\n",
|
|
" 'layout_height': 2200},\n",
|
|
" 'last_modified': '2025-03-01T19:37:35',\n",
|
|
" 'filetype': 'PPM',\n",
|
|
" 'languages': ['eng'],\n",
|
|
" 'page_number': 4,\n",
|
|
" 'image_base64': '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',\n",
|
|
" 'image_mime_type': 'image/jpeg'}}"
|
|
]
|
|
},
|
|
"execution_count": 21,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# This is what an extracted image looks like.\n",
|
|
"# It contains the base64 representation only because we set the param extract_image_block_to_payload=True\n",
|
|
"\n",
|
|
"elements = chunks[3].metadata.orig_elements\n",
|
|
"chunk_images = [el for el in elements if 'Image' in str(type(el))]\n",
|
|
"chunk_images[0].to_dict()\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 22,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"{'type': 'Image',\n",
|
|
" 'element_id': '7035e471-b3af-4b84-9cf3-23a1a493dbe2',\n",
|
|
" 'text': '',\n",
|
|
" 'metadata': {'coordinates': {'points': ((486.0, 261.1805555555558),\n",
|
|
" (486.0, 614.7805555555556),\n",
|
|
" (664.0, 614.7805555555556),\n",
|
|
" (664.0, 261.1805555555558)),\n",
|
|
" 'system': 'PixelSpace',\n",
|
|
" 'layout_width': 1700,\n",
|
|
" 'layout_height': 2200},\n",
|
|
" 'last_modified': '2025-03-01T19:37:35',\n",
|
|
" 'filetype': 'PPM',\n",
|
|
" 'languages': ['eng'],\n",
|
|
" 'page_number': 4,\n",
|
|
" 'image_base64': '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',\n",
|
|
" 'image_mime_type': 'image/jpeg'}}"
|
|
]
|
|
},
|
|
"execution_count": 22,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"chunk_images = [el for el in elements if 'Image' in str(type(el))]\n",
|
|
"chunk_images[0].to_dict()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 23,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# separate tables from texts\n",
|
|
"tables = []\n",
|
|
"texts = []\n",
|
|
"\n",
|
|
"for chunk in chunks:\n",
|
|
" if \"Table\" in str(type(chunk)):\n",
|
|
" tables.append(chunk)\n",
|
|
"\n",
|
|
" if \"CompositeElement\" in str(type((chunk))):\n",
|
|
" texts.append(chunk)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 24,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Get the images from the CompositeElement objects\n",
|
|
"def get_images_base64(chunks):\n",
|
|
" images_b64 = []\n",
|
|
" for chunk in chunks:\n",
|
|
" if \"CompositeElement\" in str(type(chunk)):\n",
|
|
" chunk_els = chunk.metadata.orig_elements\n",
|
|
" for el in chunk_els:\n",
|
|
" if \"Image\" in str(type(el)):\n",
|
|
" images_b64.append(el.metadata.image_base64)\n",
|
|
" return images_b64\n",
|
|
"\n",
|
|
"images = get_images_base64(chunks)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 15,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/jpeg": "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",
|
|
"text/plain": [
|
|
"<IPython.core.display.Image object>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"import base64\n",
|
|
"from IPython.display import Image, display\n",
|
|
"\n",
|
|
"def display_base64_image(base64_code):\n",
|
|
" # Decode the base64 string to binary\n",
|
|
" image_data = base64.b64decode(base64_code)\n",
|
|
" # Display the image\n",
|
|
" display(Image(data=image_data))\n",
|
|
"\n",
|
|
"display_base64_image(images[2])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 25,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from langchain_core.prompts import ChatPromptTemplate\n",
|
|
"from langchain_ollama.llms import OllamaLLM\n",
|
|
"from langchain_core.output_parsers import StrOutputParser\n",
|
|
"# Prompt\n",
|
|
"prompt_text = \"\"\"\n",
|
|
"You are an assistant tasked with summarizing tables and text.\n",
|
|
"Give a concise summary of the table or text.\n",
|
|
"\n",
|
|
"Respond only with the summary, no additionnal comment.\n",
|
|
"Do not start your message by saying \"Here is a summary\" or anything like that.\n",
|
|
"Just give the summary as it is.\n",
|
|
"\n",
|
|
"Table or text chunk: {element}\n",
|
|
"\n",
|
|
"\"\"\"\n",
|
|
"prompt = ChatPromptTemplate.from_template(prompt_text)\n",
|
|
"\n",
|
|
"model = OllamaLLM(base_url=\"172.20.48.1:11434\",\n",
|
|
" model=\"llama3.1\")\n",
|
|
"summarize_chain = {\"element\": lambda x: x} | prompt | model | StrOutputParser()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 26,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"text_summaries = summarize_chain.batch(texts, {\"max_concurrency\": 3})"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 27,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"['A new model architecture, called the Transformer, is proposed which uses attention mechanisms to draw global dependencies between input and output sequences, eliminating the need for recurrence and convolutions. Experiments show that this model achieves superior results in machine translation tasks while being more parallelizable and requiring less training time.',\n",
|
|
" 'The authors discuss background on sequence-to-sequence models, highlighting the limitations of existing models like ConvS2S and ByteNet. They introduce self-attention as a solution to reduce computation costs and improve dependencies between distant positions. The Transformer model is presented as the first transduction model relying entirely on self-attention, which will be described in the following sections.',\n",
|
|
" 'The Transformer model consists of 6 identical layers in both the encoder and decoder stacks. Each layer has two sub-layers: multi-head self-attention mechanism and position-wise fully connected feed-forward network, with residual connections and layer normalization. The decoder also includes a third sub-layer for multi-head attention over the encoder output.',\n",
|
|
" 'The text describes two types of attention mechanisms: Scaled Dot-Product Attention and Multi-Head Attention. The former computes dot products between queries and keys, divides by the key dimension, applies softmax, and uses these weights on values. To counteract extremely small gradients, the dot products are scaled by 1/√dk. Multi-Head Attention projects queries, keys, and values multiple times with different linear projections before applying attention in parallel to each projected version, resulting in concatenated output values.',\n",
|
|
" 'The Transformer uses multi-head attention in three ways: encoder-decoder attention, self-attention in encoder layers, and self-attention in decoder layers. The model also includes position-wise feed-forward networks with two linear transformations and a ReLU activation. Learned embeddings are used to convert input and output tokens to vectors.',\n",
|
|
" 'The model uses sine and cosine functions to create positional encodings that help the model utilize sequence order without using recurrence or convolution. This approach allows the model to easily learn to attend by relative positions and can be used to extrapolate to longer sequences than those encountered during training. \\n\\nSelf-attention layers are faster than recurrent layers when sequence length is smaller than representation dimensionality, but can be restricted to improve performance for long sequences. They also have shorter path lengths between input and output positions compared to convolutional layers.',\n",
|
|
" 'The model was trained on large datasets with byte-pair encoding for vocabulary management, batched by sequence length. Training used Adam optimizer with varying learning rate, residual dropout (10% for base model), and label smoothing (0.1). The big model required 3.5 days to train while the base model took 12 hours.',\n",
|
|
" 'The Transformer model outperforms previous models on two translation tasks: English-to-German with a new state-of-the-art BLEU score of 28.4, and English-to-French with a score of 41.0. The big model achieves these scores at a lower training cost than previous models.',\n",
|
|
" \"This appears to be a long list of academic references related to natural language processing (NLP) and artificial intelligence. Here's a brief summary:\\n\\n**Context:** The references seem to be from various papers published in top conferences like ICLR, NIPS, ACL, EMNLP, and others, focusing on NLP tasks such as machine translation, text summarization, question answering, sentiment analysis, and language modeling.\\n\\n**Key areas:**\\n\\n1. **Attention mechanisms**: Several papers explore attention-based models for NLP tasks, including sequence-to-sequence learning (Sutskever et al., 2014), multi-task learning with attention (Luong et al., 2015), and structured attention networks (Kim et al., 2017).\\n2. **Recurrent Neural Networks (RNNs)**: Researchers investigate various RNN architectures for NLP tasks, including long short-term memory (LSTM) networks (Sundermeyer et al., 2013), gated recurrent units (GRUs) (Cho et al., 2014), and echo state networks (Jaeger & Haas, 2008).\\n3. **Language modeling**: Papers focus on developing language models using various architectures, such as neural machine translation systems (Wu et al., 2016), transformer-based models (Vaswani et al., 2017), and autoregressive models with attention (Sennrich et al., 2015).\\n4. **Word embeddings**: Researchers explore techniques for learning word representations, including word2vec (Mikolov et al., 2013) and GloVe (Pennington et al., 2014).\\n5. **Subword modeling**: Papers examine the use of subword units for representing rare words in NLP tasks, such as neural machine translation with subwords (Sennrich et al., 2015).\\n\\n**Notable authors:**\\n\\n1. Yoshua Bengio\\n2. Geoffrey Hinton\\n3. Ilya Sutskever\\n4. Quoc Le\\n5. Richard Socher\\n\\nThis list is not exhaustive, and many other researchers have made significant contributions to NLP in recent years.\\n\\nReferences:\\n\\nPlease note that this summary only highlights a few of the papers listed, but all references are relevant to NLP research.\"]"
|
|
]
|
|
},
|
|
"execution_count": 27,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"text_summaries"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 28,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Summarize tables\n",
|
|
"tables_html = [table.metadata.text_as_html for table in tables]\n",
|
|
"table_summaries = summarize_chain.batch(tables_html, {\"max_concurrency\": 3})"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 29,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[]"
|
|
]
|
|
},
|
|
"execution_count": 29,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"tables_html"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 30,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# import getpass\n",
|
|
"# import os\n",
|
|
"\n",
|
|
"# if not os.getenv(\"DEEPSEEK_API_KEY\"):\n",
|
|
"# os.environ[\"DEEPSEEK_API_KEY\"] = getpass.getpass(\"Enter your DeepSeek API key: \")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 31,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from langchain_deepseek import ChatDeepSeek"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 32,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import os\n",
|
|
"os.environ[\"OPENAI_API_KEY\"] = \"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\"\n",
|
|
"from langchain_openai import ChatOpenAI\n",
|
|
"prompt_template = \"\"\"Describe the image in detail. For context,\n",
|
|
" the image is part of a outlines the methodology for factorial complete plans of experimentss.\"\"\"\n",
|
|
"messages = [\n",
|
|
" (\n",
|
|
" \"user\",\n",
|
|
" [\n",
|
|
" {\"type\": \"text\", \"text\": prompt_template},\n",
|
|
" {\n",
|
|
" \"type\": \"image_url\",\n",
|
|
" \"image_url\": {\"url\": \"data:image/jpeg;base64,{image}\"},\n",
|
|
" },\n",
|
|
" ],\n",
|
|
" )\n",
|
|
"]\n",
|
|
"\n",
|
|
"prompt = ChatPromptTemplate.from_messages(messages)\n",
|
|
"\n",
|
|
"chain = OllamaLLM(base_url=\"172.20.48.1:11434\",\n",
|
|
" model=\"llama3.2-vision\")\n",
|
|
"#chain = prompt | ChatOpenAI(model=\"gpt-4o-mini\") | StrOutputParser()\n",
|
|
"\n",
|
|
"image_summaries = chain.batch(images)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"ename": "TypeError",
|
|
"evalue": "QdrantVectorStore.__init__() got an unexpected keyword argument 'embedding_function'",
|
|
"output_type": "error",
|
|
"traceback": [
|
|
"\u001b[31m---------------------------------------------------------------------------\u001b[39m",
|
|
"\u001b[31mTypeError\u001b[39m Traceback (most recent call last)",
|
|
"\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[35]\u001b[39m\u001b[32m, line 12\u001b[39m\n\u001b[32m 8\u001b[39m embeddings = OllamaEmbeddings(base_url=\u001b[33m\"\u001b[39m\u001b[33m172.20.48.1:11434\u001b[39m\u001b[33m\"\u001b[39m,model=\u001b[33m\"\u001b[39m\u001b[33mmxbai-embed-large\u001b[39m\u001b[33m\"\u001b[39m) \u001b[38;5;66;03m# Spécifiez le modèle Ollama à utiliser\u001b[39;00m\n\u001b[32m 10\u001b[39m \u001b[38;5;66;03m# Initialize Qdrant vector store\u001b[39;00m\n\u001b[32m 11\u001b[39m \u001b[38;5;66;03m# Option 1: Local instance (using local storage)\u001b[39;00m\n\u001b[32m---> \u001b[39m\u001b[32m12\u001b[39m vectorstore = \u001b[43mQdrantVectorStore\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 13\u001b[39m \u001b[43m \u001b[49m\u001b[43mcollection_name\u001b[49m\u001b[43m=\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mmulti_modal_rag\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[32m 14\u001b[39m \u001b[43m \u001b[49m\u001b[43membedding_function\u001b[49m\u001b[43m=\u001b[49m\u001b[43membeddings\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 15\u001b[39m \u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m=\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mhttp://172.20.48.1:6333\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;66;43;03m# Utilisez 'location' pour spécifier l'URL de Qdrant\u001b[39;49;00m\n\u001b[32m 16\u001b[39m \u001b[43m)\u001b[49m\n\u001b[32m 17\u001b[39m vectorstore = QdrantVectorStore.from_documents(\n\u001b[32m 18\u001b[39m \n\u001b[32m 19\u001b[39m embeddings,\n\u001b[32m 20\u001b[39m location=\u001b[33m\"\u001b[39m\u001b[33mhttp://172.20.48.1:6333\u001b[39m\u001b[33m\"\u001b[39m,\n\u001b[32m 21\u001b[39m collection_name=\u001b[33m\"\u001b[39m\u001b[33mmy_documents\u001b[39m\u001b[33m\"\u001b[39m,\n\u001b[32m 22\u001b[39m )\n",
|
|
"\u001b[31mTypeError\u001b[39m: QdrantVectorStore.__init__() got an unexpected keyword argument 'embedding_function'"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"from langchain_qdrant import QdrantVectorStore\n",
|
|
"from langchain.storage import InMemoryStore\n",
|
|
"from langchain.schema.document import Document\n",
|
|
"from langchain_ollama import OllamaEmbeddings\n",
|
|
"from langchain.retrievers.multi_vector import MultiVectorRetriever\n",
|
|
"\n",
|
|
"# Create embedding function\n",
|
|
"embeddings = OllamaEmbeddings(base_url=\"172.20.48.1:11434\",model=\"mxbai-embed-large\") # Spécifiez le modèle Ollama à utiliser\n",
|
|
"\n",
|
|
"# Initialize Qdrant vector store\n",
|
|
"# Option 1: Local instance (using local storage)\n",
|
|
"vectorstore = QdrantVectorStore(\n",
|
|
" collection_name=\"multi_modal_rag\",\n",
|
|
" embedding_function=embeddings,\n",
|
|
" url=\"http://172.20.48.1:6333\" # Utilisez 'location' pour spécifier l'URL de Qdrant\n",
|
|
")\n",
|
|
"# vectorstore = QdrantVectorStore.from_documents(\n",
|
|
" \n",
|
|
"# embeddings,\n",
|
|
"# url=\"http://172.20.48.1:6333\",\n",
|
|
"# collection_name=\"my_documents\",\n",
|
|
"# )"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import uuid\n",
|
|
"from langchain.vectorstores import Chroma\n",
|
|
"from langchain.storage import InMemoryStore\n",
|
|
"from langchain.schema.document import Document\n",
|
|
"from langchain.embeddings import OpenAIEmbeddings\n",
|
|
"from langchain.retrievers.multi_vector import MultiVectorRetriever\n",
|
|
"\n",
|
|
"# The vectorstore to use to index the child chunks\n",
|
|
"vectorstore = Chroma(collection_name=\"multi_modal_rag\", embedding_function=OpenAIEmbeddings())\n",
|
|
"\n",
|
|
"# The storage layer for the parent documents\n",
|
|
"store = InMemoryStore()\n",
|
|
"id_key = \"doc_id\"\n",
|
|
"\n",
|
|
"# The retriever (empty to start)\n",
|
|
"retriever = MultiVectorRetriever(\n",
|
|
" vectorstore=vectorstore,\n",
|
|
" docstore=store,\n",
|
|
" id_key=id_key,\n",
|
|
")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import uuid\n",
|
|
"from langchain.vectorstores import Chroma\n",
|
|
"from langchain.storage import InMemoryStore\n",
|
|
"from langchain.schema.document import Document\n",
|
|
"from langchain.embeddings import OpenAIEmbeddings\n",
|
|
"from langchain.retrievers.multi_vector import MultiVectorRetriever\n",
|
|
"\n",
|
|
"# The vectorstore to use to index the child chunks\n",
|
|
"vectorstore = Chroma(collection_name=\"multi_modal_rag\", embedding_function=OpenAIEmbeddings())\n",
|
|
"\n",
|
|
"# The storage layer for the parent documents\n",
|
|
"store = InMemoryStore()\n",
|
|
"id_key = \"doc_id\"\n",
|
|
"\n",
|
|
"# The retriever (empty to start)\n",
|
|
"retriever = MultiVectorRetriever(\n",
|
|
" vectorstore=vectorstore,\n",
|
|
" docstore=store,\n",
|
|
" id_key=id_key,\n",
|
|
")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import uuid\n",
|
|
"from langchain.vectorstores import Chroma\n",
|
|
"from langchain.storage import InMemoryStore\n",
|
|
"from langchain.schema.document import Document\n",
|
|
"from langchain.embeddings import OpenAIEmbeddings\n",
|
|
"from langchain.retrievers.multi_vector import MultiVectorRetriever\n",
|
|
"\n",
|
|
"# The vectorstore to use to index the child chunks\n",
|
|
"vectorstore = Chroma(collection_name=\"multi_modal_rag\", embedding_function=OpenAIEmbeddings())\n",
|
|
"\n",
|
|
"# The storage layer for the parent documents\n",
|
|
"store = InMemoryStore()\n",
|
|
"id_key = \"doc_id\"\n",
|
|
"\n",
|
|
"# The retriever (empty to start)\n",
|
|
"retriever = MultiVectorRetriever(\n",
|
|
" vectorstore=vectorstore,\n",
|
|
" docstore=store,\n",
|
|
" id_key=id_key,\n",
|
|
")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 17,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"content=\"Hello! I'm based on OpenAI's GPT-3 model. How can I assist you today?\" additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 21, 'prompt_tokens': 14, 'total_tokens': 35, 'completion_tokens_details': {'accepted_prediction_tokens': 0, 'audio_tokens': 0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0}, 'prompt_tokens_details': {'audio_tokens': 0, 'cached_tokens': 0}}, 'model_name': 'gpt-4o-mini-2024-07-18', 'system_fingerprint': 'fp_06737a9306', 'finish_reason': 'stop', 'logprobs': None} id='run-087ad4ec-bf03-4d7e-a89d-70f578ba7a66-0' usage_metadata={'input_tokens': 14, 'output_tokens': 21, 'total_tokens': 35, 'input_token_details': {'audio': 0, 'cache_read': 0}, 'output_token_details': {'audio': 0, 'reasoning': 0}}\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"import subprocess\n",
|
|
"windows_host = \"172.20.48.1\"\n",
|
|
"\n",
|
|
"# Connect to Ollama using the Windows host IP\n",
|
|
"model = OllamaLLM(\n",
|
|
" base_url=f\"http://{windows_host}:11434\",\n",
|
|
" model=\"llama3.1\"\n",
|
|
")\n",
|
|
"modelOp= ChatOpenAI(model=\"gpt-4o-mini\") \n",
|
|
"# Test the connection\n",
|
|
"response = modelOp.invoke(\"Hello, which model are you?\")\n",
|
|
"print(response)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 22,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"AIMessage(content=\"Hi! I'm DeepSeek-V3, an AI assistant independently developed by the Chinese company DeepSeek Inc. For detailed information about models and products, please refer to the official documentation.\", additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 39, 'prompt_tokens': 10, 'total_tokens': 49, 'completion_tokens_details': None, 'prompt_tokens_details': {'audio_tokens': None, 'cached_tokens': 0}, 'prompt_cache_hit_tokens': 0, 'prompt_cache_miss_tokens': 10}, 'model_name': 'deepseek-chat', 'system_fingerprint': 'fp_3a5770e1b4_prod0225', 'finish_reason': 'stop', 'logprobs': None}, id='run-22af53f2-32e7-440e-8ba2-18a6622e8e6f-0', usage_metadata={'input_tokens': 10, 'output_tokens': 39, 'total_tokens': 49, 'input_token_details': {'cache_read': 0}, 'output_token_details': {}})"
|
|
]
|
|
},
|
|
"execution_count": 22,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"\n",
|
|
"llm = ChatDeepSeek(\n",
|
|
" model=\"deepseek-chat\",\n",
|
|
")\n",
|
|
"llm.invoke(\"Hello, which model are you?\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": ".venv",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.12.3"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|