Skip to content

Commit

Permalink
pr comments
Browse files Browse the repository at this point in the history
  • Loading branch information
farzad528 committed Jan 10, 2025
1 parent e582b88 commit 674539c
Showing 1 changed file with 54 additions and 26 deletions.
80 changes: 54 additions & 26 deletions docs/examples/rag_azuresearch.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,10 @@
"source": [
"# Part 0: Prerequisites\n",
" - Azure AI Search resource\n",
" - Azure OpenAI resource with deployed embeddings & chat models\n",
" - Azure OpenAI resource with A deployed embedding & chat completion model\n",
" - Docling installed (Python 3.8+ environment)\n",
" - GPU or MPS recommended"
"\n",
"GPU or MPS usage can speed up Docling’s parsing (especially for large PDFs or when OCR/table extraction is needed). However, if no GPU is detected, you can comment out the following checks and proceed with CPU, albeit slower performance."
]
},
{
Expand All @@ -65,16 +66,17 @@
"source": [
"import torch\n",
"\n",
"# Check if GPU or MPS is available\n",
"if torch.cuda.is_available():\n",
" device = torch.device(\"cuda\")\n",
" print(f\"CUDA GPU is enabled: {torch.cuda.get_device_name(0)}\")\n",
"elif torch.backends.mps.is_available():\n",
" device = torch.device(\"mps\")\n",
" print(\"MPS GPU is enabled.\")\n",
"else:\n",
" # Comment out the error if you'd like to allow CPU fallback\n",
" # But be aware parsing could be slower\n",
" raise EnvironmentError(\n",
" \"No GPU or MPS device found. Please check your environment and ensure GPU or MPS support is configured.\"\n",
" \"No GPU or MPS device found. Proceed with CPU only if you understand the performance implications.\"\n",
" )"
]
},
Expand All @@ -100,10 +102,10 @@
"AZURE_SEARCH_KEY = os.getenv(\"AZURE_SEARCH_KEY\")\n",
"AZURE_SEARCH_INDEX_NAME = os.getenv(\"AZURE_SEARCH_INDEX_NAME\")\n",
"AZURE_OPENAI_ENDPOINT = os.getenv(\"AZURE_OPENAI_ENDPOINT\")\n",
"AZURE_OPENAI_API_KEY = os.getenv(\"AZURE_OPENAI_API_KEY\")\n",
"AZURE_OPENAI_CHAT_MODEL = os.getenv(\"AZURE_OPENAI_CHAT_MODEL\")\n",
"AZURE_OPENAI_API_VERSION = os.getenv(\"AZURE_OPENAI_API_VERSION\")\n",
"AZURE_OPENAI_EMBEDDINGS = os.getenv(\"AZURE_OPENAI_EMBEDDINGS\")"
"AZURE_OPENAI_API_KEY = os.getenv(\"AZURE_OPENAI_API_KEY\") # Ensure this your Admin Key\n",
"AZURE_OPENAI_CHAT_MODEL = os.getenv(\"AZURE_OPENAI_CHAT_MODEL\") # Using a deployed model named \"gpt-4o\"\n",
"AZURE_OPENAI_API_VERSION = os.getenv(\"AZURE_OPENAI_API_VERSION\", \"2024-10-21\")\n",
"AZURE_OPENAI_EMBEDDINGS = os.getenv(\"AZURE_OPENAI_EMBEDDINGS\") # Using a deployed model named \"text-embeddings-3-small\""
]
},
{
Expand Down Expand Up @@ -206,7 +208,7 @@
},
{
"cell_type": "code",
"execution_count": 40,
"execution_count": 6,
"metadata": {},
"outputs": [
{
Expand Down Expand Up @@ -316,13 +318,14 @@
" parameters=AzureOpenAIVectorizerParameters(\n",
" resource_url=AZURE_OPENAI_ENDPOINT,\n",
" deployment_name=AZURE_OPENAI_EMBEDDINGS,\n",
" model_name=\"text-embedding-3-small\",\n",
" model_name=\"text-embedding-3-small\", # same as the environment variable \n",
" api_key=AZURE_OPENAI_API_KEY,\n",
" ),\n",
" )\n",
" ],\n",
" )\n",
"\n",
" \n",
" # Clean up any old index if it exists\n",
" new_index = SearchIndex(\n",
" name=index_name,\n",
" fields=fields,\n",
Expand All @@ -349,17 +352,17 @@
},
{
"cell_type": "code",
"execution_count": 42,
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Uploaded batch <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0</span> -&gt; <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">250</span>; success: <span style=\"color: #00ff00; text-decoration-color: #00ff00; font-style: italic\">True</span>, status code: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">201</span>\n",
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Uploaded batch <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0</span> -&gt; <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">250</span>; all_succeeded: <span style=\"color: #00ff00; text-decoration-color: #00ff00; font-style: italic\">True</span>, first_doc_status_code: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">201</span>\n",
"</pre>\n"
],
"text/plain": [
"Uploaded batch \u001b[1;36m0\u001b[0m -> \u001b[1;36m250\u001b[0m; success: \u001b[3;92mTrue\u001b[0m, status code: \u001b[1;36m201\u001b[0m\n"
"Uploaded batch \u001b[1;36m0\u001b[0m -> \u001b[1;36m250\u001b[0m; all_succeeded: \u001b[3;92mTrue\u001b[0m, first_doc_status_code: \u001b[1;36m201\u001b[0m\n"
]
},
"metadata": {},
Expand All @@ -368,11 +371,11 @@
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Uploaded batch <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">250</span> -&gt; <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">500</span>; success: <span style=\"color: #00ff00; text-decoration-color: #00ff00; font-style: italic\">True</span>, status code: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">201</span>\n",
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Uploaded batch <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">250</span> -&gt; <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">500</span>; all_succeeded: <span style=\"color: #00ff00; text-decoration-color: #00ff00; font-style: italic\">True</span>, first_doc_status_code: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">201</span>\n",
"</pre>\n"
],
"text/plain": [
"Uploaded batch \u001b[1;36m250\u001b[0m -> \u001b[1;36m500\u001b[0m; success: \u001b[3;92mTrue\u001b[0m, status code: \u001b[1;36m201\u001b[0m\n"
"Uploaded batch \u001b[1;36m250\u001b[0m -> \u001b[1;36m500\u001b[0m; all_succeeded: \u001b[3;92mTrue\u001b[0m, first_doc_status_code: \u001b[1;36m201\u001b[0m\n"
]
},
"metadata": {},
Expand All @@ -381,11 +384,11 @@
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Uploaded batch <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">500</span> -&gt; <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">750</span>; success: <span style=\"color: #00ff00; text-decoration-color: #00ff00; font-style: italic\">True</span>, status code: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">201</span>\n",
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Uploaded batch <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">500</span> -&gt; <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">750</span>; all_succeeded: <span style=\"color: #00ff00; text-decoration-color: #00ff00; font-style: italic\">True</span>, first_doc_status_code: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">201</span>\n",
"</pre>\n"
],
"text/plain": [
"Uploaded batch \u001b[1;36m500\u001b[0m -> \u001b[1;36m750\u001b[0m; success: \u001b[3;92mTrue\u001b[0m, status code: \u001b[1;36m201\u001b[0m\n"
"Uploaded batch \u001b[1;36m500\u001b[0m -> \u001b[1;36m750\u001b[0m; all_succeeded: \u001b[3;92mTrue\u001b[0m, first_doc_status_code: \u001b[1;36m201\u001b[0m\n"
]
},
"metadata": {},
Expand All @@ -394,11 +397,11 @@
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Uploaded batch <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">750</span> -&gt; <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">966</span>; success: <span style=\"color: #00ff00; text-decoration-color: #00ff00; font-style: italic\">True</span>, status code: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">201</span>\n",
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Uploaded batch <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">750</span> -&gt; <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">966</span>; all_succeeded: <span style=\"color: #00ff00; text-decoration-color: #00ff00; font-style: italic\">True</span>, first_doc_status_code: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">201</span>\n",
"</pre>\n"
],
"text/plain": [
"Uploaded batch \u001b[1;36m750\u001b[0m -> \u001b[1;36m966\u001b[0m; success: \u001b[3;92mTrue\u001b[0m, status code: \u001b[1;36m201\u001b[0m\n"
"Uploaded batch \u001b[1;36m750\u001b[0m -> \u001b[1;36m966\u001b[0m; all_succeeded: \u001b[3;92mTrue\u001b[0m, first_doc_status_code: \u001b[1;36m201\u001b[0m\n"
]
},
"metadata": {},
Expand Down Expand Up @@ -431,29 +434,36 @@
")\n",
"\n",
"def embed_text(text: str):\n",
" \"\"\"\n",
" Helper to generate embeddings with Azure OpenAI.\n",
" \"\"\"\n",
" response = openai_client.embeddings.create(\n",
" input=text,\n",
" model=AZURE_OPENAI_EMBEDDINGS\n",
" )\n",
" return response.data[0].embedding\n",
"\n",
"upload_docs = []\n",
"for chunk_id, chunk_text in all_chunks:\n",
"for (chunk_id, chunk_text) in all_chunks:\n",
" embedding_vector = embed_text(chunk_text)\n",
" upload_docs.append(\n",
" {\n",
" \"chunk_id\": str(uuid.uuid4()),\n",
" \"chunk_id\": chunk_id,\n",
" \"content\": chunk_text,\n",
" \"content_vector\": embedding_vector,\n",
" }\n",
" )\n",
"\n",
"\n",
"BATCH_SIZE = 250\n",
"for i in range(0, len(upload_docs), BATCH_SIZE):\n",
" subset = upload_docs[i : i + BATCH_SIZE]\n",
" resp = search_client.upload_documents(documents=subset)\n",
"\n",
" all_succeeded = all(r.succeeded for r in resp)\n",
" console.print(\n",
" f\"Uploaded batch {i} -> {i+len(subset)}; success: {resp[0].succeeded}, status code: {resp[0].status_code}\"\n",
" f\"Uploaded batch {i} -> {i+len(subset)}; all_succeeded: {all_succeeded}, \"\n",
" f\"first_doc_status_code: {resp[0].status_code}\"\n",
" )\n",
"\n",
"console.print(\"All chunks uploaded to Azure Search.\")\n"
Expand Down Expand Up @@ -621,6 +631,11 @@
"from azure.search.documents.models import VectorizableTextQuery\n",
"\n",
"def generate_chat_response(prompt: str, system_message: str = None):\n",
" \"\"\"\n",
" Generates a single-turn chat response using Azure OpenAI Chat.\n",
" If you need multi-turn conversation or follow-up queries, you'll have to\n",
" maintain the messages list externally.\n",
" \"\"\"\n",
" messages = []\n",
" if system_message:\n",
" messages.append({\"role\": \"system\", \"content\": system_message})\n",
Expand Down Expand Up @@ -672,6 +687,19 @@
"console.print(Panel(rag_prompt, title=\"RAG Prompt\", style=\"bold red\"))\n",
"console.print(Panel(final_answer, title=\"RAG Response\", style=\"bold green\"))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Dataset Citation\n",
"\n",
"**State of AI Report 2024** \n",
"Benaich, N. & Air Street Capital. (2024). *State of AI Report 2024*. \n",
"Licensed under [Creative Commons Attribution 4.0 International License](https://creativecommons.org/licenses/by/4.0/). \n",
"Available at: [STATE OF AI REPORT 2024](https://www.stateof.ai/)\n",
"\n"
]
}
],
"metadata": {
Expand All @@ -681,9 +709,9 @@
"provenance": []
},
"kernelspec": {
"display_name": "Python 3.10 - SDK v2",
"display_name": "Python 3",
"language": "python",
"name": "python310-sdkv2"
"name": "python3"
},
"language_info": {
"codemirror_mode": {
Expand All @@ -695,7 +723,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.11"
"version": "3.11.9"
}
},
"nbformat": 4,
Expand Down

0 comments on commit 674539c

Please sign in to comment.