From sgcWebSockets 2024.10.0 you can use the OpenAI Assistants to search in your own files instead of using the generic model.
File Search augments the Assistant with knowledge from outside its model, such as proprietary product information or documents provided by your users. OpenAI automatically parses and chunks your documents, creates and stores the embeddings, and use both vector and keyword search to retrieve relevant content to answer user queries.
Supported files
For text/
MIME types, the encoding must be one of utf-8
, utf-16
, or ascii
.
File format | MIME type |
---|---|
.c | text/x-c |
.cpp | text/x-c++ |
.cs | text/x-csharp |
.css | text/css |
.doc | application/msword |
.docx | application/vnd.openxmlformats-officedocument.wordprocessingml.document |
.go | text/x-golang |
.html | text/html |
.java | text/x-java |
.js | text/javascript |
.json | application/json |
.md | text/markdown |
.pdf | application/pdf |
.php | text/x-php |
.pptx | application/vnd.openxmlformats-officedocument.presentationml.presentation |
.py | text/x-python |
.py | text/x-script.python |
.rb | text/x-ruby |
.sh | application/x-sh |
.tex | text/x-tex |
.ts | application/typescript |
.txt | text/plain |
Create a new assistant with file_search enabled in the tools parameter of the Assistant.
Once the file_search tool is enabled, the model decides when to retrieve content based on user messages.
Assistant := TsgcAIOpenAIAssistant.Create(nil); Assistant.OpenAIOptions.ApiKey := 'sk-askdjfalskdjfl23kjkjasdefasdfj'; Assistant.AssistantOptions.Name := 'sgcWebSockets HelpDesk'; Assistant.AssistantOptions.Instructions.Text := 'You are a sgcWebSockets HelpDesk Agent. ' + 'Answer questions briefly, in a sentence or less. When asked a question,use the manual to answer the question.' Assistant.AssistantOptions.Model := 'gpt-4o-mini'; Assistant.AssistantOptions.Tools.FileSearch.Enabled := True; Assistant.AssistantOptions.Tools.CodeInterpreter.Enabled := False;
To access your files, the file_search tool uses the Vector Store object. Upload your files and create a Vector Store to contain them.
procedure UploadFile(); var oDialog: TOpenDialog; begin oDialog := TOpenDialog.Create(nil); Try if oDialog.Execute then begin Screen.Cursor := crHourGlass; Try Assistant.UploadVectorStoreFile('sgcVectorStore', oDialog.FileName); Finally Screen.Cursor := crDefault; End; end; Finally oDialog.Free; End; end;
Now, create a Run and observe that the model uses the File Search tool to provide a response to the user's question.
procedure SendMessage() var i: Integer; oMessage: TsgcOpenAIClass_Message; oMessages: TsgcOpenAIClass_Response_List_Messages; oRun: TsgcOpenAIClass_Run; begin DoLog('[user]: ' + memoMessage.Lines.Text); Screen.Cursor := crHourGlass; Try oMessage := Assistant.CreateMessageText('thread_id', 'Create a WebSocket Client that connects to eSeGeCe WebSocket Server'); if Assigned(oMessage) then begin oRun := Assistant.CreateRunAndWait('thread_id'); if Assigned(oRun) then begin oMessages := Assistant.GetMessages('thread_id', oRun.Id); if Assigned(oMessages) and (Length(oMessages.Messages) > 0) then begin memoMessage.Lines.Text := ''; for i := 0 to Length(oMessages.Messages) - 1 do DoLog('[assistant]: ' + DoFormatResponse(oMessages.Messages[i] .ContentText + #13#10)); end; end; end; Finally Screen.Cursor := crDefault; End; end;
When you subscribe to the blog, we will send you an e-mail when there are new updates on the site so you wouldn't miss them.