# ========= Copyright 2026 @ Strukto.AI All Rights Reserved. ========= # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ========= Copyright 2026 @ Strukto.AI All Rights Reserved. ========= import asyncio import json import os import sys from dotenv import load_dotenv from mirage import MountMode, Workspace from mirage.resource.langfuse import LangfuseConfig, LangfuseResource load_dotenv(".env.development") config = LangfuseConfig( public_key=os.environ["LANGFUSE_PUBLIC_KEY"], secret_key=os.environ["LANGFUSE_SECRET_KEY"], host=os.environ["LANGFUSE_HOST"], ) resource = LangfuseResource(config=config) async def main(): with Workspace({"/langfuse/": resource}, mode=MountMode.READ) as ws: vos = sys.modules["os"] print("=== VFS MODE: open() reads from Langfuse ===\n") print("--- os.listdir() top-level ---") top_level = vos.listdir("/langfuse") for entry in top_level: print(f" {entry}") print("\n--- os.listdir() traces ---") traces = vos.listdir("/langfuse/traces") for t in traces[:5]: print(f" {t}") if len(traces) > 5: print(f" ... ({len(traces)} total)") if not traces: print(" no traces found") return first_trace = traces[0] path = f"/langfuse/traces/{first_trace}" print(f"\n--- open() + read {first_trace} ---") with open(path) as f: content = f.read() try: doc = json.loads(content) print(f" name: {doc.get('name', '?')}") print(f" id: {doc.get('id', '?')}") sid = doc.get("sessionId", doc.get("session_id", "?")) print(f" session_id: {sid}") except json.JSONDecodeError: for line in content.splitlines()[:5]: print(f" {line[:120]}") print("\n--- os.listdir() sessions ---") sessions = vos.listdir("/langfuse/sessions") for s in sessions: print(f" {s}") print("\n--- os.listdir() prompts ---") prompts = vos.listdir("/langfuse/prompts") for p in prompts: print(f" {p}") print("\n--- os.listdir() datasets ---") datasets = vos.listdir("/langfuse/datasets") for d in datasets: print(f" {d}") if datasets: ds = datasets[0] print(f"\n--- os.listdir() datasets/{ds} ---") items = vos.listdir(f"/langfuse/datasets/{ds}") for item in items: print(f" {item}") print("\n--- bash history ---") with open("/.bash_history") as f: for i, line in enumerate(f): if i >= 6: break print(f" {line.rstrip()[:120]}") records = ws.ops.records total = sum(r.bytes for r in records) print(f"\nStats: {len(records)} ops, " f"{total} bytes transferred") asyncio.run(main())