From ba6c7872cc3b3931d852b4694360b7b83119b194 Mon Sep 17 00:00:00 2001 From: hanishkvc Date: Mon, 24 Nov 2025 19:57:10 +0530 Subject: [PATCH] SimpleChatTCRV: split changelog from details into separate file --- .../public_simplechat/docs/changelog.md | 330 ++++++++++++++++++ .../server/public_simplechat/docs/details.md | 329 ----------------- 2 files changed, 330 insertions(+), 329 deletions(-) create mode 100644 tools/server/public_simplechat/docs/changelog.md diff --git a/tools/server/public_simplechat/docs/changelog.md b/tools/server/public_simplechat/docs/changelog.md new file mode 100644 index 0000000000..16d0a9dbc2 --- /dev/null +++ b/tools/server/public_simplechat/docs/changelog.md @@ -0,0 +1,330 @@ +# Progress + +Look into source files and git logs for the details, this is a partial changelog of stuff already done +and some of the things that one may look at in the future. + +## Done + +Tool Calling support added, along with a bunch of useful tool calls as well as a bundled simple proxy +if one wants to access web as part of tool call usage. + +Reasoning / thinking response from Ai Models is shown to the user, as they are being generated/shared. + +Chat Messages/Session and UI handling have been moved into corresponding Classes to an extent, this +helps ensure that +* switching chat sessions or loading a previous auto saved chat session will restore state including + ui such that end user can continue the chat session from where they left it, even if in the middle + of a tool call handshake. +* new fields added to http handshake in oneshot or streaming mode can be handled in a structured way + to an extent. + +Chat message parts seperated out and tagged to allow theming chat message as needed in future. +The default Chat UI theme/look changed to help differentiate between different messages in chat +history as well as the parts of each message in a slightly better manner. Change the theme slightly +between normal and print views (beyond previous infinite height) for better printed chat history. + +A builtin data store related tool calls, inturn built on browser's indexedDB, without needing any +proxy / additional helper to handle the store. One could use the ai assistant to store ones (ie end +users) own data or data of ai model. + +Trap http response errors and inform user the specific error returned by ai server. + +Initial go at a pdftext tool call. It allows web / local pdf files to be read and their text content +extracted and passed to ai model for further processing, as decided by ai and end user. One could +either work with the full pdf or a subset of adjacent pages. + +SimpleProxy updates +* Convert from a single monolithic file into a collection of modules. +* UrlValidator to cross check scheme and domain of requested urls, + the whitelist inturn picked from config json +* Helpers to fetch file from local file system or the web, transparently +* Help check for needed modules before a particular service path is acknowledged as available + through /aum service path +* urltext and related - logic to drop contents of specified tag with a given id + * allow its use for the web search tool flow + * setup wrt default duckduckgo search result urltext plain text cleanup and found working. + * this works properly only if the html being processed has proper opening and ending tags + around the area of interest. + * remember to specify non overlapping tag blocks, if more than one specified for dropping. + * this path not tested, but should logically work + +Settings/Config default changes + +* Chances are for ai models which dont support tool calling, things will be such that the tool calls +meta data shared will be silently ignored without much issue. So enabling tool calling feature by +default, so that in case one is using a ai model with tool calling the feature is readily available +for use. + +* Revert SlidingWindow ChatHistory in Context from last 10 to last 5 (rather 2 more then origianl, +given more context support in todays models) by default, given that now tool handshakes go through +the tools related side channel in the http handshake and arent morphed into normal user-assistant +channel of the handshake. + +* Enable CachePrompt api option given that tool calling based interactions could involve chat sessions +having ai responses built over multiple steps of tool callings etal. So independent of our client side +sliding window based drop off or even before they kick in, this can help in many cases. + +UI - add ClearChat button and logic. Also add unicode icons for same as well as for Settings. + +Renamed pdf_to_text to fetch_pdf_as_text so that ai model can understand the semantic better. + +sys_date_time tool call has been added. + +Refactor code and flow a bit wrt the client web ui +* Move the main chat related classes into its own js module file, independent of the main + runtime entry point (rather move out the runtime entry point into its own file). This allows + these classes to be referenced from other modules like tools related modules with full access + to these classes's details for developers and static check tools. +* building on same make the Tools management code into a ToolsManager class which is inturn + instantiated and the handle stored in top level Me class. This class also maintains and + manages the web workers as well as routing of the tool calling among others. +* add a common helper for posting results directly to the main thread side web worker callback + handlers. Inturn run the calling through a setTimeout0, so that delayed/missing response + situation rescuer timeout logic etal flow doesnt get messed for now. + +Track tool calling and inturn maintain pending tool calls so that only still valid tool call responses +will be accepted when the asynchronous tool call response is recieved. Also take care of clearing +pending tool call tracking in unhappy paths like when exception noticied as part of tool call execution, +or if there is no response within the configured timeout period. +NOTE: Currently the logic supports only 1 pending tool call per chat session. + +Add support for fetch_xml_as_text tool call, fix importmaps in index.html + +Renamed and updated logic wrt xml fetching to be fetch_xml_filtered. allow one to use re to identify +the tags to be filtered in a fine grained manner including filtering based on tag heirarchy +* avoid showing empty skipped tag blocks + +Logic which shows the generated tool call has been updated to trap errors when parsing the function call +arguments generated by the ai. This ensures that the chat ui itself doesnt get stuck in it. Instead now +the tool call response can inform the ai model that its function call had issues. + +Renamed fetch_web_url_text to fetch_html_text, so that gen ai model wont try to use this to fetch xml or +rss files, because it will return empty content, because there wont be any html content to strip the tags +and unwanted blocks before returning. + +Capture the body of ai server not ok responses, to help debug as well as to show same to user. + +Extract and include the outline of titles (along with calculated numbering) in the text output of pdftext +* ensure that one doesnt recurse beyond a predefined limit. + +Convert NSChatMessage from typedef to Class and update ChatMessageEx, SimpleChat, MultiChatUI classes to +make use of the same. +* helpers consolidated + * helpers to check if given instance contains reasoning or content or toolcall or tool response related + fields/info in them. + * helpers to get the corresponding field values + * some of these helpers where in ChatMessageEx and beyond before +* now the network handshaked fields are declared as undefined by default (instead of empty values). + this ensures that json stringify will automatically discard fields whose values are still undefined. +* add fields wrt tool response and update full flow to directly work with these fields instead of the + xml based serialisation which was previously used for maintaining the different tool response fields + within the content field (and inturn extract from there when sending to server). + * now a dataset based attribute is used to identify when input element contains user input and when + it contains tool call result/response. +* this simplifies the flow wrt showing chat message (also make it appear more cleanly) as well as + identifying not yet accepted tool result and showing in user query input field and related things. +* ALERT: ON-DISK-STORAGE structure of chat sessions have changed wrt tool responses. So old saves will + no longer work wrt tool responses + +UI updates +* update logic to allow empty tool results to be sent to ai engine server +* css - when user input textarea is in tool result mode (ie wrt TOOL.TEMP role), change the background + color to match the tool role chat message block color, so that user can easily know that the input + area is being used for submitting tool response or user response, at any given moment in time. + +Vision +* Add image_url field. Allow user to load image, which is inturn stored as a dataURL in image_url. +* when user presses submit with a message, if there is some content (image for now) in dataURL, + then initialise image_url field with same. +* when generating chat messages for ai server network handshake, create the mixed content type of + content field which includes both the text (from content field) and image (from image_url field) + ie if a image_url is found wrt a image. + * follow the openai format/template wrt these mixed content messages. +* Usage: specify a mmproj file directly or through -hf, additionally had to set --batch-size to 8k + and ubatch-size to 2k wrt gemma3-4b-it +* when showing chat instantiate img elements to show image_urls. + * limit horizontally to max width and vertically to 20% of the height +* show any image loaded by the user, in the corresponding image button +* consolidate dataurl handling into a bunch of helper functions. +* trap quota errors wrt localStorage etal +* dont forget to reset the file type input's value, so that reselecting the same image still + triggers the input's change event. + +SimpleChat class now allows extra fields to be specified while adding, in a generic way using a +object/literal object or equivalent. + +UI Cleanup - msgs spaced out, toolcall edit hr not always, scroll ui only when required, +hide settings/info till user requests, heading gradient + +iDB module +* add open, transact, put and get. Use for chat session save and load +* getKeys used to show Restore/Load button wrt chat sessions. + +ChatMessage +* assign a globally unique (ie across sessions) id to each chat message instance. +* add support for deleting chat message based on its uniquie id in SimpleChat. + * try ensure that adjacent messages remain on screen, after a message is deleted from session. +* add a popover div block in html, which acts as a popup menu containing buttons to work with + individual chat messages. + * experiment and finalise on anchor based relative positioning of the popover menu. + * have a del button, which allows one to delete the currently in focus chat message. + * have a copy button, which allows one to copy the textual content into system clipboard. + +MultiChatUI +* chat_show takes care of showing or clearing tool call edit / trigger as well as tool response + edit / submit. Also show the currently active tool call and its response before it is submitted + was previously only shown in the edit / trigger and edit / submit ui elements, now instead it + also shows as part of the chat session message blocks, so that user can delete or copy these + if needed using the same mechanism as other messages in the chat session. +* use a delete msg helper, which takes care of deleting the msg from chat session as well as + efficiently update ui to any extent by removing the corresponding element directly from existing + chat session ui without recreating the full chat session ui. +* a helper to add a message into specified chat session, as well as show/update in the chat session + ui by appending the chat message, instead of recreating the full chat session ui. +... + +MultiChatUI+ +* both chat_show and chat_uirefresh (if lastN >= 2) both take care of updating tool call edit/trigger + as well as the tool call response edit/submit related ui elements suitably. + * chat_show recreates currently active sliding window of chat session (which could even be full) + * while chat_uirefresh recreates/updates ui only for the lastN messages (prefer in general, as optimal) +* normal user response / query submit as well as tool call response or error submit have been updated + to use the optimal uirefresh logic now. + +Cleanup in general +* Inform end user when loading from a saved session. +* Update starting entry point flow to avoid calling chat_show twice indirectly, inturn leading to + two restore previously saved session blocks. Rather when adding tool calls support, and inturn + had to account for delayed collating of available simpleproxy based tool calls, I forgot to clean + this flow up. +* Make the sys_date_time template description bit more verbose, just in case. +* ui_userinput_reset now also resets associated Role always, inturn + * full on version from chat_show, inturn when session switching. + So user switchs session will reset all user input area and related data, while + also ensuring user input area has the right needed associated role setup. + * partial version from uirefresh, inturn adding user or tool call response messages. +* ui cleanup + * more rounded buttons, chat messages and input area elements. + * make the body very very lightly gray in color, while the user input area is made whiter. + * gradients wrt heading, role-specific individual chat message blocks. + * avoid borders and instead give a box effect through light shadows. + * also avoid allround border around chat message role block and instead have to only one side. + * timeout close popover menu. + * usage notes + * update wrt vision and toggling of sessions and system prompt through main title area. + * fix issue with sliding window size not reflecting properly in context window entry. + * make restore block into details based block, and anchor its position independent of db check. + * avoid unneeded outer overall scrollbar by adjusting fullbody height in screen mode. + * user css variable to define the overall background color and inturn use same to merge gradients + to the background, as well as to help switch the same seemlessly between screen and print modes. + * make the scrollbars more subtle and in the background. + * allow user input textarea to grow vertically to some extent. + * make things rounded across board by default. add some padding to toolcall details block, ... + * use icons without text wrt chat sessions++, new chat, clear chat and settings top level buttons. + * use title property/attribute to give a hint to the user about the button functionality. + * add role specific background gradients wrt the tool call trigger and user input block as well as + fix wrt the tool temp message block. also wrt system input block at top. + * also rename the TEMP role tags to use -TEMP instead of .TEMP, so that CSS rule selectors will + treat such tags like role-TOOL-TEMP as say a proper css class name rather than messing up with + something like role-TOOL.TEMP which will get split to role-TOOL and TEMP and inturn corresponding + css rule doesnt/wont get applied. + * given that now there is a proper visual cue based seperation of the tool call trigger block from + surrounding content, using proper seperate tool call specific coloring, so remove the
horiz + line seperation wrt tool call trigger block. + * however retain the horizontal line seperation between the tool trigger block and user input block, + given that some users and some ai dont seem to identify the difference very easily. + * work around firefox currently not yet supporting anchor based relative positioning of popover. + * ensure the new uirefresh flow handles the following situations in a clean way like + * a new chat session clearing out usagenote+restore+currentconfig, as user starts chatting + * the settings ui getting cleared out as user starts/continues chatting directly into user input + without using chat session button to switch back to the chat. +* Auto ObjPropsEdit UI + * allow it to be themed by assigning id to top level block. + * fix a oversight (forgotten $) with use of templated literals and having variables in them. + * ensure full props hierarchy is accounted for when setting the id of elements. +* Chat button to toggle sessions buttons and system prompt. +* Use unix date format markers wrt sys_date_time toolcall, also add w (day of week). +* Free up the useful vertical space by merging chat sessions buttons/tabs into heading +* Allow user to load multiple images and submit to ai as part of a single user message. +* Use popover ui to allow user to view larger versions of loaded images as well as remove before submitting + to ai, if and when needed. +* Add external_ai toolcall with no access to internet or tool calls (helps avoid recursive ai tool calling). + User can see response generated by the external ai tool call, as and when it is recieved. +* Maintain chat session specific DivStream elements, and show live ai responses (through corresponding + DivStream) wrt the current chat session as well as any from the external ai tool call session. + In future, if the logic is updated to allow switching chat session ui in the middle of a pending tool call + or pending ai server response, things wont mess up ui, as they will be updating their respective DivStream. + Also switching sessions takes care of showing the right DivStream ie of currently switched to chat, so that + end user can see the streamed response from that chat session as it is occuring. +* Cleanup the tool call descriptions and verbose messages returned a bit. + +Chat Session specific settings +* Needed so that one could + * setup a different ai model / engine as the external ai backend. + * interact with different independent ai models / engines / parallel instances in general +* Move needed configs from Me into a seperate Config class. + * also move ShowSettings, ShowInfo etal into Config class +* SimpleChat maintains an instance of Config class instead of Me. +* ToolsManager and the different tool call modules have been updated to + * have seperate init and setup calls. + * init is called at the begining + * setup will be called when ever a chat session is being created + and or in future when ever any config of interest changes. + * pick needed config etal from the specified chatId's config and not any global config. +* Starting flow updated to chain the different logical blocks of code + * first allow tools manager to be initd + * next create the needed default set of sessions, while parallely calling tool manager setup as needed. + * ensures that the available list of tool calls match the config of the chat session involved. + Needed as user could change tools related proxy server url. + * next setup the main ui as needed. +* Hide user-input area and tool call validate/trigger area when switching into settings and ensure they + get unhidden when returning back, as needed. +* Save and restore ChatSession config entries, as needed, in localStorage. + * load previously saved config if any, when creating ChatSession + * when ever switching, including into a, ChatSession, Configs of all chat sessions are saved. +* ALERT: If a chat session's tools proxyUrl is changed + * the same will be picked up immidiately wrt all subsequent tool calls which depend on the + tool call proxy server. + * however any resultant changes to the available tool calls list wont get reflected, + till one reloads the program. +* uirefresh helper ensures client side sliding window is always satisfied. + * now it remove messages no longer in the sliding window, so user only sees what is sent to the ai server, + in the chat session messages ui. + * avoids adding additional control specifically for ui, and instead stick to the ai nw handshake related + chat sliding window size (which takes care of try avoid overloading the ai model context size) selected + by user already. User can always change the sliding window size to view past messages beyond the currently + active sliding window size and then switch back again, if they want to. + + +## ToDo + +Is the tool call promise land trap deep enough, need to think through and explore around this once later. + +Add fetch_rss and may be different document formats processing related tool calling, in turn through +the simpleproxy.py if and where needed. + +* Using xmlfiltered and tagDropREs of + * ["^rss:channel:item:(?!title).+$"] one can fetch and extract out all the titles. + * ["^rss:channel:item:(?!title|link|description).+$"] one can fetch and extract out all the + titles along with corresponding links and descriptions + * rather with some minimal proding and guidance gpt-oss generated this to use xmlfiltered to read rss + +Add a option/button to reset the chat session config, to defaults. + +Have a seperate helper to show the user input area, based on set state. And have support for multiple images +if the models support same. It should also take care of some aspects of the tool call response edit / submit, +potentially. + +MAYBE add a special ClientSideOnly role for use wrt Chat history to maintain things to be shown in a chat +session to the end user, but inturn not to be sent to the ai server. Ex current settings, any edits to toolcall, +any tool call or server handshake errors seen (which user might have worked around as needed and continued the +conversation) or so ... + +Updating system prompt, will reset user input area fully now, which seems a good enough behaviour, while +keeping the code flow also simple and straight, do I need to change it, I dont think so as of now. + +For now amn't bringing in mozilla/github/standard-entities pdf, md, mathslatex etal javascript libraries for +their respective functionalities. + +Add support for base64 encoded pdf passing to ai models, when the models and llama engine gain that capability +in turn using openai file - file-data type sub block within content array or so ... diff --git a/tools/server/public_simplechat/docs/details.md b/tools/server/public_simplechat/docs/details.md index 8c475c1599..421264b75a 100644 --- a/tools/server/public_simplechat/docs/details.md +++ b/tools/server/public_simplechat/docs/details.md @@ -622,335 +622,6 @@ gets executed, before tool calling returns and thus data / error generated by th get incorporated in result sent to ai engine on the server side. -### Progress - -#### Done - -Tool Calling support added, along with a bunch of useful tool calls as well as a bundled simple proxy -if one wants to access web as part of tool call usage. - -Reasoning / thinking response from Ai Models is shown to the user, as they are being generated/shared. - -Chat Messages/Session and UI handling have been moved into corresponding Classes to an extent, this -helps ensure that -* switching chat sessions or loading a previous auto saved chat session will restore state including - ui such that end user can continue the chat session from where they left it, even if in the middle - of a tool call handshake. -* new fields added to http handshake in oneshot or streaming mode can be handled in a structured way - to an extent. - -Chat message parts seperated out and tagged to allow theming chat message as needed in future. -The default Chat UI theme/look changed to help differentiate between different messages in chat -history as well as the parts of each message in a slightly better manner. Change the theme slightly -between normal and print views (beyond previous infinite height) for better printed chat history. - -A builtin data store related tool calls, inturn built on browser's indexedDB, without needing any -proxy / additional helper to handle the store. One could use the ai assistant to store ones (ie end -users) own data or data of ai model. - -Trap http response errors and inform user the specific error returned by ai server. - -Initial go at a pdftext tool call. It allows web / local pdf files to be read and their text content -extracted and passed to ai model for further processing, as decided by ai and end user. One could -either work with the full pdf or a subset of adjacent pages. - -SimpleProxy updates -* Convert from a single monolithic file into a collection of modules. -* UrlValidator to cross check scheme and domain of requested urls, - the whitelist inturn picked from config json -* Helpers to fetch file from local file system or the web, transparently -* Help check for needed modules before a particular service path is acknowledged as available - through /aum service path -* urltext and related - logic to drop contents of specified tag with a given id - * allow its use for the web search tool flow - * setup wrt default duckduckgo search result urltext plain text cleanup and found working. - * this works properly only if the html being processed has proper opening and ending tags - around the area of interest. - * remember to specify non overlapping tag blocks, if more than one specified for dropping. - * this path not tested, but should logically work - -Settings/Config default changes - -* Chances are for ai models which dont support tool calling, things will be such that the tool calls -meta data shared will be silently ignored without much issue. So enabling tool calling feature by -default, so that in case one is using a ai model with tool calling the feature is readily available -for use. - -* Revert SlidingWindow ChatHistory in Context from last 10 to last 5 (rather 2 more then origianl, -given more context support in todays models) by default, given that now tool handshakes go through -the tools related side channel in the http handshake and arent morphed into normal user-assistant -channel of the handshake. - -* Enable CachePrompt api option given that tool calling based interactions could involve chat sessions -having ai responses built over multiple steps of tool callings etal. So independent of our client side -sliding window based drop off or even before they kick in, this can help in many cases. - -UI - add ClearChat button and logic. Also add unicode icons for same as well as for Settings. - -Renamed pdf_to_text to fetch_pdf_as_text so that ai model can understand the semantic better. - -sys_date_time tool call has been added. - -Refactor code and flow a bit wrt the client web ui -* Move the main chat related classes into its own js module file, independent of the main - runtime entry point (rather move out the runtime entry point into its own file). This allows - these classes to be referenced from other modules like tools related modules with full access - to these classes's details for developers and static check tools. -* building on same make the Tools management code into a ToolsManager class which is inturn - instantiated and the handle stored in top level Me class. This class also maintains and - manages the web workers as well as routing of the tool calling among others. -* add a common helper for posting results directly to the main thread side web worker callback - handlers. Inturn run the calling through a setTimeout0, so that delayed/missing response - situation rescuer timeout logic etal flow doesnt get messed for now. - -Track tool calling and inturn maintain pending tool calls so that only still valid tool call responses -will be accepted when the asynchronous tool call response is recieved. Also take care of clearing -pending tool call tracking in unhappy paths like when exception noticied as part of tool call execution, -or if there is no response within the configured timeout period. -NOTE: Currently the logic supports only 1 pending tool call per chat session. - -Add support for fetch_xml_as_text tool call, fix importmaps in index.html - -Renamed and updated logic wrt xml fetching to be fetch_xml_filtered. allow one to use re to identify -the tags to be filtered in a fine grained manner including filtering based on tag heirarchy -* avoid showing empty skipped tag blocks - -Logic which shows the generated tool call has been updated to trap errors when parsing the function call -arguments generated by the ai. This ensures that the chat ui itself doesnt get stuck in it. Instead now -the tool call response can inform the ai model that its function call had issues. - -Renamed fetch_web_url_text to fetch_html_text, so that gen ai model wont try to use this to fetch xml or -rss files, because it will return empty content, because there wont be any html content to strip the tags -and unwanted blocks before returning. - -Capture the body of ai server not ok responses, to help debug as well as to show same to user. - -Extract and include the outline of titles (along with calculated numbering) in the text output of pdftext -* ensure that one doesnt recurse beyond a predefined limit. - -Convert NSChatMessage from typedef to Class and update ChatMessageEx, SimpleChat, MultiChatUI classes to -make use of the same. -* helpers consolidated - * helpers to check if given instance contains reasoning or content or toolcall or tool response related - fields/info in them. - * helpers to get the corresponding field values - * some of these helpers where in ChatMessageEx and beyond before -* now the network handshaked fields are declared as undefined by default (instead of empty values). - this ensures that json stringify will automatically discard fields whose values are still undefined. -* add fields wrt tool response and update full flow to directly work with these fields instead of the - xml based serialisation which was previously used for maintaining the different tool response fields - within the content field (and inturn extract from there when sending to server). - * now a dataset based attribute is used to identify when input element contains user input and when - it contains tool call result/response. -* this simplifies the flow wrt showing chat message (also make it appear more cleanly) as well as - identifying not yet accepted tool result and showing in user query input field and related things. -* ALERT: ON-DISK-STORAGE structure of chat sessions have changed wrt tool responses. So old saves will - no longer work wrt tool responses - -UI updates -* update logic to allow empty tool results to be sent to ai engine server -* css - when user input textarea is in tool result mode (ie wrt TOOL.TEMP role), change the background - color to match the tool role chat message block color, so that user can easily know that the input - area is being used for submitting tool response or user response, at any given moment in time. - -Vision -* Add image_url field. Allow user to load image, which is inturn stored as a dataURL in image_url. -* when user presses submit with a message, if there is some content (image for now) in dataURL, - then initialise image_url field with same. -* when generating chat messages for ai server network handshake, create the mixed content type of - content field which includes both the text (from content field) and image (from image_url field) - ie if a image_url is found wrt a image. - * follow the openai format/template wrt these mixed content messages. -* Usage: specify a mmproj file directly or through -hf, additionally had to set --batch-size to 8k - and ubatch-size to 2k wrt gemma3-4b-it -* when showing chat instantiate img elements to show image_urls. - * limit horizontally to max width and vertically to 20% of the height -* show any image loaded by the user, in the corresponding image button -* consolidate dataurl handling into a bunch of helper functions. -* trap quota errors wrt localStorage etal -* dont forget to reset the file type input's value, so that reselecting the same image still - triggers the input's change event. - -SimpleChat class now allows extra fields to be specified while adding, in a generic way using a -object/literal object or equivalent. - -UI Cleanup - msgs spaced out, toolcall edit hr not always, scroll ui only when required, -hide settings/info till user requests, heading gradient - -iDB module -* add open, transact, put and get. Use for chat session save and load -* getKeys used to show Restore/Load button wrt chat sessions. - -ChatMessage -* assign a globally unique (ie across sessions) id to each chat message instance. -* add support for deleting chat message based on its uniquie id in SimpleChat. - * try ensure that adjacent messages remain on screen, after a message is deleted from session. -* add a popover div block in html, which acts as a popup menu containing buttons to work with - individual chat messages. - * experiment and finalise on anchor based relative positioning of the popover menu. - * have a del button, which allows one to delete the currently in focus chat message. - * have a copy button, which allows one to copy the textual content into system clipboard. - -MultiChatUI -* chat_show takes care of showing or clearing tool call edit / trigger as well as tool response - edit / submit. Also show the currently active tool call and its response before it is submitted - was previously only shown in the edit / trigger and edit / submit ui elements, now instead it - also shows as part of the chat session message blocks, so that user can delete or copy these - if needed using the same mechanism as other messages in the chat session. -* use a delete msg helper, which takes care of deleting the msg from chat session as well as - efficiently update ui to any extent by removing the corresponding element directly from existing - chat session ui without recreating the full chat session ui. -* a helper to add a message into specified chat session, as well as show/update in the chat session - ui by appending the chat message, instead of recreating the full chat session ui. -... - -MultiChatUI+ -* both chat_show and chat_uirefresh (if lastN >= 2) both take care of updating tool call edit/trigger - as well as the tool call response edit/submit related ui elements suitably. - * chat_show recreates currently active sliding window of chat session (which could even be full) - * while chat_uirefresh recreates/updates ui only for the lastN messages (prefer in general, as optimal) -* normal user response / query submit as well as tool call response or error submit have been updated - to use the optimal uirefresh logic now. - -Cleanup in general -* Inform end user when loading from a saved session. -* Update starting entry point flow to avoid calling chat_show twice indirectly, inturn leading to - two restore previously saved session blocks. Rather when adding tool calls support, and inturn - had to account for delayed collating of available simpleproxy based tool calls, I forgot to clean - this flow up. -* Make the sys_date_time template description bit more verbose, just in case. -* ui_userinput_reset now also resets associated Role always, inturn - * full on version from chat_show, inturn when session switching. - So user switchs session will reset all user input area and related data, while - also ensuring user input area has the right needed associated role setup. - * partial version from uirefresh, inturn adding user or tool call response messages. -* ui cleanup - * more rounded buttons, chat messages and input area elements. - * make the body very very lightly gray in color, while the user input area is made whiter. - * gradients wrt heading, role-specific individual chat message blocks. - * avoid borders and instead give a box effect through light shadows. - * also avoid allround border around chat message role block and instead have to only one side. - * timeout close popover menu. - * usage notes - * update wrt vision and toggling of sessions and system prompt through main title area. - * fix issue with sliding window size not reflecting properly in context window entry. - * make restore block into details based block, and anchor its position independent of db check. - * avoid unneeded outer overall scrollbar by adjusting fullbody height in screen mode. - * user css variable to define the overall background color and inturn use same to merge gradients - to the background, as well as to help switch the same seemlessly between screen and print modes. - * make the scrollbars more subtle and in the background. - * allow user input textarea to grow vertically to some extent. - * make things rounded across board by default. add some padding to toolcall details block, ... - * use icons without text wrt chat sessions++, new chat, clear chat and settings top level buttons. - * use title property/attribute to give a hint to the user about the button functionality. - * add role specific background gradients wrt the tool call trigger and user input block as well as - fix wrt the tool temp message block. also wrt system input block at top. - * also rename the TEMP role tags to use -TEMP instead of .TEMP, so that CSS rule selectors will - treat such tags like role-TOOL-TEMP as say a proper css class name rather than messing up with - something like role-TOOL.TEMP which will get split to role-TOOL and TEMP and inturn corresponding - css rule doesnt/wont get applied. - * given that now there is a proper visual cue based seperation of the tool call trigger block from - surrounding content, using proper seperate tool call specific coloring, so remove the
horiz - line seperation wrt tool call trigger block. - * however retain the horizontal line seperation between the tool trigger block and user input block, - given that some users and some ai dont seem to identify the difference very easily. - * work around firefox currently not yet supporting anchor based relative positioning of popover. - * ensure the new uirefresh flow handles the following situations in a clean way like - * a new chat session clearing out usagenote+restore+currentconfig, as user starts chatting - * the settings ui getting cleared out as user starts/continues chatting directly into user input - without using chat session button to switch back to the chat. -* Auto ObjPropsEdit UI - * allow it to be themed by assigning id to top level block. - * fix a oversight (forgotten $) with use of templated literals and having variables in them. - * ensure full props hierarchy is accounted for when setting the id of elements. -* Chat button to toggle sessions buttons and system prompt. -* Use unix date format markers wrt sys_date_time toolcall, also add w (day of week). -* Free up the useful vertical space by merging chat sessions buttons/tabs into heading -* Allow user to load multiple images and submit to ai as part of a single user message. -* Use popover ui to allow user to view larger versions of loaded images as well as remove before submitting - to ai, if and when needed. -* Add external_ai toolcall with no access to internet or tool calls (helps avoid recursive ai tool calling). - User can see response generated by the external ai tool call, as and when it is recieved. -* Maintain chat session specific DivStream elements, and show live ai responses (through corresponding - DivStream) wrt the current chat session as well as any from the external ai tool call session. - In future, if the logic is updated to allow switching chat session ui in the middle of a pending tool call - or pending ai server response, things wont mess up ui, as they will be updating their respective DivStream. - Also switching sessions takes care of showing the right DivStream ie of currently switched to chat, so that - end user can see the streamed response from that chat session as it is occuring. -* Cleanup the tool call descriptions and verbose messages returned a bit. - -Chat Session specific settings -* Needed so that one could - * setup a different ai model / engine as the external ai backend. - * interact with different independent ai models / engines / parallel instances in general -* Move needed configs from Me into a seperate Config class. - * also move ShowSettings, ShowInfo etal into Config class -* SimpleChat maintains an instance of Config class instead of Me. -* ToolsManager and the different tool call modules have been updated to - * have seperate init and setup calls. - * init is called at the begining - * setup will be called when ever a chat session is being created - and or in future when ever any config of interest changes. - * pick needed config etal from the specified chatId's config and not any global config. -* Starting flow updated to chain the different logical blocks of code - * first allow tools manager to be initd - * next create the needed default set of sessions, while parallely calling tool manager setup as needed. - * ensures that the available list of tool calls match the config of the chat session involved. - Needed as user could change tools related proxy server url. - * next setup the main ui as needed. -* Hide user-input area and tool call validate/trigger area when switching into settings and ensure they - get unhidden when returning back, as needed. -* Save and restore ChatSession config entries, as needed, in localStorage. - * load previously saved config if any, when creating ChatSession - * when ever switching, including into a, ChatSession, Configs of all chat sessions are saved. -* ALERT: If a chat session's tools proxyUrl is changed - * the same will be picked up immidiately wrt all subsequent tool calls which depend on the - tool call proxy server. - * however any resultant changes to the available tool calls list wont get reflected, - till one reloads the program. -* uirefresh helper ensures client side sliding window is always satisfied. - * now it remove messages no longer in the sliding window, so user only sees what is sent to the ai server, - in the chat session messages ui. - * avoids adding additional control specifically for ui, and instead stick to the ai nw handshake related - chat sliding window size (which takes care of try avoid overloading the ai model context size) selected - by user already. User can always change the sliding window size to view past messages beyond the currently - active sliding window size and then switch back again, if they want to. - - -#### ToDo - -Is the tool call promise land trap deep enough, need to think through and explore around this once later. - -Add fetch_rss and may be different document formats processing related tool calling, in turn through -the simpleproxy.py if and where needed. - -* Using xmlfiltered and tagDropREs of - * ["^rss:channel:item:(?!title).+$"] one can fetch and extract out all the titles. - * ["^rss:channel:item:(?!title|link|description).+$"] one can fetch and extract out all the - titles along with corresponding links and descriptions - * rather with some minimal proding and guidance gpt-oss generated this to use xmlfiltered to read rss - -Add a option/button to reset the chat session config, to defaults. - -Have a seperate helper to show the user input area, based on set state. And have support for multiple images -if the models support same. It should also take care of some aspects of the tool call response edit / submit, -potentially. - -MAYBE add a special ClientSideOnly role for use wrt Chat history to maintain things to be shown in a chat -session to the end user, but inturn not to be sent to the ai server. Ex current settings, any edits to toolcall, -any tool call or server handshake errors seen (which user might have worked around as needed and continued the -conversation) or so ... - -Updating system prompt, will reset user input area fully now, which seems a good enough behaviour, while -keeping the code flow also simple and straight, do I need to change it, I dont think so as of now. - -For now amn't bringing in mozilla/github/standard-entities pdf, md, mathslatex etal javascript libraries for -their respective functionalities. - -Add support for base64 encoded pdf passing to ai models, when the models and llama engine gain that capability -in turn using openai file - file-data type sub block within content array or so ... - - ### Debuging the handshake and beyond When working with llama.cpp server based GenAi/LLM running locally, to look at the handshake directly