Skip to content

Instantly share code, notes, and snippets.

@shawngraham
Created July 11, 2025 15:45
Show Gist options
  • Select an option

  • Save shawngraham/bd845937d8f9789dd282ea80b0a03e4e to your computer and use it in GitHub Desktop.

Select an option

Save shawngraham/bd845937d8f9789dd282ea80b0a03e4e to your computer and use it in GitHub Desktop.
for use with https://shawngraham.github.io/homecooked-history/hm-generator-site/enhanced.html ; talk to your archaeological contexts! Import this to google colab to run.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "378aee38-9bf1-4824-9143-0b24b4addf4c",
"metadata": {
"id": "378aee38-9bf1-4824-9143-0b24b4addf4c"
},
"source": [
"This notebook represents a prototype of a RAG system for archaeological context data with the following capabilities:\n",
"\n",
"1. **Data Processing**: Loads and prepares archaeological context data with stratigraphic relationships\n",
"2. **Embedding Generation**: Creates semantic embeddings using Simon Willison's LLM package\n",
"3. **Similarity Search**: Finds contextually similar archaeological contexts\n",
"4. **RAG Query System**: Answers natural language questions about the archaeological record\n",
"5. **Visualization**: Provides insights into the embedding space and stratigraphic relationships\n",
"6. **Persistence**: Saves embeddings and results for future use\n",
"\n",
"### Features:\n",
"- **Stratigraphic Understanding**: Incorporates complex archaeological relationships\n",
"- **Semantic Search**: Find contexts by meaning, not just keywords\n",
"- **Interactive Querying**: Natural language interface for archaeological research\n",
"- **Visualization**: 2D projections of the embedding space\n",
"- **Extensible**: Easy to add new contexts and query types\n",
"\n",
"...well, that's the theory, anyway...\n",
"\n",
"### Potential Extensions:\n",
"- Implement temporal sequence analysis\n",
"- Include geographic/spatial relationships\n",
"- Add support for multiple sites and comparative analysis\n",
"- Integrate with archaeological databases and standards\n",
"- use Ollama, faster models?\n",
"\n",
"### Usage Tips:\n",
"1. Ensure your CSV has the expected columns or modify the `prepare_context_text` function\n",
"2. Set up your OpenAI API key: `llm keys set openai` if you use those models. By default we're not.\n",
"3. Adjust the embedding model based on your needs (quality vs. cost)\n",
"4. Experiment with different query formulations for best results\n",
"5. Use the visualization tools to understand your data's structure\n",
"\n",
"\n",
"The text generation by default is using Orca, and we're in a GPU environment, so that should be reasonably fast. But groq (nb NOT GROK) is very fast and if you have api key for that, swap that in instead."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "80288799-9f24-4d4a-a621-9ee75c22fec2",
"metadata": {
"id": "80288799-9f24-4d4a-a621-9ee75c22fec2"
},
"outputs": [],
"source": [
"# Install required packages ; takes a few moments\n",
"%%capture\n",
"!pip install llm pandas numpy scikit-learn matplotlib seaborn\n",
"!llm install llm-sentence-transformers #which gives us the all-MiniLM-L6-v2 embedding model as default\n",
"!llm install llm-gpt4all #which gives us a variety of other models; we'll want orca-mini-3b-gguf2-q4_0 because it's small ... but it is slow."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "a9f42c79-1fc1-444a-9fdc-9899c71ce44a",
"metadata": {
"id": "a9f42c79-1fc1-444a-9fdc-9899c71ce44a"
},
"outputs": [],
"source": [
"# Import required libraries\n",
"import pandas as pd\n",
"import numpy as np\n",
"import json\n",
"import sqlite3\n",
"from pathlib import Path\n",
"from typing import List, Dict, Any, Optional\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"from sklearn.metrics.pairwise import cosine_similarity\n",
"from sklearn.decomposition import PCA\n",
"import llm\n",
"from typing import List, Dict, Any, Optional\n",
"\n",
"# Configure pandas display options\n",
"pd.set_option('display.max_columns', None)\n",
"pd.set_option('display.width', None)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "8eda3d11-7eaf-4f93-ac16-d4a25e69dae6",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "8eda3d11-7eaf-4f93-ac16-d4a25e69dae6",
"outputId": "2257e2d2-b183-48f3-fc6a-ed99bc5e9118"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Created sample archaeological dataset with proper structure\n",
"\n",
"Sample of the data:\n",
" Context_ID Context_Type Description \\\n",
"0 C001 Layer Dark brown silty clay layer with frequent char... \n",
"1 C002 Cut Circular pit cut with steep sides and flat bot... \n",
"2 C003 Fill Light grey sandy fill of pit C002, containing ... \n",
"3 C004 Layer Compact yellow clay natural subsoil layer \n",
"4 C005 Layer Medieval mortar floor surface with tile fragments \n",
"\n",
" Earliest_Date_Year Earliest_Date_Era Latest_Date_Year Latest_Date_Era \\\n",
"0 100.0 AD 400.0 AD \n",
"1 50.0 AD 200.0 AD \n",
"2 50.0 AD 200.0 AD \n",
"3 NaN None NaN None \n",
"4 1200.0 AD 1400.0 AD \n",
"\n",
" Date_Type Phase_ID Phase_Name Group_ID Group_Name \\\n",
"0 Ceramic P1 Romano-British G1 Occupation deposits \n",
"1 Stratigraphic P1 Romano-British G2 Pit group \n",
"2 Stratigraphic P1 Romano-British G2 Pit group \n",
"3 Geological P0 Natural G0 Natural \n",
"4 Architectural P2 Medieval G3 Domestic structures \n",
"\n",
" Sub-Group_ID Sub-Group_Name Relationship_Type Related_Context_ID \\\n",
"0 SG1 General occupation overlies C004 \n",
"1 SG2 Pit cutting and filling cuts C004 \n",
"2 SG2 Pit cutting and filling fills C002 \n",
"3 None None cut by C002 \n",
"4 SG3 Floor surfaces overlies C004 \n",
"\n",
" Temporal_Conflict Is_Redundant \n",
"0 False False \n",
"1 False False \n",
"2 False False \n",
"3 False False \n",
"4 False False \n"
]
}
],
"source": [
"## 1. Data Loading and Preprocessing\n",
"\n",
"## We're assuming input data created using Graham's Harris Matrix Tool\n",
"## at https://shawngraham.github.io/homecooked-history/hm-generator-site/enhanced.html\n",
"\n",
"def load_archaeological_data(csv_path: str) -> pd.DataFrame:\n",
" \"\"\"\n",
" Load archaeological context data from CSV file.\n",
"\n",
" Expected columns:\n",
" - Context_ID: Unique identifier for each archaeological context\n",
" - Context_Type: Type of context (layer, cut, fill, etc.)\n",
" - Description: Detailed description of the context\n",
" - Earliest_Date_Year: Earliest possible date (year)\n",
" - Earliest_Date_Era: Era for earliest date (BC/AD)\n",
" - Latest_Date_Year: Latest possible date (year)\n",
" - Latest_Date_Era: Era for latest date (BC/AD)\n",
" - Date_Type: Type of dating evidence\n",
" - Phase_ID: Phase identifier\n",
" - Phase_Name: Phase name/description\n",
" - Group_ID: Group identifier\n",
" - Group_Name: Group name/description\n",
" - Sub-Group_ID: Sub-group identifier\n",
" - Sub-Group_Name: Sub-group name/description\n",
" - Relationship_Type: Type of stratigraphic relationship\n",
" - Related_Context_ID: ID of related context\n",
" - Temporal_Conflict: Whether there's a temporal conflict\n",
" - Is_Redundant: Whether the context is redundant\n",
" \"\"\"\n",
" try:\n",
" df = pd.read_csv(csv_path)\n",
" print(f\"Loaded {len(df)} archaeological contexts from {csv_path}\")\n",
" print(f\"Columns: {list(df.columns)}\")\n",
"\n",
" # Clean up any whitespace in column names\n",
" df.columns = df.columns.str.strip()\n",
"\n",
" return df\n",
" except Exception as e:\n",
" print(f\"Error loading data: {e}\")\n",
" return pd.DataFrame()\n",
"\n",
"def create_sample_data() -> pd.DataFrame:\n",
" \"\"\"\n",
" Create sample archaeological data matching the actual CSV structure.\n",
" This represents typical stratigraphic recording with proper temporal and hierarchical data.\n",
" \"\"\"\n",
" sample_data = {\n",
" 'Context_ID': ['C001', 'C002', 'C003', 'C004', 'C005', 'C006', 'C007', 'C008', 'C009', 'C010'],\n",
" 'Context_Type': ['Layer', 'Cut', 'Fill', 'Layer', 'Layer', 'Feature', 'Fill', 'Layer', 'Cut', 'Fill'],\n",
" 'Description': [\n",
" 'Dark brown silty clay layer with frequent charcoal flecks and pottery sherds',\n",
" 'Circular pit cut with steep sides and flat bottom, diameter 1.2m',\n",
" 'Light grey sandy fill of pit C002, containing burnt bone and flint tools',\n",
" 'Compact yellow clay natural subsoil layer',\n",
" 'Medieval mortar floor surface with tile fragments',\n",
" 'Stone-lined hearth with evidence of burning and ash deposits',\n",
" 'Ash and charcoal fill of hearth C006, rich in pottery and animal bone',\n",
" 'Post-medieval demolition layer with brick and tile rubble',\n",
" 'Rectangular foundation trench for stone wall',\n",
" 'Stone and mortar fill of foundation trench C009'\n",
" ],\n",
" 'Earliest_Date_Year': [100, 50, 50, None, 1200, 1250, 1250, 1600, 1200, 1200],\n",
" 'Earliest_Date_Era': ['AD', 'AD', 'AD', None, 'AD', 'AD', 'AD', 'AD', 'AD', 'AD'],\n",
" 'Latest_Date_Year': [400, 200, 200, None, 1400, 1350, 1350, 1700, 1400, 1400],\n",
" 'Latest_Date_Era': ['AD', 'AD', 'AD', None, 'AD', 'AD', 'AD', 'AD', 'AD', 'AD'],\n",
" 'Date_Type': ['Ceramic', 'Stratigraphic', 'Stratigraphic', 'Geological', 'Architectural', 'Radiocarbon', 'Stratigraphic', 'Ceramic', 'Architectural', 'Stratigraphic'],\n",
" 'Phase_ID': ['P1', 'P1', 'P1', 'P0', 'P2', 'P2', 'P2', 'P3', 'P2', 'P2'],\n",
" 'Phase_Name': ['Romano-British', 'Romano-British', 'Romano-British', 'Natural', 'Medieval', 'Medieval', 'Medieval', 'Post-Medieval', 'Medieval', 'Medieval'],\n",
" 'Group_ID': ['G1', 'G2', 'G2', 'G0', 'G3', 'G4', 'G4', 'G5', 'G6', 'G6'],\n",
" 'Group_Name': ['Occupation deposits', 'Pit group', 'Pit group', 'Natural', 'Domestic structures', 'Hearth activity', 'Hearth activity', 'Demolition', 'Wall construction', 'Wall construction'],\n",
" 'Sub-Group_ID': ['SG1', 'SG2', 'SG2', None, 'SG3', 'SG4', 'SG4', 'SG5', 'SG6', 'SG6'],\n",
" 'Sub-Group_Name': ['General occupation', 'Pit cutting and filling', 'Pit cutting and filling', None, 'Floor surfaces', 'Hearth construction and use', 'Hearth construction and use', 'Site abandonment', 'Foundation construction', 'Foundation construction'],\n",
" 'Relationship_Type': ['overlies', 'cuts', 'fills', 'cut by', 'overlies', 'built into', 'fills', 'overlies', 'cuts', 'fills'],\n",
" 'Related_Context_ID': ['C004', 'C004', 'C002', 'C002', 'C004', 'C005', 'C006', 'C005', 'C005', 'C009'],\n",
" 'Temporal_Conflict': [False, False, False, False, False, False, False, False, False, False],\n",
" 'Is_Redundant': [False, False, False, False, False, False, False, False, False, False]\n",
" }\n",
"\n",
" df = pd.DataFrame(sample_data)\n",
" print(\"Created sample archaeological dataset with proper structure\")\n",
" return df\n",
"\n",
"# Load or create data\n",
"# Uncomment the next line to load your own CSV file\n",
"# df = load_archaeological_data('your_archaeological_data.csv')\n",
"\n",
"# For demonstration, we'll use sample data\n",
"df = create_sample_data()\n",
"print(\"\\nSample of the data:\")\n",
"print(df.head())"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "6ab82d66-0d6e-472b-8ae8-b85a295acdc2",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "6ab82d66-0d6e-472b-8ae8-b85a295acdc2",
"outputId": "f65f0147-4b86-4e1c-cacb-fa3ae719d5f5"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Sample prepared text:\n",
"Context C001, Type: Layer | Description: Dark brown silty clay layer with frequent charcoal flecks and pottery sherds | Dated 100.0 AD to 400.0 AD | Dating method: Ceramic | Phase: Romano-British | Group: Occupation deposits | Sub-Group: General occupation | Stratigraphic relationship: overlies C004\n",
"\n",
"Average text length: 273 characters\n"
]
}
],
"source": [
"## 2. Text Preparation for Embeddings\n",
"def prepare_context_text(row: pd.Series) -> str:\n",
" \"\"\"\n",
" Combine all relevant fields into a single text string for embedding.\n",
" This creates a comprehensive representation of each archaeological context.\n",
" \"\"\"\n",
" text_parts = []\n",
"\n",
" # Add context identification\n",
" text_parts.append(f\"Context {row['Context_ID']}, Type: {row['Context_Type']}\")\n",
"\n",
" # Add description\n",
" if pd.notna(row['Description']):\n",
" text_parts.append(f\"Description: {row['Description']}\")\n",
"\n",
" # Add dating information\n",
" dating_info = []\n",
" if pd.notna(row['Earliest_Date_Year']) and pd.notna(row['Latest_Date_Year']):\n",
" earliest = f\"{row['Earliest_Date_Year']} {row['Earliest_Date_Era']}\"\n",
" latest = f\"{row['Latest_Date_Year']} {row['Latest_Date_Era']}\"\n",
" dating_info.append(f\"Dated {earliest} to {latest}\")\n",
" elif pd.notna(row['Earliest_Date_Year']):\n",
" dating_info.append(f\"Earliest date: {row['Earliest_Date_Year']} {row['Earliest_Date_Era']}\")\n",
" elif pd.notna(row['Latest_Date_Year']):\n",
" dating_info.append(f\"Latest date: {row['Latest_Date_Year']} {row['Latest_Date_Era']}\")\n",
"\n",
" if pd.notna(row['Date_Type']):\n",
" dating_info.append(f\"Dating method: {row['Date_Type']}\")\n",
"\n",
" if dating_info:\n",
" text_parts.append(\" | \".join(dating_info))\n",
"\n",
" # Add hierarchical organization\n",
" hierarchy_parts = []\n",
" if pd.notna(row['Phase_Name']):\n",
" hierarchy_parts.append(f\"Phase: {row['Phase_Name']}\")\n",
" if pd.notna(row['Group_Name']):\n",
" hierarchy_parts.append(f\"Group: {row['Group_Name']}\")\n",
" if pd.notna(row['Sub-Group_Name']):\n",
" hierarchy_parts.append(f\"Sub-Group: {row['Sub-Group_Name']}\")\n",
"\n",
" if hierarchy_parts:\n",
" text_parts.append(\" | \".join(hierarchy_parts))\n",
"\n",
" # Add stratigraphic relationship\n",
" if pd.notna(row['Relationship_Type']) and pd.notna(row['Related_Context_ID']):\n",
" text_parts.append(f\"Stratigraphic relationship: {row['Relationship_Type']} {row['Related_Context_ID']}\")\n",
"\n",
" # Add conflict and redundancy flags\n",
" flags = []\n",
" if row.get('Temporal_Conflict', False):\n",
" flags.append(\"Temporal conflict present\")\n",
" if row.get('Is_Redundant', False):\n",
" flags.append(\"Marked as redundant\")\n",
"\n",
" if flags:\n",
" text_parts.append(\" | \".join(flags))\n",
"\n",
" return \" | \".join(text_parts)\n",
"\n",
"def add_prepared_text(df: pd.DataFrame) -> pd.DataFrame:\n",
" \"\"\"\n",
" Add prepared text column to dataframe for embedding generation.\n",
" \"\"\"\n",
" df_copy = df.copy()\n",
" df_copy['prepared_text'] = df_copy.apply(prepare_context_text, axis=1)\n",
"\n",
" print(\"Sample prepared text:\")\n",
" print(df_copy['prepared_text'].iloc[0])\n",
" print(f\"\\nAverage text length: {df_copy['prepared_text'].str.len().mean():.0f} characters\")\n",
"\n",
" return df_copy\n",
"\n",
"# Prepare text for embeddings\n",
"df = add_prepared_text(df)"
]
},
{
"cell_type": "code",
"source": [
"# Default when I built this was the Orca model, because it is small and can be run locally\n",
"# But if we're willing to pass our materials to someone else's servers, then\n",
"# groq (the French company, not the Elmo's awful thing) returns generated\n",
"# text very quickly. Install and set keys here:\n",
"!llm install llm-groq\n",
"!llm keys set groq"
],
"metadata": {
"id": "vJixxmExBHzr"
},
"id": "vJixxmExBHzr",
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# The following models are now available; in the set_models() you can change to your desired one by name.\n",
"!llm models\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "0jEsDbaXFQxL",
"outputId": "2dffcc8c-9e07-41ac-cf1e-f461cfe04916"
},
"id": "0jEsDbaXFQxL",
"execution_count": 43,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"OpenAI Chat: gpt-4o (aliases: 4o)\n",
"OpenAI Chat: chatgpt-4o-latest (aliases: chatgpt-4o)\n",
"OpenAI Chat: gpt-4o-mini (aliases: 4o-mini)\n",
"OpenAI Chat: gpt-4o-audio-preview\n",
"OpenAI Chat: gpt-4o-audio-preview-2024-12-17\n",
"OpenAI Chat: gpt-4o-audio-preview-2024-10-01\n",
"OpenAI Chat: gpt-4o-mini-audio-preview\n",
"OpenAI Chat: gpt-4o-mini-audio-preview-2024-12-17\n",
"OpenAI Chat: gpt-4.1 (aliases: 4.1)\n",
"OpenAI Chat: gpt-4.1-mini (aliases: 4.1-mini)\n",
"OpenAI Chat: gpt-4.1-nano (aliases: 4.1-nano)\n",
"OpenAI Chat: gpt-3.5-turbo (aliases: 3.5, chatgpt)\n",
"OpenAI Chat: gpt-3.5-turbo-16k (aliases: chatgpt-16k, 3.5-16k)\n",
"OpenAI Chat: gpt-4 (aliases: 4, gpt4)\n",
"OpenAI Chat: gpt-4-32k (aliases: 4-32k)\n",
"OpenAI Chat: gpt-4-1106-preview\n",
"OpenAI Chat: gpt-4-0125-preview\n",
"OpenAI Chat: gpt-4-turbo-2024-04-09\n",
"OpenAI Chat: gpt-4-turbo (aliases: gpt-4-turbo-preview, 4-turbo, 4t)\n",
"OpenAI Chat: gpt-4.5-preview-2025-02-27\n",
"OpenAI Chat: gpt-4.5-preview (aliases: gpt-4.5)\n",
"OpenAI Chat: o1\n",
"OpenAI Chat: o1-2024-12-17\n",
"OpenAI Chat: o1-preview\n",
"OpenAI Chat: o1-mini\n",
"OpenAI Chat: o3-mini\n",
"OpenAI Chat: o3\n",
"OpenAI Chat: o4-mini\n",
"OpenAI Completion: gpt-3.5-turbo-instruct (aliases: 3.5-instruct, chatgpt-instruct)\n",
"gpt4all: orca-mini-3b-gguf2-q4_0 - Mini Orca (Small), 1.84GB download, needs 4GB RAM (installed)\n",
"gpt4all: all-MiniLM-L6-v2-f16 - SBert, 43.76MB download, needs 1GB RAM\n",
"gpt4all: all-MiniLM-L6-v2 - SBert, 43.82MB download, needs 1GB RAM\n",
"gpt4all: nomic-embed-text-v1 - Nomic Embed Text v1, 261.58MB download, needs 1GB RAM\n",
"gpt4all: nomic-embed-text-v1 - Nomic Embed Text v1.5, 261.58MB download, needs 1GB RAM\n",
"gpt4all: Llama-3 - Llama 3.2 1B Instruct, 737.21MB download, needs 2GB RAM\n",
"gpt4all: qwen2-1_5b-instruct-q4_0 - Qwen2-1.5B-Instruct, 894.10MB download, needs 3GB RAM\n",
"gpt4all: DeepSeek-R1-Distill-Qwen-1 - DeepSeek-R1-Distill-Qwen-1.5B, 1019.29MB download, needs 3GB RAM\n",
"gpt4all: Llama-3 - Llama 3.2 3B Instruct, 1.79GB download, needs 4GB RAM\n",
"gpt4all: replit-code-v1_5-3b-newbpe-q4_0 - Replit, 1.82GB download, needs 4GB RAM\n",
"gpt4all: Phi-3-mini-4k-instruct - Phi-3 Mini Instruct, 2.03GB download, needs 4GB RAM\n",
"gpt4all: mpt-7b-chat - MPT Chat, 3.54GB download, needs 8GB RAM\n",
"gpt4all: orca-2-7b - Orca 2 (Medium), 3.56GB download, needs 8GB RAM\n",
"gpt4all: rift-coder-v0-7b-q4_0 - Rift coder, 3.56GB download, needs 8GB RAM\n",
"gpt4all: mpt-7b-chat-newbpe-q4_0 - MPT Chat, 3.64GB download, needs 8GB RAM\n",
"gpt4all: em_german_mistral_v01 - EM German Mistral, 3.83GB download, needs 8GB RAM\n",
"gpt4all: mistral-7b-instruct-v0 - Mistral Instruct, 3.83GB download, needs 8GB RAM\n",
"gpt4all: ghost-7b-v0 - Ghost 7B v0.9.1, 3.83GB download, needs 8GB RAM\n",
"gpt4all: Nous-Hermes-2-Mistral-7B-DPO - Nous Hermes 2 Mistral DPO, 3.83GB download, needs 8GB RAM\n",
"gpt4all: mistral-7b-openorca - Mistral OpenOrca, 3.83GB download, needs 8GB RAM\n",
"gpt4all: gpt4all-falcon-newbpe-q4_0 - GPT4All Falcon, 3.92GB download, needs 8GB RAM\n",
"gpt4all: qwen2 - Reasoner v1, 4.13GB download, needs 8GB RAM\n",
"gpt4all: DeepSeek-R1-Distill-Qwen-7B-Q4_0 - DeepSeek-R1-Distill-Qwen-7B, 4.14GB download, needs 8GB RAM\n",
"gpt4all: Meta-Llama-3 - Llama 3.1 8B Instruct 128k, 4.34GB download, needs 8GB RAM\n",
"gpt4all: Meta-Llama-3-8B-Instruct - Llama 3 8B Instruct, 4.34GB download, needs 8GB RAM\n",
"gpt4all: DeepSeek-R1-Distill-Llama-8B-Q4_0 - DeepSeek-R1-Distill-Llama-8B, 4.35GB download, needs 8GB RAM\n",
"gpt4all: gpt4all-13b-snoozy-q4_0 - Snoozy, 6.86GB download, needs 16GB RAM\n",
"gpt4all: wizardlm-13b-v1 - Wizard v1.2, 6.86GB download, needs 16GB RAM\n",
"gpt4all: orca-2-13b - Orca 2 (Full), 6.86GB download, needs 16GB RAM\n",
"gpt4all: nous-hermes-llama2-13b - Hermes, 6.86GB download, needs 16GB RAM\n",
"gpt4all: DeepSeek-R1-Distill-Qwen-14B-Q4_0 - DeepSeek-R1-Distill-Qwen-14B, 7.96GB download, needs 16GB RAM\n",
"gpt4all: starcoder-newbpe-q4_0 - Starcoder, 8.37GB download, needs 4GB RAM\n",
"LLMGroq: groq/whisper-large-v3\n",
"LLMGroq: groq/playai-tts\n",
"LLMGroq: groq/meta-llama/llama-4-scout-17b-16e-instruct\n",
"LLMGroq: groq/gemma2-9b-it (aliases: groq-gemma2)\n",
"LLMGroq: groq/qwen/qwen3-32b\n",
"LLMGroq: groq/llama-3.3-70b-versatile (aliases: groq-llama-3.3-70b)\n",
"LLMGroq: groq/meta-llama/llama-prompt-guard-2-22m\n",
"LLMGroq: groq/meta-llama/llama-prompt-guard-2-86m\n",
"LLMGroq: groq/qwen-qwq-32b\n",
"LLMGroq: groq/playai-tts-arabic\n",
"LLMGroq: groq/llama3-8b-8192 (aliases: groq-llama3)\n",
"LLMGroq: groq/llama3-70b-8192 (aliases: groq-llama3-70b)\n",
"LLMGroq: groq/compound-beta-mini\n",
"LLMGroq: groq/mistral-saba-24b\n",
"LLMGroq: groq/distil-whisper-large-v3-en\n",
"LLMGroq: groq/compound-beta\n",
"LLMGroq: groq/llama-3.1-8b-instant (aliases: groq-llama3.1-8b)\n",
"LLMGroq: groq/allam-2-7b\n",
"LLMGroq: groq/whisper-large-v3-turbo\n",
"LLMGroq: groq/meta-llama/llama-4-maverick-17b-128e-instruct\n",
"LLMGroq: groq/meta-llama/llama-guard-4-12b\n",
"LLMGroq: groq/deepseek-r1-distill-llama-70b\n",
"Default: gpt-4o-mini\n"
]
}
]
},
{
"cell_type": "code",
"execution_count": 50,
"id": "67da3265-9330-4a6b-aa47-c95e48fc7a13",
"metadata": {
"id": "67da3265-9330-4a6b-aa47-c95e48fc7a13"
},
"outputs": [],
"source": [
"## 3. Initialize LLM and Generate Embeddings\n",
"\n",
"\n",
"def generate_embeddings_via_cli(text: str, model_name: str) -> List[float]:\n",
" \"\"\"\n",
" Generate embeddings using the LLM command line interface.\n",
" This works around API issues with sentence-transformers models.\n",
" \"\"\"\n",
" import subprocess\n",
" import json\n",
"\n",
" try:\n",
" # Use subprocess to call llm embed\n",
" cmd = [\"llm\", \"embed\", \"-c\", text, \"-m\", model_name]\n",
" result = subprocess.run(cmd, capture_output=True, text=True, check=True)\n",
"\n",
" # Parse the output - it should be a JSON array of floats\n",
" embedding = json.loads(result.stdout.strip())\n",
" return embedding\n",
"\n",
" except subprocess.CalledProcessError as e:\n",
" print(f\"CLI embedding failed: {e.stderr}\")\n",
" return None\n",
" except json.JSONDecodeError as e:\n",
" print(f\"Failed to parse embedding output: {e}\")\n",
" print(f\"Raw output: {result.stdout}\")\n",
" return None\n",
" except Exception as e:\n",
" print(f\"Unexpected error generating embedding: {e}\")\n",
" return None\n",
"\n",
"def set_chat(text: str, model_name: str) -> List[float]:\n",
" \"\"\"\n",
" Set up cmd line use of the chat model.\n",
" \"\"\"\n",
" import subprocess\n",
" cmd = [\"llm\", \"-m\", model_name, text]\n",
" result = subprocess.run(cmd, capture_output=True, text=True, check=True)\n",
" return result\n",
"\n",
"def setup_llm_models():\n",
" \"\"\"\n",
" Set up both embedding and chat models using local LLM plugins.\n",
" Uses sentence-transformers for embeddings and orca-mini for text generation.\n",
" Both models use CLI interface for consistency.\n",
" \"\"\"\n",
" embedding_model = None\n",
" chat_model = None\n",
"\n",
" try:\n",
" # List available models using CLI\n",
" print(\"Available models:\")\n",
" import subprocess\n",
" try:\n",
" result = subprocess.run([\"llm\", \"models\"], capture_output=True, text=True, check=True)\n",
" print(result.stdout)\n",
" except subprocess.CalledProcessError:\n",
" print(\"Could not list models via CLI\")\n",
"\n",
" # For embeddings, we'll use the command line interface since the Python API\n",
" # sometimes has issues with sentence-transformers models\n",
" print(f\"\\nUsing embedding model: sentence-transformers/all-MiniLM-L6-v2 (via CLI)\")\n",
" embedding_model = \"sentence-transformers/all-MiniLM-L6-v2\" # Store as string for CLI usage\n",
"\n",
" # Initialize chat model (orca-mini) - store as string for CLI usage\n",
" # use orca if you don't have a groq key; otherwise groq is faster\n",
" #chat_model_name = \"orca-mini-3b-gguf2-q4_0\"\n",
" chat_model_name = \"groq-llama-3.3-70b\"\n",
" try:\n",
" # Test if the chat model is available by trying to use it\n",
" test_result = set_chat(\"Hello\", chat_model_name)\n",
" if test_result.returncode == 0:\n",
" chat_model = chat_model_name # Store as string, not model object\n",
" print(f\"Using chat model: {chat_model_name} (via CLI)\")\n",
" else:\n",
" raise Exception(f\"Chat model test failed: {test_result.stderr}\")\n",
" except Exception as e:\n",
" print(f\"Warning: Could not load chat model: {e}\")\n",
" print(\"Make sure you have installed the gpt4all plugin and downloaded orca-mini:\")\n",
" print(\" llm install llm-gpt4all\")\n",
" print(\" llm gpt4all download orca-mini-3b-gguf2-q4_0\")\n",
" chat_model = None # Ensure it's None if there's an error\n",
"\n",
" return embedding_model, chat_model\n",
"\n",
" except Exception as e:\n",
" print(f\"Error setting up LLM models: {e}\")\n",
" return None, None\n",
"\n",
"\n",
"def generate_embeddings(df: pd.DataFrame, embedding_model) -> pd.DataFrame:\n",
" \"\"\"\n",
" Generate embeddings for all prepared context texts using sentence-transformers via CLI.\n",
" \"\"\"\n",
" if embedding_model is None:\n",
" print(\"No embedding model available for embedding generation\")\n",
" print(\"Creating sample embeddings for demonstration...\")\n",
" # Create sample embeddings with correct dimension for all-MiniLM-L6-v2 (384)\n",
" np.random.seed(42)\n",
" sample_embeddings = [np.random.normal(0, 1, 384).tolist() for _ in range(len(df))]\n",
" df_copy = df.copy()\n",
" df_copy['embedding'] = sample_embeddings\n",
" return df_copy\n",
"\n",
" embeddings = []\n",
"\n",
" print(\"Generating embeddings using sentence-transformers via CLI...\")\n",
" for i, text in enumerate(df['prepared_text']):\n",
" try:\n",
" # Generate embedding using CLI interface\n",
" embedding = generate_embeddings_via_cli(text, embedding_model)\n",
"\n",
" if embedding is not None:\n",
" embeddings.append(embedding)\n",
" else:\n",
" # Use zero vector as fallback (384 dimensions for all-MiniLM-L6-v2)\n",
" print(f\" Failed to generate embedding for context {i+1}, using fallback\")\n",
" embeddings.append([0.0] * 384)\n",
"\n",
" if (i + 1) % 5 == 0: # Progress indicator\n",
" print(f\" Processed {i + 1}/{len(df)} contexts\")\n",
"\n",
" except Exception as e:\n",
" print(f\"Error generating embedding for context {i}: {e}\")\n",
" # Use zero vector as fallback (384 dimensions for all-MiniLM-L6-v2)\n",
" embeddings.append([0.0] * 384)\n",
"\n",
" # Add embeddings to dataframe\n",
" df_copy = df.copy()\n",
" df_copy['embedding'] = embeddings\n",
"\n",
" print(f\"\\nGenerated {len(embeddings)} embeddings\")\n",
" print(f\"Embedding dimension: {len(embeddings[0]) if embeddings else 0}\")\n",
"\n",
" return df_copy\n",
"\n"
]
},
{
"cell_type": "code",
"source": [
"def test_embedding_model(embedding_model):\n",
" \"\"\"\n",
" Test the embedding model with a sample text to verify it's working.\n",
" \"\"\"\n",
" if embedding_model is None:\n",
" print(\"No embedding model to test\")\n",
" return False\n",
"\n",
" try:\n",
" test_text = \"This is a test archaeological context for embedding generation.\"\n",
"\n",
" # Use CLI interface since embedding_model is now a string\n",
" test_embedding = generate_embeddings_via_cli(test_text, embedding_model)\n",
"\n",
" if test_embedding is not None:\n",
" print(f\"Embedding model test successful!\")\n",
" print(f\"Test embedding dimension: {len(test_embedding)}\")\n",
" print(f\"Sample values: {test_embedding[:5]}...\")\n",
" return True\n",
" else:\n",
" print(f\"Embedding model test failed: No embedding returned\")\n",
" return False\n",
"\n",
" except Exception as e:\n",
" print(f\"Embedding model test failed: {e}\")\n",
" return False\n",
"\n",
"def test_chat_model(chat_model):\n",
" \"\"\"\n",
" Test the chat model with a simple prompt to verify it's working.\n",
" Uses set_chat function for consistency.\n",
" \"\"\"\n",
" if chat_model is None:\n",
" print(\"No chat model to test\")\n",
" return False\n",
"\n",
" try:\n",
" test_prompt = \"What is archaeology?\"\n",
" print(\"Testing chat model with sample prompt...\")\n",
"\n",
" # Use set_chat function to test the model\n",
" result = set_chat(test_prompt, chat_model)\n",
"\n",
" if result.returncode == 0:\n",
" response_text = result.stdout.strip()\n",
" print(f\"Chat model test successful!\")\n",
" print(f\"Sample response: {response_text[:200]}...\")\n",
" return True\n",
" else:\n",
" print(f\"Chat model test failed: {result.stderr}\")\n",
" return False\n",
"\n",
" except Exception as e:\n",
" print(f\"Chat model test failed with unexpected error: {e}\")\n",
" return False"
],
"metadata": {
"id": "WlGVTItP5t-V"
},
"id": "WlGVTItP5t-V",
"execution_count": 51,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# Set up both models\n",
"embedding_model, chat_model = setup_llm_models()\n",
"\n",
"# Test the models\n",
"print(\"\\n\" + \"=\"*50)\n",
"print(\"TESTING MODELS\")\n",
"print(\"=\"*50)\n",
"\n",
"embedding_works = test_embedding_model(embedding_model)\n",
"chat_works = test_chat_model(chat_model)\n",
"\n",
"# Generate embeddings\n",
"print(\"\\n\" + \"=\"*50)\n",
"print(\"GENERATING EMBEDDINGS\")\n",
"print(\"=\"*50)\n",
"\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "6yi7e2sK5z_9",
"outputId": "44b1c396-93c2-4c17-88c4-4f8f113ec799"
},
"id": "6yi7e2sK5z_9",
"execution_count": 11,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Available models:\n",
" - gpt-4o\n",
" - chatgpt-4o-latest\n",
" - gpt-4o-mini\n",
" - gpt-4o-audio-preview\n",
" - gpt-4o-audio-preview-2024-12-17\n",
" - gpt-4o-audio-preview-2024-10-01\n",
" - gpt-4o-mini-audio-preview\n",
" - gpt-4o-mini-audio-preview-2024-12-17\n",
" - gpt-4.1\n",
" - gpt-4.1-mini\n",
" - gpt-4.1-nano\n",
" - gpt-3.5-turbo\n",
" - gpt-3.5-turbo-16k\n",
" - gpt-4\n",
" - gpt-4-32k\n",
" - gpt-4-1106-preview\n",
" - gpt-4-0125-preview\n",
" - gpt-4-turbo-2024-04-09\n",
" - gpt-4-turbo\n",
" - gpt-4.5-preview-2025-02-27\n",
" - gpt-4.5-preview\n",
" - o1\n",
" - o1-2024-12-17\n",
" - o1-preview\n",
" - o1-mini\n",
" - o3-mini\n",
" - o3\n",
" - o4-mini\n",
" - gpt-3.5-turbo-instruct\n",
" - all-MiniLM-L6-v2-f16\n",
" - all-MiniLM-L6-v2\n",
" - nomic-embed-text-v1\n",
" - nomic-embed-text-v1\n",
" - Llama-3\n",
" - qwen2-1_5b-instruct-q4_0\n",
" - DeepSeek-R1-Distill-Qwen-1\n",
" - Llama-3\n",
" - replit-code-v1_5-3b-newbpe-q4_0\n",
" - orca-mini-3b-gguf2-q4_0\n",
" - Phi-3-mini-4k-instruct\n",
" - mpt-7b-chat\n",
" - orca-2-7b\n",
" - rift-coder-v0-7b-q4_0\n",
" - mpt-7b-chat-newbpe-q4_0\n",
" - em_german_mistral_v01\n",
" - mistral-7b-instruct-v0\n",
" - ghost-7b-v0\n",
" - Nous-Hermes-2-Mistral-7B-DPO\n",
" - mistral-7b-openorca\n",
" - gpt4all-falcon-newbpe-q4_0\n",
" - qwen2\n",
" - DeepSeek-R1-Distill-Qwen-7B-Q4_0\n",
" - Meta-Llama-3\n",
" - Meta-Llama-3-8B-Instruct\n",
" - DeepSeek-R1-Distill-Llama-8B-Q4_0\n",
" - gpt4all-13b-snoozy-q4_0\n",
" - wizardlm-13b-v1\n",
" - orca-2-13b\n",
" - nous-hermes-llama2-13b\n",
" - DeepSeek-R1-Distill-Qwen-14B-Q4_0\n",
" - starcoder-newbpe-q4_0\n",
"\n",
"Using embedding model: sentence-transformers/all-MiniLM-L6-v2 (via CLI)\n",
"Using chat model: orca-mini-3b-gguf2-q4_0\n",
"\n",
"==================================================\n",
"TESTING MODELS\n",
"==================================================\n",
"Embedding model test successful!\n",
"Test embedding dimension: 384\n",
"Sample values: [-0.030803386121988297, 0.06299223005771637, 0.015342089347541332, 0.0027869814075529575, -0.01052077952772379]...\n",
"Testing chat model with sample prompt...\n",
"Chat model test successful!\n",
"Sample response: Archaeology is the scientific study of human history and prehistory through excavation, analysis, and interpretation of artifacts, structures, and other physical remains. It involves the examination ...\n",
"\n",
"==================================================\n",
"GENERATING EMBEDDINGS\n",
"==================================================\n",
"Generating embeddings using sentence-transformers via CLI...\n",
" Processed 5/10 contexts\n",
" Processed 10/10 contexts\n",
"\n",
"Generated 10 embeddings\n",
"Embedding dimension: 384\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# if the test works (everything is set up)\n",
"# then let's turn our data into embeddings.\n",
"# this might take some time.\n",
"df = generate_embeddings(df, embedding_model)"
],
"metadata": {
"id": "WQsSW7dm6flW"
},
"id": "WQsSW7dm6flW",
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"execution_count": 54,
"id": "55bb2012-adb6-450c-97e3-d2f2f47df33d",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 843
},
"id": "55bb2012-adb6-450c-97e3-d2f2f47df33d",
"outputId": "74527bbb-63b0-4d70-dcae-3bff44d03816"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Initialized embedding store with 10 contexts\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 1200x800 with 1 Axes>"
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAABKYAAAMWCAYAAADLc44dAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAryBJREFUeJzs3Wl4FFX+9vG7upPOShIgCTuETUE2WQQRZFEEFRd0UFxmgIiiKCLgMuI4IIqiDiogmxugiH9Qx3FEHFRAlG0QBByVRUQWkUCCkIQkZOs6z4uYfghJoBuTdDp8P9eVS7vqVPWvuvt0zO05pyxjjBEAAAAAAABQwRz+LgAAAAAAAADnJoIpAAAAAAAA+AXBFAAAAAAAAPyCYAoAAAAAAAB+QTAFAAAAAAAAvyCYAgAAAAAAgF8QTAEAAAAAAMAvCKYAAAAAAADgFwRTAAAAAAAA8AuCKQBApfHEE0/IsiwdOXLE36WUav78+bIsS3v37i2359i7d68sy9L8+fPL5fyrVq2SZVlatWpVuZwfZWfo0KGKjIyskOdKSEjQ0KFDz9iupD7Qq1cv9erVq9xqKwtff/21XC6X9u3b5+9Szmn+/P6piM/po48+qi5dupTrcwBAVUMwBQDw2qxZs2RZFv/RfY7ZvXu37r77bjVp0kShoaGKiopSt27dNG3aNJ04caLcnnfbtm164oknyjUELPTMM8/oww8/9KptYXBY2s+zzz5bvsXirPztb3/TrbfeqkaNGkmSbNvW/Pnzdd1116lBgwaKiIhQ69atNWnSJGVnZxc59tT3PDg4WLGxsbrkkkv02GOPaf/+/V7XcfJ5HA6H6tatq759+5YY1Ljdbs2bN0+9evVSjRo1FBISooSEBCUmJmrTpk0lnv9sv6d79epVpLYaNWrooosu0ty5c2Xbtk/n8qeK/N4oyejRo/Xtt9/qo48+8svzA0AgCvJ3AQCAwLFw4UIlJCTo66+/1k8//aRmzZr5u6QqqVGjRjpx4oSCg4P9XYqWLl2qm266SSEhIRo8eLBat26t3NxcrVmzRg8//LB++OEHvfrqq+Xy3Nu2bdPEiRPVq1cvJSQklMtzFHrmmWc0cOBADRgwwOtjbr31Vl199dXFtrdv374MKwsMn332mb9LOK2tW7dq+fLlWrdunWdbVlaWEhMTdfHFF+uee+5RfHy81q9frwkTJmjFihVauXKlLMsqcp7C99y2bR07dkwbN27U1KlTNW3aNL3xxhu65ZZbvKrniiuu0ODBg2WM0Z49ezRr1ixddtllWrp0qa666ipJ0okTJ3TjjTdq2bJl6tGjhx577DHVqFFDe/fu1bvvvqs333xT+/fvV/369Yuc+498T9evX1+TJ0+WJKWkpOitt97SsGHD9OOPP5ZZ4NqjRw+dOHFCLperTM53qtN9b1TE57R27dq6/vrrNWXKFF133XXl/nwAUBUQTAEAvLJnzx6tW7dOH3zwge6++24tXLhQEyZMOONx+fn5sm273P4IqYosy1JoaKi/y9CePXt0yy23qFGjRlq5cqXq1Knj2Xfffffpp59+0tKlS/1YoX916NBBf/7zn/1dRqVQ2fv3vHnz1LBhQ1188cWebS6XS2vXrtUll1zi2XbXXXcpISHBE0716dOnyHlKes/37dunvn37asiQIWrZsqXatWt3xnrOO++8Iue54YYb1LZtW02dOtUTTD388MNatmyZXnrpJY0ePbrI8RMmTNBLL71U7Lxn+z1dKDo6ukhdd999t84//3zNmDFDTz31VIlhuW3bys3N9fo7y+Fw+O37raI+pzfffLNuuukm/fzzz2rSpEmFPCcABDKm8gEAvLJw4UJVr15d/fv318CBA7Vw4cJibQqnu0yZMkVTp05V06ZNFRISom3btkmSduzYoZtvvllxcXEKCwvT+eefr7/97W/FzpOamqqhQ4cqJiZG0dHRSkxMVFZWVpE28+bN02WXXab4+HiFhIToggsu0OzZs0us/T//+Y8uvfRSRUREqFq1aurfv79++OGHYu1WrlzpaRcTE6Prr79e27dv9+r1mTVrllq1aqWQkBDVrVtX9913n1JTU4u1mzlzppo0aaKwsDB17txZq1evLrbuSWlrTJ3p9du3b5/uvfdenX/++QoLC1PNmjV10003nfWUlueff14ZGRl64403ioRShZo1a6YHHnjA8zg/P19PPfWU531PSEjQY489ppycnCLHJSQk6JprrtGaNWvUuXNnhYaGqkmTJnrrrbc8bebPn6+bbrpJktS7d2/P9KKTpzud6X1duXKlHA6Hxo8fX+T533nnHVmW5fm8WJalzMxMvfnmm57n8WatJW8UXuuqVavUqVMnhYWFqU2bNp7r+OCDD9SmTRuFhoaqY8eO2rJlS4nn+fnnn9WvXz9FRESobt26evLJJ2WMKdLGtm1NnTpVrVq1UmhoqGrVqqW7775bx44dK9LOGKNJkyapfv36Cg8PV+/evUvsD5L0ww8/6LLLLlNYWJjq16+vSZMmlTit69TPcOE6Qu+++66efvpp1a9fX6Ghobr88sv1008/FTvem34hSS+//LJatWql8PBwVa9eXZ06ddI777xTYu0n+/DDD3XZZZcVGQHlcrmKhFKFbrjhBknyuu83atRI8+fPV25urp5//nmvjjlVmzZtFBsbqz179kiSDhw4oFdeeUVXXHFFsVBKkpxOpx566KESR0ud6XvaF+Hh4br44ouVmZmplJQUSQX9ZeTIkVq4cKHnO2/ZsmWSpC1btuiqq65SVFSUIiMjdfnll+u///1vkXOWtsbUhg0bdOWVVyo6Olrh4eHq2bOn1q5dW6ymX3/9VcOGDVPdunUVEhKixo0ba8SIEcrNzT3j90ZJn6nk5GQNGzZMtWrVUmhoqNq1a6c333yzSJuTf7e9+uqrnu+4iy66SBs3bixWY2Gg+e9//9u7FxoAznGMmAIAeGXhwoW68cYb5XK5dOutt2r27NnauHGjLrroomJt582bp+zsbA0fPlwhISGqUaOG/ve//+nSSy9VcHCwhg8froSEBO3evVtLlizR008/XeT4m2++WY0bN9bkyZO1efNmvf7664qPj9dzzz3naTN79my1atVK1113nYKCgrRkyRLde++9sm1b9913n6fdggULNGTIEPXr10/PPfecsrKyNHv2bHXv3l1btmzxTPVYvny5rrrqKjVp0kRPPPGETpw4oZdfflndunXT5s2bTzuV7IknntDEiRPVp08fjRgxQjt37vS8PmvXrvWMMpg9e7ZGjhypSy+9VGPGjNHevXs1YMAAVa9evdgfmKfy5vXbuHGj1q1bp1tuuUX169fX3r17NXv2bPXq1Uvbtm1TeHj4aZ/jVEuWLFGTJk1K/OO9JHfeeafefPNNDRw4UA8++KA2bNigyZMna/v27frXv/5VpO1PP/2kgQMHatiwYRoyZIjmzp2roUOHqmPHjmrVqpV69OihUaNGafr06XrsscfUsmVLSfL805v39bLLLtO9996ryZMna8CAAerQoYOSkpJ0//33q0+fPrrnnns857rzzjvVuXNnDR8+XJLUtGnTM15vVlZWiQv1x8TEKCjo//8n1k8//aTbbrtNd999t/785z9rypQpuvbaazVnzhw99thjuvfeeyVJkydP1s0336ydO3fK4fj//+/Q7Xbryiuv1MUXX6znn39ey5Yt04QJE5Sfn68nn3zS0+7uu+/W/PnzlZiYqFGjRmnPnj2aMWOGtmzZUuRzOH78eE2aNElXX321rr76am3evFl9+/ZVbm5ukes4dOiQevfurfz8fD366KOKiIjQq6++qrCwsDO+NoWeffZZORwOPfTQQ0pLS9Pzzz+v22+/XRs2bPC08bZfvPbaaxo1apQGDhyoBx54QNnZ2frf//6nDRs26Lbbbiu1hl9//VX79+9Xhw4dvKr50KFDkqTY2Fivr7Nr165q2rSpPv/8c6+POdmxY8d07Ngxz7S7//znP8rPz9df/vIXn87jy/e0t37++Wc5nU7FxMR4tq1cuVLvvvuuRo4cqdjYWCUkJOiHH37QpZdeqqioKD3yyCMKDg7WK6+8ol69eunLL7887ZpXK1eu1FVXXaWOHTtqwoQJcjgcnv/5sHr1anXu3FmSdPDgQXXu3FmpqakaPny4WrRooV9//VXvv/++srKyzvi9caoTJ06oV69e+umnnzRy5Eg1btxY7733noYOHarU1NQiwbtUEGofP35cd999tyzL0vPPP68bb7xRP//8c5HRZNHR0WratKnWrl2rMWPGnO1LDwDnDgMAwBls2rTJSDKff/65McYY27ZN/fr1zQMPPFCk3Z49e4wkExUVZZKTk4vs69Gjh6lWrZrZt29fke22bXv+fcKECUaSueOOO4q0ueGGG0zNmjWLbMvKyipWZ79+/UyTJk08j48fP25iYmLMXXfdVaTdoUOHTHR0dJHtF154oYmPjze//fabZ9u3335rHA6HGTx4sGfbvHnzjCSzZ88eY4wxycnJxuVymb59+xq32+1pN2PGDCPJzJ071xhjTE5OjqlZs6a56KKLTF5enqfd/PnzjSTTs2dPz7bC13HevHmebd68fiW9JuvXrzeSzFtvveXZ9sUXXxhJ5osvvijWvlBaWpqRZK6//vpS25xs69atRpK58847i2x/6KGHjCSzcuVKz7ZGjRoZSearr77ybEtOTjYhISHmwQcf9Gx77733SqzTl/c1MzPTNGvWzLRq1cpkZ2eb/v37m6ioqGKvY0REhBkyZIhX11r4/pT2s379+mLXum7d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OJVt24qPjy91seuTRzBWpLK8xpYtW2rnzp36+OOPtWzZMv3zn//UrFmzNH78eE2cOLHU42rWrCmp5PCg0Oeff67Bgwerf//+mjNnjs+1SdL333+v+Pj4YsFoSerXr3/aULNFixaSpO+++04XXnjhGc93Nt/TJYmIiPAqbP2j3/EnK+zP//jHP0q91sjISB09erTMnvNs+fJ5PnbsmE/rlAHAuaxq/Rc5AKDMLVy4UPHx8Zo5c2axfR988IH+9a9/ac6cOaf9Q6VwtIevIUdplixZopycHH300UdF/g/2yVO4pP+/gHV8fPxp/9hq1KiRJGnnzp3F9u3YsUOxsbEljpY69diTR7Xk5uZqz549nuctbPfTTz95ptpIBXey27t3r9q2bVtqfd6+fu+//76GDBmiF154wbMtOzu7xLsDeuOaa67Rq6++qvXr1xeZilaSRo0aybZt7dq1q8hCw4cPH1Zqaqrn+n1RWsjl7ftaaMKECdq+fbumTJmiv/71r3r00Uc1ffp0r56rMrBtWz///LNnlJQk/fjjj5LkGVXUtGlTLV++XN26dTttXyx8H3bt2lXk85qSklIsuGnUqJFnNMvJSuonZ8vXfhEREaFBgwZp0KBBys3N1Y033qinn35a48aNU2hoaInPURjynDyS6GQbNmzQDTfcoE6dOundd989q8B6/fr12r17t/785z/7fGxJrrrqKjmdTr399tteLYBeFt/Tf0RcXJzCw8NL/Q51OBzFRggWKuzPUVFRp+3PcXFxioqKOuP3oC99uVGjRvrf//4n27aLjJrasWOHZ//Z2rNnj9q1a3fWxwPAuYQ1pgAApTpx4oQ++OADXXPNNRo4cGCxn5EjR+r48eP66KOPTnueuLg49ejRQ3PnztX+/fuL7DubkROF/9f61Klq8+bNK9KuX79+ioqK0jPPPKO8vLxi5ym8/XmdOnV04YUX6s033ywS4nz//ff67LPPdPXVV5daS58+feRyuTR9+vQi9bzxxhtKS0tT//79JUmdOnVSzZo19dprryk/P9/TbuHChWecvubt6+d0Oou9ni+//LLX68uc6pFHHlFERITuvPNOHT58uNj+3bt3a9q0aZLkeY2mTp1apM2LL74oSZ7XwReFYeCpwZq376tUEDpMmTJFo0eP1oMPPqiHH35YM2bMKLZ2TERExFkHeBVhxowZnn83xmjGjBkKDg7W5ZdfLqngTpZut1tPPfVUsWPz8/M919anTx8FBwfr5ZdfLvJZOfV9kwre0//+97/6+uuvPdtSUlJKHZV1NnzpF4VrRRVyuVy64IILZIwp8XNQqF69emrQoIE2bdpUbN/27dvVv39/JSQk6OOPPz6r4Gbfvn0aOnSoXC6XHn74YZ+PL0mDBg1011136bPPPtPLL79cbL9t23rhhRd04MCBMvue/iOcTqf69u2rf//7357ppVJBMP3OO++oe/fupY4k69ixo5o2baopU6Z4pkOerLA/OxwODRgwQEuWLCnxvSz8PJf2vVGSq6++WocOHdLixYs92/Lz8/Xyyy8rMjJSPXv2POM5SpKWlqbdu3d7fUdTADjXMWIKAFCqjz76SMePH9d1111X4v6LL75YcXFxWrhwoQYNGnTac02fPl3du3dXhw4dNHz4cDVu3Fh79+7V0qVLtXXrVp/q6tu3r1wul6699lrdfffdysjI0Guvvab4+HglJSV52kVFRWn27Nn6y1/+og4dOuiWW25RXFyc9u/fr6VLl6pbt26eP/j/8Y9/6KqrrlLXrl01bNgwnThxQi+//LKio6P1xBNPlFpLXFycxo0bp4kTJ+rKK6/Uddddp507d2rWrFm66KKLPCMoXC6XnnjiCd1///267LLLdPPNN2vv3r2aP3++mjZtesb/y+/N63fNNddowYIFio6O1gUXXKD169dr+fLlnqlMvmratKneeecdDRo0SC1bttTgwYPVunVr5ebmat26dZ7bqktSu3btNGTIEL366qtKTU1Vz5499fXXX+vNN9/UgAEDioyG8daFF14op9Op5557TmlpaQoJCdFll12m+Ph4r97X7OxsDRkyRM2bN9fTTz8tSZo4caKWLFmixMREfffdd54/Yjt27Kjly5frxRdfVN26ddW4cePT3t5ekjZv3qy33367xNftTCPMfBEaGqply5ZpyJAh6tKli/7zn/9o6dKleuyxxzxT9Hr27Km7775bkydP1tatW9W3b18FBwdr165deu+99zRt2jQNHDhQcXFxeuihhzR58mRdc801uvrqq7Vlyxb95z//KTbt6JFHHtGCBQt05ZVX6oEHHlBERIReffVVzyiTsuBLv+jbt69q166tbt26qVatWtq+fbtmzJih/v37n3Fdp+uvv17/+te/iqz7c/z4cfXr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m8W279q1S82aNftD554/f75Gjx6t1NTUP3QeAAAAAABQ1PTp03X8+HFNmTJFkZGRMsZo7dq1SklJ0bRp0/Tss8+qfv36mjNnjhYtWqQ77rhD2dnZpe4zxujpp5/WwIED1b17d0mq0L/nWWPKH/J/kbL+VRBKOapLzljJEVEQTjkifn9cvWB/1r8K2peDK6+8UklJSUV+GjduXC7Pdbby8vL8XQIAAAAAAJVCUlKS1qxZo9GjRysyMlKSZFmWunfvrgMHDqhp06aqX7++JKl///766quvJEmbNm0qdd+3336r4OBgTyglSTExMRV2TQRTFc3kFIyUsjMlR03JcpbcznIW7LczC9qbnDIvJSQkRLVr1y7y43Q69e9//1sdOnRQaGiomjRpookTJyo/P99z3Isvvqg2bdooIiJCDRo00L333quMjAxJ0qpVq5SYmKi0tDRZliXLsvTEE08UXJJl6cMPPyxSQ0xMjObPny9J2rt3ryzL0uLFi9WzZ0+FhoZq4cKFkqTXX39dLVu2VGhoqFq0aKFZs2aV+esBAAAAAEBltnv3btWtW1dRUVHF9qWkpCg+Pt7zOD4+XkePHpXb7T7tvl9++UXR0dF6/vnn9cADD+jpp5/WoUOHKuR6JKbyVby8Xf9/pNSZFji3LMkRU9A+b5fkal3u5a1evVqDBw/W9OnTdemll2r37t0aPny4JGnChAmSJIfDoenTp6tx48b6+eefde+99+qRRx7RrFmzdMkll2jq1KkaP368du7cKUmeFNdbjz76qF544QW1b9/eE06NHz9eM2bMUPv27bVlyxbdddddioiI0JAhQ8r2BQAAAAAA4Bzidrv17bff6oUXXlDDhg31n//8R88995xeeumlCnl+gqmKZEzBQudS6SOlTmX9/hblfisFtyrTu/V9/PHHRUKjq666SseOHdOjjz7qCXyaNGmip556So888ognmBo9erTnmISEBE2aNEn33HOPZs2aJZfLpejoaFmWpdq1a59VXaNHj9aNN97oeTxhwgS98MILnm2NGzfWtm3b9MorrxBMAQAAAADOGU2bNtXBgwd1/PhxVatWrci+uLg4bd261fM4OTlZNWrUkNPpPOO+pk2bqmHDhpKk3r17a/bs2crPz1dQUPnHRkzlq1A5BXffs8J8O8wK+/2ufWU7na93797aunWr52f69On69ttv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Dm/+I44cOSK3261atWoV2V6rVi3t2LGjxGMOHTpUYvtDhw6V+jyTJ0/WxIkTi21PSUlRdnb2WVQOlC3btpWWliZjjBwsqgoEHPowELg6h8QoxZ2pA+4sncjIki3JIUtxwS7VDa+muJBwmeOZSj6e6e9SAZSC38NAxTh+/LjXbb0Opj788EO9+eab6tWrlyRpwIAB6t+/v6699lp99NFHklQlFngcN25ckVFW6enpatCggeLi4hQVxVoB8D/btmVZluLi4vhlCgQg+jAQ2GrbtmqFRyimZk3ZlhRkORTscFSJ/w4GzgX8HgYqRmhoqNdtvQ6mUlJS1KhRI8/j2NhYLV++XP369dPVV1+t119/3bcqfRQbGyun06nDhw8X2X748GHVrl27xGNq167tU3tJCgkJUUhISLHtDoeDLy5UGpZl8ZkEAhh9GAhsDodDocHB9GEgQPF7GCh/vvQvr1s2bNhQ27dvL7KtWrVq+uyzz3TixAndcMMN3ld4Flwulzp27KgVK1Z4ttm2rRUrVqhr164lHtO1a9ci7SXp888/L7U9AAAAAAAAKo7XwVTfvn01b968YtsjIyP16aef+jRM62yNHTtWr732mt58801t375dI0aMUGZmphITEyVJgwcPLrI4+gMPPKBly5bphRde0I4dO/TEE09o06ZNGjlyZLnXCgAAAAAAgNPzeirfxIkTdfDgwRL3VatWTZ9//rk2b95cZoWVZNCgQUpJSdH48eN16NAhXXjhhVq2bJlngfP9+/cXGS52ySWX6J133tHjjz+uxx57TM2bN9eHH36o1q1bl2udAAAAAAAAODPLlOet9KqA9PR0RUdHKy0tjcXPUSnYtq3k5GTFx8czLx4IQPRhILDRh4HARh8GKoYvWYpXPXHRokVeP/kvv/yitWvXet0eAAAAAAAA5yavgqnZs2erZcuWev7554stgC5JaWlp+uSTT3TbbbepQ4cO+u2338q8UAAAAAAAAFQtXq0x9eWXX+qjjz7Syy+/rHHjxikiIkK1atVSaGiojh07pkOHDik2NlZDhw7V999/71nzCQAAAAAAACiN14ufX3fddbruuut05MgRrVmzRvv27dOJEycUGxur9u3bq3379szRBQAAAAAAgNe8DqYKxcbGasCAAeVQCgAAAAAAAM4lDHECAAAAAACAXxBMAQAAAAAAwC8IpgAA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\n"
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"PCA explains 46.94% of total variance\n"
]
}
],
"source": [
"## 4. Embedding Storage and Retrieval System\n",
"\n",
"class ArchaeologicalEmbeddingStore:\n",
" \"\"\"\n",
" A class to store and retrieve archaeological context embeddings.\n",
" \"\"\"\n",
"\n",
" def __init__(self, df: pd.DataFrame):\n",
" self.df = df.copy()\n",
" self.embeddings_matrix = np.array(df['embedding'].tolist())\n",
" print(f\"Initialized embedding store with {len(df)} contexts\")\n",
"\n",
" def search_similar_contexts(self, query_embedding: np.ndarray, top_k: int = 5) -> List[Dict]:\n",
" \"\"\"\n",
" Find the most similar contexts to a query embedding.\n",
" \"\"\"\n",
" # Calculate cosine similarity\n",
" similarities = cosine_similarity([query_embedding], self.embeddings_matrix)[0]\n",
"\n",
" # Get top-k most similar indices\n",
" top_indices = np.argsort(similarities)[-top_k:][::-1]\n",
"\n",
" results = []\n",
" for idx in top_indices:\n",
" context_data = self.df.iloc[idx].to_dict()\n",
" context_data['similarity_score'] = similarities[idx]\n",
" results.append(context_data)\n",
"\n",
" return results\n",
"\n",
" def visualize_embeddings(self, sample_size: int = 100):\n",
" \"\"\"\n",
" Create a 2D visualization of the embeddings using PCA.\n",
" \"\"\"\n",
" # Sample data if too large\n",
" if len(self.df) > sample_size:\n",
" sample_idx = np.random.choice(len(self.df), sample_size, replace=False)\n",
" embeddings_sample = self.embeddings_matrix[sample_idx]\n",
" contexts_sample = self.df.iloc[sample_idx]\n",
" else:\n",
" embeddings_sample = self.embeddings_matrix\n",
" contexts_sample = self.df\n",
"\n",
" # Reduce to 2D using PCA\n",
" pca = PCA(n_components=2, random_state=42)\n",
" embeddings_2d = pca.fit_transform(embeddings_sample)\n",
"\n",
" # Create visualization\n",
" plt.figure(figsize=(12, 8))\n",
"\n",
" # Color by context type\n",
" context_types = contexts_sample['Context_Type'].unique()\n",
" colors = plt.cm.Set3(np.linspace(0, 1, len(context_types)))\n",
"\n",
" for i, context_type in enumerate(context_types):\n",
" mask = contexts_sample['Context_Type'] == context_type\n",
" plt.scatter(embeddings_2d[mask, 0], embeddings_2d[mask, 1],\n",
" c=[colors[i]], label=context_type, alpha=0.7, s=100)\n",
"\n",
" plt.title('Archaeological Context Embeddings (2D PCA Projection)')\n",
" plt.xlabel(f'PC1 ({pca.explained_variance_ratio_[0]:.2%} variance)')\n",
" plt.ylabel(f'PC2 ({pca.explained_variance_ratio_[1]:.2%} variance)')\n",
" plt.legend()\n",
" plt.grid(True, alpha=0.3)\n",
"\n",
" # Add context labels\n",
" for i, row in contexts_sample.iterrows():\n",
" plt.annotate(row['Context_ID'],\n",
" (embeddings_2d[i - contexts_sample.index[0], 0],\n",
" embeddings_2d[i - contexts_sample.index[0], 1]),\n",
" xytext=(5, 5), textcoords='offset points',\n",
" fontsize=8, alpha=0.7)\n",
"\n",
" plt.tight_layout()\n",
" plt.show()\n",
"\n",
" print(f\"PCA explains {pca.explained_variance_ratio_.sum():.2%} of total variance\")\n",
"\n",
"# Initialize the embedding store\n",
"embedding_store = ArchaeologicalEmbeddingStore(df)\n",
"\n",
"# Visualize the embeddings\n",
"embedding_store.visualize_embeddings()"
]
},
{
"cell_type": "code",
"execution_count": 58,
"id": "63ca011a-9447-4082-9390-94b1d5c3608d",
"metadata": {
"id": "63ca011a-9447-4082-9390-94b1d5c3608d"
},
"outputs": [],
"source": [
"## 5. RAG Query System\n",
"\n",
"class ArchaeologicalRAGSystem:\n",
" \"\"\"\n",
" A complete RAG system for querying archaeological context data.\n",
" \"\"\"\n",
"\n",
" def __init__(self, embedding_store, embedding_model, chat_model):\n",
" self.embedding_store = embedding_store\n",
" self.embedding_model = embedding_model\n",
" self.chat_model = chat_model\n",
"\n",
"\n",
" def query(self, user_query: str, top_k: int = 5, include_context: bool = True) -> Dict[str, Any]:\n",
" \"\"\"\n",
" Process a natural language query about archaeological contexts.\n",
" Default is 5 contexts; it would be good to work out a way for the\n",
" code to determine the appropriate number of contexts to return.\n",
" \"\"\"\n",
" results = {\n",
" 'query': user_query,\n",
" 'retrieved_contexts': [],\n",
" 'answer': '',\n",
" 'sources': []\n",
" }\n",
"\n",
" try:\n",
" # Generate embedding for the query\n",
" if self.embedding_model:\n",
" if isinstance(self.embedding_model, str):\n",
" # Using CLI interface\n",
" query_embedding = generate_embeddings_via_cli(user_query, self.embedding_model)\n",
" query_embedding = np.array(query_embedding) if query_embedding else np.random.normal(0, 1, 384)\n",
" else:\n",
" # Using Python API\n",
" query_embedding = np.array(self.embedding_model.embed(user_query))\n",
" else:\n",
" # Fallback: use random embedding for demonstration\n",
" query_embedding = np.random.normal(0, 1, 384) # all-MiniLM-L6-v2 dimension\n",
"\n",
" # Retrieve similar contexts\n",
" similar_contexts = self.embedding_store.search_similar_contexts(\n",
" query_embedding, top_k=top_k\n",
" )\n",
"\n",
" results['retrieved_contexts'] = similar_contexts\n",
"\n",
" # Prepare context for generation\n",
" context_text = self._prepare_context_for_generation(similar_contexts)\n",
"\n",
" # Generate answer using RAG\n",
" if self.chat_model:\n",
" answer = self._generate_answer(user_query, context_text)\n",
" results['answer'] = answer\n",
" else:\n",
" results['answer'] = \"Chat model not available. Here are the most relevant contexts found:\"\n",
"\n",
" # Add sources\n",
" results['sources'] = [ctx['Context_ID'] for ctx in similar_contexts]\n",
"\n",
" except Exception as e:\n",
" results['answer'] = f\"Error processing query: {e}\"\n",
"\n",
" return results\n",
"\n",
" def _prepare_context_for_generation(self, contexts: List[Dict]) -> str:\n",
" \"\"\"\n",
" Prepare retrieved contexts for the generation step.\n",
" \"\"\"\n",
" context_parts = []\n",
"\n",
" for i, ctx in enumerate(contexts, 1):\n",
" # Format dating information\n",
" dating_info = \"\"\n",
" if pd.notna(ctx.get('Earliest_Date_Year')) and pd.notna(ctx.get('Latest_Date_Year')):\n",
" earliest = f\"{ctx['Earliest_Date_Year']} {ctx['Earliest_Date_Era']}\"\n",
" latest = f\"{ctx['Latest_Date_Year']} {ctx['Latest_Date_Era']}\"\n",
" dating_info = f\"Dated {earliest} to {latest}\"\n",
"\n",
" context_part = f\"\"\"\n",
"Context {i} (ID: {ctx['Context_ID']}, Similarity: {ctx['similarity_score']:.3f}):\n",
"- Type: {ctx['Context_Type']}\n",
"- Description: {ctx['Description']}\n",
"- Dating: {dating_info} (Method: {ctx.get('Date_Type', 'Unknown')})\n",
"- Phase: {ctx.get('Phase_Name', 'Unknown')}\n",
"- Group: {ctx.get('Group_Name', 'Unknown')}\n",
"- Sub-Group: {ctx.get('Sub-Group_Name', 'Unknown')}\n",
"- Stratigraphic relationship: {ctx.get('Relationship_Type', 'Unknown')} {ctx.get('Related_Context_ID', '')}\n",
"- Temporal conflict: {ctx.get('Temporal_Conflict', False)}\n",
"- Is redundant: {ctx.get('Is_Redundant', False)}\n",
"\"\"\"\n",
" context_parts.append(context_part)\n",
"\n",
" return \"\\n\".join(context_parts)\n",
"\n",
" def _generate_answer(self, query: str, context: str) -> str:\n",
" \"\"\"\n",
" Generate an answer using the retrieved context via CLI.\n",
" \"\"\"\n",
" prompt = f\"\"\"You are an expert archaeologist analyzing stratigraphic data. Based on the following archaeological context information, please answer the user's question accurately and comprehensively.\n",
"\n",
"ARCHAEOLOGICAL CONTEXTS:\n",
"{context}\n",
"\n",
"USER QUESTION: {query}\n",
"\n",
"Please provide a detailed answer based only on the archaeological evidence provided. Include references to specific context IDs when relevant, and explain any stratigraphic relationships or dating evidence that supports your answer.\n",
"\n",
"ANSWER:\"\"\"\n",
"\n",
" try:\n",
" # Use set_chat function to generate response via CLI\n",
" if isinstance(self.chat_model, str):\n",
" # chat_model is a string (model name), use CLI\n",
" result = set_chat(prompt, self.chat_model)\n",
" if result.returncode == 0:\n",
" return result.stdout.strip()\n",
" else:\n",
" return f\"Error generating answer: {result.stderr}\"\n",
" else:\n",
" # Fallback for old API (shouldn't happen with updated code)\n",
" response = self.chat_model.prompt(prompt)\n",
" return response.text()\n",
" except Exception as e:\n",
" return f\"Error generating answer: {e}\"\n",
"\n",
" def display_results(self, results: Dict[str, Any]):\n",
" \"\"\"\n",
" Display query results in a formatted way.\n",
" \"\"\"\n",
" print(\"=\" * 80)\n",
" print(f\"QUERY: {results['query']}\")\n",
" print(\"=\" * 80)\n",
"\n",
" print(f\"\\nANSWER:\")\n",
" print(results['answer'])\n",
"\n",
" print(f\"\\nSOURCES: {', '.join(results['sources'])}\")\n",
"\n",
" print(f\"\\nRETRIEVED CONTEXTS:\")\n",
" for i, ctx in enumerate(results['retrieved_contexts'], 1):\n",
" # Format dating for display\n",
" dating_display = \"\"\n",
" if pd.notna(ctx.get('Earliest_Date_Year')) and pd.notna(ctx.get('Latest_Date_Year')):\n",
" earliest = f\"{ctx['Earliest_Date_Year']} {ctx['Earliest_Date_Era']}\"\n",
" latest = f\"{ctx['Latest_Date_Year']} {ctx['Latest_Date_Era']}\"\n",
" dating_display = f\"{earliest} to {latest}\"\n",
"\n",
" print(f\"\\n{i}. Context {ctx['Context_ID']} (Similarity: {ctx['similarity_score']:.3f})\")\n",
" print(f\" Type: {ctx['Context_Type']}\")\n",
" print(f\" Description: {ctx['Description'][:100]}...\")\n",
" print(f\" Dating: {dating_display}\")\n",
" print(f\" Phase: {ctx.get('Phase_Name', 'Unknown')}\")\n",
" print(f\" Relationship: {ctx.get('Relationship_Type', '')} {ctx.get('Related_Context_ID', '')}\")\n",
"\n",
"\n",
"# Initialize the RAG system\n",
"rag_system = ArchaeologicalRAGSystem(embedding_store, embedding_model, chat_model)"
]
},
{
"cell_type": "code",
"execution_count": 59,
"id": "6b98a9f8-0cb1-4e8f-b456-d9611d32d449",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"id": "6b98a9f8-0cb1-4e8f-b456-d9611d32d449",
"outputId": "1985fb7a-09d6-4f4c-b185-3a03b124fc65"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Archaeological Context RAG System\n",
"==================================================\n",
"Ask questions about the archaeological contexts!\n",
"Type 'quit' to exit, 'help' for sample queries\n",
"\n",
"\n",
"Enter your query: When was the site abandoned?\n",
"\n",
"Processing query...\n",
"================================================================================\n",
"QUERY: When was the site abandoned?\n",
"================================================================================\n",
"\n",
"ANSWER:\n",
"Based on the archaeological context information provided, the site abandonment can be inferred to have occurred during the Post-Medieval phase, specifically between 1600.0 AD and 1700.0 AD. This conclusion is supported by Context 1 (ID: C008), which is described as a \"Post-medieval demolition layer with brick and tile rubble\" and is dated to this time period using ceramic dating methods.\n",
"\n",
"The stratigraphic relationship of Context 1 (ID: C008) also provides valuable information. It is stated that C008 \"overlies C005\", which means that the demolition layer (C008) was deposited on top of the medieval mortar floor surface (C005). This relationship suggests that the medieval floor surface (C005) was already in place and was subsequently covered by the demolition debris, indicating that the site was abandoned and demolished during the Post-Medieval phase.\n",
"\n",
"Context 3 (ID: C005) provides additional context, as it describes the medieval mortar floor surface with tile fragments, dated to between 1200.0 AD and 1400.0 AD. The fact that C008 overlies C005 implies that the medieval occupation of the site (represented by C005) had ceased, and the site was subsequently abandoned and demolished, as evidenced by the demolition layer (C008).\n",
"\n",
"It is worth noting that Context 2 (ID: C010) and Context 3 (ID: C005) both date to the Medieval phase, between 1200.0 AD and 1400.0 AD. However, these contexts provide information about the construction and occupation of the site during the Medieval phase, rather than the abandonment of the site.\n",
"\n",
"In conclusion, based on the archaeological evidence, specifically the dating and stratigraphic relationship of Context 1 (ID: C008) and its relationship to Context 3 (ID: C005), the site abandonment is inferred to have occurred between 1600.0 AD and 1700.0 AD, during the Post-Medieval phase.\n",
"\n",
"SOURCES: C008, C010, C005\n",
"\n",
"RETRIEVED CONTEXTS:\n",
"\n",
"1. Context C008 (Similarity: 0.260)\n",
" Type: Layer\n",
" Description: Post-medieval demolition layer with brick and tile rubble...\n",
" Dating: 1600.0 AD to 1700.0 AD\n",
" Phase: Post-Medieval\n",
" Relationship: overlies C005\n",
"\n",
"2. Context C010 (Similarity: 0.154)\n",
" Type: Fill\n",
" Description: Stone and mortar fill of foundation trench C009...\n",
" Dating: 1200.0 AD to 1400.0 AD\n",
" Phase: Medieval\n",
" Relationship: fills C009\n",
"\n",
"3. Context C005 (Similarity: 0.154)\n",
" Type: Layer\n",
" Description: Medieval mortar floor surface with tile fragments...\n",
" Dating: 1200.0 AD to 1400.0 AD\n",
" Phase: Medieval\n",
" Relationship: overlies C004\n",
"\n",
"Enter your query: Are there logical inconsistencies in the stratigraphy?\n",
"\n",
"Processing query...\n",
"================================================================================\n",
"QUERY: Are there logical inconsistencies in the stratigraphy?\n",
"================================================================================\n",
"\n",
"ANSWER:\n",
"To assess logical inconsistencies in the stratigraphy, we need to examine the stratigraphic relationships and dating evidence provided for each context. \n",
"\n",
"1. **Stratigraphic Relationships**: \n",
" - Context 1 (C008) overlies Context 5 (C005), indicating that C008 is more recent than C005.\n",
" - Context 2 (C006) is built into Context 5 (C005), suggesting that C006 is contemporary with or slightly earlier than C005, but since it's a feature built into C005, it must predate the deposition of C005.\n",
" - Context 3 (C003) fills Context 2 (C002), implying C003 is later than C002. However, since C002 is not described, we can only consider the information provided for C003 and its relation to other contexts through dating and phase information.\n",
"\n",
"2. **Dating Evidence**:\n",
" - Context 1 (C008) is dated to 1600.0 AD to 1700.0 AD.\n",
" - Context 2 (C006) is dated to 1250.0 AD to 1350.0 AD.\n",
" - Context 3 (C003) is dated to 50.0 AD to 200.0 AD.\n",
"\n",
"Given these points, we can analyze potential inconsistencies:\n",
"- **Temporal Order**: C003 (50.0 AD to 200.0 AD) is the earliest based on its dating. C006 (1250.0 AD to 1350.0 AD) follows, and then C008 (1600.0 AD to 1700.0 AD) is the latest. This temporal order does not inherently suggest any inconsistencies since the events can be sequential.\n",
" \n",
"- **Stratigraphic Order**: The stratigraphic relationship of C006 being built into C005 and C008 overlying C005 indicates that C006 must be earlier than C008, which aligns with their dating (C006 is from the Medieval period, and C008 is from the Post-Medieval period). This relationship does not show any inconsistencies.\n",
"\n",
"However, without explicit information on Context 5 (C005) and Context 2 (C002), we must rely on the provided contexts for analysis. Given the available data:\n",
"- The dating of C003 to the Romano-British phase (50.0 AD to 200.0 AD) and its relationship to other contexts are not directly comparable due to the lack of information on C002 and C005's dating.\n",
"- The sequence from C006 (Medieval) to C008 (Post-Medieval) is consistent with expected chronological sequences.\n",
"\n",
"**Conclusion**: Based on the provided archaeological evidence, there do not appear to be logical inconsistencies in the stratigraphy that can be directly inferred from the relationships and dating of Contexts 1, 2, and 3. The temporal and stratigraphic relationships provided for these contexts are consistent with expected sequences, considering the available information. Any potential inconsistencies might arise from the missing details of Contexts 5 and 2, which are crucial for a comprehensive understanding of the site's stratigraphy.\n",
"\n",
"SOURCES: C008, C006, C003\n",
"\n",
"RETRIEVED CONTEXTS:\n",
"\n",
"1. Context C008 (Similarity: 0.376)\n",
" Type: Layer\n",
" Description: Post-medieval demolition layer with brick and tile rubble...\n",
" Dating: 1600.0 AD to 1700.0 AD\n",
" Phase: Post-Medieval\n",
" Relationship: overlies C005\n",
"\n",
"2. Context C006 (Similarity: 0.367)\n",
" Type: Feature\n",
" Description: Stone-lined hearth with evidence of burning and ash deposits...\n",
" Dating: 1250.0 AD to 1350.0 AD\n",
" Phase: Medieval\n",
" Relationship: built into C005\n",
"\n",
"3. Context C003 (Similarity: 0.362)\n",
" Type: Fill\n",
" Description: Light grey sandy fill of pit C002, containing burnt bone and flint tools...\n",
" Dating: 50.0 AD to 200.0 AD\n",
" Phase: Romano-British\n",
" Relationship: fills C002\n"
]
},
{
"output_type": "error",
"ename": "KeyboardInterrupt",
"evalue": "Interrupted by user",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m/tmp/ipython-input-59-2817233373.py\u001b[0m in \u001b[0;36m<cell line: 0>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 49\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 50\u001b[0m \u001b[0;31m# Uncomment the following line to start an interactive session\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 51\u001b[0;31m \u001b[0minteractive_query_session\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m/tmp/ipython-input-59-2817233373.py\u001b[0m in \u001b[0;36minteractive_query_session\u001b[0;34m()\u001b[0m\n\u001b[1;32m 26\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 27\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 28\u001b[0;31m \u001b[0muser_input\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"\\nEnter your query: \"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstrip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 29\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 30\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0muser_input\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlower\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'quit'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.11/dist-packages/ipykernel/kernelbase.py\u001b[0m in \u001b[0;36mraw_input\u001b[0;34m(self, prompt)\u001b[0m\n\u001b[1;32m 1175\u001b[0m \u001b[0;34m\"raw_input was called, but this frontend does not support input requests.\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1176\u001b[0m )\n\u001b[0;32m-> 1177\u001b[0;31m return self._input_request(\n\u001b[0m\u001b[1;32m 1178\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mprompt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1179\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_parent_ident\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"shell\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.11/dist-packages/ipykernel/kernelbase.py\u001b[0m in \u001b[0;36m_input_request\u001b[0;34m(self, prompt, ident, parent, password)\u001b[0m\n\u001b[1;32m 1217\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyboardInterrupt\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1218\u001b[0m \u001b[0;31m# re-raise KeyboardInterrupt, to truncate traceback\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1219\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mKeyboardInterrupt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Interrupted by user\"\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1220\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1221\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwarning\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Invalid Message:\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mexc_info\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mKeyboardInterrupt\u001b[0m: Interrupted by user"
]
}
],
"source": [
"## 6. Interactive Query Interface\n",
"## This is mostly for someone using Google Colab to power this notebook\n",
"\n",
"def interactive_query_session():\n",
" \"\"\"\n",
" Run an interactive query session for archaeological data.\n",
" \"\"\"\n",
" print(\"Archaeological Context RAG System\")\n",
" print(\"=\" * 50)\n",
" print(\"Ask questions about the archaeological contexts!\")\n",
" print(\"Type 'quit' to exit, 'help' for sample queries\")\n",
" print()\n",
"\n",
" sample_queries = [\n",
" \"What Romano-British contexts were found?\",\n",
" \"Tell me about pit contexts and their fills\",\n",
" \"What evidence is there for domestic activity?\",\n",
" \"Describe the stratigraphic sequence in Phase 2\",\n",
" \"What contexts show evidence of burning or hearth activity?\",\n",
" \"Compare the medieval contexts across different groups\",\n",
" \"Which contexts have dating conflicts?\",\n",
" \"What construction activities are represented?\",\n",
" \"Show me contexts dated using radiocarbon methods\",\n",
" \"What are the latest contexts in the sequence?\"\n",
" ]\n",
"\n",
" while True:\n",
" user_input = input(\"\\nEnter your query: \").strip()\n",
"\n",
" if user_input.lower() == 'quit':\n",
" print(\"Goodbye!\")\n",
" break\n",
"\n",
" elif user_input.lower() == 'help':\n",
" print(\"\\nSample queries you can try:\")\n",
" for i, query in enumerate(sample_queries, 1):\n",
" print(f\"{i}. {query}\")\n",
" continue\n",
"\n",
" elif not user_input:\n",
" continue\n",
"\n",
" # Process the query\n",
" print(\"\\nProcessing query...\")\n",
" results = rag_system.query(user_input)\n",
" rag_system.display_results(results)\n",
"\n",
"\n",
"\n",
"# Uncomment the following line to start an interactive session\n",
"interactive_query_session()"
]
},
{
"cell_type": "code",
"execution_count": 60,
"id": "c5d77b52-551a-4f0d-9b2a-9e1ac18df5d7",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "c5d77b52-551a-4f0d-9b2a-9e1ac18df5d7",
"outputId": "1a112387-0047-41f3-d89a-0123aed8f639"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"DEMONSTRATION QUERIES\n",
"==================================================\n",
"\n",
"Running query: 'What contexts were found dating to the occupation by Rome and what do they tell us?'\n",
"================================================================================\n",
"QUERY: What contexts were found dating to the occupation by Rome and what do they tell us?\n",
"================================================================================\n",
"\n",
"ANSWER:\n",
"Based on the provided archaeological context information, the occupation by Rome, also known as the Romano-British period, is represented by Context 2 (ID: C001). This context is a layer of dark brown silty clay with frequent charcoal flecks and pottery sherds, which has been dated to 100.0 AD to 400.0 AD through ceramic analysis. This dating method suggests that the layer contains ceramic materials that are characteristic of the Romano-British period, allowing for a relatively precise chronology.\n",
"\n",
"The stratigraphic relationship of Context 2 (C001) indicates that it overlies Context 4 (C004), although the details of Context 4 are not provided in the given information. This relationship implies that the occupation deposit represented by Context 2 (C001) is situated above an earlier layer, which could potentially be related to an even earlier phase of occupation or a natural deposit.\n",
"\n",
"It is worth noting that there are no other contexts provided that date specifically to the Romano-British period, suggesting that Context 2 (C001) is currently the primary archaeological evidence for this time frame at the site. The absence of temporal conflict (indicated by \"Temporal conflict: False\" in the context information) and the context not being redundant (\"Is redundant: False\") support the significance and reliability of Context 2 (C001) as a source of information for the Romano-British occupation.\n",
"\n",
"In contrast, Contexts 1 (C009) and 3 (C005) are dated to the Medieval period, spanning from 1200.0 AD to 1400.0 AD, based on architectural methods. These contexts, therefore, relate to a much later period of occupation and construction at the site, with Context 1 (C009) representing a cut for a stone wall foundation and Context 3 (C005) describing a medieval mortar floor surface with tile fragments. The stratigraphic relationship between Context 1 (C009) and Context 3 (C005) shows that the foundation trench (C009) cuts into the layer containing the medieval mortar floor surface (C005), indicating a sequence of construction activities during the Medieval period.\n",
"\n",
"In summary, Context 2 (C001) provides the archaeological evidence for the occupation by Rome, offering insights into the material culture and deposition processes during the Romano-British period through its ceramic content and stratigraphic position. Further excavation and analysis, particularly of Context 4 (C004) and other potential underlying layers, could provide additional details about the site's occupation history during and preceding the Romano-British period.\n",
"\n",
"SOURCES: C009, C001, C005\n",
"\n",
"RETRIEVED CONTEXTS:\n",
"\n",
"1. Context C009 (Similarity: 0.337)\n",
" Type: Cut\n",
" Description: Rectangular foundation trench for stone wall...\n",
" Dating: 1200.0 AD to 1400.0 AD\n",
" Phase: Medieval\n",
" Relationship: cuts C005\n",
"\n",
"2. Context C001 (Similarity: 0.327)\n",
" Type: Layer\n",
" Description: Dark brown silty clay layer with frequent charcoal flecks and pottery sherds...\n",
" Dating: 100.0 AD to 400.0 AD\n",
" Phase: Romano-British\n",
" Relationship: overlies C004\n",
"\n",
"3. Context C005 (Similarity: 0.323)\n",
" Type: Layer\n",
" Description: Medieval mortar floor surface with tile fragments...\n",
" Dating: 1200.0 AD to 1400.0 AD\n",
" Phase: Medieval\n",
" Relationship: overlies C004\n",
"\n",
"--------------------------------------------------------------------------------\n",
"\n",
"Running query: 'Describe any hearths and there associated deposits'\n",
"================================================================================\n",
"QUERY: Describe any hearths and there associated deposits\n",
"================================================================================\n",
"\n",
"ANSWER:\n",
"Based on the provided archaeological context information, there is evidence of a hearth and its associated deposits. The hearth is described in Context 1 (ID: C006), which is a stone-lined hearth featuring evidence of burning and ash deposits. This hearth is dated to the Medieval period, specifically between 1250.0 AD and 1350.0 AD, as determined by radiocarbon dating.\n",
"\n",
"The associated deposit with this hearth is described in Context 2 (ID: C007), which is an ash and charcoal fill of hearth C006. This fill is rich in pottery and animal bone, indicating a high level of activity and occupation around the hearth. The dating of Context 2, between 1250.0 AD and 1350.0 AD, is based on stratigraphic relationships, which supports the contemporaneity of the hearth and its fill. The stratigraphic relationship between Context 1 (C006) and Context 2 (C007) is clearly defined, with C007 filling C006, which suggests a direct association between the hearth and its deposit.\n",
"\n",
"It's worth noting that the hearth (C006) is built into another context (C005), although the details of C005 are not provided. This stratigraphic relationship indicates that the hearth was constructed at a specific point in time, potentially reusing or modifying an existing feature.\n",
"\n",
"In contrast, Context 3 (ID: C001) describes a layer from the Romano-British period, dated between 100.0 AD and 400.0 AD, based on ceramic evidence. While this context mentions charcoal flecks and pottery sherds, it does not describe a hearth or a direct association with one. Therefore, it is not directly relevant to the description of hearths and their associated deposits in the Medieval period.\n",
"\n",
"In summary, the archaeological evidence supports the existence of a stone-lined hearth (Context 1, C006) and its associated ash and charcoal fill (Context 2, C007) during the Medieval period, with both dated to between 1250.0 AD and 1350.0 AD. The stratigraphic relationship between these contexts confirms the direct association between the hearth and its deposit.\n",
"\n",
"SOURCES: C006, C007, C001\n",
"\n",
"RETRIEVED CONTEXTS:\n",
"\n",
"1. Context C006 (Similarity: 0.685)\n",
" Type: Feature\n",
" Description: Stone-lined hearth with evidence of burning and ash deposits...\n",
" Dating: 1250.0 AD to 1350.0 AD\n",
" Phase: Medieval\n",
" Relationship: built into C005\n",
"\n",
"2. Context C007 (Similarity: 0.658)\n",
" Type: Fill\n",
" Description: Ash and charcoal fill of hearth C006, rich in pottery and animal bone...\n",
" Dating: 1250.0 AD to 1350.0 AD\n",
" Phase: Medieval\n",
" Relationship: fills C006\n",
"\n",
"3. Context C001 (Similarity: 0.437)\n",
" Type: Layer\n",
" Description: Dark brown silty clay layer with frequent charcoal flecks and pottery sherds...\n",
" Dating: 100.0 AD to 400.0 AD\n",
" Phase: Romano-British\n",
" Relationship: overlies C004\n",
"\n",
"--------------------------------------------------------------------------------\n",
"\n",
"Running query: 'What is the stratigraphic relationship between pit contexts and surrounding layers?'\n",
"================================================================================\n",
"QUERY: What is the stratigraphic relationship between pit contexts and surrounding layers?\n",
"================================================================================\n",
"\n",
"ANSWER:\n",
"The stratigraphic relationship between pit contexts and surrounding layers can be analyzed based on the provided archaeological context information. \n",
"\n",
"From the given data, we have a pit context, specifically Context 1 (ID: C002), which is a circular pit cut with steep sides and flat bottom. This pit is cut into another context, C004, as indicated by the stratigraphic relationship \"cuts C004\". However, since the details of Context 4 are not provided, we cannot determine the nature of the context that the pit cuts into.\n",
"\n",
"On the other hand, we know that the pit (C002) is filled by Context 2 (ID: C003), a light grey sandy fill containing burnt bone and flint tools, as shown by the stratigraphic relationship \"fills C002\". Both the pit (C002) and its fill (C003) are dated to the Romano-British period, specifically between 50.0 AD and 200.0 AD, based on stratigraphic dating methods.\n",
"\n",
"Regarding the surrounding layers, we have information on Context 3 (ID: C008), which is a post-medieval demolition layer consisting of brick and tile rubble, dated to between 1600.0 AD and 1700.0 AD through ceramic dating. This demolition layer overlies another context, C005, as indicated by the stratigraphic relationship \"overlies C005\". However, since the details of Context 5 are not provided, we cannot determine the nature of the context that the demolition layer overlies.\n",
"\n",
"In conclusion, the stratigraphic relationship between the pit context (C002) and its surrounding fill (C003) is well-defined, with C003 filling C002. However, the relationships between the pit and other surrounding layers, such as the context it cuts into (C004) and the post-medieval demolition layer (C008), are not fully clear due to the lack of information on contexts C004 and C005. Based on the provided data, we can only confirm that the pit and its fill are part of the Romano-British phase, while the demolition layer is part of the post-medieval phase, indicating a significant time gap between these two sets of contexts.\n",
"\n",
"SOURCES: C002, C003, C008\n",
"\n",
"RETRIEVED CONTEXTS:\n",
"\n",
"1. Context C002 (Similarity: 0.491)\n",
" Type: Cut\n",
" Description: Circular pit cut with steep sides and flat bottom, diameter 1.2m...\n",
" Dating: 50.0 AD to 200.0 AD\n",
" Phase: Romano-British\n",
" Relationship: cuts C004\n",
"\n",
"2. Context C003 (Similarity: 0.455)\n",
" Type: Fill\n",
" Description: Light grey sandy fill of pit C002, containing burnt bone and flint tools...\n",
" Dating: 50.0 AD to 200.0 AD\n",
" Phase: Romano-British\n",
" Relationship: fills C002\n",
"\n",
"3. Context C008 (Similarity: 0.426)\n",
" Type: Layer\n",
" Description: Post-medieval demolition layer with brick and tile rubble...\n",
" Dating: 1600.0 AD to 1700.0 AD\n",
" Phase: Post-Medieval\n",
" Relationship: overlies C005\n",
"\n",
"--------------------------------------------------------------------------------\n",
"\n",
"Running query: 'What evidence exists for domestic activities across different phases?'\n",
"================================================================================\n",
"QUERY: What evidence exists for domestic activities across different phases?\n",
"================================================================================\n",
"\n",
"ANSWER:\n",
"The archaeological evidence provided suggests that domestic activities were present across different phases, particularly during the Medieval and Post-Medieval periods. The primary evidence for domestic activities comes from Context 1 (ID: C006) and Context 2 (ID: C007), which are related to hearth activity.\n",
"\n",
"Context 1 (ID: C006) is a stone-lined hearth with evidence of burning and ash deposits, dated to 1250.0 AD to 1350.0 AD through radiocarbon dating. This hearth is associated with the Medieval phase and is categorized under the sub-group \"Hearth construction and use\" (Group: Hearth activity). The presence of a hearth, a common feature of domestic spaces, suggests that domestic activities such as cooking and warmth provision were taking place during this period.\n",
"\n",
"Further evidence for domestic activities during the Medieval phase is provided by Context 2 (ID: C007), which is the ash and charcoal fill of hearth C006. This fill is rich in pottery and animal bone, indicating food preparation and consumption activities. The dating of Context 2, which is based on stratigraphic relationships, also falls within the 1250.0 AD to 1350.0 AD range, supporting the idea that domestic activities were ongoing during this time.\n",
"\n",
"The stratigraphic relationship between Context 1 (ID: C006) and Context 2 (ID: C007) is significant, as Context 2 fills Context 1. This relationship suggests that the hearth was in use for a period, accumulating ash and charcoal, before being filled. The presence of pottery and animal bone in the fill provides additional evidence for domestic activities such as cooking and eating.\n",
"\n",
"While the evidence from Context 1 and Context 2 primarily pertains to the Medieval phase, the site's occupation and activities extend into the Post-Medieval period, as indicated by Context 3 (ID: C008). Context 3 is a post-medieval demolition layer with brick and tile rubble, dated to 1600.0 AD to 1700.0 AD through ceramic dating. Although this context does not directly provide evidence for domestic activities, its stratigraphic relationship to earlier contexts (it overlies Context 5, which is associated with the hearth activity of Context 1) suggests that the site underwent changes and possibly abandonment, which could be related to shifts in domestic activities or the site's use over time.\n",
"\n",
"In summary, the evidence from Context 1 (ID: C006) and Context 2 (ID: C007) demonstrates that domestic activities, specifically those related to hearth use and food preparation, were present during the Medieval phase. The stratigraphic relationships and dating evidence support the interpretation that these activities were part of the site's use during this period. The transition into the Post-Medieval phase, marked by Context 3 (ID: C008), indicates changes at the site, which may reflect alterations in domestic activities or the site's purpose, but direct evidence for domestic activities during this later phase is not provided within the given archaeological contexts.\n",
"\n",
"SOURCES: C006, C007, C008\n",
"\n",
"RETRIEVED CONTEXTS:\n",
"\n",
"1. Context C006 (Similarity: 0.246)\n",
" Type: Feature\n",
" Description: Stone-lined hearth with evidence of burning and ash deposits...\n",
" Dating: 1250.0 AD to 1350.0 AD\n",
" Phase: Medieval\n",
" Relationship: built into C005\n",
"\n",
"2. Context C007 (Similarity: 0.243)\n",
" Type: Fill\n",
" Description: Ash and charcoal fill of hearth C006, rich in pottery and animal bone...\n",
" Dating: 1250.0 AD to 1350.0 AD\n",
" Phase: Medieval\n",
" Relationship: fills C006\n",
"\n",
"3. Context C008 (Similarity: 0.218)\n",
" Type: Layer\n",
" Description: Post-medieval demolition layer with brick and tile rubble...\n",
" Dating: 1600.0 AD to 1700.0 AD\n",
" Phase: Post-Medieval\n",
" Relationship: overlies C005\n",
"\n",
"--------------------------------------------------------------------------------\n",
"\n",
"Running query: 'Which contexts have temporal conflicts and why?'\n",
"================================================================================\n",
"QUERY: Which contexts have temporal conflicts and why?\n",
"================================================================================\n",
"\n",
"ANSWER:\n",
"Based on the provided archaeological context information, none of the contexts have temporal conflicts. According to the data, the \"Temporal conflict\" field is set to \"False\" for all contexts: C008, C009, and C005.\n",
"\n",
"This indicates that the dating evidence and stratigraphic relationships within each context, as well as between contexts, do not suggest any inconsistencies or conflicts in terms of their chronological relationships.\n",
"\n",
"For instance, Context 1 (C008), dated to 1600-1700 AD, overlies Context 3 (C005), which is dated to 1200-1400 AD. This stratigraphic relationship is consistent with the expected chronological order, as the post-medieval demolition layer (C008) would indeed overlie a medieval mortar floor surface (C005).\n",
"\n",
"Similarly, Context 2 (C009), dated to 1200-1400 AD, cuts Context 3 (C005), which is also dated to the same period. This relationship is also consistent, as the construction of a foundation trench (C009) would have occurred during the same medieval phase as the creation of the mortar floor surface (C005).\n",
"\n",
"Therefore, based on the provided archaeological evidence, there are no temporal conflicts between the contexts, and their stratigraphic relationships and dating evidence support a consistent chronological narrative.\n",
"\n",
"SOURCES: C008, C009, C005\n",
"\n",
"RETRIEVED CONTEXTS:\n",
"\n",
"1. Context C008 (Similarity: 0.215)\n",
" Type: Layer\n",
" Description: Post-medieval demolition layer with brick and tile rubble...\n",
" Dating: 1600.0 AD to 1700.0 AD\n",
" Phase: Post-Medieval\n",
" Relationship: overlies C005\n",
"\n",
"2. Context C009 (Similarity: 0.195)\n",
" Type: Cut\n",
" Description: Rectangular foundation trench for stone wall...\n",
" Dating: 1200.0 AD to 1400.0 AD\n",
" Phase: Medieval\n",
" Relationship: cuts C005\n",
"\n",
"3. Context C005 (Similarity: 0.191)\n",
" Type: Layer\n",
" Description: Medieval mortar floor surface with tile fragments...\n",
" Dating: 1200.0 AD to 1400.0 AD\n",
" Phase: Medieval\n",
" Relationship: overlies C004\n",
"\n",
"--------------------------------------------------------------------------------\n",
"\n",
"Running query: 'Compare the dating methods used across different context types'\n",
"================================================================================\n",
"QUERY: Compare the dating methods used across different context types\n",
"================================================================================\n",
"\n",
"ANSWER:\n",
"Based on the archaeological context information provided, we can compare the dating methods used across different context types. \n",
"\n",
"In Context 1 (ID: C006), a feature (stone-lined hearth), the dating method used is Radiocarbon, which provides a date range of 1250.0 AD to 1350.0 AD. This suggests that the hearth was constructed and used during the Medieval phase.\n",
"\n",
"Context 2 (ID: C007), a fill, is dated using the Stratigraphic method, which relies on the layering of deposits and their relationships to other dated contexts. The fill in C007 is dated to the same time period as Context 1 (1250.0 AD to 1350.0 AD), indicating that the fill accumulated during the use of the hearth. The stratigraphic relationship between C006 and C007, where C007 fills C006, supports this dating.\n",
"\n",
"In contrast, Context 3 (ID: C008), a layer, is dated using the Ceramic method, which is based on the analysis of ceramics found within the layer. This context is dated to a later time period (1600.0 AD to 1700.0 AD), corresponding to the Post-Medieval phase. The stratigraphic relationship between C008 and C005 (C008 overlies C005) suggests that C008 is a later deposit, and its dating supports this interpretation.\n",
"\n",
"It is worth noting that Context 1 (C006) and Context 2 (C007) have the same date range but use different dating methods (Radiocarbon and Stratigraphic, respectively). This highlights the importance of using multiple lines of evidence and dating methods to build a robust chronology. The fact that the dates obtained from different methods agree for these two contexts increases our confidence in the dating of the hearth and its associated fill.\n",
"\n",
"The variation in dating methods across context types (Radiocarbon for a feature, Stratigraphic for a fill, and Ceramic for a layer) reflects the different types of deposits and the materials they contain. Radiocarbon dating is often used for organic-rich deposits like hearths, while Stratigraphic dating relies on the relationships between layers. Ceramic dating, on the other hand, is commonly used for layers containing ceramics, as in the case of Context 3.\n",
"\n",
"Overall, the combination of dating methods used across different context types provides a more comprehensive understanding of the site's chronology, highlighting the complexity and nuance of the archaeological record. By considering the stratigraphic relationships and the specific dating methods used for each context, we can build a more detailed picture of the site's occupation and use over time.\n",
"\n",
"SOURCES: C006, C007, C008\n",
"\n",
"RETRIEVED CONTEXTS:\n",
"\n",
"1. Context C006 (Similarity: 0.329)\n",
" Type: Feature\n",
" Description: Stone-lined hearth with evidence of burning and ash deposits...\n",
" Dating: 1250.0 AD to 1350.0 AD\n",
" Phase: Medieval\n",
" Relationship: built into C005\n",
"\n",
"2. Context C007 (Similarity: 0.317)\n",
" Type: Fill\n",
" Description: Ash and charcoal fill of hearth C006, rich in pottery and animal bone...\n",
" Dating: 1250.0 AD to 1350.0 AD\n",
" Phase: Medieval\n",
" Relationship: fills C006\n",
"\n",
"3. Context C008 (Similarity: 0.317)\n",
" Type: Layer\n",
" Description: Post-medieval demolition layer with brick and tile rubble...\n",
" Dating: 1600.0 AD to 1700.0 AD\n",
" Phase: Post-Medieval\n",
" Relationship: overlies C005\n",
"\n",
"--------------------------------------------------------------------------------\n"
]
}
],
"source": [
"# Demonstration queries\n",
"# with slightly convoluted language to avoid simple keyword searches\n",
"def run_demo_queries():\n",
" \"\"\"\n",
" Run some demonstration queries to show the system in action.\n",
" \"\"\"\n",
" demo_queries = [\n",
" \"What contexts were found dating to the occupation by Rome and what do they tell us?\",\n",
" \"Describe any hearths and there associated deposits\",\n",
" \"What is the stratigraphic relationship between pit contexts and surrounding layers?\",\n",
" \"What evidence exists for domestic activities across different phases?\",\n",
" \"Which contexts have temporal conflicts and why?\",\n",
" \"Compare the dating methods used across different context types\"\n",
" ]\n",
"\n",
" print(\"DEMONSTRATION QUERIES\")\n",
" print(\"=\" * 50)\n",
"\n",
" for query in demo_queries:\n",
" print(f\"\\nRunning query: '{query}'\")\n",
" results = rag_system.query(query)\n",
" rag_system.display_results(results)\n",
" print(\"\\n\" + \"-\" * 80)\n",
"\n",
"# Run demonstration\n",
"run_demo_queries()"
]
},
{
"cell_type": "code",
"execution_count": 67,
"id": "a548d5b3-4f86-440b-8d9f-f1efa882f76b",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"id": "a548d5b3-4f86-440b-8d9f-f1efa882f76b",
"outputId": "9bb1cb1c-fd01-4ab0-8585-5cd680d4b559"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"STRATIGRAPHIC RELATIONSHIP ANALYSIS\n",
"==================================================\n",
"Relationship type frequencies:\n",
" overlies: 3\n",
" fills: 3\n",
" cuts: 2\n",
" cut by: 1\n",
" built into: 1\n",
"\n",
"Data quality metrics:\n",
" Temporal conflicts: 0\n",
" Redundant contexts: 0\n",
"\n",
"Dating methods:\n",
" Stratigraphic: 4\n",
" Ceramic: 2\n",
" Architectural: 2\n",
" Geological: 1\n",
" Radiocarbon: 1\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 1500x1000 with 6 Axes>"
],
"image/png": "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O7W5Ut0AuF6MRMc169evn1566SUtWbJEQ4cOzbXN7t27ddddd6lJkyZ69dVX5eHhoUOHDjkKgvXr19err76qV155RY899pjatWsnSbr55psd2zh37py6deumBx54QI888ogqVap02VwTJkyQxWLRCy+8oNOnT+u9995T586dtX379qsasZafbP9kGIZ69uyplStXavDgwWrWrJkWL16sUaNG6eTJkzlGcv/555/6/vvvNWzYMPn5+emDDz7Qvffeq+PHj6t8+fJ55kpLS1PHjh116NAhjRgxQhEREZo3b54GDhyo+Ph4PfPMM46pSJ599llVrVpVzz33nKS8f1r822+/KTs7+4pzpl+0e/dutWvXTv7+/ho9erTc3Nw0ffp0dezYUb///rtuvPFGp/ZPPfWUypUrp7FjxyoyMlLvvfeeRowYoW+++UaS9N577+mpp55ymirl4t85NTVVHTp00MmTJ/X444+revXqWrt2rcaMGaPo6Gi99957slgs+uyzz9SkSRM98cQTjoLI2LFjtXv3bq1atUo+Pj665557dODAAf3vf//TlClTVKFChcs+L5djsVj0yCOPaNKkSTp//ryCgoIcj/38889KTEzMMSotP6/NFStWqFu3bmrRooXGjh0rFxcXR4Hojz/+UOvWrSVdGJ04f/58jRgxQg0aNNC5c+f0559/au/evWrevPlVHw+Aki0sLEzr1q3Trl27Lnshpy+//FJDhgxR69at9dhjj0mSatas6dTmvvvuU+3atfXGG284vgReunSpjhw5okGDBikkJMTxc+rdu3dr/fr1slgsV/0ee/LkSccH1TFjxsjHx0czZszIc9Tw/v379eCDD+rxxx/X0KFDVbduXUnStGnT1LBhQ/Xs2VOurq76+eefNWzYMNntdg0fPtxpGwcPHtT999+vJ554QgMGDNCsWbN03333adGiRerSpYtT2yv1Xbmx2Wy66667tHz5cj3wwAN65plnlJSUpKVLl2rXrl05nuv8uFhs/ecXJBMmTNDLL7+svn37asiQITpz5ow+/PBDtW/fXtu2bbvsdGXvv/++evbsqYcffliZmZmaO3eu7rvvPi1cuFDdu3eXlL/XyT+NGzdO48ePV+fOnfXkk09q//79mjZtmjZt2qQ1a9Y4jUqLi4vTHXfcoXvuuUd9+/bV/Pnz9cILL6hx48bq1q2bpAtT5j399NPq06ePowCwY8cObdiwQQ899JDTvvv27auIiAhNnDhRW7du1YwZMxQcHKy33nrris/tiBEjFBgYqHHjxjkyHzt2zPHl97Xo16+fhg4dmuPf4qZNm3TgwAH95z//cWr/xRdfKCkpScOHD1d6erref/993Xbbbdq5c6fjXGj37t265ZZbVKVKFb344ovy8fHRt99+q969e+u7777T3Xff7fg7TJw40fG3S0xM1ObNm7V169Ycr28AKG5+/vln1ahRI8/P25caMmSIPv/8c/Xp00fPPfecNmzYoIkTJ2rv3r364YcfnNoeOnRIffr00eDBgzVgwAB99tlnGjhwoFq0aKGGDRuqffv2evrpp/XBBx/opZdeUv369SXJ8d8vv/xSAwYMUNeuXfXWW28pNTVV06ZNU9u2bbVt2zaFh4frtttu07BhwzRx4kT17t1bzZs3V3R0tJ566il17txZTzzxhGNbefWx1/sZr2/fvgoPD9fEiRO1fv16ffDBB4qLi3N8YXC1fVR+HTlyRFar1en8Iz/9fWJiombMmKEHH3xQQ4cOVVJSkmbOnKmuXbtq48aNjil1ly5dqgcffFCdOnVy9O979+7VmjVrHF+s5KduAFw3A8jDrFmzDEnGpk2b8mwTEBBg3HDDDY77Y8eONf75spoyZYohyThz5kye29i0aZMhyZg1a1aOxzp06GBIMj755JNcH+vQoYPj/sqVKw1JRpUqVYzExETH8m+//daQZLz//vuOZWFhYcaAAQOuuM3LZRswYIARFhbmuL9gwQJDkvH66687tevTp49hsViMQ4cOOZZJMtzd3Z2W/fXXX4Yk48MPP8yxr3967733DEnGnDlzHMsyMzONNm3aGL6+vk7HHhYWZnTv3v2y2zMMw3j22WcNSca2bduu2NYwDKN3796Gu7u7cfjwYceyU6dOGX5+fkb79u0dyy6+hjp37mzY7Xan/VmtViM+Pt6xrGHDhk7P/UWvvfaa4ePjYxw4cMBp+YsvvmhYrVbj+PHjjmXTp093PDfr1683rFarMXLkSKf13n77bUOScfTo0Xwd6z9dmnH//v2GJGPatGlO7Xr27GmEh4c7jjm/r0273W7Url3b6Nq1q9PzlZqaakRERBhdunRxLAsICDCGDx9+1ccAoHRasmSJYbVaDavVarRp08YYPXq0sXjxYiMzMzNH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VqzoaHdpoTq/jh07plq1auVYntuyvHJJ0po1a9S5c2f5+PgoMDBQFStWdFw/5dJstWrVylHMrlOnjiTlOE+4lr7r8OHDqlu37jVfZD08PFxLly7V4sWLNXXqVFWpUkVnzpyRp6eno83BgwdlGIZq166do6/Yu3fvFS8ku3DhQt10003y9PRUUFCQKlasqGnTpl3X31FSjvMCd3d31ahRI8d5SdWqVXP8DS49/3nhhRfk6+ur1q1bq3bt2ho+fHiOa4NcdD3nGJf2y76+vqpcufJ1nzP2799fx48f1x9//CHpwhcNsbGx+To3kC68Ji9mOHTokAzD0Msvv5zj7z127FhJf58Lvfrqq4qPj1edOnXUuHFjjRo1Sjt27LiuYwGAonA1n0elC32Pi4tLjnOGkJAQBQYGFthnb+nvz2i33XZbjvfhJUuW5Oh3b7nlFj355JPauHGjunbtqkcffTRfxyRd/2e8S/uUmjVrysXFxalfu5o+KjcXz1WWLVumP//8UzExMVq4cKFjGr+L8tPfS9Lnn3+uJk2aOK7lUbFiRf3yyy9O5yXDhg1TnTp11K1bN1WtWlWPPvpojuvJXW3dALgWzImOa3bixAklJCTk+WFXujDaafXq1Vq5cqV++eUXLVq0SN98841uu+02LVmyRFar9Yr7KYwiaF6jwWw2W74yFYS89mNcchHSolCvXj1J0s6dO51GBBaU6zlWu92uLl26aPTo0bk+frH4cdGqVascF5PZuXOn2rRpc5Vpr84DDzygZ599Vl999ZVeeuklzZkzRy1btsz1S4Yrufjl0ttvv53n38HX11fShfnu2rVrpx9++EFLlizR22+/rbfeekvff/+9Y445AGWTu7u7WrVqpVatWqlOnToaNGiQ5s2b5yi4XUlu/W7fvn21du1ajRo1Ss2aNZOvr6/sdrvuuOOOIrtYU265Dh8+rE6dOqlevXp69913Va1aNbm7u+vXX3/VlClTriubGf20j4+P48OedOGDePPmzfXSSy/pgw8+kHShr7BYLPrtt99yzXixn8jNH3/8oZ49e6p9+/aaOnWqKleuLDc3N82aNSvXi3YWhvw8r/Xr19f+/fu1cOFCLVq0SN99952mTp2qV155RePHj7/q7RW1rl27qlKlSpozZ47at2+vOXPmKCQkxOlvm18XX8PPP/98nhd8u3gu3r59ex0+fFg//vijlixZohkzZmjKlCn65JNPNGTIkGs/IAAoZP7+/goNDc31wsqXk9/rV1zv51HpwlzmISEhOR6/9IvzjIwMxwVJDx8+rNTUVHl7e+crZ0F/xsvt+bnePurSc5W85Oc5nzNnjgYOHKjevXtr1KhRCg4OltVq1cSJE50uyB4cHKzt27dr8eLF+u233/Tbb79p1qxZ6t+/vz7//HNJV183AK4FRXRcsy+//FKSrngFZxcXF3Xq1EmdOnXSu+++qzfeeEP//ve/tXLlSnXu3PmaL9yUl0t/wmoYhg4dOqQmTZo4lpUrV07x8fE51j127JjTFCVXky0sLEzLli1TUlKS02j0ffv2OR4vCGFhYdqxY4fsdrvTaPTr2U+3bt1ktVo1Z86cK34DXbFiRXl7e2v//v05Htu3b59cXFxUrVq1q86Q13Nds2ZNJScn56ujvnjhlttvv13u7u6OD5z/fE4K+vUWFBSk7t2766uvvtLDDz+sNWvW5HnRkiu9Ni9O7+Pv75+v461cubKGDRumYcOG6fTp02revLkmTJhAER2AQ8uWLSVdeH+86GrfB+Pi4rR8+XKNHz9er7zyimN5blNGXG2/eejQoRzLc1uWl59//lkZGRn66aefnEaZ5TWlycVRvf/MeeDAAUkXRlZdr5o1a2rDhg3KyspymibkWjVp0kSPPPKIpk+frueff17Vq1dXzZo1ZRiGIiIirvoD4XfffSdPT08tXrzY6QKus2bNytE2v3/Li33s/v37nc6hMjMzdfTo0WsqHEsXPqTff//9uv/++5WZmal77rlHEyZM0JgxY5xG5l+PgwcP6tZbb3XcT05OVnR0tO68887r2q7VatVDDz2k2bNn66233tKCBQs0dOjQXAsKuf07OnDggOP1ePE5dXNzy9dzGRQUpEGDBmnQoEFKTk5W+/btNW7cOIroAIq9u+66S59++qnWrVt3xYFQYWFhstvtOnjwoOMX2ZIUGxur+Pj4a/pMfLnPo9KFQm5+3ofHjh2rvXv36p133tELL7ygF1980fFF+JX2JV3fZ7yDBw86/XLv0KFDstvtTuc4V9NHFbb58+erRo0a+v77752ek9wGfri7u6tHjx7q0aOH7Ha7hg0bpunTp+vll19WrVq1rqpuAFwrpnPBNVmxYoVee+01RURE5Dl3qXTh59+XujjC9uJo4YvzbuVW1L4WX3zxhdPPwObPn6/o6GinTqdmzZpav369MjMzHcsWLlyYYxqSq8l25513ymaz6aOPPnJaPmXKFFkslgIrbN55552KiYnRN99841iWnZ2tDz/8UL6+vurQocNVb7NatWoaOnSolixZog8//DDH43a7XZMnT9aJEydktVp1++2368cff3T6WVhsbKy+/vprtW3b1vFzvKvh4+OT6/Pct29frVu3TosXL87xWHx8vLKzsx33hw4dKrvdrpkzZ+rTTz+Vq6urBg8e7PRtd0G/3qQLVznfs2ePRo0aJavVqgceeCDXdld6bbZo0UI1a9bUO++8o+Tk5BzrnzlzRtKFX0xc+rP74OBghYaGOv5dAShbVq5cmetoqotzYP7z1zF5vd/m5eKHqku3n9sXhlfzHtu1a1etW7dO27dvdyw7f/6803UmriVbQkJCrkVhSTp16pR++OEHx/3ExER98cUXatasWa6jy67Wvffeq7Nnz+Y4F7g049UYPXq0srKy9O6770qS7rnnHlmtVo0fPz7HNg3D0Llz5/LcltVqlcVikc1mcyyLjIzUggULcrTN7+ukc+fOcnd31wcffOCUZ+bMmUpISFD37t2vuI1LXXoM7u7uatCggQzDUFZW1lVvLy+ffvqp0/amTZum7OzsAjln69evn+Li4vT4448rOTnZaV7Yf1qwYIFjTnNJ2rhxozZs2ODIEBwcrI4dO2r69OlOX4ZddPHcQMr5vPn6+qpWrVqcGwAoEUaPHi0fHx8NGTJEsbGxOR4/fPiw3n//fUlyfNl56bnIxb7yWvqevM5hunbtKn9/f73xxhu59kH/fB/esGGD3nnnHY0cOVLPPfecRo0apY8++ijHdcty62ML4jPexx9/7HT/4mf7S/u1/PZRhS2387gNGzZo3bp1Tu0u7d9cXFwcA9EuPjdXUzcArhUj0XFFv/32m/bt26fs7GzFxsZqxYoVWrp0qcLCwvTTTz9ddjTQq6++qtWrV6t79+4KCwvT6dOnNXXqVFWtWlVt27aVdKGgHRgYqE8++UR+fn7y8fHRjTfemOfcp1cSFBSktm3batCgQYqNjdV7772nWrVqaejQoY42Q4YM0fz583XHHXeob9++Onz4sObMmeN0oc+rzdajRw/deuut+ve//63IyEg1bdpUS5Ys0Y8//qiRI0fm2Pa1euyxxzR9+nQNHDhQW7ZsUXh4uObPn+8YAZ3fi7FcavLkyTp8+LCefvppff/997rrrrtUrlw5HT9+XPPmzdO+ffscxeHXX39dS5cuVdu2bTVs2DC5urpq+vTpysjI0KRJk65p/y1atNC0adP0+uuvq1atWgoODtZtt92mUaNG6aefftJdd92lgQMHqkWLFkpJSdHOnTs1f/58RUZGqkKFCpo1a5Z++eUXzZ49W1WrVpV04aThkUce0bRp0zRs2DDHfiTp3//+tx544AG5ubmpR48e+bqISl66d++u8uXLa968eerWrZuCg4NzbXel16aLi4tmzJihbt26qWHDhho0aJCqVKmikydPauXKlfL399fPP/+spKQkVa1aVX369FHTpk3l6+urZcuWadOmTZo8efI1HweAkuupp55Samqq7r77btWrV0+ZmZlau3atvvnmG4WHhztdoLtFixZatmyZ3n33XYWGhioiIkI33nhjntv29/dX+/btNWnSJGVlZalKlSpasmSJjh49mqPt1bzHjh49WnPmzFGXLl301FNPycfHRzNmzFD16tV1/vz5fI2EvvjLox49ejg+CP73v/9VcHBwrgXHOnXqaPDgwdq0aZMqVaqkzz77TLGxsXkW3a9W//799cUXX+hf//qXNm7cqHbt2iklJUXLli3TsGHD1KtXr6veZoMGDXTnnXdqxowZevnll1WzZk29/vrrGjNmjCIjI9W7d2/5+fnp6NGj+uGHH/TYY4/p+eefz3Vb3bt317vvvqs77rhDDz30kE6fPq2PP/5YtWrVyjF3dn5fJxUrVtSYMWM0fvx43XHHHerZs6f279+vqVOnqlWrVtf0wfz2229XSEiIbrnlFlWqVEl79+7VRx99pO7du1/zeU5uMjMz1alTJ/Xt29eRuW3bturZs+d1b/uGG25Qo0aNNG/ePNWvX1/NmzfPtV2tWrXUtm1bPfnkk8rIyNB7772n8uXLO/0c/eOPP1bbtm3VuHFjDR06VDVq1FBsbKzWrVunEydO6K+//pJ04bXSsWNHtWjRQkFBQdq8ebPmz5+vESNGXPfxAEBhq1mzpr7++mvdf//9ql+/vvr3769GjRo5zmnmzZungQMHSpKaNm2qAQMG6NNPP1V8fLw6dOigjRs36vPPP1fv3r2dfmWUX82aNZPVatVbb72lhIQEeXh46LbbblNwcLCmTZumfv36qXnz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AAAAAAAAkAfmRAcAAAAAAAAAIA8U0QEAAAAAAAAAyANzogMAAFPZ7XadOnVKfn5+slgsZscBAMDBMAwlJSUpNDRULi6MQbtW9PUAgOIqv309RXQAAGCqU6dOqVq1ambHAAAgT1FRUapatarZMUos+noAQHF3pb6eIjoAADCVn5+fpAsnLf7+/ianAQDgb4mJiapWrZqjr8K1oa8HABRX+e3rKaIDAABTXfxZt7+/Px+sAQDFElOQXB/6egBAcXelvp5J3QAAAAAAAAAAyANFdAAAAAAAAAAA8kARHQAAAAAAAACAPFBEBwAAAAAAAAAgDxTRAQAAAAAAAADIA0V0AAAAAAAAAADyQBEdAAAAAAAAAIA8UEQHAAAAAAAAACAPFNEBAAAAAAAAAMgDRXQAAOAwbdo0NWnSRP7+/vL391ebNm3022+/XXadefPmqV69evL09FTjxo3166+/FlFaAABQFMaNGyeLxeJ0q1evntmxAAAoMhTRAQCAQ9WqVfXmm29qy5Yt2rx5s2677Tb16tVLu3fvzrX92rVr9eCDD2rw4MHatm2bevfurd69e2vXrl1FnBwAABSmhg0bKjo62nH7888/zY4EAECRsRiGYZgdAgAAFF9BQUF6++23NXjw4ByP3X///UpJSdHChQsdy2666SY1a9ZMn3zySb62n5iYqICAACUkJMjf37/AcgMAcL3ooy4YN26cFixYoO3bt1/T+jyPAIDiKr99FCPRAQBArmw2m+bOnauUlBS1adMm1zbr1q1T586dnZZ17dpV69atK4qIAACgiBw8eFChoaGqUaOGHn74YR0/ftzsSAAAFBlXswMAAIDiZefOnWrTpo3S09Pl6+urH374QQ0aNMi1bUxMjCpVquS0rFKlSoqJiclz+xkZGcrIyHDcT0xMLJjgAACgUNx4442aPXu26tatq+joaI0fP17t2rXTrl275Ofnl6M9fT0AoLShiA4AAJzUrVtX27dvV0JCgubPn68BAwbo999/z7OQfrUmTpyo8ePHF8i2riT8xV+KZD/XK/LN7mZHyDeeUwAoe7p16+b4/yZNmujGG29UWFiYvv3221yneyuKvr6k9EfFGX0lAOQf07kAAAAn7u7uqlWrllq0aKGJEyeqadOmev/993NtGxISotjYWKdlsbGxCgkJyXP7Y8aMUUJCguMWFRVVoPkBAEDh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SThx4gQiIyPh6uoKADA1NYUkSejSpYtqDoaIiIiIiIiIiHItJtGJKM9JSEjAwYMH0b9/f+jr62danpOhWWxtbbFz504AwP379/H06VMsWrToW4dKRERERERERER5HIdzIaI8JywsDEIIlCpV6qu3oa6uDjMzMwCApaUlx0QnIiIiIiIiIqIssSc6EeU5QghVh0BERERERERERD8JJtGJKM8pXrw4JEn67OShamofLm8fJ9zT0tK+e2xERERERERERJS/MIlORHmOmZkZ3N3dsWzZMrx9+zbT8sTERFhYWAAAnj59qij/eJJRANDS0gIAZGRkfL9giYiIiIiIiIgoT2MSnYjypGXLliEjIwNVq1bFzp07ERoairt372Lx4sWoUaMGdHV1Ub16dcyaNQt3797FyZMnMX78eKVtFClSBJIkYd++fXj+/DnevHmjoqMhIiIiIiIiIqLcikl0IsqTihYtimvXrsHV1RXDhg2Dk5MT3NzcEBwcjBUrVgAA1q5di/T0dFSqVAl+fn6YPn260jZsbGwwZcoUjB49GlZWVhgwYIAqDoWIiIiIiIiIiHIxDVUHQET0taytrbF06VIsXbo0y+WlS5fGuXPnlMo+nZR0woQJmDBhwneLkYiIiIiIiIiI8jb2RCciIiIiIiIiIiIiygaT6ERERERERERERERE2WASnYiIiIiIiIiIiIgoG0yiExERERERERERERFlg0l0IiIiIiIiIiIiIqJsMIlORERERERERERERJQNJtGJiIiIiIiIiIiIiLLBJDoRERERERERERERUTaYRCciIiIiIiIiIiIiygaT6ERERERERERERERE2WASnYiIiIiIiIiIiIgoG0yiExERERERERERERFlg0l0IiIiIiIiIiIiIqJsMIlORERERERERERERJQNJtGJiIiIiIiIiIiIiLLBJDoRERERERERERERUTaYRCciIiIiIiIiIiIiygaT6ERERERERERERERE2WASnYiIiIiIiIiIiIgoG0yiExERUSbLli2Dvb09dHR0UK1aNVy6dOmz9bdv345SpUpBR0cH5cqVw4EDB35QpERERPSjfGn7gIiIKL9gEp2IiIiUbNu2DUOHDsWkSZNw7do1ODs7w93dHXFxcVnWP3fuHHx8fNC9e3dcv34dXl5e8PLyQkhIyA+OnIiIiL6XL20fEBER5SdM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JtGJiIiIiIiIiOibePDgAQYMGIDTp09j2rRpGD58uNLyFy9e4Pjx43B2dkbx4sVVFCUR0ZdhEp2IiIiIiIiIiL6Z8PBw9OvXD+rq6hg7dix++eUXAEBaWho0NTVVHB0R0ZdTU3UARERERERERESUfzg6OmLp0qUQQmD69Ok4e/YsADCBTkR5FpPoRERERERERET0TRUvXhyLFy+GpqYmhg8fjgsXLqg6JCKir8YkOhERERERERERfXPFixeHv78/ChcujEKFCqk6HCKir8Yx0YmIiIiIiIiI6LtJTU2FlpaWqsMgIvpqTKITEREREREREREREWWDw7kQEREREREREREREWWDSXQiIiIiIiIiIiIiomwwiU5ERERERERERERElA0m0YmIiIiIiIiIiIiIssEkOhERERERERERERFRNphEJyIiIiIiIiIiIiLKBpPoRERERERERERERETZYBKdiIiIiIiIiIiIiCgbTKITEREREREREREREWWDSXQiIiIiIiIiIiIiomwwiU5ERERERERERERElA0m0YmIiIiIiIiIiIiIssEkOhERERERERERERFRNphEJyIiIiIiIiIiIiLKBpPoRERERERERERERETZYBKd6CP29vbo0qWLqsP44SRJwoABA777fgIDAyFJEiIjI7/7vlShS5cusLe3V3UYRET0H/2s7YEfITQ0FI0aNYKxsTEkSUJQUJCqQyIiIsrTJk+eDEmSEB8fr+pQiPI1JtEpV5InW+U/Ojo6KFSoENzd3bF48WK8fv36q7d97tw5TJ48GYmJid8u4G9Afqw9evTIcvm4ceMUdb7m5phbj/tr2dvbo1mzZlkuu3LlCiRJQmBg4I8NiogoD/j4/vq5nxMnTqg61Fzv03NmZGSEunXrYv/+/aoOLdfy9fXFP//8gxkzZmDjxo2oXLnyZ+u/evUKU6ZMgbOzMwwMDKCrqwsnJyeMGjUKT548+W5xJicnY/LkyT/k72DLli1YuHDhd98PEVFeEB4ejt69e6No0aLQ0dGBkZERatWqhUWLFuHdu3ffbb937tzB5MmTf0iHr99++y1Pf4n8119/oXnz5rCysoKWlhbMzMxQp04dzJs3D69evVJ1eETfjYaqAyD6nKlTp8LBwQFpaWmIjY3FiRMn4Ofnh/nz52Pv3r0oX778F2/z3LlzmDJlCrp06QITExOl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\n"
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"\n",
"Phase analysis:\n",
" Context_Count Dominant_Type Earliest_Year Latest_Year\n",
"Phase_Name \n",
"Medieval 5 Fill 1200.0 1400.0\n",
"Natural 1 Layer NaN NaN\n",
"Post-Medieval 1 Layer 1600.0 1700.0\n",
"Romano-British 3 Layer 50.0 400.0\n",
"CONTEXT NETWORK ANALYSIS\n",
"==================================================\n",
"Found 8 connected components:\n",
" Component 1: C001, C004, C002\n",
" PHASING: P1, P0\n",
"\n",
" Component 2: C003\n",
" PHASING: P1\n",
"\n",
" Component 3: C005\n",
" PHASING: P2\n",
"\n",
" Component 4: C006\n",
" PHASING: P2\n",
"\n",
" Component 5: C007\n",
" PHASING: P2\n",
"\n",
" Component 6: C008\n",
" PHASING: P3\n",
"\n",
" Component 7: C009\n",
" PHASING: P2\n",
"\n",
" Component 8: C010\n",
" PHASING: P2\n",
"\n"
]
}
],
"source": [
"# 7. Further Analysis\n",
"\n",
"def analyze_stratigraphic_relationships(df: pd.DataFrame):\n",
" \"\"\"\n",
" Analyze and visualize stratigraphic relationships in the dataset.\n",
" \"\"\"\n",
" print(\"STRATIGRAPHIC RELATIONSHIP ANALYSIS\")\n",
" print(\"=\" * 50)\n",
"\n",
" # Analyze relationship types\n",
" relationship_counts = df['Relationship_Type'].value_counts()\n",
" print(\"Relationship type frequencies:\")\n",
" for rel_type, count in relationship_counts.items():\n",
" print(f\" {rel_type}: {count}\")\n",
"\n",
" # Analyze temporal conflicts\n",
" temporal_conflicts = df['Temporal_Conflict'].sum() if 'Temporal_Conflict' in df.columns else 0\n",
" redundant_contexts = df['Is_Redundant'].sum() if 'Is_Redundant' in df.columns else 0\n",
"\n",
" print(f\"\\nData quality metrics:\")\n",
" print(f\" Temporal conflicts: {temporal_conflicts}\")\n",
" print(f\" Redundant contexts: {redundant_contexts}\")\n",
"\n",
" # Analyze dating methods\n",
" if 'Date_Type' in df.columns:\n",
" dating_methods = df['Date_Type'].value_counts()\n",
" print(f\"\\nDating methods:\")\n",
" for method, count in dating_methods.items():\n",
" print(f\" {method}: {count}\")\n",
"\n",
" # Visualize the data\n",
" plt.figure(figsize=(15, 10))\n",
"\n",
" # Context types\n",
" plt.subplot(2, 3, 1)\n",
" context_type_counts = df['Context_Type'].value_counts()\n",
" plt.pie(context_type_counts.values, labels=context_type_counts.index, autopct='%1.1f%%')\n",
" plt.title('Distribution of Context Types')\n",
"\n",
" # Relationship types\n",
" plt.subplot(2, 3, 2)\n",
" relationship_counts.plot(kind='bar')\n",
" plt.title('Stratigraphic Relationship Types')\n",
" plt.xticks(rotation=45)\n",
"\n",
" # Phases\n",
" plt.subplot(2, 3, 3)\n",
" if 'Phase_Name' in df.columns:\n",
" phase_counts = df['Phase_Name'].value_counts()\n",
" plt.bar(phase_counts.index, phase_counts.values)\n",
" plt.title('Contexts by Phase')\n",
" plt.xticks(rotation=45)\n",
"\n",
" # Dating methods\n",
" plt.subplot(2, 3, 4)\n",
" if 'Date_Type' in df.columns:\n",
" dating_methods.plot(kind='bar')\n",
" plt.title('Dating Methods Used')\n",
" plt.xticks(rotation=45)\n",
"\n",
" # Temporal range visualization\n",
" plt.subplot(2, 3, 5)\n",
" if 'Earliest_Date_Year' in df.columns and 'Latest_Date_Year' in df.columns:\n",
" # Filter out non-numeric dates\n",
" dated_contexts = df.dropna(subset=['Earliest_Date_Year', 'Latest_Date_Year'])\n",
" if not dated_contexts.empty:\n",
" for _, ctx in dated_contexts.iterrows():\n",
" plt.plot([ctx['Earliest_Date_Year'], ctx['Latest_Date_Year']],\n",
" [ctx['Context_ID'], ctx['Context_ID']], 'b-', alpha=0.6)\n",
" plt.scatter([ctx['Earliest_Date_Year'], ctx['Latest_Date_Year']],\n",
" [ctx['Context_ID'], ctx['Context_ID']], c='red', s=20)\n",
" plt.xlabel('Year')\n",
" plt.ylabel('Context ID')\n",
" plt.title('Temporal Ranges of Contexts')\n",
"\n",
" # Groups\n",
" plt.subplot(2, 3, 6)\n",
" if 'Group_Name' in df.columns:\n",
" group_counts = df['Group_Name'].value_counts()\n",
" plt.bar(range(len(group_counts)), group_counts.values)\n",
" plt.title('Contexts by Group')\n",
" plt.xticks(range(len(group_counts)), group_counts.index, rotation=45)\n",
"\n",
" plt.tight_layout()\n",
" plt.show()\n",
"\n",
" # Print phase analysis\n",
" if 'Phase_Name' in df.columns:\n",
" print(f\"\\nPhase analysis:\")\n",
" phase_analysis = df.groupby('Phase_Name').agg({\n",
" 'Context_ID': 'count',\n",
" 'Context_Type': lambda x: x.value_counts().index[0], # Most common type\n",
" 'Earliest_Date_Year': 'min',\n",
" 'Latest_Date_Year': 'max'\n",
" }).round(0)\n",
" phase_analysis.columns = ['Context_Count', 'Dominant_Type', 'Earliest_Year', 'Latest_Year']\n",
" print(phase_analysis)\n",
"\n",
"def find_context_networks(df: pd.DataFrame):\n",
" \"\"\"\n",
" Identify networks of related contexts based on stratigraphic relationships.\n",
" \"\"\"\n",
" print(\"CONTEXT NETWORK ANALYSIS\")\n",
" print(\"=\" * 50)\n",
"\n",
" # Build a simple network of relationships\n",
" networks = {}\n",
"\n",
" for _, row in df.iterrows():\n",
" context_id = row['Context_ID']\n",
" related = row['Related_Context_ID'].split(',') if pd.notna(row['Related_Context_ID']) else []\n",
" related = [ctx.strip() for ctx in related if ctx.strip()]\n",
"\n",
" networks[context_id] = related\n",
"\n",
" # Find connected components\n",
" visited = set()\n",
" components = []\n",
"\n",
" def dfs(context, component):\n",
" if context in visited or context not in networks:\n",
" return\n",
" visited.add(context)\n",
" component.append(context)\n",
" for related in networks[context]:\n",
" dfs(related, component)\n",
"\n",
" for context in networks:\n",
" if context not in visited:\n",
" component = []\n",
" dfs(context, component)\n",
" if component:\n",
" components.append(component)\n",
"\n",
" print(f\"Found {len(components)} connected components:\")\n",
" for i, component in enumerate(components, 1):\n",
" print(f\" Component {i}: {', '.join(component)}\")\n",
"\n",
" # Show the stratigraphic sequence for this component\n",
" component_df = df[df['Context_ID'].isin(component)]\n",
" print(f\" PHASING: {', '.join(component_df['Phase_ID'].unique())}\")\n",
" print()\n",
"\n",
"# Run advanced analyses\n",
"analyze_stratigraphic_relationships(df)\n",
"find_context_networks(df)"
]
},
{
"cell_type": "code",
"source": [
"df"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 921
},
"id": "LHr6O7INI3QX",
"outputId": "b296fa85-4a65-4b5a-8096-a86e6a25c64f"
},
"id": "LHr6O7INI3QX",
"execution_count": 63,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" Context_ID Context_Type Description \\\n",
"0 C001 Layer Dark brown silty clay layer with frequent char... \n",
"1 C002 Cut Circular pit cut with steep sides and flat bot... \n",
"2 C003 Fill Light grey sandy fill of pit C002, containing ... \n",
"3 C004 Layer Compact yellow clay natural subsoil layer \n",
"4 C005 Layer Medieval mortar floor surface with tile fragments \n",
"5 C006 Feature Stone-lined hearth with evidence of burning an... \n",
"6 C007 Fill Ash and charcoal fill of hearth C006, rich in ... \n",
"7 C008 Layer Post-medieval demolition layer with brick and ... \n",
"8 C009 Cut Rectangular foundation trench for stone wall \n",
"9 C010 Fill Stone and mortar fill of foundation trench C009 \n",
"\n",
" Earliest_Date_Year Earliest_Date_Era Latest_Date_Year Latest_Date_Era \\\n",
"0 100.0 AD 400.0 AD \n",
"1 50.0 AD 200.0 AD \n",
"2 50.0 AD 200.0 AD \n",
"3 NaN None NaN None \n",
"4 1200.0 AD 1400.0 AD \n",
"5 1250.0 AD 1350.0 AD \n",
"6 1250.0 AD 1350.0 AD \n",
"7 1600.0 AD 1700.0 AD \n",
"8 1200.0 AD 1400.0 AD \n",
"9 1200.0 AD 1400.0 AD \n",
"\n",
" Date_Type Phase_ID Phase_Name Group_ID Group_Name \\\n",
"0 Ceramic P1 Romano-British G1 Occupation deposits \n",
"1 Stratigraphic P1 Romano-British G2 Pit group \n",
"2 Stratigraphic P1 Romano-British G2 Pit group \n",
"3 Geological P0 Natural G0 Natural \n",
"4 Architectural P2 Medieval G3 Domestic structures \n",
"5 Radiocarbon P2 Medieval G4 Hearth activity \n",
"6 Stratigraphic P2 Medieval G4 Hearth activity \n",
"7 Ceramic P3 Post-Medieval G5 Demolition \n",
"8 Architectural P2 Medieval G6 Wall construction \n",
"9 Stratigraphic P2 Medieval G6 Wall construction \n",
"\n",
" Sub-Group_ID Sub-Group_Name Relationship_Type \\\n",
"0 SG1 General occupation overlies \n",
"1 SG2 Pit cutting and filling cuts \n",
"2 SG2 Pit cutting and filling fills \n",
"3 None None cut by \n",
"4 SG3 Floor surfaces overlies \n",
"5 SG4 Hearth construction and use built into \n",
"6 SG4 Hearth construction and use fills \n",
"7 SG5 Site abandonment overlies \n",
"8 SG6 Foundation construction cuts \n",
"9 SG6 Foundation construction fills \n",
"\n",
" Related_Context_ID Temporal_Conflict Is_Redundant \\\n",
"0 C004 False False \n",
"1 C004 False False \n",
"2 C002 False False \n",
"3 C002 False False \n",
"4 C004 False False \n",
"5 C005 False False \n",
"6 C006 False False \n",
"7 C005 False False \n",
"8 C005 False False \n",
"9 C009 False False \n",
"\n",
" prepared_text \\\n",
"0 Context C001, Type: Layer | Description: Dark ... \n",
"1 Context C002, Type: Cut | Description: Circula... \n",
"2 Context C003, Type: Fill | Description: Light ... \n",
"3 Context C004, Type: Layer | Description: Compa... \n",
"4 Context C005, Type: Layer | Description: Medie... \n",
"5 Context C006, Type: Feature | Description: Sto... \n",
"6 Context C007, Type: Fill | Description: Ash an... \n",
"7 Context C008, Type: Layer | Description: Post-... \n",
"8 Context C009, Type: Cut | Description: Rectang... \n",
"9 Context C010, Type: Fill | Description: Stone ... \n",
"\n",
" embedding \n",
"0 [-0.0022556865587830544, 0.05589134246110916, ... \n",
"1 [-0.03904779255390167, 0.0598103292286396, -0.... \n",
"2 [-0.08637669682502747, 0.04328100010752678, -0... \n",
"3 [-0.0745324045419693, 0.08791496604681015, 0.0... \n",
"4 [-0.10213303565979004, 0.12052890658378601, 0.... \n",
"5 [-0.009370672516524792, 0.14452221989631653, 0... \n",
"6 [-0.00016425596550107002, 0.11362960189580917,... \n",
"7 [-0.073366180062294, 0.11150677502155304, 0.03... \n",
"8 [-0.06563512980937958, 0.08968332409858704, 0.... \n",
"9 [-0.07496478408575058, 0.07007502764463425, 0.... "
],
"text/html": [
"\n",
" <div id=\"df-86930272-c7a4-4720-ace9-702491ab37fc\" class=\"colab-df-container\">\n",
" <div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Context_ID</th>\n",
" <th>Context_Type</th>\n",
" <th>Description</th>\n",
" <th>Earliest_Date_Year</th>\n",
" <th>Earliest_Date_Era</th>\n",
" <th>Latest_Date_Year</th>\n",
" <th>Latest_Date_Era</th>\n",
" <th>Date_Type</th>\n",
" <th>Phase_ID</th>\n",
" <th>Phase_Name</th>\n",
" <th>Group_ID</th>\n",
" <th>Group_Name</th>\n",
" <th>Sub-Group_ID</th>\n",
" <th>Sub-Group_Name</th>\n",
" <th>Relationship_Type</th>\n",
" <th>Related_Context_ID</th>\n",
" <th>Temporal_Conflict</th>\n",
" <th>Is_Redundant</th>\n",
" <th>prepared_text</th>\n",
" <th>embedding</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>C001</td>\n",
" <td>Layer</td>\n",
" <td>Dark brown silty clay layer with frequent char...</td>\n",
" <td>100.0</td>\n",
" <td>AD</td>\n",
" <td>400.0</td>\n",
" <td>AD</td>\n",
" <td>Ceramic</td>\n",
" <td>P1</td>\n",
" <td>Romano-British</td>\n",
" <td>G1</td>\n",
" <td>Occupation deposits</td>\n",
" <td>SG1</td>\n",
" <td>General occupation</td>\n",
" <td>overlies</td>\n",
" <td>C004</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>Context C001, Type: Layer | Description: Dark ...</td>\n",
" <td>[-0.0022556865587830544, 0.05589134246110916, ...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>C002</td>\n",
" <td>Cut</td>\n",
" <td>Circular pit cut with steep sides and flat bot...</td>\n",
" <td>50.0</td>\n",
" <td>AD</td>\n",
" <td>200.0</td>\n",
" <td>AD</td>\n",
" <td>Stratigraphic</td>\n",
" <td>P1</td>\n",
" <td>Romano-British</td>\n",
" <td>G2</td>\n",
" <td>Pit group</td>\n",
" <td>SG2</td>\n",
" <td>Pit cutting and filling</td>\n",
" <td>cuts</td>\n",
" <td>C004</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>Context C002, Type: Cut | Description: Circula...</td>\n",
" <td>[-0.03904779255390167, 0.0598103292286396, -0....</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>C003</td>\n",
" <td>Fill</td>\n",
" <td>Light grey sandy fill of pit C002, containing ...</td>\n",
" <td>50.0</td>\n",
" <td>AD</td>\n",
" <td>200.0</td>\n",
" <td>AD</td>\n",
" <td>Stratigraphic</td>\n",
" <td>P1</td>\n",
" <td>Romano-British</td>\n",
" <td>G2</td>\n",
" <td>Pit group</td>\n",
" <td>SG2</td>\n",
" <td>Pit cutting and filling</td>\n",
" <td>fills</td>\n",
" <td>C002</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>Context C003, Type: Fill | Description: Light ...</td>\n",
" <td>[-0.08637669682502747, 0.04328100010752678, -0...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>C004</td>\n",
" <td>Layer</td>\n",
" <td>Compact yellow clay natural subsoil layer</td>\n",
" <td>NaN</td>\n",
" <td>None</td>\n",
" <td>NaN</td>\n",
" <td>None</td>\n",
" <td>Geological</td>\n",
" <td>P0</td>\n",
" <td>Natural</td>\n",
" <td>G0</td>\n",
" <td>Natural</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>cut by</td>\n",
" <td>C002</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>Context C004, Type: Layer | Description: Compa...</td>\n",
" <td>[-0.0745324045419693, 0.08791496604681015, 0.0...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>C005</td>\n",
" <td>Layer</td>\n",
" <td>Medieval mortar floor surface with tile fragments</td>\n",
" <td>1200.0</td>\n",
" <td>AD</td>\n",
" <td>1400.0</td>\n",
" <td>AD</td>\n",
" <td>Architectural</td>\n",
" <td>P2</td>\n",
" <td>Medieval</td>\n",
" <td>G3</td>\n",
" <td>Domestic structures</td>\n",
" <td>SG3</td>\n",
" <td>Floor surfaces</td>\n",
" <td>overlies</td>\n",
" <td>C004</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>Context C005, Type: Layer | Description: Medie...</td>\n",
" <td>[-0.10213303565979004, 0.12052890658378601, 0....</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>C006</td>\n",
" <td>Feature</td>\n",
" <td>Stone-lined hearth with evidence of burning an...</td>\n",
" <td>1250.0</td>\n",
" <td>AD</td>\n",
" <td>1350.0</td>\n",
" <td>AD</td>\n",
" <td>Radiocarbon</td>\n",
" <td>P2</td>\n",
" <td>Medieval</td>\n",
" <td>G4</td>\n",
" <td>Hearth activity</td>\n",
" <td>SG4</td>\n",
" <td>Hearth construction and use</td>\n",
" <td>built into</td>\n",
" <td>C005</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>Context C006, Type: Feature | Description: Sto...</td>\n",
" <td>[-0.009370672516524792, 0.14452221989631653, 0...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>C007</td>\n",
" <td>Fill</td>\n",
" <td>Ash and charcoal fill of hearth C006, rich in ...</td>\n",
" <td>1250.0</td>\n",
" <td>AD</td>\n",
" <td>1350.0</td>\n",
" <td>AD</td>\n",
" <td>Stratigraphic</td>\n",
" <td>P2</td>\n",
" <td>Medieval</td>\n",
" <td>G4</td>\n",
" <td>Hearth activity</td>\n",
" <td>SG4</td>\n",
" <td>Hearth construction and use</td>\n",
" <td>fills</td>\n",
" <td>C006</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>Context C007, Type: Fill | Description: Ash an...</td>\n",
" <td>[-0.00016425596550107002, 0.11362960189580917,...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>C008</td>\n",
" <td>Layer</td>\n",
" <td>Post-medieval demolition layer with brick and ...</td>\n",
" <td>1600.0</td>\n",
" <td>AD</td>\n",
" <td>1700.0</td>\n",
" <td>AD</td>\n",
" <td>Ceramic</td>\n",
" <td>P3</td>\n",
" <td>Post-Medieval</td>\n",
" <td>G5</td>\n",
" <td>Demolition</td>\n",
" <td>SG5</td>\n",
" <td>Site abandonment</td>\n",
" <td>overlies</td>\n",
" <td>C005</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>Context C008, Type: Layer | Description: Post-...</td>\n",
" <td>[-0.073366180062294, 0.11150677502155304, 0.03...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>C009</td>\n",
" <td>Cut</td>\n",
" <td>Rectangular foundation trench for stone wall</td>\n",
" <td>1200.0</td>\n",
" <td>AD</td>\n",
" <td>1400.0</td>\n",
" <td>AD</td>\n",
" <td>Architectural</td>\n",
" <td>P2</td>\n",
" <td>Medieval</td>\n",
" <td>G6</td>\n",
" <td>Wall construction</td>\n",
" <td>SG6</td>\n",
" <td>Foundation construction</td>\n",
" <td>cuts</td>\n",
" <td>C005</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>Context C009, Type: Cut | Description: Rectang...</td>\n",
" <td>[-0.06563512980937958, 0.08968332409858704, 0....</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>C010</td>\n",
" <td>Fill</td>\n",
" <td>Stone and mortar fill of foundation trench C009</td>\n",
" <td>1200.0</td>\n",
" <td>AD</td>\n",
" <td>1400.0</td>\n",
" <td>AD</td>\n",
" <td>Stratigraphic</td>\n",
" <td>P2</td>\n",
" <td>Medieval</td>\n",
" <td>G6</td>\n",
" <td>Wall construction</td>\n",
" <td>SG6</td>\n",
" <td>Foundation construction</td>\n",
" <td>fills</td>\n",
" <td>C009</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>Context C010, Type: Fill | Description: Stone ...</td>\n",
" <td>[-0.07496478408575058, 0.07007502764463425, 0....</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
" <div class=\"colab-df-buttons\">\n",
"\n",
" <div class=\"colab-df-container\">\n",
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-86930272-c7a4-4720-ace9-702491ab37fc')\"\n",
" title=\"Convert this dataframe to an interactive table.\"\n",
" style=\"display:none;\">\n",
"\n",
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
" <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
" </svg>\n",
" </button>\n",
"\n",
" <style>\n",
" .colab-df-container {\n",
" display:flex;\n",
" gap: 12px;\n",
" }\n",
"\n",
" .colab-df-convert {\n",
" background-color: #E8F0FE;\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: #1967D2;\n",
" height: 32px;\n",
" padding: 0 0 0 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-convert:hover {\n",
" background-color: #E2EBFA;\n",
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: #174EA6;\n",
" }\n",
"\n",
" .colab-df-buttons div {\n",
" margin-bottom: 4px;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert {\n",
" background-color: #3B4455;\n",
" fill: #D2E3FC;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert:hover {\n",
" background-color: #434B5C;\n",
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
" fill: #FFFFFF;\n",
" }\n",
" </style>\n",
"\n",
" <script>\n",
" const buttonEl =\n",
" document.querySelector('#df-86930272-c7a4-4720-ace9-702491ab37fc button.colab-df-convert');\n",
" buttonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
"\n",
" async function convertToInteractive(key) {\n",
" const element = document.querySelector('#df-86930272-c7a4-4720-ace9-702491ab37fc');\n",
" const dataTable =\n",
" await google.colab.kernel.invokeFunction('convertToInteractive',\n",
" [key], {});\n",
" if (!dataTable) return;\n",
"\n",
" const docLinkHtml = 'Like what you see? Visit the ' +\n",
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
" + ' to learn more about interactive tables.';\n",
" element.innerHTML = '';\n",
" dataTable['output_type'] = 'display_data';\n",
" await google.colab.output.renderOutput(dataTable, element);\n",
" const docLink = document.createElement('div');\n",
" docLink.innerHTML = docLinkHtml;\n",
" element.appendChild(docLink);\n",
" }\n",
" </script>\n",
" </div>\n",
"\n",
"\n",
" <div id=\"df-0fc17b7c-6dc8-4d51-bdf3-2419ec09e1ac\">\n",
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-0fc17b7c-6dc8-4d51-bdf3-2419ec09e1ac')\"\n",
" title=\"Suggest charts\"\n",
" style=\"display:none;\">\n",
"\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
" width=\"24px\">\n",
" <g>\n",
" <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
" </g>\n",
"</svg>\n",
" </button>\n",
"\n",
"<style>\n",
" .colab-df-quickchart {\n",
" --bg-color: #E8F0FE;\n",
" --fill-color: #1967D2;\n",
" --hover-bg-color: #E2EBFA;\n",
" --hover-fill-color: #174EA6;\n",
" --disabled-fill-color: #AAA;\n",
" --disabled-bg-color: #DDD;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-quickchart {\n",
" --bg-color: #3B4455;\n",
" --fill-color: #D2E3FC;\n",
" --hover-bg-color: #434B5C;\n",
" --hover-fill-color: #FFFFFF;\n",
" --disabled-bg-color: #3B4455;\n",
" --disabled-fill-color: #666;\n",
" }\n",
"\n",
" .colab-df-quickchart {\n",
" background-color: var(--bg-color);\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: var(--fill-color);\n",
" height: 32px;\n",
" padding: 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-quickchart:hover {\n",
" background-color: var(--hover-bg-color);\n",
" box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: var(--button-hover-fill-color);\n",
" }\n",
"\n",
" .colab-df-quickchart-complete:disabled,\n",
" .colab-df-quickchart-complete:disabled:hover {\n",
" background-color: var(--disabled-bg-color);\n",
" fill: var(--disabled-fill-color);\n",
" box-shadow: none;\n",
" }\n",
"\n",
" .colab-df-spinner {\n",
" border: 2px solid var(--fill-color);\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" animation:\n",
" spin 1s steps(1) infinite;\n",
" }\n",
"\n",
" @keyframes spin {\n",
" 0% {\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" border-left-color: var(--fill-color);\n",
" }\n",
" 20% {\n",
" border-color: transparent;\n",
" border-left-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" }\n",
" 30% {\n",
" border-color: transparent;\n",
" border-left-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" border-right-color: var(--fill-color);\n",
" }\n",
" 40% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" }\n",
" 60% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" }\n",
" 80% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" border-bottom-color: var(--fill-color);\n",
" }\n",
" 90% {\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" }\n",
" }\n",
"</style>\n",
"\n",
" <script>\n",
" async function quickchart(key) {\n",
" const quickchartButtonEl =\n",
" document.querySelector('#' + key + ' button');\n",
" quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n",
" quickchartButtonEl.classList.add('colab-df-spinner');\n",
" try {\n",
" const charts = await google.colab.kernel.invokeFunction(\n",
" 'suggestCharts', [key], {});\n",
" } catch (error) {\n",
" console.error('Error during call to suggestCharts:', error);\n",
" }\n",
" quickchartButtonEl.classList.remove('colab-df-spinner');\n",
" quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
" }\n",
" (() => {\n",
" let quickchartButtonEl =\n",
" document.querySelector('#df-0fc17b7c-6dc8-4d51-bdf3-2419ec09e1ac button');\n",
" quickchartButtonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
" })();\n",
" </script>\n",
" </div>\n",
"\n",
" <div id=\"id_8c862a23-4ff9-4008-8521-5232168657fd\">\n",
" <style>\n",
" .colab-df-generate {\n",
" background-color: #E8F0FE;\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: #1967D2;\n",
" height: 32px;\n",
" padding: 0 0 0 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-generate:hover {\n",
" background-color: #E2EBFA;\n",
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: #174EA6;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-generate {\n",
" background-color: #3B4455;\n",
" fill: #D2E3FC;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-generate:hover {\n",
" background-color: #434B5C;\n",
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
" fill: #FFFFFF;\n",
" }\n",
" </style>\n",
" <button class=\"colab-df-generate\" onclick=\"generateWithVariable('df')\"\n",
" title=\"Generate code using this dataframe.\"\n",
" style=\"display:none;\">\n",
"\n",
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
" width=\"24px\">\n",
" <path d=\"M7,19H8.4L18.45,9,17,7.55,7,17.6ZM5,21V16.75L18.45,3.32a2,2,0,0,1,2.83,0l1.4,1.43a1.91,1.91,0,0,1,.58,1.4,1.91,1.91,0,0,1-.58,1.4L9.25,21ZM18.45,9,17,7.55Zm-12,3A5.31,5.31,0,0,0,4.9,8.1,5.31,5.31,0,0,0,1,6.5,5.31,5.31,0,0,0,4.9,4.9,5.31,5.31,0,0,0,6.5,1,5.31,5.31,0,0,0,8.1,4.9,5.31,5.31,0,0,0,12,6.5,5.46,5.46,0,0,0,6.5,12Z\"/>\n",
" </svg>\n",
" </button>\n",
" <script>\n",
" (() => {\n",
" const buttonEl =\n",
" document.querySelector('#id_8c862a23-4ff9-4008-8521-5232168657fd button.colab-df-generate');\n",
" buttonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
"\n",
" buttonEl.onclick = () => {\n",
" google.colab.notebook.generateWithVariable('df');\n",
" }\n",
" })();\n",
" </script>\n",
" </div>\n",
"\n",
" </div>\n",
" </div>\n"
],
"application/vnd.google.colaboratory.intrinsic+json": {
"type": "dataframe",
"variable_name": "df",
"summary": "{\n \"name\": \"df\",\n \"rows\": 10,\n \"fields\": [\n {\n \"column\": \"Context_ID\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 10,\n \"samples\": [\n \"C009\",\n \"C002\",\n \"C006\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Context_Type\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 4,\n \"samples\": [\n \"Cut\",\n \"Feature\",\n \"Layer\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Description\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 10,\n \"samples\": [\n \"Rectangular foundation trench for stone wall\",\n \"Circular pit cut with steep sides and flat bottom, diameter 1.2m\",\n \"Stone-lined hearth with evidence of burning and ash deposits\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Earliest_Date_Year\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 621.0430294628903,\n \"min\": 50.0,\n \"max\": 1600.0,\n \"num_unique_values\": 5,\n \"samples\": [\n 50.0,\n 1600.0,\n 1200.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Earliest_Date_Era\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"AD\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Latest_Date_Year\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 595.5273106900956,\n \"min\": 200.0,\n \"max\": 1700.0,\n \"num_unique_values\": 5,\n \"samples\": [\n 200.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Latest_Date_Era\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"AD\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Date_Type\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 5,\n \"samples\": [\n \"Stratigraphic\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Phase_ID\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 4,\n \"samples\": [\n \"P0\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Phase_Name\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 4,\n \"samples\": [\n \"Natural\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Group_ID\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 7,\n \"samples\": [\n \"G1\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Group_Name\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 7,\n \"samples\": [\n \"Occupation deposits\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Sub-Group_ID\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 6,\n \"samples\": [\n \"SG1\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Sub-Group_Name\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 6,\n \"samples\": [\n \"General occupation\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Relationship_Type\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 5,\n \"samples\": [\n \"cuts\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Related_Context_ID\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 5,\n \"samples\": [\n \"C002\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Temporal_Conflict\",\n \"properties\": {\n \"dtype\": \"boolean\",\n \"num_unique_values\": 1,\n \"samples\": [\n false\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Is_Redundant\",\n \"properties\": {\n \"dtype\": \"boolean\",\n \"num_unique_values\": 1,\n \"samples\": [\n false\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"prepared_text\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 10,\n \"samples\": [\n \"Context C009, Type: Cut | Description: Rectangular foundation trench for stone wall | Dated 1200.0 AD to 1400.0 AD | Dating method: Architectural | Phase: Medieval | Group: Wall construction | Sub-Group: Foundation construction | Stratigraphic relationship: cuts C005\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"embedding\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"
}
},
"metadata": {},
"execution_count": 63
}
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "b8c727ed-ae1c-42a5-838c-c1f0a92ed61b",
"metadata": {
"id": "b8c727ed-ae1c-42a5-838c-c1f0a92ed61b"
},
"outputs": [],
"source": [
"## 8. Export and Persistence\n",
"def save_embeddings_to_database(df: pd.DataFrame, db_path: str = 'archaeological_contexts.db'):\n",
" \"\"\"\n",
" Save the context data and embeddings to a SQLite database for persistence.\n",
" \"\"\"\n",
" conn = sqlite3.connect(db_path)\n",
"\n",
" # Prepare data for storage\n",
" df_to_save = df.copy()\n",
" df_to_save['embedding_json'] = df_to_save['embedding'].apply(json.dumps)\n",
" df_to_save = df_to_save.drop('embedding', axis=1)\n",
"\n",
" # Save to database\n",
" df_to_save.to_sql('archaeological_contexts', conn, if_exists='replace', index=False)\n",
"\n",
" conn.close()\n",
" print(f\"Saved {len(df)} contexts to database: {db_path}\")\n",
"\n",
"def load_embeddings_from_database(db_path: str = 'archaeological_contexts.db') -> pd.DataFrame:\n",
" \"\"\"\n",
" Load context data and embeddings from SQLite database.\n",
" \"\"\"\n",
" conn = sqlite3.connect(db_path)\n",
" df = pd.read_sql_query(\"SELECT * FROM archaeological_contexts\", conn)\n",
" conn.close()\n",
"\n",
" # Convert embeddings back from JSON\n",
" df['embedding'] = df['embedding_json'].apply(json.loads)\n",
" df = df.drop('embedding_json', axis=1)\n",
"\n",
" print(f\"Loaded {len(df)} contexts from database: {db_path}\")\n",
" return df\n",
"\n",
"def export_results_to_csv(results_list: List[Dict], output_path: str = 'query_results.csv'):\n",
" \"\"\"\n",
" Export query results to CSV for further analysis.\n",
" \"\"\"\n",
" # Flatten results for CSV export\n",
" flattened_results = []\n",
"\n",
" for result in results_list:\n",
" for ctx in result['retrieved_contexts']:\n",
" flattened_results.append({\n",
" 'query': result['query'],\n",
" 'context_id': ctx['Context_ID'],\n",
" 'similarity_score': ctx['similarity_score'],\n",
" 'context_type': ctx['Context_Type'],\n",
" 'phase_name': ctx.get('Phase_Name', ''),\n",
" 'group_name': ctx.get('Group_Name', ''),\n",
" 'relationship_type': ctx.get('Relationship_Type', ''),\n",
" 'related_context_id': ctx.get('Related_Context_ID', ''),\n",
" 'description': ctx['Description'][:100] + '...' # Truncate for CSV\n",
" })\n",
"\n",
" results_df = pd.DataFrame(flattened_results)\n",
" results_df.to_csv(output_path, index=False)\n",
" print(f\"Exported {len(results_df)} query results to: {output_path}\")\n",
"\n",
"# Save current work\n",
"save_embeddings_to_database(df)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.5"
},
"colab": {
"provenance": [],
"gpuType": "T4"
},
"accelerator": "GPU"
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment