Spaces:
Build error
Build error
import weaviate | |
from weaviate.embedded import EmbeddedOptions | |
from weaviate import Client | |
def initialize_weaviate_client(): | |
return weaviate.Client(embedded_options=EmbeddedOptions()) | |
def class_exists(client, class_name): | |
try: | |
client.schema.get_class(class_name) | |
return True | |
except: | |
return False | |
def map_dtype_to_weaviate(dtype): | |
if "int" in str(dtype): | |
return "int" | |
elif "float" in str(dtype): | |
return "number" | |
elif "bool" in str(dtype): | |
return "boolean" | |
else: | |
return "string" | |
def ingest_data_to_weaviate(client, dataframe, class_name, class_description): | |
# Create class schema | |
class_schema = { | |
"class": class_name, | |
"description": class_description, | |
"properties": [] # Start with an empty properties list | |
} | |
# Try to create the class without properties first | |
try: | |
client.schema.create({"classes": [class_schema]}) | |
except weaviate.exceptions.SchemaValidationException: | |
# Class might already exist, so we can continue | |
pass | |
# Now, let's add properties to the class | |
for column_name, data_type in zip(dataframe.columns, dataframe.dtypes): | |
property_schema = { | |
"name": column_name, | |
"description": f"Property for {column_name}", | |
"dataType": [map_dtype_to_weaviate(data_type)] | |
} | |
try: | |
client.schema.property.create(class_name, property_schema) | |
except weaviate.exceptions.SchemaValidationException: | |
# Property might already exist, so we can continue | |
pass | |
# Ingest data | |
for index, row in dataframe.iterrows(): | |
obj = { | |
"class": class_name, | |
"id": str(index), | |
"properties": row.to_dict() | |
} | |
client.data_object.create(obj) | |
# Log data ingestion | |
log_debug_info(f"Data ingested into Weaviate for class: {class_name}") | |
def get_class_schema(client, class_name): | |
all_classes = client.schema.get()["classes"] | |
for cls in all_classes: | |
if cls["class"] == class_name: | |
return cls | |
return None | |