Looking at how you guys instrument langchain, I tried something like this:
with tracer.start_as_current_span("hybrid retriever") as span:
span.set_attribute(SpanAttributes.OPENINFERENCE_SPAN_KIND, "RETRIEVER")
span.set_attribute(SpanAttributes.INPUT_VALUE, question)
context = await self.retriever_chain.ainvoke({"user_input": question})
val = json.dumps([_as_document(document) for document in context])
span.set_attribute(SpanAttributes.RETRIEVAL_DOCUMENTS, val)
def _as_document(document: Any) -> dict:
document_dict = {}
if page_content := getattr(document, "page_content", None):
assert isinstance(page_content, str), f"expected str, found {type(page_content)}"
document_dict[DocumentAttributes.DOCUMENT_CONTENT] = page_content
if metadata := getattr(document, "metadata", None):
assert isinstance(metadata, Mapping), f"expected Mapping, found {type(metadata)}"
document_dict[DocumentAttributes.DOCUMENT_METADATA] = json.dumps(metadata)
return document_dictThis fails spectacularly! When I click on the retriever, it causes phoenix to show a bug screen lol