title: $:/plugins/tiddlywiki/ai-tools/globals tags: $:/tags/Global \function ai-tools-default-llm-completion-server() [all[shadows+tiddlers]tag[$:/tags/AI/CompletionServer]sort[caption]first[]] \end \procedure ai-tools-get-llm-completion(conversationTitle,resultTitlePrefix,resultTags,ai-tools-status-title,completionServer) <$let completionServer={{{ [!is[blank]else] }}} > <$importvariables filter="[]"> <$wikify name="json" text=<>> <$action-log message="ai-tools-get-llm-completion"/> <$action-log/> <$action-sendmessage $message="tm-http-request" url={{{ [get[url]] }}} body=<> header-content-type="application/json" bearer-auth-token-from-store="openai-secret-key" method="POST" oncompletion=<> bind-status=<> var-resultTitlePrefix=<> var-resultTags=<> /> \end ai-tools-get-llm-completion \function ai-tools-status-title() [addprefix[$:/temp/ai-tools/status/]] \end ai-tools-status-title \procedure ai-tools-message(tiddler,field,role,makeLink:"yes") <$qualify name="state" title={{{ [[$:/state/ai-tools-message-state/]addsuffix] }}} > <$let editStateTiddler={{{ [addsuffix[-edit-state]] }}} editState={{{ [get[text]else[view]] }}} >
addprefix[ai-tools-message-role-]] +[join[ ]] }}}>
<$genesis $type={{{ [match[yes]then[$link]else[span]] }}} to=<>> <$text text=<>/>
<%if [!match[edit]] %> <$button class="ai-tools-message-toolbar-button"> <$action-setfield $tiddler=<> text="edit"/> edit <%endif%> <%if [!match[view]] %> <$button class="ai-tools-message-toolbar-button"> <$action-setfield $tiddler=<> text="view"/> view <%endif%> <$button class="ai-tools-message-toolbar-button"> <$action-sendmessage $message="tm-copy-to-clipboard" $param={{{ [getelse[]] }}}/> copy <$button class="ai-tools-message-toolbar-button"> <$action-deletetiddler $tiddler=<>/> delete
<%if [match[view]] %> <$transclude $tiddler=<> $field=<> $mode="block"/> <%else%> <$edit-text tiddler=<> field=<> tag="textarea" class="tc-edit-texteditor"/> <%endif%> <%if [get[image]else[]!match[]] %> <$image source={{{ [get[image]] }}}/> <%endif%>
\end ai-tools-message \procedure ai-tools-action-get-response() <$let resultTitlePrefix={{{ [addsuffix[ - Prompt]] }}} resultTags={{{ [format:titlelist[]] }}} > <$action-createtiddler $basetitle=<> tags=<> type="text/markdown" role="user" text={{!!current-response-text}} image={{!!current-response-image}} > <$action-deletefield $tiddler=<> $field="current-response-text"/> <$action-deletefield $tiddler=<> $field="current-response-image"/> <$transclude $variable="ai-tools-get-llm-completion" conversationTitle=<> completionServer={{!!completion-server}} resultTitlePrefix=<> resultTags=<> ai-tools-status-title=<> /> \end ai-tools-action-get-response \procedure ai-tools-conversation(conversationTitle) <$let currentTiddler=<>> Server: <$select tiddler=<> field="completion-server" default=<>> <$list filter="[all[shadows+tiddlers]tag[$:/tags/AI/CompletionServer]sort[caption]]">
<$transclude $variable="ai-tools-message" tiddler=<> field="system-prompt" role="system" makeLink="no" /> <$list filter="[all[shadows+tiddlers]tag!is[draft]sort[created]]" variable="message" storyview="pop"> <$transclude $variable="ai-tools-message" tiddler=<> field="text" role={{{ [get[role]] }}} /> <%if [get[text]else[complete]match[pending]] %>
<%endif%>
<$edit-text tiddler=<> field="current-response-text" tag="textarea" class="tc-edit-texteditor"/> <$button class="ai-user-prompt-send" actions=<> disabled={{{ [get[text]else[complete]match[pending]then[yes]] [get[current-response-text]else[]match[]then[yes]] ~[[no]] }}} > Send
<$let state=<>> <$button popup=<> class="tc-btn-invisible tc-btn-dropdown">Choose an image {{$:/core/images/down-arrow}} <$link to={{!!current-response-image}}> <$text text={{!!current-response-image}}/> <$reveal state=<> type="popup" position="belowleft" text="" default="" class="tc-popup-keep">
<$transclude $variable="image-picker" filter="[all[shadows+tiddlers]is[image]is[binary]!has[_canonical_uri]] -[type[application/pdf]] +[!has[draft.of]sort[title]]" actions=""" <$action-setfield $tiddler=<> current-response-image=<> /> <$action-deletetiddler $tiddler=<>/> """ />
<$image source={{!!current-response-image}}/>
\end ai-tools-conversation \procedure ai-tools-new-conversation() <$action-createtiddler $basetitle="AI Conversation" tags="$:/tags/AI/Conversation" system-prompt="Transcript of a never ending dialog, where the User interacts with an Assistant. The Assistant is helpful, kind, honest, good at writing, and never fails to answer the User's requests immediately and with precision." current-response-text="Please list the 10 most important mechanical inventions of the Twentieth Century" > <$action-navigate $to=<>/> \end ai-tools-new-conversation \procedure ai-tools-import-conversations() <$action-navigate $to="$:/plugins/tiddlywiki/ai-tools/tools"/> \end ai-tools-import-conversations