Pixeltable

4 months ago 6

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)

Read Entire Article