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
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 |
Step 1: Create a new Assistant with File Search Enabled
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;
Step 2: Upload files and add them to a Vector Store
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;
Step 3: Create a run and check the output
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;