import lucidicai as lai
from openai import OpenAI
# Initialize
lai.init(session_name="Document Processing", providers=["openai"])
client = OpenAI()
@lai.step(
state="Document processing pipeline",
action="Extract and analyze content",
goal="Generate structured insights"
)
def process_documents(documents: list) -> dict:
"""Process multiple documents through an AI pipeline."""
processed = []
for doc in documents:
# Each document gets its own step
result = analyze_document(doc)
processed.append(result)
# Generate summary (creates an event)
summary = generate_summary(processed)
return {
"documents_processed": len(documents),
"summary": summary,
"details": processed
}
@lai.step(state="Analyzing document", action="Extract information")
def analyze_document(doc: dict) -> dict:
"""Analyze a single document."""
# These create events within the step
entities = extract_entities(doc["content"])
sentiment = analyze_sentiment(doc["content"])
return {
"id": doc["id"],
"entities": entities,
"sentiment": sentiment
}
@lai.event(description="Extract named entities", model="gpt-3.5-turbo")
def extract_entities(text: str) -> list:
"""Extract entities using OpenAI."""
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "Extract named entities."},
{"role": "user", "content": text}
]
)
# LLM call is also tracked automatically
return parse_entities(response.choices[0].message.content)
@lai.event() # Auto-generates: "analyze_sentiment(text='...')"
def analyze_sentiment(text: str) -> str:
"""Simple sentiment analysis."""
# Your sentiment logic here
return "positive"
# Run the pipeline
documents = [
{"id": 1, "content": "Apple announced new products..."},
{"id": 2, "content": "The market responded positively..."}
]
results = process_documents(documents)
print(results)
# Session ends automatically