summaryrefslogtreecommitdiff
path: root/moneyjsx/src/support-tutorial.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'moneyjsx/src/support-tutorial.tsx')
-rw-r--r--moneyjsx/src/support-tutorial.tsx156
1 files changed, 156 insertions, 0 deletions
diff --git a/moneyjsx/src/support-tutorial.tsx b/moneyjsx/src/support-tutorial.tsx
new file mode 100644
index 0000000..a1d8a14
--- /dev/null
+++ b/moneyjsx/src/support-tutorial.tsx
@@ -0,0 +1,156 @@
+import $ from "jquery";
+import * as JSX from './jsx';
+
+import { Dropdown, DropdownItem, Page, GroupBox } from './components';
+
+interface TutorialPage {
+ title: string,
+ content: HTMLElement
+}
+
+const pages: TutorialPage[ ] = [
+ {
+ title: "Choosing the right model",
+ content:
+ <span>
+ It would get quite wordy if we were to discuss every model in detail that we provide,
+ so our best suggestion is to check out our <a onclick={ () => JSX.navigate( "/models" ) }>Models</a> page.
+ <br />
+ Here, you can see the various personalities our models come with by default,
+ the provided tooling, as well as licensing information for each respective model!
+ </span>
+ },
+ {
+ title: "Effective chatting",
+ content:
+ <span>
+ Effective chatting best practices are also, as with most things, on a model-by-model basis.
+ However, there are some good standards to abide by when interacting with any LLM to increase effectiveness.
+ We'll list a few of our personally notable ones here, in no particular order:
+ <div style="padding: 10px 10px 0;">
+ <b>1) Prompting :</b> A good prompt can drastically change the output of a large language model,
+ effective prompts will be elaborated on in the <a onclick={ () => selectPage( pages[ 2 ] ) }>next</a> section.
+ <br /><br />
+ <b>2) Clarify :</b> As the saying "garbage in, garbage out" goes with computing, it continues here to an extraordinary extent.
+ One of, if not, the most effective methods of improving LLM responses is by providing and continually improving:
+ queries, instructions, sample code, or other data you feed into the language model that fits your current need.
+ <br /><br />
+ <b>3) Reminders :</b> LLMs, just like humans, need reminders sometimes. If you are sending large amounts of data, or
+ if you are having a model make many web requests, it's very likely you will leave the model's
+ context window. This can lead to unpredictable and unexplainable results, so do with that information
+ what you will.
+ <br /><br />
+ <b>4) Tooling :</b> Luckily for you, utilizing our provided <a onclick={ () => selectPage( pages[ 4 ] ) }>tooling</a> is not something that you will have to initiate.
+ Models equipped with tooling functionality will automatically use our provided tools to better complete your requests.
+ All this being said, you will have to "manage" your tooling. For web requests, as mentioned above, they can quickly
+ devour your avaiable context window and cause erroneous responses to occur. Notes as well, when above capacity, can
+ cause the same. We do provide a way to manage notes, and we can only suggest to keep web requests to a minimum.
+ </div>
+ </span>
+ },
+ {
+ title: "Prompting",
+ content:
+ <span>
+ We feel like this cannot be understated, so we will mention it again.
+ Each model is different, and will respond differently to the same query, prompt, image, etc.
+ This is what we describe as "personalities".
+ <br />
+ However, as with chatting, we can provide general advice that applies across the board.
+ As well, we will attach some resources below that we have used in our journey in this process.
+ We feel these are of good quality and dig into a low level in layman's terms to help you
+ understand easily.
+ <br />
+ <div style="padding: 10px 10px 0;">
+ <b>1) Prompt format matters :</b> As seen in the resources below, there are many types of prompting.
+ Using the wrong style of prompt for the wrong purpose could hinder
+ service performance rather than improve it. Make sure you have a
+ rudimentary understanding of what prompting is and what it does before
+ embarking on your quest.
+ <br /><br />
+ <b>2) Prompt interferes with context window :</b> This is a good one to keep in mind. Though it will
+ likely never be an issue for the average user, advanced
+ power users may find a point in which a lengthy prompt
+ causes a model to *only* output erroneous data. Keeping
+ your prompt clear and concise should be the goal of any
+ power user.
+ <br /><br />
+ <b>3) Test, test, and test again :</b> This is the most important step. The true essence of trial and error
+ is found here. Attempting different variations, structures, and wordings
+ of the same prompt can lead to vastly different outcomes, all coinciding
+ with the previously discussed points.
+ </div>
+ <br />
+ The aforementioned resources are as follows, in an order that we'd suggest approaching this topic with :
+ <div style="padding: 10px 10px 0;">
+ 1) <a href="https://github.blog/ai-and-ml/generative-ai/prompt-engineering-guide-generative-ai-llms/" target="_blank">What is prompting</a>
+ <br />
+ 2) <a href="https://github.com/tghurair/agentic-prompting/tree/main/techniques" target="_blank">Basic prompting examples</a>
+ <br />
+ 3) <a href="https://www.promptingguide.ai/models" target="_blank">Model-specific prompting tips</a>
+ </div>
+ </span>
+ },
+ {
+ title: "Modules",
+ content:
+ <span>
+ Modules are a product that we offer outside of being a convenient host and frontend for a wide array of hand-picked open source LLMs.
+ They can be created using a fraction of our available <a onclick={ () => selectPage( pages[ 5 ] ) }>api</a>, and still create a lively environment for any
+ chatbot, website, video game dialog, or any other endeavour only the mind can uncover.
+ <br />
+ At the moment, our pricing for module implementation to your service starts at $250 USD, and of course goes up with project scope.
+ </span>
+ },
+ {
+ title: "Tools",
+ content:
+ <span>
+ To not repeat ourselves too much here, we'd suggest reading #4 of <a onclick={ () => selectPage( pages[ 1 ] ) }>effective chatting</a> before this portion.
+ <br /><br />
+ As stated there, our provided tooling is initiated automatically by the will of the selected model, but you are in charge
+ of managing its resource consumption. If you notice it taking a lot of notes, it will be worthwhile to clean out notes that
+ aren't so important. If your current conversation has a lot of web requests in it's history, it could prove resourceful to
+ start a new chat to initiate a new context window to refreshing the models "short-term memory", while carrying over useful
+ notes from past conversations. These nuanced tweaks will become frictionless and scale overtime to further hone in the model
+ to become tailored to you, the user.
+ </span>
+ },
+ {
+ title: "API",
+ content:
+ <span>
+ Our OpenAI-compatible API is the core that powers this entire site.
+ As you can see for yourself in the inspector, this site is written completely with an in-house framework.
+ None of the nonsense that plagues the modern industry. We understand the importance of simplicty.
+ What makes this all possible, outside of our ability to "Make It Work" as developers, is our robust API.
+
+ To dig deeper and become a power user, please visit <a onclick={ () => JSX.navigate( "/api" ) }>this</a> page.
+ </span>
+ }
+];
+
+let selected_page: TutorialPage = pages[ 0 ];
+export default function Tutorial() {
+ return <Page>
+ <GroupBox title="Tutorial" style="width: 85%; display: flex;">
+ <div id="page-selector-wrapper">
+ <Dropdown title={ selected_page.title } inline id="tutorial-links-box">
+ { pages.map( ( p ) => <DropdownItem onclick={ () => selectPage( p ) }> { p.title } </DropdownItem> ) }
+ </Dropdown>
+ </div>
+
+ <div class="tutorial-section">
+ <span id="tutorial-content">
+ { selected_page.content }
+ </span>
+ </div>
+ </GroupBox>
+ </Page>
+}
+
+function selectPage( page: TutorialPage ) {
+ selected_page = page;
+ $( "#tutorial-links-box" ).text( page.title ); // moneyjsx todo @nave : FIX PLEASE, I SHOULDN'T HAVE TO DO THIS ( IT'S BROKEN ON MODEL PAGE AS WELL ) -- intuitive functionality is that it rerenders when the selected_page var is modified
+ $( "#tutorial-content" ).html( page.content ); // if we could add a reactive body to that as well that responds when selection changed, we could remove this entire need for onclick, but that's also probably a fuck ton of work .
+}