import cycls
@cycls.app(pip=["chromadb", "openai"], copy=[".env"])
async def app(context):
import chromadb
from chromadb.utils import embedding_functions
import os
# 1. Setup OpenAI Embedding Function
openai_ef = embedding_functions.OpenAIEmbeddingFunction(
api_key=os.getenv("OPENAI_API_KEY"),
model_name="text-embedding-3-small"
)
# 2. Initialize ChromaDB client
client = chromadb.Client()
# 3. Create/Get collection with specific embedding function
collection = client.get_or_create_collection(
name="docs",
embedding_function=openai_ef
)
# 4. Add documents (embeddings are generated automatically via OpenAI)
collection.add(
documents=["I love cats", "I love dogs", "The weather is nice"],
ids=["1", "2", "3"]
)
# 5. Get user query
query = context.messages[-1]["content"]
# 6. Perform similarity search
results = collection.query(
query_texts=[query],
n_results=1
)
# 7. Return the retrieved context
retrieved_doc = results['documents'][0][0]
yield f"Found context: {retrieved_doc}"
app.local()