import os import uuid from pathlib import Path import tiktoken from langchain_core.messages import HumanMessage from states import State os.makedirs("./data", exist_ok=True) def tiktoken_len(text): tokens = tiktoken.encoding_for_model("gpt-4o-mini").encode( text, ) return len(tokens) def agent_node(state, agent, name): result = agent.invoke(state) return {"messages": [HumanMessage(content=result["output"], name=name)]} def enter_chain(message: str) -> dict: results = { "messages": [HumanMessage(content=message)], } return results def get_last_message(state: State) -> str: return state["messages"][-1].content def join_graph(response: dict): return {"messages": [response["messages"][-1]]} def create_random_subdirectory(): random_id = str(uuid.uuid4())[:8] # Use first 8 characters of a UUID subdirectory_path = os.path.join("./data", random_id) os.makedirs(subdirectory_path, exist_ok=True) return subdirectory_path def prelude(state): written_files = [] if not WORKING_DIRECTORY.exists(): WORKING_DIRECTORY.mkdir() try: written_files = [ f.relative_to(WORKING_DIRECTORY) for f in WORKING_DIRECTORY.rglob("*") ] except Exception: pass if not written_files: return {**state, "current_files": "No files written."} return { **state, "current_files": "\nBelow are files your team has written to the directory:\n" + "\n".join([f" - {f}" for f in written_files]), } WORKING_DIRECTORY = Path(create_random_subdirectory())