1pxt.create_dir("agents", if_exists="ignore")
2
3
4documents = pxt.create_table(
5 "agents.collection",
6 {
7 "document": pxt.Document,
8 "uuid": pxt.String,
9 "timestamp": pxt.Timestamp,
10 "user_id": pxt.String
11 },
12)
13chunks = pxt.create_view(
14 "agents.chunks",
15 documents,
16 iterator=DocumentSplitter.create(
17 document=documents.document,
18 separators="paragraph",
19 metadata="title, heading, page"
20 ),
21)
22chunks.add_embedding_index(
23 "text",
24 string_embed=sentence_transformer.using(
25 model_id=config.EMBEDDING_MODEL_ID
26 ),
27)
28
29@pxt.query
30def search_documents(query_text: str, user_id: str):
31 sim = chunks.text.similarity(query_text)
32 return (
33 chunks
34 .where((chunks.user_id == user_id) & (sim > 0.5))
35 .order_by(sim, asc=False)
36 .select(
37 chunks.text,
38 source_doc=chunks.document,
39 sim=sim
40 )
41 .limit(20)
42 )
43
44
45images = pxt.create_table(
46 "agents.images",
47 {
48 "image": pxt.Image,
49 "uuid": pxt.String,
50 "timestamp": pxt.Timestamp,
51 "user_id": pxt.String
52 },
53)
54images.add_computed_column(
55 thumbnail=pxt_image.b64_encode(
56 pxt_image.resize(images.image, size=(96, 96))
57 ),
58)
59images.add_embedding_index(
60 "image",
61 embedding=clip.using(model_id=config.CLIP_MODEL_ID),
62)
63
64
65
66
67tools = pxt.tools(
68 functions.get_latest_news,
69 functions.fetch_financial_data,
70 search_video_transcripts,
71)
72
73tool_agent = pxt.create_table(
74 "agents.tools",
75 {
76 "prompt": pxt.String,
77 "timestamp": pxt.Timestamp,
78 "user_id": pxt.String,
79 "initial_system_prompt": pxt.String,
80 "final_system_prompt": pxt.String,
81 "max_tokens": pxt.Int,
82 "temperature": pxt.Float,
83 },
84)
85
86
87
88tool_agent.add_computed_column(
89 initial_response=messages(
90 model=config.CLAUDE_MODEL_ID,
91 system=tool_agent.initial_system_prompt,
92 messages=[{"role": "user", "content": tool_agent.prompt}],
93 tools=tools,
94 tool_choice=tools.choice(required=True),
95 ),
96)
97
98
99tool_agent.add_computed_column(
100 tool_output=invoke_tools(tools, tool_agent.initial_response)
101)
102
103
104tool_agent.add_computed_column(
105 doc_context=search_documents(tool_agent.prompt, tool_agent.user_id)
106)
107
108
109
110tool_agent.add_computed_column(
111 final_response=messages(
112 model=config.CLAUDE_MODEL_ID,
113 system=tool_agent.final_system_prompt,
114 messages=tool_agent.final_prompt_messages,
115 ),
116)
117
118
119tool_agent.add_computed_column(
120 answer=tool_agent.final_response.content[0].text
121)
.png)


