AveniECA supports vector embeddings for both ESS records and documents, enabling semantic search across your state history and knowledge base.The typical workflow is:
The hash field ensures uniqueness and prevents duplicate embeddings:
import avenieca# Use a secret key and input text to generate hashsecret = "my_secret_key"input1 = "temperature is high"input2 = "temperature is low"hash1 = avenieca.encode(secret, input1)hash2 = avenieca.encode(secret, input2)# Same input always produces same hashprint(hash1 == avenieca.encode(secret, input1)) # True# Different inputs produce different hashesprint(hash1 == hash2) # False
The search() method finds ESS with similar state vectors using cosine similarity:
from avenieca.api.model import Search# Search for similar statessearch_query = Search( module_id="air_conditioner", state=[18], # Query state vector limit=1 # Return top match)res, status = eca.ess.search(data=search_query)if status == 200: for result in res: print(f"Similarity score: {result.score}") print(f"Matched ESS ID: {result.ess.id}") print(f"Matched state: {result.ess.state}") print(f"Valence: {result.ess.valence}") if result.ess.embedding_input: print(f"Embedding: {result.ess.embedding_input}")
The search returns SearchResult objects with two fields:
# SearchResult structurefor result in res: # Similarity score (0.0 to 1.0, higher is more similar) print(result.score) # e.g., 0.95 # Full ESS record that matched print(result.ess) # ESSResponse object print(result.ess.id) print(result.ess.state) print(result.ess.module_id)
Get ESS records associated with a specific embedding input:
# Get ESS by embedding input IDres, status = eca.ess.get_one_with_embedding( module_id="air_conditioner", emb_input=1)if status == 200: print(f"ESS {res.id} has state {res.state}") print(f"Linked to embedding input {res.embedding_input}")
# Create document from existing ESSres, status = eca.document.create_from_ess( module_id="air_conditioner", ess_id=8)if status == 201: print(f"Document {res.id} created from ESS 8") print(f"Text: {res.text}")
# Create document from sequence (entire state trajectory)res, status = eca.document.create_from_sequence( module_id="air_conditioner", sequence_id=3)if status == 201: print(f"Document {res.id} created from sequence 3") print(f"Contains all ESS from sequence")
from avenieca.api.model import RetrievalRequest# Natural language queryretrieval = RetrievalRequest( query="what is the temperature on 3rd of may at around 1pm?")res, status = eca.retrieval.query(data=retrieval)if status == 200: print("Retrieved answer:") print(res.response)
The retrieval system searches across:
Document embeddings (text descriptions)
ESS embeddings (state vectors with embedding inputs)